一、为什么需要 Auto Scaling(背景)
1️⃣ 高可用 ≠ 高扩展
多一台服务器 → 提高可用性(Availability)
流量暴增 → 仍可能因为容量不足而宕机
所以要解决的是容量问题(Scalability)
二、两种系统架构对比
1️⃣ Active-Passive(主备)
特点
一台 Active 接流量
一台 Passive 备用
出问题 → 切换
扩展方式:Vertical Scaling(纵向扩展)
什么是纵向扩展?
把服务器“变大”
换更大的实例类型
例如:t2.micro → t3.large
问题
必须停机才能改实例类型
完全是 手工操作
有 硬上限
超过上限 → 需要拆系统、重构应用
❌ 不适合云环境
❌ 不适合突发流量
2️⃣ Active-Active(多活)
特点
多台服务器 同时接流量
所有实例地位相同
前面通常有 Load Balancer
扩展方式:Horizontal Scaling(横向扩展)
什么是横向扩展?
加机器 / 减机器
2 台 → 4 台 → 10 台
不改应用逻辑
✅ 云原生
✅ 弹性
✅ 自动化
三、无状态(Stateless)是关键前提
为什么 Active-Active 要求 Stateless?
不把 Session 存在 EC2 本地
数据存在:
DynamoDB
S3
RDS
ElastiCache
这样:
任意实例都能处理请求
扩容 / 缩容不影响用户
四、Amazon EC2 Auto Scaling 是什么?
一句话定义(面试版)
Amazon EC2 Auto Scaling 是一个根据 CloudWatch 指标,自动添加或移除 EC2 实例,以保持性能稳定并降低成本的服务。
Auto Scaling 解决的两个核心问题
| 问题 | 解决 |
|---|---|
| 流量变化 | 自动扩 / 缩 |
| 实例故障 | 自动替换 |
既负责扩展,又负责高可用
五、ELB + Auto Scaling 的关系
1️⃣ 为什么要配合 ELB?
Auto Scaling:管数量
ELB:管流量
它们分工明确。
2️⃣ ELB 的健康检查(Health Check)
ELB 只会把流量转发给 健康实例
支持两种健康检查方式
1️⃣ TCP
能否建立连接
不关心应用逻辑
2️⃣ HTTP / HTTPS
请求指定路径
判断 HTTP 返回码(如 200)
👉 生产中更推荐 HTTP/HTTPS
3️⃣ 自动联动机制
ASG 新建实例 → 自动注册到 Target Group
ASG 删除实例 → 自动从 Target Group 移除
不健康 → ELB 不转发流量
六、传统扩展 vs Auto Scaling
传统方式(On-Prem 思维)
为 峰值 买服务器
夜间 / 低峰 → 大量闲置
成本高、浪费严重
Auto Scaling(云思维)
按需创建
按秒/分钟计费
自动应对突发流量
用多少,付多少
七、EC2 Auto Scaling 的三大组件(必背)
1️⃣ Launch Template(启动模板)
作用
定义 EC2 如何被创建
包含内容
AMI
实例类型
安全组
EBS
IAM Role
User Data
特点
支持版本控制
可回滚
推荐使用(替代 Launch Configuration)
2️⃣ Auto Scaling Group(ASG)
作用
定义 在哪里、以多少规模运行 EC2
关键配置
部署位置
VPC
Subnets(至少两个 AZ)
购买方式
On-Demand
Spot
混合
容量三要素(面试高频)
| 参数 | 含义 |
|---|---|
| Minimum | 永远保持的最少实例数 |
| Maximum | 成本和容量上限 |
| Desired | 当前希望运行的实例数 |
ASG 的默认行为
扩容 → 用 Launch Template 创建新实例
缩容 → 默认删除最旧实例
实例不健康 → 自动替换
3️⃣ Scaling Policies(扩展策略)
决定:什么时候扩 / 缩
基于:
CloudWatch Metrics
CloudWatch Alarms
八、三种 Scaling Policy 对比(重点)
1️⃣ Simple Scaling
一个 Alarm → 一个动作
有 cooldown
不灵活
示例:
CPU > 65% → +1 实例
2️⃣ Step Scaling
不同阈值 → 不同扩展幅度
示例:
CPU > 85% → +2
CPU > 95% → +4
3️⃣ Target Tracking
思想
你只告诉我目标,我自动调
示例:
平均 CPU = 60%
AWS 自动:
创建 alarms
扩 / 缩实例
✅ 简单
✅ 推荐
✅ 实战常用
九、Auto Scaling 用于“高可用”而非扩展
如果你这样配置:
Min = 4
Desired = 4
Max = 4
含义:
不扩容
只做 实例替换
始终保证 4 台在线
十、完整逻辑一图理解(文字版)
CloudWatch 监控指标 ↓ Scaling Policy 决策 ↓ Auto Scaling Group ↓ Launch Template ↓ EC2 Instances ↓ Target Group(健康检查) ↓ ELB 分发流量十一、面试一句话总结
“EC2 Auto Scaling automatically adjusts the number of EC2 instances based on CloudWatch metrics. It works with launch templates to define how instances are created, Auto Scaling Groups to define where and how many instances run, and integrates with ELB to distribute traffic only to healthy instances.”