Ⅰ 用PHP編寫支持高並發的網站,需要做什麼處理
PHP語言開發高並發的網站,需要加緩存,復雜邏輯走消息隊列非同步處理,mysql查詢必須走索引,還搞不定就加機器分流,mysql配置升高並且一主多從,使用codis集群,增加消息隊列的消費者,如果還搞不定就隨機拒絕請求,當然這是最後的退路。
緩存
緩存是避免業務查詢過多的請求mysql,導致業務不可用,段氏根據場景來判斷是否需要使用codis集群,如果並發量沒有達到某個級別,16G的redis也可以,但是要避免redis在高並發下容易發生的緩存穿透,盡量做成高可用,並保證緩存實現的命中率。
消息隊列
這也是高並發情境下的殺手鐧,削峰填谷,將耗時的業務邏輯直接以隊列的形式非同步慢慢處理,防止請求過度積壓,導致的伺服器不可用。
mysql優化
有些場景下必須查詢mysql的,也應該走索引,避免多表聯合查詢,甚至mysql的事務隔離級別都盡量的降低,或者直接去掉事務,採用最終一致性的補償指明機制。升級mysql的配置,核心數和內存的提升對查詢速度的優化是顯而易見的,最好能一步到位的走一主多從,查詢路由到從伺服器上。
隨機拒絕請求
這不是開玩笑,我們必須保證伺服器可用,寧願拒絕掉一些請求,也不能讓伺服器大量請求阻塞握逗散,最終導致大家都用不了。
Ⅱ 用PHP 編寫支持高並發的網站,需要做什麼處理
PHP支持高並發很多時候不是光靠PHP的。具體根據你的業務邏輯,下面列一些例子:
資料庫層面,表結構必須合理,盡量避免聯表查詢,能夠縮短處理時間
配置額外圖片伺服器或使用cdn,降低伺服器壓力
使用緩存處理類似搶購、投票等高並發請求,如redis。
消息隊列處理耗時較久的請求,如發郵件等
必要時使用多台伺服器,後台使用一台,前台可將高並發的業務與其他分開,避免因其中一個業務導致全部崩潰
Ⅲ 用PHP 編寫支持高並發的網站,需要做什麼處理
一般使用LVS+PHP集群(1000台),就算日均80億次請求,每秒有10萬並發,那分到每台機器的請求只有100個。只要你的PHP程序不是太差,100QPS總沒問題吧?
而真正的瓶頸在於資料庫和存儲系統,數據的一致性,可擴展性,可用性很難保證。所以需要根據具體的業務場景再做橫向和縱向的分庫分表。
再輔以memcache集群緩存,key-value高性能存儲,非同步隊列任務系統,整個架構就可以建立起來。
還有一類是真正的高並發,比如WebIM,一台機器要承受數十萬的TCP客戶端連接,進行大規模的實時通信。這種的可以用PHP的非同步高並發擴展swoole 。鏈接:Swoole: PHP的非同步、並行、分布式擴展框架。還有不懂的可以上後盾人看看相關的視頻。