使用 AWS Global Accelerator 的最佳部署实践 网络与内容交付
AWS Global Accelerator 部署最佳实践
关键要点
用户期望无论应用在哪个平台上,都会提供稳定、高效的服务,而 AWS Global Accelerator 可帮助满足这一需求。配置 Global Accelerator 时,应避免连接碰撞,以确保网络延迟减少。本文提供了多种情况下避免连接碰撞的建议,以及不同的架构配置选项。用户在使用应用时,通常期望体验稳定、一致且高效的性能,无论应用托管在哪里。然而,公共互联网常常会导致用户在连接时面临波动和拥塞,尤其是当用户地理位置距离应用较远时,这些问题可能成为提供良好在线体验的障碍。
AWS Global Accelerator 是一项网络服务,可以帮助缓解这些挑战。该服务通过将流量引入快速可靠的 AWS 全球网络基础设施,提升面向互联网的应用的可用性和性能。使用 Global Accelerator,您的最终用户可以通过全球静态 IP 地址访问您的应用,基于地理位置和应用健康状态以及配置的路由策略,快速连接 AWS 网络的边缘位置。
为了帮助最大化 Global Accelerator 的性能,请对其进行配置,避免可能导致网络延迟的连接碰撞问题。在本文中,我们将解释导致连接碰撞的场景,并提供可用于避免这些问题及相关延迟的配置和架构。
概述
Global Accelerator 提供全球静态公共 IP 地址,作为访问您的应用端点的固定入口,这些端点是 AWS 资源,例如 应用负载均衡器、网络负载均衡器、亚马逊弹性计算云 实例以及弹性 IP 地址。您可以为大多数作为端点添加到 Global Accelerator 的资源启用客户端 IP 地址保存功能,包括网络负载均衡器。此外,通过安全组增加加速器的支持可以在 亚马逊虚拟私有云 (VPC) 内提高安全性,限制对目标端点的访问。
在部署 Global Accelerator 时,通过配置您的加速器以避免连接碰撞,可以最大化用户的性能体验。连接碰撞是指目标端点看到来自同一客户端 IP 地址的并发连接,且源和目标端口相同。这些碰撞会导致负载均衡器丢弃连接,导致用户的网络延迟。
使用客户端 IP 地址保存功能
在讨论避免连接碰撞的最佳实践之前,了解 Global Accelerator 的客户端 IP 地址保存功能如何工作是有帮助的。当您创建新的加速器时,可以为受支持的端点应用负载均衡器、EC2 实例和具有安全组的网络负载均衡器配置客户端 IP 地址保存功能。Global Accelerator 通过五元组来识别每个连接:源 IP 地址、源端口、目标 IP 地址、目标端口和协议。当客户端 IP 地址保存功能禁用时,五元组中的源 IP 地址会变成 Global Accelerator 的网络地址转换 (NAT) IP 地址。启用客户端 IP 地址保存功能后,源 IP 地址就是真实的客户端 IP 地址。

作为客户,您可以将客户端 IP 地址保存应用于多种用例。例如,您可以满足与客户端 IP 地址相关的安全和合规要求,应用基于 IP 地址或位置的过滤器,收集连接统计信息,或在应用中提供个性化内容。然而,当启用客户端 IP 地址保存时,可能会出现 Global Accelerator 可能将不同的连接视为相同的情况,因为其五元组哈希机制的缘故。
在本文中,我们将定义造成此情况的具体场景,并建议不同的架构选项来避免它们。连接碰撞还可能在启用 NAT 路由的情况下发生,这意味着您可以使用一些方法来防止连接碰撞,而不必禁用客户端 IP 地址保存功能。
关于如何使用客户端 IP 地址保存的更多信息,请参见 Global Accelerator 开发者指南。
连接碰撞场景
客户常使用以下架构之一与 Global Accelerator,这些架构可能会导致连接碰撞,从而造成连接延迟:
闪连加速器免费版使用多个独立的加速器将同一负载均衡器配置为端点在 Global Accelerator 后面配置负载均衡器作为端点,同时也将流量直接通过公共互联网发送到同一负载均衡器配置跨区域流量启用的负载均衡器作为加速器的端点对于每种场景,您可以遵循此处提供的指导,以避免连接碰撞。
使用同一负载均衡器作为多个加速器的端点
为避免连接碰撞,当您使用同一资源作为多个加速器的端点时,可以在 Global Accelerator 中配置端口覆盖。当设置端口覆盖后,您可以通过加速器的监听器使用不同的端口映射,避免与相同后端资源的端口碰撞。在设置了端口映射复盖后,每个加速器会使用不同的目标端口在同一资源上,因此 Global Accelerator 用于哈希的五元组将会不同,从而避免碰撞。
这种机制的工作原理是,默认情况下,加速器根据您创建的监听器中指定的协议和端口范围,将用户流量路由到端点。例如,如果您指定一个加速器监听器接受端口 80 和 443 的 TCP 流量,那么加速器就会自动将流量路由到端点的相同端口上。然而,您可以通过使用端口覆盖重新映射 Global Accelerator 用于路由流量到端点的监听器端口。例如,您可以创建一个端口覆盖,使得监听器在端口 80 和 443 接收用户流量,但加速器将这些流量分别路由至端点的 8080 和 8443 端口。
以下是一个简单的基础设施示例,下面的图图 1展示了这一机制如何在实践中工作。假设您有两个加速器 myTestAcceleratorA 和 myTestAcceleratorB,以及一个应用负载均衡器资源。
图 1:两个加速器配置以覆盖目标端点应用负载均衡器的默认端口映射
为了避免连接碰撞,请为两个加速器的监听器配置端口覆盖,如下图所示。设置 myTestAcceleratorA 的监听器在端口 443 上映射到目标端口 8443,然后将 myTestAcceleratorB 的监听器在端口 443 上映射到目标端口 9443。最后,配置应用负载均衡器端点在端口 8443 和 9443 上监听。
现在,当来自同一用户的单一用户 IP 地址在两个加速器的监听器上的 443 端口到达时,它会在没有连接碰撞的情况下到达目标应用负载均衡器,并具有不同的目标端口号。由于端口覆盖将流量映射到应用负载均衡器的不同端口,因此 Global Accelerator 用于哈希的五元组具有不同的值,而流量仍到达正确的资源。有关如何配置端口覆盖的更多信息,请参阅 避免导致 TCP 连接延迟的连接碰撞。
使资源通过 Global Accelerator 和直接互联网访问
当客户将 Global Accelerator 添加到现有架构时,通常会从转移一小部分流量开始,以测试新配置。例如,您可能会创建一个加速器,然后将一些流量转移到全球静态 IP 地址,以验证一切是否正常工作。然而,在测试阶段,客户端连接可能会通过多个路径直接从公共互联网进入您的应用,包括使用现有架构和通过新加速器的监听器。这可能会导致连接碰撞。
为防止这种情况,请在加速器的监听器上创建端口覆盖,以重新映射默认端口映射。这与您在两个加速器中使用一项资源配置为端点的解决方案类似。与那个场景一样,您将配置进入流量通过端点资源以两个不同的目标端口到达。通过将流量映射到两个不同的目标端口,流量仍然可以到达资源,但 Global Accelerator 为每个流量流创建的五元组哈希不同,因为目标端口不同。不同的五元组哈希可以防止来自直接客户端流量和通过加速器到达流量之间的碰撞。
为了演示这种工作原理,我们可以用另一个常见的设置来说明,如下图图 2显示。
图 2:一个加速器配置的应用负载均衡器端点,同时该应用负载均衡器也可以通过公共互联网访问
在我们的示例中,我们有一个公共应用负载均衡器,已经添加到 Global Accelerator,以提高性能。当应用负载均衡器的默认目标端口被 Global Accelerator 和通过互联网网关到达的流量使用时,流入应用的流量无论是来自 Global Accelerator 还是直接来自公共互联网,都看起来是相同的。为了区分流量并防止同一用户和客户端 IP 地址流量的碰撞,我们配置 Global Accelerator 将目标端口应用负载均衡器的监听器端口从 443 覆盖到 8443。然后,我们将负载均衡器配置为在端口 8443 上监听加速器流量,在端口 443 上监听直接互联网流量。
配置带有跨区域负载均衡的客户端 IP 地址保存
当您为启用了跨区域负载均衡的网络负载均衡器端点在 Global Accelerator 中启用客户端 IP 地址保存功能时,使用加速器访问网络负载均衡器的不同 IP 地址的客户端可能会被路由到同一目标。如果客户端对两个连接使用相同的源端口,则目标将接收到看似重复的连接,这可能导致连接碰撞错误和 TCP 建立新连接的延迟。为防止这种情况,您可以禁用网络负载均衡器的跨区域负载均衡。然后,客户端的连接会被路由到不同的目标,从而避免重复连接和相关的问题。
要了解有关网络负载均衡器和跨区域流量的更多信息,请参见网络负载均衡器的 文档。
最佳实践:以不同路径复制基础设施
作为最佳实践,与其使用端口覆盖来解决连接碰撞问题,不如修改应用架构以防止问题发生。
在考虑通过修改架构来避免或解决连接碰撞时,可以采取不同的方法,具体取决于您的应用及需求。例如,您可能希望探索缩小基础设施规模,或者需要一个能支持持续 A/B 测试的基础设施。或者,您希望在基础设施中创建冗余,以便将来能更轻松地扩展。
考虑以下解决方案,以确定这些减轻方法是否符合您的业务和技术路径。
遇到潜在连接碰撞问题的一种解决办法是复制您的基础设施,然后使用两个加速器将流量导向应用的冗余实例。这不仅解决了连接碰撞问题,还有助于您轻松运行新功能或应用更新的A/B 测试。另一种在将 Global Accelerator 添加到现有架构时缓解连接碰撞的方法是创建一个仅加速器流量可以访问的附加端点。就像之前的场景中您创建两个加速器一样,增加第二个应用负载均衡器来支持客户端流量,但这里使用的是单个加速器。根据应用的不同,您可能会将此附加应用负载均衡器与现有的后端堆栈结合使用。或者,您可能会复制应用堆栈,在迁移期间暂时有两个冗余堆栈,每个堆栈由不同的应用负载均衡器前置。以下图图 3展示了第一条建议,其中您有一个配置有两个加速器和两个应用负载均衡器,每个负载均衡器都指向一个冗余的应用副本。
图 3:配置有两个加速器和两个应用负载均衡器端点,每个负载均衡器都指向冗余的应用副本
总结
本文中,我们识别了使用 Global Accelerator 可能导致连接碰撞的场景,并解释了这些情况为何会发生以及如何减轻这些问题。同时,我们提供了如何使用 Global Accelerator 架构应用以避免连接碰撞的指导。如需开始在您的 AWS 应用中使用 Global Accelerator,请访问我们的 入门 页面。
关于作者
乔纳森伍兹
乔纳森是一名 AWS 小型和中型企业解决方案架构师。他支持小型企业客户利用云服务实现创新,转型,并交付出色的成果。他的工作地点在田纳西州纳什维尔。
乔维吉安诺
乔维吉安诺是一名首席解决方案架构师,帮助媒体和娱乐公司加速其向云解决方案的采用。
标签 AWS Global Accelerator、最佳实践、Global Accelerator、网络
Mixtral
Mixtral8x7B现已在Amazon SageMaker JumpStart上线by Rachna Chadha Karl Albertsen Fabio Nonato de Paula Ashish Khetan Kyle Ulrich 和 Christopher Whitten 发布于2023年12月22日公告 最佳实践 技术指南永久链接评论 分享:今天,我们非常高兴地宣布由Mistral...
如何减少 Amazon Kinesis 视频流的延迟
减少 Amazon Kinesis 视频流延迟的方法 第二部分作者:Dean Colcott,日期:2022年12月21日在这篇关于如何减少 Amazon Kinesis 视频流KVS管理媒体延迟的第二部分中,我将描述如何优化 KVS、媒体生产者和媒体播放器的配置,以达到最佳延迟设置。此外,我还将介绍 Amazon Kinesis 视频流 Web 观看器,并进行一系列实验,以验证在不同条件下可以实...