弹性伸缩的目标追踪规则是弹性伸缩服务与云监控深度结合的产物,定义了更加稳定、精准、快速的弹性伸缩策略,解决了当前伸缩组动态调整过程存在的一些难点和问题,能快速实现伸缩组的自动扩缩容。

背景信息

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

支持的监控项和功能设置

支持的监控项

在使用目标追踪规则时,对可选的云监控指标有一定限制,指标必须是有效的使用率指标,能够正确反映伸缩组内实例整体的繁忙程度,并且指标值需要根据伸缩组内实例数量的变化而相应的增加或减少。满足上述条件的监控指标适合应用于目标追踪伸缩规则,目标追踪规则支持的监控指标如下所示:

API监控指标 控制台监控指标
CpuUtilization (ECS)平均CPU使用率
IntranetRx (ECS)内网入流量的平均值
IntranetTx (ECS)内网出流量的平均值
ClassicInternetRx/VpcInternetRx (ECS)公网入流量的平均值
说明
  • 如果伸缩组的网络类型为经典网络,则此处的(ECS)公网入流量的平均值指的是(ECS)经典网络公网入流量的平均值。
  • 如果伸缩组的网络类型为专有网络,则此处的(ECS)公网入流量的平均值指的是(ECS)VPC网络公网入流量的平均值。
ClassicInternetTx/VpcInternetTx (ECS)公网出流量的平均值
说明
  • 如果伸缩组的网络类型为经典网络,则此处的(ECS)公网出流量的平均值指的是(ECS)经典网络公网出流量的平均值。
  • 如果伸缩组的网络类型为专有网络,则此处的(ECS)公网出流量的平均值指的是(ECS)VPC网络公网出流量的平均值。

支持的功能设置

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

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

    • 开启禁用缩容功能后,伸缩组的目标追踪规则只能创建一条用于扩容的报警任务,不会创建或者删除一条用于缩容的报警任务。通过该功能,您可以使用其他方式控制伸缩组的缩容过程。例如,您可以通过报警任务监控其他指标,触发一条简单规则用于缩容操作。
    • 关闭禁用缩容功能后,伸缩组的目标追踪规则会同时创建一条用于扩容的报警任务和一条用于缩容的报警任务。
  • 实例预热时间:指新添加的实例所需要的预热时间,在预热时间段内,该实例不影响伸缩组的监控指标。

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

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

    • 实例预热结束前,可正常加入伸缩组,但实例不会向云监控上报数据,云监控在聚合伸缩组上报的监控指标时会忽略伸缩组内的预热实例,不会将预热实例作为伸缩组内的实例。
    • 实例预热结束后,将开始向云监控上报数据,云监控在此时会将该实例作为伸缩组内的实例。
    • 伸缩组在扩容过程中,加入伸缩组的预热实例不会做为扩容实例的基数。

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

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

注意事项

伸缩组在使用目标追踪规则时,需注意以下几点:

  • 一个伸缩组内创建目标追踪规则时,同一指标类型对应的目标追踪规则只能存在一个。
  • 目标追踪规则创建的报警任务是不支持修改与删除的,只能查看详情与停用启用。如果需要删除,请删除对应的目标追踪规则即可。
  • 如果监控数据指标不足时,伸缩组将不会触发扩缩容活动。
  • 伸缩组支持创建2条云监控报警任务,即采用相对激进的扩容策略和相对保守的缩容策略,分别用于扩容活动和缩容活动。

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

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

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

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

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

与简单规则对比

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

对比项 简单规则 目标追踪规则
用户参与度 用户参与度高:您可以根据实际需要自定义扩缩容活动,使您真正实现了按需使用的目标。但您需要关注具体的扩缩容活动、期望目标值等。 用户参与度低:将扩缩容方法和扩缩容时间两者定义整合在一起,您可以查看到监控指标值,且只需要关注监控指标的目标值即可。
调整粒度 调整粒度固定。您可以自定义具体的扩缩容操作,但无法感知监控指标的实际状态,您只能够根据经验来设置一个固定的伸缩规则,其调整过程粒度无法实现动态调整。 调整粒度精准。目标追踪伸缩规则增加了对监控数据的感知能力,根据历史的监控数据值和期望目标值计算出所需要的扩缩容实例数,使用尽量少的调整过程接近目标值,实现快速、精准、动态的扩缩容活动。
调整过程 调整过程缺乏控制。主要体现在以下几点:
  • 数据抖动:不支持设置实例预热时间,对于新添加的伸缩组实例,短时间内监控数据无法获取或者不准确,使得整体的监控数据发生较大抖动,可能会导致报警时间的触发不符合实际需要。
  • 实例数连续回调:实例数变化带来的监控指标变化通常不是同步的,即当实例个数发生变化,但监控指标还未相应变化时,仍可能触发报警事件,可能会因数据延迟而触发扩缩容。
  • 实例稳定性低:当您期望将监控指标值维持在某个区间时,通常是针对同一指标值设置一条扩容规则和一条缩容规则,不合理的设置将可能导致伸缩组实例来回变化。
调整过程控制灵活,主要体现在以下几点:
  • 数据稳定:支持设置实例预热时间,新实例加入伸缩组后,将首先进入实例预热阶段,在此期间不会向云监控上报监控数据,也不作为扩缩容过程的基数实例。预热阶段能够有效防止增加过多实例,达到动态稳定扩缩容效果。
  • 实例数不回调:弹性伸缩会及时自动计算所需的实例数量并触发扩缩容,比较精准地将云监控指标维持在目标值附近。
  • 实例稳定性高:具有动态稳定区间,根据伸缩组的历史监控数据计算目标值稳定的区间。

创建目标追踪规则

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

  • 弹性伸缩控制台:选择需要创建的伸缩组,创建目标追踪规则的更多操作,请参见创建伸缩规则
  • API:调用API CreateScalingRule参数创建目标追踪规则的更多操作,请参见CreateScalingRule