本人才學疏淺,提出這個問題只是為了拋磚引玉,希望大家能在自己擅長的領域裡對Facebook中可能采用的某個技術或者架構方案或優化方法,做個自己的論述。根據2008年9月1日,騰訊網對Facebook的技術運營副總裁Jonathan Heiliger的訪問,我們了解到:
(1)Facebook自稱全球流量第四的網站,每天9000萬活躍用戶訪問Facebook的1萬台服務器。
(2)25TB數據(08年12月為28TB),40萬名外部開發者支持,開發了2.5萬套應用軟件。
(3)使用LAMP(Linux、 Apache、 MySQL、 PHP)技術構架;數據庫使用MySQL;使用Memcached緩存SQL加速(全球最大的分布式Memcached緩存,800多台服務器,光緩存在Memcached中數據就達20多TB);使用APC進行opcode編譯緩存。關於PHP的編譯執行如下圖所示:
而Facebook的緩存方案如下圖所示:
2. 可能會采用的MySQL架構與優化
(1)數據的垂直(無關聯數據放置不同數據庫服務器)與水平分割(庫表散列,如用user_id散列),然後用MySQL Proxy/Spock Proxy進行分割表的反向代理。
(2)合理使用變量,並在本地文件建立散列的映射關系,進一步進行分割。
(3)Master/Slave集群架構,實現讀寫分離。
(4)合理的數據庫結構設計,與索引優化
(5)其他:索引緩存、聯合索引、查詢緩存等。