1. 对象存储:你的"智能云仓库"
1.1 对象存储概述
传统文件系统就像你家衣柜:衣服按"上衣/裤子/裙子"分层放,你要找一件衬衫,得先打开衣柜→上衣区→衬衫格。这种"层级嵌套"的模式,在文件数量爆炸时会变得极其笨重。
对象存储则像现代仓储物流:每个包裹都有一个唯一的"快递单号"(对象键),你只需报单号,仓库机器人就能从海量包裹中精准取出。
核心区别一览:
| 维度 | 传统文件系统 | 对象存储 |
|---|---|---|
| 组织方式 | 层级目录树 | 扁平键值对 |
| 访问协议 | POSIX(本地文件操作) | HTTP/REST API |
| 扩展性 | 单机容量有限 | 近乎无限水平扩展 |
| 元数据 | 基础属性(大小、时间) | 丰富的自定义元数据 |
| 典型场景 | 本地办公文档 | 图片/视频/备份/静态资源 |
1.2 对象存储的核心概念
桶(Bucket):你的"仓库分区"
桶是对象存储的顶级容器,相当于一个独立的命名空间。所有对象都必须存放在某个桶中。
命名规则(以阿里云 OSS 为例):
- 全局唯一:在整个云厂商的所有用户中不能重复
- 只能包含小写字母、数字和短横线
- 必须以小写字母或数字开头和结尾
- 长度在 3-63 个字符之间
实战踩坑:曾经有个团队按业务线创建了几十个桶,结果月底账单出来傻眼了——每个桶都有最低存储费用和请求费用。建议:按"环境+用途"组合规划桶,比如 prod-static-assets、dev-backup-archive。
对象(Object):你的"数据包裹"
对象是存储的基本单元,由三部分组成:
键(Key):对象的唯一标识,相当于"快递单号"
- 示例:
images/avatar/2024/user123.jpg - 虽然看起来像路径,但本质只是字符串
- 示例:
数据(Data):对象的内容本身
- 可以是任意二进制数据
- 大小限制取决于云厂商(通常单个对象 5TB 以内)
元数据(Metadata):描述对象的附加信息
- 系统元数据:Content-Type、ETag、Last-Modified 等
- 自定义元数据:如
x-oss-meta-owner、x-oss-meta-project
访问控制:谁能动我的"仓库"?
对象存储提供多层权限控制:
| 层级 | 控制方式 | 典型场景 |
|---|---|---|
| 桶级别 | Bucket Policy(资源策略) | 禁止所有外网访问、只允许特定 IP |
| 对象级别 | ACL(访问控制列表) | 公开图片、私有文档 |
| 临时授权 | STS(安全令牌服务) | 前端直传、移动端上传 |
安全红线:永远不要把 AccessKey ID 和 AccessKey Secret 写在前端代码里!正确做法是:前端向你的后端申请临时 STS 凭证,后端验证身份后返回带过期时间的临时凭证。