负载均衡器是否打开了所有子服务器的套接字

假设我有以下设置:

client (browser)-> load balancer (nginx) -> 10 nodejs servers

我使用websocket( socket.io )进行客户端和服务器之间的双向通信。

我的问题是:当客户端通过套接字发送消息时,负载平衡器是否简单地将套接字请求重定向到另一个服务器,如正常的http请求,或者更复杂的事情发生,比如使负载平衡器机器上的套接字保持打开客户端和服务器之间的websocket连接的整个持续时间。

因为如果以上是真的,这意味着负载均衡器机器具有所有其子服务器的TCP连接打开的SUM,这意味着负载均衡器必须是相当庞大的机器,并且它不是“完全”分配所有的加载..最终我不得不担心负载平衡器机器上的“插槽不足”?

任何人都可以为我澄清这个整体概念吗? 谢谢!


对于websockets,是的,负载平衡器几乎可以肯定地维持来自客户端的TCP连接,并且每次连接都向服务器发送TCP连接。 然而,负载均衡器比实际处理客户端的服务器机器要做的工作要少得多 - 它不必“思考”协议或生成或解释任何有效负载,只需从一个管道复制数据当他们关闭时,他们会断开连接。

使用事件驱动模型并可能使用Linux内核的splice(2)系统调用,可以在内核空间中的所有连接之间对“复制”数据进行混洗,以实现非常高效的操作。

设计良好的负载均衡器可能会像其他资源(如CPU或内存)一样,针对给定IP地址的约64K地址/端口对的IPv4限制运行。

即使在正常的网络流量下,平衡器根据请求和响应主体了解并做出路由决策,应用服务器通常仍然有比平衡器更多的工作要做。

有趣的是,我的基础架构中的一些最小的机器是负载均衡器......并且它们仍然倾向于具有最小的工作负载,如内存,CPU和磁盘访问所证明的那样。

链接地址: http://www.djcxy.com/p/44819.html

上一篇: does load balancer have all its child servers' sockets open

下一篇: HTTP TCP AND WEB SOCKET