Facebook 如何儲存數十億用戶資料並保持快速可靠?

揭密Meta心臟:Facebook如何儲存數十億用戶資料並保持閃電般速度?

當您滑動 Facebook 或 Instagram 的動態時,朋友的午餐照片、最新的迷因影片、家人的生活更新,一切內容似乎都在瞬間載入。這背後,是一個為全球超過三十億用戶服務、處理數十兆筆資料互動的龐大工程奇蹟。Meta (Facebook 的母公司) 究竟是如何儲存這些天文數字般的資料,並同時確保服務的快速與可靠?答案在於一個分層、專用且不斷演進的複雜架構。

面對的挑戰是前所未有的。每天,用戶上傳數億張新照片、發表數十億則貼文與留言。這不僅僅是儲存的問題,更關鍵的是如何快速讀取這些資料。因為社群網路的特性是「讀取密集型」——用戶瀏覽內容的頻率遠遠高於發布內容的頻率。 為此,Meta 並沒有依賴單一的萬能解決方案,而是針對不同類型的資料和使用場景,設計了專門的系統。

核心引擎:TAO,管理社交關係的圖譜資料庫

Facebook 的核心是「社交圖譜」(Social Graph),這是一個由用戶、貼文、照片、粉絲專頁等「物件」(Objects)以及它們之間的「關係」(Associations)所組成的複雜網絡。 例如,「你」和「某位朋友」是物件,你們之間的「朋友關係」就是一條連結。為了高效管理這個龐大的圖譜,Facebook 開發了名為 TAO (The Associations and Objects) 的分散式資料儲存系統。

TAO 的設計目標是提供對社交圖譜極其快速的讀取存取。 它可以被視為一個巨大的、遍布全球的圖譜快取層,位於應用程式伺服器和後端永久儲存的 MySQL 資料庫之間。 當您打開 Facebook App 時,系統會向 TAO 發出大量請求,以即時組合出您的動態消息,例如查詢您的朋友是誰、他們最近發布了什麼內容、哪些內容是公開的等等。

TAO 的主要特點包括:

  • 讀取優化:絕大多數的操作都是讀取請求,TAO 的架構專為此優化,每秒能夠處理數十億次的讀取。
  • 地理分佈:TAO 的伺服器部署在全球各地的資料中心,當您在台灣發出請求時,會由距離最近的資料中心處理,大幅降低延遲。
  • 最終一致性:為了追求極致的效能和可用性,TAO 在寫入操作上採用了最終一致性模型。當您發布一則新貼文時,該寫入會先被送到主資料庫,然後再非同步地複製到全球的其他副本。 這意味著您的朋友可能需要幾秒鐘才能看到您的更新,但這短暫的延遲換來了整個系統的極高效率和穩定性。

照片的海洋:Haystack,為數千億張照片量身打造的儲存系統

照片和影片是 Facebook 上最受歡迎的內容之一,其儲存量高達數十 PB(Petabyte),並且每週以數十 TB 的速度增長。 傳統的檔案系統在處理大量小檔案時會遇到效能瓶頸,因為每次讀取檔案都需要先查詢其「元資料」(metadata,如檔案位置、權限等),這會產生大量的磁碟 I/O 操作。

為解決此問題,Facebook 開發了名為 Haystack 的物件儲存系統。 其核心思想非常巧妙,正如其名「大海撈針」(Finding a needle in a haystack)。Haystack 將數十萬張照片(針)捆綁儲存在一個巨大的檔案(稻草堆)中。 這樣做的好處是:

  • 減少元資料開銷:系統不再需要為每張照片單獨管理元資料,而是將照片的 ID、在「稻草堆」檔案中的偏移量和大小等關鍵資訊儲存在記憶體中的索引裡。
  • 快速讀取:當需要讀取某張照片時,系統直接在記憶體中查詢索引,獲得照片的精確位置,然後只需一次磁碟讀取操作即可取得照片資料,極大地提升了讀取效率。

Haystack 的設計完美契合了照片「一次寫入、頻繁讀取、從不修改、極少刪除」的特性。 當用戶上傳照片後,系統會生成多種不同尺寸的版本,並將它們一同存入 Haystack,以適應不同的顯示需求。

速度的關鍵:Memcached,無所不在的快取層

如果說 TAO 和 Haystack 是專門處理特定資料的專家,那麼 Memcached 就是一個通用的加速器,在 Meta 的基礎設施中扮演著至關重要的角色。 Memcached 是一個開源的高效能分散式記憶體快取系統,它將資料儲存在伺服器的 RAM 中,而 RAM 的讀取速度比磁碟快上好幾個數量級。

Facebook 是全球最大規模的 Memcached 用戶之一,他們將其作為一個龐大的鍵值(key-value)儲存系統,用來快取幾乎所有可以快取的東西,包括資料庫查詢結果、API 呼叫結果、甚至是機器學習演算法的計算結果。 當一個請求進來時,系統會先檢查 Memcached 中是否有現成的資料。如果有,就直接返回,避免了對後端資料庫(如 TAO 或 MySQL)的昂貴查詢。 據統計,載入一個熱門的 Facebook 頁面平均可能需要從 Memcache 中讀取數百次資料。

為了應對其龐大的規模,Facebook 對 Memcached 進行了大量客製化開發,以解決負載均衡、故障轉移和跨資料中心資料一致性等問題。

全球基石:高效、永續的自建資料中心

所有這些軟體系統都運行在 Meta 自行設計和建造的全球資料中心網絡之上。 為了擺脫對傳統硬體供應商的依賴並追求極致的效率,Facebook 在 2011 年發起了「開放運算計畫」(Open Compute Project, OCP),將其伺服器、儲存和資料中心的硬體設計開源,與整個行業共享。

這些資料中心在設計上極度注重能源效率和永續性,例如利用寒冷地區的外部空氣進行自然冷卻,並致力於 100% 使用再生能源。 隨著人工智慧(AI)和元宇宙等新興業務的發展,Meta 也在持續投資興建規模更大、為 AI 工作負載優化的新一代資料中心。

結論:整合與演進

Facebook 之所以能夠在龐大的用戶規模下保持快速與可靠,其秘訣在於一個多層次、高度專業化的架構:

  1. 專用系統:針對社交圖譜(TAO)和多媒體檔案(Haystack)等不同資料類型設計專門的儲存方案。
  2. 積極快取:在從應用程式端到資料庫端的每一個環節都大量使用快取(特別是 Memcached),以記憶體的極高速度換取低延遲。
  3. 水平擴展:所有系統都設計為可地理分佈和水平擴展,能夠透過增加更多標準化的伺服器來應對不斷增長的負載。
  4. 軟硬體整合:透過 OCP 計畫,自行設計符合自身需求的硬體,實現軟硬體的深度優化。

這個複雜的系統就像一個精密協作的交響樂團,每一個部分各司其職,共同奏響了即時、流暢的用戶體驗。隨著技術的不斷演進,從 GraphQL API 的優化 到即時數據處理平台的應用 ,Meta 的基礎設施也將繼續進化,以應對下一個十億用戶和元宇宙時代的挑戰。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *