這篇文章主要介紹了workerman如何實(shí)現(xiàn)高并發(fā),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,公司以成都做網(wǎng)站、網(wǎng)站制作、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶超過千家,涉及國(guó)內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
并發(fā)概念太模糊,這里以兩種可以量化的指標(biāo)并發(fā)連接數(shù)和并發(fā)請(qǐng)求數(shù)來(lái)說明。
并發(fā)連接數(shù)是指服務(wù)器當(dāng)前時(shí)刻一共維持了多少TCP連接,而這些連接上是否有數(shù)據(jù)通訊并不關(guān)注。
例如一臺(tái)消息推送服務(wù)器上可能維持了百萬(wàn)的設(shè)備連接,由于連接上很少有數(shù)據(jù)通訊,所以這臺(tái)服務(wù)器上負(fù)載可能幾乎為0,只要內(nèi)存足夠,還可以繼續(xù)接受連接。
并發(fā)請(qǐng)求數(shù)一般用QPS(服務(wù)器每秒處理多少請(qǐng)求)來(lái)衡量,而當(dāng)前時(shí)刻服務(wù)器上有多少個(gè)tcp連接并不十分關(guān)注。例如一臺(tái)服務(wù)器只有10個(gè)客戶端連接,每個(gè)客戶端連接上每秒有1W個(gè)請(qǐng)求,那么要求服務(wù)端需要至少能支撐10*1W=10W每秒的吞吐量(QPS)。
假設(shè)10W吞吐量每秒是這臺(tái)服務(wù)器的極限,如果每個(gè)客戶端每秒發(fā)送1個(gè)請(qǐng)求給服務(wù)端,那么這臺(tái)服務(wù)器能夠支撐10W個(gè)客戶端。
并發(fā)連接數(shù)受限于服務(wù)器內(nèi)存,一般24G內(nèi)存workerman服務(wù)器可以支持大概120W并發(fā)連接。
并發(fā)請(qǐng)求數(shù)受限于服務(wù)器cpu處理能力,一臺(tái)24核workerman服務(wù)器可以達(dá)到45W每秒的吞吐量(QPS),實(shí)際值根據(jù)業(yè)務(wù)復(fù)雜度以及代碼質(zhì)量有所變化。
注意
高并發(fā)場(chǎng)景必須安裝event或者libevent擴(kuò)展。另外需要優(yōu)化linux內(nèi)核,尤其是進(jìn)程打開文件數(shù)限制。
壓測(cè)數(shù)據(jù)
這里僅提供workerman壓測(cè)的QPS數(shù)據(jù)參考。
###測(cè)試環(huán)境:
系統(tǒng):debian 6.0 64位
內(nèi)存:64G
cpu:Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz (2顆物理cpu,6核心,2線程)
Workerman:開啟200個(gè)Benchark進(jìn)程
壓測(cè)腳本:benchmark
業(yè)務(wù):發(fā)送并返回hello字符串
###普通PHP(版本5.3.10)壓測(cè)
短連接(每次請(qǐng)求完成后關(guān)閉連接,下次請(qǐng)求建立新的連接):
條件: 壓測(cè)腳本開500個(gè)并發(fā)線程模擬500個(gè)并發(fā)用戶,每個(gè)線程連接Workerman 10W次,每次連接發(fā)送1個(gè)請(qǐng)求
結(jié)果: 吞吐量:2.3W/S , cpu利用率:36%
長(zhǎng)連接(每次請(qǐng)求后不關(guān)閉連接,下次請(qǐng)求繼續(xù)復(fù)用這個(gè)連接):
條件: 壓測(cè)腳本開2000個(gè)并發(fā)線程模擬2000個(gè)并發(fā)用戶,每個(gè)線程連接Workerman 1次,每個(gè)連接發(fā)送10W請(qǐng)求
結(jié)果: 吞吐量:36.7W/S , cpu利用率:69%
內(nèi)存:每個(gè)進(jìn)程內(nèi)存穩(wěn)定在6444K,無(wú)內(nèi)存泄漏
以上是php5.3版本壓測(cè)數(shù)據(jù),如果用php7,性能會(huì)再次提升40%左右。
###HHVM環(huán)境壓測(cè)
短連接(每次請(qǐng)求完成后關(guān)閉連接,下次請(qǐng)求建立新的連接):
條件: 壓測(cè)腳本開1000個(gè)并發(fā)線程模擬1000個(gè)并發(fā)用戶,每個(gè)線程連接Workerman 10W次,每次連接發(fā)送1個(gè)請(qǐng)求
結(jié)果: 吞吐量:3.5W/S , cpu利用率:35%
長(zhǎng)連接(每次請(qǐng)求后不關(guān)閉連接,下次請(qǐng)求繼續(xù)復(fù)用這個(gè)連接):
條件: 壓測(cè)腳本開6000個(gè)并發(fā)線程模擬6000個(gè)并發(fā)用戶,每個(gè)線程連接Workerman 1次,每個(gè)連接發(fā)送10W請(qǐng)求
結(jié)果: 吞吐量:45W/S , cpu利用率:67%
內(nèi)存:HHVM環(huán)境每個(gè)進(jìn)程內(nèi)存穩(wěn)定在46M,無(wú)內(nèi)存泄漏
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“workerman如何實(shí)現(xiàn)高并發(fā)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!