我知道负载均衡器如何用于http请求。客户端打开与LB的连接,LB将请求转发给后端服务器,LB获得响应,并从同一连接将响应发送给客户端并关闭连接。我想知道websockets负载均衡器的内部细节。如何维护连接以及如何将响应发送到客户端。我在stackoverflow上读了很多问题,但没有一个给出了LB
的内部实现的清晰图片答案 0 :(得分:0)
LB只是将连接路由到它后面的服务器。
因此,只要保持连接打开,您将继续连接到同一服务器,并且不再与LB通信。 根据客户端的不同,重新连接时可以将其路由到另一台服务器。
当某些库回退到JSON-P tho时,我不确定它是如何工作的
答案 1 :(得分:0)
负载平衡器的实现有很多种。有支持websockets的负载平衡器,比如F5的BIG-IP(https://support.f5.com/kb/en-us/solutions/public/14000/700/sol14754.html)和LB,我不认为支持websocekts,比如AWS ELB(有一个线程)有人说他们可以用ELB制作它,但我想他们在ELB后面添加了一些其他组件:How do you get Amazon's ELB with HTTPS/SSL to work with Web Sockets?。
Load Balancer不仅可以作为HTTP连接的终结者,还可以终止HTTPS,SSL和TCP连接。他们可以根据不同的参数实现粘性,如cookie,原始IP等(如F5)在ELB的情况下,他们只使用cookie,它可以是应用程序生成的cookie或LB生成的cookie(两者都只有HTTP或HTTPS)。粘性也可以保持一定的时间,有时是可配置的。
现在,为了转发与websockets相对应的数据,他们需要在SSL或TCP(非HTTP或HTTPS)级别终止和转发连接。除非他们理解websocket协议(我不知道是否有任何协议)。此外,他们需要保持与打开连接的服务器的粘性。这对于ELB来说是不可能的,但对于像BIG-IP这样的更复杂的LB来说是肯定的。