

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

# Application Auto Scaling 步进扩展策略的工作原理
<a name="step-scaling-policy-overview"></a>

本主题描述步进扩展的工作原理，并介绍步进扩展策略的关键元素。

**Topics**
+ [工作原理](#step-scaling-how-it-works)
+ [分步调整](#as-scaling-steps)
+ [扩展调整类型](#as-scaling-adjustment)
+ [冷却时间](#step-scaling-cooldown)
+ [常用命令](#step-scaling-policy-commonly-used-commands)
+ [注意事项](#step-scaling-considerations)
+ [相关资源](#step-scaling-related-resources)
+ [控制台访问](#step-scaling-console-access)

## 工作原理
<a name="step-scaling-how-it-works"></a>

要使用步进缩放，您需要创建一个 CloudWatch 警报，用于监控可扩展目标的指标。定义确定触发警报的指标、阈值和评估周期数。您还可以创建分步扩缩策略，在其中定义在突破警报阈值时如何扩缩容量并将其与可扩展目标相关联。

在策略中添加分步调整。您可以根据警报的阈值突破大小定义不同的分步调整。例如：
+ 如果警报指标达到 60%，则横向扩展 10 个容量单位
+ 如果警报指标达到 75%，则横向扩展 30 个容量单位
+ 如果警报指标达到 85%，则横向扩展 40 个容量单位

当在指定的评估周期数内超过警报阈值时，Application Auto Scaling 将应用策略中定义的分步调整。针对其他警报触发情况，可以继续进行调整，直到警报状态恢复为 `OK`。

扩缩活动在两者之间有冷却时间，以防止容量快速波动。您可以选择为扩缩策略配置冷却时间。

## 分步调整
<a name="as-scaling-steps"></a>

在创建分步扩缩策略时，您可以指定一个或多个分步调整，它们会动态地根据警报违规的大小自动扩缩目标容量。每个分步调整指定以下内容：
+ 指标值的下限
+ 指标值的上限
+ 要扩展的数量（基于扩展调整类型）

CloudWatch 根据与 CloudWatch 警报关联的指标的统计数据聚合指标数据点。超过警报时，将调用相应的扩缩策略。Application Auto Scaling 将您指定的聚合类型应用于来自的最新指标数据点 CloudWatch （而不是原始指标数据）。它将此聚合指标值与步进调整定义的上限和下限进行比较，以确定执行哪个步进调整。

您可以指定相对于违例阈值的上限和下限。例如，假设您针对指标高于 50% 时发出了 CloudWatch 警报并制定了扩展策略。然后，当指标低于 50% 时，又发出了另一个警报并采取横向缩减策略。您进行了一组分步调整，每个策略的调整类型为 `PercentChangeInCapacity`：


**示例：扩展策略的步进调整**  

| **下限** | **上限** | **调整** | 
| --- | --- | --- | 
|  0  |  10  |  0  | 
|  10  |  20  |  10  | 
|  20  |  null  |  30  | 


**示例：缩放策略的步进调整**  

| **下限** | **上限** | **调整** | 
| --- | --- | --- | 
|  -10  |  0  |  0  | 
|  -20  |  -10  |  -10  | 
|  null  |  -20  |  -30  | 

这将创建以下扩展配置。

```
Metric value

-infinity          30%    40%          60%     70%             infinity
-----------------------------------------------------------------------
          -30%      | -10% | Unchanged  | +10%  |       +30%        
-----------------------------------------------------------------------
```

现在，假设您有一个容量为 10 的可扩展目标，使用基于此目标的扩缩配置。以下几点总结了扩展配置相对于可扩展目标的容量的行为：
+ 在聚合指标值大于 40 且小于 60 时，将保留原始容量。
+ 如果指标值达到 60，则 Application Auto Scaling 将可扩展目标的容量增加 1，达到 11。这基于向外扩展策略的第二个步进调整（增加 10 的 10%）。在增加新容量后，Application Auto Scaling 将当前容量增加到 11。如果即使在增加该容量后指标值仍增加到 70，Application Auto Scaling 会将目标容量增加 3 以达到 14。这基于向外扩展策略的第三个步进调整（增加 11 的 30%，即 3.3，向下舍入到 3）。
+ 如果指标值达到 40，根据横向缩减策略的第二个分步调整（减去 14 的 10%，即 1.4，向下舍入到 1），Application Auto Scaling 将可扩展目标的容量减少 1，达到 13。如果在减少该容量后指标值仍降到 30，根据横向缩减策略的第三个步骤调整（减去 13 的 30%，即 3.9，向下舍入到 3），Application Auto Scaling 将目标容量减小 3 以达到 10。

为扩展策略指定步进调整时，请注意以下事项：
+ 分步调整范围不能重叠或有间隙。
+ 只有一个分步调整可以有空下限 (负无穷)。如果一个分步调整有负下限，则必须有一个分步调整有空下限。
+ 只有一个分步调整可以有空上限 (正无穷)。如果一个分步调整有正上限，则必须有一个分步调整有空上限。
+ 同一分步调整中的上限和下限不能为空。
+ 如果指标值高于违例阈值，则含下限而不含上限。如果指标值低于违例阈值，则不含下限而含上限。

## 扩展调整类型
<a name="as-scaling-adjustment"></a>

您可以根据您选择的扩展调整类型来定义执行最佳扩展操作的扩展策略。您可以将调整类型指定为可扩展目标的当前容量的百分比或绝对数。

对于分步扩缩策略，Application Auto Scaling 支持以下调整类型：
+ **ChangeInCapacity**—按指定值增加或减少可扩展目标的当前容量。正值将增加容量，负值将减少容量。例如：如果当前容量为 3 且调整值为 5，则 Application Auto Scaling 将为容量增加 5（总量为 8）。
+ **ExactCapacity**— 将可扩展目标的当前容量更改为指定值。为此调整类型指定一个非负值。例如：如果当前容量为 3 且调整值为 5，则 Application Auto Scaling 将容量更改为 5。
+ **PercentChangeInCapacity**—按指定的百分比增加或减少可扩展目标的当前容量。正值将增加容量，负值将减少容量。例如：如果当前容量为 10 且调整值为 10%，则 Application Auto Scaling 将为容量增加 1（总量为 11）。

  如果得出的值不是整数，Application Auto Scaling 将进行舍入，如下所示：
  + 大于 1 的值向下取整。例如，`12.7` 取整为 `12`。
  + 0 和 1 之间的值舍入到 1。例如，`.67` 取整为 `1`。
  + 0 和 -1 之间的值舍入到 -1。例如，`-.58` 取整为 `-1`。
  + 小于 -1 的值向上取整。例如，`-6.67` 取整为 `-6`。

  使用 **PercentChangeInCapacity**，您还可以使用`MinAdjustmentMagnitude`参数指定最小缩放量。例如，假定您创建一个增加 25% 的策略，并指定最小扩展量为 2。如果可扩展目标的容量为 4 并执行该扩展策略，4 的 25% 为 1。不过，由于您指定最小扩展量为 2，Application Auto Scaling 将增加 2。

## 冷却时间
<a name="step-scaling-cooldown"></a>

您可以选择在分步扩展策略中定义冷却时间。

冷却时间指定了扩展策略等待上一个扩展活动生效的时间量。

有两种方法可以计划分步扩展配置的冷却时间使用：
+ 使用横向扩展策略的冷却时间，目的是持续（但不过度）横向扩展。Application Auto Scaling 使用扩展策略成功横向扩展后，它将开始计算冷却时间。除非触发更大的横向扩展或冷却时间结束，否则扩展策略不会再次增加所需容量。尽管此横向扩展冷却时间有效，但启动横向扩展活动所添加的容量将计算为下一个横向扩展活动所需容量的一部分。
+ 使用横向缩减策略冷却时间，目的是以保守方式进行横向缩减，以保护应用程序的可用性，因此在横向缩减冷却时间过期之前，横向缩减活动会被阻止。但是，如果另一个警报在缩减冷却时间内触发了向外扩展活动，Application Auto Scaling 将立即向外扩展目标。在这种情况下，横向缩减冷却时间会停止而不完成。

例如，出现流量高峰时会触发警报，Application Auto Scaling 会自动增加容量以帮助处理增加的负载。如果为横向扩展策略设置冷却时间，当警报触发策略以将容量增加 2 时，扩展活动成功完成，横向扩展冷却时间开始。如果在冷却时间内再次触发警报，但进行了 3 这样的更大幅度的步进调整，之前增加的 2 将视为当前容量的一部分。因此，仅在容量中增加 1。与等待冷却时间过期相比，这可以实现更快的扩展，但不会增加超出您需求的容量。

冷却时间以秒为单位进行度量，仅适用于与扩展策略相关的扩展活动。在冷却时间内，当计划的操作在计划的时间开始时，它可以立即触发扩展活动，而无需等待冷却时间到期。

如果未指定值，则默认值为 300。

## 扩缩策略创建、管理和删除的常用命令
<a name="step-scaling-policy-commonly-used-commands"></a>

使用扩缩策略的常用命令包括：
+ [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)注册 AWS 或自定义资源作为可扩展目标（Application Auto Scaling 可以扩展的资源），以及暂停和恢复扩展。
+ [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)为现有可扩展目标添加或修改扩展策略。
+  [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)返回有关某个 AWS 区域中扩展活动的信息。
+ [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html)返回有关某个 AWS 区域中扩展策略的信息。
+ [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html)删除扩展策略。

## 注意事项
<a name="step-scaling-considerations"></a>

使用分步扩缩策略时，需要注意以下事项：
+ 考虑是否可以足够准确地预测应用程序上的分步调整，以便使用分步扩缩。如果您的扩缩指标的升高或降低与可扩展目标的容量成比例，则建议您使用目标跟踪扩缩策略。您仍然可以选择使用步进扩展作为附加策略来实现更高级的配置。例如，您可以在利用率达到特定级别时配置更积极的响应。
+ 确保在横向扩展和横向缩减之间选择足够的余量，以防止摇摆。摆动是横向缩减和横向扩展的无限循环。也就是说，如果采取扩展操作，则指标值将更改并启动另一个相反方向的扩展操作。

## 相关资源
<a name="step-scaling-related-resources"></a>

有关为自动扩缩组创建分步扩缩策略的信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的 [Amazon EC2 Auto Scaling 的步进和简单扩展策略](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html)。

## 控制台访问
<a name="step-scaling-console-access"></a>

在可扩展资源上查看、添加、更新或移除分步扩缩策略的控制台访问权限取决于您使用的资源。有关更多信息，请参阅 [AWS 服务 可以与 Application Auto Scaling 一起使用](integrated-services-list.md)。