【发布时间】:2012-09-13 14:59:19
【问题描述】:
我有一个关于如何对 Web 套接字进行负载平衡的问题。
我有一个支持网络套接字的服务器。浏览器连接到我的网站,每个浏览器都打开一个到www.mydomain.com 的网络套接字。这样,我的社交网络应用就可以将消息推送给客户端。
传统上,只使用 HTTP 请求,我会通过在两个 Web 服务器前面添加第二个服务器和一个负载平衡器来扩展。
使用 web 套接字,连接必须直接与 web 服务器,而不是负载平衡器,因为如果一台机器的物理限制是 64k 开放端口,并且客户端正在连接到负载平衡器,那么我不能'不支持超过 64k 的并发用户。
那我该怎么做-
让客户端在页面加载时直接连接到 Web 服务器(而不是负载均衡器)?每次最初请求页面时,我是否只是从节点加载 JavaScript,负载均衡器(或其他)随机修改脚本的 URL?
处理波纹启动?当 Web 服务器关闭时,浏览器会注意到连接已关闭。我可以编写 JavaScript 代码来尝试重新打开连接,但节点会消失一段时间。所以我想我得回到负载均衡器来查询下一个要使用的节点的地址?
我确实想知道负载平衡器在初始请求上发送重定向,因此浏览器最初请求
www.mydomain.com并被重定向到www34.mydomain.com。这工作得很好,直到节点出现故障——而像 Facebook 这样的网站不会这样做。他们是怎么做到的?
【问题讨论】:
-
你可以在网络层进行负载均衡,建议here
-
还有其他替代方法,例如基于 DNS 的负载平衡或使用基于 http 的编排服务器。我试图在deepstream.io/blog/load-balancing-websocket-connections 总结每种方法的优缺点
-
@wolframhempel 链接已死。 :-(
标签: websocket load-balancing server-push