Amazon EC2 Auto Scaling 的动态扩展 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon EC2 Auto Scaling 的动态扩展

当您配置动态扩展时,需要定义如何根据不断变化的需求扩展 Auto Scaling 组的容量。

例如,假设您有一个当前在两个实例上运行的 Web 应用程序,并希望在应用程序负载变化时将 Auto Scaling 组的 CPU 使用率保持在 50% 左右。这为您提供额外容量以处理流量高峰,而无需维护过多的空闲资源。

您可以通过创建目标跟踪、步骤或简单扩展策略将 Auto Scaling 组配置为动态扩展以满足此需求。然后,Amazon EC2 Auto Scaling 可以向外扩展组(添加更多实例)以应对高峰期的高需求,并在低利用率期间缩减组(运行更少的实例)以降低成本。

动态扩展策略的工作原理

动态扩展策略指示 Amazon EC2 Auto Scaling 跟踪特定的 CloudWatch 指标,并定义当关联的 CloudWatch 警报处于警报状态时要采取的措施。用于触发警报的指标是来自 Auto Scaling 组中所有实例的指标聚合。(例如,假设您有一个 Auto Scaling 组,其中有两个实例,一个实例的 CPU 利用率为 60%,另一个实例的 CPU 利用率为 40%。 平均而言,其 CPU 利用率为 50%。) 策略生效时,Amazon EC2 Auto Scaling 会在触发警报时向上或向下调整组的所需容量。

在调用动态扩展策略时,如果容量计算生成的数字超出了组的最小和最大大小的范围,则 Amazon EC2 Auto Scaling 确保新容量永远不会超出最小和最大大小限制。容量通过以下两种方式衡量:使用您在以实例数设置所需容量时选择的相同单位;或者使用容量单位(如果应用了实例权重)。

  • 示例 1:Auto Scaling 组的最大容量为 3,当前容量为 2,并具有添加 3 个实例的动态扩展策略。当调用此策略时,Amazon EC2 Auto Scaling 仅向组添加 1 个实例,以防止组超出其最大小。

  • 示例 2:Auto Scaling 组的最小容量为 2,当前容量为 3,并有移除 2 个实例的动态扩展策略。当调用此策略时,Amazon EC2 Auto Scaling 仅从组中删除 1 个实例,以防止组小于其最小大小。

当所需容量达到最大大小限制时,向外扩展停止。如果需求下降并且容量下降,Amazon EC2 Auto Scaling 可以再次向外扩展。

但使用实例权重时例外。在这种情况下,Amazon EC2 Auto Scaling 可以向外扩展并超过最大大小限制,但上限为您的最大实例权重。其目的是尽可能接近新的所需容量,但仍然遵循为该组指定的分配战略。分配策略决定要启动的实例类型。权重根据实例类型确定每个实例向所需的组容量贡献的容量单位数。

  • 示例 3:Auto Scaling 组的最大容量为 12,当前容量为 10,并有添加 5 个容量单位的动态扩展策略。向实例类型分配三个权重之一:1、4 或 6。当调用策略时,Amazon EC2 Auto Scaling 会根据分配策略选择启动权重为 6 的实例类型。此横向扩展事件的结果是得到所需容量为 12、当前容量为 16 的组。

动态扩展策略类型

Amazon EC2 Auto Scaling 支持以下类型的动态扩展策略:

  • 目标跟踪扩展-根据特定指标的目标值增加或减少组的当前容量。这与恒温器保持家里温度的方式类似 — 您选择一个温度,恒温器将完成所有其他工作。

  • 步进扩展-根据一组扩展调整增加或减少组的当前容量,这些调整称为步进调整,这将根据警报违例规模发生变化。

  • 简单扩展-根据单个扩展调整增加或减少组的当前容量。

如果您根据一个按 Auto Scaling 组中的实例数成比例增减的利用率指标进行扩展,我们建议您使用目标跟踪扩展策略。否则,我们建议您使用步进扩展策略。

多个动态扩展策略

在大多数情况下,目标跟踪扩展策略就足以将 Auto Scaling 组配置为自动横向扩展和缩减。目标跟踪扩展策略允许您选择所需结果,并让 Auto Scaling 组根据需要添加和删除实例以实现该结果。

对于高级扩展配置,Auto Scaling 组可以有多个扩展策略。例如,您可以定义一个或多个目标跟踪扩展策略,一个或多个步进扩展策略,或者同时使用两种策略。这样可以更灵活地覆盖多种场景。

为了说明多个动态扩展策略如何协同工作,请设想一个应用程序,它使用 Auto Scaling 组和 Amazon SQS 队列将请求发送到单个 EC2 实例。为了帮助确保应用程序性能达到最佳级别,有两个策略用于控制何时扩展 Auto Scaling 组。一个是使用自定义指标、根据队列中的 SQS 消息数增加和移除容量的目标跟踪策略。另一个是使用 Amazon CloudWatch 的步骤扩展策略CPUUtilization指标,当实例在指定时间长度内的使用率超过 90% 时增加容量。

当多个策略同时生效时,各个策略可能会同时指示 Auto Scaling 组扩展(或缩减)。例如,这可能是CPUUtilization指标峰值并触发 CloudWatch 警报,同时触发 SQS 自定义指标峰值并触发自定义指标警报。

当发生上述情况时,Amazon EC2 Auto Scaling 会选择在扩展和缩减时都提供最大容量的策略。例如,假定 CPUUtilization 策略启动一个实例,而 SQS 队列的策略启动两个实例。如果同时满足两个策略的扩展条件,则 Amazon EC2 Auto Scaling 会优先选择 SQS 队列策略。这会导致 Auto Scaling 组启动两个实例。

即使策略使用不同的扩展条件,使提供最大容量的策略具有优先级的方法也适用。例如,如果一个策略终止三个实例,另一个策略将实例数量减少 25% 且在扩展时组中有八个实例,则 Amazon EC2 Auto Scaling 会优先考虑为组提供最大数量实例的策略。这会导致 Auto Scaling 组终止两个实例(8 X 25% = 2)。目的是防止 Amazon EC2 Auto Scaling 删除过多实例。

不过,在将目标跟踪扩展策略与步进扩展策略结合使用时,我们建议您务必谨慎,因为这些策略之间的冲突可能会导致意外的行为。例如,如果步进扩展策略在目标跟踪策略准备执行缩减之前启动缩减活动,则不会阻止缩减活动。在缩减活动完成后,目标跟踪策略可能会指示组重新横向扩展。