客户端请求如何与 AWS 区域协同工作?

客户端请求如何与 AWS 区域协同工作?

我正在尝试了解 AWS 区域如何运作。

引导我完成跨 AWS 区域和可用区域托管的 Web 应用程序上的 Web 浏览器 GET 请求。

负载均衡器和单个实例如何适应该请求?

请求如何决定使用哪个区域?

如果 Web 应用程序托管在 AWS 的跨区域,哪个 IP 地址应该是域的 A 记录条目?

答案1

TLDR;在 AWS 中,让应用程序跨越可用区(即彼此靠近的独立数据中心)比跨越区域要容易得多。AWS 对此提供了良好的支持。

更长的故事

AWS 区域几乎完全独立。除了在每个区域运行该应用程序的单独副本外,没有真正简单的自动方法可以在单个应用程序中跨越区域。您通常使用可用区,它们是多个独立的数据中心,这些数据中心彼此靠近,但具有独立的基础设施,通常相隔不到 1 毫秒。除非您明确告知,否则 AWS 永远不会将数据移出区域,这对于可能不希望其数据离开特定国家/地区的企业来说是必要的。一个区域通常有三个可用区,但在某些地区 AWS 实际上拥有更多数据中心,我怀疑有人被指派到这些数据中心来分担负载。

负载均衡器 (ELB) 可轻松分配区域内不同可用区的流量,因此如果一个数据中心发生故障,该区域内的其他数据中心可以轻松接管,包括在需要时创建更多资源,并且您已将其配置为自动扩展。由于可用区彼此非常接近,因此网络延迟方面更容易共享资源。关系数据库服务可以在区域内的不同可用区中保存同步数据库,但不能在区域之间保存,但您可以在另一个区域拥有异步副本。

如果您想跨区域实现负载平衡,主要方法是使用 AWS 的 DNS 产品 Route 53。它可以根据故障转移、地理位置、简单循环以及可能的其他方式实现负载平衡。问题是,如果您需要一个单一的中央数据库,那么它需要位于一个区域。您可以同步,但这会带来风险和延迟。如果您可以将数据存储在每个区域中,并且数据是只读的或很少写入,那么这会容易得多,但您必须自己解决数据库同步问题。无状态应用程序或数据很少更改的应用程序特别容易跨区域传播。

您可以使用 Cloudfront CDN 在 AWS 的众多边缘位置中缓存数据,但数据来源将位于单个区域。这通常是为了提高性能。

区域在灾难恢复场景中的使用比负载平衡要多。您可以相当轻松地在区域之间复制资源(数据、虚拟机映像),并脚本加载​​创建所需的任何其他资源,如队列、数据库等。如果整个区域瘫痪(这种情况很少见,但确实会发生),DNS 运行状况检查会将您的用户引导至另一个区域。

您可能能够设置类似 VPN 的东西,让您的应用程序跨区域,但存在数据库一致性等问题,并且可能没有什么优势。在大多数情况下,可用区足够强大。如果您需要极高的可用性你可以设计你需要的东西,但是要准备好为非常聪明的人才和足够的资源支付费用。

您要求了解如何跨可用区实现应用程序负载平衡。我建议您阅读 AWS 提供的大量文档,包括常见问题解答和产品文档

答案2

您能对“客户端”做出更好的定义吗?您指的是应用程序的客户端还是 Amazon 命令行客户端?

回答我认为你要问的问题:

ELB 将通过区域内不同可用区中的实例来平衡您的请求。例如 eu-west-1a 和 eu-west-1b。这两个区域均位于 eu-west-1(爱尔兰)区域内。

我认为如果您想跨区域实现负载平衡,您将需要一些 DNS 魔法。

没有什么需要经历的,请求进入,到达 EIP,然后连接到您的 ELB。ELB 将该请求传递给您指定使用的任何实例。

相关内容