天天看點

揭秘Facebook背後的那些軟體

對于Facebook這樣超大規模的網站,很多傳統的解決方案根本不适用。Facebook工程師們面臨的巨大挑戰是保證一個近5億活躍使用者的網站一直穩定可靠地運作。他們是如何做到的呢,這篇文章将介紹一下他們所使用的軟體和技術。

  在進入讨論細節之前,先看下面的一些資料,也許讓你對Facebook所面臨的巨大挑戰有一些直覺的認識:

Facebook每月有5700億頁面浏覽量 (據Google Ad Planner)。

Facebook的照片量比其他所有圖檔網站加起來的還要多(包括Flickr等網站)。

每個月超過30億張照片被上傳。

Facebook的系統每秒要處理120萬張照片。這還不包括CDN處理的照片。

每月有超過25億條内容 (狀态更新,評論等)被共享。

Facebook有超過30,000台伺服器 (這是去年的資料!)

  在某些程度上說,Facebook仍然是LAMP的站點,但為了能容納很多其他的元素與服務,Facebook不得不對它們進行改進與擴充,并修改現行的一些做法。

  例如:

Facebook仍使用PHP,但為它建立了一個編譯器,将PHP代碼編譯為在Web伺服器上執行的本地代碼,進而提高性能。

Facebook使用Linux,但針對自己的需求對Linux進行了優化,特别是網絡吞吐量方面。

Facebook使用MySQL,但主要是作為一個Key-value的持久性存儲系統,而将連接配接查詢和邏輯操作放在Web伺服器上進行,因為在那裡更容易進行優化。

  另外還有自已開發的系統,如Haystack,一個高度可擴充的對象存儲系統,用來存儲Facebook上巨量的照片。還有Scribe,一個可以運作在Facebook這種超大規模網站上的日志系統。

  好,讓我們來看看全球最大的社交網站所使用的軟體吧。

  Memcached

  

揭秘Facebook背後的那些軟體

  Facebook每時每刻都有數10TB的資料緩存在數千台Memcached伺服器上。它可能是世界上最大的Memcached伺服器叢集了。

揭秘Facebook背後的那些軟體

  一個工程師小團隊在Facebook(一開始隻有三人)花了18個月時間開發HipHop,現在已經投入正式使用。

揭秘Facebook背後的那些軟體

  它不僅要能處理上億的照片,而且性能也是至關重要的。正如我們前面提到的,Facebook每秒鐘要處理約120萬張照片,而且不包括CDN上的,這是一個驚人的數字。

揭秘Facebook背後的那些軟體

  例如,聊天視窗,新聞Feed等是通過分塊分開進行傳輸的。這些pagelets可以并行工作,不僅可以提高性能,而且即使其中一部分失效或中斷,也不影響使用者的正常通路。

揭秘Facebook背後的那些軟體

  除了Facebook,其他網站也在使用它,例如Digg。

揭秘Facebook背後的那些軟體

  Hadoop和Hive都是開源的(Apache項目),并且被一些大的網站使用,例如雅虎和Twitter。

  Facebook已将Thrift開源,支援的語言會越來越多。

揭秘Facebook背後的那些軟體

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

  上面我們介紹了支撐着Facebook網站系統的一些軟體。但是,處理如此龐大的系統是一項複雜的任務,下面我們将列出保證Facebook平穩運作的一些其他方面的東西。

  Facebook有一個叫“Gatekeeper”的系統,可以針對不同的使用者運作不同的代碼。它讓Facebook可以逐漸地釋出新功能,進行A/B測試,隻為Facebook員工激活某些特性。

  Gatekeeper也可以讓Facebook實作“暗啟動”,在一些功能正式投入使用之前,先激活這些功能中的某些特性(使用者不會察覺,因為UI上并沒有展現,是以稱之為暗啟動)。 這可以當作現實世界的壓力測試,幫助在正式釋出前發現存在的瓶頸和其他問題。暗啟動通常是在正式發動前兩個星期。

  通過逐漸禁用不重要的功能來提升性能

  如果Facebook運作時出現性能問題,有一個方法就是逐漸地禁用不太重要的功能,以增強Facebook核心功能的性能。

  Facebook的開源情節

  談到Facebook,我們不能不提及Facebook是多麼喜歡開源,或者可以這麼說,Facebook是“愛”着開源的。

  Facebook不僅使用(也貢獻于)已有的開源軟體,比如Linux,Memcached,MySQL,Hadoop等等,而且把自己内部開發的軟體開源。比如:HipHop, Cassandra, Thrift 和 Scribe。

  Facebook還開源了由FriendFeed團隊開發的高性能Web伺服器架構Tornado(FriendFeed 2009年8月被Facebook收購)。

  Facebook所用到的開源軟體清單,可以在http://facebook.com/opensource找到。

  飛速發展帶來的更多挑戰

  Facebook以令人難以置信的速度在發展,它的使用者數的增長幾乎是指數級的,現在已經接近5億活躍使用者,誰也不知道年底這個數字會達到多少,看起來每6個月就增加1億的使用者。

  Facebook甚至有一個專門的“growth team”,該小組不斷地研究如何讓人們更多地使用并融入Facebook。

  如此快速的發展,比如頁面浏覽、圖檔上傳,狀态資訊等使用者與網站之間以及使用者與使用者之間的各種互動内容的增長,将會産生各種各樣的性能瓶頸,帶來各種各樣的挑戰。

  這是Facebook要面對的現實。Facebook工程師們必須不停地嘗試并找到新方法來解決網站飛速發展中遇到的各種問題,比如Facebook的照片存儲系統已經被完全重寫了好幾次。

  我們就等着看facebook工程師們還會帶來啥好東東吧,相信一定會很有趣。畢竟,他們在攀登一座我們大多數人隻能在夢中見到的大山,建設一個使用者比大部分國家人口都多的網站。要幹這樣的事情,你總得有點創造力。(注:最後一段很難翻譯,感謝半含朝雨的翻譯支援)