事件經過
2021 年 10 月 4 日 UTC 15:39,Facebook 及其旗下所有服務——Instagram、WhatsApp、Messenger、Oculus——在全球範圍內陷入癱瘓。在接下來的六到七個小時裡,數十億人完全無法連上這些服務。肇因並非網路攻擊。在一次例行維護中,一名工程師執行了一道本意是評估 Facebook 全球骨幹網路容量的指令。該指令出了差錯,意外地一次切斷了 Facebook 所有資料中心與該骨幹網路的連線。
系統設計將一道錯誤指令放大成了災難。Facebook 運行自家的 DNS 伺服器,而這些伺服器被設定為:一旦與資料中心失去聯繫,便撤回其 BGP 路由——也就是網際網路的位址簿條目。因此,當骨幹網路中斷時,DNS 伺服器便忠實地告知網際網路的其餘部分:Facebook 的位址已不復存在。Facebook 實際上等於把自己從網際網路上刪除了,而這次撤回的連鎖效應極為徹底,以致連 Facebook 自家的工具都難以觸及它來進行修復。
這場封鎖幾乎到了滑稽的地步。Facebook 的內部系統也一併癱瘓:員工無法寄送對外電子郵件、無法存取公司通訊錄,也無法——這個細節登上了新聞頭條——用安全識別證開啟辦公大樓與會議室的門,因為這些門禁同樣依賴同一個網路。復原工作需要一個團隊實際進入聖塔克拉拉資料中心,手動重設伺服器。各項服務約在 UTC 21:50 至 22:50 之間陸續恢復。Facebook 當天股價下跌近 5%,馬克·祖克柏的個人財富縮水超過 60 億美元。
代價為何
DNS 伺服器在失去聯繫時會自動撤回路由,因此故障接連擴散;復原需要實體存取,耗費 6 小時及逾 6,000 萬美元。
為何發生
一道在缺乏充分防護措施下執行的維護指令,一次切斷了 Facebook 所有資料中心與其骨幹網路的連線。
DNS 伺服器被設計成在與資料中心失聯時撤回其 BGP 路由——因此這次故障自動將 Facebook 從網際網路的路由表中抹除。
復原工具與存取權限(包括實體大樓門禁識別證)都依賴同一個已經故障的網路,使工程師被鎖在修復工作之外。
當時沒有帶外路徑可觸及這些系統並迅速還原變更。
教訓
建構你的復原路徑時,要讓它不依賴於剛剛故障的那個東西。當你的 DNS、你的身分驗證和你的門禁識別證全都運行在你剛剛弄垮的網路上時,你就等於把自己鎖在門外了。
後續
Facebook 的工程團隊隔天發表了詳細說明,公司也公開致歉。這起斷線事件——自 2008 年以來最嚴重的一次——估計造成 6,000 萬美元以上的廣告營收損失,並使其市值蒸發數十億美元,還短暫地將用戶推向競爭對手的平台。它成為網路工程領域的教科書案例,說明單點故障的危險、復原系統依賴其理應復原之系統的危險,以及一道毫無防護的指令如何能癱瘓一項全球三分之一人口使用的服務。
追溯依據