你如何进行TCP流量的负载均衡?

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

enter image description here


1
像您所提供的并行布局负载均衡存在一些问题,可以以 IRC 为例说明。IRC 具有树状结构布局(这有助于同步并简化向所有人发送消息),而树上传输的数据量并不是很大,例如 freenode 运营商表示,尽管其用户接近 80K。 - jørgensen
1个回答

18
首先,你的图表假定负载均衡器充当(TCP)代理,但并非总是如此。通常采用直接路由(或直接服务器返回)或目标NAT。在这两种情况下,后端服务器与客户端之间的连接是直接的。因此,在这种情况下,基本上是将TCP握手分布在后端服务器之间。了解更多信息,请参见以下链接: 显然,确实存在TCP代理(例如HAProxy),在这种情况下,代理管理连接的双方,因此您的应用程序需要能够通过传入的IP/端口(来自代理而不是客户端)识别客户端。代理将处理将消息发送回客户端的工作。
无论哪种方式,都归结于应用程序设计,我想棘手的部分是具有共同的会话存储(某种类型的数据库或键值存储,例如Redis),以便当您的应用程序服务器说“我需要向Frank发送消息”时,它可以确定Frank连接到哪个后端服务器(从DB),并向该服务器发出信号以向其发送消息。通过使用持久连接(所有负载均衡器都可以实现)或使用一些本质上持久的东西,例如websocket,可以减少连接(来自同一客户端)在不同的后端服务器之间移动的问题。
由于我没有聊天软件方面的经验,这可能是一个非常简单化的解释。显然,DB服务器本身可以分布在多台机器上,以实现容错和负载平衡。

谢谢你的详细回答。我需要进一步了解这些话题。你知道有什么好的学习负载均衡的资源吗?谢谢! - Brian DiCasa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接