$ aws ec2 describe-instance-types
你的 EC2 实例选大了吗?根据 AWS 自己的数据,平均有 57% 的 EC2 实例都是"过大"的。Right-Sizing(合理选型)是最快、最简单的云成本优化手段之一,今天我们就来深入聊聊这个话题。
什么是 Right-Sizing?
Right-Sizing 的核心思想很简单:你的资源应该刚好满足业务需求,既不浪费也不瓶颈。具体来说:
- Over-provisioned(过大) —— CPU/内存长期低于 40%,多付了冤枉钱
- Under-provisioned(过小) —— 资源经常打满,性能受影响
- Right-sized(刚好) —— 资源利用率合理,成本效益最优
如何判断实例是否过大?
CloudWatch Metrics 关键指标
| 指标 | 说明 | 过大信号 | 过小信号 |
|---|---|---|---|
| CPUUtilization | CPU 使用率 | 长期 < 20% | 长期 > 80% |
| MemoryUtilization | 内存使用率 | 长期 < 50% | 长期 > 85% |
| NetworkIn/Out | 网络流量 | 持续很低 | 经常打满 |
| EBSBytesUsed | 磁盘使用 | 大量空闲空间 | 频繁达到上限 |
# 查看实例 CPU 使用率 aws cloudwatch get-metric-statistics \ --namespace AWS/EC2 \ --metric-name CPUUtilization \ --dimensions Name=InstanceId,Value=i-xxxxx \ --start-time 2025-04-01 \ --end-time 2025-05-01
AWS Compute Optimizer
AWS Compute Optimizer 是官方推荐的分析工具,它使用机器学习分析你的资源使用模式,并给出 Right-Sizing 建议:
- EC2 —— 建议合适的实例类型和大小
- EBS —— 建议卷类型和大小
- Lambda —— 建议内存配置
- Auto Scaling Groups —— 建议 ASG 配置
# 查看 Compute Optimizer 推荐 aws compute-optimizer get-ec2-instance-recommendations \ --instance-names instance-id-1
Right-Sizing 实施步骤
Step 1: 收集基线数据
至少收集 14-30 天的数据,覆盖一个完整业务周期:
- 生产环境通常需要至少 2 周数据
- 如果有季节性业务(如电商大促),需要覆盖整个周期
- 注意区分工作日和周末的差异
Step 2: 识别过度配置的资源
通过 Cost Explorer 按 UsageType 分组,查看低利用率实例:
- CPU < 20% 且持续时间 > 14 天的实例
- 内存在过去 30 天内从未超过 50%
- 没有任何出站流量的实例
Step 3: 分析并制定降级计划
不是所有低利用率实例都应该降级:
- Core servers —— 数据库主节点,即使利用率低也不能降级
- Burst instances —— T 系列实例设计用于 burst,不适合只看平均值
- Reserved instances —— 已购买的 RI,降级会导致浪费
Step 4: 执行变更(安全第一)
对于需要调整的实例:
- 测试环境先验证新配置
- 生产环境选择低峰期操作
- 使用 Auto Scaling Group 配合 ELB 实现平滑切换
- 降级后监控 72 小时确认稳定性
常见误区
- 误区 1:只看峰值 —— 应该综合平均值、P95、峰值
- 误区 2:一次性做完 —— Right-Sizing 是持续过程
- 误区 3:忽视业务增长 —— 为未来留 10-20% 余量
- 误区 4:降级所有低利用率 —— 区分核心和非核心
Right-Sizing + Spot 实例组合策略
最佳实践:先用 Right-Sizing 选出合适的基线大小,然后用 Spot 实例跑非关键工作:
- t3.medium -> t3.micro (Spot) —— 开发测试
- m5.large -> c5.large (Spot) —— 批处理作业
- r5.xlarge -> r5.large (Spot) —— 缓存服务
ROI 计算
假设你将 100 台 m5.xlarge($0.192/小时)降级为 m5.large($0.096/小时):
- 每小时节省:$9.6
- 每月节省(30天 x 24小时):约 $6,912
- 每年节省:约 $83,000
这是一次性工作(分析+调整),但节省是持续性的。典型的 Right-Sizing 项目 ROI 周期在 1-3 个月。
不要让你的 EC2 账单为 AWS 的"产能过剩"买单!