Last update: October 11, 2021
Facebook 死機事件懶人包
從 FB 死機事件中,花五分鐘認識更多 Internet 運作知識,包括 IP, DSN, AS 及 BGP 等。
Index
如果您想學習數據科學、編程或轉行到科技行業,立即到 DANGER Education 網站了解並報讀相關課程!
在 4/10 晚上,大家突然用不到 FB/IG/Whatsapp。問大家發生了什麼事,答案大多是「死 server 囉」。
為什麼死 server? 死了哪個 server?
事後網絡安全公司 Cloudflare 及 FB 自身也發表文章解釋事情始末。DANGER Education 嘗試簡單解說事件,讓大家從中認識更多 Internet 運作及 Web Development 知識。
網址電話簿
每個連接到 Internet 的裝置都是透過獨一無二的 IP 地址 (e.g. 208.65.153.238) 來辨認對方。我們電腦的 web browser (e.g. Chrome) 便是通過 Internet Protocol (IP) 地址與信息服務商 (e.g. FB) 進行信息交換。
平日我們輸入 domain name 查詢信息 (e.g. danger.education), Domain Name System (DNS) 就像 Internet 的電話簿,把 domain name 轉換為 IP 地址,以便 web browser 加載信息。DNS 省去了人們記住 IP 地址的需要。
有興趣了解更多 DSN 可以看此文章
網絡世界的郵局
互聯網實際上是一個網絡的網絡 (network of networks)。
想像一個 Autonomous System (AS) 就像一個城市的郵局。 郵件從一個城市的郵局送到另一個城市的郵局,直至到達目的城市的郵局,然後該城市的郵局會在城內傳送郵件。
在 Internet,數據包透過在 AS 之間傳送直至到達包含目標 IP 地址的 AS。該 AS 內的 router 便將數據包傳送到目標 IP 地址。
避免迷路的地圖
Border Gateway Protocol (BGP) 是 AS 之間交換信息的機制。
每個 AS 使用 BGP 廣告來宣布它們負責哪些 IP 地址以及它們連接到哪些其他 AS。 BGP router 從世界各地的 AS 獲取所有這些信息並放入數據庫中,以確定從 AS 之間傳送的最快路徑。 當數據包到達時,BGP router 便會決定數據包接下來應該到哪個 AS。
透過把不同的 AS 綁在一起, BGP 允許一個網絡 (e.g. FB) 向構成 Internet 的其他網絡宣布其存在。如果沒有 BGP,數據包便會在 AS 之間隨機傳送,就像司機試圖通過猜測要走哪條路來到達目的地一樣,Internet 將會無法運作。
有興趣了解更多 AS 和 BGP 可以看此文章
「海嘯」般的襲擊
FB 工程師經常需要對數據傳輸的基礎設施進行維護工作,例如修復光纖線路、增加容量或更新 router 的軟件。 在當天其中一項日常維護工作中,FB 工程師錯誤地發出了一項指令,無意間斷開了 FB 全球數據中心的連接。
FB 擁有一項機制 – 如果 DNS 服務器無法與 FB 的數據中心通信,便會停用 BGP 廣告。由於 FB 沒有在 BGP 宣傳其存在,因此其他網絡無法找到 Facebook 的網絡,並回覆錯誤信息 (i.e. SERVFAIL)。
另外由於大部份 apps 不接受錯誤信息,或是用家不接受 error page 而不停刷新頁面,所以觸發了「海嘯」般的大量 DNS traffic。
此時 FB 網絡已全面下線。
FB 事後表示,除了需時派工程師到服務器現場修復故障並重新啟動系統,還須考慮如果一次過把所有服務重新啟動可能會導致數據流量和電力消耗量在短時間內激增,從而導致新一輪的崩潰,所以花了較長時間把服務重新上線。
總結
在 FB 死機事件中,我們可以認識更多 Internet 運作知識,包括 IP, DSN, AS 及 BGP 等,大家便不用停留於 「死 sever」 層面了。
有興趣了解更多,可以查看 Cloudflare 和 FB 的原文
Enjoy Programming!