gpt4 book ai didi

websocket - websocket 连接如何通过负载均衡器工作?

转载 作者:行者123 更新时间:2023-12-04 11:54:04 28 4
gpt4 key购买 nike

请原谅我的无知,因为我在负载均衡器和 websockets 方面的经验有限。我试图了解客户端如何通过 websockets 连接到位于负载均衡器后面的服务器集群。
我对负载均衡器的理解是它们就像反向代理。它们接受来自客户端的请求,将它们路由到集群中的服务器,当服务器回复负载均衡器时,负载均衡器将该信息转发给客户端。在这方面,他们就像是在服务器和客户端之间玩电话的中间人。
现在将 websockets 添加到组合中。如果客户端尝试通过 websockets 进行通信。负载均衡器不需要打开 2 个 websockets 连接吗?一个与客户端,一个与服务器?这听起来不会扩展,除非还有一组负载平衡器。
我的第二个猜测是负载均衡器并没有真正“中继”信息,它们只是一个路由器,为客户端提供服务器的 IP,然后直接在服务器和客户端之间进行通信。
看到的有关这方面的信息都忽略了这部分的解释。如果有人能解释我遗漏了什么,我将不胜感激。

最佳答案

负载均衡器和反向代理有不同的用例。

  • 负载均衡器的主要用例是在一组服务器中的节点之间分配负载以管理每个节点的资源利用率
  • 反向代理的用例之一是向客户端隐藏服务器元信息(ip、端口等)。这是某种安全。

  • 我们可以使用负载均衡器配置反向代理,也可以单独配置反向代理。
    为单个节点配置负载均衡器没有意义,但我们可以为单个节点配置反向代理。
    由于其用例和限制,处理 WebSocket 负载或在 WebSocket 节点(在集群中)中分配负载是一个非常复杂的实现。
    为什么复杂:
  • WebSocket 是粘性连接,一旦连接,只要您的应用程序处于事件状态,您就会保持连接状态
  • 您在服务器中打开 WebSocket 连接有限制(默认为 63k)。你可以通过内核级别的一些设置来扩展它,然后你需要妥协你的系统资源

  • 澄清你的疑问:如果你把 WebSocket 放在负载均衡器后面,
    然后 WebSocket 将通过来自客户端的负载均衡器进行通信,并且客户端将与负载均衡器进行通信。
    如果为每个客户端请求打开两个 WebSocket 连接(假设负载均衡器中有一个节点),则没有使用负载均衡器并导致不一致的响应(如果您认为,您的聊天应用程序是如何工作的)
    在将负载分配到 WebSocket 服务器的情况下,您将放置负载平衡器的位置:
    如果您将负载均衡器放在 L3(网络层)中,那么您的请求将根据您的 IP 地址进行分配。
    网络层的服务将生成您的 IP 地址的散列并将请求发送到相应的 WebSocket 服务器(一致散列)。网络层不会维护请求的状态
    如果您将负载均衡器放在 L7(应用层)中,那么负载均衡器必须保持一个状态(哪个源 IP 端口对将转到哪个后端节点)。这对资源不利。
    我希望我能澄清你们中的一些疑问

    我建议查看一些聊天消息系统设计架构,HTTP (Keep-Alive) vs Websocket,How to pub/sub with WebSocket(它很好地扩展了 WebSocket)
    这个博客有关于如何为多个用户扩展 WebSocket 的好方法: https://hackernoon.com/scaling-websockets-9a31497af051
    不要错过 nginx,它是分布式系统设计的好网站

    关于websocket - websocket 连接如何通过负载均衡器工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65174175/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com