2021.10.06 10:30

Facebook上最大災難是怎麼發生的?一個錯誤指令導致骨牌般連鎖錯誤

ADVERTISEMENT

FB昨天發生史上最嚴重當機事件,導致Facebook、其相關服務(Instagram、WhatsApp、Oculus、Messenger)、其企業平台和公司內部網路癱瘓的大規模故障,現在根據FB官方的解釋,這起災難的起因,是從一次例行維護工作開始的。

昨天我們解釋過,造成無法使用Facebook的原因是,主要是指向其伺服器的DNS和BGP路由資訊突然消失了。FB基礎設施副總裁桑托什·賈納丹(Santosh Janardhan)在昨天的解釋,當機原因主要是負責協調資料中心間網路流量的骨幹路由器(Backbone Router),在進行配置更新時發生錯誤,才會導致通訊中斷服務。

ADVERTISEMENT

不過,Santosh Janardhan今天又進一步發表了一個說明,披露更多關於這場大當機背後的細節,以及分析工程團隊犯下的錯誤,他表示可以提供給大家做為參考。文中我們可以看出,這是一連串幾乎是環環相扣的連鎖反應,而且是以相當快的速度發生,工程師面臨的不僅是要找出網路的問題,還要克服種種現實環境上的困難,才能解決問題。

全文連結:https://engineering.fb.com/2021/10/05/networking-traffic/outage-details/

在昨天的故障之後,我們的平臺已經開始照常運行,我認為值得分享更多的細節,說明發生了什麼,為什麼,以及最重要的是,我們如何從中學習。

ADVERTISEMENT

這次中斷是由管理我們全球骨幹網路的系統引發的。骨幹網路是Facebook建立的網路,將我們所有的運算設施連接在一起,它由數萬英里的光纖電纜組成,橫跨全球,連接我們所有的資料中心。

這些資料中心有不同的形式。有些是巨大的建築物,容納了數以百萬計的機器,用於儲存資料和運行沉重的運算負載,以保持我們的平臺運行,其他的是較小的設施,將我們的骨幹網路連接到更廣泛的網路上,以及連接到使用我們平臺的人。 

當用戶打開FB旗下的一個應用程式,並載入你的Cookie或資訊時,該應用程式對資料的請求會從用戶的設備連接到最近的設施,然後直接透過FB的骨幹網路與更大的資料中心進行通信。這就是用戶的應用程式所需要的資訊被檢索和處理的地方,並透過網路將結果發送回你的手機。 

ADVERTISEMENT

所有這些運算設施之間的資料流程是由路由器管理的,它負責計算所有傳入和傳出資料的發送位置。

第一個錯誤:錯誤的指令被發出

而在維護這一基礎設施的大量日常工作中,FB的工程師經常需要將骨幹網的一部分離線維護,也許是修復一條光纖線路,增加更多的容量,或者更新路由器本身的軟體。 

這就是昨天發生故障的根源。

ADVERTISEMENT

在這些例行維護工作中,有一條命令被發出,目的是評估全球骨幹網容量的可用性,這條指令卻無意中關閉了FB骨幹網的所有連接,迅速地切斷了Facebook全球資料中心的連接。 

這麼重要的系統,通常都有防錯的機制,甚至是重重保護。FB當然也不可能沒有。Santosh Janardhan解釋,FB的系統其實在設計上有預測到這類錯誤,因此有負責阻止這類錯誤的審計工具,但該審計工具卻因為一個錯誤,使其無法正確地停止該命令。

因此,FB骨幹網的所有連接被關閉。

但是這還不是最糟的。

導致情況更糟的是第二個問題造成的連鎖反應

這一變化,導致FB的資料中心和網際網路之間的伺服器連接完全斷開。而這種連接的完全喪失,造成了第二個問題,使事情變得更糟。

他表示,FB的小型設施執行的工作之一是回應DNS查詢。DNS用來將網路名稱能夠被翻譯成特定的伺服器IP地址。

這些翻譯查詢由我們的DNS伺服器回答,這些伺服器本身佔據了眾所周知的IP位址,而這些位址又通過另一個稱為邊界閘道協定(BGP)的協定向網路的其他部分公佈。(詳細作用請看文末)

但是,為了確保系統可靠的運行,在設計上如果FB的DNS伺服器自己不能與自家的資料中心對話的時候,就會禁用這些BGP,因為這是網路連接不健康的表現。

而在這次的故障中,由於整個骨幹網被從運行中移除,使這些地方宣佈自己不健康,並撤回這些BGP。最終的結果是,FB的DNS伺服器雖然實際上仍然在運行,但卻變得遙不可及,使得網路上的電腦都無法找到FB的伺服器。

工程師面臨的更大挑戰

所有這些都發生得非常快。

當FB的工程師努力弄清楚發生了什麼以及為什麼發生時,他們同時面臨著兩個巨大的障礙:首先,由於他們的網路癱瘓,不可能透過正常工作流程去連接臉書的資料中心;其次,DNS的完全喪失,破壞了FB原本用來調查和解決這種故障的許多內部工具。 

FB的主要網路和連外網路都被切斷,所以依靠遠端工具來進行維修已經不可行,這時只有最後的方法,派能解決問題的工程師,親自到資料中心現場,讓他們進入系統調試問題並重新開啟系統。

但這需要時間,因為這些設施的設計考慮到了物理安全和系統安全。工程師們不但很難進入,而且一旦你進入,硬體和路由器的設計是很難修改的,即使你有訪問權限。

因此,工程師還需要額外的時間來啟動所需的安全訪問協議,讓人們到現場並能夠在伺服器上工作。只有這樣,才能確認問題,並使我們的骨幹重新上線。

一旦FB的骨幹網路連接在我們的資料中心區域內恢復,一切都會隨之恢復。

不過,Santosh Janardhan也說明,即使如此,問題還沒有結束:一下子恢復FB的所有服務,可能會因為流量的激增而導致新一輪的崩潰。各個資料中心都報告說電力使用量下降了幾十兆瓦,而突然扭轉這種電力消耗的下降可能會使從電力系統到緩存的一切都處於危險之中。 因此,這也是為什麼這種規模的當機,FB需要花這麼久的時間修復的原因。 

邊界閘道器協定(BGP)與自治系統(AS)

邊界閘道器協定(BGP)是一種網路上的自治系統(AS)用來互相交換路由的機制,讀者不妨將 AS 簡單認定為「網路上的大型團體」,如 Facebook、Google、Amazon 等等,他們各自有自己的編號(ASN),而 BGP 則是這些大型團體共同遵守的協議,定期通知彼此內含有 IP 前輟、路由等等資訊的內容。

BGP 所攜帶的內容,其功用除了讓其他 AS 知道發出者是誰、在哪裡之外,同時還能表達某個 AS 有能力把封包帶去何處,藉此建立出一條最短路徑,讓使用者可以更快從某一個網路連線到另一個網路。

網際網路由許許多多的 AS 互相連結在一起,而每個 AS 都會對彼此「通知」BGP 內容,藉此確認雙方的存在,以及如何連線到對方的所在位置,建構路由加速並有效率的傳遞網路封包。

 

ADVERTISEMENT