從 B 站崩潰報告看分佈式系統的技術棧

不知道大家還記得去年 B 站(嗶哩嗶哩)掛了那次嚴重的事故不,記得當時在全網也是引起了熱議。

離當時過去剛好一年多的時間,今天看到 B 站前兩天在公衆號上發的覆盤報告。2021.07.13 我們是這樣崩的 文章從八個方面全鏈路再現了當時事故發生和處理的全過程:

包括至暗時刻,初因定位,故障止損,根因定位,原因說明,問題分析,優化改進,總結。

不知道大家看過沒,我全文看了一下,看完還挺唏噓的,最終原因竟然是一個字符串類型的數字參數 0 導致的死循環。

不過文章本身寫的還是非常專業和嚴謹,對於咱們技術的同學,好嘛,也是一次難得的學習機會。

只是,看到文章最後一段代碼,我實在忍不住多說幾句,一個求最大公約數的 GCD 函數,居然就是導致 B 站崩潰的元兇..

因爲,下面這段代碼對我來說實在太熟悉不過了,在學校搞過程序競賽的同學應該對它都不陌生吧。

看到上面的報告,第一感覺是因爲沒有做好類型轉換帶來的死循環,是個弱類型設計的坑,如果除零是拋出異常而不是變 NaN,應該很快就能定位到問題所在。

另外,從官方的這份報告裏,我看到了多次提及多活,容災,分佈式這個詞彙,異地多活是常見的分佈式系統保證架構穩定性的一個方案。

畢竟這麼體量的公司,系統架構肯定和分佈式是繞不開的。那咱們以此來看看,分佈式系統裏面都有哪些技術棧呢?

之前記得在左耳朵耗子叔的專欄《左耳聽風》裏專門有寫分佈式架構,我把裏面的部分內部摘抄在這裏給大家分享。

構建分佈式系統的目的是增加系統容量,提高系統的可用性,轉換成技術方面,也就是完成下面兩件事。

1、大流量處理。通過集羣技術把大規模併發請求的負載分散到不同的機器上。

2、關鍵業務保護。提高後臺服務的可用性,

說白了就是幹兩件事。一是提高整體架構的吞吐量,服務更多的併發和流量,二是爲了提高系統的穩定性,讓系統的可用性更高。

提高架構的性能

咱們先來看看,提高系統性能的常用技術。

提高架構的穩定性

接下來,咱們再來看看提高系統系統穩定性的一些常用技術。

正如不想當將軍的士兵不是好士兵,不想當架構師的程序員不是一個好的程序員,哈哈,道阻且長,慢慢加油吧。

我是賀同學,我們下期再見。

   參考:http://gk.link/a/11vIo

herongwei 一個在字節搬磚的新生代農民工

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Yor5p7IBhT58guupzLfdxw