云存储成本优化:节省高达70%
用经过验证的优化策略降低云存储成本。存储类别选择、生命周期策略与成本监控技术全解析。
将云存储账单削减50-70%,依赖按顺序执行的五个动作:将温数据从 S3 Standard(约0.17元/GB/月)迁移到 S3 Glacier Instant(约0.03元/GB/月)或 Backblaze B2(约0.04元/GB/月),通过 Cloudflare R2(零出口费)消除用户侧下载的出口成本,将冷数据归档到 Glacier Deep Archive(约0.007元/GB/月),清除孤立的分段上传和未完成的快照,并用 CloudWatch 或 Azure Cost Management 告警执行团队预算。一个100TB工作负载在 S3 Standard 上每月约1.7万元,切到 Glacier Instant 降至约5千元,切到 Deep Archive 降至约700元——70%这个数字不是营销话术,是算术。
削减之前先绘制支出地图
没有测量的优化是猜测。在改动任何东西之前,生成存储清单:
aws s3api list-buckets --query 'Buckets[].Name' --output text | \
xargs -I{} aws s3 ls s3://{} --recursive --summarize
更好的方案:运行 S3 Storage Lens 或 Azure Cost Management 的存储分析器。你需要每个存储桶的对象数量、总字节数、平均对象大小以及跨存储类别的分布情况。80/20法则几乎总是成立——一两个存储桶占80%的支出,优化就从那里着手。
给每个存储桶打上 owner、env、project 和 lifecycle-policy 标签,这样成本报告能映射到能真正采取行动的人。
为每种访问模式选择正确的存储类别
存储类别的存在,是因为单一价格无法匹配所有工作负载。大致分层:
- 热数据(每日读取):S3 Standard、Azure Hot、GCS Standard。低延迟溢价。
- 温数据(每月读取):S3 Standard-IA、Azure Cool、GCS Nearline。便宜40-60%。
- 冷数据(每季度读取):S3 Glacier Instant、Azure Archive、GCS Coldline。比 Standard 便宜80%。
- 归档(年度或从不读取):Glacier Flexible / Deep Archive。便宜95%。
文件放错类别的代价是双倍的:要么在高级类别上多花钱,要么每次访问冷文件都付取回费。Glacier Deep Archive 取回费约每GB 0.14元加每请求费;取回1TB数据一次,仅取回费就超过140元,超过存储节省的部分。
新存储桶的安全默认:S3 Intelligent-Tiering,根据使用情况自动在访问层之间移动对象。每千个对象约0.18元的监控费,对于访问模式不可预测的工作负载值得。
自动承担重任的生命周期策略
典型的生命周期策略能独立减少60%的支出:
{
"Rules": [{
"ID": "age-out",
"Status": "Enabled",
"Transitions": [
{ "Days": 30, "StorageClass": "STANDARD_IA" },
{ "Days": 90, "StorageClass": "GLACIER_IR" },
{ "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
],
"Expiration": { "Days": 2555 },
"AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
}]
}
将阈值与实际访问衰减模式匹配。对于事务日志,14天热、30天温、90天冷有效。对于媒体归档,第一次转移可以是90天以上。AbortIncompleteMultipartUpload 这行至关重要——废弃的分段上传会静默积累数百GB计费存储,而你在对象列表中完全看不到它们。
消灭出口成本
出口费通常是云存储账单的30-50%,也是最容易单点突破的项目。选项:
- Cloudflare R2:零出口费,S3兼容,约0.11元/GB存储。对于用户侧 CDN 支持的下载,是显而易见的选择。
- Backblaze B2 + Cloudflare Bandwidth Alliance:到 Cloudflare 出口免费,然后由 CDN 处理用户端。
- Wasabi:每月出口量不超过存储量1倍时免费。
- AWS S3 + CloudFront:CloudFront 出口(约0.62元/GB)比直接 S3 出口便宜,且同区域的 S3 到 CloudFront 出口费为零。
对于内部工作负载,为 S3 启用 VPC Gateway Endpoint——这消除了 NAT Gateway 处理费(如果不注意,这项费用可能超过存储费用)。对于跨区域复制,明确指定区域并最小化流量,将跨区域出口保持在约0.14元/GB以下。
压缩与去重
在为存储付费之前,先减少需要存储的内容:
- 文本与日志:zstd 压缩通常达到8:1比率。10TB日志压缩后存储为1.25TB。
- 图像:PNG重新编码为 WebP 或 AVIF,用户侧资产缩小60-80%。
- 视频:H.265或 AV1 替代 H.264,同等质量下文件小30-50%。
- 备份:restic 和 Borg 在快照间去重——1TB工作集每日备份在30天留存下约存储1.2TB。
压缩是用 CPU 换字节。存储成本约0.17元/GB/月,EC2 计算约0.36元/小时,压缩投入几乎总在数天内收回成本。
删除你忘记的东西
长期运行的账户会积累审计前看不见的浪费:
- 孤立 EBS 快照:比源卷更旧,或90天以上且无标签的快照
- 旧版 AMI:每次部署发布新 AMI;旧版在注销前一直计费
- 启用版本控制但无生命周期的存储桶:每个对象版本都计入存储,且版本控制默认开启
- 日志留存:CloudWatch Logs 默认无限期留存,意味着数年的计费日志
- 废弃存储桶:离职员工的项目、多年前迁移留下的测试环境
用 AWS Trusted Advisor 或在非生产账户中运行 aws-nuke 进行季度扫描,识别候选项。对于生产环境,在删除前向所有者发出两周弃用通知,并在删除后30天内保留恢复快照。
预留容量与节省计划
AWS 和 Azure 都为可预测存储提供预付费折扣。AWS S3 存储类别没有预留,但 EBS 和 EFS 通过计算节省计划提供。Azure 为 Blob 存储提供预留容量——承诺100TB一年,节省约17%。
预留只在能自信预测用量时才值得。如果还在优化阶段,先做优化。在低效存储上的预留容量只是提前预付浪费。
监控支出并告警
月度成本审查太滞后——你需要每日信号。配置:
- 每日异常告警:通过 AWS Cost Anomaly Detection 或 Azure Anomaly Detection。当任何服务的每日支出相比7天均值偏差超过20%时,通过微信企业消息或飞书机器人推送通知。
- 每存储桶预算:在预计月支出的80%、100%和120%处设置硬告警。
- 出口尖峰告警:任何单一存储桶在一小时内 GET 流量超过基线2倍,是泄露的预签名 URL 或爬虫的信号。
- 增长预测:外推存储增长6个月,标记按当前趋势会超出预算的存储桶。
仪表盘固然好,但告警胜过仪表盘。没人在账单来之前主动查看仪表盘。
治理:将成本作为关键指标
不持续的成本优化会回退。使节省持续的三个实践:
- FinOps 审查:每团队每月30分钟会议,聚焦各自的前三大成本驱动因素和一个行动项。
- 成本回拨或展示:将云成本分配给产品线。负责新分析功能的团队能感受到 S3 PUT 费用的压力。
- 要求成本估算的 PR 模板:Terraform PR 中的新基础设施应包含每月增量估算(Infracost 可自动插入)。
HexaTransfer 通过只存储密文(无预览生成、无服务端解密)并使用零出口费对象存储来控制成本。免费试用 hexatransfer.com——无需注册,单次最大10GB。
将所有内容整合在一起
100TB工作负载的实际6个月计划:第1周,清点和标记所有存储桶;第2-3周,应用30/90/365天转移的生命周期策略;第2个月,将用户侧下载迁移到 R2 并消除出口成本;第3个月,用 zstd 压缩日志并重新编码媒体;第4个月,清理孤立快照、旧版 AMI 和废弃存储桶;第5个月,建立 FinOps 审查和每日成本告警;第6个月,支出稳定后评估预留容量。完成这个计划的团队,通常能在50-70%的节省区间落地,不需要任何宏大的重新架构——只是在精心划定范围的小动作上持续用心。