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