我在Quora上看到一個(gè)熱門提問:“What have been Facebook’s greatest technical accomplishments?”
前Facebook基礎(chǔ)架構(gòu)軟件部門工程總監(jiān)Robert Johnson給出的回答得到了大多數(shù)人的認(rèn)同:“我們搭建了使用Memcached緩存的MySQL數(shù)據(jù)庫集群”。在一年前他離開Facebook時(shí),這個(gè)集群已能面向超過一萬億個(gè)對(duì)象,每秒處理超過十億個(gè)響應(yīng)。
他詳細(xì)說明了在這個(gè)工作中克服的一些挑戰(zhàn):
數(shù)據(jù)中心在時(shí)間上的高度一致性。這使得用戶對(duì)facebook的操作在全世界的服務(wù)器上都是沒有時(shí)延的,例如不會(huì)出現(xiàn)在你刪除了某些內(nèi)容后,這些數(shù)據(jù)仍會(huì)在其他的服務(wù)器上存在一小段時(shí)間的情況。對(duì)這個(gè)話題感興趣的同學(xué)可移步Wired上一篇名為《透視Google資料庫全球同步的秘密》的文章,文中詳細(xì)闡述了Google在這方面的舉措。
流量控制。為防止高峰期數(shù)據(jù)傳輸擁堵和數(shù)據(jù)丟失而對(duì)請(qǐng)求發(fā)送端設(shè)計(jì)的流量控制體系。
如何設(shè)計(jì)分布式緩存?分布式設(shè)計(jì)能夠讓系統(tǒng)并行地讀取緩存,提高效率。在這個(gè)基礎(chǔ)上,F(xiàn)acebook的系統(tǒng)根據(jù)任務(wù)量的不同選擇不同的緩存形式,以節(jié)省空間并進(jìn)一步提高讀取速度。
容災(zāi)措施。在少數(shù)服務(wù)器無法響應(yīng)時(shí),隨機(jī)地向不同的服務(wù)器發(fā)送請(qǐng)求直到收到響應(yīng)為止,是個(gè)不錯(cuò)的做法。但如果有大量的服務(wù)器無法響應(yīng),這種做法會(huì)令剩下的服務(wù)器承載巨大的負(fù)荷。所以系統(tǒng)設(shè)計(jì)者會(huì)讓這些服務(wù)器在過載前就停止對(duì)用戶請(qǐng)求的響應(yīng),這種做法雖然會(huì)讓用戶感到不適,但做對(duì)于保證數(shù)據(jù)中心的穩(wěn)定是至關(guān)重要的。很多人在雙十一遇到淘寶/支付寶/銀行頁面無法響應(yīng)也是采用了這個(gè)機(jī)制。
調(diào)度與監(jiān)控。當(dāng)服務(wù)器并行協(xié)作處理某項(xiàng)事件時(shí),服務(wù)器之間能相互監(jiān)控彼此的狀況。
他還提到了Facebook針對(duì)Memcached和MySQL的改進(jìn)。
其他得票數(shù)較高的答案中提到的技術(shù)有:
HipHop for PHP。這個(gè)項(xiàng)目旨在加速和優(yōu)化PHP。它目前已支撐了大部分Facebook的Web流量。由于HipHop,F(xiàn)acebook Web服務(wù)器上的CPU使用平均減少了50%,從而大大減少了服務(wù)器的需求。
HayStack。Fackbook用于存儲(chǔ)照片的系統(tǒng),其存儲(chǔ)照片的數(shù)量在千億數(shù)量級(jí)。
Scribe。Facebook開源的日志收集系統(tǒng),它能夠從各種日志源上收集日志,存儲(chǔ)到一個(gè)中央存儲(chǔ)系統(tǒng)上,以便于進(jìn)行集中統(tǒng)計(jì)分析處理。
The Graph API。該API提供了對(duì)人員、相冊(cè)、事件等Facebook對(duì)象以及這些對(duì)象之間諸如朋友、標(biāo)簽、分享內(nèi)容等鏈接之間的訪問,通過一個(gè)統(tǒng)一而穩(wěn)定URI來訪問其表象。
我們知道,得票最高的“使用Memcached緩存的MySQL數(shù)據(jù)庫集群”不僅是Facebook的巨大成就,Google、Amazon等公司都耗費(fèi)大量精力在為“數(shù)據(jù)庫集群”尋找最高效的解決方案,它并不是一個(gè)看上去“酷”和“新”的技術(shù)理念,但在產(chǎn)品背后,它支撐著功能,影響著體驗(yàn)。
這也是PingWest所認(rèn)同的,作為一個(gè)具備全球視野、有洞見的在線科技媒體,我們不僅報(bào)道科技創(chuàng)業(yè)資訊和趨勢(shì),同時(shí)著力挖掘最有價(jià)值的產(chǎn)品背后的技術(shù)、設(shè)計(jì)方法與思考。