

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

# Application Auto Scaling 目标跟踪扩展的工作原理
<a name="target-tracking-scaling-policy-overview"></a>

本主题描述了目标跟踪扩展的工作原理，并介绍了目标跟踪扩展策略的关键要素。

**Topics**
+ [工作原理](#target-tracking-how-it-works)
+ [选择指标](#target-tracking-choose-metrics)
+ [定义目标值](#target-tracking-define-target-value)
+ [定义冷却时间](#target-tracking-cooldown)
+ [注意事项](#target-tracking-considerations)
+ [多个扩缩策略](#target-tracking-multiple-scaling-policies)
+ [常用命令](#target-tracking-policy-commonly-used-commands)
+ [相关资源](#target-tracking-related-resources)
+ [限制](#target-tracking-limitations)

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

要使用目标跟踪扩展，请创建目标跟踪扩展策略并指定以下内容：
+ **指标**-要跟踪的 CloudWatch 指标，例如平均 CPU 利用率或每个目标的平均请求数。
+ **目标值**：指标的目标值，例如 50% 的 CPU 利用率或每个目标每分钟 1000 个请求。

Application Auto Scaling 创建和管理调用扩展策略的 CloudWatch 警报，并根据指标和目标值计算扩展调整。扩缩策略将根据需要增加或减少容量，将指标保持在指定的目标值或接近指定的目标值。

当指标高于目标值时，Application Auto Scaling 会通过增加容量来缩小指标值和目标值之间的差异，从而横向扩展。当指标低于目标值时，Application Auto Scaling 会通过减少容量来横向缩减。

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

下图概述显示设置完成时目标跟踪扩缩策略的工作原理。

![\[目标跟踪扩展策略的概述\]](http://docs.amazonaws.cn/autoscaling/application/userguide/images/target-tracking-scaling-policy.png)


请注意，目标跟踪扩缩策略在利用率提高时添加容量比在利用率降低时删除容量更为积极。例如，如果策略的指定指标达到其目标值，则策略假定您的应用程序已达到高负载。因此，它通过尽可能快地添加与指标值成比例的容量来进行响应。指标越高，添加的容量就越多。

当指标低于目标值时，如果策略计算出移除最小容量单位可能会使该指标恢复到目标值以上，则该策略不会缩小规模。在此场景中，只有当利用率超过远低于目标值（通常比目标值低 10% 以上）的阈值时，它才会通过删除容量来减慢扩缩速度，从而认为利用率已放缓。这种更保守的行为旨在确保只有当应用程序不再遇到与之前相同的高级别需求时，才会删除容量。

## 选择指标
<a name="target-tracking-choose-metrics"></a>

您可以使用预定义的指标或自定义指标，创建目标跟踪扩展策略。

使用预定义指标类型创建目标跟踪扩展策略时，您可以从 [目标跟踪扩展策略的预定义目标](monitoring-cloudwatch.md#predefined-metrics) 中的预定义指标列表中选择一个指标。

选择指标时请记住原则：
+ 并非所有自定义指标都适用于目标跟踪。指标必须是有效的使用率指标并且描述可扩展目标的繁忙程度。指标值必须根据可扩展目标的容量按比例增加或减少，以便指标数据可用于按比例扩展可扩展目标。
+ 要使用 `ALBRequestCountPerTarget` 指标，您必须指定 `ResourceLabel` 参数以标识与该指标关联的目标组。
+ 当某个指标将实数 0 值发送到 CloudWatch （例如`ALBRequestCountPerTarget`）时，当您的应用程序持续一段时间内没有流量时，Application Auto Scaling 可以缩减到 0。要在没有请求路由时将可扩展目标横向缩减到 0，可扩展目标的最小容量必须设置为 0。
+ 您可以使用指标数学组合现有指标，而不必发布要在扩缩策略中使用的新指标。有关更多信息，请参阅 [使用指标数学为 Application Auto Scaling 创建目标跟踪扩展策略](application-auto-scaling-target-tracking-metric-math.md)。
+ 要查看您使用的服务是否支持在服务控制台中指定自定义指标，请参阅该服务的文档。
+ 我们建议您使用每隔一分钟可用的指标，以帮助您更快地扩展以响应利用率变化。目标跟踪将评估所有预定义指标和自定义指标的以一分钟为粒度聚合的指标，但底层指标发布数据的频率可能会降低。例如，默认情况下，所有 Amazon EC2 指标都以五分钟为间隔发送，但可配置为每隔一分钟（即详细监控）发送。是否选择此配置取决于单个服务。大部分情况下可尝试使用尽可能小的间隔。

## 定义目标值
<a name="target-tracking-define-target-value"></a>

创建目标跟踪扩缩策略时，必须指定一个目标值。目标值表示应用程序的最佳平均利用率或吞吐量。为了经济高效地使用资源，目标值的设置应尽可能高，并为流量的意外增加提供合的理缓冲。当应用程序针对正常流量进行最佳横向扩展时，实际指标值应等于或略低于目标值。

当扩缩策略基于吞吐量（例如，每目标的应用程序负载均衡器请求计数、网络 I/O 或其他计数指标）时，目标值表示单个实体（例如 Application Load Balancer 目标组的单个目标）在一分钟内的最佳平均吞吐量。

## 定义冷却时间
<a name="target-tracking-cooldown"></a>

您可以选择在目标跟踪扩展策略中定义冷却时间。

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

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

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

您可以从默认值开始，稍后可对其进行微调。例如，您可能需要延长冷却时间，以防止目标跟踪扩展策略对短时间内发生的更改过于激进。

**默认值**

Application Auto Scaling 为 ElastiCache 以下可扩展目标提供了默认值 600，为以下可扩展目标提供了默认值 300：
+ WorkSpaces 应用程序舰队
+ Aurora 数据库集群
+ ECS 服务
+ Neptune 集群
+ SageMaker AI 端点变体
+ SageMaker AI 推理组件
+ SageMaker AI 无服务器配置的并发性
+ Spot Fleets
+ Pool of WorkSpaces
+ 自定义资源

对于所有其他可扩展目标，默认值为 0 或 null：
+ Amazon Comprehend 文档分类和实体识别程序终端节点
+ DynamoDB 表和全局二级索引
+ Amazon Keyspaces 表
+ Lambda 预配置并发
+ Amazon MSK 代理存储

Application Auto Scaling 评估冷却时间时，会将 null 值视为零值。

您可以更新任何默认值（包括 null 值），以设置自己的冷却时间。

## 注意事项
<a name="target-tracking-considerations"></a>

使用目标跟踪扩缩策略时，需要注意以下事项：
+ 请勿创建、编辑或删除与目标跟踪扩展策略一起使用的 CloudWatch 警报。Application Auto Scaling 创建和管理与目标跟踪扩展策略关联的 CloudWatch 警报，并在不再需要时将其删除。
+ 如果指标缺少数据点，则会导致 CloudWatch 警报状态更改为`INSUFFICIENT_DATA`。发生这种情况时，在找到新的数据点之前，Application Auto Scaling 无法扩展您的可扩展目标。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[配置 CloudWatch 警报如何处理丢失的数据](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。
+ 如果设计为很少报告指标，则指标数学可能会很有帮助。例如，要使用最新的值，则使用 `FILL(m1,REPEAT)` 函数，其中 `m1` 是指标。
+ 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 Application Auto Scaling 在确定要添加或删除多少容量时将始终通过向上或向下舍入保守地进行操作，以免添加的容量不足或删除的容量过多。但是，对于具有小容量的可扩展目标，实际指标数据点可能看起来与目标值差距很大。

  例如，假设您将 CPU 使用率的目标值设置为 50%，然后自动扩缩组超过了该目标。我们可以确定，添加 1.5 个实例会将 CPU 使用率降低到接近 50%。由于不可能添加 1.5 个实例，我们将该值向上取整，添加两个实例。这可能会将 CPU 使用率降至 50% 以下，但可确保应用程序具有充足的支持资源。类似地，如果我们确定移除 0.5 个实例可将 CPU 利用率提高到 50% 以上，那么在指标降低到我们认为横向缩减不会导致振荡之前，我们不会选择进行横向缩减。

  对于容量更高的可扩展目标，添加或删除容量将缩小目标值与实际指标数据点之间的差距。
+ 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行横向扩展。因此，不能使用目标跟踪扩展策略在指定指标低于目标值时横向扩展。

## 多个扩缩策略
<a name="target-tracking-multiple-scaling-policies"></a>

一个可扩展目标可以具有多个目标跟踪扩展策略，前提是它们分别使用不同的指标。Application Auto Scaling 的目的是始终优先考虑可用性，因此其行为会有所不同，具体取决于目标跟踪策略是否已准备好横向扩展或横向缩减。如果任何目标跟踪策略已准备好进行向外扩展，它将向外扩展可扩展目标，但仅在所有目标跟踪策略（启用了缩减部分）准备好缩减时才执行缩减。

如果多个扩缩策略指示可扩展目标同时横向扩展或横向缩减，则 Application Auto Scaling 会根据为横向缩减和横向扩展提供最大容量的策略进行扩展。这让您能够更灵活地覆盖多种场景，并确保始终有足够的容量来处理工作负载。

您可以禁用目标跟踪扩展策略的横向缩减部分，以便使用与横向扩展不同的方法进行横向缩减。例如，您可以使用步进扩展策略进行缩减，同时使用目标跟踪扩展策略进行横向扩展。

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

对于具有周期性质的工作负载，您还可以选择使用计划扩展按计划自动更改容量。对于每个计划的操作，可以定义新的最小容量值和新的最大容量值。这些值构成扩展策略的边界。当立即需要容量时，计划扩展和目标跟踪扩展的组合有助于减少利用率级别急剧增加的影响。

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

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

## 相关资源
<a name="target-tracking-related-resources"></a>

有关为自动扩缩组创建目标跟踪扩缩策略的信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的 [Amazon EC2 Auto Scaling 的目标跟踪扩缩策略](https://docs.amazonaws.cn/autoscaling/ec2/userguide/as-scaling-target-tracking.html)。

## 限制
<a name="target-tracking-limitations"></a>

以下是使用目标跟踪扩缩策略时的限制：
+ 可扩展目标不能是 Amazon EMR 集群。Amazon EMR 不支持目标跟踪扩缩策略。
+ 当 Amazon MSK 集群是可扩展目标时，横向缩减将禁用且无法启用。
+ 您不能使用`RegisterScalableTarget`或 `PutScalingPolicy` API 操作来更新 Amazon Auto Scaling 扩展计划。
+ 在可扩展资源上查看、添加、更新或移除目标跟踪扩缩策略的控制台访问权限取决于您使用的资源。有关更多信息，请参阅 [Amazon Web Services 服务 可以与 Application Auto Scaling 一起使用](integrated-services-list.md)。