【问题标题】:How do you load balance TCP traffic?你如何负载平衡 TCP 流量?
【发布时间】:2012-02-13 12:23:19
【问题描述】:

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

【问题讨论】:

  • 像您展示的并行布局中的负载平衡存在您注意到的一些问题。以 IRC 为例,它具有树形布局(这有助于同步并简化向每个人的消息传递),并且通过树的数据量并不是那么多,根据例如。 freenode 操作,尽管他们有近 8 万用户。

标签: tcp load-balancing


【解决方案1】:

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

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

无论哪种方式,它都归结为应用程序设计,因为我认为棘手的一点是拥有一个通用会话存储(某种数据库,或 key=>value 存储,例如 Redis),所以当您的应用服务器说“我需要向 Frank 发送消息”它可以确定 Frank 连接到哪个后端服务器(来自 DB),并向该服务器发送信号以向其发送消息。您可以通过持久连接(所有负载均衡器都可以做到这一点)或使用像 websocket 这样本质上持久的东西来减少连接(来自同一个客户端)在不同后端服务器之间移动的问题。

这可能过于简单化了,因为我没有使用聊天软件的经验。显然,数据库服务器本身可以分布在多台机器上,以实现容错和负载平衡。

【讨论】:

  • 感谢您提供的信息丰富的回答。我将不得不研究这些主题以了解更多信息。你知道有什么好的资源来学习更多关于负载平衡的信息吗?谢谢!
猜你喜欢
  • 2016-12-25
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2022-06-13
  • 2020-06-13
  • 2020-09-06
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多