【发布时间】:2020-01-10 21:09:56
【问题描述】:
我正在构建一个使用 nodejs 作为服务器和 Docker Swarm 来处理复制和负载平衡的 web 应用程序。
现在,我需要处理客户端和复制服务器之间的实时数据更新,所以我想到了使用 Socket.IO 来处理连接。所有请求都通过 NGINX 服务器传递,该服务器将其重定向到 swarm 的管理器节点,并由他处理平衡。 由于网络的拓扑可以根据网络的负载快速变化,我不愿意让 NGINX 处理平衡和应用粘性会话......(也许是错的)
根据我对这种设置的理解,如果客户端连接到我的服务器,docker 的负载均衡器会将请求发送到我的 N 个复制服务器之一,并且只有这台服务器会知道客户端已连接。 因此,如果某些传统的 HTTP-Request 更新我在另一个副本上的数据,则可能由于给定服务器中不存在此连接而无法发送信息。
有没有办法处理这种情况?我想在服务器之间包含一个消息队列以将数据发送给所有服务器,然后包含连接的那个将发送数据,但这是推荐的做法吗?
非常感谢
【问题讨论】:
标签: node.js docker socket.io docker-swarm