前置知识: 云计算

云成本优化

6 min高级

云成本管理框架、资源优化策略、预留与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 单位经济学

将云成本与业务指标关联:

单位成本=云总成本业务指标\text{单位成本} = \frac{\text{云总成本}}{\text{业务指标}}

常见单位经济学指标:

业务类型业务指标单位成本
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 官方口径的相对按需价上限,实际折扣随实例族/区域/付款方式浮动, 采购前以官方定价计算器为准。

预留实例购买决策:

盈亏平衡点=预付费用按需小时价−预留小时价\text{盈亏平衡点} = \frac{\text{预付费用}}{\text{按需小时价} - \text{预留小时价}}

例如:m5.large 按需 0.096/h,1年全预付预留0.096/h,1年全预付预留 511($0.058/h):

盈亏平衡=5110.096−0.058=13,447 小时≈560 天\text{盈亏平衡} = \frac{511}{0.096 - 0.058} = 13{,}447 \text{ 小时} \approx 560 \text{ 天}

1年全预付不适用,3年全预付 1,022(1{,}022(0.039/h):

盈亏平衡=10220.096−0.039=17,930 小时≈747 天\text{盈亏平衡} = \frac{1022}{0.096 - 0.039} = 17{,}930 \text{ 小时} \approx 747 \text{ 天}

3年承诺约 2 年回本。

2.3 Spot 实例

Spot 实例利用云厂商闲置容量,折扣高达 90%:

Spot 实例定价模型:

Spot 价格=市场供需决定\text{Spot 价格} = \text{市场供需决定} 中断概率∝Spot 价格按需价格\text{中断概率} \propto \frac{\text{Spot 价格}}{\text{按需价格}}
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 + 预测性伸缩
  → 平衡成本与性能

预测性伸缩:基于历史数据预测负载,提前扩容:

预测负载(t)=α×历史负载(t−7d)+(1−α)×趋势(t)\text{预测负载}(t) = \alpha \times \text{历史负载}(t - 7d) + (1-\alpha) \times \text{趋势}(t)

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]

生命周期规则成本节省计算:

月节省=数据量×(当前单价−目标单价)−检索费\text{月节省} = \text{数据量} \times (\text{当前单价} - \text{目标单价}) - \text{检索费}

3.2 EBS 优化

优化措施节省幅度实施方式
删除未挂载卷100%定期扫描未挂载 EBS
缩减过大卷30-60%监控磁盘利用率
快照清理变化大删除过期快照
gp2 → gp3~20%gp3 更便宜且性能独立
降级冷数据卷50%+冷数据用 st1/sc1

gp2 vs gp3 成本对比:

Cgp2=容量(GB)×$0.10/GBC_{\text{gp2}} = \text{容量(GB)} \times \$0.10/\text{GB} Cgp3=容量(GB)×$0.08/GB+max⁡(0,IOPS−3000)×$0.005+max⁡(0,吞吐−125)×$0.04C_{\text{gp3}} = \text{容量(GB)} \times \$0.08/\text{GB} + \max(0, \text{IOPS} - 3000) \times \$0.005 + \max(0, \text{吞吐} - 125) \times \$0.04

300GB 卷,gp2 = 30/月,gp3=30/月,gp3 = 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 出站费−CloudFront 费)\text{CDN 节省} = \text{可缓存流量} \times (\text{EC2 出站费} - \text{CloudFront 费}) =可缓存流量×($0.09−$0.085)=$0.005/GB= \text{可缓存流量} \times (\$0.09 - \$0.085) = \$0.005/\text{GB}

虽然单价差异小,但 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 区域选择

不同区域价格差异:

区域价格系数=目标区域价格us-east-1 价格\text{区域价格系数} = \frac{\text{目标区域价格}}{\text{us-east-1 价格}}
区域EC2 系数S3 系数数据传出系数
us-east-11.001.001.00
eu-west-11.051.001.00
ap-northeast-11.101.001.00
ap-southeast-11.151.021.00
sa-east-11.251.051.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

异常检测:

异常分数=∣实际成本−预测成本∣标准差\text{异常分数} = \frac{|\text{实际成本} - \text{预测成本}|}{\text{标准差}} 若异常分数>3⇒触发告警\text{若异常分数} > 3 \Rightarrow \text{触发告警}

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 的本质是把成本变成工程团队的日常指标(单位成本趋势),而不是财务 月底的”账单惊吓”。