[譯]Facebook的架構

海興發表於2012-10-20

原文地址 http://www.quora.com/Facebook-Engineering/What-is-Facebooks-architecture

  • Web前端是用PHP寫的。然後由Facebook的HipHop編譯器1轉成C++,再由g++編譯。作為高效能的模板和Web邏輯執行層。
  • 因為受到完全依靠靜態編譯的限制,Facebook開始搞HipHop直譯器2和HipHop虛擬機器,可以把PHP程式碼翻譯成HipHop位元組碼3
  • 業務邏輯是用Thrift4以服務的方式對外提供。這些服務根據其需求不同可能是用PHP,C++或Java實現的(也可能用了其它語言...)
  • 用Java實現的服務沒有用任何企業應用伺服器,而是用了Facebook定製的應用伺服器。雖然看起來這是重複勞動,但因為所有服務都是通過Thrift對外提供和訪問的,所以Tomcat,甚至Jetty的開銷對他們來說都太高了,又沒什麼顯著的價值。
  • 儲存是用MySQL, Memcached 5, Hadoop的 HBase 6實現的。 Memcached 除了用作 MySQL的緩衝層 ,還作為通用緩衝層使用。
  • 離線處理 用Hadoop 和 Hive。
  • 像日誌、點選和訂閱源這樣的資料用Scribe 7傳輸,用 Scribe-HDFS 8聚合並儲存在HDFS中,因此可以用MapReduce做擴充套件分析。
  • BigPipe 9是他們用來加速頁面渲染的定製技術,使用了管道邏輯。
  • Varnish Cache 10用作HTTP代理。他們喜歡它是因為它的高效能和效率11.
  • 使用者上傳的數十億照片用Haystack儲存,這是一個Facebook開發的ad-hoc儲存方案,進行了底層優化,引入了僅追加寫入方式12.
  • Facebook訊息用它自己的架構,基於分片和動態叢集管理的基礎架構。業務邏輯和持久化封裝在“單元格”中。每個單元格處理一部分使用者;隨著人口的增長可以新增新的單元格13
  • 持久化用HBase14完成。
  • Facebook 訊息的搜尋引擎用儲存在HBase中的反向索引構建15
  • Facebook搜尋引擎的實現細節目前不得而知
  • 預輸入搜尋用定製的儲存和獲取邏輯16
  • 聊天在用Erlang開發的Epoll伺服器上,用Thrift訪問17
  • 它們還構建了一個監測報警自動應答系統,可以發起恰當的修復流程,在不能修復時升級為人工處理。18 關於在這些元件上調配的資源,已知的一些資訊和資料是:
  • 據估算Facebook擁有的伺服器超過 60,000臺18。他們最近在Prineville, Oregon的資料中心基於完全自行設計的硬體19,是最近推出的開放計算專案20
  • 有300TB的資料儲存在Memcached流程上21
  • 他們的Hadoop 和 Hive叢集由3000臺8核、32GB記憶體和12TB硬碟的伺服器組成,總共有 24k 核心, 96 TB RAM和 36 PB 硬碟22
  • 在2010年七月,每天1000億點選,500億照片,3兆物件快取,每天130TB日誌。22

腳註請參見原文。

相關文章