首页 文章

如何 balancer TCP流量?

提问于
浏览
18

我正在尝试确定如何 balancer TCP流量 . 我理解HTTP负载 balancer 是如何工作的,因为它是一个简单的请求/响应架构 . 但是,当您的服务器尝试将数据写入其他客户端时,我不确定如何 balancer TCP流量 . 我附上了一个简单的TCP聊天服务器的工作流图像,我们希望在N个应用服务器之间 balancer 流量 . 是否有任何负载 balancer 器可以做我正在尝试做的事情,或者我是否需要研究不同的主题?谢谢 .

enter image description here

1 回答

  • 14

    首先,您的图表假定负载均衡器充当(TCP)代理,但情况并非总是如此 . 通常使用直接路由(或直接服务器返回),或执行目标NAT . 在这两种情况下,后端服务器和客户端之间的连接都是直接的 . 因此,在这种情况下,它实质上是在后端服务器之间分配的TCP握手 . 有关详细信息,请参阅以下内容

    显然,TCP代理确实存在(HAProxy就是其中之一),在这种情况下,代理管理连接的两端,因此您的应用程序需要能够通过传入的IP /端口识别客户端(这可能恰好来自代理而不是客户) . 代理将处理将消息发送回客户端 .

    无论哪种方式,它归结为应用程序设计,因为我认为棘手的一点是拥有一个公共会话存储(某种类型的数据库,或key =>值存储,如Redis),所以当你的应用服务器说“我需要向Frank发送消息“它可以确定哪个后端服务器Frank连接到(来自DB),并通知该服务器向其发送消息 . 通过持久连接(所有负载均衡器可以执行此操作)或使用像websocket这样本质上持久的内容,可以减少在不同后端服务器上移动的连接(来自同一客户端)的问题 .

    这可能是一个巨大的过度简化,因为我没有聊天软件的经验 . 显然,DB服务器本身可以分布在多台机器中,以实现容错和负载 balancer .

相关问题