程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> [總結] 【架構與優化】從Facebook中集思廣益,相互學習

[總結] 【架構與優化】從Facebook中集思廣益,相互學習

編輯:關於PHP編程

本人才學疏淺,提出這個問題只是為了拋磚引玉,希望大家能在自己擅長的領域裡對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的編譯執行如下圖所示:
機制.jpg

而Facebook的緩存方案如下圖所示:
facebook機制.jpg


(4)一些後台應用是用Python、Perl和Java,以及一些gcc和Boost。

(5)使用SVN和Git來進行代碼管理,並且全部企業內部的軟件部署都采用開源程序。


2. 可能會采用的MySQL架構與優化
(1)數據的垂直(無關聯數據放置不同數據庫服務器)與水平分割(庫表散列,如用user_id散列),然後用MySQL Proxy/Spock Proxy進行分割表的反向代理。
(2)合理使用變量,並在本地文件建立散列的映射關系,進一步進行分割。
(3)Master/Slave集群架構,實現讀寫分離。
(4)合理的數據庫結構設計,與索引優化

(5)其他:索引緩存、聯合索引、查詢緩存等。


3. 可能會采用的系統優化
(1)使用epoll模型
(2)異步I/O
(3)fastcgi或其他方法實現多進程
(4)sendfile系統調用增大網絡I/O流量
4. 可能會采用的Web架構或前端技術
(1)Web組件分離,如獨立的圖片服務器,JavaScript、CSS文件、動態腳本的分離。
(2)Nginx反向代理(或Squid)
(3)多副本負載均衡
(4)HTTP持久連接與合理利用浏覽器緩存,例如背景圖偏移量技術,及對CSS、JavaScript和視頻的
5. 一些可能會用也可能不用的壓力測試
(1)Apache的ab進行壓力測試
(2)Apache的prefork模式進行多進程切換的壓力測試
(3)使用Nginx為多進程下的CPU與IO進行監控

Linux下的Memcached開發,請參看逆雪寒的文章http://bbs.phpchina.com/viewthread.php?tid=48667&highlight=linux%2B%CF%C2%B5%C4%2Bmemcached%2B%BF%AA%B7%A2
Memcached的分布式緩存機制及相關解決方案請閱讀以下網址及相關文章:
http://tech.idv2.com/2008/07/24/memcached-004/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved