Facebook的網站運用了哪些計算機技術?


謝邀

Facebook並不特別,使用的技術和其他大型網站沒有本質的區別,也許具體技術產品不同,但是架構思路是一致的。

我們可以通過facebook開源的技術產品一窺facebook的技術:Apple、Facebook、Google 都為開源社區做了哪些貢獻,哪個貢獻更大?


Facebook

Facebook使用LAMP(Linux、Apache、MySQL、PHP)作為技術架構。Facebook的一個技術架構工程師Steven Grimm在博客中提及到:幾乎我們所有的服務器都運行開源軟體。我們的Web服務器是Linux,Apache和PHP。我們數據庫是MySQL。我們使用memcached來保證網站的快速反應。一些後台應用Python、Perl和Java,以及一些gcc和Boost。程序員用Subversion和git來進行代碼管理。還有很多——像很多網站一樣,從頭到腳都是開源軟體。

2010年,Facebook開源了自家開發的「HipHop for PHP」;HipHop for PHP 比純PHP 高一倍的效能。Facebook使用的其他開源軟體包括:Apache Cassandra、memcached、Varnish cache、Hadoop、Hive、HBase等。

Facebook最偉大的技術成就有哪些? |PingWest中文網

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%,從而大大減少了伺服器的需求。

HayStackFackbook用於存儲照片的系統,其存儲照片的數量在千億數量級。

ScribeFacebook開源的日誌收集系統,它能夠從各種日誌源上收集日誌,存儲到一個中央存儲系統上,以便於進行集中統計分析處理。

The Graph API該API提供了對人員、相冊、事件等Facebook對象以及這些對象之間諸如朋友、標籤、分享內容等鏈接之間的訪問,通過一個統一而穩定URI來訪問其表象。

我們知道,得票最高的「使用Memcached緩存的MySQL資料庫集群」不僅是Facebook的巨大成就,Google、Amazon等公司
都耗費大量精力在為「資料庫集群」尋找最高效的解決方案,它並不是一個看上去「酷」和「新」的技術理念,但在產品背後,它支撐著功能,影響著體驗。

Facebook主要後台技術

Hadoop and Hive

Hadoop的是一個開源的map-reduce實現,使得它可以在進行大數據上進行運算。
Facebook的使用這個進行數據分析(而我們都知道,Facebook已經大量的數據)。
Hive就是發源於Facebook,使得對於Hadoop使用的SQL查詢成為可能,從而是其更容易對非程序員使用。

Hadoop和Hive是開源的(Apache項目),有為數眾多的追隨者,例如雅虎和Twitter。

官網:Welcome to Apache Hive?!

Thrift

Facebook使用的幾種不同的語言和不同的services。 PHP是最終用於前端,Erlang是用於聊天,Java和C
++也使用於多種場所,也許還有其他語言。Thrift是一個內部開發的跨語言的框架,聯繫語言,使他們可以在一起合作,從而使他們之間可以交互。
這使得Facebook可以更容易為繼續保持其跨語言的發展。

Facebook已經讓Thrift開源。更多的語言支持已被添加到Thrift。

官網:Apache Thrift

Varnish

Varnish是一個HTTP加速器,可以作為一個負載平衡器,並緩存的內容,然後可以以閃電般的速度送達。

Facebook使用的arnish來處理照片和個人資料圖片,處理每天數十億的要求。 和其他的東西一樣,Varnish是開源的。

官網:Front page | Varnish Community

保持Facebook 順暢運行的其他東西

我們已經提到的軟體,組成了Facebook的系統,並幫助運行在大規模上。 但是,處理這麼大的系統是一個複雜的任務,因此我們將列出一些其他的東西,他們保持了Facebook的平穩運行。

漸進發布和暗啟動

Facebook有一個他們所謂的守門人制度(Gatekeeper),允許他們可以給不同的用戶運行兩套不同的系統。 這讓Facebook漸進的發布新的功能,A / B測試,只為Facebook僱員發布等的某些特性。

Gatekeeper也可以讓Facebook實現「暗啟動」,這是在用戶使用一些功能之前,就激活某些功能(因為用戶沒有察覺,所以稱之為暗
啟動)。 這將作為一個現實世界的壓力測試,在正式啟動前,幫助揭露一些功能障礙和其他問題。 暗啟動通常是在正式啟動前兩個星期。

Profiling的直播系統

Facebook的仔細監控其系統,有趣的是它也負責監察每一個PHP函數在生產環境的性能。 檢測各個PHP的環境的配置運行情況。使用開源工具,XHProf 。

官網:http://pecl.php.net/package/xhprof

文檔:http://mirror.facebook.net/facebook/xhprof/doc.html

漸進的利用關閉功能來提升性能

如果Facebook運行時出現性能問題,有一個辦法,就是逐步禁用不太重要的功能,以增強Facebook的大量核心功能表現。

我們沒有提及的事情

我們沒有提到硬體相關的事情,但這也是提高可伸縮性的重要一環。例如,就像其他大型站點,Facebook利用CDN來處理靜態內容。 Facebook還有一個the huge data center,可以幫助他擴展更多的服務。

Facebook的開源情節

不僅是Facebook使用(和幫助),如Linux,Memcached的,MySQL和Hadoop的開源軟體,以及許多其他情況下, 也貢獻許多了其內部開發的軟體。

Facebook亦開源了Tornado,一個高性能的網路伺服器框 架,由FriendFeed團隊開發。關於開放源碼軟體清單,可以在Facebook』s Open Source page.找到。

官網:Tornado Web Server


推薦閱讀:

架構一個這樣的系統,管理後台如果需要操作數據,只能直接連各個資料庫?為什麼
Facebook 為什麼採用 PHP 作為 webend 主要的開發語言?
初創互聯網公司該如何進行網站架構?
衡量網站性能時,並發數與吞吐量為何要分別考量?
點點網上線初期時的「架構重寫」事件有哪些值得借鑒的經驗教訓?

TAG:網站架構 | 網站開發 | 計算機專業 | 《打造Facebook》 | 應用計算機科學 |