负载平衡器和WebSocket

时间:2019-12-27 16:00:36

标签: websocket socket.io signalr load-balancing f5

我们的基础架构由

组成
  • 1个F5负载均衡器
  • 3个节点

我们有一个使用websocket的应用程序,因此,当用户访问我们的网站时,它会打开一个websocket到平衡器,并连接到第一个可用节点,并且可以正常工作。

我们的难题出现了,维护任务需要更新软件时,我们需要一次使1个节点脱机,部署新版本,然后再将其打开。进行此任务时,平衡器将断开的websocket连接断开,然后几秒钟后客户端重试以连接到第一个可用节点,这给客户端带来了不便,因为他可能会错过信号(或更多)。

如何通过更改后端Websocket服务器来保持客户端与平衡器之间的连接?负载均衡器是否足以实现我们的目标,或者我们需要更改基础架构?

3 个答案:

答案 0 :(得分:0)

为避免此类问题,我建议阅读有关Azure SignalR的信息。这样,您就无需再考虑诸如负载平衡器,redis背板和可能需要建立WebSockets连接的其他基础结构之类的事情。

基本上,客户端将不会直接连接到您的节点,而是会重定向到Azure SignalR。您可以在这里了解更多信息:https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-overview

由于维护应用程序的连接对您的应用程序很重要,因此我看不到其他任何方法来将无连接归档到您的节点,因为您需要关闭它们。

答案 1 :(得分:0)

重要的是要了解F5是完整的TCP代理。这意味着F5是客户端的服务器,也是客户端到服务器的服务器。如果您使用的是websockets协议,那么您必须必须将Websockets配置文件应用于F5虚拟服务器,以便负载均衡器可以正确处理websockets应用程序。

websockets配置文件的详细信息可以在这里找到:https://support.f5.com/csp/article/K14754

如果将websocket和HTTP配置文件应用于虚拟服务器-意味着您使用相同的端口和LB节点具有websocket和Web流量-则F5将允许websocket流量作为传递。另外请记住,如果这是HTTPS虚拟服务器,则需要确保将客户端和服务器端HTTPS配置文件(SSL卸载)应用于虚拟服务器。

答案 2 :(得分:0)

虽然有多种方法可以使用负载均衡器来最大限度地减少软件升级造成的停机时间,但没有一种方法可以解决问题,即您的应用层协议似乎无法容忍一些小的网络中断.

即使您有一个完美的负载平衡器并且您的软件部署导致零停机时间,客户的计算机也可能使用不稳定的 wifi,这会导致网络中断半秒 - 或者通过以太网并且有人在他们的 LAN 上重新配置了一些路由,等

我建议您的服务器为客户端维护一个消息队列(最多达到某个大小/时间限制),以便当客户端断开连接时 - 无论是由于负载平衡器/升级 - 或任何其他原因,它可以继续而不受干扰。