大厂线上案例复盘--代码漏洞
萬無一失卻實(shí)際上是形同虛設(shè)的代碼邏輯漏洞
這是一則發(fā)生在某大廠的真實(shí)案例,出于脫敏名字這且不說。
?
這個(gè)系統(tǒng)因?yàn)榈谝淮紊暇€,流量非常的大。
所以需要灰度上線,所謂灰度方案很短,比如按照地理位置,先選擇某個(gè)訪問量小的地區(qū)比如西部青海。
然后逐步放量,幾天以后增加幾個(gè)省再看看,然后如果沒問題擴(kuò)大到全國。
灰度是沒有問題的,也是必要的。
?
APP--->B系統(tǒng)--->新系統(tǒng)
這個(gè)系統(tǒng)提供了一個(gè)接口給B調(diào)用
由于B系統(tǒng)是全國開放,所以B的流量很大,B上面沒有做地區(qū)限制,他的流量會都打到新系統(tǒng)上。
所以一開始不是青海的用戶就不走這個(gè)系統(tǒng)的邏輯。
由于這個(gè)系統(tǒng)有自己的后臺,運(yùn)營人員在后臺會設(shè)置不同地區(qū)的業(yè)務(wù)邏輯。
但是開發(fā)你也不知道運(yùn)營是什么時(shí)候設(shè)置其他地區(qū),這個(gè)灰度實(shí)際上是由運(yùn)營來控制的。
所以開發(fā)人員就先從數(shù)據(jù)庫進(jìn)行查詢已經(jīng)設(shè)置的地區(qū),把設(shè)計(jì)的地區(qū)直接緩存在JVM內(nèi)存李,不在這個(gè)地區(qū)的都直接跳過,這樣就不會走后面的業(yè)務(wù)邏輯也就是查庫等等。
看起來一切沒有問題,但是實(shí)際上出現(xiàn)了一個(gè)缺陷,就是上線之初運(yùn)營人員自己測試的時(shí)候先設(shè)置了“全國”,然后又刪除了這個(gè)配置,但是數(shù)據(jù)庫是軟刪除,地區(qū)是存在一個(gè)關(guān)聯(lián)表里。
開發(fā)人員沒有對查詢出來設(shè)置的地區(qū)進(jìn)一步的限制,該地區(qū)必須是有效的,而不是已經(jīng)刪除的也就是地區(qū)信息要去配置表進(jìn)行關(guān)聯(lián)。
所以系統(tǒng)一上線,這個(gè)看似萬無一失卻形同虛設(shè)的優(yōu)化點(diǎn)一點(diǎn)作用也沒有。
?
問題本身不復(fù)雜,無非是代碼邏輯不嚴(yán)謹(jǐn),只測試了業(yè)務(wù)邏輯,沒有測試這個(gè)灰度邏輯。
開發(fā)+測試 都有需要改進(jìn)之處,實(shí)際上現(xiàn)實(shí)中千千萬萬的bug都是諸如此類的。
總結(jié)
以上是生活随笔為你收集整理的大厂线上案例复盘--代码漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从一个需求看问题的无限复杂化和简单化
- 下一篇: 索引与联合索引使用注意