今天寫文章不太有狀態(tài)设预,憋了半天沒憋出一句話。
可能犁河,黔驢技窮鳖枕。
講個故事吧,之前在上一家公司發(fā)生的一次生產(chǎn)事故桨螺。
上一家公司做的是支付相關(guān)的業(yè)務(wù)宾符。
專業(yè)名詞是聚合支付。
可以理解為把支付寶灭翔,微信還有其他支付渠道匯總成一個二維碼魏烫。
場景就是,你去買東西,不管用微信掃碼哄褒,還是支付寶掃碼稀蟋,還是其他,可以掃同一個二維碼來完成支付流程呐赡。
有一次上線部署這套系統(tǒng)時退客,發(fā)生了巨大bug。
大家正常使用app發(fā)生一些bug链嘀,可能就頁面打不開萌狂。卡死之類管闷。
頂多是用戶體驗不好粥脚。
但是窃肠,支付相關(guān)的包个,是和錢打交道的。
扣款流程出現(xiàn)bug冤留,可能分分鐘幾百萬的賬就走錯了碧囊。
然而,這次偏偏還正好是支付流程出現(xiàn)了問題纤怒。
啥問題呢糯而?
大家想一個場景,比如你要買一瓶雪碧泊窘,然后你掃完二維碼熄驼,輸入完密碼,之后的流程就是烘豹,我們這套系統(tǒng)會去你的賬戶扣款瓜贾,如果扣款成功,那么商戶就會收到“錢已到賬”的信息携悯。
問題出在哪呢祭芦?
系統(tǒng)把扣款失敗的信息,處理成了扣款成功憔鬼。
這就很要命了龟劲,你賬戶上明明只有1元錢,根本不夠買雪碧的轴或。
然而昌跌,系統(tǒng)卻告訴商家,扣款成功了照雁。
這筆錢是需要第二天和商家對賬結(jié)算的蚕愤。
如果錢追不回來,那就要賠償給商家。
好巧不巧审胸,當(dāng)時系統(tǒng)對接了某手機品牌的線上商城亥宿,相當(dāng)于是系統(tǒng)的商家。
他們正好在做活動砂沛,當(dāng)天購買的人很多烫扼。
一天下來,這種本來買不起碍庵,但是系統(tǒng)誤判扣款成功的流水就兩百多萬映企。
第二天系統(tǒng)對賬,傻眼了静浴。
這錢根本就沒扣成功堰氓,但是商城那邊已經(jīng)發(fā)貨了。
兩邊的大佬開始對接苹享。
商家那邊的觀點是双絮,我收到你扣款成功的消息,才開始發(fā)貨得问。責(zé)任肯定不在我們這邊囤攀。
也確實是這個道理。
最后怎么解決的呢宫纬?
銀行內(nèi)部悄悄寫了個定時任務(wù)焚挠,到點就自動去扣這些占便宜用戶的賬戶。每小時去扣一次漓骚。
扣了一個月蝌衔,追回來80%的損失。
不過蝌蹂,這種操作是違規(guī)的噩斟,未經(jīng)客戶允許,擅自扣款叉信。所以是內(nèi)部操作亩冬。
被銀監(jiān)會知道的話,要挨處分硼身。
怎么會出現(xiàn)這種bug呢硅急?
接口調(diào)用的時候,有通信成功和業(yè)務(wù)成功兩層報文佳遂。
通信成功的前提下营袜,判斷業(yè)務(wù)成功才有意義。
然而丑罪,系統(tǒng)卻把通信成功荚板,業(yè)務(wù)失敗這種情況凤壁,當(dāng)成了扣款成功。
這種級別的生產(chǎn)事故跪另,暴露開發(fā)流程的重大問題拧抖。
開發(fā)組的同學(xué)留下這種低級bug。
測試組的同學(xué)也沒測出來這個bug免绿。
原本6個月年終獎唧席,沒了。