技术文章2026 年 4 月 10 日约 5.8 分钟

华为云 OBS 对象存储:海量数据存储与管理实战

对象存储的价格表其实是一张时间表:存储费、请求费、取回费、最短存储期四条曲线此消彼长。想省钱不是选更便宜的档,而是想清楚这份数据多久被读一次。

对象存储最反直觉的一点是:它的价格表其实是一张时间表。

容量单价从"标准"到"低频"到"归档"一路下降,看起来是三个档位、越冷越便宜。但每一档背后都对应一个关于时间的假设:这份数据多久会被读一次、被读的时候要多久拿到、以及你打算把它放多久。选错了档,省下的容量费会从另外三条曲线上加倍还回来。

#一、四条曲线,不是一条

把对象存储的成本拆开,任何一次访问都在同时消耗四项:

项目与什么相关什么时候变成主要成本
存储费容量 × 时长 × 档位单价数据量大、留存久
请求费请求次数(按类型计价)小文件多、访问频繁
取回费 / 数据取回从冷档读出的数据量归档被误当在线用
最短存储期提前删除也要按最低时长计费生命周期规则写太激进

第三行和第四行是最容易翻车的地方,而且它们的失败方式很不一样:取回费是"你读了不该读的数据",最短存储期是"你删了不该删的数据"——后者更隐蔽,因为它在你什么都没做的时候产生账单。

#二、存储类别不是"档位",是访问假设

把类别理解成"好/中/差"会得出错误结论。更准确的理解是:每一类都写着一句关于访问的假设。

类别隐含的假设违反假设时的表现
标准随时可能被读,延迟要低无风险,只是贵
低频一个月可能读一两次请求费占比明显上升
归档类一年读几次,能接受解冻等待取回要等,应用会超时;取回费高

第二行的"请求费占比上升"值得留意:低频档的存储单价下降,但请求单价通常高于标准档。一个"文件很小、被读很频繁"的场景放在低频档,很可能总成本反而更高。判断方法很简单:算一下 平均文件大小 ÷ 每月访问次数,太小就说明请求费会是主项。

#三、生命周期规则:唯一能自动执行"时间"的机制

在对象存储里,唯一能把"时间"变成自动动作的东西就是生命周期规则。它决定了数据从热到冷、从存到删的整个旅程。

这件事的意义超出省钱本身:没有生命周期规则的存储桶,容量会单调增长,因为删除永远不会有人主动做。这和私有云里"回收资源"是同一个问题——只是这里可以自动化。

一条典型的多段式规则大致长这样(语法各家略有差异,这里写的是结构,具体请对照你手上的文档):

text
第 0 天起      → 标准
第 30 天起     → 低频
第 180 天起    → 归档
第 365 天起    → 删除(或再降一档)
```

三个必须注意的点:

1. **前缀/标签要能真的区分数据。** 如果所有对象都堆在同一个前缀下,"分阶段"就无从谈起——**生命周期规则的设计,实际上是在要求你设计 key 的命名结构**。
2. **删之前要确认没有依赖。** 备份目录被删掉一周后才发现,这类事故的根源是"没人知道这个桶里有什么"。
3. **最短存储期与转档时间要互相兼容。** 转入归档后立即删除,可能付出比"多存一个月"更高的成本。

## 四、上规则之前,先看访问分布

这是我最想强调的一条实践:**在写生命周期规则之前,先确认访问模式真的符合你的假设。**

原因很实在——**规则一旦生效,它就开始改变数据的位置;而"冷档"的数据要重新变热,是需要代价的。** 如果假设错了,你要做的是反向搬运,成本比当初省下的高得多。

可用的判断材料通常是这几样:

- **访问日志**(开了服务端日志的话):谁在什么时候读了哪些前缀。
- **监控指标**:请求次数与流量按前缀/类别的分布。
- **应用侧的知识**:哪些数据是"冷备但必须能立刻取出"(比如合规留存、事故取证)——**这类数据不该进归档档**,因为它的要求是"随时可取",与"便宜"是直接冲突的。

最后这一类数据常被误放进归档,然后在下一次审计来临时集中取回,账单出现一个尖峰。**"合规要求保留"不等于"可以放最冷的档"**——要看的是"被取出时的时限要求"。

## 五、请求费被放大的三种情形

小文件场景下,请求费往往比存储费更值得关注。它主要在三种情形下被放大:

1. **海量小对象**:同样 1TB 数据,1KB 一个对象和 10MB 一个对象,请求次数差四个数量级。**聚合小文件**(打包成归档格式)几乎总是划算的。
2. **列表操作**:`list` 类操作按次计价,遍历超大前缀很贵。**目录式的穷举查询在大桶上是反模式**——需要索引就自己维护一份,别指望用列举代替数据库。
3. **重复取回**:没有客户端缓存的读取会把同一次请求重复付很多遍。加一层 CDN 或本地缓存,往往比换存储档位省得更多。

第 2 条还有一个非成本的理由:**超大前缀的列举会变慢**,而且慢得不稳定。这在删除整个目录这类操作上会变成运维体验问题。

## 六、对象存储没有"目录",这个事实会漏进应用设计

对象存储的 key 是平坦的,`a/b/c.txt` 里的斜杠只是字符。这个事实会以几种方式漏进应用:

| 你的直觉 | 实际的语义 | 后果 |
| --- | --- | --- |
| "删除这个目录" | 逐个删除匹配前缀的对象 | 大前缀上耗时且可能部分失败 |
| "重命名目录" | 复制 + 删除 | 大目录上是 O(n) 的数据搬运 |
| "文件已被覆盖" | 版本控制开启时旧版本仍在计费 | 容量增长但没人知道原因 |
| "读到的就是最新的" | 有版本控制/多段上传时语义更复杂 | 读到中间状态 |

第三行特别值得留意:**版本控制是好功能,但它的成本效应是"删除不等于释放容量"。** 如果开了版本控制又配了生命周期删除,规则里通常需要同时处理"当前版本"和"历史版本"——只删当前版本的规则,在这个桶上几乎不省空间。

## 七、这篇没写什么

- **没写具体价格与档位名称。** 这些变动频繁,请以官方价格页为准;这篇讲的是结构,不是数字。
- **没写 SDK 用法与签名机制。** 那是接入层的内容,且各语言 SDK 差异不小。
- **没写跨区域复制与灾难恢复。** 这是一个独立课题(RPO/RTO、复制费用、删除的传播语义),塞进来会两边都讲不透。
- **没给生命周期参数推荐值。** 30/180/365 只是结构示例。**真正该由访问日志决定**——没有日志就定规则的,是在赌。

一句话收束:对象存储的省钱办法,从来不是"选更便宜的档",而是**先回答"这份数据多久会被读一次、被读时要多快拿到"**。这两个问题回答不了,再便宜的价格表也用不对。

写于 2026 年 4 月 10 日

栏目
技术文章
约
5.8 分钟
字数
2.6K
阅读
1

本文为原创记录,转载请注明出处。如果这篇替你省了时间,欢迎留言说说你踩到的坑。

同题 · related

留言 · remarks

00 条

还没有留言,来说点什么吧。

华为云 OBS 对象存储:海量数据存储与管理实战 · LXH·BLOG