Application Auto Scaling 的目标跟踪扩缩策略 - Application Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Application Auto Scaling 的目标跟踪扩缩策略

在使用目标跟踪扩缩策略时,您可以选择一个扩缩指标并设置一个目标值。Application Auto Scaling 创建和管理触发扩缩策略的 CloudWatch 警报,并根据指标和目标值计算扩缩调整。扩展策略根据需要增加或减少容量,将指标保持在指定的目标值或接近指定的目标值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还会对由于负载模式变化而造成的指标变化进行调整。

选择指标

创建目标跟踪扩缩策略时,可使用以下预定义指标。您可以选择使用自定义指标规范来定义要监控的指标,并将其与目标跟踪扩缩策略一起使用。

AppStream 2.0

  • AppStreamAverageCapacityUtilization

Aurora

  • RDSReaderAverageCPUUtilization

  • RDSReaderAverageDatabaseConnections

Amazon Comprehend

  • ComprehendInferenceUtilization

DynamoDB

  • DynamoDBReadCapacityUtilization

  • DynamoDBWriteCapacityUtilization

Amazon ECS

  • ALBRequestCountPerTarget(负载均衡器指标)

  • ECSServiceAverageCPUUtilization

  • ECSServiceAverageMemoryUtilization

ElastiCache

  • ElastiCachePrimaryEngineCPUUtilization

  • ElastiCacheReplicaEngineCPUUtilization

  • ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage

Amazon Keyspaces(针对 Apache Cassandra)

  • CassandraReadCapacityUtilization

  • CassandraWriteCapacityUtilization

Lambda

  • LambdaProvisionedConcurrencyUtilization

Amazon Managed Streaming for Apache Kafka (MSK)

  • KafkaBrokerStorageUtilization

Neptune

  • NeptuneReaderAverageCPUUtilization

Spot 实例集(Amazon EC2)

  • ALBRequestCountPerTarget(负载均衡器指标)

  • EC2SpotFleetRequestAverageCPUUtilization

  • EC2SpotFleetRequestAverageNetworkIn

  • EC2SpotFleetRequestAverageNetworkOut

SageMaker

  • SageMakerVariantInvocationsPerInstance

每个指标表示 Amazon CloudWatch 中存储的一组按时间顺序排列的数据点。尽管 Amazon 中的大多数指标在默认情况下每分钟报告一次,但 Amazon EC2 指标在默认情况下每五分钟报告一次。对于其他费用,您可以启用详细监控,从而以一分钟的频率获取实例的指标数据。为了确保更快地响应利用率变化,我们建议您启用详细监控。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的对实例启用或禁用详细监控

选择指标时请记住原则:

  • 并非所有指标都适用于目标跟踪。当指定自定义指标时,这可能很重要。指标必须是有效的使用率指标并且描述可扩展目标的繁忙程度。指标值必须根据可扩展目标的容量按比例增加或减少,以便指标数据可用于按比例扩展可扩展目标。

  • 要使用 ALBRequestCountPerTarget 指标,您必须指定 ResourceLabel 参数以标识与该指标关联的目标组。

  • 指标向 CloudWatch 发出实际 0 值时(例如,ALBRequestCountPerTarget),Application Auto Scaling 在应用程序没有流量时可以横向缩减为 0。要在没有请求路由时将可扩展目标横向缩减到 0,可扩展目标的最小容量必须设置为 0。

  • 并非所有服务都可让您通过目标服务的控制台管理自定义指标。要查看目标服务是否支持控制台中的自定义指标,请参阅该服务的文档。

Considerations

请注意以下事项:

  • 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此,不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。

  • 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 Application Auto Scaling 在确定要添加或删除多少容量时将始终通过向上或向下舍入保守地进行操作,以免添加的容量不足或删除的容量过多。但是,对于具有小容量的可扩展目标,实际指标数据点可能看起来与目标值差距很大。

  • 对于容量更高的可扩展目标,添加或删除容量将缩小目标值与实际指标数据点之间的差距。

  • 为了确保应用程序可用性,Application Auto Scaling 针对指标尽快按比例横向扩展,但会逐渐横向缩减。

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

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

  • 您可以禁用目标跟踪扩展策略的缩减部分。利用此功能,您可以灵活地使用与用于向外扩展的方法不同的缩减方法。例如,您可以使用步进扩展策略进行缩减,同时使用目标跟踪扩展策略进行横向扩展。

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

  • 当警报状态为 INSUFFICIENT_DATA 时,目标跟踪扩缩策略不会横向缩减。有关更多信息,请参阅 使用 CloudWatch 警报进行监控

  • 请勿编辑或删除为目标跟踪扩缩策略配置的 CloudWatch 警报。与您的目标跟踪扩缩策略关联的 CloudWatch 警报由 Amazon 管理,并在不再需要时自动删除。

冷却时间

等待上一个扩展活动生效的时间量称为冷却时间。

对于目标跟踪扩展策略,有两种类型的冷却时间:

  • 使用 scale-out cooldown period (向外扩展冷却时间),目的是持续(但不过度)向外扩展。Application Auto Scaling 使用目标跟踪扩展策略成功向外扩展后,它将开始计算冷却时间。除非触发更大的向外扩展或冷却时间结束,否则扩展策略不会再次增加所需容量。尽管此向外扩展冷却时间有效,但启动向外扩展活动所添加的容量将计算为下一个向外扩展活动所需容量的一部分。

  • 使用 scale-in cooldown period(横向缩减冷却时间),目的是以保守方式进行横向缩减以保护应用程序的可用性,因此在冷却时间过期之前阻止横向缩减活动。但是,如果另一个警报在缩减冷却时间内触发了向外扩展活动,Application Auto Scaling 将立即向外扩展目标。在这种情况下,缩减冷却时间停止而不完成。

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

您可以从默认值开始,稍后可对其进行微调。例如,您可能需要延长冷却时间,以防止目标跟踪扩展策略对短时间内发生的更改过于激进。有关默认值,请参阅 Application Auto Scaling API 参考中的 TargetTrackingScalingPolicyConfiguration

在高利用率期间支持应用程序可用性

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

当指标低于目标值时,策略预计利用率最终会再次增加。因此,只有当利用率超过远远低于目标值(通常比目标值低 10% 以上)的阈值时,它才会通过删除容量来减慢扩缩速度,从而认为利用率已放缓。这种更保守的行为旨在确保只有当应用程序不再遇到与之前相同的高级别需求时,才会删除容量。这是目前所有目标跟踪扩展策略的默认行为(尽管行为将来可能会发生变化)。

对于具有周期性质的工作负载,您还可以选择使用计划扩展按计划自动更改容量。对于每个计划的操作,可以定义新的最小容量值和新的最大容量值。这些值构成扩展策略的边界。

当立即需要容量时,计划扩展和目标跟踪扩展的组合有助于减少利用率级别急剧增加的影响。

扩缩策略创建、管理和删除的常用命令

使用扩缩策略的常用命令包括:

Limitations

以下是使用目标跟踪扩缩策略时的限制:

  • 可扩展目标不能是 Amazon EMR 集群。Amazon EMR 不支持目标跟踪扩缩策略。

  • 当 Amazon MSK 集群是可扩展目标时,横向缩减将禁用且无法启用。

  • 您不能使用 RegisterScalableTargetPutScalingPolicy API 操作来更新 Amazon Auto Scaling 扩展计划。有关如何使用扩缩计划的更多信息,请参阅 Amazon Auto Scaling 文档。