【问题标题】:does load balancer have all its child servers' sockets open负载均衡器是否打开了所有子服务器的套接字
【发布时间】:2016-03-22 00:17:32
【问题描述】:

假设我有以下设置:

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

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

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

因为如果上述情况属实,则意味着负载均衡器机器已打开其所有子服务器的 TCP 连接的总和,这意味着负载均衡器本身必须是一台相当大的机器,而不是“完全”分配所有负载..最终我不得不担心负载平衡器机器上的“套接字不足”?

谁能为我澄清整个概念?谢谢!

【问题讨论】:

    标签: node.js nginx tcp websocket haproxy


    【解决方案1】:

    对于 websockets,是的,负载均衡器几乎肯定会为每个连接维护从客户端进出到服务器的 TCP 连接。然而,与实际处理客户端的服务器机器相比,负载均衡器要做的工作要少得多——它不必“考虑”协议或生成或解释任何有效负载,它只需从一个管道复制数据连接到另一个并在它们关闭时断开连接。

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

    设计良好的负载平衡器很可能会遇到给定 IP 地址的大约 64K 地址/端口对的 IPv4 限制,就像 CPU 或内存等任何其他资源一样。

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

    有趣的是,我的基础架构中的一些最小的机器是负载平衡器...它们仍然往往具有最小的工作负载,如内存、CPU 和磁盘访问所证明的。

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 2013-10-09
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2019-01-05
      相关资源
      最近更新 更多