www.亚洲男人天堂_欧美最顶级的aⅴ艳星_国产精品免费网站_欧美日韩在线一区_欧美床上激情在线观看_日韩av色在线_国产精品亚洲综合天堂夜夜_欧美做爰性生交视频_国产成人高潮免费观看精品_久久天天躁夜夜躁狠狠躁2022_国产美女久久精品香蕉69_亚洲专区在线视频_国产精品夜间视频香蕉_国产成人综合一区二区三区_国产精品69av_岛国av午夜精品

網絡消費網 >  IT > > 正文
資訊:7行代碼讓B站崩潰3小時 竟因“一個詭計多端的0”
時間:2022-07-24 15:26:03

一個小小字符“0”,竟引得B站全面崩潰。

不知你是否還記得那一夜,B站“大樓停電”、“服務器爆炸”、“程序員刪庫跑路”的徹夜狂歡。(手動狗頭)

時隔一年,背后“真兇”現在終于被阿B披露出來——


(資料圖片)

沒想到吧,就是這么簡單幾行代碼,直接干趴B站兩三個小時,搞得B站程序員徹夜無眠頭發狂掉。

你可能會問,這不就是個普普通通用來求最大公約數的函數嗎,怎么就有如此大的威力?

背后一樁樁一件件,歸根結底其實就一句話:0,它真的不興除啊。

具體詳情,咱們還是一起來看看“事故報告”。

字符串“0”引發的“血案”

先來說道說道引發慘案的根本原因,也就是開頭貼出的這個gcd函數。

學過一點編程知識的小伙伴應該都知道,這是一種用輾轉相除法來計算最大公約數的遞歸函數。

跟我們手算最大公約數的方法不同,這個算法是醬嬸的:

舉個簡單的例子,a=24,b=18,求a和b的最大公約數;

a除以b,得到的余數是6,那么就讓a=18,b=6,然后接著往下算;

18除以6,這回余數是0,那么6也就是24和18的最大公約數了。

也就是說,a和b反復相除取余數,直到b=0,函數中:

if b==0 then return a end

這個判斷語句生效,結果就算出來了。

基于這樣的數學原理,我們再來看這段代碼,似乎沒什么問題:

但如果輸入的b是個字符串“0”呢?

B站的技術解析文章中提到,這段出事的代碼是用Lua寫的。Lua具有這么幾個特點:

這是一種動態類型語言,常用習慣里變量不需要定義類型,直接給變量賦值就行。

Lua在對一個數字字符串進行算術操作時,會嘗試將這個數字字符串轉成一個數字。

在Lua語言中,數學運算n%0的結果是nan(Not A Number)。

我們來模擬一下這個過程:

1、當b是一個字符串“0”時,由于這個gcd函數沒有對其進行類型校驗,因此在碰上判定語句時,“0”不等于0,代碼中“return _gcd(b, a%b)”觸發,返回_gcd(“0”, nan)。

2、_gcd(“0”, nan)再次被執行,于是返回值變成了_gcd(nan, nan)。

這下就完犢子了,判定語句中b=0的條件永遠沒法達到,于是,死循環出現了。

也就是說,這個程序開始瘋狂地原地轉圈,并且為了一個永遠得不到的結果,把CPU占了個100%,別的用戶請求自然就處理不了了。

那么問題來了,這個“0”它到底是怎么進去的呢?

官方說法是:

在某種發布模式中,應用的實例權重會短暫地調整為0,此時注冊中心返回給SLB(負載均衡)的權重是字符串類型的“0”。此發布環境只有生產環境會用到,同時使用的頻率極低,在SLB前期灰度過程中未觸發此問題。

SLB在balance_by_lua階段,會將共享內存中保存的服務IP、Port、Weight作為參數傳給lua-resty-balancer模塊用于選擇upstream server,在節點weight=“0”時,balancer模塊中的_gcd函數收到的入參b可能為“0”。

bug是如何定位的

以“事后諸葛亮”的視角來看,這個引發B站全面崩潰的根本原因多少有點讓人直呼“就這”。

但從當事程序員的視角來看,事情確實沒有辣么簡單。

當天晚上22:52分——大部分程序員才剛下班或者還沒下班的節骨眼(doge),B站運維收到服務不可用的報警,第一時間懷疑機房、網絡、四層LB、七層SLB等基礎設施出現問題。

然后立馬和相關技術人員拉了個緊急語音會議開始處理。

5分鐘后,運維發現承載全部在線業務的主機房七層SLB的CPU占用率達到了100%,無法處理用戶請求,排除其他設施后,鎖定故障為該層。

(七層SLB是指基于URL等應用層信息的負載均衡。負載均衡通過算法把客戶請求分配到服務器集群,從而減少服務器壓力。)

萬般緊急之時,小插曲還現了:遠程在家的程序員登上VPN卻沒法進入內網,只好又去call了一遍內網負責人,走了個綠色通道才全部上線(因為其中一個域名是由故障的SLB代理的)。

此時已經過去了25分鐘,搶修正式開始。

首先,運維先熱重啟了一遍SLB,未恢復;然后嘗試拒絕用戶流量冷重啟SLB,CPU依然100%,還是未恢復。

接著,運維發現多活機房SLB請求大量超時,但CPU未過載,正準備重啟多活機房SLB時,內部群反應主站服務已恢復,視頻播放、推薦、評論、動態等功能已基本正常。

此時是23點23分,距離事故發生31分鐘。

值得一提的是,這些功能恢復其實是事發之時被網友們吐槽的“高可用容災架構”發揮了作用。

至于這道防線為啥一開始沒發揮作用,里頭可能還有你我一點鍋。

簡單來說,就是大家伙點不開B站就開始瘋狂刷新,CDN流量回源重試 + 用戶重試,直接讓B站流量突增4倍以上,連接數突增100倍到千萬級別,多活SLB就給整過載了。

不過,并不是所有服務都搞了多活架構,至此事情并沒完全解決。

接下來的半個小時里,大家做了很多操作,回滾了最近兩周左右上線的Lua代碼,都沒把剩余的服務恢復。

時間來到了12點,沒有辦法了,“先不管bug是怎么出來的,把服務全恢復了再說”。

簡單+粗暴:運維直接耗時一小時重建了一組全新的SLB集群。

凌晨1點,新集群終于建好:

一邊,有人負責陸續將直播、電商、漫畫、支付等核心業務流量切換到新集群,恢復全部服務(凌晨1點50分全部搞定,暫時結束了崩了逼近3個小時的事故);

另一邊,繼續分析bug原因。

在他們用分析工具跑出一份詳細的火焰圖數據后,那個搞事的“0”才終于露出了一點端倪:

CPU熱點明顯集中在一個對lua-resty-balancer模塊的調用中。而該模塊的_gcd函數在某次執行后返回了一個預期外的值:NaN。

同時,他們也發現了觸發誘因的條件:某個容器IP的weight=0。

他們懷疑是該函數觸發了jit編譯器的某個bug,運行出錯陷入死循環導致SLB CPU 100%。

于是就全局關閉了jit編譯,暫時規避了風險。一切都解決完后,已經快4點,大家終于暫時睡了個好覺。

第二天大家也沒閑著,馬不停蹄地在線下環境復現了bug后,發現并不是jit編譯器的問題,而是服務的某種特殊發布模式會出現容器實例權重為0的情況,而這個0是個字符串形式。

正如前面所說,這個字符串“0”在動態語言Lua中的算術操作中,被轉成了數字,走到了不該走的分支,造成了死循環,引發了b站此次前所未見的大崩潰事件。

遞歸的鍋還是弱類型語言的鍋?

不少網友都還對這次事故記憶猶新,有回想起自己就是以為手機不行換電腦也不行的,也有人還記得當時5分鐘后此事就上了熱搜。

大家都很詫異,就這么一個簡單的死循環就能造成如此大的網站崩服。

不過,有人指出,死循環不罕見,罕見的是在SLB層、在分發過程出問題,它還不像在后臺出問題很快能重啟解決。

為了避免這種情況發生, 有人認為要慎用遞歸,硬要用還是設置一個計數器,達到一個業務不太可能達到的值后直接return掉。

還有人認為這不怪遞歸,主要還是弱類型語言的鍋。

以此還導致了“詭計多端的‘0’”這一打趣的說法。

另外,由于事故實在是耽誤了太久、太多事兒,當時B站給所有用戶補了一天大會員。

有人就在此算了一筆賬,稱就是這7行代碼,讓b站老板一下虧了大約1,5750,0000元。(手動狗頭)

對于這個bug,你有什么想吐槽的?

參考鏈接:

[1]《2021.07.13 我們是這樣崩的》by 嗶哩嗶哩技術

https://mp.weixin.qq.com/s/nGtC5lBX_Iaj57HIdXq3Qg

關鍵詞: 7行代碼讓B站崩潰3小時 竟因一個詭計多

版權聲明:
    凡注明來網絡消費網的作品,版權均屬網絡消費網所有,未經授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明"來源:網絡消費網"。違反上述聲明者,本網將追究其相關法律責任。
    除來源署名為網絡消費網稿件外,其他所轉載內容之原創性、真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考并自行核實。
熱文

網站首頁 |網站簡介 | 關于我們 | 廣告業務 | 投稿信箱
 

Copyright © 2000-2020 www.yushuoyun.cn All Rights Reserved.
 

中國網絡消費網 版權所有 未經書面授權 不得復制或建立鏡像
 

聯系郵箱:920 891 263@qq.com

備案號:京ICP備2022016840號-15

營業執照公示信息

www.亚洲男人天堂_欧美最顶级的aⅴ艳星_国产精品免费网站_欧美日韩在线一区_欧美床上激情在线观看_日韩av色在线_国产精品亚洲综合天堂夜夜_欧美做爰性生交视频_国产成人高潮免费观看精品_久久天天躁夜夜躁狠狠躁2022_国产美女久久精品香蕉69_亚洲专区在线视频_国产精品夜间视频香蕉_国产成人综合一区二区三区_国产精品69av_岛国av午夜精品

        午夜精彩视频在线观看不卡| 榴莲视频成人在线观看| 国产亚洲一区二区三区在线观看| 在线性视频日韩欧美| 欧美精品www| 黄色成人av| 亚洲一区二区在线看| 欧美激情二区三区| 亚洲级视频在线观看免费1级| 亚洲免费视频在线观看| 亚洲精品国产精品国自产观看| 国产精品亚洲综合久久| 男男成人高潮片免费网站| 欧美一区二区三区在线播放| 欧美亚洲成人精品| 久久久久久久欧美精品| 欧美一级视频| 亚洲国产日韩一级| 久热成人在线视频| 日韩一级裸体免费视频| 1204国产成人精品视频| 在线电影院国产精品| 欧美国产日本| 国产综合第一页| 一本一本久久a久久精品牛牛影视| 欧美午夜在线观看| 国产精品―色哟哟| 欧美久久久久久久久久| 最新日韩在线| 国产一区二区三区精品欧美日韩一区二区三区| 99re这里只有精品6| 亚洲欧美日韩国产一区二区| 亚洲风情亚aⅴ在线发布| 欧美精品一区二区精品网| 在线亚洲免费视频| 欧美黄在线观看| 久久久久久久久一区二区| 9色porny自拍视频一区二区| 国产亚洲精品久久久久久| 国产精品日韩一区二区三区| 亚洲欧美日韩国产一区| 亚洲韩国日本中文字幕| 一本色道久久加勒比精品| 永久免费毛片在线播放不卡| 亚洲男人天堂2024| 久久精品亚洲一区二区| 亚洲欧美日韩国产综合| 国产精品伦子伦免费视频| 日韩视频二区| 国产精品久久影院| 一区二区电影免费在线观看| 欧美一区二区三区四区在线观看地址| 欧美日韩一区二区三区在线| 在线视频你懂得一区二区三区| 99精品黄色片免费大全| 国产婷婷色一区二区三区在线| 一本色道88久久加勒比精品| 在线观看国产欧美| 最新热久久免费视频| 国产视频观看一区| 亚洲一区二区三区在线| 欧美午夜不卡影院在线观看完整版免费| 国产精品视屏| 日韩亚洲欧美在线观看| 国产精品久久国产精麻豆99网站| 亚洲图中文字幕| 欧美精品在线免费播放| 欧美日韩免费一区二区三区| 国产一区二区三区在线观看精品| 免费观看成人www动漫视频| 国产欧美在线看| 欧美深夜影院| 宅男噜噜噜66一区二区| 亚洲尤物在线视频观看| 欧美色道久久88综合亚洲精品| 国产一级精品aaaaa看| 久久另类ts人妖一区二区| 欧美激情视频一区二区三区在线播放| 亚洲国产一成人久久精品| 亚洲一区二区三区久久| 欧美日韩高清一区| 亚洲一区国产一区| 国产精品乱人伦一区二区| 亚洲欧美国产日韩天堂区| 亚洲国产综合在线| 欧美成人精品1314www| 亚洲图中文字幕| 亚洲视频精品在线| 欧美日韩国内| 老司机久久99久久精品播放免费| 激情五月***国产精品| 久热这里只精品99re8久| 亚洲图中文字幕| 午夜久久福利| 久久精品二区三区| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲七七久久综合桃花剧情介绍| 亚洲一区二区三区影院| 亚洲性视频网站| 亚洲黄色在线视频| 国产精品久久久久毛片大屁完整版| 国产精品黄色在线观看| 亚洲综合欧美日韩| 国模叶桐国产精品一区| 国产精品丝袜久久久久久app| 欧美日韩精品一区二区三区四区| 国产一区二区三区在线观看精品| 久久久久国产精品一区三寸| 欧美日韩mp4| 亚洲一区亚洲| 亚洲激情一区二区| 久久精品一区| 亚洲午夜影视影院在线观看| 亚洲一区二区三区四区在线观看| 国产精品每日更新在线播放网址| 亚洲激情欧美激情| 欧美日韩一区二区精品| 激情91久久| 一区二区免费在线视频| 鲁鲁狠狠狠7777一区二区| 国产欧美一区二区精品仙草咪| 欧美成人一区在线| 午夜精品久久久久久| 亚洲婷婷国产精品电影人久久| 免费视频一区| 欧美日韩在线直播| 亚洲狼人精品一区二区三区| 欧美日韩精品三区| 亚洲精品一二三| 国产欧美日韩91| 一区二区久久久久久| 欧美亚洲综合另类| 欧美韩日一区| 国产亚洲福利| 一区二区在线视频| 欧美日韩免费观看中文| 久久久久一区二区三区| 国产视频自拍一区| 一区二区三区日韩欧美| 国产精品久久久久久妇女6080| 欧美精品久久一区二区| 亚洲国产日韩欧美在线图片| 欧美一区二区三区婷婷月色| 国产欧美亚洲一区| 国产日韩一区| 国产一区二区三区四区老人| 欧美日韩另类一区| 久久久久国产精品一区| 亚洲欧美精品suv| 亚洲女性喷水在线观看一区| 国产一区二区三区在线观看视频| 欧美日韩视频在线| 韩国一区二区三区在线观看| 亚洲视频在线免费观看| 亚洲欧洲精品一区二区三区| 久久久久久一区二区| 亚洲欧洲日韩女同| 一区二区三区在线免费观看| 亚洲国产电影| 欧美精品免费观看二区| 亚洲日本免费电影| 欧美亚洲视频一区二区| 欧美日韩一区二区免费在线观看| 欧美激情一级片一区二区| 欧美福利在线| 免费国产自线拍一欧美视频| 欧美性猛交视频| 欧美手机在线| 久久嫩草精品久久久精品一| 国产精品家庭影院| 久久在线免费视频| 久久精品国产精品亚洲精品| 欧美日韩色婷婷| 亚洲第一福利在线观看| 亚洲国产精品一区| 亚洲精品日韩在线观看| 99精品国产福利在线观看免费| 欧美高清在线一区二区| 国产亚洲成av人片在线观看桃| 国产精品99久久久久久有的能看| 国产精品网曝门| 欧美日本精品在线| 亚洲综合社区| 欧美激情视频一区二区三区在线播放| 篠田优中文在线播放第一区| 欧美在线日韩精品| 欧美一级精品大片| 米奇777超碰欧美日韩亚洲| 亚洲性夜色噜噜噜7777| 亚洲精品一区二区三区蜜桃久| 欧美精品在线观看| 国产精品综合色区在线观看| 国产精品美女主播| 国产精品久久亚洲7777| 亚洲影视在线| 亚洲在线成人| 欧美插天视频在线播放| 国产一区二区三区在线观看免费| 久久精品亚洲一区二区| 国产日产高清欧美一区二区三区| 久久av一区二区三区漫画| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲高清影视| 亚洲福利av| 在线 亚洲欧美在线综合一区| 一区二区三区欧美在线观看| 亚洲伊人网站| 国产日韩精品在线观看| 亚洲人成网站在线播| 翔田千里一区二区| 国色天香一区二区| 亚洲精品永久免费精品| 欧美日本韩国一区二区三区| 欧美日韩情趣电影| 国产精品毛片大码女人| 欧美日韩精品免费在线观看视频| 香蕉成人伊视频在线观看| 欧美一二三区在线观看| 91久久久久久久久| 在线观看视频欧美| 久久精品国产一区二区三| 日韩视频欧美视频| 激情小说另类小说亚洲欧美| 精品成人在线视频| 亚洲精品在线观看免费| 性欧美video另类hd性玩具| 亚洲黄色免费| 亚洲精品久久久久久下一站| 欧美不卡一卡二卡免费版| 一区二区在线观看视频| 欧美视频中文一区二区三区在线观看| 欧美+日本+国产+在线a∨观看| 亚洲视频播放| 性欧美大战久久久久久久久| 亚洲综合另类| 国内精品久久久久久久影视麻豆| 最新国产拍偷乱拍精品| 欧美日韩一区在线视频| 国产亚洲精品v| 欧美有码视频| 91久久极品少妇xxxxⅹ软件| 国产精品麻豆成人av电影艾秋| 亚洲九九九在线观看| 鲁大师影院一区二区三区| 久久琪琪电影院| 欧美伦理a级免费电影| 欧美一区三区三区高中清蜜桃| 国产精品视频成人| 久久精品毛片| 亚洲精品一区二区三区蜜桃久| 国产欧美视频一区二区三区| 久久免费偷拍视频| 国产精品一级| 韩国成人精品a∨在线观看| 亚洲国产精品一区在线观看不卡| 国产手机视频一区二区| 美日韩免费视频| 一区二区自拍| 欧美视频一区二区三区| 欧美高清视频在线播放| 麻豆视频一区二区| 欧美性色aⅴ视频一区日韩精品| 亚洲国产女人aaa毛片在线| 亚洲级视频在线观看免费1级| 亚洲美女啪啪| 亚洲欧美日韩视频一区| 久久久亚洲一区| 欧美日韩在线综合| 国产日韩欧美麻豆| 国产精品视频精品视频| 激情综合激情| 久久亚洲午夜电影| 欧美精品成人91久久久久久久| 国产精品久久久久久久久免费桃花| 欧美日韩另类国产亚洲欧美一级| 国产欧美一区二区三区在线老狼| 久久久www免费人成黑人精品| 亚洲免费影视第一页| 国产精品乱人伦一区二区| 国产精品国产三级欧美二区| 欧美精品99| 一本色道久久88亚洲综合88| 亚洲视频欧美视频| 欧美日韩一二三区| 国产一区二区三区精品欧美日韩一区二区三区| 黑人一区二区三区四区五区| 国产精品毛片大码女人| 极品尤物久久久av免费看| 亚洲男人av电影| 欧美一级艳片视频免费观看| 国内精品美女在线观看| 国产精品初高中精品久久| 国产揄拍国内精品对白| 欧美va天堂在线| 欧美刺激午夜性久久久久久久| 欧美国产乱视频| 亚洲国产欧美精品| 亚洲电影第三页| 亚洲一区二区视频在线观看| 一区二区三区久久久| 国产精品久久国产精麻豆99网站| 伊人久久综合| 亚洲第一色中文字幕| 国产欧美一区二区精品婷婷| 亚洲第一在线视频| 久久久久久婷| 亚洲精品一区二区三区福利| 亚洲精品美女在线| 亚洲精品欧美一区二区三区| 国产精品成人在线| 伊人一区二区三区久久精品| 欧美专区日韩视频| 亚洲国产日韩美| 一区二区久久| 免费观看欧美在线视频的网站| 欧美福利在线观看| 国产午夜精品麻豆| 欧美日韩一视频区二区| 亚洲激情视频在线观看| 欧美日韩一区二区视频在线观看| 亚洲动漫精品| 欧美另类69精品久久久久9999| 一区二区黄色| 欧美激情在线免费观看| 国产一区二区三区成人欧美日韩在线观看| 欧美日韩精品福利| 欧美精品一区二区三区蜜臀| 激情久久久久|