2010-08-20 85 views
152

我一直在尋找有關Facebook的架構文章/信息,挑戰&他們解決它們的方式。他們使用什麼&他們爲什麼使用。他們如何規模&什麼是他們做的設計決定等主要支撐學習。瞭解處理如此大量流量的網站會給建築師等提供很多指導,以便在設計新網站時記住某些內容。我分享我發現的內容。Facebook的建築

  1. Facebook Science & Social Graph (Video)
  2. Scale at Facebook
  3. Facebook Chat Architecture
  4. Facebook Blog
  5. Facebook Cassandra Architecture and Design
  6. Facebook Engineering Notes
  7. Quora - Facebook Architecture
  8. Facebook for 600M users
  9. Hadoop & its usage at Facebook
  10. Erlang at Facebook: Chat Architecture
  11. Facebook Performance Caching
  12. Facebook Connect Architecture

我有2個鏈接,但無法發佈,由於在這個網站的限制。另外,如果任何人有更好的東西,請分享(不必僅與Facebook相關)。

P.S. -我無法找到分享這項研究的好地方,因此,這一舉措。希望這可以幫助某人。

+2

2.規模Facebook的(視頻) - HTTP:// WWW .infoq.com/presentations/Scale-at-Facebook 3. Facebook Chat - ht tp://www.infoq.com/news/2008/05/facebookchatarchcture – 2010-08-20 18:52:52

+2

另外http://highscalability.com/似乎是瞭解許多熱門網站體系結構的好地方。不知道有多少這是真的和多少投機,但它是在那裏&只是東西啃... – 2010-08-20 18:54:27

+1

[臉書工程博客](http://www.facebook.com/notes.php?id= 9445547199)偶爾會對其架構和擴展挑戰有深入的瞭解。 – 2010-11-03 15:50:14

回答

31

那麼Facebook已經經歷了許多變化,它最初的設計並非高效。它的目的是做它的工作。我完全不知道代碼是什麼樣的,你可能不會找到關於它的很多信息(出於明顯的安全和版權原因),但只是看看API。看看它變化的頻率,以及它有多少無法正常工作,或者根本無法正常工作。

我認爲他們袖子裏最大的ace就是Hiphop。 http://developers.facebook.com/blog/post/358 您可以使用自己的HipHop: http://wiki.github.com/facebook/hiphop-php

但如果你問我,這是一個非常宏大的,可能浪費時間的任務。 Hiphop只支持這麼多,它不能簡單地將所有內容都轉換爲C++。那麼這告訴我們什麼?那麼,它告訴我們Facebook沒有充分利用PHP語言。它沒有使用最新的5.3版本,我敢打賭,仍然有很多PHP 4兼容。否則,他們不能使用HipHop。 HipHop是一個好的IDEA,需要發展壯大,但在目前的狀態下,對於那些構建新的PHP應用程序的人來說,它並不是真的有用。

也有PHP到JAVA,像Resin/Quercus。再次,它不支持所有的東西...

另一件需要注意的是,如果您使用任何非標準的PHP模塊,您將無法將該代碼轉換爲C++或Java。但是...讓我們來看看PHP模塊。它們是用C++編譯的。所以如果你可以構建PHP模塊來完成某些事情(比如解析XML等),那麼你基本上(減去一些交互)以相同的速度工作。當然,你不能僅僅爲每一個可能的需求和你的整個應用程序創建一個PHP模塊,因爲你將不得不重新編譯,而且編碼會更困難等等。

但是......有一些方便的PHP可以幫助解決速度問題的模塊。 儘管在這一天結束時,我們有這種稱爲「雲」的令人敬畏的東西,並且通過它,我們可以擴展我們的應用程序(包括PHP),因此它不再那麼重要。硬件越來越便宜。亞馬遜剛剛降低了它的價格(再次)說到。

所以只要你的代碼的PHP應用程序的理念是它需要有一天...規模那麼我覺得你很好,我真的不知道我甚至想看看Facebook和什麼他們這樣做是因爲當他們這樣做時,這是一個完全不同的世界,現在試圖維持基礎設施並維護它......呃,你得到了像HipHop這樣的東西。

現在怎麼街舞會幫助你?它不會。它不能。你剛剛開始,你可以使用PHP 5.3。我強烈建議您查看PHP 5.3框架以及PHP 5.3與SPL庫一起帶來的所有新優勢,並且還會考慮您的數據庫。您很可能是從數據庫提供內容,因此請檢查MongoDB和其他類型的無模式和麪向文檔的數據庫。對於最常見的網站/應用程序,它們要快得多,速度更快。

看像Foursquare和SmugMug的,並且正在利用新技術以及它們是如何使用它的一些其他公司的新公司。就像Facebook一樣成功,我實在不會看他們如何構建一個高效的網站/應用程序。我不是說他們沒有非常有才華的人在那裏工作,創造性地解決(他們)的問題......我也不是說Facebook並不是一個好主意,而且也不是成功,並且你不應該從它那裏得到想法......我只是說,如果你可以查看他們的整個源代碼,你可能不會從中受益。

+1

就你說的大部分內容達成一致。這些鏈接只是爲了好奇。有時候你會看到一項技術,並說「嗨!這很酷」... – 2010-11-26 15:50:43

+0

隨機重新訪問我的答案這裏有兩件事。 #1,我相信C而不是C++我的技術不好......但更重要的是,#2,Phalcon是一個新的PHP框架,它可以將許多PHP轉換爲速度。雖然你自己的許多代碼當然不會在C中運行,並且你使用的任何其他庫也可能不會。然而,這與HipHop很相似,可以擠出一些額外的表現。 – Tom 2014-03-12 21:26:17

+0

...在這裏,我們再次與他們的袖子王牌。回顧過去幾年之後,我們有了這種Hack語言(從HipHop的東西中誕生,擁有自己的IDE不少)。它變得更好了嗎?我們拭目以待。它可以幫助你嗎?也許,但現在看起來你也可以像Facebook一樣構建。它只花了大約4年的時間=)雖然個人而言,我不會那麼快喝酒。 – Tom 2014-04-11 16:04:09

6

「知道關於它處理 如此大規模流量的網站提供了大量的 指針建築師等,以保持 記住某些東西而設計 新網站」

我想你也許可以學到很多來自Facebook的設計,就像您可以從任何成功的大型軟件系統的設計一樣。不過,在我看來,您應該在設計新系統時牢記Facebook的當前設計。

你爲什麼想成爲能夠處理Facebook已經處理流量?不管你是一個程序員多麼有才華,你都不會需要這樣做。 Facebook本身並沒有從一開始就設計出如此巨大的可擴展性,這也許是從中學到的最重要的教訓。

如果你想了解一個不平凡的軟件系統,我可以推薦書「裏面一個C#應用程序」關於SharpDevelop的IDE的開發。它已絕版,但可在線免費使用。本書爲您提供了一個真實應用程序的一瞥,並提供了對程序員有用的IDE的見解。

+1

是的,可能並不是很多人都需要應對如此繁重的交通。但理解可擴展性以及像Facebook這樣的偉大公司如何處理如此龐大的流量總是很好的。可能有一些很好的設計優點可以從中學到:) – trillions 2013-01-10 09:56:08

+0

@nanshi:我同意這對我們有所幫助。我的觀點是你應該記住你的設計。從第1天開始設計可擴展性使得改變程序的功能變得更加困難。在大多數情況下,簡單性更重要。另外,Facebook由很多人維護。這些人中的每一個人都必須是系統部分的專家。 – 2013-01-10 15:19:28

+0

我明白你的觀點。同意:) – trillions 2013-01-11 19:40:07

14

Facebook正在使用LAMP structure。 Facebook的後端服務使用各種不同的編程語言編寫,包括C++,Java,Python和Erlang,並根據需要使用它們。隨着LAMP的Facebook使用了一些技術,以支持大量請求,就像

  1. Memcache - 這是用來加速通過緩存數據和對象的動態數據庫驅動的網站(如Facebook)一個內存緩存系統在RAM中以減少閱讀時間。 Memcache是​​Facebook的主要緩存形式,有助於緩解數據庫負載。擁有一個緩存系統可以使Facebook的速度與調用數據一樣快。

  2. Thrift (protocol) - 這是一個用於可擴展跨語言服務開發的輕量級遠程過程調用框架。 Thrift支持C++,PHP,Python,Perl,Java,Ruby,Erlang等。

  3. Cassandra (database) - 這是一個數據庫管理系統,設計用於處理大量分佈在多臺服務器上的數據。

  4. HipHop for PHP - 這是PHP腳本代碼的源代碼轉換器,它是爲了節省服務器資源而創建的。 HipHop將PHP源代碼轉換爲優化的C++。這樣做之後,它使用g ++將其編譯爲機器碼。

如果我們進入更多的細節,那麼回答這個問題就會變得更長。我們可以理解更多從以下職位:

  1. How Does Facebook Work?
  2. Data Management, Facebook-style
  3. Facebook database design?
  4. Facebook wall's database structure
  5. Facebook "like" data structure