负载平衡器和WebSocket

负载平衡器和WebSocket,websocket,socket.io,signalr,load-balancing,f5,Websocket,Socket.io,Signalr,Load Balancing,F5,我们的基础设施由 1 F5负载平衡器 3节点 我们有一个使用websocket的应用程序,因此当用户访问我们的站点时,它会向平衡器打开一个websocket,并将其连接到第一个可用的节点,然后按照预期工作 我们的truobles带有维护任务,当我们必须更新软件时,我们需要一次关闭一个节点,部署新版本,然后再次打开它。执行此任务时,平衡器将断开与节点的websocket连接,客户端在几秒钟后重试连接到第一个可用节点,这给客户端带来了不便,因为他可能会错过信号(或更多) 如何保持客户端和平衡器之

我们的基础设施由

  • 1 F5负载平衡器
  • 3节点
我们有一个使用websocket的应用程序,因此当用户访问我们的站点时,它会向平衡器打开一个websocket,并将其连接到第一个可用的节点,然后按照预期工作

我们的truobles带有维护任务,当我们必须更新软件时,我们需要一次关闭一个节点,部署新版本,然后再次打开它。执行此任务时,平衡器将断开与节点的websocket连接,客户端在几秒钟后重试连接到第一个可用节点,这给客户端带来了不便,因为他可能会错过信号(或更多)


如何保持客户端和平衡器之间的连接,更改后端websocket服务器?负载平衡器是否足以实现我们的目标,或者我们需要改变我们的基础设施?

为了避免此类问题,我建议阅读有关负载平衡器的文章。有了它,您就不需要再去考虑负载平衡器、redis背板和其他可能需要连接到
WebSocket
的基础设施

基本上,客户端不会直接连接到您的节点,而是重定向到Azure Signal。您可以在此处阅读更多信息:


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

了解F5是一个完整的TCP代理非常重要。这意味着F5是客户端的服务器,客户端是服务器。如果您正在使用websockets协议,则必须将websockets配置文件应用于F5虚拟服务器,以便负载平衡器正确处理websockets应用程序

有关websockets配置文件的详细信息,请参见:


如果将websockets和HTTP配置文件应用于虚拟服务器—这意味着您有使用相同端口和LB节点的websockets和web流量—则F5将允许websockets流量作为直通。还请记住,如果这是一台HTTPS虚拟服务器,您需要确保将客户端和服务器端HTTPS配置文件(SSL卸载)应用于虚拟服务器。

虽然有多种方法可以摆弄负载平衡器以最大限度地减少软件升级造成的停机时间,但它们都不能解决问题,也就是说,您的应用层协议似乎不能容忍一些小的网络中断

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

我建议让您的服务器为客户端维护一个消息队列(不超过一定的大小/时间限制),这样当客户端断开连接时(无论是由于负载平衡器/升级还是任何其他原因),它都可以在不中断的情况下继续