轉:Facebook後臺技術探祕

 

    每個月570000000000頁面瀏覽量,每月超過30億的圖片上傳,5億的用戶數量,Facebook的後臺是用哪些技術保障網站的流暢運行呢?

     

    在今年舉行的Facebook F8開發者大會上,51CTO帶您瞭解了其最新的開放圖戰略和語義搜索。今天咱們一塊兒來了解Facebook背後的軟件,看看做爲當今世界上訪問量最大的網站之一,Facebook是如何保證5億用戶的系統一直穩定可靠的運行。前端

    Facebook的擴展性挑戰程序員

    在咱們討論細節以前,這裏有一些Facebook已經作的軟件規模:數據庫

    ◆Facebook有570000000000每個月頁面瀏覽量 (據Google Ad Planner)緩存

    ◆Facebook的照片量比其餘全部圖片網站加起來還多(包括Flickr等網站)服務器

    ◆每月超過30億張照片被上傳網絡

    ◆Facebook的系統服務每秒處理120萬張照片,這不包括CDN服務中處理的照片架構

    ◆每個月超過25億條的內容 (狀態更新,評論等)被共享框架

    ◆Facebook有超過30,000服務器(這個數字是去年的)分佈式

    Facebook擴展所依賴的軟件memcached

    Facebook是在某些程度上說仍然是LAMP的站點,但它比普通的LAMP大得多,以歸入其餘元素和不少服務,並修改現行的作法。

    例如:

    ◆Facebook仍使用PHP,但它已經爲它創建一個編譯器,以便它能夠分爲本地代碼打開了Web服務器,從而提升性能。

    ◆Facebook使用Linux,但他特別爲網絡吞吐量作了優化。

    ◆Facebook使用MySQL,但主要是做爲一個Key-value的持久性存儲,Jions和服務器邏輯操做在Web服務器上操做。由於在那裏更容易執行。

    還有是自編寫的系統,如Haystack,一個高度可擴展的對象存儲,用來存儲Facebook的照片。還有Scribe,一個日誌系統,能夠運行在Facebook的巨大規模上的日誌系統。

    如今咱們介紹一下全球最大的社會網絡網站的所使用的軟件吧。

    Memcached

    memcached的是如今互聯網最有名的軟件之一了。 這是一個分佈式內存緩存系統,用來做爲Web服務器和MySQL服務器之間的緩存層(由於數據庫訪問比較慢)。 多年以來,Facebook已經提出了一些優化Memcached和一些周邊軟件的辦法。如壓縮network stack。

    Facebook的每時每刻都有數10TB的數據緩存在Memcached的數千臺服務器上。 它多是世界上最大的Memcached的集羣了。

    HipHop for PHP

    PHP做爲一種腳本語言,和本地程序相比是運行緩慢的。 HipHop能夠將PHP轉換成C + +代碼,而後再進行編譯,能夠得到更好的性能。 由於Facebook嚴重依賴PHP,這使得其可讓Web服務器運行的更有效率。

    一個工程師小團隊在Facebook(一開始只有三人)花了18個月時間開發HipHop,如今已是可用狀態。

    Haystack

    Haystack是Facebook的高性能照片存儲/檢索系統(嚴格來講,是一個對象存儲,所以它並不必定要存儲照片)。 它有許多工做要作;有超過20億張上傳的照片,而且每個被保存在四個不一樣的分辨率,所以有超過800億張照片。

    它不只是對可以處理的上億的照片,運行表現也是相當重要的。 正如咱們前面提到的,Facebook的服務約120萬張照片每秒 ,這個數字不包括CDN上的。 這是一個驚人的數字。關於Facebook的圖片存儲請參考51CTO以前的報道《Facebook圖片存儲架構技術全解析》。

    BigPipe

    BigPipe是Facebook開發的一個動態的網頁服務系統。 Facebook使用它來按section(稱爲「pagelets」)處理每一個網頁,以獲取最佳性能。

    例如,在聊天窗口是分開的,新聞Feed也是分開的,等等。 這些pagelets能夠在一個頁面表現的時候同時使用,這是該頁面表現的時候獲取進來的。即便某些工程的一部分關閉或中端,用戶也能夠得到一部分網頁。

    Cassandra

    Cassandra是一個不會單點失敗的分佈式存儲系統。 這是爲NoSQL運動的一個重要組成部分,並已公開的源代碼(它甚至成爲一個Apache項目)。Facebook在搜索功能中使用它。

    除了Facebook,還有一些人也用它,例如Digg的。 不過最近Twitter放棄了Cassandra。關於Cassandra的更多介紹能夠參考51CTO的專題《奔向自由?Cassandra數據庫應用指南》。

    Scribe

    Scribe是一個靈活的日誌系統,Facebook在他的內部大量使用。 它的可以處理在Facebook的大規模日誌記錄,並自動處理新的日誌記錄類別,Facebook有數百個日誌類別(categories)。

     

    Hadoop and Hive

    Hadoop的是一個開源的map-reduce實現,使得它能夠在進行大數據上進行運算。 Facebook的使用這個進行數據分析(而咱們都知道,Facebook已經大量的數據)。 Hive就是發源於Facebook,使得對於Hadoop使用的SQL查詢成爲可能,從而是其更容易對非程序員使用。

    Hadoop和Hive是開源的(Apache項目),有爲數衆多的追隨者,例如雅虎和Twitter。

    Thrift

    Facebook使用的幾種不一樣的語言和不一樣的services。 PHP是最終用於前端,Erlang是用於聊天,Java和C ++也使用於多種場所,也許還有其餘語言。Thrift是一個內部開發的跨語言的框架,聯繫語言,使他們能夠在一塊兒合做,從而使他們之間能夠交互。 這使得Facebook能夠更容易爲繼續保持其跨語言的發展。

    Facebook已經讓Thrift開源。更多的語言支持已被添加到Thrift。

    Varnish

    Varnish是一個HTTP加速器,能夠做爲一個負載平衡器,並緩存的內容,而後能夠以閃電般的速度送達。

    Facebook使用的arnish來處理照片和我的資料圖片,處理天天數十億的要求。 和其餘的東西同樣,Varnish是開源的。

    保持Facebook 順暢運行的其餘東西

    咱們已經提到的軟件,組成了Facebook的系統,並幫助運行在大規模上。 可是,處理這麼大的系統是一個複雜的任務,所以咱們將列出一些其餘的東西,他們保持了Facebook的平穩運行。

    漸進發布和暗啓動

    Facebook有一個他們所謂的守門人制度(Gatekeeper),容許他們能夠給不一樣的用戶運行兩套不一樣的系統。 這讓Facebook漸進的發佈新的功能,A / B測試,只爲Facebook僱員發佈等的某些特性。

    Gatekeeper也可讓Facebook實現「暗啓動」,這是在用戶使用一些功能以前,就激活某些功能(由於用戶沒有察覺,因此稱之爲暗啓動)。 這將做爲一個現實世界的壓力測試,在正式啓動前,幫助揭露一些功能障礙和其餘問題。 暗啓動一般是在正式啓動前兩個星期。

    Profiling的直播系統

    Facebook的仔細監控其系統,有趣的是它也負責監察每個PHP函數在生產環境的性能。 檢測各個PHP的環境的配置運行狀況。使用開源工具,XHProf 。

    漸進的利用關閉功能來提高性能

    若是Facebook運行時出現性能問題,有一個辦法,就是逐步禁用不過重要的功能,以加強Facebook的大量核心功能表現。

    咱們沒有說起的事情

    咱們沒有提到硬件相關的事情,但這也是提升可伸縮性的重要一環。例如,就像其餘大型站點,Facebook利用CDN來處理靜態內容。Facebook還有一個the huge data center,能夠幫助他擴展更多的服務。

    Facebook的開源情節

    不只是Facebook使用(和幫助),如Linux,Memcached的,MySQL和Hadoop的開源軟件,以及許多其餘狀況下,也貢獻許多了其內部開發的軟件。

    Facebook亦開源了Tornado,一個高性能的網絡服務器框架,由FriendFeed團隊開發。關於開放源碼軟件清單,能夠在Facebook’s Open Source page.找到。

     ( 本文轉載自 顏開的博客 ,原文: Facebook背後的軟件 。)
相關文章
相關標籤/搜索