3.4 生命周期与数据处理:存储费降了七成
安全配好之后的第二个月,账单来了。我逐条看 COS 的费用明细,发现存储费占了大头,而其中绝大部分花在几乎没人看的旧图上:社区有三分之一以上的存储容量被 90 天前的图片占着,这些图每天贡献的请求不到总量的百分之几,却按标准存储的最高档位和我最常访问的热图一起计费。这就像把冬天的棉被天天挂在最贵的衣柜里,而且这件棉被你一年也未必摸一次。
本篇讲我怎么靠生命周期规则把这笔钱压下去,以及怎么用数据处理能力让图片既小又快。先说结论:同样一批图,存储费降了大约七成。
账单复盘:钱花在哪了
先把账单摊开看。COS 的费用明细在控制台可以按存储桶拉出来,我导出之后按存储类型和目录分了组,结论很扎眼:
| 费用项 | 占比(约) | 我的判断 |
|---|---|---|
| 标准存储费 | 存储费的大头 | 其中三分之二是 90 天前的旧图 |
| 外网流量费 | 第二大 | 接 CDN 后大幅下降,第四篇细聊 |
| 请求费 | 很小 | 量级够大才需要在意 |
重点显然是第一项:旧图占着最贵的存储位。它们不是没价值,偶尔还有老用户翻自己的图库,所以不能删,只能挪到便宜的地方——这正是存储类型要解决的问题。
想自己在家用硬盘做冷数据归档也行,但运维成本不低,具体对比可以看我另一本[NAS 与家庭服务器实战](/books/nas-home-server-guide)。不过对线上项目来说,还是云上的存储类型切换更省事。
先搞懂存储类型
COS 提供多档存储类型,核心区别是存得越冷,单价越低,但取回要收费或有延迟。下面这张表是我决策时用的框架,价格不写具体数字(活动价常变),只写相对关系:
| 存储类型 | 存储费(相对标准存储) | 取回费 | 读取延迟 | 适合 |
|---|---|---|---|---|
| 标准存储 | 基准 1 | 低 | 毫秒级 | 高频访问的热图 |
| 低频存储 | 明显更低 | 按数据量收 | 毫秒级 | 偶尔访问的长尾图 |
| 归档存储 | 远低于标准 | 较高,需解冻 | 需要等待 | 几乎不看的存档 |
| 深度归档 | 最低 | 最高 | 等待更久 | 合规留档 |
选型的核心只有一个问题:这批图多久没人看。访问难以预测就选标准,明显长尾就低频,确定不再翻就归档。拿不准的时候,宁可选偏热的那一档,先跑两个月看访问数据再往下调。 |
低频存储是最值得说的那一档:读延迟和标准一样,实际访问体验几乎无差别,只是取回要按量收费。这意味着对一年没被点开过几次的图来说,低频存储几乎是个免费的午餐。归档和深度归档更便宜,但读取需要先解冻,适合做备份而不是给用户看。
生命周期规则:让旧图自己搬家
存储类型虽好,但总不能让用户传图时先选存哪档。生命周期规则就是自动档:给存储桶加一条规则,对象存活到指定天数后,自动转换存储类型或删除。配置在控制台的生命周期管理里,整个社区我只加了两条规则:
| 规则 | 触发条件 | 执行动作 |
|---|---|---|
| 历史图转冷 | 对象创建 30 天后 | 转入低频存储 |
| 历史图深归档 | 对象创建 180 天后 | 转入归档存储 |
第一条规则吃下大部分红利:按之前的访问数据,一张图过了 30 天基本就长草了,转低频之后这部分容量的单价直接降一个档位。第二条是保险,超过半年的图归档处理,单价再降一级。删除规则我没敢配全自动,怕误删数据,归档存着也不贵,成本和风险要平衡。
规则是分目录生效的,这也是 3.2 篇里我强调用带日期层级 Key 的原因。热图目录和用户头像目录我可不想被统一降温,规则只对历史图目录开。当时幸亏上传时 Key 规划好了,不然还得先搬家。
配置操作本身在控制台的生命周期管理里完成:新建规则、勾选生效目录、设置转换条件和目标类型,保存即生效。规则名称用能看懂的格式,比如历史图转冷,免得半年后自己都不知道这条规则在干嘛。另外,规则只对配置之后新产生的对象立刻按规则运转,已存在的对象也会被扫描处理,只是首批转换会有延迟,不是按下开关账单立刻变。
效果和要注意的代价
规则上线后的第二个月,存储费降到原来的三成左右,也就是降了七成。这个数字对每个项目会不一样,取决于旧图占比和访问分布,但逻辑是通的:把冷数据按冷价算钱。
具体怎么算的可以拆开看一遍:假设总容量里有三成是热图、七成是旧图,旧图里大部分超过 30 天。规则生效后,那部分旧图单价从标准档降到低频档,而低频档的存储单价只有标准档的几分之一(具体比例以官方价格页为准)。过去为冷数据付的是热价,现在各归各位。账单曲线最诚实:规则生效后的第一个完整账期,存储费那根线直接矮了一截。
意外收获是加载速度也变快了。旧图转低频之后访问体验毫无差别,配合缩略图和 CDN 缓存,用户翻老图库的时候反而比以前流畅——降本和体验在这里不是冲突,而是同方向。啰嗦一句配置时机:生命周期规则随时可改,但已经转过一次的对象不会自动回热,规则调整后新对象按新规则走。所以第一次配置前把冷热分界点想清楚,宁可保守一点。
有几个代价必须提前知道。第一是低频存储有最短存储期限要求,对象提前删除可能仍按最短时长计费,所以生命周期规则的天数别设太短,我故意从 30 天起步。第二是低频和归档取回要收费,如果某个目录突然被外部又翻火了,取回费可能比省下的还多,好在监控曲线异常我们立刻就能注意到。第三是归档对象读取前要解冻,不能给用户实时返回,所以归档只适合明确没人看的图。
第三条代价我差一点踩破。某次运营想做一个两年前的活动回顾,直接把归档目录的图往页面里塞,结果那一批图全部读取失败。解决办法是临时发起解冻(归档解冻需要等一段时间),活动结束再让它们继续沉睡。从此我立了个规矩:业务端访问的图最冷只到低频,归档只留给纯粹的备份留档。这个分工写成表格贴在墙上之后,再没人问为什么老图打不开了。
数据处理:上传后自动变小
降到三成里还有一截是数据处理省下的。COS 自带图片基础处理能力:同一张原图,在 URL 后面拼上处理参数就能得到压缩版或缩略图,原图不动,不需要我自己跑压缩服务。
缩略图 URL 长这样:
https://pic-community-1250000000.cos.ap-shanghai.myqcloud.com/pics/2026/10/cat.jpg?imageMogr2/thumbnail/!50p
!50p 表示按百分之五十缩放。列表页全部走缩略图,详情页才请求原图,这一步直接把外网流量降了一个量级。移动端流量贵,用户感激,我也省钱。存储侧也顺手做了压缩处理,相比原始 JPEG,体积小一截,清晰度几乎看不出来差别。
我用这套能力主要做两件事:一是列表页缩略图,二是小图缓存。配合 CDN 一起,缩略图在边缘节点被缓存住,用户再刷列表几乎不产生回源。这套组合的整体思路和站点性能优化是相通的,更多经验可以参考站点性能与地图优化实战。有一处细节提醒:处理参数是拼在 URL 后面的,换一种尺寸就要换一个参数串,CDN 会把带不同参数的 URL 当成不同文件缓存,所以尺寸样式提前规划好,别上线后改来改去,否则缓存命中率会很难看。至于本地积累的设计素材和截图,整理归档可以看笔记知识库整理指南,云端和本地的文件管理思路是相通的。
这套组合拳打完,COS 的账单从大头变成了小零头。总结一下我的降本路线图:先按目录分冷热,再让生命周期规则自动转冷,最后用缩略图压流量。三步都不需要写代码,控制台点几下就配好。其中最容易忽略的是第一步:如果上传时 Key 没分层,冷热数据混在一个目录里,后面两步都无从下手。这也是为什么我把规划这件事看得比操作重要。
如果你的项目也有一堆沉睡的文件占着昂贵的存储位,强烈建议先把生命周期规则配上,几分钟的配置换长期的账单瘦身。正在凑齐全套云资源的朋友,云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中这个入口值得先逛逛,新用户的特惠力度最大。
存储降本的故事讲完,下一篇进入 CDN 加速。图片放好了,接下来要让全国用户打开都快。
延伸阅读
- COS 快速入门:存储类型与生命周期的官方说明都在文档里。
- NAS 与家庭服务器实战:自建存储的扩容与冷热分层思路对比。
- 站点性能与地图优化实战:站点加载性能优化的更多经验。
