直接连接后端和客户端的负载平衡机制?

Load balancing mechanism to directly connect backend and clients?

我正在尝试使用多个服务器实现一个系统,这些服务器通过 TCP 与客户端通信。由于会有多个后端服务器来处理客户端的请求,我想知道是否存在负载均衡机制,负载均衡器在收到客户端请求后,将客户端直接连接到后端服务器,以便他们建立一个双向 TCP 连接和两者之间的所有未来通信都直接在它们之间完成,而不是通过负载平衡器。

一般来说,不,IP 不允许这样做,个人连接不能移交给其他机器。协议不允许。在 high-availability 的情况下,您可以将 所有 连接从一台机器移交给另一台机器,但即使那样也是一种 hack,并且是使用 MAC 完成的地址转移。

您想要的可能是 HAProxy 之类的东西,它是一个 TCP/IP 负载平衡器。它足够快,中间不是问题,您不会感到性能受到影响。

另一种方法是在应用层做一些事情,您的 "load balancer" 告诉客户端要连接到哪个服务器,但实际上并不进行连接。这是由客户端在次要请求中完成的。有时这是通过 DNS 完成的,有时是通过 time-limited 令牌来确保客户端遵守路由。