AWS Auto Scaling
AWS Auto Scaling Deep Dive
AWS Auto Scaling 允许你根据定义的条件自动增加或减少资源容量,确保在需求高峰时保持性能,在需求低谷时降低成本。它不仅限于 EC2,而是能够横跨多种 AWS 服务进行资源管理。
第一章:基础概念与架构
1.1 核心价值
- 提高可用性 (Availability):自动替换不健康实例,确保高峰期有足够资源。
- 降低成本 (Cost Optimization):低谷期自动减量,避免为闲置资源付费。
- 自动化管理:消除人工干预,实现系统自愈。
1.2 Auto Scaling Group (ASG)
ASG 是管理 EC2 实例集合的逻辑单元:
- 容量设置:
- Minimum (最小容量):ASG 必须保持的最少实例数。
- Maximum (最大容量):允许扩展到的最大实例数,防止成本失控。
- Desired Capacity (期望容量):当前应运行的数量。ASG 会不断监控以确保实际数量等于期望值。
- 跨可用区平衡 (AZ Rebalancing):ASG 会尝试在多个可用区 (AZ) 之间均匀分布实例。如果某个 AZ 的实例过多,它在缩容时会先在该 AZ 终止实例。
第二章:启动配置 (Launch Configuration) vs 启动模板 (Launch Template)
定义“扩展时启动什么样机器”的基础配置。
| 特性 | Launch Configuration (旧) | Launch Template (新/推荐) |
|---|---|---|
| 可修改性 | 不可修改 (Immutable),必须新建替换 | 支持版本控制 (Versioning),可轻松修改并保存 |
| 特性支持 | 较少,不支持新特性 | 支持 T2/T3 无限模式、Spot Fleet、专属主机等 |
| 混合策略 | 单一实例类型 | 混合实例策略:支持在同一 ASG 混合按需与 Spot,以及不同类型组合 |
| 使用建议 | 遗留系统使用 | 新项目首选,更灵活且支持更多高级属性 |
第三章:扩展策略 (Scaling Policies)
3.1 动态扩展 (Dynamic Scaling)
- 目标跟踪 (Target Tracking):最推荐。设置目标值(如“保持 CPU 50%”),ASG 自动创建警报并自动伸缩。
- 步进扩展 (Step Scaling):根据警报严重程度分阶段操作。如 CPU > 50% (+1),> 80% (+3)。
- 简单扩展 (Simple Scaling):基于单一警报执行单一操作,强依赖于冷却时间 (Cooldown) 以防止抖动。
3.2 预测性扩展 (Predictive Scaling)
- 机制:使用机器学习分析历史流量模式,提前预置容量。
- 优势:消除了响应式扩展的延迟,使实例在流量到达前就绪。目前仅适用于 EC2 Auto Scaling。
3.3 计划扩展 (Scheduled Scaling)
- 机制:基于已知的时间表(如 Cron 表达式)进行扩展。比如每周五下午 5 点或每月第一天。
第四章:健康检查与生命周期
4.1 健康检查 (Health Checks)
- EC2 Status Checks (默认):仅监控基础设施或系统层。Web 应用挂了但 OS 没挂时,检查可能仍显示健康。
- ELB Health Checks (推荐):关联负载均衡器。如果 ELB 发现应用层(如 HTTP 200)响应失败,ASG 会自动终止并替换该实例。
- Standby 状态:将实例设为 Standby 可暂时将其移出服务进行排错,此时不会触发健康检查。
4.2 冷却时间与预热
- Cooldown (冷却时间):在扩展完成后暂停后续操作(默认 300s),主要用于简单扩展。
- Warmup (实例预热):用于步进/目标跟踪策略,让新实例在产生有效指标前不计入聚合计算。
4.3 生命周期挂钩 (Lifecycle Hooks)
在实例启动 (Pending:Wait) 或终止 (Terminating:Wait) 时暂停流程,以便执行自定义脚本(如下载代码、上传日志、清理缓存)。默认等待 1 小时。
第五章:终止策略 (Termination Policies)
当 ASG 需要缩容 (Scale In) 时,决定先删除哪台实例:
- 默认策略 (Default):
- 优先选实例最多的可用区 (AZ Rebalancing)。
- 选择使用最旧启动模板/配置的实例。
- 选择最接近下一个计费小时的实例。
- 自定义策略:
OldestInstance:删除最旧实例(用于升级整个组)。NewestInstance:删除最新实例(用于测试)。Scale-In Protection:受保护的实例不会因缩容而被终止。
第六章:高级运维功能
- 实例刷新 (Instance Refresh):滚动更新 ASG 中的实例(如更新 AMI)。支持检查点 (Checkpoints) 和回滚。
- 热池 (Warm Pools):维护一组预初始化(已启动并停止)的实例,显著缩短扩展时的启动时间。
- 根卷替换 (Root Volume Replacement):在不替换整个实例的情况下刷新根 EBS 卷。
第七章:Application Auto Scaling
Auto Scaling 是一项通用服务,除 EC2 外还支持:
- Amazon ECS:调整任务 (Task) 数量。
- Amazon DynamoDB:调整预置读写容量 (RCU/WCU)。
- Amazon Aurora:动态调整读取副本的数量。
- AWS Lambda:调整预置并发量。
第八章:安全性与定价
- 安全性 (IAM):使用 Service-Linked Role (AWSServiceRoleForAutoScaling) 赋予 ASG 调用 EC2、ELB 等服务的权限。
- 定价:Auto Scaling 服务本身免费。仅对所创建的 EC2、CloudWatch 警报或相关底层资源按正常费率收费。
第九章:最佳实践总结 (Exam Tips)
- 高可用性 (HA):始终跨至少两个 AZ 部署,设置 Min 值 > 0。
- 健康检查配置:如果使用了负载均衡器,务必启用 ELB Health Checks。
- 扩容与缩容不平衡:通常扩容要敏捷,缩容要平缓,以确保用户体验优先。
- 故障排查:如果实例启动后立即终止,检查 Grace Period(宽限期)是否过短,或 User Data 脚本是否报错。
- 成本优化:结合 混合实例策略,利用 Spot 实例节省高达 90% 的成本。
第十章:认证考试高频场景实战
Question 1
一家公司正在其 VPC 中构建两层 Web 应用程序。数据层使用 OLTP 数据库,Web 层需要具备弹性和可扩展性。应使用哪些服务构建 Web 层?
- Elastic Load Balancing, Amazon EC2, and Auto Scaling
- Elastic Load Balancing, Amazon RDS with Multi-AZ, and Amazon S3
- Amazon RDS with Multi-AZ and Auto Scaling
- Amazon EC2, Amazon DynamoDB, and Amazon S3
正确答案:1。Web 层的扩展与弹性核心组件即为 ELB + ASG + EC2。
Question 2
某 CRM 应用在上午 9 点到下午 5 点被广泛使用,用户抱怨早晨启动时性能慢。哪种策略最有效?
- 基于 CPU 的动态扩展。
- 基于内存的动态扩展。
- 基于已知时间表的计划扩展 (Scheduled Scaling)。
- 预测性扩展。
正确答案:3。既然高峰时间完全可预测,使用计划扩展在办公开始前预置容量是操作上最有效的。