揭祕全球最大網站Facebook背後的那些軟體
2010年6月,Google公佈全球Top 1000網站。Facebook獨佔鰲頭。
以Facebook現在的經營規模,諸多傳統伺服器的技術均將崩潰或根本無法支撐。那麼面對5億的活躍使用者,Facebook的工程師們又將如何讓網站平穩運轉呢?伯樂線上 - 職場部落格的這篇文章將展示Facebook的工程師完成這個艱鉅任務所用到的一系列軟體。
Facebook級別規模的挑戰
在我們深入細節之前,先了解一組Facebook不得不面對資料,你就可以想象這種規模。
Facebook所用的軟體
從某些方面來說,Facebook還是屬於LAMP型別網站,但是,為了配合其他大量的元件和服務,Facebook對已有的方法,已經做了必要的改變、擴充和修改。
比如:
還有定製的系統,比如, Haystack -- 高度可擴充套件的物件儲存,用來處理Facebook的龐大的圖片;Scribe -- Facebook的日誌系統。
下面展現給大家的是,全球最大的社交網站Facebook所使用到的軟體。
Memcached
Memcached是一款相當有名的軟體。它是分散式記憶體快取系統。Facebook(還有大量的網站)用它作為Web伺服器和MySQL伺服器之間的快取層。經過多年,Facebook已在Memcached和其相關軟體(比如,網路棧)上做了大量優化工作。
Facebook執行著成千上萬的Memcached伺服器,藉以及時處理TB級的快取資料。可以這樣說,Facebook擁有全球最大的Memcached裝置。
HipHop for PHP
和執行在本地伺服器上程式碼相比,PHP的執行速度相對較慢。HipHop把PHP程式碼轉換成C++程式碼,提高編譯時的效能。因為Facebook很依賴PHP來處理資訊,有了HipHop,Facebook在Web伺服器方面更是如虎添翼。
HipHop誕生過程:在Facebook,一小組工程師(最初是3位)用了18個月研發而成。
Haystack
Haystack是Facebook高效能的圖片儲存/檢索系統。(嚴格來說,Haystack是一物件儲存,所以它不一定要儲存圖片。)Haystack的工作量超大。Facebook上有超過2百億張圖片,每張圖片以四種不同解析度儲存,所以,Facebook有超過8百億張圖片。
Haystack的作用不單是處理大量的圖片,它的效能才是亮點。我們在前面已提到,Facebook每秒大概處理120萬張圖片,這個資料並不包括其CDN處理的圖片數。這可是個驚人的資料!!!
BigPipe
BigPipe是Facebook開發的動態網頁處理系統。為了達到最優,Facebook用它來處理每個網頁的分塊(也稱“Pagelets”)。
比如,聊天視窗是獨立檢索的,新聞源也是獨立檢索的。這些Pagelets是可以併發檢索,效能也隨之提高。如此,即使網站的某部分停用或崩潰後,使用者依然可以使用。
Cassandra
Cassandra是一個沒有單點故障的分散式儲存系統。它是前NoSQL運動的成員之一,現已開源(已加入Apache工程)。Facebook用它來做郵箱搜尋。
除了Facebook之外,Cassandra也適用於很多其他服務,比如Digg。
Scribe
Scribe是個靈活多變的日誌系統,Facebook把它用於多種內部用途。Scribe用途:處理Facebook級別日誌,一旦有新的日誌分類生成,Scribe將自動處理。(Facebook有上百個日誌分類)。
Hadoop and Hive
Hadoop是款開源Map/Reduce框架,它可以輕鬆處理海量資料。Facebook用它來做資料分析。(前面就說到了,Facebook的資料量是超海量的。)Hive起源於Facebook,Hive可以使用SQL查詢,讓非程式設計師比較容易使用Hadoop。(注1: Hive是是基於Hadoop的一個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 )
Thrift
Facebook在其不同的服務中,使用了不同的語言。比如: PHP用在前端,Erlang用於聊天系統,Java和C++用於其它地方,等等。Thrift是內部開發的跨語言的框架,把不同的語言繫結在一起,使之可以相互“交流”。這就讓Facebook的跨語言開發,變得比較輕鬆。
Facebook已把Thrift開源,Thrift支援的語言種類將更多。
Varnish
Varnish是一個HTTP加速器,擔當負載均衡角色,同時也用於快速處理快取內容。
Facebook用Varnish處理圖片和使用者照片,每天都要處理十億級的請求。和Facebook其他的應用應用一樣,Varnish也是開源的。
Facebook可以平穩執行,還得利於其他方面
雖然上面已經提到了一些構成Facebook系統的軟體,但是處理如此龐大的系統,本身就是一項複雜的任務。所以,下面還將列出使Facebook能平穩執行的一些東西。
逐步釋出&暗啟動
Facebook有一個系統,他們稱之為“門衛”。該系統可以針對不同種類的使用者執行不同的程式碼。(它簡單介紹了程式碼庫中的不同條件。)該系統讓Facebook逐步釋出新特性、A/B測試、啟用僅針對Facebook員工的特性 等等。
門衛系統也讓Facebook做些“暗啟動”的事情。比如,在某一特性上線之前,可以啟用該特性背後的元件。另外,它還可以做模擬壓力測試,發現瓶頸和潛在的問題。默默啟動一般都是在正式啟動之前的2周完成。
實時系統的簡介
Facebook會仔細監控自身系統,有趣的是,它還監控每個PHP函式在實時生產環境下的效能。這一實時PHP環境監控是通過一個叫XHProf的開源工具完成的。
逐步禁用某些特性,藉以提高效能
如果Facebook遇到效能問題,Facebook有大量的途徑來逐步禁用不很重要的特性,以提高其核心特性效能。
尚未提到的東西
雖然這裡無法過多深入硬體方面,但硬體絕對是Facebook能達到空前規模的重要因素。比如,和其他大型網站一樣,Facebook也用CDN來處理靜態內容。Facebook還在美國西部的俄勒岡州建有一超大的資料中心,可以隨時增加伺服器。
當然了,除了前面已經提到的,還有其他大量的軟體沒有說到。但是,希望能突出其中非常有特色的。
Facebook和開源之間的“戀情”
Facebook和開源之間聯絡,此文不能不提,雖不能說Facebook是多麼地鍾愛開源,但至少可以這樣說,Facebook是“愛”著開源的。
Facebook不僅使用(也捐贈)開源軟體,比如,Linux、Memcached、MySQL、Hadoop等等,它還內部開發不少軟體,並且也將之開源。
Facebook開發的開源工程,包括HipHop、Cassandra、Thrift和Scribe。另外,Facebook也把Tornado開源了。Tornado是一個高效能的Web伺服器框架,由FriendFeed幕後團隊開發而成。(2009年8月,Facebook收購FriendFeed。)
(Facebook所用到的開源軟體,可以在Facebook的開源頁面找到。)
面臨更多的大規模挑戰
Facebook以一種令人難以置信的速度成長。它的使用者群幾乎是成倍增加,活躍使用者數量現已接近5億。而且,誰都無法預測今年底,活躍使用者量會到多少。
Facebook甚至成立了一個專門的“成長小組”,該小組不斷思考如何讓人們使用facebook並融入到facebook中。
這一快速成長,意味著Facebook將遇到不同的效能瓶頸。Facebook會面臨來這如下方面的挑戰:PV、搜尋、上傳的圖片和狀態訊息,使用者之間的互動和使用者和Facebook之間的互動帶來的挑戰。
這也是Facebook面對的事實。Facebook的工程師們將繼續尋求新方法來擴充套件(這不只是增加伺服器的問題了)。比如,隨著網站成長,其圖片儲存系統已經多次完全重寫。
所以,我們將看到Facebook的工程師們奔向下一個“山頭”。我們相信他們不會辜負眾望。畢竟,他們正跨越山頭,那個我們大多數人僅能嚮往的山頭;他們正擴充套件網站,那個使用者來自全球各地的網站。當你實現那個里程碑時,你將彪炳史冊。
資料來源:Facebook工程師們的報告和部落格。
本文首發:伯樂線上 - 職場部落格
本文地址:http://blog.jobbole.com/entry.php/73
特殊申明:此文耗費筆者不少精力。如若轉載,必須保留本文地址和出處,否則視為侵權。謝謝合作。
以Facebook現在的經營規模,諸多傳統伺服器的技術均將崩潰或根本無法支撐。那麼面對5億的活躍使用者,Facebook的工程師們又將如何讓網站平穩運轉呢?伯樂線上 - 職場部落格的這篇文章將展示Facebook的工程師完成這個艱鉅任務所用到的一系列軟體。
Facebook級別規模的挑戰
在我們深入細節之前,先了解一組Facebook不得不面對資料,你就可以想象這種規模。
- Facebook每月的PV量:630,000,000,000 (6萬3千億)
- Facebook上的圖片數量超過其他圖片網站的總和(包括諸如Flickr這樣的圖片網站)
- 每個月有超過30億的圖片上傳到Facebook
- Facebook系統每秒可以處理120萬張圖片。這還不包括Facebook的CDN處理的圖片。
- 每月處理超過250億的資訊內容(包括使用者狀態更新,評論等)
- Facebook的伺服器數量超過3萬臺(此資料為2009年的資料)
Facebook所用的軟體
從某些方面來說,Facebook還是屬於LAMP型別網站,但是,為了配合其他大量的元件和服務,Facebook對已有的方法,已經做了必要的改變、擴充和修改。
比如:
- Facebook依然使用PHP,但Facebook已重建新的編譯器,以滿足在其Web伺服器上載入原生程式碼,從而提升效能;
- Facebook使用Linux系統,但為了自身目的,也已做了必要的優化。(尤其是在網路吞吐量方面);
- Facebook使用MySQL,但也對其做優化。
還有定製的系統,比如, Haystack -- 高度可擴充套件的物件儲存,用來處理Facebook的龐大的圖片;Scribe -- Facebook的日誌系統。
下面展現給大家的是,全球最大的社交網站Facebook所使用到的軟體。
Memcached
Memcached是一款相當有名的軟體。它是分散式記憶體快取系統。Facebook(還有大量的網站)用它作為Web伺服器和MySQL伺服器之間的快取層。經過多年,Facebook已在Memcached和其相關軟體(比如,網路棧)上做了大量優化工作。
Facebook執行著成千上萬的Memcached伺服器,藉以及時處理TB級的快取資料。可以這樣說,Facebook擁有全球最大的Memcached裝置。
HipHop for PHP
和執行在本地伺服器上程式碼相比,PHP的執行速度相對較慢。HipHop把PHP程式碼轉換成C++程式碼,提高編譯時的效能。因為Facebook很依賴PHP來處理資訊,有了HipHop,Facebook在Web伺服器方面更是如虎添翼。
HipHop誕生過程:在Facebook,一小組工程師(最初是3位)用了18個月研發而成。
Haystack
Haystack是Facebook高效能的圖片儲存/檢索系統。(嚴格來說,Haystack是一物件儲存,所以它不一定要儲存圖片。)Haystack的工作量超大。Facebook上有超過2百億張圖片,每張圖片以四種不同解析度儲存,所以,Facebook有超過8百億張圖片。
Haystack的作用不單是處理大量的圖片,它的效能才是亮點。我們在前面已提到,Facebook每秒大概處理120萬張圖片,這個資料並不包括其CDN處理的圖片數。這可是個驚人的資料!!!
BigPipe
BigPipe是Facebook開發的動態網頁處理系統。為了達到最優,Facebook用它來處理每個網頁的分塊(也稱“Pagelets”)。
比如,聊天視窗是獨立檢索的,新聞源也是獨立檢索的。這些Pagelets是可以併發檢索,效能也隨之提高。如此,即使網站的某部分停用或崩潰後,使用者依然可以使用。
Cassandra
Cassandra是一個沒有單點故障的分散式儲存系統。它是前NoSQL運動的成員之一,現已開源(已加入Apache工程)。Facebook用它來做郵箱搜尋。
除了Facebook之外,Cassandra也適用於很多其他服務,比如Digg。
Scribe
Scribe是個靈活多變的日誌系統,Facebook把它用於多種內部用途。Scribe用途:處理Facebook級別日誌,一旦有新的日誌分類生成,Scribe將自動處理。(Facebook有上百個日誌分類)。
Hadoop and Hive
Hadoop是款開源Map/Reduce框架,它可以輕鬆處理海量資料。Facebook用它來做資料分析。(前面就說到了,Facebook的資料量是超海量的。)Hive起源於Facebook,Hive可以使用SQL查詢,讓非程式設計師比較容易使用Hadoop。(注1: Hive是是基於Hadoop的一個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 )
Thrift
Facebook在其不同的服務中,使用了不同的語言。比如: PHP用在前端,Erlang用於聊天系統,Java和C++用於其它地方,等等。Thrift是內部開發的跨語言的框架,把不同的語言繫結在一起,使之可以相互“交流”。這就讓Facebook的跨語言開發,變得比較輕鬆。
Facebook已把Thrift開源,Thrift支援的語言種類將更多。
Varnish
Varnish是一個HTTP加速器,擔當負載均衡角色,同時也用於快速處理快取內容。
Facebook用Varnish處理圖片和使用者照片,每天都要處理十億級的請求。和Facebook其他的應用應用一樣,Varnish也是開源的。
Facebook可以平穩執行,還得利於其他方面
雖然上面已經提到了一些構成Facebook系統的軟體,但是處理如此龐大的系統,本身就是一項複雜的任務。所以,下面還將列出使Facebook能平穩執行的一些東西。
逐步釋出&暗啟動
Facebook有一個系統,他們稱之為“門衛”。該系統可以針對不同種類的使用者執行不同的程式碼。(它簡單介紹了程式碼庫中的不同條件。)該系統讓Facebook逐步釋出新特性、A/B測試、啟用僅針對Facebook員工的特性 等等。
門衛系統也讓Facebook做些“暗啟動”的事情。比如,在某一特性上線之前,可以啟用該特性背後的元件。另外,它還可以做模擬壓力測試,發現瓶頸和潛在的問題。默默啟動一般都是在正式啟動之前的2周完成。
實時系統的簡介
Facebook會仔細監控自身系統,有趣的是,它還監控每個PHP函式在實時生產環境下的效能。這一實時PHP環境監控是通過一個叫XHProf的開源工具完成的。
逐步禁用某些特性,藉以提高效能
如果Facebook遇到效能問題,Facebook有大量的途徑來逐步禁用不很重要的特性,以提高其核心特性效能。
尚未提到的東西
雖然這裡無法過多深入硬體方面,但硬體絕對是Facebook能達到空前規模的重要因素。比如,和其他大型網站一樣,Facebook也用CDN來處理靜態內容。Facebook還在美國西部的俄勒岡州建有一超大的資料中心,可以隨時增加伺服器。
當然了,除了前面已經提到的,還有其他大量的軟體沒有說到。但是,希望能突出其中非常有特色的。
Facebook和開源之間的“戀情”
Facebook和開源之間聯絡,此文不能不提,雖不能說Facebook是多麼地鍾愛開源,但至少可以這樣說,Facebook是“愛”著開源的。
Facebook不僅使用(也捐贈)開源軟體,比如,Linux、Memcached、MySQL、Hadoop等等,它還內部開發不少軟體,並且也將之開源。
Facebook開發的開源工程,包括HipHop、Cassandra、Thrift和Scribe。另外,Facebook也把Tornado開源了。Tornado是一個高效能的Web伺服器框架,由FriendFeed幕後團隊開發而成。(2009年8月,Facebook收購FriendFeed。)
(Facebook所用到的開源軟體,可以在Facebook的開源頁面找到。)
面臨更多的大規模挑戰
Facebook以一種令人難以置信的速度成長。它的使用者群幾乎是成倍增加,活躍使用者數量現已接近5億。而且,誰都無法預測今年底,活躍使用者量會到多少。
Facebook甚至成立了一個專門的“成長小組”,該小組不斷思考如何讓人們使用facebook並融入到facebook中。
這一快速成長,意味著Facebook將遇到不同的效能瓶頸。Facebook會面臨來這如下方面的挑戰:PV、搜尋、上傳的圖片和狀態訊息,使用者之間的互動和使用者和Facebook之間的互動帶來的挑戰。
這也是Facebook面對的事實。Facebook的工程師們將繼續尋求新方法來擴充套件(這不只是增加伺服器的問題了)。比如,隨著網站成長,其圖片儲存系統已經多次完全重寫。
所以,我們將看到Facebook的工程師們奔向下一個“山頭”。我們相信他們不會辜負眾望。畢竟,他們正跨越山頭,那個我們大多數人僅能嚮往的山頭;他們正擴充套件網站,那個使用者來自全球各地的網站。當你實現那個里程碑時,你將彪炳史冊。
資料來源:Facebook工程師們的報告和部落格。
本文首發:伯樂線上 - 職場部落格
本文地址:http://blog.jobbole.com/entry.php/73
特殊申明:此文耗費筆者不少精力。如若轉載,必須保留本文地址和出處,否則視為侵權。謝謝合作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-668272/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 揭祕.NET Core剪裁器背後的技術
- bk丰采網揭祕:那些用過清殭屍粉軟體的人們,後來怎麼樣了
- 揭祕電子遊戲背後音效製作的故事遊戲
- 探祕嫦娥一號背後的軟體開發故事
- 漲知識了!Wi-Fi背後的原理揭祕!
- 為你揭祕小程式音視訊背後的故事......
- 揭祕 · 外賣系統背後的AI人工智慧AI人工智慧
- 最硬核、最大咖、最火爆…百度首次揭祕春晚紅包背後的技術細節
- 新媒體圖書:Facebook效應(揭示facebook上市背後的祕密,facebook核心價值的來源) [平裝]
- Facebook智慧攝像頭Portal研發背後的那些事
- 揭祕山姆會員店,棄售活鮮背後的思考
- 首次揭祕!阿里無人店系統背後的技術阿里
- 揭祕移動電商背後的資料生存指南——資訊圖
- 揭祕FACEBOOK未來的機器學習平臺機器學習
- 破解YouTube、Facebook推薦系統背後的那些演算法演算法
- 揭祕 Twitter 背後的基礎設施:效率與優化篇優化
- 深度揭祕亂碼問題背後的原因及解決方式
- 揭開 Growth Hacking 的神祕面紗大結局:那些 Facebook 曾經踩過的坑
- 我們走訪了900名微軟員工,為你揭祕全球最大軟體公司的程式碼評審機制微軟
- 獨家 | 揭祕2021雙11背後的資料庫硬核科技資料庫
- 使用者從0到5億,Facebook背後團隊的祕密
- 全球新聞媒體網站因 Facebook 改版流量大跌網站
- 10個社交網站背後的故事網站
- 揭祕Stripe欺詐檢測系統背後的機器學習演算法 - quastor機器學習演算法AST
- 小牛互娛團隊揭祕:遊戲屢創佳績的背後邏輯遊戲
- 【雲中論道】揭祕短視訊爆紅背後的技術支柱
- 當程式設計師老去 揭祕不為人知背後的辛酸故事程式設計師
- 開發者必看:滴滴1.5億使用者背後的那些技術祕籍
- 全球最大交友網站GitHub介紹網站Github
- 指哪打哪的遊戲是如何實現的? 揭祕光槍背後的原理遊戲
- 網站資料的背後——網站日誌的分析指標網站指標
- A站資料洩露的背後 你必須知道的那些點!
- 軟體依賴性:全球大型攻擊背後的無聲殺手
- 3年發行5個爆款,揭祕小團隊成功背後的推手
- 不敢閱讀 npm 包原始碼?帶你揭祕 taro init 背後的哲學NPM原始碼
- 揭開微盟百萬商家營銷大戰背後的資料庫祕密資料庫
- 揭祕阿里Java架構師背後的技術體系支撐(詳細分層,建議收藏)阿里Java架構
- 揭祕氪金遊戲的背後,隱藏著哪些不為人知的內幕?遊戲