
阿里云弹性伸缩(Elastic Scaling Service,简称 ESS,也称 Auto Scaling)是根据业务需求和策略自动调整 ECS 实例数量的管理服务。流量高峰时自动扩容增加实例处理请求,流量低谷时自动缩容释放多余实例节省成本,整个过程不需要人工干预。
ESS 本身完全免费,不收取任何服务费用。使用 ESS 产生的费用来自它创建和管理的资源——ECS 实例、SLB 负载均衡、RDS 数据库白名单操作等,这些资源按各自的计费规则独立计费,ESS 只是控制这些资源的数量变化。
核心概念:伸缩组、伸缩配置与伸缩规则
理解 ESS 的三个核心组件,是配置弹性伸缩的前提。三者之间的关系是:伸缩组定义了实例的上下限和关联的云产品,伸缩配置定义了创建什么样的实例,伸缩规则定义了如何伸缩。
伸缩组(Scaling Group) 是 ESS 的基础容器,所有伸缩活动在伸缩组的范围内执行。创建伸缩组时需要指定:最小实例数(伸缩组内始终保持的最低实例数量,低于这个数量时自动扩容补齐)、最大实例数(伸缩组内允许的最高实例数量,超出这个上限后不再扩容)、伸缩组所在的 VPC 和虚拟交换机,以及关联的 SLB 实例和 RDS 实例。伸缩组中的实例数量始终保持在最小值和最大值之间,超出范围的扩缩容请求不会被执行。
伸缩配置(Scaling Configuration) 定义了 ESS 扩容时创建的 ECS 实例规格:实例规格族(如 ecs.c6.xlarge)、系统镜像、安全组、密钥对、实例标签、RAM 角色和用户自定义数据。每个伸缩组可以有多个伸缩配置,但同一时间只有一个伸缩配置处于生效状态。修改伸缩配置后,不影响已有实例,只对后续新创建的实例生效。
伸缩规则(Scaling Rule) 定义了一次伸缩活动的具体动作:增加几台实例、减少几台实例,或者将实例数量调整到指定值。伸缩规则本身不触发伸缩活动,触发来自定时任务或告警任务。一个伸缩组可以配置多条伸缩规则,对应不同的触发条件和伸缩幅度。
五种伸缩模式
ESS 支持五种伸缩模式,每种模式适合不同的业务流量特征,且所有模式可以组合使用,互相补充。
定时模式
定时模式按照预设的时间点或 Cron 表达式触发伸缩活动,适合流量高峰时间可以预判的场景。视频平台每周五晚上 20:00 有节目首播流量激增,可以设置定时任务在每周五 19:50 自动扩容 20 台实例;凌晨 2:00 流量回落后,设置另一个定时任务自动缩容释放。
定时模式的特点是可预期、执行精确,在已知流量峰谷规律的场景下成本最可控。不足之处是只能应对已知的流量变化,如果某次活动的实际流量远超预期,预设的定时扩容量不够,仍然需要动态模式作为补充。
动态模式(告警触发)
动态模式基于云监控的性能指标自动触发伸缩,最常用的指标是 CPU 使用率和内存使用率。当伸缩组内所有实例的平均 CPU 使用率超过 70% 时,触发扩容规则增加 2 台实例;当平均 CPU 使用率低于 30% 并持续 10 分钟时,触发缩容规则减少 1 台实例。
动态模式适合流量不可预测的场景,响应实际负载变化,不依赖提前预判。但动态模式有响应延迟——从指标超阈值到新实例就绪通常需要 1–5 分钟,对于瞬间突发的流量高峰(如秒杀开始的瞬间)来不及响应。这类场景应该用定时模式提前扩容,动态模式作为兜底。
目标追踪模式
目标追踪模式是动态模式的进阶版,不需要用户定义触发阈值和伸缩幅度,而是指定一个目标指标值,ESS 自动计算需要扩缩多少实例来维持目标值。例如,设定 CPU 使用率维持在 50%,ESS 自动调整实例数量使实际 CPU 使用率尽量接近 50%,既不浪费资源(使用率过低),也不让服务器过载(使用率过高)。
目标追踪模式的配置比动态模式更简单,不需要为扩容和缩容分别设置阈值和规则,适合对 CPU 利用率有明确管理目标的场景。
步进伸缩模式
步进模式允许根据指标偏离目标值的幅度,执行不同规模的伸缩。CPU 使用率在 60%–70% 时扩容 1 台,在 70%–80% 时扩容 3 台,超过 80% 时扩容 10 台——随着情况紧急程度增加,响应也随之加大。适合对响应速度有精细要求的生产环境。
固定模式与健康模式
固定模式通过最小实例数配置,始终保持伸缩组内有指定数量的健康实例运行,是保障最低可用实例数的基础能力。健康模式在此基础上增加了实例健康检测:ESS 自动检测伸缩组内每台实例的健康状态,发现不健康实例(如 ECS 实例停止、状态异常)时自动将其移出并创建新实例替补。
创建伸缩组:关键配置项
在阿里云控制台搜索「弹性伸缩」,进入后点击「创建伸缩组」,以下配置项需要重点判断:
实例数量边界: 最小实例数建议设为业务正常运行所需的最低实例数,这些实例会始终保持运行,即使没有流量也不会被缩容。最大实例数设为能够覆盖历史最高峰值的实例数量上限,防止扩容时超出预算。
多可用区配置: 生产环境建议在伸缩组中配置多个可用区的虚拟交换机,扩容时 ESS 按照配置的可用区均衡策略创建实例,避免所有实例集中在同一可用区,实现跨可用区高可用。
扩缩容策略: 默认的优先级策略按虚拟交换机的配置顺序依次尝试创建实例,当优先级更高的可用区资源不足时自动降级到下一个。成本优化策略优先创建抢占式实例(Spot 实例,价格低 60–80%),当抢占式实例资源不足时自动切换为按量付费实例,适合对成本敏感且业务可以容忍实例被回收的场景。多可用区均衡策略在扩容时优先选择实例数量最少的可用区,维持各可用区实例数量均衡。
伸缩配置(ECS 规格): 建议在伸缩配置中配置多个备选实例规格,当首选规格库存不足时自动使用备用规格扩容,避免库存紧张导致扩容失败。关于 ECS 实例规格族的选型判断,可以参考阿里云 ECS 完整教程。
创建伸缩组的 CLI 示例:
aliyun ess CreateScalingGroup \
–RegionId ap-southeast-1 \
–ScalingGroupName production-sg \
–MinSize 2 \
–MaxSize 20 \
–DefaultCooldown 300 \
–VSwitchIds.1 vsw-xxxx \
–VSwitchIds.2 vsw-yyyy \
–LoadBalancerIds.1 lb-xxxx \
–MultiAZPolicy BALANCE
与 SLB 和 RDS 的自动联动
ESS 和 SLB、RDS 的联动能力,是弹性伸缩能够真正在生产环境落地的关键。没有这个联动,扩容出来的新实例无法自动接收流量,缩容时实例直接被释放也会导致连接中断。
SLB 联动: 在伸缩组中关联 SLB 实例后,扩容时新创建的 ECS 实例自动被添加到 SLB 的后端服务器组,加入后立即开始接收 SLB 分发的流量;缩容时,ESS 先将目标实例从 SLB 的后端服务器组移出(此时该实例不再接收新请求),等待设定的连接耗尽时间(默认等待正在处理的请求完成),再将实例停止并释放,整个缩容过程对用户无感知。关于 SLB 的配置和后端服务器组管理,可以参考 阿里云负载均衡 SLB 指南与说明。
RDS 联动: 在伸缩组中关联 RDS 实例后,扩容时新 ECS 实例的内网 IP 自动加入 RDS 的访问白名单;缩容时该实例的 IP 自动从白名单移出。不需要手动维护 RDS 白名单,消除了新实例因为白名单未更新而无法连接数据库的问题。
冷却时间:防止频繁伸缩
冷却时间(Cool Down)是两次伸缩活动之间的最小间隔,默认 300 秒(5 分钟)。在冷却期间,即使监控指标再次超出阈值,ESS 也不会立即触发下一次伸缩活动,而是等待冷却时间结束后再重新判断。
冷却时间的作用是防止实例在扩容后 CPU 利用率尚未反应过来就再次触发扩容,或者缩容后指标反弹立刻触发再次扩容,形成频繁震荡,产生大量不必要的实例创建和释放操作。
冷却时间的设置需要根据实例启动时间和业务特性判断。如果应用在实例启动后需要 3 分钟完成初始化才能接收流量,冷却时间至少应设为 3–5 分钟,确保新实例就绪并加入 SLB 后,指标有足够时间反映真实负载,再决定是否继续扩容。设置过短会导致频繁伸缩,设置过长会让系统在高负载下持续等待,不能及时补充实例。
伸缩配置中的实例自定义数据
实例创建后通常需要执行一系列初始化操作:安装软件、拉取配置文件、注册到服务注册中心、启动应用进程。在伸缩配置中填写用户自定义数据(User Data),实例启动后会自动执行这段脚本,完成所有初始化操作后实例才加入 SLB 接收流量。
#!/bin/bash
# 拉取最新应用配置
aws s3 cp s3://config-bucket/app.conf /etc/app/app.conf
# 安装应用依赖
pip install -r /opt/app/requirements.txt
# 启动应用
systemctl start myapp
# 等待应用启动完成
sleep 30
systemctl status myapp
用户自定义数据在实例每次启动时执行,替代了人工登录配置的步骤,让扩容出来的实例完全自动化地完成从创建到上线的全过程。脚本执行完成前,实例不会被加入 SLB,确保只有完成初始化的实例才接收用户流量。
常见使用场景
电商促销活动
促销活动的流量特点是时间可知、峰值难以精确预测。最佳实践是定时模式和动态模式组合:在活动开始前 30 分钟设定时任务提前扩容到预估峰值容量的 80%,同时保留动态模式,当 CPU 使用率超过 70% 时继续补充扩容,活动结束后动态缩容释放资源。这个组合既避免了流量突增时扩容来不及响应的问题,也不需要长时间保持高配额实例运行。
视频直播和游戏服务器
流量不可预测,峰谷波动大,适合动态模式为主、结合固定实例数保障基础可用性。设置最小实例数保障正常业务,动态模式根据 CPU 和网络指标自动扩缩,利用成本优化策略在扩容时优先创建抢占式实例,高峰期大幅降低算力成本。
批量计算和数据处理
任务启动时扩容大量实例并行计算,任务完成后立即缩容到零(最小实例数设为 0)。通过自定义模式由任务调度系统触发扩缩容,完全按实际计算需求付费,不为等待下次任务的空闲期付费。
账号开通与代理充值
使用 ESS 需要有效的阿里云国际版账号,ESS 控制台可以直接进入使用,不需要额外申请开通。通过 阿里云账号出售 渠道获取的高权重账号,ECS 实例配额更宽松,在促销活动扩容大量实例时不容易遭遇配额不足,1 分钟交付,免实名免绑卡。
对于通过 ESS 长期运行生产业务、月均 ECS 消耗在 $500 以上的团队,通过 阿里云国际合作伙伴 充值可以获得赠金返点($100 到账 $110,$500 到账 $600,$1000 到账 $1250),赠金适用于 ESS 扩容创建的所有 ECS 实例费用,付款支持 USDT 和对公转账,年度实际成本明显低于官网直充。


