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