世界最大的PHP站點 Facebook后臺技術(shù)探秘
在今年舉行的Facebook F8開發(fā)者大會上,51CTO帶您了解了其***的開放圖戰(zhàn)略和語義搜索。今天我們一起來了解Facebook背后的軟件,看看作為當(dāng)今世界上訪問量***的網(wǎng)站之一,F(xiàn)acebook是如何保證5億用戶的系統(tǒng)一直穩(wěn)定可靠的運(yùn)行。
Facebook的擴(kuò)展性挑戰(zhàn)
在我們討論細(xì)節(jié)之前,這里有一些Facebook已經(jīng)做的軟件規(guī)模:
◆Facebook有570000000000每月頁面瀏覽量 (據(jù)Google Ad Planner)
◆Facebook的照片量比其他所有圖片網(wǎng)站加起來還多(包括Flickr等網(wǎng)站)
◆每個月超過30億張照片被上傳
◆Facebook的系統(tǒng)服務(wù)每秒處理120萬張照片,這不包括CDN服務(wù)中處理的照片
◆每月超過25億條的內(nèi)容 (狀態(tài)更新,評論等)被共享
◆Facebook有超過30,000服務(wù)器(這個數(shù)字是去年的)
Facebook擴(kuò)展所依賴的軟件
Facebook是在某些程度上說仍然是LAMP的站點,但它比普通的LAMP大得多,以納入其他元素和很多服務(wù),并修改現(xiàn)行的做法。
例如:
◆Facebook仍使用PHP,但它已經(jīng)為它建立一個編譯器,以便它可以分為本地代碼打開了Web服務(wù)器,從而提高性能。
◆Facebook使用Linux,但他特別為網(wǎng)絡(luò)吞吐量做了優(yōu)化。
◆Facebook使用MySQL,但主要是作為一個Key-value的持久性存儲,Jions和服務(wù)器邏輯操作在Web服務(wù)器上操作。因為在那里更容易執(zhí)行。
還有是自編寫的系統(tǒng),如Haystack,一個高度可擴(kuò)展的對象存儲,用來存儲Facebook的照片。還有Scribe,一個日志系統(tǒng),可以運(yùn)行在Facebook的巨大規(guī)模上的日志系統(tǒng)。
現(xiàn)在我們介紹一下全球***的社會網(wǎng)絡(luò)網(wǎng)站的所使用的軟件吧。
Memcached
memcached的是現(xiàn)在互聯(lián)網(wǎng)最有名的軟件之一了。 這是一個分布式內(nèi)存緩存系統(tǒng),用來作為Web服務(wù)器和MySQL服務(wù)器之間的緩存層(因為數(shù)據(jù)庫訪問比較慢)。 多年以來,F(xiàn)acebook已經(jīng)提出了一些優(yōu)化Memcached和一些周邊軟件的辦法。如壓縮network stack。
Facebook的每時每刻都有數(shù)10TB的數(shù)據(jù)緩存在Memcached的數(shù)千臺服務(wù)器上。 它可能是世界上***的Memcached的集群了。
PHP作為一種腳本語言,和本地程序相比是運(yùn)行緩慢的。 HipHop可以將PHP轉(zhuǎn)換成C + +代碼,然后再進(jìn)行編譯,可以獲得更好的性能。 因為Facebook嚴(yán)重依賴PHP,這使得其可以讓W(xué)eb服務(wù)器運(yùn)行的更有效率。
一個工程師小團(tuán)隊在Facebook(一開始只有三人)花了18個月時間開發(fā)HipHop,現(xiàn)在已經(jīng)是可用狀態(tài)。
Haystack
Haystack是Facebook的高性能照片存儲/檢索系統(tǒng)(嚴(yán)格來說,是一個對象存儲,因此它并不一定要存儲照片)。 它有許多工作要做;有超過20億張上傳的照片,并且每一個被保存在四個不同的分辨率,因此有超過800億張照片。
它不僅是對能夠處理的上億的照片,運(yùn)行表現(xiàn)也是至關(guān)重要的。 正如我們前面提到的,F(xiàn)acebook的服務(wù)約120萬張照片每秒 ,這個數(shù)字不包括CDN上的。 這是一個驚人的數(shù)字。關(guān)于Facebook的圖片存儲請參考51CTO之前的報道《Facebook圖片存儲架構(gòu)技術(shù)全解析》。
BigPipe
BigPipe是Facebook開發(fā)的一個動態(tài)的網(wǎng)頁服務(wù)系統(tǒng)。 Facebook使用它來按section(稱為“pagelets”)處理每個網(wǎng)頁,以獲取***性能。
例如,在聊天窗口是分開的,新聞Feed也是分開的,等等。 這些pagelets可以在一個頁面表現(xiàn)的時候同時使用,這是該頁面表現(xiàn)的時候獲取進(jìn)來的。即使某些工程的一部分關(guān)閉或中端,用戶也可以獲得一部分網(wǎng)頁。
Cassandra
Cassandra是一個不會單點失敗的分布式存儲系統(tǒng)。 這是為NoSQL運(yùn)動的一個重要組成部分,并已公開的源代碼(它甚至成為一個Apache項目)。Facebook在搜索功能中使用它。
除了Facebook,還有一些人也用它,例如Digg的。 不過最近Twitter放棄了Cassandra。關(guān)于Cassandra的更多介紹可以參考51CTO的專題《奔向自由?Cassandra數(shù)據(jù)庫應(yīng)用指南》。
Scribe
Scribe是一個靈活的日志系統(tǒng),F(xiàn)acebook在他的內(nèi)部大量使用。 它的能夠處理在Facebook的大規(guī)模日志記錄,并自動處理新的日志記錄類別,Facebook有數(shù)百個日志類別(categories)。#p#
Hadoop and Hive
Hadoop的是一個開源的map-reduce實現(xiàn),使得它可以在進(jìn)行大數(shù)據(jù)上進(jìn)行運(yùn)算。 Facebook的使用這個進(jìn)行數(shù)據(jù)分析(而我們都知道,F(xiàn)acebook已經(jīng)大量的數(shù)據(jù))。 Hive就是發(fā)源于Facebook,使得對于Hadoop使用的SQL查詢成為可能,從而是其更容易對非程序員使用。
Hadoop和Hive是開源的(Apache項目),有為數(shù)眾多的追隨者,例如雅虎和Twitter。
Thrift
Facebook使用的幾種不同的語言和不同的services。 PHP是最終用于前端,Erlang是用于聊天,Java和C ++也使用于多種場所,也許還有其他語言。Thrift是一個內(nèi)部開發(fā)的跨語言的框架,聯(lián)系語言,使他們可以在一起合作,從而使他們之間可以交互。 這使得Facebook可以更容易為繼續(xù)保持其跨語言的發(fā)展。
Facebook已經(jīng)讓Thrift開源。更多的語言支持已被添加到Thrift。
Varnish
Varnish是一個HTTP加速器,可以作為一個負(fù)載平衡器,并緩存的內(nèi)容,然后可以以閃電般的速度送達(dá)。
Facebook使用的arnish來處理照片和個人資料圖片,處理每天數(shù)十億的要求。 和其他的東西一樣,Varnish是開源的。
保持Facebook 順暢運(yùn)行的其他東西
我們已經(jīng)提到的軟件,組成了Facebook的系統(tǒng),并幫助運(yùn)行在大規(guī)模上。 但是,處理這么大的系統(tǒng)是一個復(fù)雜的任務(wù),因此我們將列出一些其他的東西,他們保持了Facebook的平穩(wěn)運(yùn)行。
漸進(jìn)發(fā)布和暗啟動
Facebook有一個他們所謂的守門人制度(Gatekeeper),允許他們可以給不同的用戶運(yùn)行兩套不同的系統(tǒng)。 這讓Facebook漸進(jìn)的發(fā)布新的功能,A / B測試,只為Facebook雇員發(fā)布等的某些特性。
Gatekeeper也可以讓Facebook實現(xiàn)“暗啟動”,這是在用戶使用一些功能之前,就激活某些功能(因為用戶沒有察覺,所以稱之為暗啟動)。 這將作為一個現(xiàn)實世界的壓力測試,在正式啟動前,幫助揭露一些功能障礙和其他問題。 暗啟動通常是在正式啟動前兩個星期。
Profiling的直播系統(tǒng)
Facebook的仔細(xì)監(jiān)控其系統(tǒng),有趣的是它也負(fù)責(zé)監(jiān)察每一個PHP函數(shù)在生產(chǎn)環(huán)境的性能。 檢測各個PHP的環(huán)境的配置運(yùn)行情況。使用開源工具,XHProf 。
漸進(jìn)的利用關(guān)閉功能來提升性能
如果Facebook運(yùn)行時出現(xiàn)性能問題,有一個辦法,就是逐步禁用不太重要的功能,以增強(qiáng)Facebook的大量核心功能表現(xiàn)。
我們沒有提及的事情
我們沒有提到硬件相關(guān)的事情,但這也是提高可伸縮性的重要一環(huán)。例如,就像其他大型站點,F(xiàn)acebook利用CDN來處理靜態(tài)內(nèi)容。Facebook還有一個the huge data center,可以幫助他擴(kuò)展更多的服務(wù)。
Facebook的開源情節(jié)
不僅是Facebook使用(和幫助),如Linux,Memcached的,MySQL和Hadoop的開源軟件,以及許多其他情況下,也貢獻(xiàn)許多了其內(nèi)部開發(fā)的軟件。
Facebook亦開源了Tornado,一個高性能的網(wǎng)絡(luò)服務(wù)器框架,由FriendFeed團(tuán)隊開發(fā)。關(guān)于開放源碼軟件清單,可以在Facebook’s Open Source page.找到。
【其他Facebook技術(shù)文章推薦】
- 來自Facebook等成功Web開發(fā)者的建議分享
- Facebook揭秘HipHop項目 PHP程序大提速
- 視頻專題:大型網(wǎng)站架構(gòu)技術(shù)專家談
- 高并發(fā)高負(fù)載的大型網(wǎng)站系統(tǒng)架構(gòu)
- 大型網(wǎng)站架構(gòu)演變和知識體系
本文轉(zhuǎn)載自顏開的博客,原文:Facebook背后的軟件。