Socket.io 使用代理的 nodejs 集群散列负载平衡

Socket.io nodejs cluster hash loadbalancing with proxy

我构建了一个应用程序,人们可以根据 URL 中房间的 id 通过 websocket 连接到房间,例如 app.com/9l4CvjXFxn 。问题是我想要 运行 多个节点实例,以确保始终运行的实例,以防其他实例崩溃,还因为我听说负载平衡很好。我还有要提供的静态 UI 内容。我只使用 socketio,没有 REST api.

我现在的计划是使用 load-balancing 和服务代理,例如 nginx 或 haproxy。我从来没有用过它们中的任何一个。我也考虑过使用 PM2 轻松 运行 许多节点实例。该应用程序可能会部署在 AWS 上。

Websockets 通过 HTTP1 升级到 socketio 中的某个路径发生,我已将其设置为 root/。所以在最初的升级请求中我不能改变路径,但我可以把东西放入 url 查询或 cookie headers.

所以负载均衡器的主要要求是将某个房间的 websocket 升级一致地引导到一个特定的节点实例,因此我想到了哈希负载均衡,但我不知道该怎么做以及这是否正确根本没有方法。 你能帮忙吗? 谢谢!

无法解决,可能是 "wrong" 的问题。这是因为我没有持久性,我将我的对象保存在节点中。如果我的节点实例是无状态的并使用 redis,我可以启动许多节点而不会出现这个问题。这是下一步,因为它仍然是一个早期的应用程序。不过签出:quarantime.io :)