全部产品
Search
文档中心

弹性伸缩:定时任务与报警任务协同配置最佳实践

更新时间:Apr 16, 2026

弹性伸缩支持定时任务和报警任务(含目标追踪规则)两种自动伸缩方式。在同时使用这两种方式时,如果配置不当,可能导致定时扩容被报警任务覆盖,最终容量不符合预期。本文介绍定时任务与报警任务的协同机制,并提供最佳配置方案,帮助您避免伸缩冲突。

问题场景

当伸缩组同时开启期望实例数、定时任务和报警任务(如目标追踪规则)时,可能出现以下问题:定时任务在指定时间触发扩容,但扩容尚未完成时,报警任务随即触发并覆盖了定时任务设置的期望实例数,导致扩容未生效。

典型案例

案例一:定时扩容被目标追踪规则覆盖

某用户的伸缩组配置如下:

  • 开启期望实例数。

  • 定时任务:每天早上8点将实例数扩容至200台。

  • 目标追踪规则:将CPU使用率维持在60%。

实际执行情况:

时间

事件

期望实例数变化

08:00:15

定时任务触发,将期望实例数从80修改为200

80 → 200

08:00:28

目标追踪规则触发扩容10台,将期望实例数从200覆盖为90

200 → 90

结果:定时任务设置的200台目标被覆盖,最终只有90台实例,远低于业务预期。

案例二:定时任务被目标追踪规则覆盖

某用户的伸缩组配置如下:

  • 开启期望实例数。

  • 定时任务:通过Cron表达式,将组内实例数扩容一定比例。

  • 目标追踪规则:将内存利用率维持在目标值。

实际执行情况:

时间

事件

期望实例数变化

12:00:08

定时任务触发,将期望实例数从20修改为40

20 → 40

12:00:50

报警任务触发扩容1台,将期望实例数从40覆盖为21

40 → 21

结果:定时任务设置的40台目标被覆盖,最终只有21台实例。

案例三:定时任务设置期望实例数后被简单规则覆盖

某用户的伸缩组配置如下:

  • 开启期望实例数。

  • 定时任务:将期望实例数修改为50。

  • 报警任务:关联简单规则。

实际执行情况:

时间

事件

期望实例数变化

09:00:10

定时任务触发,将期望实例数从2修改为50

2 → 50

09:00:22

报警任务触发扩容3台,将期望实例数从50覆盖为5

50 → 5

结果:定时任务设置的50台目标被覆盖,最终只有5台实例。

原因分析

上述问题的根本原因在于定时任务与报警任务的执行机制差异:

对比维度

定时任务(仅修改期望实例数)

报警任务

执行方式

仅修改期望实例数的值,不直接触发伸缩活动

立即触发伸缩活动并同步修改期望实例数

生效时间

期望实例数修改后,需要等待30秒~1分钟才生效

立即生效

冲突风险

在等待生效的窗口期内,可能被其他任务覆盖

执行后直接更新期望实例数为当前实际值

核心问题:当定时任务仅修改期望实例数时,该操作不是一次原子性的、立即生效的容量变更。在30秒~1分钟的生效延迟期间,报警任务可能基于当前的实际实例数触发伸缩活动,并重新计算和覆盖期望实例数。

最佳实践:定时任务控制基座容量,报警任务控制弹性容量

方案概述

采用"基座 + 弹性"的分层容量模型,将定时任务和报警任务的职责明确分离:

  • 基座容量(定时任务负责):通过定时任务同步设置最小实例数和期望实例数,保证业务高峰期的底线容量不被报警任务缩容。

  • 弹性容量(报警任务负责):通过目标追踪规则或报警任务,在基座容量之上根据实际负载动态增减实例。

定时任务与报警任务协同配置-设计原则_v1

操作步骤

以下通过一个示例场景说明推荐配置:假设业务需要在每天早上8:00将实例数从日常的10台扩容至50台,晚上22:00恢复日常水平,同时使用目标追踪规则维持CPU使用率在60%。

步骤一:创建定时扩容任务

创建一个定时任务,在业务高峰开始时同步设置最小实例数和期望实例数,确保基座容量立即生效且不会被报警任务覆盖。

  1. 登录弹性伸缩控制台

  2. 在左侧导航栏,单击伸缩组管理

  3. 找到目标伸缩组,单击伸缩组名称进入详情页面。

  4. 单击伸缩规则与任务页签,在定时任务列表下,单击创建定时任务

  5. 创建定时扩容任务,配置如下:

    配置项

    任务名称

    scheduled-scale-up

    执行时间

    每天早上8:00(或业务高峰开始时间)

    重复周期

    按天

    伸缩方式

    伸缩组内实例数量设置

    最小实例数

    50

    期望实例数

    50

    关键配置:伸缩方式选择伸缩组内实例数量设置,同时设置最小实例数期望实例数为50。这样定时任务执行时会同步修改伸缩组的最小实例数和期望实例数,确保容量不会被报警任务缩容到50台以下。

步骤二:创建定时缩容任务

创建一个与扩容任务成对的定时缩容任务,在业务高峰结束后将最小实例数恢复到日常水平,避免资源浪费。

  1. 定时任务列表下,单击创建定时任务,配置如下:

    配置项

    任务名称

    scheduled-scale-down

    执行时间

    每天晚上22:00(或业务高峰结束时间)

    重复周期

    按天

    伸缩方式

    伸缩组内实例数量设置

    最小实例数

    10

    期望实例数

    10

步骤三:配置目标追踪规则

创建目标追踪规则,让报警任务在定时任务设定的基座容量之上,根据实际负载自动进行弹性伸缩。

  1. 单击伸缩规则与任务页签,在伸缩规则列表下,单击创建伸缩规则

  2. 创建目标追踪规则,配置如下:

    配置项

    伸缩规则类型

    目标追踪规则

    指标类型

    (ECS)平均CPU使用率

    目标值

    60%

目标追踪规则会根据CPU使用率在伸缩组的最小实例数和最大实例数之间自动调整实例数量。由于定时任务已将最小实例数设置为50,即使CPU使用率较低,实例数量也不会低于50台。

配置后的执行效果

时间

事件

最小实例数

期望实例数

实际效果

每天 08:00

定时扩容任务触发

10 → 50

10 → 50

立即开始扩容至50台

08:00~22:00

目标追踪规则持续工作

50

≥50

CPU使用率高于60%时,在50台基础上继续扩容;低于60%时最多缩容至50台

每天 22:00

定时缩容任务触发

50 → 10

50 → 10

恢复日常容量水平,多余实例逐步释放

其他时段

目标追踪规则持续工作

10

≥10

根据CPU使用率在10台基础上弹性伸缩

配置要点总结

  1. 定时任务选择"伸缩组内实例数量设置"伸缩方式,同时设置最小实例数和期望实例数,而非仅修改期望实例数。

  2. 成对创建定时任务:扩容和缩容任务成对出现,确保高峰期结束后最小实例数能恢复到日常水平,避免资源浪费。

  3. 最小实例数、期望实例数、最大实例数三者的关系

    • 定时任务通过设置最小实例数期望实例数控制基座容量。

    • 报警任务/目标追踪规则最小实例数最大实例数之间进行弹性调整。

    • 系统内置规则保证最小实例数期望实例数最大实例数,优先级清晰,无需额外设计冲突规避机制。

常见问题

  • 定时任务扩容成功后,如果CPU使用率较低,目标追踪规则会不会把实例缩回去?

    不会。定时任务同步设置了最小实例数,目标追踪规则不会将实例数缩容到最小实例数以下。这就是为什么同时设置最小实例数的关键。

  • 定时任务只修改期望实例数是否可行?

    不建议。仅修改期望实例数存在以下风险:

    • 期望实例数修改后有30秒~1分钟的生效延迟,期间报警任务可能覆盖该值。

    • 即使扩容成功,由于最小实例数未同步调整,目标追踪规则可能将实例数缩容到预期以下。

  • 是否需要在定时任务中同时设置最大实例数?

    通常不需要。最大实例数一般保持一个固定的上限值,以防止异常情况导致实例无限扩容。如果您的业务场景需要在不同时段设置不同的实例上限,也可以在定时任务中同步调整最大实例数

  • 如果不使用目标追踪规则,而是使用简单规则的报警任务,还会有冲突吗?

    是的,同样可能出现冲突。无论报警任务关联的是简单规则步进规则还是目标追踪规则,只要报警任务在定时任务的生效延迟期内触发,都会覆盖期望实例数。本文的解决方案对所有类型的报警任务均适用。

相关文档