对象存储是什么
对象存储把数据、用户元数据与系统元数据绑定成一个不可分割的对象,用全局唯一的键(桶名 + 对象键)定位,客户端通过 HTTP 动词式的接口(PUT、GET、DELETE、LIST)读写整个对象。它没有真正的目录,界面里看到的「路径」只是键名里的斜杠前缀,用于组织和列举;好处是命名空间可以平铺到成千上万台服务器上,任意键都能路由到对应节点。因为对象不保留可写的文件描述符,也就无法像文件那样在某处插入几个字节,需要修改只能重新写一份完整对象。
基本信息
| 命名空间 | 扁平结构:桶(Bucket)内是键值对,前缀斜杠仅用于归类与列举 |
|---|---|
| 对象组成 | 数据本体 + 用户自定义元数据 + 系统元数据(大小、校验值、存储类别、版本等) |
| 典型接口 | S3 兼容 API、Swift API,均基于 HTTP/HTTPS |
| 一致性 | 现代实现普遍提供读后写一致与列举一致,跨区域复制则为最终一致 |
| 寻址方式 | 虚拟主机风格 bucket.host/key 或路径风格 host/bucket/key |
常用操作与语义
| 操作 | 语义 | 注意点 |
|---|---|---|
| PUT 对象 | 整对象写入或覆盖 | 同名覆盖是新建版本,不是原地改写 |
| GET 对象 | 整对象读取 | 支持 HTTP Range 分段读,但写入不支持分段 |
| LIST 前缀 | 按前缀列举键 | 海量对象下列举本身是重操作,需分页并使用分隔符 |
| 版本控制 | 保留历史版本 | 会产生不可忽略的存储开销,需配额与生命周期规则 |
| 生命周期 | 按规则转储或删除 | 策略与存储类别分层配合,是控制成本的主要手段 |
典型使用场景
- 备份与归档:一次写入、长期保留、极少读取,生命周期规则可自动下沉到低成本层
- 图片视频与静态资源:直接对外提供 HTTP 访问,配合 CDN 分发
- 日志与埋点数据湖:海量小文件顺序写、按前缀批量分析
- 应用附件与用户上传:无状态服务把文件甩给对象存储,应用节点可随意扩缩
- 容器与云原生:镜像仓库、模型仓库、数据集分发普遍基于对象接口
元数据是对象存储区别于「网盘」的关键:除系统元数据外可以写入自定义键值,并据此做检索与生命周期判断。但元数据的检索能力由具体产品实现决定,不要假设所有实现都支持按任意自定义元数据高效查询。
桶策略与访问密钥是对象存储最常见的失守点:公开可读的桶会直接泄露数据。默认应关闭公有读,使用最小权限的子账号密钥并定期轮换。