揭祕全球最大網站 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 wKioL1j_XhHTaFI9AAAVLPhjLA0758.png-wh_50

Memcached是一款相當有名的軟件。它是分佈式內存緩存系統。Facebook(還有大量的網站)用它作爲Web服務器和MySQL服務器之間的緩存層。經過多年,Facebook已在Memcached和其相關軟件(比如,網絡棧)上做了大量優化工作。

Facebook運行着成千上萬的Memcached服務器,藉以及時處理TB級的緩存數據。可以這樣說,Facebook擁有全球最大的Memcached設備。

HipHop for PHP wKioL1j_XiSSB2P3AABMFfJRGas699.png-wh_50

和運行在本地服務器上代碼相比,PHP的運行速度相對較慢。HipHop把PHP代碼轉換成C++代碼,提高編譯時的性能。因爲Facebook很依賴PHP來處理信息,有了HipHop,Facebook在Web服務器方面更是如虎添翼。

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

Haystack wKioL1j_XjODxYwuAAAnoGK-A04142.png-wh_50

Haystack是Facebook高性能的圖片存儲/檢索系統。(嚴格來說,Haystack是一對象存儲,所以它不一定要存儲圖 片。)Haystack的工作量超大。Facebook上有超過2百億張圖片,每張圖片以四種不同分辨率保存,所以,Facebook有超過8百億張圖 片。

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

BigPipe wKiom1j_XkPhx21TAAAm6DMkyaQ019.png-wh_50

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

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

Cassandra wKioL1j_XlGx783IAAAQW8S2Xp4545.png-wh_50

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

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

Scribe wKioL1j_Xl7g4qyBAAAmDgaZw24259.png-wh_50

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

Hadoop and HivewKiom1j_XmyhJHUbAAAZ0jwrs5w689.png-wh_50

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 wKiom1j_XniBzNdqAAAWCXyFFZ0247.png-wh_50

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工程師們的報告和博客。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章