websockets ,负载均衡器和 64k 端口

viv*_*ekv 4 load-balancing

使用 websockets 和持久的 TCP 连接,如果负载平衡器在后端处理大量服务器,它们将如何应对 64k 端口限制?需要。关于为可以的应用程序设置基础设施的一些想法。可能有 10 万个连接。

eey*_*0re 8

您的问题似乎假设 SNAT(又名 NAPT)转换负载平衡器。这里有一些关于解决 64k 临时端口问题的想法。我的经验是使用 F5 Networks 的 BIG-IP 产品(因此链接指向他们的站点),但其他供应商的概念是相同的:

  • 不要SNAT。如果不转换源端口,则没有 64k 限制。要关闭 SNAT,您需要将负载均衡器的内部地址设置为内部服务器上的路由(通常是默认路由)。

  • 使用 SNAT 池。这使得负载均衡器可以使用内部 IP 地址池进行转换。例如,SNAT 池中的两个 IP 地址将为您提供 128k 临时端口,因此 128k 并发 TCP 连接。

更高级的方法:

  • 使用“n-Path Routing”(这是 F5 的术语,其他人可能称之为“直接服务器返回”)。这不会转换客户端地址端口(或目标 IP,就此而言!),因此也会使临时端口问题消失。来自服务器的响应绕过负载平衡器。实现这一点的方法是使用环回适配器在所有服务器上托管相同的 IP,以便它们接受流量。

我应该指出,Websockets 对传统的 HTTP 负载平衡器来说是一个特殊的挑战,因为连接的寿命要长得多——人们确实会遇到他们以前可能从未遇到过的临时端口问题。在我看来,最好的解决方案是取消 SNAT 要求(上述第一个或第三个解决方案)。伸缩性得到很大改善,负载均衡器上的负载也减少了。增加的复杂性是值得的。

这是一篇关于这个问题的好文章,来自 F5 的 Lori MacVittie:HTML5 Web Sockets Changes the Scalability Game


viv*_*ekv 2

我在 StackOverflow 上找到了我的问题的最详细答案。