發(fā)布時(shí)間:2022-03-05
欄目:電商資訊
這兩個(gè)輸入框的值都是我從KV(Redis之類的存儲(chǔ)中間件)里面獲取到的,也是可以實(shí)時(shí)修改的,我自作聰明,想著KV里面假如沒(méi)值,就默認(rèn)取一個(gè)靜態(tài)變量,這樣有個(gè)兜底,在類加載的時(shí)候加載靜態(tài)變量,我取的時(shí)候也效率高了。
這就也為我后面的Bug埋下了伏筆,問(wèn)題是這個(gè)Bug煩就煩在他在預(yù)發(fā)環(huán)境是好的,線上卻是壞的。
先看看代碼怎么寫的:
可以看到代碼里面,我是在靜態(tài)代碼塊去KV取值,假如有值就用KV的做初始值,沒(méi)取到我也有默認(rèn)值,我當(dāng)時(shí)還在想自己的構(gòu)思真巧妙,用KV比DB效率高,用常量去做兜底,不至于沒(méi)配置的情況沒(méi)有值,報(bào)空指針啥的。
當(dāng)時(shí)一個(gè)勁給自己加油打氣,一個(gè)勁的妙啊,不知道自己寫了多蠢的代碼。
這樣寫看似沒(méi)什么問(wèn)題,但是我這個(gè)值是可以修改的這就有問(wèn)題了,而且我有幾個(gè)地方還是取的變量,不是一直取的KV。
而且常量被我當(dāng)變量用,也都違反了這玩意的初衷了。

我上線后,三歪就說(shuō):敖丙出大問(wèn)題了,為啥我刷新一下值就不對(duì)了,再刷新值就回來(lái)了。
我驚恐萬(wàn)分,深知我寫了BUG,我不著痕跡的擦去我鬢角的汗水,深呼吸了一下。
回答道:我代碼還沒(méi)寫好呢,你怎么亂點(diǎn),我告訴過(guò)你不要亂點(diǎn)的,現(xiàn)在你點(diǎn)壞了吧。
三歪似乎真的以為他錯(cuò)了,委屈巴巴的啥也沒(méi)說(shuō)就默默離開了。
這個(gè)時(shí)候我馬上打開電腦,也顧不上歪歪的感受了,思緒轉(zhuǎn)的飛快,開始在鬧海中構(gòu)建整個(gè)值傳遞的鏈路。

我改了頁(yè)面的值,之后我也改了這個(gè)靜態(tài)變量和KV的值,但是我在線上發(fā)現(xiàn)我刷新頁(yè)面一會(huì)是修改之后的,一會(huì)是修改之前的值.
這就希罕了呀,主要是在預(yù)發(fā)還不能復(fù)現(xiàn),這就很坑爹了,難受呀歪歪。
Tip:預(yù)發(fā)指的是,代碼跟線上一樣,數(shù)據(jù)庫(kù)一樣,環(huán)境配置不一樣。
我把代碼看了一遍又一遍,還是沒(méi)發(fā)現(xiàn)問(wèn)題。
在當(dāng)天那個(gè)飽暖思淫欲的下午飯之后我,忽然靈光一閃發(fā)現(xiàn)了問(wèn)題的核心,預(yù)發(fā)是好的因?yàn)樗且慌_(tái)機(jī)器。
而我們線上的機(jī)器是負(fù)載均衡的,有兩臺(tái)機(jī)器,我修改一次只改了一臺(tái)機(jī)器的值,另外一臺(tái)沒(méi)修改到。
那么問(wèn)題就簡(jiǎn)單了,我們看下圖:
預(yù)發(fā)情況,是單機(jī),不管我怎么讀怎么修改,每次數(shù)據(jù)都是正確的(這里我還沒(méi)意識(shí)到其實(shí)每次去取變量是不對(duì)的)。
但是線上不一樣,服務(wù)器啟動(dòng)的時(shí)候給每臺(tái)機(jī)器賦值了,這樣的情況假如只是讀是沒(méi)問(wèn)題的(怪不得靜態(tài)常量都是private的,能修改的話基本上都有這個(gè)問(wèn)題)。
但是假如修改,你修改的請(qǐng)求只是打到了一臺(tái)機(jī)器上,假如下次負(fù)載均衡請(qǐng)求到了這個(gè)機(jī)器,那么你很幸運(yùn),結(jié)果是對(duì)的,但是往往負(fù)載均衡算法就是那么公平,雨露均沾這樣的情況1/2的請(qǐng)求,都會(huì)拿到錯(cuò)誤的結(jié)果。
而且這個(gè)地方的問(wèn)題還有一個(gè)就是,應(yīng)該是修改KV之后,修改變量,我有的地方取的是變量,因?yàn)槲蚁朊看畏凑几牧耍∫矝](méi)事。

其實(shí)正確的做法是我每次去都讀KV就好了,只有KV為空的時(shí)候才去讀靜態(tài)變量,作為一種兜底方案,不應(yīng)該去改變常量的值。
而且大家要知道,我修改KV成功萬(wàn)一修改常量的時(shí)候出錯(cuò)了呢?你取常量的值就不對(duì)了。
所以查詢,修改應(yīng)該這樣做:
主要是想提醒大家,謹(jǐn)慎操作靜態(tài)常量,能不變就不變,不要寫這么騷的操作了,我這算少的很多40、50臺(tái)線上機(jī)器的服務(wù),這種問(wèn)題是真的難發(fā)現(xiàn)。
我是萬(wàn)萬(wàn)沒(méi)想到,我居然寫出這種代碼,下次再寫出來(lái),只能讓歪歪不要亂點(diǎn)了,免得又點(diǎn)壞了哈哈。
文章地址:http://www.meyanliao.com/article/online/10299.html

- 1互聯(lián)網(wǎng)對(duì)傳統(tǒng)企業(yè)的沖擊有多大
- 2美團(tuán)再因不正當(dāng)競(jìng)爭(zhēng)敗訴新反法互聯(lián)網(wǎng)專條首次適用外賣領(lǐng)域!
- 32021互聯(lián)網(wǎng)十件大事對(duì)不起賈躍亭你只能排第四
- 4互聯(lián)網(wǎng)宣傳做的就是用戶體驗(yàn)
- 5互聯(lián)網(wǎng)創(chuàng)業(yè)到底需要怎樣的能力
- 6適合上班族的25個(gè)副業(yè)(適合上班族的互聯(lián)網(wǎng)副業(yè))
- 7互聯(lián)網(wǎng)的世界沒(méi)有永遠(yuǎn)的敵人只有永遠(yuǎn)的利益
- 8押?jiǎn)h進(jìn)駐天線貓助力互聯(lián)網(wǎng)數(shù)碼產(chǎn)品寄存行業(yè)經(jīng)濟(jì)持續(xù)發(fā)展
- 9互聯(lián)網(wǎng)公司如何做好品牌定位
- 102021年互聯(lián)網(wǎng)金融發(fā)展回顧冬去春欲來(lái)改弦當(dāng)更張