對于Facebook這樣超大規(guī)模的網(wǎng)站,很多傳統(tǒng)的解決方案根本不適用。Facebook工程師們面臨的巨大挑戰(zhàn)是保證一個近5億活躍用戶的網(wǎng)站一直穩(wěn)定可靠地運行。他們是如何做到的呢,這篇文章將介紹一下他們所使用的軟件和技術(shù)。
Facebook飛速發(fā)展面臨的挑戰(zhàn)
在進(jìn)入討論細(xì)節(jié)之前,先看下面的一些數(shù)據(jù),也許讓你對Facebook所面臨的巨大挑戰(zhàn)有一些直觀的認(rèn)識:
Facebook每月有 5700億頁面瀏覽量 ?(據(jù)Google Ad Planner)。Facebook的照片量比其他所有圖片網(wǎng)站加起來的還要多(包括Flickr等網(wǎng)站)。每個月超過 30億張照片 被上傳。Facebook的系統(tǒng)每秒要處理 120萬張照片 。這還不包括CDN處理的照片。每月有超過 25億條內(nèi)容 ?(狀態(tài)更新,評論等)被共享。Facebook有超過 30,000臺服務(wù)器 ?(這是去年的數(shù)據(jù)!) Facebook飛速發(fā)展所依賴的軟件
在某些程度上說,F(xiàn)acebook仍然是LAMP的站點,但為了能容納很多其他的元素與服務(wù),F(xiàn)acebook不得不對它們進(jìn)行改進(jìn)與擴展,并修改現(xiàn)行的一些做法。
例如:
Facebook 仍使用PHP,但為它建立了一個編譯器,將PHP代碼編譯為在Web服務(wù)器上執(zhí)行的本地代碼,從而提高性能。Facebook使用Linux,但針對自己 的需求對Linux進(jìn)行了優(yōu)化,特別是網(wǎng)絡(luò)吞吐量方面。Facebook使用MySQL,但主要是作為一個Key-value的持久性存儲系統(tǒng),而將連接 查詢和邏輯操作放在Web服務(wù)器上進(jìn)行,因為在那里更容易進(jìn)行優(yōu)化。
另外還有自已開發(fā)的系統(tǒng),如Haystack,一個高度可擴展的對象存儲系統(tǒng),用來存儲Facebook上巨量的照片。還有Scribe,一個可以運行在Facebook這種超大規(guī)模網(wǎng)站上的日志系統(tǒng)。
好,讓我們來看看全球最大的社交網(wǎng)站所使用的軟件吧。
Memcached
Memcached 是 當(dāng)今互聯(lián)網(wǎng)上最著名的軟件之一。它是一個分布式的內(nèi)存緩存系統(tǒng),F(xiàn)acebook(包含其他很多網(wǎng)站)用它作為Web服務(wù)器和MySQL服務(wù)器之間的緩存 層(因為數(shù)據(jù)庫訪問相對比較慢)。多年來,F(xiàn)acebook已經(jīng)對Memcached和它的周邊軟件進(jìn)行了很多優(yōu)化,比如對network stack的優(yōu)化。
Facebook每時每刻都有數(shù)10TB的數(shù)據(jù)緩存在數(shù)千臺Memcached服務(wù)器上。它可能是世界上最大的Memcached服務(wù)器集群了。
HipHop for PHP
PHP作為一種腳本語言,和本地代碼相比是運行緩慢的。 HipHop 可以將PHP轉(zhuǎn)換成C++代碼,然后再進(jìn)行編譯,這樣可以獲得更好的性能。由于Facebook嚴(yán)重依賴PHP,所以通過HipHop可以讓W(xué)eb服務(wù)器的性能得到提高。
一個工程師小團隊在Facebook(一開始只有三人)花了18個月時間開發(fā)HipHop,現(xiàn)在已經(jīng)投入正式使用。
Haystack
Haystack
是Facebook的高性能圖片存取系統(tǒng)(嚴(yán)格來說,是一個對象存儲系統(tǒng),因此它并不僅限于存儲照片)。它工作繁忙;要管理超過200億張上傳的照片,并且每一片照片被保存為四種不同的分辨率,因此有超過800億張照片。
它不僅要能處理上億的照片,而且性能也是至關(guān)重要的。正如我們前面提到的,F(xiàn)acebook每秒鐘要處理約120萬張照片,而且不包括CDN上的,這是一個驚人的數(shù)字。
BigPipe
BigPipe
是Facebook開發(fā)的的動態(tài)網(wǎng)頁處理系統(tǒng)。為了獲得最佳性能,F(xiàn)acebook用它來按分塊處理每個網(wǎng)頁(稱為“pagelets”)。
例如,聊天窗口,新聞Feed等是通過分塊分開進(jìn)行傳輸?shù)摹_@些pagelets可以并行工作,不僅可以提高性能,而且即使其中一部分失效或中斷,也不影響用戶的正常訪問。
Cassandra
Cassandra 是一個可以避免單點故障的分布式存儲系統(tǒng)。它是NoSQL運動的一個典范,并已開放源代碼(它甚至成為一個Apache項目)。Facebook在收件箱搜索中使用它。
除了Facebook,其他網(wǎng)站也在使用它,例如Digg。
Scribe
Scribe 是一個靈活的日志系統(tǒng),F(xiàn)acebook在內(nèi)部大量使用它。它能夠處理Facebook這樣超大規(guī)模的日志記錄,并且能自動處理新生成的日志記錄類別(Facebook有數(shù)百個日志類別)。
Hadoop and Hive
Hadoop 是一個開源的map-reduce實現(xiàn),它可以輕松處理海量數(shù)據(jù)。Facebook用它來進(jìn)行數(shù)據(jù)分析(我們都知道Facebook有巨量的數(shù)據(jù))。 Hive 起 源于Facebook,它使得針對Hadoop進(jìn)行SQL查詢成為可能,從而非程序員也可以方便地使用。(注: Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的SQL查詢功能,可以將SQL語句轉(zhuǎn)換為 MapReduce任務(wù)運行。 )
Hadoop和Hive都是開源的(Apache項目),并且被一些大的網(wǎng)站使用,例如雅虎和Twitter。
Thrift
Facebook在不同的服務(wù)中,使用不同的語言。PHP用于前端,Erlang用于聊天,Java和C++也用在一些地方(也許還有其他語言)。 Thrift 是一個內(nèi)部開發(fā)的跨語言框架,它把不同的語言綁定在一起,讓它們之間相互“交流”。這樣,F(xiàn)acebook就可以很方便地進(jìn)行跨語言開發(fā)。
Facebook已將Thrift開源,支持的語言會越來越多。
Varnish
Varnish 是一個HTTP加速器,不僅可以作為一個負(fù)載均衡器,而且可以快速地對內(nèi)容進(jìn)行緩存。
Facebook使用Varnish來處理照片和個人資料圖片,每天要處理數(shù)十億的要求。像Facebook使用的其他軟件一樣,Varnish也是開源的。
保證Facebook平穩(wěn)運行的其他因素
上面我們介紹了支撐著Facebook網(wǎng)站系統(tǒng)的一些軟件。但是,處理如此龐大的系統(tǒng)是一項復(fù)雜的任務(wù),下面我們將列出保證Facebook平穩(wěn)運行的一些其他方面的東西。
逐步發(fā)布和暗啟動
Facebook有一個叫“Gatekeeper”的系統(tǒng),可以針對不同的用戶運行不同的代碼。它讓Facebook可以逐步地發(fā)布新功能,進(jìn)行A/B測試,只為Facebook員工激活某些特性。
Gatekeeper也可以讓Facebook實現(xiàn)“暗啟動”,在一些功能正式投入使用之前,先激活這些功能中的某些特性(用戶不會察覺,因為UI上并 沒有體現(xiàn),所以稱之為暗啟動)。?這可以當(dāng)作現(xiàn)實世界的壓力測試,幫助在正式發(fā)布前發(fā)現(xiàn)存在的瓶頸和其他問題。暗啟動通常是在正式發(fā)動前兩個星期。
Profiling
Facebook會仔細(xì)監(jiān)控系統(tǒng)運行情況,有趣的是還會監(jiān)控每一個PHP函數(shù)在生產(chǎn)環(huán)境中的性能,使用的是開源工具 XHProf 。
通過逐步 禁用不重要的功能來提升性能
如果Facebook運行時出現(xiàn)性能問題,有一個方法就是逐步地禁用不太重要的功能,以增強Facebook核心功能的性能。
沒有提及的方面
我們沒有提及硬件方面,但這也是Facebook能達(dá)到如此規(guī)模的重要環(huán)節(jié)。例如,和其他大型網(wǎng)站一樣,F(xiàn)acebook利用CDN來處理靜態(tài)內(nèi)容。Facebook在美國西部的俄勒岡州還有一個 巨大的數(shù)據(jù)中心 ,可以隨時根據(jù)需要增加服務(wù)器。
Facebook的開源情節(jié)
談到Facebook,我們不能不提及Facebook是多么喜歡開源,或者可以這么說,F(xiàn)acebook是“愛”著開源的。
Facebook不僅使用(也貢獻(xiàn)于)已有的開源軟件,比如Linux,Memcached,MySQL,Hadoop等等,而且把自己內(nèi)部開發(fā)的軟件開源。比如:HipHop, Cassandra, Thrift 和 Scribe。
Facebook還開源了由FriendFeed團隊開發(fā)的高性能Web服務(wù)器框架Tornado(FriendFeed 2009年8月被Facebook收購)。
Facebook所用到的開源軟件清單,可以在http://facebook.com/opensource找到。
飛速發(fā)展帶來 的更多挑戰(zhàn)
Facebook以令人難以置信的速度在發(fā)展,它的用戶數(shù)的增長幾乎是指數(shù)級的,現(xiàn)在已經(jīng)接近5億活躍用戶,誰也不知道年底這個數(shù)字會達(dá)到多少,看起來每6個月就增加1億的用戶。
Facebook甚至有一個專門的“growth team”,該小組不斷地研究如何讓人們更多地使用并融入Facebook。
如此快速的發(fā)展,比如頁面瀏覽、圖片上傳,狀態(tài)信息等用戶與網(wǎng)站之間以及用戶與用戶之間的各種交互內(nèi)容的增長,將會產(chǎn)生各種各樣的性能瓶頸,帶來各種各樣的挑戰(zhàn)。
這是Facebook要面對的現(xiàn)實。Facebook工程師們必須不停地嘗試并找到新方法來解決網(wǎng)站飛速發(fā)展中遇到的各種問題,比如Facebook的照片存儲系統(tǒng)已經(jīng)被完全重寫了好幾次。
我們就等著看facebook工程師們還會帶來啥好東東吧,相信一定會很有趣。畢竟,他們在攀登一座我們大多數(shù)人只能在夢中見到的大山,建設(shè)一個用戶比大部分國家人口都多的網(wǎng)站。要干這樣的事情,你總得有點創(chuàng)造力。(注:最后一段很難翻譯,感謝半含朝雨的翻譯支持)
英文原文: Exploring the software behind Facebook, the world’s largest site
翻譯: 博客園
部分翻譯文字參考自: http://blog.jobbole.com/entr.php/73
?
轉(zhuǎn)自: http://news.cnblogs.com/n/68453/
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
