图片、视频、日志和备份文件的量一般只增不减。如果都堆在自建服务器上,扩容、备份和容灾很快就会占满运维的时间。阿里云 OSS(Object Storage Service)是更省心的替代方案。这篇文章从存储类型怎么选、费用怎么控制两个角度,讲讲实际使用时要注意的地方。

先弄清 OSS 的三个基本概念
Bucket 是存储空间,也是数据的容器。名称在全球范围内唯一,并且绑定地域,地域一旦选定就不能直接修改,建的时候要想清楚放在哪里。Object 是存储的基本单位,由文件内容、元信息和 Key 组成。Key 可以包含斜杠,比如 images/2024/banner.png,看起来像目录,但底层其实是扁平结构。OSS 通过前缀和分隔符模拟目录,所以“目录”更多是给人看的。这种设计能支撑大量对象的并发读写,也是它适合放静态资源和数据湖的原因。
存储类型怎么选
OSS 的存储类型从标准到深度冷归档,访问频率越低,单位存储单价越低,但读取时的限制和费用会增加。大致可以这样对应:
- 标准存储:访问频繁的热数据,比如网站图片、App 素材。
- 低频访问存储:每月访问不多,但读取时需要快速返回,比如历史订单附件。
- 归档存储:很少访问,读取前需要先解冻,适合长期合规留存。
- 冷归档和深度冷归档:几年才调取一次的备份,单位存储成本最低,取回也最慢。
选型时最容易踩的坑是把数据存得太短。低频和归档类存储一般有最小存储时长,没到期就删除或转换,仍然要按最小时长计费。取回数据也会产生费用。所以数据生命周期很短的话,频繁在类型之间转换反而更贵。动手前先想清楚数据大概会保留多久、会被读多少次,再决定放哪一类。
费用通常由哪几部分组成
很多人只看存储单价,忽略了其他账单项。OSS 的费用一般包括存储容量费、请求次数费、外网流量费,以及低频和归档类存储的取回费。前两项和数据量、操作频率相关,后两项和读取方式强相关。
省钱要从这几项分别下手。文件特别碎、数量很多时,请求次数费会明显上升,可以考虑合并小文件,或者减少不必要的列举操作。外网下载流量大的场景,把静态资源交给 CDN 回源,通常比每次都从 OSS 直接出流量更划算。至于低频和归档数据,先确认业务真的不会频繁读取,否则取回费会把前面省下的存储费吃掉。
一个电商图片的实际做法
某中型电商团队遇到的问题很典型:商品详情图和促销海报都放在应用服务器上,大促期间带宽被占满,页面加载慢,备份还要运维手动跑脚本。他们后来的调整大致是这样的:
- 静态图片迁到标准存储的 Bucket 里,按业务线用前缀分开,比如 product/、promo/。
- CDN 以 OSS 作为源站,静态资源由边缘节点就近返回。源站压力降下来后,大促时的页面卡顿明显减少。
- 前端按需请求缩略图,并使用 WebP 格式,移动端的流量消耗也随之下降。
- 设置生命周期规则:上传超过 180 天的大促素材转为低频访问存储,一年以上的日志转归档。这一步能省下不少存储费,但规则要和业务的访问习惯对得上,别一刀切。
调整之后,服务器带宽成本明显下降,备份也从人工脚本变成了版本控制加跨地域复制。这个例子说明,OSS 的价值不只在于存得下,还在于能和 CDN、函数计算这些服务接起来,形成完整的链路。
权限和安全,别在这上面省
对象存储最常见的事故,多半出在权限配置上,Bucket 被误设成公共读写就是典型例子。下面几条看似基础,但很容易被忽略:
- 用 RAM 子账号并遵循最小权限原则,别在代码里直接使用主账号的 AccessKey。
- 前端直传这类场景用 STS 临时凭证,有效期设短一点,即使泄露也很快失效。
- 敏感数据开启服务端加密,定期检查访问控制列表和公共访问设置。新建 Bucket 后也要看一眼默认权限。
- 开启访问日志和版本控制,误删或遭遇攻击时才有地方追溯和恢复。
接入方式怎么挑
ossutil 适合运维和批量操作,各语言 SDK(Java、Python、Go、Node.js 等)用于集成到应用里,控制台适合日常查看和小规模管理。大文件上传建议使用分片上传,配合断点续传,网络抖动时只重传失败的分片,不必整个文件从头再来。
OSS 本身不复杂,真正花时间的是规划 Bucket 结构、存储类型和权限模型。这些在项目初期定下来,后面的成本和运维压力会小很多。如果还在评估,可以先拿一个非核心业务试跑,确认费用和访问模式符合预期,再推广到主要场景。