用PHP解決WEB的高併發分佈式架構

一般來說,解決WEB高併發的有效手段都是採用可線性擴展的多層分佈式架構

  1. Webserver (Nginx) :這一層是可以輕鬆分佈式部署的,結合智能DNS解析可以簡易地防止單點故障、實現區域訪問加速,結合LVS很容易實現負載均衡。這一層主要是負責處理靜態請求和轉發PHP請求至第二層的PHP處理節點,至於靜態資源地址(http://misc.xxxx.com)可以單獨拿出來部署,或者直接使用商用的雲存儲服務(國內七牛不錯,國外有Amazon S3)
  2. PHP處理節點:一個節點其實就是一個監聽特定端口的系統進程,webserver的請求通過負載均衡器進行分發,很好實現分佈式和負載均衡。一般用的都是php自帶的php-fpm,其實facebook出的hhvm性能非常強悍,可惜在18年年底宣佈停止對PHP的支持,實在太遺憾,原因因爲PHP7跟PHP5有很大的兼容問題,更多的其他原因可查看:https://cloud.tencent.com/developer/news/316599
  3. 高速緩存:用memcached,這一層的作用主要是減輕數據庫IO和加快熱數據訪問,緩存策略與程序耦合度較高,不贅述,但簡單地說有兩種方式,一種是在程序的全局層面加一個緩存處理,這種方法代碼耦合度低,但是有效命中率不高,有些項目不一定適應,另一種是在具體的數據存取處加緩存處理,這種辦法程序耦合度較高,但是緩存命中率非常高,幾乎沒有無效緩存存在。
  4. 數據庫 :其實數據庫層的擴展是老生常談了,常用手段是分庫分表,這一塊需要在前期的代碼就打下基礎,另外更平滑地手段是使用中間件,比如360的Atlas,阿里巴巴的cobar,淘寶的TDDL,中間件可以在不大範圍變更代碼的情況下擴展,但是具體的使用場景還是有限的。
  5. 其他:根據不同的項目,架構還可以選擇性地使用隊列,beantalkd、Redis也是一個很好的選擇。隊列常用的使用環境是郵件發送和站內消息推送上面,但是在某些場景下也可以作爲核心數據庫的緩衝,對應對大併發或者突發性流量也是不錯的選擇
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章