当前位置:首页 > 天道酬勤 > 正文内容

负载均衡怎么做(活在虚拟的网络世界)

张世龙2021年12月21日 11:45天道酬勤1090

编译来源: https://开放资源.com/article/18/10 /互联网缩放负载平衡

作者: ddmb Nolan

译者: BeliteX

用于平衡网络流量的常用技术。 好处和坏处正在权衡中。

大型多站点互联网系统,如内容分发网络(CDN )和云服务提供商,可以通过多种方式平衡访问流量。 本文介绍了常见的流量均衡设计,包括技术手段、优缺点的权衡。

早期的云计算服务提供商提供单个客户端Web服务器,分配IP地址,以易于读取的域名配置DNS记录指向该IP地址,将IP地址指定为边界网关协议(bggi BGP是不同网络之间交换路由信息的标准方法。

虽然本身不是负载均衡,但是可以在冗余的多个网络路径上分布通信量,并且可以利用网络技术绕过不能使用通信量的网络,从而提高可用性(还会发生非对称路由现象)

简单的 DNS 负载均衡

随着客户流量的增加,老板希望服务具有高可用性。 你连接到第二台web服务器,它有自己的公共网络IP地址。 然后,你在更新DNS记录,将用户流量引导到两台服务器上。 内心希望他们能平衡地提供服务。 在其中一个服务器发生故障之前,这样做没有问题。 如果可以立即监视故障,则可以更新DNS配置,手动更新或通过软件更新,以删除在故障机器上解析的记录。

不幸的是,由于DNS记录是缓存的,因此在客户端缓存及其所依赖的DNS服务器上的缓存失效之前,大约有一半的请求将失败。 由于DNS记录的生命周期(TTL )超过几分钟,因此此方法对系统的可用性有很大影响。

更糟的是,一些客户端完全忽略TTL,因此一些请求将继续被引导到故障计算机。 设置短TTL也不是好方法。 这意味着DNS服务的负载很高,访问延迟很长。 这是因为客户端要进行更多的DNS查询。 如果由于某种原因DNS服务变得不可用,则设置更短的TTL会导致对服务的访问速度更快,因为没有太多客户端拥有站点的IP地址缓存。

增加网络负载均衡

要解决上述问题,可以添加相互冗余的4层(L4 )网络负载均衡装置,配置相同的虚拟IP地址) VIP )。 均衡器可以是硬的,也可以是像HAProxy那样的软件。 的DNS记录指的是VIP,不承担负载均衡的功能。

四层负载平衡器可以平衡用户和两台web服务的连接

四层均衡器将网络流量均匀地引导到后端服务器。 这通常基于散列五组IP包,包括源地址、源端口、目标地址、目标端口和协议(如TCP和UDP )。 该方法快速高效,还保留了TCP的基本属性。 此外,均衡器不需要维持各个连接的状态。 (详情请阅读谷歌发表的Maglev论文。 这篇论文详细介绍了四层软件负载平衡器的实现。 )

四层均衡器可以对后端服务进行体检,只将流量分发到健康机器上。 与使用DNS进行负载平衡不同,当一个后端web服务发生故障时,可以立即将通信重新分发到其他计算机。 虽然故障机器的现有连接将被重置。

在后端服务器的能力不同的情况下,4层均衡器可以基于权重来分发业务。 这为运输业者提供了强大的能力和灵活性,硬件成本比较小。

扩展到多站点

系统的规模持续增加。 客户希望在数据中心发生故障时继续使用服务。 因此,即使建立新的数据中心,独立部署另一台服务器和四层负载平衡群集,也将使用相同的VIP。 DNS的设定不变。

两个站点的边缘吉鲁器都声明自己的地址空间,包括VIP地址。 对该VIP的请求可能会到达任何站点,这取决于用户和系统之间的网络如何连接以及每个网络的路由策略如何配置。 这就是全部广播。 在大多数情况下,这种机制会奏效。 如果一个站点发生问题,如果BGP停止声明VIP地址,客户的请求将立即移动到另一个站点。

多个网站使用组播提供服务

center">

这种设置有一些问题。最大的问题是,不能控制请求流向哪个站点,或者限制某个站点的流量。也没有一个明确的方式把用户的请求转到距离他最近的站点(为了降低网络延迟),不过,网络协议和路由选路配置在大部分情况下应该能把用户请求路由到最近的站点。

控制多站点系统中的入站请求

为了维持稳定性,需要能够控制每个站点的流量大小。要实现这种控制,可以给每个站点分配不同的 VIP 地址,然后用简单的或者有权重的 DNS 轮询 来做负载均衡。

多站点提供服务,每个站点使用一个主 VIP,另外一个站点作为备份。基于能感知地理位置的 DNS。

现在有两个问题。

第一、使用 DNS 均衡意味着会有被缓存的记录,如果你要快速重定向流量的话就麻烦了。

第二、用户每次做新的 DNS 查询,都可能连上任意一个站点,可能不是距离最近的。如果你的服务运行在分布广泛的很多站点上,用户会感受到响应时间有明显的变化,取决于用户和提供服务的站点之间有多大的网络延迟。

让每个站点都配置上其他所有站点的 VIP 地址,并宣告出去(因此也会包含故障的站点),这样可以解决第一个问题。有一些网络上的小技巧,比如备份站点宣告路由时,不像主站点使用那么具体的目的地址,这样可以保证每个 VIP 的主站点只要可用就会优先提供服务。这是通过 BGP 来实现的,所以我们应该可以看到,流量在 BGP 更新后的一两分钟内就开始转移了。

即使离用户最近的站点是健康而且有服务能力的,但是用户真正访问到的却不一定是这个站点,这个问题还没有很好的解决方案。很多大型的互联网服务利用 DNS 给不同地域的用户返回不同的解析结果,也能有一定的效果。不过,因为网络地址的结构和地理位置无关,一个地址段也可能会改变所在位置(例如,当一个公司重新规划网络时),而且很多用户可能使用了同一个 DNS 缓存服务器。所以这种方案有一定的复杂度,而且容易出错。

增加七层负载均衡

又过了一段时间,你的客户开始要更多的高级功能。

虽然四层负载均衡可以高效地在多个 web 服务器之间分发流量,但是它们只针对源地址、目标地址、协议和端口来操作,请求的内容是什么就不得而知了,所以很多高级功能在四层负载均衡上实现不了。而七层(L7)负载均衡知道请求的内容和结构,所以能做更多的事情。

七层负载均衡可以实现缓存、限速、错误注入,做负载均衡时可以感知到请求的代价(有些请求需要服务器花更多的时间去处理)。

七层负载均衡还可以基于请求的属性(比如 HTTP cookies)来分发流量,可以终结 SSL 连接,还可以帮助防御应用层的拒绝服务(DoS)攻击。规模大的 L7 负载均衡的缺点是成本 —— 处理请求需要更多的计算,而且每个活跃的请求都占用一些系统资源。在一个或者多个 L7 均衡器前面运行 L4 均衡器集群,对扩展规模有帮助。

结论

负载均衡是一个复杂的难题。除了上面说过的策略,还有不同的 负载均衡算法 ,用来实现负载均衡器的高可用技术、客户端负载均衡技术,以及最近兴起的服务网络等等。

核心的负载均衡模式随着云计算的发展而不断发展,而且,随着大型 web 服务商致力于让负载均衡技术更可控和更灵活,这项技术会持续发展下去。


via: https://opensource.com/article/18/10/internet-scale-load-balancing

作者: ddmb Nolan 选题: lujun9972 译者: BeliteX 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击“了解更多”可访问文内链接

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26293.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。