Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Auto Scaling 的优势

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

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

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

  • 加强成本管理。Auto Scaling 可以按需要动态地增加或降低容量。您只需为使用的 EC2 实例付费,在实际需要的时候启动实例,在不需要的时候终止实例,从而节约成本。

示例:覆盖可变需求

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

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

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

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

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

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

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

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

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

示例:Web 应用程序架构

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

 基本 Auto Scaling 组的示意图。

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

 基本 Auto Scaling 组的示意图。

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

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

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

AWS 资源,如 EC2 实例,置于高度可用的数据中心之内。为了提供额外的扩展性和可靠性,这些数据中心位于不同的物理位置。地区是指大型、分布范围广泛的地理位置。每个区域含有多个不同的位置,被称为可用区,是设计用于隔离其他可用区内故障的位置,可向相同区域中的其他可用区提供低成本、低延迟的网络连接。有关更多信息,请参阅 Amazon Web Services 一般参考 中的区域和终端节点:Auto Scaling

通过使 Auto Scaling 组跨越区域中的多个可用区,Auto Scaling 使您可以利用地理冗余的安全性和可靠性。当一个可用区运行状况不佳或无法使用时,Auto Scaling 将在不受影响的可用区中启动新实例。当运行状况不佳的可用区恢复运行状况时,Auto Scaling 会自动在所有指定的可用区中重新均匀分配应用程序实例。

Auto Scaling 组可以包含来自同一区域的一个或多个可用区的 EC2 实例。但是,Auto Scaling 组不能跨多个区域。

对于 VPC 中的 Auto Scaling 组,在子网中启动 EC2 实例。在您创建或更新 Auto Scaling 组时,要为您的 EC2 实例选择子网。您可为每个可用区选择一个或多个子网。有关更多信息,请参阅 在 VPC 中启动 Auto Scaling 实例

实例分配

Auto Scaling 尝试在为您的 Auto Scaling 组启用的可用区之间均匀分配实例。Auto Scaling 通过尝试在实例最少的可用区中启动新实例来执行此操作。但是,如果尝试失败,Auto Scaling 将尝试在另一可用区中启动实例,直到成功。对于 VPC 中的 Auto Scaling 组,如果可用区内有多个子网,Auto Scaling 将从可用区中随机选择一个子网。

 跨两个可用区的典型 Auto Scaling 组。

再平衡活动

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

  • 更改组的可用区。

  • 您明确地终止或断开实例,组变得不平衡。

  • 之前没有足够容量的可用区已恢复,并提供了额外容量。

  • 之前竞价市场价格超出您的竞价出价的可用区现在的市场价格低于您的出价。

再平衡时,Auto Scaling 在终止旧实例之前启动新实例,所以再平衡不会损害应用程序的性能或可用性。

因为 Auto Scaling 尝试在终止旧实例之前启动新实例,所以达到或接近指定的最大容量可能会阻碍或完全停止再平衡活动。为避免此问题,在再平衡活动期间,系统可以暂时超出某组的指定最大容量的 10%(或超出 1 个实例,以较大者为准)。仅当该组达到或接近最大容量,并需要重新平衡时,才可超出容量限制;此类情况的原因是用户请求重新分区,或者是为了弥补区域可用性问题。该超出状态仅持续重新平衡该组所需的时间(通常为几分钟)。