B 站崩了羹铅,受害程序員聊聊(非吃瓜B 站事件始末分析 + 防治技術分享)

非吃瓜职员,B 站事件始末分析 + 防治技術分享

昨天小破站崩了的事情相信很多朋友都聽說了焊切。

這要是擱以前,不愛吃瓜的我根本不會去關注這種事糙箍,崩了就崩了唄深夯,反正天塌下來有程序員大佬們扛著咕晋,很快就會好的掌呜。

但這次不太一樣质蕉,因為我自己也成為了本事件的 “受害者” 模暗!

所以今天以一名程序員的視角兑宇,帶大家回顧 B 站崩了事件的始末粱坤、理性推測原因、并分享一些防治技術和收獲感悟枚驻。

事件始末

B 站剛剛崩再登,但還沒有完全崩的時候霎冯,我正在直播間寫小代碼沈撞、和小伙伴們友好交流缠俺。由于我在寫代碼的時候不會經(jīng)骋际浚看彈幕躏救,沒有注意到彈幕不動了盒使,沒有任何小伙伴發(fā)彈幕少办。

起初我以為只是自己寫代碼太無聊了挽放,沒人搭理我辑畦。然后我就擱哪兒喃喃自語:奇怪了航闺,怎么沒有小伙伴發(fā)彈幕?喂侮措,有人么澄成?Hello畏吓?Hi肾砂?歪比八步宏悦?

后來我才發(fā)現(xiàn),彈幕區(qū)連進房提示都沒了诗越,總不可能幾分鐘沒人進來吧嚷狞?肯定是出事了!

我以為是彈幕卡了即硼,于是就關閉彈幕再打開只酥,結果還是一樣裂允。然后我就想著重啟下直播,結果關掉之后再也打不開了十饥,屏幕上直接提示:似乎已斷開和服務器的鏈接。

實話說祖乳,在此之前逗堵,我根本沒想到 B 站這種億級流量的平臺會崩掉。所以第一反應和大家一樣眷昆,都懷疑是自己網(wǎng)絡的問題蜒秤,結果發(fā)現(xiàn)網(wǎng)頁能打開,換了網(wǎng)也連不上亚斋。于是我突然細思極恐:握草作媚?B 站竟然也把我封了?(老通緝犯了)

就是這樣帅刊,我是事故現(xiàn)場的受害人纸泡,是倒在地上懵逼的那個,所以直到事故發(fā)生十幾分鐘后,我才通過其他途徑了解到,哦民逼,原來是 B 站出事了。

雖然錯過了第一現(xiàn)場俊犯,但通過熱搜,也能了解到 B 站崩盤的大致過程,簡單地說坟比,就是在 幾個小時 內籍琳,用戶無法正常訪問 B 站的任何功能谣蠢!

打開 B 站,先是 404 Not Found 找不到資源:

然后是 502 錯誤網(wǎng)關:

1 個小時后,一些小伙伴表示 B 站的部分功能已經(jīng)可以使用了,但還是沒有完全恢復,直到 14 日凌晨,B 站官方才終于回應侄柔,恢復正常了薪者。

原因猜測

昨晚剪視頻到凌晨 2 點多,本來想直接睡覺渣窜,但手賤又打開了知乎详瑞,發(fā)現(xiàn) “B 站崩了” 是 Top 1 熱門的問題锣杂,出于好奇就點進去想了解下事故背后的真正原因蝶押,看看大家的高見。

本來我一個非 B 站工作的外來人打却,對它的技術架構沒有深入了解;再加上缺少關鍵信息饥悴、沒有可靠的推測憑據(jù),所以不準備發(fā)表意見的库车。結果發(fā)現(xiàn)前排沒有幾個程序員在從技術的角度推測事故原因珍坊,都是一些幫大家吃瓜更香的小回答回还。那我不妨根據(jù)過往學到的架構知識运提,做一波推測坎缭,萬一推中了感覺也挺驚喜的。

其實在 20 年的時候,B 站技術總監(jiān)毛劍老師就在騰訊云 + 社區(qū)分享過《B 站高可用架構實踐》講座窍侧,當時我全程看完了其骄,但沒想到亏镰,有一天,高可用的 B 站不可用了拯爽。

所以在這次分析前,我先把《B 站高可用架構實踐》文章又讀了一遍钧忽,有趣的是毯炮,短短半天,這篇文章的閱讀量漲了 15 萬耸黑!

而且更有趣的是桃煎,文章底下多了不少 “嘲諷”,什么 “八股文架構師” 之類的:

不過我覺得沒必要大刊,因為毛劍老師分享的技術確實是很實用的高可用解決方案为迈,只不過還是缺少了一些印證吧。

下面說下我的猜測缺菌。

猜測 1:網(wǎng)關掛了

首先葫辐,這次小破站事故發(fā)生時,其他站點竟然也崩了伴郁!比如 A 站耿战、晉江、豆瓣焊傅,統(tǒng)統(tǒng)都上了熱搜剂陡。

這些事故同時發(fā)生,說明是這些系統(tǒng)依賴的公共服務出了問題狐胎,而唯一有能力導致大規(guī)模服務癱瘓的就是 CDN 了鸭栖。

CDN 是內容分發(fā)網(wǎng)絡,提前將源站內容發(fā)到各個地區(qū)的服務器節(jié)點握巢,之后就可以讓不同地區(qū)的用戶就近獲取內容晕鹊,而不是都到源站獲取,從而起到內容加速镜粤、負載均衡的作用捏题。

一旦 CDN 掛了,該地區(qū)用戶的流量會全部打到網(wǎng)關上:

網(wǎng)關就像是家族老大肉渴,用戶有需求就跟老大說公荧,然后老大再分配需求給弟弟們去完成。

此外同规,網(wǎng)關通常還承擔起了保護服務弟弟們的使命循狰,統(tǒng)一負載均衡窟社、控制流量、熔斷降級等绪钥。

按道理來講灿里,通常網(wǎng)關不僅要保護下游的服務,自身也是需要安全保護的程腹。但為什么網(wǎng)關沒有保護好自己呢匣吊?

我的猜測是:網(wǎng)關還沒有來的及開啟保護措施(自身的熔斷降級等),就被流量瞬狙了寸潦。

網(wǎng)關一掛色鸳,服務沒爹,服務缺少了調用入口见转,自然就不可用了命雀,未必所有網(wǎng)關后的服務都處于癱瘓狀態(tài)。

猜測 2:服務雪崩

還有一種猜測是 B 站系統(tǒng)存在很多服務的 調用鏈 斩箫。由于 CDN 或者部分機器掛掉吏砂,導致某個下游服務 A 的執(zhí)行耗時增加,從而導致上游調用服務 A 的服務 B 執(zhí)行耗時也增加乘客,讓系統(tǒng)單位時間的處理能力變差狐血。再加上上游不斷積壓請求,最終導致整個調用鏈雪崩寨典,所有鏈上服務從兒子到爸爸全部滅門氛雪。

image

舉個通俗的例子就是家里的馬桶堵了,桶里的還沒充下去耸成,上面卻還在不斷 “送貨”报亩,最終下場就是你不能再 “送貨” 了,馬桶爆了井氢!

官方解釋

在官方解釋是服務器機房發(fā)生故障之后弦追,又看了其他老師的分析,感覺官方的解釋還說的過去花竞。

的確之前 B 站在對外分享高可用架構時幾乎沒有提到 災備多活 方面的設計劲件,更多的是在本地服務層和應用層去處理,比如限流约急、降級零远、熔斷、重試厌蔽、超時處理等牵辣,所以在設計大規(guī)模分布式系統(tǒng)時還是要考慮更全面一些,引以為戒~

直到發(fā)文前奴饮,知乎 Top 1 的回答者又很用心地整理了線索:

為什么其他兩家很快就恢復了纬向,B 站卻花了幾個小時才恢復正常呢择浊?

感覺多少和 B 站自研組件有關系,一方面受到云服務商的影響逾条,導致下游的服務連鎖掛掉了琢岩, 故障面積大 ;另一方面重啟也需要時間师脂,而且重啟過程中担孔,上游的負載均衡也未必能承受住流量高峰,所以想要恢復到正常水平危彩,至少要等待很多容器副本完全重啟攒磨。

另外昨天 23 點半左右,我打開 B 站時汤徽,看到的內容是幾個小時前的老數(shù)據(jù),說明這個時候 B 站已經(jīng)重啟了部分服務副本灸撰,并且開啟了降級措施谒府,并沒有查詢真實數(shù)據(jù)。

沒想到自己的這個回答還在知乎小火了一把浮毯,第一次成為了 千萬瀏覽量 問題的 Top 2 完疫,受寵若驚,受寵若驚债蓝。壳鹤。。

保命:以上本身就是我的猜測哈哈饰迹,專業(yè)度有限芳誓,歡迎大家評論區(qū)討論,輕噴輕噴啊鸭。

防治技術

再簡單聊一下服務故障的防治技術锹淌,就是如何保證服務的高可用性,盡量持續(xù)為用戶提供服務而不宕機赠制。

我將了解到的技術簡單分類赂摆,整理成了一張思維導圖:

暫時想到這么多,當然還有其他的技術钟些。

時間有限烟号,就先不對這些技術展開去講了。

收獲感悟

關于這次事故政恍,我作為受害者之一汪拥,也有一些收獲和感悟,而不是吃瓜吃了個寂寞抚垃。

首先是要有 質疑精神 喷楣,我們在寫程序出現(xiàn)問題時趟大,習慣性地先從自己身上找原因沒有任何問題,但自己排查沒有發(fā)現(xiàn) Bug 后铣焊,應該大膽推測是我們用到的類庫逊朽、組件、或者依賴服務曲伊、甚至有可能是編輯器出了問題叽讳,而不是認為知名的東西一定正確。像小破站出了問題后坟募,我竟然懷疑是自己的直播被封了哈哈岛蚤,差點想找到管理去跪了。

在編程方面懈糯,我們不能只去背知識涤妒、聽別人講,做 八股文架構師 赚哗;而是要做實踐經(jīng)驗豐富的工程師她紫,不盲目相信、不想當然屿储,而是在實踐中積累經(jīng)驗贿讹、結合實際去優(yōu)化系統(tǒng)。

通過這次結合實際故障過程的分析够掠,我也復習了一遍之前學到的架構知識民褂,對一些高可用的設計有了更深的理解。有朝一日疯潭,盡量不讓 編程導航www.code-nav.cn) 成為下一個 B 站(狗頭)赊堪。

還有就是上面提到的,要時刻居安思危袁勺,養(yǎng)成防御性編程的好習慣雹食,而不是出了問題再去補救。像 B 站這種知名平臺期丰,出一點小問題群叶,對用戶、對企業(yè)帶來的損失都是難以估量的钝荡。

感謝 B 站爸爸送來的一天大會員補償 :heart:

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末街立,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子埠通,更是在濱河造成了極大的恐慌赎离,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端辱,死亡現(xiàn)場離奇詭異梁剔,居然都是意外死亡虽画,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門荣病,熙熙樓的掌柜王于貴愁眉苦臉地迎上來码撰,“玉大人,你說我怎么就攤上這事个盆〔钡海” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵颊亮,是天一觀的道長柴梆。 經(jīng)常有香客問我,道長终惑,這世上最難降的妖魔是什么绍在? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮雹有,結果婚禮上揣苏,老公的妹妹穿的比我還像新娘。我一直安慰自己件舵,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布脯厨。 她就那樣靜靜地躺著铅祸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪合武。 梳的紋絲不亂的頭發(fā)上临梗,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音稼跳,去河邊找鬼盟庞。 笑死,一個胖子當著我的面吹牛汤善,可吹牛的內容都是我干的什猖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼红淡,長吁一口氣:“原來是場噩夢啊……” “哼不狮!你這毒婦竟也來了?” 一聲冷哼從身側響起在旱,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤摇零,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后桶蝎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驻仅,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谅畅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了噪服。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毡泻。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芯咧,靈堂內的尸體忽然破棺而出牙捉,到底是詐尸還是另有隱情,我是刑警寧澤敬飒,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布邪铲,位于F島的核電站,受9級特大地震影響无拗,放射性物質發(fā)生泄漏带到。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一英染、第九天 我趴在偏房一處隱蔽的房頂上張望揽惹。 院中可真熱鬧,春花似錦四康、人聲如沸搪搏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疯溺。三九已至,卻和暖如春哎垦,著一層夾襖步出監(jiān)牢的瞬間囱嫩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工漏设, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墨闲,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓郑口,卻偏偏與公主長得像鸳碧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子潘酗,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容

  • 表情是什么杆兵,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息仔夺。高興了當然就笑了琐脏,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,412評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者,不喜歡去冒險日裙,但是人生放棄了冒險吹艇,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 6,037評論 0 4