facebook的技術棧

作為全球最大的社交媒體,臉書的技術一直是引領著時尚潮流,無論是前端的reactjs,還是移動端的Origami,亦或是後端的Presto,臉書開源的專案總能讓很多人興奮不已。

很多人都聽過臉書起步創業的故事,那個時候扎克伯格使用php搭建了facebook,從此臉書就迅速佔領了校園,最後它走向了全球。

facebook的技術棧

臉書雖然採用的是php,但是那是經過修改的php,它使用了hhvm進行了編譯,效率大大提升。

臉書雖然也使用msyql,但是那也是經過修改的版本,它經過了最佳化,並且它只是作為資料的儲存使用,更多的時候它們使用的是memcached記憶體資料庫。

臉書的作業系統使用的也是linux,不過這也是經過最佳化的版本,效能更加優異。

再簡單的問題當用戶量巨大的時候,也會變成複雜的問題,為什麼大資料會吸引無數公司去研究,因為資料量變多的時候,它就會變得異常複雜。

memcached

到目前為止,Memcached是網際網路上最著名的軟體之一。這是一個分散式記憶體快取系統,Faceebook將它用作Web伺服器和MySQL伺服器之間的快取層。多年來,Facebook對Memcached及其周圍的軟體進行了大量最佳化。

facebook的技術棧

Facebook可以在任何時間點執行數千個Memcached伺服器,其中包含數十TB的快取資料。它可能是世界上最大的Memcached叢集。

HHVM

與在伺服器上本地執行的編譯語言程式碼相比,PHP是一種指令碼語言,相對而言速度較慢。 HipHop將PHP轉換為C ++程式碼,然後可以對其進行編譯以獲得更好的效能。由於Facebook嚴重依賴PHP來提供內容,因此這使得Facebook可以從其Web伺服器中獲得更多收益。

Haystack

它是Facebook的高效能照片儲存/檢索系統(嚴格來說,Haystack是物件儲存,因此不一定必須儲存照片)。它有大量的工作要做。

facebook的技術棧

Facebook上有超過幾千億張上傳的照片,並且每張照片都以四種不同的解析度儲存,因此產生了海量照片。

而透過Haystack則可以進行照片的快速查詢。

BigPipe

BigPipe是Facebook開發的動態網頁服務系統。

facebook的技術棧

Facebook使用它來為每個網頁中的各個部分(稱為“小頁面”)提供服務,以獲得最佳效能 。 例如,聊天視窗是分別檢索的,新聞提要是分別檢索的,依此類推。可以並行檢索這些pagelet,這是提高效能的地方,即使頁面的某些部分被停用或損壞,它也可以為使用者提供可以正常工作的站點。

Cassandra

Cassandra是沒有單點故障的分散式儲存系統。這是一種nosql資料庫,具有高效的讀取效率。

很多時候facebook和使用它來代替Redis。

Hadoop和Hive

Hadoop是一種開源的map-reduce實施,可以對大量資料進行計算。

Facebook將其用於資料分析(眾所周知,Facebook擁有大量資料)。

Hive起源於Facebook內部,可以對Hadoop使用SQL查詢,從而使非程式設計師更易於使用。

Thrift

Facebook使用幾種不同的語言來提供不同的服務。 PHP用於前端,Erlang用於聊天,Java和C ++也用於多個地方(也許還有其他語言)。

facebook的技術棧

Thrift是一種內部開發的跨語言RPC通訊框架,它可以將所有不同的語言聯絡在一起,使它們可以相互通訊。透過它Facebook保持跨語言開發變得更加容易。

未來

臉書全球有著大量的使用者,面對如此多的使用者,它們無論是對產品的穩定還是對產品的效能都有著嚴格的要求。然而,臉書也有著非常多優秀的工程師,他們不斷用自己的智慧來驅動臉書向更好的方向發展。