应用程序架构的 Auto Scaling 优势 - Amazon A EC2 uto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

应用程序架构的 Auto Scaling 优势

将 Amazon EC2 Auto Scaling 添加到应用程序架构是一种最大限度利用 Amazon 云的方法。当您使用 Amazon EC2 Auto Scaling 时,您的应用程序将获得以下优势:

  • 提高容错能力。Amazon EC2 Auto Scaling 可以检测到实例何时运行状况不佳并终止实例,然后启动新实例以替换它。您还可以配置 Amazon EC2 Auto Scaling 以使用多个可用区。如果一个可用区变得不可用,则 Amazon EC2 Auto Scaling 可以在另一个可用区中启动实例以进行弥补。

  • 提高可用性。Amazon EC2 Auto Scaling 有助于确保应用程序始终拥有合适的容量以满足当前流量需求。

  • 加强成本管理。Amazon EC2 Auto Scaling 可以根据需要动态地增加或降低容量。由于您仅为使用的 EC2 实例付费,您可以在需要的时候启动实例,并在不需要的时候终止实例以节约成本。

示例:覆盖可变需求

为了说明 Amazon EC2 Auto Scaling 的一些优势,请设想一个在 Amazon 上运行的基本 Web 应用程序。此应用程序允许员工搜索可用于开会的会议室。每周开始和结束时段,此应用程序的使用率最低。每周中期,有更多的员工安排会议,因此对此应用程序的需求会显著提高。

下图显示此应用程序的容量在一周中的使用情况。

对应用程序的容量需求的示例。

按照传统做法,可通过两种方式为这些容量变化做好规划。第一种选择是添加足够多的服务器,以便应用程序始终具有足够的容量来满足需求。但是,这种做法的缺点是应用程序在某些天并不需要这么多容量。额外容量闲置不用,并且实际上提高了使应用程序保持运行的成本。

演示购买超过需求的容量可能导致欠缺成本效率的示例。

第二种选择是采用处理应用程序平均需求所需的容量。这种做法成本更低,因为不用购买仅仅偶尔使用的设备。然而,这样做的风险是:当对应用程序的需求超过其容量时,可能造成糟糕的客户体验。

演示购买少于需求的容量可能导致糟糕客户体验的示例。

通过向此应用程序添加 Amazon EC2 Auto Scaling,您就有了第三种选择。您可以仅在需要时才向应用程序添加新实例,并在不再需要这些实例时终止它们。由于 Amazon EC2 Auto Scaling 使用 EC2 实例,因此您只需在使用时为使用的实例付费。您现在有了一个具有成本效益的架构,可在尽量减少支出的同时提供最佳客户体验。

一个演示 Amazon EC2 Auto Scaling 如何根据需要调整容量的示例。

示例:Web 应用程序架构

在常见的 Web 应用程序场景中,您同时运行应用程序的多个副本来满足客户流量。将在相同的 EC2 实例(云服务器)上托管应用程序的多个副本,每个实例都可以处理客户请求。

Amazon EC2 Auto Scaling 代表您管理 EC2 实例的启动和终止。您定义一组条件(如 Amazon CloudWatch 警报),用于确定 Auto Scaling 组何时启动或终止 EC2 实例。将 Auto Scaling 组添加到网络架构有助于提高应用程序的可用性和容错能力。

具有 Auto Scaling 组的基本三层架构。

您可以根据需要创建任意数量的 Auto Scaling 组。例如,您可以为每个层创建一个 Auto Scaling 组。

要在您的 Auto Scaling 组的各实例之间分配流量,可在您的架构中引入一个负载均衡器。有关更多信息,请参阅 Elastic Load Balancing

示例:在可用区之间分配实例

可用区是给定 Amazon Web Services 区域中相互隔离的站点。每个区域都有多个可用区,旨在为该区域提供高可用性。可用区相互独立,因此,设计为使用多个可用区的应用程序可以提高应用程序的可用性。有关更多信息,请参阅 Amazon EC2 Auto Scaling 中的恢复功能

可用区由 Amazon Web Services 区域代码加字母标识符(例如,us-east-1a)来标识。如果您创建了自己的 VPC 和子网而不是使用默认 VPC,则可以在每个可用区中定义一个或多个子网。每个子网都必须完全位于一个可用区之内,不能跨越多个可用区。有关更多信息,请参阅《Amazon VPC 用户指南》中的 Amazon VPC 的工作原理

在创建自动扩缩组时,必须选择要在其中部署该自动扩缩组的 VPC 和子网。Amazon EC2 Auto Scaling 会在您选择的子网中创建您的实例。这样,每个实例都与 Amazon EC2 Auto Scaling 选择的特定可用区相关联。当实例启动时,Amazon EC2 Auto Scaling 会尝试在可用区之间均匀分配这些实例,以实现高可用性和可靠性。

下图概括演示了跨三个可用区部署的多层级架构。

跨三个可用区的典型自动扩缩组。

实例分配

Amazon EC2 Auto Scaling 会自动尝试在每个已启用的可用区中维持相同数量的实例。Amazon EC2 Auto Scaling 通过尝试在实例最少的可用区中启动新实例来执行此操作。如果为该可用区选择了有多个子网,则 Amazon EC2 Auto Scaling 将从该可用区中随机选择一个子网。但是,如果尝试失败,Amazon EC2 Auto Scaling 将尝试在另一可用区中启动实例,直到成功。

如果某个可用区运行状况不正常或不可用,实例在可用区之间的分布可能不再均匀。在该可用区恢复后,Amazon EC2 Auto Scaling 会自动重新平衡自动扩缩组。为此,系统将会在具有最少实例的已启用可用区中启动实例,并在其他可用区中终止实例。

再平衡活动

再平衡活动分为两类:可用区再平衡和容量再平衡。

可用区再平衡

在某些操作发生后,Auto Scaling 组可能会在不同可用区之间变得不平衡。Amazon EC2 Auto Scaling 将通过再平衡可用区来进行补偿。以下操作可能导致重新平衡活动:

  • 您更改了与您的自动扩缩组关联的可用区。

  • 您显式终止或分离了实例,或将实例设为待机状态,这时该组将会失衡。

  • 之前没有足够容量的某个可用区已经恢复,现在具有额外的容量。

  • 之前 Spot 价格超出您最高价的可用区现在的 Spot 价格低于您的最高价。

在重新平衡时,Amazon EC2 Auto Scaling 会首先启动新实例,然后再终止旧实例。这样可确保重新平衡不会影响应用程序的性能或可用性。

由于 Amazon EC2 Auto Scaling 在终止旧实例之前会尝试启动新实例,因此达到或接近指定的最大容量可能会阻碍或完全停止再平衡活动。

为避免此问题,在再平衡活动期间,系统可以暂时超出组的指定最大容量。预设情况下,系统可以执行 10% 或一个实例的裕度,以两者中最大的为准。仅在该组达到或接近最大容量并且需要重新平衡时,才会提供边际。该超出状态仅持续重新平衡该组所需的时间(通常为几分钟)。

或者,您可以使用实例维护策略为自动扩缩组设定阈值,以便该组只能在该阈值范围内增加或减少容量。这样,您就可以控制该组自我重新平衡的速度。有关更多信息,请参阅 实例维护策略

容量再平衡

使用竞价型实例时,您可以为您的自动扩缩组开启容量再平衡。开启此功能后,每当 Amazon EC2 报告某个竞价型实例的中断风险较高时,Amazon EC2 Auto Scaling 将会尝试启动一个竞价型实例。启动新实例后,它会终止旧实例。有关更多信息,请参阅 使用容量重新平衡来处理 Amazon EC2 竞价型实例中断