自动伸缩组(ASG)基础:工作原理与容量设置

自动伸缩组,圈内人常叫 ASG,是云上弹性最核心的组件。说白了,它就是帮你自动加机器、减机器的管家。我刚开始接触云计算时,觉得手动扩缩容也挺好,直到有一次大促流量瞬间暴涨,我手忙脚乱地登录控制台创建实例……嗯,从那以后,我再也不敢轻视 ASG 了。

ASG 的工作原理

ASG 的核心逻辑其实很简单,就三个动作:监控 → 决策 → 执行。

  • 监控:ASG 会绑定一个监控指标,比如 CPU 平均利用率、网络入流量、或者自定义的业务指标。
  • 决策:当指标超过某个阈值(比如 CPU > 80%),ASG 判断需要扩容;低于阈值(比如 CPU < 30%),则判断需要缩容。
  • 执行:ASG 调用云厂商的 API,自动创建或销毁实例,并自动挂载到负载均衡器后面。

我遇到过不少团队,把 ASG 当成“自动创建机器”的工具,却忽略了它还有一个重要职责——维持健康实例数量。如果某台实例挂了,ASG 会自动把它替换掉。这个特性,说白了就是自愈能力。

核心要点:ASG 不是简单的定时任务,它是一个闭环的控制系统。你给它设定目标,它自己想办法维持住这个目标。

ASG 自动伸缩工作原理 监控指标 阈值判断 扩容(增加实例) 缩容(减少实例) 维持期望容量 CPU、内存、网络流量 或自定义业务指标

创建 ASG 的步骤

创建 ASG 并不复杂,但每一步都有坑。我习惯把它分成五个步骤来讲:

  1. 准备启动模板:这是 ASG 创建实例的“蓝图”。里面包含镜像 ID、实例规格、密钥对、安全组等信息。我个人建议把启动模板和 ASG 分开管理,这样更新模板时不影响已有实例。
  2. 配置伸缩组基本信息:包括组名称、网络(VPC 和子网)、可用区。这里要注意,至少选择两个可用区,否则单点故障时 ASG 也救不了你。
  3. 绑定负载均衡器:如果业务需要对外提供服务,必须把 ASG 挂到负载均衡器后面。新创建的实例会自动注册到目标组,销毁时自动注销。
  4. 设置伸缩策略:这是 ASG 的灵魂。你可以选择简单策略(基于静态阈值)、步进策略(多级阈值)、或者目标追踪策略(自动维持指标在目标值)。
  5. 设置容量边界:也就是最小、最大、期望容量。这一步我单独拿出来讲,因为太重要了。

小技巧:创建 ASG 时,可以先设一个很小的期望容量(比如 1 台),等验证通过后再调大。我曾经因为一次性设了 10 台期望容量,结果启动模板配错了,10 台实例全部创建失败……那叫一个尴尬。

最小 / 最大 / 期望容量详解

这三个参数,是 ASG 的“安全护栏”。理解它们,你就掌握了 ASG 的精髓。

参数 含义 我的建议
最小容量 ASG 保证实例数不低于这个值。即使缩容策略触发,也不会低于它。 设为 1 或 2,保证基础服务能力。生产环境建议 2。
最大容量 ASG 保证实例数不超过这个值。防止扩容失控,烧光预算。 根据业务峰值估算,再上浮 20%-30% 作为缓冲。
期望容量 ASG 启动时的初始实例数。伸缩策略会围绕这个值调整。 通常等于最小容量,或者略高一点。

你想想看,如果没有最大容量限制,万一监控系统误报,或者伸缩策略写错了,ASG 可能会一直创建实例,直到你的账户余额归零。我见过一个真实案例:某团队把最大容量设成了 999,结果一次异常流量触发了扩容,半小时内创建了 200 多台高配实例……嗯,那个月的账单够买一辆车了。

避坑指南:我曾经接手过一个项目,ASG 的最小容量设成了 0。结果某次缩容后,所有实例都被回收了,业务直接停摆。最小容量设 0 要非常谨慎,除非你确定业务可以接受完全无实例的状态。

容量设置的实战建议

我总结了一套容量设置的“黄金法则”,你可以参考:

  • 最小容量 = 日常峰值 × 0.5:保证日常流量波动时,不需要频繁扩缩容。
  • 期望容量 = 日常峰值 × 0.7:留出 30% 的余量应对突发。
  • 最大容量 = 日常峰值 × 2:给极端流量留足空间,但又不至于无限扩张。

当然,这只是经验值。具体数值要根据你的业务特性来调整。比如电商大促期间,我会临时把最大容量调高到日常峰值的 3-4 倍,活动结束后再降回来。

记住:ASG 的容量设置不是一劳永逸的。业务在变,流量在变,你的容量参数也要跟着变。我每季度都会 review 一次 ASG 的配置,看看有没有需要调整的地方。