使用多个AWS账户时如何维护可用性
在大规模构建现代,高性能的应用程序时,重要的是要确保各个应用程序实例以各种方式分布在多个数据中心中,这样,如果任何给定的数据中心脱机,则该应用程序可以相对正常地继续运行。 。 这是行业范围内的最佳实践,并且是在您的应用程序中进行架构设计以使其对数据中心问题足够有弹性的重要特征。
当您在云中构建应用程序时,会发生相同的原理。 除非在构建基于云的应用程序时,否则通常不了解特定服务器或云资源位于哪个数据中心。 这是使云具有其价值的抽象的一部分。 但是,由于无法了解应用程序在哪个数据中心中运行,因此很难在应用程序中建立多数据中心弹性。 毕竟,如果您不知道应用程序在哪个数据中心中运行,那么如何确保它在多个数据中心中运行?
幸运的是,AWS之类的云提供商可以解决此问题。 AWS创建了数据中心的云抽象,使您可以在此级别的弹性上进行构建,而无需暴露数据中心位置的详细信息。 抽象是可用性区域。
AWS可用区
AWS可用性区域是一组隔离的云资源,可用于在您的应用程序中指定特定级别的隔离。 单个可用性区域内的资源可能在物理上或实际上彼此接近,以至于它们可以彼此依赖并彼此共享子组件。 例如,位于同一可用区中的两台EC2服务器可能位于同一数据中心,同一机架中,甚至在同一物理服务器上。
但是,保证将位于不同可用性区域中的云资源分离到不同的数据中心中。 它们不能位于同一数据中心,不能位于同一机架,也不能使用相同的物理服务器。 它们是不同的,彼此独立。
但是,在单个区域内,可用区域通过非常高的速度,低延迟的网络连接相互连接,因此多个可用区域中的资源可以根据需要以协调的方式一起工作。
因此,解决了弹性问题。 在基于AWS云的应用程序中,要具有与基于多个冗余物理数据中心的应用程序相同的弹性级别,可以构建应用程序以驻留在多个可用性区域中。 如果构建应用程序,以便将应用程序实例分布在多个可用性区域中,则可以将自己与硬件故障(例如服务器故障,机架故障甚至整个数据中心故障)隔离开来。 使用多个可用区可让您建立应用程序的弹性。
可用区作为数据中心
松散地,可用区可以被认为是数据中心。 在第一近似水平上,这是一个大致合理的假设。 但这种假设可能会有危险。 首先,可用性区域与数据中心之间没有一对一的映射。 创建AWS账户时,您的可用区名称会以动态方式映射到各个数据中心。 这意味着一个AWS账户可能有一个名为us-east-1a的可用区映射到数据中心#4,而另一个账户可能有一个相同的可用区映射到数据中心#2。
更糟糕的是,给定的数据中心可能会映射到不同帐户中的不同可用性区域。 例如,帐户#1中的数据中心#4可以用于可用性区域us-east-1a,但是帐户#2中的相同数据中心可以用于可用性区域us-east-1b。
您可以通过在资源访问管理器(RAM)中的AWS控制台中查看如何将可用区映射到给定帐户中的特定数据中心。 在控制台中,在“服务”菜单下选择“资源访问管理器”。 在右下侧,您将看到如下所示的显示:
这显示了可用区名称到AZ ID的映射。 AZ ID是可以有效用作数据中心标识符的唯一标识符。 它显示了您当前帐户中每个可用区到其关联数据中心的AZ ID的映射。 显示的是您当前选择的区域的映射,但是您只需切换区域即可显示帐户中任何区域的映射。
在上面的示例中,对于此帐户,可用性区域us-west-2b映射到AZ ID为usw2-az1的数据中心。 在另一个帐户中,将存在不同的映射。
加密AWS状态消息
曾经想知道为什么当AWS在其状态页面上宣布问题时,他们经常说该问题“影响给定区域中的一个或多个可用性区域”吗? 他们从不说哪个可用区! 其原因是由于此映射。 当他们的站点上存在问题时,它就存在于一个或多个数据中心中。 与这些数据中心关联的实际可用区名称可能因帐户而异。 因此,在广泛共享的状态消息上,他们不知道哪个给定用户会影响哪个可用性区域。 这就是导致消息更加隐秘的原因。
为什么AZ ID映射很重要
通常,此映射从您的视图中隐藏,并且由AWS透明处理。 在大多数情况下,这是合理且可以接受的。 但是,当您的应用程序使用多个AWS账户时,您可能会遇到问题。 由于可用区名称是按每个帐户随机分配给数据中心的,因此这意味着不同帐户中的给定可用区可以映射到不同的数据中心。
现在,这似乎还不错。 但这也意味着两个不同帐户中的两个不同的可用区名称都可以映射到同一数据中心! 出于可用性目的,这可能是个问题。
这意味着,如果您使用多个帐户,则不能再假定两个不同的可用区位于不同的数据中心。 这使得难以实施前面讨论的多数据中心最佳实践。
多个AWS账户的解决方案
如果您使用多个帐户,并且要保证各个帐户之间数据中心的唯一性,则不能使用可用性区域名称。 那么,如何确保您的应用程序出于弹性目的而驻留在独立的数据中心中?
答案是不要将可用性区域用作执行数据中心独立性的方法。 相反,您应该使用AZ ID。 如果不同帐户中的两个可用性区域具有不同的可用区ID,则可以确保这两个可用性区域位于不同的数据中心中。 使用AZ ID(而不是可用区域名称)是一种安全的方法,可确保您的应用程序位于多个帐户的不同数据中心中。
为了确保可用性,确保您的应用程序有效利用多个数据中心以实现冗余非常重要。 为了确保跨多个AWS账户的大型应用程序的数据中心独立性,您不能将可用性区域名称用作独立性的验证检查。 而是使用AZ ID。 否则,可能会导致设计的应用程序具有意外的和不希望的内部基础结构依赖性,从而可能会对应用程序的可用性产生负面影响。
Lee Atchison是New Relic的云架构高级总监。 在过去的七年中,他帮助设计和构建了一个基于服务的可靠产品架构,该架构从初创企业到高流量的公共企业。 Lee拥有32年的行业经验,其中7年是Amazon.com的高级经理。 在亚马逊,他领导创建了公司的第一个软件下载商店,创建了AWS Elastic Beanstalk,并管理了亚马逊零售平台到新的基于服务的架构的迁移。 他是 O'Reilly Media于2016年出版的《 规模化建筑 》一书的 作者 。
-
新技术论坛提供了一个以前所未有的深度和广度探索和讨论新兴企业技术的场所。 选择是主观的,是基于我们对InfoWorld读者认为最重要和最感兴趣的技术的选择。 InfoWorld不接受发布的营销担保,并保留编辑所有贡献内容的权利。 将所有查询发送到 [email protected] 。