熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

百萬級PHP網站架構工具箱

2013-11-15 12:34:08  來源: PHP編程 

  在了解過世界最大的PHP站點Facebook的後台技術後今天我們來了解一個百萬級PHP站點的網站架構PoppendePoppende是德國的一個社交網站相對FacebookFlickr來說是一個很小的網站但它有一個很好的架構融合了很多技術如 NigixMySqlCouchDBErlangMemcachedRabbitMQPHPGraphiteRed以及Tsung

  Poppende目前有萬注冊用戶數萬並發用戶數每天萬條私有消息每天萬登錄次數而項目團隊有個開發人員兩個設計兩個系統管理員該站點的商業模式采用免費增值模式用戶可以使用搜索用戶給好友發送消息上載圖片和視頻等功能

  如果用戶想享受不受限制發送消息和上載圖片那麼就得根據需要支付不同類型的會員服務視頻聊天及網站其他服務也采用同樣的策略

  Nginx

  Poppende 所有的服務都是基於Nginx服務上的前端有兩台Nginx服務器在高峰期提供每分鐘萬次請求的負載每個機器已經有四年壽命並且只有一個CPU 和GB RAMPoppende擁有三台獨立的圖像服務器由三台Nginx服務器為*bilderpoppende提供每分鐘萬次請求服務

  Nginx 架構中一個很酷的設計就是有很多請求是由Memcached處理的因此請求從緩存中獲取內容而不需要直接訪問PHP機器比如用戶信息頁(user profile)是網站需要密集處理的內容如果把用戶信息頁全部緩存到Memcached上那麼請求直接從Memcached上獲取內容 Poppende的Memcached每分鐘可以處理次請求

  架構中有三個Nginx圖像服務器提供本地圖像緩存用戶上載圖 像到一個中央文件服務器當向這三個Nginx之一中請求圖像時如果服務器本地中沒有存在該圖像則從中央文件服務器下載到該服務器上作緩存並提供服 務這種負載均衡的分布式圖像服務器架構設計可以減輕主要存儲設備的負載

  PHPFPM

  該網站運行在PHP FPM上共有台雙CPUGB內存的PHP機器每個機器上運行個PHPFPM的工作線程使用啟用了APC的PHPx PHP可以降低CPU和內存使用率的%以上

  程序代碼是基於Symfony框架之上開發的一是可以使用外部資源二是 能夠提高項目開發進度同時在一個著名的框架上可以讓新開發人員更容易加入到團隊中來雖然沒有任何事情都是十全十美的但可以從Symfony框架中得 到很多好處讓團隊可以更多的精力放在Poppende的業務開發上去

  網站性能優化使用XHProf這是Facebook開源出來的一個類庫這個框架非常容易個性化和配置能夠可以緩存大部分高代價的服務器計算

  MySQL

  MySQL是網站主要的RDBMS網站又幾個MySql服務器一台CPUGB的服務器存儲用戶相關信息如基本信息照片描述信息等這台機器已經使用了下一步計劃會使用共享集群來替換它目前仍基於這個系統上進行設計以簡化數據訪問代碼根據用戶ID進行數據分區因為網站中大部分信息都是以用戶 為中心的如照片視頻消息等

  有三台服務器按主從配置架構提供用戶論壇服務一台從服務器負責網站自定義消息存儲到現在有 億條消息另外四台機器為主從配置關系另外由台機器配置成NDB族群專門服務於密集型寫操作數據如用戶訪問統計信息

  數據表設計盡量避免關聯操作盡可能緩存最多的數據當然數據庫的結構化規范已經完全被破壞掉了因此為了更容易搜索數據庫設計創建了數據挖掘表大部分表是MyISAM型表可以提供快速查找現在的問題是越來越多的表已經全表鎖住了Poppende正考慮往XtraDB存儲引擎上遷移

  Memcached

  網站架構中Memcached應用相當多超過GB的高速緩存和個節點緩存了Session會話視圖緩存以及函數執行緩存等架構中有一個系統 當記錄被修改時可以自動地把數據更新到緩存中去未來改善緩存更新的可能方案是使用新的Redis Hash API或者MongoDB

  RabbitMQ

  在 年中開始在架構中使用RabbitMQ這是一個很好的消息解決方案便於部署和集中到這個架構中去在LVS後運行了兩台RabbitMQ服務 器在上個月已經把更多的東西集成到該隊列中意味著同一時刻有台PHP服務器每天要處理萬次請求發送日志郵件通知系統消息圖像上載等 更多的東西到這個隊列中

  應用PHPFPM中的fastcgi_finish_request()函數集成隊列消息可以把消息異步發 送到隊列中當系統需要給用戶發送HTML或JSON格式響應時就調用這個函數這樣用戶就沒有必要等到PHP腳本清理

  這個系統可以改善架構資源管理例如在高峰期服務每分鐘可以處理次登錄請求這表示有並發更新用戶表保存用戶的登錄時間由於使用了隊列機制可以 按相反的順序來運行這些查詢如果需要提高處理速度只需要增加更多的隊列處理者即可甚至可以增加更多的服務器到這集群中去而不需要修改任何配置和部 署新節點

  CouchDB

  日志存儲CouchDB運行在一台機器上在這台機器上可以根據模塊/行為進行日志查詢 /分組或者根據錯誤類型等等這對定位問題非常有用在使用日志聚合服務CouchDB之前不得不逐台登錄到PHP服務器上設法日志分析定位問題這 是非常麻煩的而現在把所有的日志集中到隊列中保存到CouchDB中可以集中進行問題檢查和分析

  Graphite

  網站使用Graphite采集網站實時信息並統計從請求每個模塊/行為到Memcached的命中和未命中RabbitMQ狀態監控以及Unix負載等等Graphite服務平均每分鐘有次更新操作實踐已經證實要監測網站發發生什麼是非常有用的它的簡單文本協議和繪圖功能可以方便地即插即 用的方式用於任何需要監控的系統上

  一件很酷的事情是使用Graphite同時監控了網站的兩個版本一月份部署了Symfony框架新 版本以前代碼作為一個備份部署這就意味著網站可能會面臨性能問題因此可以使用Graphite來對兩個版本在線進行對比

  發現新版本上的Unix負載表較高於是使用XHProf對兩個版本進行性能分析找出問題所在

  Red

  網站為用戶也提供了兩種類型的視頻服務一種是用戶自己上載的視頻另外一種是視頻聊天用戶視頻互動和分享年年中每月為用戶提供TB的流量服務

  Tsung

  Tsung 是一個Erlang編寫的分布式基准分析工具在Poppende網站中主要用於HTTP基准分析MySQL與其他存儲系統(XtraDB)的對比分 析用一個系統記錄了主要的MySQL服務器的流量再轉換成Tsung的基准會話然後對該流量進行回放由Tsung產生數以千計的並發用戶訪問實驗 室的服務器這樣就可以在實驗環境中與真實場景非常接近


From:http://tw.wingwit.com/Article/program/PHP/201311/21198.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.