高並發(High Concurrency)通常是指透過設計保證系統能夠同時並行處理許多請求。
一般來說,解決WEB高並發的有效手段都是採用可線性擴展的多層分散式架構,我生產專案的架構是這樣的,就在這裡拋磚引玉一下。
Webserver (Nginx) : (推薦學習:PHP視訊教學)
這一層是可以輕鬆分散式部署的,結合智能DNS解析可以簡易地防止單點故障、實現區域存取加速,結合LVS很容易實現負載平衡。
這一層主要是負責處理靜態請求和轉送PHP請求至第二層的PHP處理節點,至於靜態資源位址(http://misc.xxxx.com)可以單獨拿出來部署,或者直接使用商用的雲端儲存服務(國內七牛不錯,國外有Amazon S3)
PHP處理節點:
一個節點其實就是監聽特定埠的系統進程,webserver的請求透過負載平衡器(我用的AWS的loadbalancer)進行分發,很好實現分散式和負載平衡。
我現在用的還是php自帶的php-fpm,其實facebook出的hhvm性能非常強悍,但是還不能100%通過我專案的單元測試,等hhvm成熟過後可以平滑替換
高速緩存:
使用的memcached,這一層的作用主要是減輕資料庫IO和加快熱數據訪問,快取策略與程式耦合度較高,不贅述,但簡單地說有兩種方式,一種是在程式的全域層面加一個快取處理,這種方法代碼耦合度低,但是有效命中率不高,有些項目不一定適應,另一種是在具體的資料存取處加上快取處理,這種辦法程式耦合度較高,但是快取命中率非常高,幾乎沒有無效快取存在,我用的是這種。
資料庫:
我現在的專案資料規模不大,暫時只用了單一資料庫,但是程式邏輯上已做好了資料庫線性擴充的準備。
其實資料庫層的擴展是老生常談了,常用手段是分庫分錶,這一塊需要在前期的程式碼就打下基礎,另外更平滑地手段是使用中間件,例如360的Atlas,阿里巴巴的cobar,淘寶的TDDL,中間件可以在不大範圍變更代碼的情況下擴展,但是具體的使用場景還是有限的,具體項目還需單獨考察。
其他:
根據不同的項目,架構還可以選擇性地使用隊列,我現在用的beantalkd,Redis也是一個很好的選擇。佇列常用的使用環境是郵件發送和站內訊息推送上面,但是在某些場景下也可以作為核心資料庫的緩衝,對應對大並發或突發性流量也是不錯的選擇
以上是php高並發網站是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!