我們的分布式workerman配置如下:
兩臺(tái)gateway,兩臺(tái)worker。
我們壓力模測(cè)試擬8000人在線,每人不停向所有人發(fā)消息。
1分鐘后,gateway在向worker機(jī)器的SendQ出現(xiàn)大量積壓。
可能是worker的處理能不不夠。
經(jīng)過查看workerman status后,發(fā)現(xiàn)worker的connections最多只能達(dá)到17.請(qǐng)問是不是這個(gè)原因?該如何設(shè)置?
圖中上面紅框是gateway的connections,又很多。worker的最多只能到17。
我的理解,BusinessWorker 的連接數(shù)跟客戶端數(shù)量無關(guān),它應(yīng)該是跟 Register 保持一個(gè)連接,再跟每個(gè) GatewayWorker 保持一個(gè)連接。
說到數(shù)據(jù)積壓,你這個(gè)模擬的場(chǎng)景壓力有點(diǎn)太大了吧…… 8000 個(gè)客戶端,每人都不停地向其他所有人發(fā)消息……這得是什么樣的應(yīng)用場(chǎng)景才能玩出這個(gè)效果啊……
是的,需要考慮下業(yè)務(wù)場(chǎng)景,優(yōu)化下業(yè)務(wù)邏輯,看下是否真的需要8000人每人不停的向所有人廣播消息。
這種壓測(cè)情況下,假設(shè)每人每秒向所有人廣播1條消息,那么就是每秒8000x8000=6400萬條消息,假設(shè)每條消息是100字節(jié),那么需要約6400MB每秒約(6400x8)Mb約為50Gb/秒,一般服務(wù)器沒有這么強(qiáng)悍的網(wǎng)卡,甚至一個(gè)機(jī)房都沒有這么大的出口帶寬。這樣肯會(huì)導(dǎo)致數(shù)據(jù)擠壓發(fā)不出去,導(dǎo)致某些地方SendQ出現(xiàn)大量積壓。
壓測(cè)最好貼切實(shí)際來壓測(cè),尤其是幾千人上萬人在線的場(chǎng)景,廣播數(shù)據(jù)的數(shù)量是很恐怖的,要盡可能減少不必要的全局廣播。