全部产品
Search
文档中心

弹性伸缩:目标追踪规则

更新时间:Mar 12, 2024

弹性伸缩的目标追踪规则是弹性伸缩服务与云监控深度结合的产物,定义了更加稳定、精准、快速的弹性伸缩策略,可以解决当前伸缩组动态调整过程存在的一些难点和问题(例如用户流量突增或硬件出现故障等突发事件),能快速实现伸缩组的自动扩缩容,确保系统的稳定性和可用性。

概念介绍

弹性伸缩的目标追踪规则是在简单规则的基础上扩展出来的一种新类型的伸缩规则,您可以根据需要选择一项云监控指标,并指定监控指标的目标值,弹性伸缩会自动计算所需的实例数量并进行扩缩容,从而将云监控指标更高效、更准确地维持在目标值附近。

说明

弹性伸缩支持步进规则、预测规则、简单规则、目标追踪规则四种伸缩规则类型,更多信息,请参见伸缩规则概述

支持的监控项和功能设置

支持的监控项

在使用目标追踪规则时,对可选的云监控指标有一定限制,指标必须是有效的使用率指标,能够正确反映伸缩组内实例整体的繁忙程度,并且指标值需要根据伸缩组内实例数量的变化而相应地增加或减少。

满足上述条件的监控指标适合应用于目标追踪规则,不同类型的伸缩组,其目标追踪规则支持的云监控指标不同:

  • ECS类型的伸缩组

    API监控指标

    控制台监控指标

    CpuUtilization

    (ECS)平均CPU使用率

    IntranetRx

    (ECS)内网入流量的平均值

    IntranetTx

    (ECS)内网出流量的平均值

    ClassicInternetRx/VpcInternetRx

    (ECS)公网入流量的平均值

    说明
    • 如果伸缩组的网络类型为经典网络,则此处的(ECS)公网入流量的平均值指的是(ECS)经典网络公网入流量的平均值。

    • 如果伸缩组的网络类型为专有网络,则此处的(ECS)公网入流量的平均值指的是(ECS)VPC网络公网入流量的平均值。

    ClassicInternetTx/VpcInternetTx

    (ECS)公网出流量的平均值

    说明
    • 如果伸缩组的网络类型为经典网络,则此处的(ECS)公网出流量的平均值指的是(ECS)经典网络公网出流量的平均值。

    • 如果伸缩组的网络类型为专有网络,则此处的(ECS)公网出流量的平均值指的是(ECS)VPC网络公网出流量的平均值。

    MemoryUtilization

    (Agent)内存

    表示通过云监控客户端采集的内存使用率指标。

    LoadBalancerRealServerAverageQps

    (ALB)服务器组单机QPS

    说明

    选择该云监控指标后,您还需要选择相应的ALB服务器组。

  • ECI类型的伸缩组

    API监控指标

    控制台监控指标

    EciPodCpuUtilization

    CPU使用率

    EciPodMemoryUtilization

    内存

    LoadBalancerRealServerAverageQps

    (ALB)服务器组单机QPS

    说明

    选择该云监控指标后,您还需要选择相应的ALB服务器组。

支持的功能设置

  • 禁用缩容:如果不想使用目标追踪规则的自动删除实例功能,可以通过开启禁用缩容功能来实现。

    开启禁用缩容功能,您可以通过在弹性伸缩控制台的创建伸缩规则页面,单击禁用缩容参数后的按钮按钮来实现;也可以通过调用API CreateScalingRule参数,设置DisableScaleIntrue来实现。

    • 开启禁用缩容功能后,伸缩组的目标追踪规则只能创建一条用于扩容的报警任务,不会创建或者删除一条用于缩容的报警任务。通过该功能,您可以使用其他方式控制伸缩组的缩容过程。例如,您可以通过报警任务监控其他指标,触发一条简单规则用于缩容操作。

    • 关闭禁用缩容功能后,伸缩组的目标追踪规则会同时创建一条用于扩容的报警任务和一条用于缩容的报警任务。

  • 实例预热时间:指新添加的实例所需要的预热时间,在预热时间段内,该实例不影响伸缩组的监控指标。

    新实例加入伸缩组后,通常需要经历业务部署、负载均衡健康检查、数据采集等过程,才能上报稳定的监控数据,此过程中不适合触发新的伸缩活动。为了限制扩缩容过程执行的频率,伸缩组提供了对伸缩规则设置合适的实例预热时间,在此期间伸缩组会拒绝执行伸缩规则。

    实例的预热阶段主要体现在以下几点:

    • 实例预热结束前,可正常加入伸缩组,但实例不会向云监控上报数据,云监控在聚合伸缩组上报的监控指标时会忽略伸缩组内的预热实例,不会将预热实例作为伸缩组内的实例。

    • 实例预热结束后,将开始向云监控上报数据,云监控在此时会将该实例作为伸缩组内的实例。

    • 伸缩组在扩容过程中,加入伸缩组的预热实例不会做为扩容实例的基数。

      例如,当前组内实例数量为2个,伸缩组触发扩容活动后添加5个实例到伸缩组,预热时间设置为300秒,在实例预热期间,伸缩组再次触发扩容活动后,仍按照实例数量为2个作为扩容实例的基数。

    • 伸缩组在缩容过程中,会自动根据历史执行情况设置合适的默认冷却时间,避免加入伸缩组的预热实例因数据延迟而引起连续缩容活动,而导致伸缩组内的实例被过多释放。

与简单规则对比

目标追踪规则与简单规则对比如下所示:

对比项

简单规则

目标追踪规则

用户参与度

用户参与度高。

您可以根据实际需要自定义扩缩容活动,使您真正实现按需使用的目标。但您需要关注具体的扩缩容活动、期望目标值等。

用户参与度低。

将扩缩容方法和扩缩容时间两者定义整合在一起,您可以查看到监控指标值,且只需要关注监控指标的目标值即可。

调整粒度

调整粒度固定。

您可以自定义具体的扩缩容操作,但无法感知监控指标的实际状态,您只能够根据经验来设置一个固定的伸缩规则,其调整过程粒度无法实现动态调整。

调整粒度精准。

目标追踪伸缩规则增加了对监控数据的感知能力,根据历史的监控数据值和期望目标值计算出所需要的扩缩容实例数,使用尽量少的调整过程接近目标值,实现快速、精准、动态的扩缩容活动。

调整过程

调整过程缺乏控制。主要体现在以下几点:

  • 数据抖动:不支持设置实例预热时间,对于新添加的伸缩组实例,短时间内监控数据无法获取或者不准确,使得整体的监控数据发生较大抖动,可能会导致报警时间的触发不符合实际需要。

  • 实例数连续回调:实例数变化带来的监控指标变化通常不是同步的,即当实例个数发生变化,但监控指标还未相应变化时,仍可能触发报警事件,可能会因数据延迟而触发扩缩容。

  • 实例稳定性低:当您期望将监控指标值维持在某个区间时,通常是针对同一指标值设置一条扩容规则和一条缩容规则,不合理的设置将可能导致伸缩组实例来回变化。

调整过程控制灵活,主要体现在以下几点:

  • 数据稳定:支持设置实例预热时间,新实例加入伸缩组后,将首先进入实例预热阶段,在此期间不会向云监控上报监控数据,也不作为扩缩容过程的基数实例。预热阶段能够有效防止增加过多实例,达到动态稳定扩缩容效果。

  • 实例数不回调:弹性伸缩会及时自动计算所需的实例数量并触发扩缩容,比较精准地将云监控指标维持在目标值附近。

  • 实例稳定性高:具有动态稳定区间,根据伸缩组的历史监控数据计算目标值稳定的区间。

创建目标追踪规则

注意事项

在创建目标追踪规则前,您需要注意以下几点:

  • 一个伸缩组内创建目标追踪规则时,同一指标类型对应的目标追踪规则只能存在一个。

  • 创建目标追踪规则时,会自动创建2条云监控报警任务。

    • 报警任务不支持修改与删除,只能进行查看、停用或启用操作。如需删除报警任务,请删除对应的目标追踪规则即可。

    • 2条云监控报警任务采用相对激进的扩容策略和相对保守的缩容策略,分别用于扩容活动和缩容活动。

      例如,如果伸缩组的扩容报警任务采样间隔为60秒,报警任务连续3分钟满足阈值条件时,则进行扩容活动;如果伸缩组的缩容报警任务采样间隔为60秒,报警任务连续15分钟满足阈值条件时,则进行缩容活动。

    • 发生报警时,伸缩组将触发对应的扩缩容活动,弹性伸缩会根据监控指标的历史数据计算扩缩容过程中实例的数量。对于扩容活动来说,需要增加的实例数量采取向上取整,避免扩容的实例数量不足;对于缩容活动来说,需要移出的实例数量采取向下取整,避免释放过多的实例数量。

      例如,如果伸缩组需要增加实例个数为1.5个时,实际伸缩组将增加2个实例;如果伸缩组需要移出的实例个数为1.5个时,实际伸缩组将减少1个实例。

  • 如果监控数据指标不足时,伸缩组将不会触发扩缩容活动。

  • 如果伸缩组内的实例数量较少时,可能会存在监控指标值与目标值存在较大的差距。此时,伸缩组内的实例数量的变化对伸缩组聚合指标值具有较大的影响。

    例如,如果在缩容过程中报警规则一直处于报警状态,却没有发生缩容活动。这种情况主要是因为缩容过程计算得到的缩容实例数量少于1个,因此不会产生实际的伸缩活动。

操作步骤

您可以通过弹性伸缩控制台或者调用API两种方式来创建伸缩组的目标追踪规则。

  • 控制台方式:选择需要创建的伸缩组,创建目标追踪规则的更多操作,请参见配置伸缩规则

  • API方式:调用API CreateScalingRule参数创建目标追踪规则,更多操作,请参见CreateScalingRule