當前位置:編程學習大全網 - 腳本源碼 - 用PHP 編寫支持高並發的網站,需要做什麽處理

用PHP 編寫支持高並發的網站,需要做什麽處理

壹般來說,解決WEB高並發的有效手段都是采用可線性擴展的多層分布式架構,

我生產項目的架構是這樣的,就在這裏拋磚引玉壹下。

Webserver (Nginx) :這壹層是可以輕松分布式部署的,結合智能DNS解析可以簡易地防止單點故障、實現區域訪問加速,結合LVS很容易實現負載均衡。這壹層主要是負責處理靜態請求和轉發PHP請求至第二層的PHP處理節點,至於靜態資源地址()可以單獨拿出來部署,或者直接使用商用的雲存儲服務(國內七牛不錯,國外有Amazon S3)

PHP處理節點:壹個節點其實就是壹個監聽特定端口的系統進程,webserver的請求通過負載均衡器(我用的AWS的loadbalancer)進行分發,很好實現分布式和負載均衡。我現在用的還是php自帶的php-fpm,其實facebook出的hhvm性能非常強悍,但是還不能100%通過我項目的單元測試,等hhvm成熟過後可以平滑替換

高速緩存:用的memcached,這壹層的作用主要是減輕數據庫IO和加快熱數據訪問,緩存策略與程序耦合度較高,不贅述,但簡單地說有兩種方式,壹種是在程序的全局層面加壹個緩存處理,這種方法代碼耦合度低,但是有效命中率不高,有些項目不壹定適應,另壹種是在具體的數據存取處加緩存處理,這種辦法程序耦合度較高,但是緩存命中率非常高,幾乎沒有無效緩存存在,我用的是這種。

數據庫 :我現在的項目數據規模不大,暫時只用了單臺數據庫,但是程序邏輯上已做好了數據庫線性擴展的準備。其實數據庫層的擴展是老生常談了,常用手段是分庫分表,這壹塊需要在前期的代碼就打下基礎,另外更平滑地手段是使用中間件,比如360的Atlas,阿裏巴巴的cobar,淘寶的TDDL,中間件可以在不大範圍變更代碼的情況下擴展,但是具體的使用場景還是有限的,具體項目還需單獨考察。

其他:根據不同的項目,架構還可以選擇性地使用隊列,我現在用的beantalkd,Redis也是壹個很好的選擇。隊列常用的使用環境是郵件發送和站內消息推送上面,但是在某些場景下也可以作為核心數據庫的緩沖,對應對大並發或者突發性流量也是不錯的選擇

  • 上一篇:asgto
  • 下一篇:戴旭的主要作品
  • copyright 2024編程學習大全網