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