gpt4 book ai didi

websocket - 负载平衡 websocket

转载 作者:行者123 更新时间:2023-12-03 04:59:04 34 4
gpt4 key购买 nike

我有一个支持网络套接字的服务器。浏览器连接到我的网站,每个浏览器都会打开一个到 www.mydomain.example 的 Web 套接字。这样,我的社交网络应用程序就可以向客户端推送消息。

传统上,仅使用 HTTP 请求,我会通过在两个 Web 服务器前面添加第二个服务器和一个负载均衡器来进行扩展。

使用 Web 套接字,连接必须直接与 Web 服务器进行连接,而不是与负载均衡器进行连接,因为如果一台计算机的物理限制为 64k 个开放端口,并且客户端正在连接到负载均衡器,那么我就无法不支持超过 64k 并发用户。

那么我该怎么办:

  1. 在页面加载时让客户端直接连接到 Web 服务器(而不是负载均衡器)?我是否只需从节点加载 JavaScript,并且每次最初请求页面时,负载均衡器(或其他)都会随机修改脚本的 URL?

  2. 处理波纹启动?当 Web 服务器关闭时,浏览器会注意到连接已关闭。我可以编写 JavaScript 代码来尝试重新打开连接,但该节点将消失一段时间。所以我想我必须返回负载均衡器来查询下一个要使用的节点的地址?

  3. 我确实想知道负载均衡器在初始请求时发送重定向,以便浏览器最初请求 www.mydomain.example 并被重定向到 www34.mydomain。示例。这种方法效果很好,直到节点宕机为止——而像 Facebook 这样的网站不会这样做。他们是如何做到的?

最佳答案

放置一个 L3 负载均衡器,根据源 IP 端口哈希值将 IP 数据包分发到您的 WebSocket 服务器场。由于 L3 平衡器不维护任何状态(使用散列源 IP 端口),因此它将扩展到低端硬件(例如 10GbE)上的线速。由于分布是确定性的(使用散列源 IP 端口),因此它将与 TCP(以及 WebSocket)一起使用。

另请注意,64k 硬限制仅适用于给定(源)IP 地址的传出 TCP/IP。它不适用于传入的 TCP/IP。我们测试过Autobahn (高性能 WebSocket 服务器)在 2 核、4GB RAM 虚拟机上具有 200k 事件连接。

另请注意,您可以在初始 WebSocket 握手期间宣布的 HTTP 路径上执行 L7 负载平衡。在这种情况下,负载均衡器必须维护状态(哪个源 IP 端口对将前往哪个后端节点)。尽管如此,如果设置得当,它可能会扩展到数百万个连接。

免责声明:我是 Autobahn 的原作者,为 Tavendo 工作。

关于websocket - 负载平衡 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526265/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com