【发布时间】:2018-04-29 12:00:16
【问题描述】:
每隔几个月,在考虑一个涉及套接字的个人项目时,我都会发现自己有一个问题:“如何在动态水平扩展的 WebSocket 服务器上正确地对套接字进行负载平衡?”
我了解水平扩展 WebSocket 和使用 pub/sub 模型将数据获取到为特定用户保存套接字连接的正确服务器背后的理论。我想我了解有效识别具有最少当前套接字连接的服务器的方法,我也想路由一个新的套接字连接。 我不明白的是如何有效地将新的套接字连接路由到您选择的具有低套接字数的服务器。
我不认为这个答案会与特定的服务器实现相关联,而是可以应用于大多数服务器。我可以很容易地看到自己使用 vert.x、node.js 甚至完美的方式实现了这一点。
【问题讨论】:
-
旁注:“如何有效地将新的套接字连接路由到您选择的具有低套接字数的服务器” - 这不是唯一的指标......也许是一个服务器有很多懒惰的客户端,而另一台服务器有很多活动的客户端——客户端的数量并不是唯一有效的测试。另外,当一个惰性客户端变得超级活跃时会发生什么? ......这一切都无法猜测。我对发现答案同样感兴趣,但我猜想在调整最后响应时间测试(对于已知的预设查询)时进行循环将是一个不错的启发式应用。
-
如果您对答案感兴趣,请投票赞成这个问题 :-) 循环赛正是我的问题试图避免的。如果您的服务器负载不足,因此新服务器启动,轮询会在填充该新服务器上的套接字方面做得非常糟糕。此外,一旦您可以将套接字路由到特定服务器,您就可以让客户端重新连接并重新分配负载。
标签: node.js sockets websocket vert.x perfect