云成本优化
云成本管理框架、资源优化策略、预留与Spot实例、存储成本优化、网络成本优化、FinOps实践。
1. 云成本管理框架
1.1 FinOps 定义
FinOps(Financial Operations)是将财务、技术和业务团队结合在一起,通过数据驱动的决策来优化云成本的实践。
FinOps 成熟度模型:
flowchart LR
Crawl[Crawl 爬行<br/>基础可见性、成本分配、标签策略、预算告警] --> Walk[Walk 行走<br/>优化与治理、预留采购、异常检测、团队问责]
Walk --> Run[Run 奔跑<br/>持续优化与自动化、智能伸缩、自动 Right-sizing、单位经济学驱动]
1.2 成本可见性
成本分配标签:
| 标签键 | 描述 | 示例 |
|---|---|---|
| Environment | 环境 | production / staging / dev |
| Team | 团队 | backend / frontend / data |
| Service | 服务 | user-service / order-service |
| CostCenter | 成本中心 | CC-001 / CC-002 |
| Project | 项目 | project-alpha |
成本分析维度:
flowchart TD
T0["总成本"]
T1["按服务: EC2 / S3 / RDS / CloudFront ..."]
T2["按团队: 后端 / 前端 / 数据 / 运维"]
T3["按环境: 生产 / 测试 / 开发"]
T4["按区域: us-east-1 / eu-west-1 / ap-northeast-1"]
T5["按账户: 账户A / 账户B / 账户C"]
T0 --> T1
T0 --> T2
T0 --> T3
T0 --> T4
T0 --> T5
1.3 单位经济学
将云成本与业务指标关联:
常见单位经济学指标:
| 业务类型 | 业务指标 | 单位成本 |
|---|---|---|
| SaaS | 活跃用户数 | $/MAU |
| 电商 | 订单数 | $/订单 |
| 流媒体 | 观看时长 | $/小时 |
| API 服务 | API 调用数 | $/百万调用 |
2. 计算资源优化
2.1 Right-sizing(规格调整)
Right-sizing 是将实例规格匹配实际工作负载需求:
当前: m5.2xlarge (8 vCPU, 32GB)
实际使用: CPU 15%, 内存 40%
推荐: m5.large (2 vCPU, 8GB)
节省: ~75%
Right-sizing 分析流程:
flowchart TD
T0["1. 收集 CloudWatch 指标(14-30天)"]
T1["CPU 利用率"]
T2["内存利用率(需 CloudWatch Agent)"]
T3["网络吞吐"]
T4["磁盘 I/O"]
T5["2. 识别低利用率实例"]
T6["CPU < 40% 持续 14 天"]
T7["内存 < 40% 持续 14 天"]
T8["3. 推荐合适规格"]
T9["基于峰值利用率 + 安全余量"]
T10["考虑突发需求"]
T11["4. 执行调整"]
T12["停机调整(简单)"]
T13["蓝绿替换(零停机)"]
T0 --> T1
T0 --> T2
T0 --> T3
T0 --> T4
T4 --> T5
T5 --> T6
T5 --> T7
T7 --> T8
T8 --> T9
T8 --> T10
T10 --> T11
T11 --> T12
T11 --> T13
2.2 预留实例(Reserved Instances)
| 类型 | 折扣 | 灵活性 | 适用场景 |
|---|---|---|---|
| 标准预留 | 最高 72% | 不可更改实例族 | 稳定工作负载 |
| 可转换预留 | 最高 66% | 可更改实例族 | 需灵活调整 |
| 节省计划 | 最高 72% | 按计算家族承诺 | 灵活承诺 |
折扣为 AWS 官方口径的相对按需价上限,实际折扣随实例族/区域/付款方式浮动, 采购前以官方定价计算器为准。
预留实例购买决策:
例如:m5.large 按需 511($0.058/h):
1年全预付不适用,3年全预付 0.039/h):
3年承诺约 2 年回本。
2.3 Spot 实例
Spot 实例利用云厂商闲置容量,折扣高达 90%:
Spot 实例定价模型:
| Spot 价格/按需价格 | 中断概率 | 风险等级 |
|---|---|---|
| < 30% | < 5%/周 | 低 |
| 30%-50% | 5-10%/周 | 中 |
| > 50% | > 10%/周 | 高 |
Spot 实例最佳实践:
- Spot Fleet:多实例类型 + 多 AZ 分散风险
- Spot 中断通知:2 分钟预警,优雅处理
- 检查点机制:定期保存计算状态
- 混合策略:按需 + Spot 组合
flowchart TD
OD[按需实例 N 个<br/>核心容量,保证基线] + SP[Spot 实例 M 个<br/>弹性容量,可被中断]
OD --> T[总容量 = N + M<br/>保证容量 ≥ N]
SP --> T
2.4 自动伸缩优化
伸缩策略成本优化:
保守策略: min=5, max=20, target=70% CPU
→ 响应快,但可能过度配置
激进策略: min=2, max=20, target=85% CPU
→ 成本低,但可能影响性能
推荐: min=3, max=20, target=75% CPU + 预测性伸缩
→ 平衡成本与性能
预测性伸缩:基于历史数据预测负载,提前扩容:
3. 存储成本优化
3.1 存储分层策略
根据访问频率自动分层:
flowchart TD
Q{数据访问频率?}
Q -->|频繁 >1次/天| S1[Standard]
Q -->|偶尔 >1次/月| S2[Standard-IA]
Q -->|稀少 >1次/年| S3[Glacier Instant]
Q -->|极少 <1次/年| S4[Glacier Deep Archive]
Q -->|未知| S5[Intelligent-Tiering]
生命周期规则成本节省计算:
3.2 EBS 优化
| 优化措施 | 节省幅度 | 实施方式 |
|---|---|---|
| 删除未挂载卷 | 100% | 定期扫描未挂载 EBS |
| 缩减过大卷 | 30-60% | 监控磁盘利用率 |
| 快照清理 | 变化大 | 删除过期快照 |
| gp2 → gp3 | ~20% | gp3 更便宜且性能独立 |
| 降级冷数据卷 | 50%+ | 冷数据用 st1/sc1 |
gp2 vs gp3 成本对比:
300GB 卷,gp2 = 24/月,节省 20%。
3.3 快照优化
快照管理策略:
1. 保留策略: 日快照保留7天,周快照保留4周,月快照保留12月
2. 删除孤立快照: 无关联 AMI 的快照
3. 压缩快照: 使用第三方工具压缩
4. 跨区域复制: 仅复制必要快照
4. 网络成本优化
4.1 数据传输费用
数据传输是云成本中容易被忽视的部分:
| 传输方向 | 费用 |
|---|---|
| 入站到 AWS | 免费 |
| 同区域 EC2 之间 | 免费 |
| 跨区域 EC2 之间 | $0.02/GB |
| 出站到互联网 | $0.09/GB (前10TB) |
| S3 跨区域复制 | $0.02/GB |
4.2 网络优化策略
CDN 卸载:
虽然单价差异小,但 CDN 还减少了 EC2 负载。
VPC Endpoint 节省:
无 Endpoint: EC2 → NAT Gateway → 互联网 → S3
费用: NAT 数据处理费 $0.045/GB + NAT 小时费
有 Endpoint: EC2 → VPC Gateway Endpoint → S3
费用: 免费 (Gateway Endpoint 对 S3/DynamoDB 免费)
S3 传输加速:
远距离上传: 用户(亚洲) → S3(美国)
直接上传: 高延迟,可能超时
Transfer Acceleration: 用户 → 边缘节点 → 优化路径 → S3
额外费用: $0.04/GB (但减少失败重传)
4.3 区域选择
不同区域价格差异:
| 区域 | EC2 系数 | S3 系数 | 数据传出系数 |
|---|---|---|---|
| us-east-1 | 1.00 | 1.00 | 1.00 |
| eu-west-1 | 1.05 | 1.00 | 1.00 |
| ap-northeast-1 | 1.10 | 1.00 | 1.00 |
| ap-southeast-1 | 1.15 | 1.02 | 1.00 |
| sa-east-1 | 1.25 | 1.05 | 1.00 |
上表为量级示意,各区域具体单价与折扣随时间调整,选区前以官方定价页为准; 区域间价差通常在 10-30%,真正的大头往往在跨区/出站流量而不是单价本身。
5. FinOps 实践
5.1 FinOps 团队结构
flowchart TD
F[财务<br/>预算/预测/报告] --> FP[FinOps 平台/流程]
E[工程<br/>优化/架构/自动化] --> FP
B[业务<br/>价值/优先级/ROI] --> FP
5.2 成本告警与预算
多级预算告警:
flowchart TD
T0["月度预算: $100,000"]
T1["50% ($50,000) → 信息通知: '已使用50%预算'"]
T2["80% ($80,000) → 警告通知: '已使用80%预算,请检查'"]
T3["100% ($100,000) → 严重告警: '预算已用完'"]
T4["120% ($120,000) → 紧急告警: '超预算20%,需审批'"]
T0 --> T1
T0 --> T2
T0 --> T3
T0 --> T4
异常检测:
5.3 成本优化看板
关键指标:
| 指标 | 计算 | 目标 |
|---|---|---|
| 浪费率 | 未使用资源成本 / 总成本 | < 10% |
| 预留覆盖率 | 预留实例覆盖的支出 / 可预留支出 | > 70% |
| 单位成本趋势 | 当月单位成本 vs 上月 | 下降或持平 |
| Spot 利用率 | Spot 支出 / 总计算支出 | > 20% |
| 标签覆盖率 | 有标签资源 / 总资源 | > 95% |
5.4 持续优化循环
flowchart LR
I[Inform 告知<br/>成本分配与可视化/预算与告警/异常检测] --> O[Optimize 优化<br/>Right-sizing/预留采购/存储分层/架构优化]
O --> P[Operate 运营<br/>自动化策略/治理与合规/持续监控]
P --> I
5.5 成本优化自动化
自动 Right-sizing:
CloudWatch 指标 → Lambda 分析 → 生成建议 →
自动执行(开发环境)或
人工审批(生产环境)
自动 Spot 中断处理:
Spot 中断通知 → EventBridge → Lambda →
1. 标记实例为 draining
2. 从负载均衡器移除
3. 在新 Spot 实例启动替代
4. 等待优雅关闭
自动快照清理:
每日定时 → Lambda →
1. 列出所有快照
2. 检查关联 AMI
3. 删除超过保留期的孤立快照
4. 发送清理报告
小结
- 初学者要点:成本优化三板斧——右置(规格对齐实际用量)、预留(稳定负载 换折扣)、竞价(可中断负载薅闲置算力);标签是成本归因的前提,没有标签 一切优化都无从谈起。
- 进阶注意:网络出站流量是最隐蔽的成本黑洞,跨区复制与公网出站都要进 预算模型;Spot 必须设计好 2 分钟中断处理(检查点 + 多实例类型池); FinOps 的本质是把成本变成工程团队的日常指标(单位成本趋势),而不是财务 月底的”账单惊吓”。