在了解過世界最大的PHP站點,Facebook的後台技術後,今天我們來了解一個百萬級PHP站點的網站架構:Poppen.de。Poppen.de是德國的一個社交網站,相對Facebook、Flickr來說是一個很小的網站,但它有一個很好的架構,融合了很多技術,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。
統計信息
◆200萬注冊用戶數;
◆2萬並發用戶數;
◆每天20萬條私有消息;
◆每天25萬登錄次數;
◆項目團隊有11個開發人員,兩個設計,兩個系統管理員;
商業模式
該網站采用免費增值模式,用戶可以免費使用下面任何服務:
◆搜索其他用戶;
◆給好友發送消息;
◆上載圖片和視頻;
◆尋找好友;
◆視頻聊天;
◆更多…
但如果用戶想享受不受限制發送消息和上載圖片,那麼就得根據需要支付不同類型的會員服務,視頻聊天及網站其他服務也采用同樣的策略。
工具箱
Nginx
Poppen.de 所有的服務都是基於Nginx服務上的。前端有兩台Nginx服務器在高峰期提供每分鐘15萬次請求的負載,每個機器已經有四年壽命,並且只有一個CPU 和3GB RAM。Poppen.de擁有三台獨立的圖像服務器,由三台Nginx服務器為*.bilder.poppen.de提供每分鐘8萬次請求服務。
Nginx 架構中一個很酷的設計就是有很多請求是由Memcached處理的,因此請求從緩存中獲取內容而不需要直接訪問PHP機器。比如,用戶信息頁(user profile)是網站需要密集處理的內容,如果把用戶信息頁全部緩存到Memcached上,那麼請求直接從Memcached上獲取內容。 Poppen.de的Memcached每分鐘可以處理8000次請求。
架構中有三個Nginx圖像服務器提供本地圖像緩存,用戶上載圖 像到一個中央文件服務器。當向這三個Nginx之一中請求圖像時,如果服務器本地中沒有存在該圖像,則從中央文件服務器下載到該服務器上作緩存並提供服 務。這種負載均衡的分布式圖像服務器架構設計可以減輕主要存儲設備的負載。
PHP-FPM
該網站運行在PHP- FPM上。共有28台雙CPU、6GB內存的PHP機器,每個機器上運行100個PHP-FPM的工作線程。使用啟用了APC的PHP5.3.x。 PHP5.3可以降低CPU和內存使用率的30%以上。
程序代碼是基於Symfony1.2框架之上開發的。一是可以使用外部資源,二是 能夠提高項目開發進度,同時在一個著名的框架上可以讓新開發人員更容易加入到團隊中來。雖然沒有任何事情都是十全十美的,但可以從Symfony框架中得 到很多好處,讓團隊可以更多的精力放在Poppen.de的業務開發上去。
網站性能優化使用XHProf,這是Facebook開源出來的一個類庫。這個框架非常容易個性化和配置,能夠可以緩存大部分高代價的服務器計算。
MySQL
MySQL是網站 主要的RDBMS。網站又幾個MySql服務器:一台4CPU、32GB的服務器存儲用戶相關信息,如基本信息、照片描述信息等。這台機器已經使用了4 年,下一步計劃會使用共享集群來替換它。目前仍基於這個系統上進行設計,以簡化數據訪問代碼。根據用戶ID進行數據分區,因為網站中大部分信息都是以用戶 為中心的,如照片、視頻、消息等。
有三台服務器按主-從-從配置架構提供用戶論壇服務。一台從服務器負責網站自定義消息存儲,到現在有 2.5億條消息。另外四台機器為主-從配置關系。另外由4台機器配置成NDB族群專門服務於密集型寫操作數據,如用戶訪問統計信息。
數據表設計盡量避免關聯操作,盡可能緩存最多的數據。當然,數據庫的結構化規范已經完全被破壞掉了。因此,為了更容易搜索,數據庫設計創建了數據挖掘表。大部分表是MyISAM型表,可以提供快速查找。現在的問題是越來越多的表已經全表鎖住了。Poppen.de正考慮往XtraDB存儲引擎上遷移。