1. 程式人生 > >揭祕全球最大網站Facebook背後的那些軟體

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

2010年6月,Google公佈全球Top 1000網站。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

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

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

HipHop for PHP

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

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

Haystack

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

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

BigPipe

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

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

Cassandra

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

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

Scribe

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

Hadoop and Hive

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

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

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式