炙手可熱的 Facebook 是用 ">PHP 開發的。隨著一些技術交流,逐漸能看到 Facebook 技術人員分享的經驗。近期這個 geekSessions 網站上看到 Facebook 的 Lucas Nealan 分享的文檔比較有參考價值。
Cache 為 王
任何一個成功的網站都有一套最合適自己的 Cache 策略。
Note:這個層次圖畫的稍微有點問題,不是嚴格從上到下的。
The Alternative ">PHP Cache , APC
Facebook 平均每個使用者每天要訪問超過 50 個頁面,PHP的頁面載入時間的最佳化就比較重要了。在 ">PHP Cache 層,Facebook 採用了 APC。
Lucas Nealan 的 ">PPT 舉了一個例子,一個頁面顯示的時間從 4000 多毫秒降到了 100 多 毫秒。在 apc.stat 關閉的模式下,效能還要更好一些。不過需要重啟動或用apc_cache_clear() 來通知更新。
Memcached 層
APC Cache 的是非使用者相關的資訊,而使用者相關的資料 Cache 當然是在 Memcached 中。
Facebook 部署了超過 400 台 Memcached 伺服器,超過 5TB 的資料在 Memcached 中。這是當前世界上最大的 Memcached 叢集了。也給 Memcached 貢獻了不少代碼,包括 UDP 的支援和效能上的提升(效能提升超過 20%)。
程式 Profiling
Facebook 開發人員大量採用 Callgrind 、APD、 xdebug 、KCachegrind 等工具進行基準效能測試。任何一個 Web 項目,這也是不可或缺,也是比較容易忽略的一環。所有開發人員都應該具備熟練使用這些工具的能力才好。
補充一下:語言的選擇
為什麼 Facebook 選擇 ">PHP 而不是其他語言? 用Flickr 的 Cal Henderson 這句話就能說明了: "Languages's don't Scale, Architecture Scale"。
從 80-20 的原則看,APC 和 Memcached 是最主要的。在這兩個環節上下功夫,受益/開銷比要大於另外幾個環節。
(上面的圖是從 Lucas Nealan 的文檔截的,著作權是他的)