软件负载均衡器 - 转发还是重定向到后端服务器?

软件负载均衡器 - 转发还是重定向到后端服务器?

我是一名 Web 开发人员,最近需要使用负载均衡器。我是这个领域的新手。我已经选择了使用哪个负载均衡器,但这并不重要,据我研究,HAProxy 具有所需的所有功能。

我担心的是,使用基于软件的负载平衡器,它不会将用户“重定向”到后端服务器,负载平衡器会停留在中间,因此所有流量带宽和 TCP 连接都会停留在中间。我理解对了吗?

如果之前的问题的答案是肯定的,那么我该如何解决,以便负载均衡器不会处于客户端 - 后端服务器的中间?

另外,我需要一个“源” lb 类型,因为 webapp 使用会话,并且我需要用户连接到他们一直使用的相同服务器。

先感谢您。

答案1

不确定你的大部分流量流向哪个方向,是client -> server,还是server -> client,但如果是后者,你可能会有兴趣使用(或至少检查一下)Linux 虚拟服务器 (LVS)

一种先进的负载平衡解决方案,可用于构建高度可扩展和高可用性的网络服务,例如可扩展的Web、缓存、邮件、ftp、媒体和VoIP服务。

(摘自该网站)

要直接获取后端服务器的流量,而无需“介于两者之间”到您的客户端,请使用直接路由。您可以在此链接中找到更多信息,但是,要了解它是什么样子的:

Linux 虚拟服务器直接路由

现在你可能会说……好吧,这在理论上听起来不错,很奇特,但拜托,网站上写着“最新新闻……2012 年 8 月 8 日星期三”……现在已经是 2016 年了。是的,你当时完全正确,而且这LVS是经过验证的,非常可靠……我建议至少看一看吗?

维基媒体基金会确实使用它,就像其他许多人一样,这里是最后一张展示 2010 年设置的图片。

维基媒体基金会网络 2010

答案2

就软件而言 - haproxy 是一款优秀的、经过验证的解决方案。

您可以通过多种方式实现正确的负载平衡。

IP 哈希平衡

根据您的源 IP,将使用源 IP 的哈希值计算目标服务器。因此,来自一个 IP 的所有请求将始终到达同一服务器(除非该服务器已关闭)。

我在不能使用 JWT 的项目中使用了此选项。

Cookie 标记

Web 服务器或负载均衡器返回一个额外的 cookie,标记该服务器,该服务器应该处理来自该用户的其他请求。

在服务器之间共享 cookie

我个人会避免使用此选项,因为它会给您的基础设施带来复杂性,并且您必须关心会话存储。

JSON Web 令牌(cookie 中的会话)

您根本不关心会话,因为它存储在 cookie 中。因此,无论是服务器 A 还是 B,您的服务器都无法处理每个请求。对我来说 - 这是大部分 Web 应用程序的最佳解决方案,但是!这里有一个巨大的警告,因为您必须了解自己在做什么。


如果之前的问题的答案是肯定的,那么我该如何解决,以便负载均衡器不会处于客户端 - 后端服务器的中间?

这也是可能的,您只需使用子域名即可。如果您的用户访问 www,它会决定将用户重定向到 s1.domain.tld 还是 s2.domain.tld,...

我以前见过几次这种解决方案,但现代应用程序不使用它。例如,它会为索引机器人创建重复页面。

您还可以摆脱平衡器并在网络级别使用 ECMP,但配置起来相当复杂。我个人会继续使用负载平衡器。

相关内容