产品特性

ESS核心能力

扩容时:
- 自动创建指定数量、指定类型的实例(ECS/ECI实例)
- 如果伸缩组关联了负载均衡,自动为创建的ECS关联负载均衡
- 如果伸缩组关联了RDS,自动将创建的ECS实例IP加到RDS访问白名单中。

缩容时:
- 自动删除实例、取消关联负载均衡,移除RDS白名单


配置步骤

伸缩组 -- 实例来源 -- 伸缩规则 -- 触发任务


实例来源

实例来源可以选择==实例启动模板==和==伸缩配置==两种。

启动模板

  • 用某个自定义镜像启动实例。
  • 创建伸缩组会指定VPC和VSW,如果启动模板也选择了VPC和VSW,则实际伸缩时会用伸缩组中指定的VPC和VSW,替换掉启动模板中的配置。
  • 参数不支持修改,但是支持创建新版本

伸缩配置

两种模式:
- 根据已有实例,创建相同配置的实例出来。
- 从0到1创建。
- 参数可以修改但是不可追溯


伸缩组

定义对哪些ECS实例做扩缩容,定义实例最大最小数量,关联的负载均衡实例、关联的RDS实例等。

  • 最大实例数
  • 最小实例数
  • 期望实例数: https://help.aliyun.com/zh/auto-scaling/user-guide/expected-number-of-instances
    • 在创建伸缩组的时候设置期望实例数,创建出来之后就会自动伸缩到这个数
    • 由于各种触发规则导致的扩缩容,也会自动改变期望实例数
    • 不设置期望实例数,伸缩活动失败时,需要手动重试;而且当伸缩组内存在执行中的伸缩活动时,不能执行新的伸缩活动。
    • 简单规则中设置增加2台,手动触发该规则,会发现期望实例数+2。手动执行简单规则就是通过增加期望实例数,系统自动检测期望实例数来实现的扩缩容。

弹性伸缩策略

  • 优先级策略:在优先级高的可用区扩缩容。如果无法扩容,自动在下一优先级的可用区进行扩缩容
  • 均衡分布策略:在多个可用区均衡分布ECS实例
  • 成本优化策略:指定了多种规格的实例,优先创建vCPU单价最低的实例;优先移除vCPU单价最高的实例

实例移出策略

可以选择优先移除最早创建或者最新创建的实例。

手动添加 vs 自动创建的实例

手动添加进伸缩组的实例,缩容时==不会被删除==,只会被移除出伸缩组;而自动扩容出来的实例,缩容时==会被释放掉==。

包年包月实例在弹性伸缩中的角色

包年包月实例在弹性伸缩中的角色通常是 基础容量保障,用于非波动业务场景,而自动扩缩容主要针对按量付费或抢占式实例。其核心规则为:
1. 永不自动释放,仅移出伸缩组。
2. 优先保留,缩容时最后被移出。
3. 不参与成本策略排序,但需计入实例数限制。

建议将包年包月实例用于稳定负载,而通过伸缩组管理波动流量的弹性实例,以优化成本与资源利用率。


弹性伸缩规则

简单规则

直接定义增加减少多少台

步进规则

基于报警任务(系统监控或者自定义监控):触发某个报警任务后,增加减少多少台

目标追踪规则

e.g. 持续监测CPU使用率,自动伸缩,使得CPU使用率一直保持在==50%==左右

目标追踪规则优于简单规则

相比简单规则,具有以下优点:
- 数据稳定:支持设置实例预热时间,新实例加入伸缩组后,将首先进入实例预热阶段,在此期间不会向云监控上报监控数据,也不作为扩缩容过程的基数实例。预热阶段能够有效防止增加过多实例,达到动态稳定扩缩容效果。
- 实例数不回调:弹性伸缩会及时自动计算所需的实例数量并触发扩缩容,比较精准地将云监控指标维持在目标值附近。
- 实例稳定性高:具有动态稳定区间,根据伸缩组的历史监控数据计算目标值稳定的区间。

可以禁用缩容,这种情况下目标追踪只扩容,可以创建其他规则用来缩容。

预测规则

机器学习预测未来监控指标值。预测结果每天更新一次。
这种监控不准。


触发任务

手动执行

定时任务

cronjob类型来自动伸缩

报警任务

是基于云监控根据CPU使用率等指标进行弹性伸缩。


弹性自愈

弹性伸缩提供健康检查功能,自动监控伸缩组内ECS实例的健康状态。监测到某台实例不健康(即未处于运行中状态),自动释放不健康实例并创建新的实例


生命周期挂钩

挂起实例,可以在挂起期间对实例进行自定义操作。比如在创建ECS实例之后延迟一段时间,测试服务正常后再挂载到负载均衡上接受流量。

添加了生命周期挂钩之后:
- 扩容出新实例的时候,会出现==Pending:Wait==状态,在这期间进行预装软件或其他自定义操作。
- 缩容的时候,出现==Removing:Wait==状态。

适合配置生命周期挂钩的场景

  • 弹性扩容的实例不适合立即为客户端提供服务,比如要加入云数据库,绑定辅助弹性网卡等。或者应用程序需要一定的启动时间
  • 缩容的实例不适合立即被移除,比如需要备份数据,拷贝日志,处理未完成的请求等。

最佳实践

多种模式混合配置

实例生命周期托管

注意:如果选中将实例的生命周期托管给伸缩组,在弹性收缩活动中,将该ECS实例移出伸缩组时也会释放ECS实例。支持将包年包月实例手动添加至伸缩组,但不支持伸缩组托管包年包月实例的生命周期。(ACK包年包月节点池scale out之后,节点会变成游离状态)

注意事项

  • 部署在伸缩组内的ECS实例,需要时==无状态==的,不要存储持久化数据。应用数据、日志存在单独的地方
  • 如果伸缩组关联的RDS实例、ALB/CLB服务器组被删除,那么伸缩组自动解除与该资源的关联;但是伸缩活动不会因为解除关联而停止。
  • 保证ECS级别的事务完整性:即只进行ECS实例级回滚,而不是伸缩活动回滚。比如,创建了20台ECS实例,只有19台成功加入负载均衡,不成功的一台实例会进行自动释放,而不是所有20台都释放掉。
  • 伸缩活动==无法中断==,比如扩容5台,在扩容到第三台的时候无法强行终止。

冷却时间

冷却时间规则

  • 每个伸缩组的最后一个实例成功加入或移出伸缩组时,整个伸缩组的冷却时间才开始计时
  • 同时在伸缩组和伸缩规则中设置了冷却时间,优先使用伸缩规则中的冷却时间
  • 在冷却时间内,只有==云监控报警任务==类型的伸缩活动请求会被拒绝,其他类型的触发任务(手动、定时等)可以绕过冷却时间立即执行伸缩活动。

弹性强度

创建完伸缩组,提示弹性强度较差,因为这些方面:
- 交换机要选择多个可用区的交换机
- 启动模板的配置,要选择多个库存充足的实例规格
- 选择可用区内库存充足的实例规格