2012-01-18 213 views
15

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

enter image description here

+1

像你提出的平行布局负载平衡它有一些问题,你注意到。以IRC为例,它具有树形布局(这有助于同步并简化向每个人发送的消息),并且根据例如,树经过树的数据量并不是那么多。尽管他们有将近8万用户,但它仍然是freenode的运营商。 – 2012-01-19 09:25:18

回答

14

首先,您的图假定负载平衡器被用作(TCP)代理,这并非总是如此。通常使用直接路由(或直接服务器返回),或执行目标NAT。在这两种情况下,后端服务器和客户端之间的连接都是直接的。所以在这种情况下,它本质上是分布在后端服务器中的TCP握手。详情参见以下内容:

显然TCP代理确实存在(HAProxy的是一个),在这种情况下,代理管理connecton的两边,这样你的应用程序需要能够通过传入IP /端口识别客户端(这恰好来自代理而不是客户端)。代理将处理将消息回送给客户端。无论哪种方式,它都归结为应用程序设计,因为我会想像棘手的一点是有一个共同的会话存储(某种类型的数据库或key =>值存储,如Redis),以便当您的应用程序服务器说:“我需要发送一条消息给弗兰克”,它可以确定哪个后端服务器弗兰克连接到(从数据库),并通知服务器发送消息。通过持久连接(所有负载平衡器都可以这样做),或通过使用像websocket这样的固有持久性,可以减少连接(来自同一客户端)在不同后端服务器之间的连接问题。

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

+0

感谢您提供丰富的答案。我将不得不深入了解这些主题以了解更多。你知道有什么好的资源来学习更多关于负载均衡的知识吗?谢谢! – 2012-01-19 14:21:32