地球上最大的PHP站點後端技術解密
Facebook的擴充套件性挑戰
在我們討論細節之前,這裡有一些Facebook已經做的軟體規模:
◆Facebook有570000000000每月頁面瀏覽量 (據Google Ad Planner)
◆Facebook的照片量比其他所有圖片網站加起來還多(包括Flickr等網站)
◆每個月超過30億張照片被上傳
◆Facebook的系統服務每秒處理120萬張照片,這不包括CDN服務中處理的照片
◆每月超過25億條的內容 (狀態更新,評論等)被共享
◆Facebook有超過30,000伺服器(這個數字是去年的)
Facebook擴充套件所依賴的軟體
Facebook是在某些程度上說仍然是LAMP的站點,但它比普通的LAMP大得多,以納入其他元素和很多服務,並修改現行的做法。
例如:
◆Facebook仍使用PHP,但它已經為它建立一個編譯器,以便它可以分為原生程式碼開啟了Web伺服器,從而提高效能。
◆Facebook使用Linux,但他特別為網路吞吐量做了優化。
◆Facebook使用MySQL,但主要是作為一個Key-value的永續性儲存,Jions和伺服器邏輯操作在Web伺服器上操作。因為在那裡更容易執行。
還有是自編寫的系統,如Haystack,一個高度可擴充套件的物件儲存,用來儲存Facebook的照片。還有Scribe,一個日誌系統,可以執行在Facebook的巨大規模上的日誌系統。
現在我們介紹一下全球最大的社會網路網站的所使用的軟體吧。
Memcached
memcached的是現在網際網路最有名的軟體之一了。 這是一個分散式記憶體快取系統,用來作為Web伺服器和MySQL伺服器之間的快取層(因為資料庫訪問比較慢)。 多年以來,Facebook已經提出了一些優化Memcached和一些周邊軟體的辦法。如壓縮network stack。
Facebook的每時每刻都有數10TB的資料快取在Memcached的數千臺伺服器上。 它可能是世界上最大的Memcached的叢集了。
HipHop for PHP
PHP作為一種指令碼語言,和本地程式相比是執行緩慢的。 HipHop可以將PHP轉換成C + +程式碼,然後再進行編譯,可以獲得更好的效能。 因為Facebook嚴重依賴PHP,這使得其可以讓Web伺服器執行的更有效率。
一個工程師小團隊在Facebook(一開始只有三人)花了18個月時間開發HipHop,現在已經是可用狀態。
Haystack
Haystack是Facebook的高效能照片儲存/檢索系統(嚴格來說,是一個物件儲存,因此它並不一定要儲存照片)。 它有許多工作要做;有超過20億張上傳的照片,並且每一個被儲存在四個不同的解析度,因此有超過800億張照片。
它不僅是對能夠處理的上億的照片,執行表現也是至關重要的。 正如我們前面提到的,Facebook的服務約120萬張照片每秒 ,這個數字不包括CDN上的。 這是一個驚人的數字。
BigPipe
BigPipe是Facebook開發的一個動態的網頁服務系統。 Facebook使用它來按section(稱為“pagelets”)處理每個網頁,以獲取最佳效能。
例如,在聊天視窗是分開的,新聞Feed也是分開的,等等。 這些pagelets可以在一個頁面表現的時候同時使用,這是該頁面表現的時候獲取進來的。即使某些工程的一部分關閉或中端,使用者也可以獲得一部分網頁。
Cassandra
Cassandra是一個不會單點失敗的分散式儲存系統。 這是為NoSQL運動的一個重要組成部分,並已公開的原始碼(它甚至成為一個Apache專案)。Facebook在搜尋功能中使用它。
除了Facebook,還有一些人也用它,例如Digg的。 不過最近Twitter放棄了Cassandra。
Scribe
Scribe是一個靈活的日誌系統,Facebook在他的內部大量使用。 它的能夠處理在Facebook的大規模日誌記錄,並自動處理新的日誌記錄類別,Facebook有數百個日誌類別(categories)。
Hadoop and Hive
Hadoop的是一個開源的map-reduce實現,使得它可以在進行大資料上進行運算。 Facebook的使用這個進行資料分析(而我們都知道,Facebook已經大量的資料)。 Hive就是發源於Facebook,使得對於Hadoop使用的SQL查詢成為可能,從而是其更容易對非程式設計師使用。
Hadoop和Hive是開源的(Apache專案),有為數眾多的追隨者,例如雅虎和Twitter。
Thrift
Facebook使用的幾種不同的語言和不同的services。 PHP是最終用於前端,Erlang是用於聊天,Java和C ++也使用於多種場所,也許還有其他語言。Thrift是一個內部開發的跨語言的框架,聯絡語言,使他們可以在一起合作,從而使他們之間可以互動。 這使得Facebook可以更容易為繼續保持其跨語言的發展。
Facebook已經讓Thrift開源。更多的語言支援已被新增到Thrift。
Varnish
Varnish是一個HTTP加速器,可以作為一個負載平衡器,並快取的內容,然後可以以閃電般的速度送達。
Facebook使用的arnish來處理照片和個人資料圖片,處理每天數十億的要求。 和其他的東西一樣,Varnish是開源的。
保持Facebook 順暢執行的其他東西
我們已經提到的軟體,組成了Facebook的系統,並幫助執行在大規模上。 但是,處理這麼大的系統是一個複雜的任務,因此我們將列出一些其他的東西,他們保持了Facebook的平穩執行。
漸進發布和暗啟動
Facebook有一個他們所謂的守門人制度(Gatekeeper),允許他們可以給不同的使用者執行兩套不同的系統。 這讓Facebook漸進的釋出新的功能,A / B測試,只為Facebook僱員釋出等的某些特性。
Gatekeeper也可以讓Facebook實現“暗啟動”,這是在使用者使用一些功能之前,就啟用某些功能(因為使用者沒有察覺,所以稱之為暗啟動)。 這將作為一個現實世界的壓力測試,在正式啟動前,幫助揭露一些功能障礙和其他問題。 暗啟動通常是在正式啟動前兩個星期。
Profiling的直播系統
Facebook的仔細監控其系統,有趣的是它也負責監察每一個PHP函式在生產環境的效能。 檢測各個PHP的環境的配置執行情況。使用開源工具,XHProf 。
漸進的利用關閉功能來提升效能
如果Facebook執行時出現效能問題,有一個辦法,就是逐步禁用不太重要的功能,以增強Facebook的大量核心功能表現。
我們沒有提及的事情
我們沒有提到硬體相關的事情,但這也是提高可伸縮性的重要一環。例如,就像其他大型站點,Facebook利用CDN來處理靜態內容。Facebook還有一個the huge data center,可以幫助他擴充套件更多的服務。
Facebook的開源情節
不僅是Facebook使用(和幫助),如Linux,Memcached的,MySQL和Hadoop的開源軟體,以及許多其他情況下,也貢獻許多了其內部開發的軟體。
Facebook亦開源了Tornado,一個高效能的網路伺服器框架,由FriendFeed團隊開發。關於開放原始碼軟體清單,可以在Facebook’s Open Source page.找到。
相關文章
- Laravel PHP 框架網站重建技術分析LaravelPHP框架網站
- 社交軟體紅包技術解密(十二):解密抖音春節紅包背後的技術設計與實踐解密
- Java後端技術概覽Java後端
- 如何學習後端技術?後端
- 解密數倉的SQL ON ANYWHERE技術解密SQL
- 技術簡介——後端開發後端
- 雲端計算技術特點!
- 後端技術雜談7:OpenStack的基石KVM後端
- 後端開發者需要掌握的技術棧後端
- 後端技術雜談5:雲端計算的前世今生後端
- 後端技術雜談6:白話虛擬化技術後端
- 十週後,62%的PHP網站將執行在一個不受支援的PHP版本上PHP網站
- 聊聊 2018 年後端技術趨勢後端
- 後端架構師技術圖譜後端架構
- 成熟級端點安全技術築牢最後一道防線
- 19個練習黑客技術的線上網站黑客網站
- ChatGPT軟體技術棧解密ChatGPT解密
- 簡述網站建設技術難點網站
- 80iter.com站內技術點分析
- 關於 SAP Enterprise Portal 的前後端技術棧後端
- JavaScript前端和Java後端的AES加密和解密JavaScript前端後端加密解密
- SpringBoot系列之前後端介面安全技術JWTSpring Boot後端JWT
- 前後端分離技術路線圖後端
- PHP檔案解密 php魔方解密線上工具PHP解密
- 騰訊萬億級 Elasticsearch 技術解密Elasticsearch解密
- 全面解密QQ紅包技術方案:架構、技術實現、移動端優化、創新玩法等解密架構優化
- PHP加密解密PHP加密解密
- 在遠端系統上執行程式的技術整理行程
- 從技術上來說PHP好還是JAVA好?PHPJava
- 黃文俊:Serverless小程式後端技術分享Server後端
- golang 後端技術開發必備總結Golang後端
- PHP前後端互動PHP後端
- 杜拜 PHP 技術PHP
- 前端技術框架選型,跨端框架盤點前端框架跨端
- 通用的前後端分離專案技術與框架方案後端框架
- java生態下的後端開發都有哪些技術棧?Java後端
- 解密阿里巴巴安全技術體系解密阿里
- 詩意的邊緣個人部落格 - 一個走在php之路的技術員個人部落格技術網站PHP網站
- 五分鐘學後端技術:如何學習後端工程師必學的訊息佇列後端工程師佇列