优化ELB流量分配以实现高可用性
优化ELB流量分配以实现高可用性
在现代云架构中,负载均衡是实现高可用性和可扩展性的关键。亚马逊云科技提供弹性负载均衡(ELB)服务,智能地将传入流量分配到多个目标,如Amazon EC2实例或容器。本文将深入探讨ELB的高级流量分配算法,并研究请求是如何路由到目标资源的。从实例健康检查和路由策略到客户端缓存,我们将探索影响应用程序性能的各种因素。您将获得配置最佳实践的见解,并了解如何通过优化流量分配来提高服务可用性和缓解瓶颈。
演讲精华
在通过互联网交付应用程序的领域中,确保高可用性和优化流量分布是至关重要的考虑因素。Elastic Load Balancing (ELB) 的客户成功主管John Zobrist和解决方案架构师Enrico Laguerre通过亚马逊云科技产品的视角,深入探讨了实现这些目标的复杂性。
这一旅程从探索客户端如何通过互联网(可能是公共互联网或私有网络)与服务建立连接开始。Zobrist强调亚马逊云科技支持IPv4和IPv6协议,使用亚马逊云科技负载均衡器的一个优势是,客户端无需在整个堆栈中升级到IPv6即可从前端受益。讨论涵盖了TCP和UDP协议,以及HTTP请求流量,Zobrist解释了不同的负载均衡器如何为这些协议路由流量。
通常,客户端位于网络上,通过执行网络地址转换(NAT)的网关访问互联网,并被分配一个公共IP地址。在亚马逊云科技中创建Elastic Load Balancer时,会生成一个唯一的DNS名称,亚马逊云科技的域名系统(DNS)服务Route 53会维护分配给负载均衡器的健康IP地址的最新列表。客户端解析此DNS名称,并从列表中选择一个IP地址(通常是第一个)来发起连接。Zobrist强调,当为多个客户端返回相同DNS名称的DNS查询时,Route 53会尝试以不同的顺序返回IP地址,以影响跨所有可用IPs的更均衡的决策。
Amazon Global Accelerator在这种情况下成为一个强大的工具,将流量路由到最近的亚马逊云科技边缘位置,然后通过亚马逊云科技骨干网络到托管应用程序的区域。这种方法不仅可以最小化延迟,而且还通过对负载均衡器IP地址执行健康检查并智能地仅将流量路由到健康的端点,从而提高了可用性。Zobrist强调,对于一个区域或一个区域的简单设置,客户端将连接到最近的边缘位置,从那里就是亚马逊云科技骨干网络一直到应用程序所在的最近区域。但是,Global Accelerator提供了将流量同时路由到多个区域的选项,并为每个区域执行健康检查,以确保只将流量发送到健康的IPs。
在单个区域内,Zobrist解释说,在幕后,Application Load Balancer(ALB)有一个完全合格的域名(FQDN),通常每个可用区域显示一个IP地址。但是,ALB可以根据其增长情况在每个区域扩展到多个IPs,最多可达100个IPs,与产品类型无关。Route 53和Global Accelerator分别对这些IPs进行独立的健康检查和单独瞄准,如果某个IP变为不健康,就可以进行故障转移。
Laguerre接手阐述了Application Load Balancer(ALB)中流量分布的三个决策层级。首先,客户端选择要发送流量的ELB IP地址,这个决策受DNS解析过程的影响。Laguerre强调,在向ELB发送流量时,配置客户端解析DNS并尊重与DNS条目相关的生存时间(TTL)非常重要。这对Application Load Balancer至关重要,因为IPs会随时间动态变化,但对于Network Load Balancer(NLB)也很重要,因为在某些情况下,NLB控制平面可以从DNS名称中删除一个IP。
Laguerre建议在TCP连接意外关闭时配置客户端刷新DNS,在重新连接时使用指数退避和抖动以避免压垮特定的ELB IP,如果遇到特定IP的问题,尝试列表中的另一个IP地址。这是因为即使ELB控制平面系统检测到IP不健康并自动替换它,但这个过程需要时间,通常约30秒。
第二个决策层级围绕着基于监听器规则的目标组选择。对于Application Load Balancer,客户端可以在同一监听器规则后面配置多个目标组,并利用监听器规则来确定适当的目标组。Laguerre解释说,当HTTP请求到达具有关联规则的ALB监听器时,这些规则会按照分配的优先级顺序进行评估。一旦确定与特定规则匹配,就会选择关联的目标组。如果没有规则匹配,则默认规则会处理这种情况。
Listener规则有关联的条件,ALB会对其进行评估,例如请求中包含的路径、HTTP方法、HTTP头、Cookie、查询参数,甚至客户端的IP地址。这种丰富的选项集提供了很大的灵活性,允许ALB简化架构,无论应用程序使用何种特定技术,都可以直接将流量负载均衡到后面的目标。
Laguerre强调了一个最佳实践,适用于为多个域提供流量服务的多个负载均衡器的客户端。他们可以通过利用基于主机头的规则将这些负载均衡器聚合到单个ALB中。由于客户端请求中的主机头包含客户端想要访问的域,客户端可以在同一个监听器上配置多个证书并将TLS卸载到负载均衡器。然后,ALB将根据TLS握手中包含的服务器名称指示(SNI)信息(其中包含客户端试图访问的主机名)向客户端呈现正确的证书。这种方法通过只管理一个负载均衡器来减少操作开销,并优化成本。
但是,Laguerre警告说,客户端应该注意爆炸半径,因为影响单个负载均衡器将影响它所服务的所有域,需要在爆炸半径和这种架构的好处之间做出平衡决策。
Laguerre分享的另一个最佳实践是优先考虑监听器上最常用的规则。这可以最小化对每个接收到的请求进行的评估次数,从而降低计算成本并可能最小化延迟。此外,对于面向互联网的负载均衡器,Laguerre建议通过默认规则处理和拒绝来自机器人或入侵者的随机请求。这允许ALB扩大规模并吸收来自这些随机请求的增加的流量,从而保护后面的目标。
第三个决策层级围绕着在所选目标组内的目标选择。Laguerre探讨了ALB可用的各种路由算法,每种算法都针对特定的用例。循环算法按顺序在健康目标之间分发流量,适用于请求复杂性相似且目标能力同质的场景。最少未完成请求算法优先考虑未完成请求最少的目标,是目标实例能力不同时的理想选择。
Laguerre通过负载测试展示了最少未完成请求算法的优势,并将其与循环算法进行了比较。使用循环算法时,更容易压垮能力最小的目标,从而导致5xx错误。但是,使用最少未完成请求算法,ALB更倾向于将请求路由到更强大的目标,从而减少了这些错误的发生并提高了可用性。
带异常缓解的加权随机算法引入了一种智能的流量分布方法。通过持续监控目标响应和TCP/HTTP错误,ALB可以识别异常目标并将流量从它们那里引导开,一旦它们恢复,就逐步重新引入它们。这一功能增强了可用性和弹性,特别是在目标可能遇到瞬时问题的情况下。Laguerre通过一个负载测试展示了这种算法的有效性,其中一个目标被有意取消服务。虽然循环算法继续将流量路由到不健康的目标,从而导致5xx错误,但加权随机算法很快就将流量从异常目标引导开,减少了错误,并在服务重新启动后逐步重新引入该目标。
对于Network Load Balancer(NLB),Laguerre阐明了目标选择过程,该过程基于从TCP/IP头计算出的流哈希值。NLB维护一个分布式数据库来跟踪流与所选目标之间的关联,从而确保在连接期间一致地路由。最近引入的TCP监听器空闲超时自定义功能允许客户端为空闲超时提交60秒到6000秒之间的值,解决了社区长期以来的一个请求。
当使用带有UDP监听器的NLB时,使用相同的流哈希算法进行目标选择,但使用5元组(源IP、源端口、目标IP、目标端口和协议)而不是6元组来计算TCP的流哈希值。Laguerre强调,NLB应用了UDP流的概念,当新的UDP流量到达时,NLB会选择一个目标并将流量转发到该目标。如果目标在30秒内回复,NLB会在分布式数据库中跟踪标识UDP流的5元组与所选目标之间的关联,并一致地将属于同一UDP流的后续流量路由到同一目标。Laguerre强调,客户端使用多个源端口用于多个UDP流非常重要,以便在目标组中实现跨目标的均匀分布。
在网关负载均衡器的领域中,对于双向流量,目标选择是一致执行的,以支持后端防火墙设备强制执行的有状态规则。当与TCP流量一起使用时,将采用相同的流哈希算法,使用6元组计算流哈希。然而,TCP连接与所选目标之间的关联将扩展到从服务器到客户端生成的返回流量,确保对双向流量做出一致的决策。
接下来,Zobrist揭开了备受期待的LBU容量预留功能,这是一个游戏规则改变者,适用于计划事件、流量迁移以及可预测扩展至关重要的场景。该功能使客户能够为其负载均衡器预留最小容量,确保无缝处理预期的流量激增或迁移。Zobrist通过用例演示,强调了诸如重大销售活动、周期性流量模式和间歇性尖峰流量等场景,在这些场景中,主动容量预留可以减轻容量不足的风险。
对于流量迁移,Zobrist举例说明,当流量从另一个源迁移到ALB或NLB时,流量激增超过了当前容量,而扩展尚未跟上。通过提前预留容量,客户可以确保有足够的资源无缝处理迁移。
另一个用例是计划活动,如重大销售或促销活动,客户知道在特定时间会经历流量激增。Zobrist建议在活动开始前一两个小时设置容量预留,让负载均衡器有时间扩展,并确保一切就绪。
“周一问题”是另一个可以从容量预留中获益的场景。Zobrist解释说,由于ALB的缩减延迟为12小时,流量通常在周末缩减,但在周一工作日开始时缺乏足够的容量。在市场开始前一小时预留容量可以缓解这个问题。
对于间歇性尖峰流量,Zobrist承认用例较为棘手,建议与亚马逊云科技支持部门联系,寻求针对具体场景的指导,因为该功能持续分配预留容量可能不太适合间歇性模式。
为了确定所需容量,Zobrist介绍了“峰值LCU”指标,它代表了负载均衡器对给定工作负载所需容量的估计。该指标的一分钟总和与一小时计费相关,因此如果客户在一小时内使用1000个LCU,一分钟总和可能约为1000。客户还可以使用亚马逊云科技保留超过一年半的一小时指标来计算所需容量。通过取一小时指标的最大值并乘以样本数(节点数量),客户可以根据历史数据估算所需容量。或者,客户可以执行负载测试来确定所需容量。
在进行LBU容量预留时,客户确定所需容量并通过API提交。亚马逊云科技将预留容量,客户可以使用describe API检查预留何时完成。一旦发生事件或流量高峰,客户可以安全地移除预留,亚马逊云科技将扩展到过去42小时内观察到的最高利用率点,然后对于ALB,将在不少于12小时的时间内谨慎地有机缩减,对于NLB,缩减速度将更快。
对于应用程序负载均衡器(ALB),有机扩展涉及预留EC2实例、分配IP,并让Route 53健康检查和在DNS中返回健康IP。扩展过程是渐进的,如果客户端不更新DNS,节点将在关闭前被排空连接5分钟。对于网络负载均衡器(NLB),有机扩展是区域性的,这意味着一个区域的容量或利用率不会驱动其他区域的扩展。设置LBU容量预留时,预留容量将在为NLB配置的所有区域中划分。
在整个会议过程中,Zobrist和Laguerre强调遵守最佳实践的重要性,例如配置客户端尊重DNS生存时间(TTL)值、为UDP流量分散源端口,以及利用诸如加权目标组的高级功能进行蓝绿部署。
总之,本次会议强调了亚马逊云科技致力于提供健壮且高度可用的解决方案,以通过互联网交付应用程序。通过利用弹性负载均衡、全球加速器和新推出的LBU容量预留功能的强大功能,客户可以优化流量分布、确保高可用性,并无缝处理计划事件或流量迁移,从而提升最终用户体验和业务连续性。
下面是一些演讲现场的精彩瞬间:
亚马逊云科技解释了当网络负载均衡器(NLB)的目标组为空时的行为,以及默认情况下禁用跨区域负载均衡的潜在风险。
在监听器上优先使用最常用的规则,以最小化评估次数并减少延迟,从而获得最佳性能。
演讲者强调在面向互联网的负载均衡器上配置默认规则的重要性,以处理和拒绝随机请求,保护负载均衡器后面的目标免受潜在流量峰值的影响。
亚马逊云科技应用程序负载均衡器的加权目标组功能支持无缝蓝绿部署和控制流量路由,以测试新的应用程序版本。
“最少未完成请求”负载均衡算法优先考虑具有更强处理能力的目标,确保在目标组中具有不同EC2大小的实例之间高效分配请求。
亚马逊云科技建议与亚马逊云科技支持团队联系,以获得处理间歇性峰值流量的指导,因为除了弹性负载均衡服务外,可能还需要诸如分片等策略。
总结
在这个富有洞见的演讲中,演讲者深入探讨了在亚马逊云科技上优化弹性负载均衡(ELB)流量分布以实现高可用性的复杂性。他们首先强调了通过互联网交付应用程序的重要性,以及负载均衡器在确保流量路由到健康和足够扩展的端点方面的作用。
第一个关键点是利用全球加速器将客户端流量尽快路由到亚马逊云科技骨干网络,从而最大限度地减少延迟并优化性能。他们解释了全球加速器如何跨多个区域分发流量,持续监控健康检查并绕过不健康的区域或地区。
其次,他们探讨了可能导致ELB IP或可用区域从DNS中失效的各种因素,如目标组健康检查、区域转移和异常检测系统。他们强调了使用应用程序恢复控制器(ARC)及其新的自动转移功能,根据应用程序指标配置阈值和自动化故障转移的能力。
第三个关键点深入探讨了ELB内部的流量分布细节,包括客户端选择ELB IP、基于监听器规则的目标组选择以及目标组内的目标选择。他们讨论了配置客户端DNS解析、优先级规则、处理随机请求以及利用加权目标组进行蓝绿部署的最佳实践。
最后,他们介绍了新推出的LCU(负载均衡器容量单元)容量预留功能,该功能允许客户为其ELB预留最小容量。这一功能对于计划事件、流量迁移和可预测流量模式的场景特别有用,可确保顺利扩展并最大限度地减少潜在中断。
总之,演讲者全面概述了优化ELB流量分布的方法,强调利用亚马逊云科技服务(如全球加速器、ARC和新的容量预留功能)来实现高可用性和无缝应用程序交付在互联网上的重要性。