揭祕全球最大網站Facebook背後的那些軟體

lastwinner發表於2010-07-17
  2010年6月,Google公佈全球Top 1000網站。Facebook獨佔鰲頭。

揭祕全球最大網站Facebook背後的那些軟體


   以Facebook現在的經營規模,諸多傳統伺服器的技術均將崩潰或根本無法支撐。那麼面對5億的活躍使用者,Facebook的工程師們又將如何讓網站平穩運轉呢?伯樂線上 - 職場部落格的這篇文章將展示Facebook的工程師完成這個艱鉅任務所用到的一系列軟體。


   Facebook級別規模的挑戰

   在我們深入細節之前,先了解一組Facebook不得不面對資料,你就可以想象這種規模。

  • Facebook每月的PV量:630,000,000,000 (6萬3千億)
  • Facebook上的圖片數量超過其他圖片網站的總和(包括諸如Flickr這樣的圖片網站)
  • 每個月有超過30億的圖片上傳到Facebook
  • Facebook系統每秒可以處理120萬張圖片。這還不包括Facebook的CDN處理的圖片。
  • 每月處理超過250億的資訊內容(包括使用者狀態更新,評論等)
  • Facebook的伺服器數量超過3萬臺(此資料為2009年的資料)


   Facebook所用的軟體

   從某些方面來說,Facebook還是屬於LAMP型別網站,但是,為了配合其他大量的元件和服務,Facebook對已有的方法,已經做了必要的改變、擴充和修改。

   比如:
  • Facebook依然使用PHP,但Facebook已重建新的編譯器,以滿足在其Web伺服器上載入原生程式碼,從而提升效能;
  • Facebook使用Linux系統,但為了自身目的,也已做了必要的優化。(尤其是在網路吞吐量方面);
  • Facebook使用MySQL,但也對其做優化。

   還有定製的系統,比如, Haystack -- 高度可擴充套件的物件儲存,用來處理Facebook的龐大的圖片;Scribe -- Facebook的日誌系統。

   下面展現給大家的是,全球最大的社交網站Facebook所使用到的軟體。

   Memcached 揭祕全球最大網站Facebook背後的那些軟體

   Memcached是一款相當有名的軟體。它是分散式記憶體快取系統。Facebook(還有大量的網站)用它作為Web伺服器和MySQL伺服器之間的快取層。經過多年,Facebook已在Memcached和其相關軟體(比如,網路棧)上做了大量優化工作。

   Facebook執行著成千上萬的Memcached伺服器,藉以及時處理TB級的快取資料。可以這樣說,Facebook擁有全球最大的Memcached裝置。

   HipHop for PHP 揭祕全球最大網站Facebook背後的那些軟體

   和執行在本地伺服器上程式碼相比,PHP的執行速度相對較慢。HipHop把PHP程式碼轉換成C++程式碼,提高編譯時的效能。因為Facebook很依賴PHP來處理資訊,有了HipHop,Facebook在Web伺服器方面更是如虎添翼。

   HipHop誕生過程:在Facebook,一小組工程師(最初是3位)用了18個月研發而成。

   Haystack 揭祕全球最大網站Facebook背後的那些軟體

   Haystack是Facebook高效能的圖片儲存/檢索系統。(嚴格來說,Haystack是一物件儲存,所以它不一定要儲存圖片。)Haystack的工作量超大。Facebook上有超過2百億張圖片,每張圖片以四種不同解析度儲存,所以,Facebook有超過8百億張圖片。

   Haystack的作用不單是處理大量的圖片,它的效能才是亮點。我們在前面已提到,Facebook每秒大概處理120萬張圖片,這個資料並不包括其CDN處理的圖片數。這可是個驚人的資料!!!

   BigPipe 揭祕全球最大網站Facebook背後的那些軟體

   BigPipe是Facebook開發的動態網頁處理系統。為了達到最優,Facebook用它來處理每個網頁的分塊(也稱“Pagelets”)。

   比如,聊天視窗是獨立檢索的,新聞源也是獨立檢索的。這些Pagelets是可以併發檢索,效能也隨之提高。如此,即使網站的某部分停用或崩潰後,使用者依然可以使用。

   Cassandra 揭祕全球最大網站Facebook背後的那些軟體

   Cassandra是一個沒有單點故障的分散式儲存系統。它是前NoSQL運動的成員之一,現已開源(已加入Apache工程)。Facebook用它來做郵箱搜尋。

   除了Facebook之外,Cassandra也適用於很多其他服務,比如Digg。

   Scribe 揭祕全球最大網站Facebook背後的那些軟體

   Scribe是個靈活多變的日誌系統,Facebook把它用於多種內部用途。Scribe用途:處理Facebook級別日誌,一旦有新的日誌分類生成,Scribe將自動處理。(Facebook有上百個日誌分類)。

   Hadoop and Hive揭祕全球最大網站Facebook背後的那些軟體

   Hadoop是款開源Map/Reduce框架,它可以輕鬆處理海量資料。Facebook用它來做資料分析。(前面就說到了,Facebook的資料量是超海量的。)Hive起源於Facebook,Hive可以使用SQL查詢,讓非程式設計師比較容易使用Hadoop。(注1: Hive是是基於Hadoop的一個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 )

   Thrift

   Facebook在其不同的服務中,使用了不同的語言。比如: PHP用在前端,Erlang用於聊天系統,Java和C++用於其它地方,等等。Thrift是內部開發的跨語言的框架,把不同的語言繫結在一起,使之可以相互“交流”。這就讓Facebook的跨語言開發,變得比較輕鬆。

   Facebook已把Thrift開源,Thrift支援的語言種類將更多。

   Varnish 揭祕全球最大網站Facebook背後的那些軟體

   Varnish是一個HTTP加速器,擔當負載均衡角色,同時也用於快速處理快取內容。

   Facebook用Varnish處理圖片和使用者照片,每天都要處理十億級的請求。和Facebook其他的應用應用一樣,Varnish也是開源的。

   Facebook可以平穩執行,還得利於其他方面

   雖然上面已經提到了一些構成Facebook系統的軟體,但是處理如此龐大的系統,本身就是一項複雜的任務。所以,下面還將列出使Facebook能平穩執行的一些東西。

   逐步釋出&暗啟動

   Facebook有一個系統,他們稱之為“門衛”。該系統可以針對不同種類的使用者執行不同的程式碼。(它簡單介紹了程式碼庫中的不同條件。)該系統讓Facebook逐步釋出新特性、A/B測試、啟用僅針對Facebook員工的特性 等等。

   門衛系統也讓Facebook做些“暗啟動”的事情。比如,在某一特性上線之前,可以啟用該特性背後的元件。另外,它還可以做模擬壓力測試,發現瓶頸和潛在的問題。默默啟動一般都是在正式啟動之前的2周完成。

   實時系統的簡介

   Facebook會仔細監控自身系統,有趣的是,它還監控每個PHP函式在實時生產環境下的效能。這一實時PHP環境監控是通過一個叫XHProf的開源工具完成的。

   逐步禁用某些特性,藉以提高效能

   如果Facebook遇到效能問題,Facebook有大量的途徑來逐步禁用不很重要的特性,以提高其核心特性效能。

   尚未提到的東西

   雖然這裡無法過多深入硬體方面,但硬體絕對是Facebook能達到空前規模的重要因素。比如,和其他大型網站一樣,Facebook也用CDN來處理靜態內容。Facebook還在美國西部的俄勒岡州建有一超大的資料中心,可以隨時增加伺服器。

   當然了,除了前面已經提到的,還有其他大量的軟體沒有說到。但是,希望能突出其中非常有特色的。

   Facebook和開源之間的“戀情”

   Facebook和開源之間聯絡,此文不能不提,雖不能說Facebook是多麼地鍾愛開源,但至少可以這樣說,Facebook是“愛”著開源的。

   Facebook不僅使用(也捐贈)開源軟體,比如,Linux、Memcached、MySQL、Hadoop等等,它還內部開發不少軟體,並且也將之開源。

   Facebook開發的開源工程,包括HipHop、Cassandra、Thrift和Scribe。另外,Facebook也把Tornado開源了。Tornado是一個高效能的Web伺服器框架,由FriendFeed幕後團隊開發而成。(2009年8月,Facebook收購FriendFeed。)

   (Facebook所用到的開源軟體,可以在Facebook的開源頁面找到。)

   面臨更多的大規模挑戰

   Facebook以一種令人難以置信的速度成長。它的使用者群幾乎是成倍增加,活躍使用者數量現已接近5億。而且,誰都無法預測今年底,活躍使用者量會到多少。

   Facebook甚至成立了一個專門的“成長小組”,該小組不斷思考如何讓人們使用facebook並融入到facebook中。

   這一快速成長,意味著Facebook將遇到不同的效能瓶頸。Facebook會面臨來這如下方面的挑戰:PV、搜尋、上傳的圖片和狀態訊息,使用者之間的互動和使用者和Facebook之間的互動帶來的挑戰。

   這也是Facebook面對的事實。Facebook的工程師們將繼續尋求新方法來擴充套件(這不只是增加伺服器的問題了)。比如,隨著網站成長,其圖片儲存系統已經多次完全重寫。

   所以,我們將看到Facebook的工程師們奔向下一個“山頭”。我們相信他們不會辜負眾望。畢竟,他們正跨越山頭,那個我們大多數人僅能嚮往的山頭;他們正擴充套件網站,那個使用者來自全球各地的網站。當你實現那個里程碑時,你將彪炳史冊。

   資料來源:Facebook工程師們的報告和部落格。
   本文首發:伯樂線上 - 職場部落格
   本文地址:http://blog.jobbole.com/entry.php/73
   特殊申明:此文耗費筆者不少精力。如若轉載,必須保留本文地址和出處,否則視為侵權。謝謝合作。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-668272/,如需轉載,請註明出處,否則將追究法律責任。

相關文章