分布式问题求助

frontlon

我们的分布式workerman配置如下:
两台gateway,两台worker。

我们压力模测试拟8000人在线,每人不停向所有人发消息。

1分钟后,gateway在向worker机器的SendQ出现大量积压。

可能是worker的处理能不不够。
经过查看workerman status后,发现worker的connections最多只能达到17.请问是不是这个原因?该如何设置?

图中上面红框是gateway的connections,又很多。worker的最多只能到17。

阅读 1742
2个回答

maq

我的理解,BusinessWorker 的连接数跟客户端数量无关,它应该是跟 Register 保持一个连接,再跟每个 GatewayWorker 保持一个连接。

说到数据积压,你这个模拟的场景压力有点太大了吧…… 8000 个客户端,每人都不停地向其他所有人发消息……这得是什么样的应用场景才能玩出这个效果啊……

  • frontlon 2018-04-04

    谢谢了,经过确认。确实是和gateway建立的链接,两台gateway,每台8核,加一个register,正好17个。

    我们要求做到1万并发。

  • maq 2018-04-06

    @1133:【1万并发】这个说法本身并步严格,正好有一篇文档值得参考:
    http://doc.workerman.net/315236

  • frontlon 2018-04-07

    @3346:嗯,这个是了解的。这个文章我之前也看过。我们的需求是:无论并发多少,qps多少。实际要保证的是,1万人在线聊天一点问题都没有。可能会有一万人同时回复的场景。

  • maq 2018-04-07

    【一万人同时回复】跟【一万人一直同时回复】的差别还是相当大的 :D

  • maq 2018-04-07

    另外再多说一句,【一点问题都没有】这个要求是不切实际的,更科学的提法是【在多大概率上保证有什么样的响应效果】。

walkor

是的,需要考虑下业务场景,优化下业务逻辑,看下是否真的需要8000人每人不停的向所有人广播消息。
这种压测情况下,假设每人每秒向所有人广播1条消息,那么就是每秒8000x8000=6400万条消息,假设每条消息是100字节,那么需要约6400MB每秒约(6400x8)Mb约为50Gb/秒,一般服务器没有这么强悍的网卡,甚至一个机房都没有这么大的出口带宽。这样肯会导致数据挤压发不出去,导致某些地方SendQ出现大量积压。

压测最好贴切实际来压测,尤其是几千人上万人在线的场景,广播数据的数量是很恐怖的,要尽可能减少不必要的全局广播。