对象存储概述:它到底是什么?
说实话,我第一次接触对象存储时也被搞蒙了。以前做传统IT运维,天天跟SCSI命令、LUN、文件系统路径打交道,突然冒出来一个“对象”,我脑子里全是问号。但它本质上就是另一种存东西的方式——而且现在云上几乎所有非结构化数据都在用它。
从物理磁盘到逻辑存储的三条路
数据存到磁盘上,总得有个组织方式。这么多年下来,业界主要就仨方案:块存储、文件存储、对象存储。我画了张图帮你理解它们之间的关系。
块存储?文件存储?它们有什么不一样
我用一个表格帮你快速对比三种存储的核心差异。这个表我每次给团队培训都会拿出来讲,简单粗暴。
| 维度 | 块存储 | 文件存储 | 对象存储 |
|---|---|---|---|
| 数据组织 | 块/扇区 | 文件+目录树 | 对象+桶 |
| 访问接口 | SCSI、iSCSI | NFS、SMB | HTTP RESTful |
| 典型产品 | SAN、EBS | NAS、EFS、Azure Files | S3、OSS、COS、GCS |
| 扩展性 | 受限于控制器/网络 | 目录树瓶颈 | 近乎无限(扁平) |
| 元数据能力 | 极弱(只有块地址) | 文件名、时间、权限 | 丰富自定义元数据 |
| 适用场景 | 数据库、VM磁盘 | 共享文档、代码库 | 备份、影音、日志、AI训练 |
举个例子,你公司如果跑着大型Oracle RAC,底层大概率是块存储——因为需要低延迟、SCSI命令直通。但如果要共享几百个Word文档给销售团队,文件存储(NAS)更合适。而一旦碰到海量图片、视频、日志文件,块存储和文件存储都会卡在高额扩容成本和目录树上限上。这时候对象存储就登场了。
对象存储的工作原理——说白了就是“存东西+贴标签”
每个对象存为一个独立的实体。它包含三个部分:变长的二进制数据(比如一张1MB的宠物照片)、一堆自描述的元数据(拍摄时间、作者、GPS坐标、自定义标签),以及一个全局唯一的对象ID(通常是一个HTTP URL)。
对象存储采用扁平命名空间,没有目录层级。所有对象都扔进一个个“桶”(Bucket)里。你可以把桶理解为一个巨大的容器,里面可以放任意数量的对象。访问对象时直接通过HTTP GET https://bucket.example.com/object-id 就行。
我刚开始用S3时,总觉得没有文件夹好别扭。后来发现,你完全可以通过对象Key模仿目录结构,比如 images/2025/04/photo.jpg,本质上只是一个字符串,并不是真正的目录。这种扁平设计让对象存储的扩展性几乎没有上限——我曾帮一个视频平台管理过PB级数据,每秒数千个请求,用传统NAS根本扛不住。
对象存储的典型应用场景
几乎你听说过的云原生应用,底层都离不开对象存储。我列几个常见的,你看看是不是都有影子。
- 静态网站托管:把HTML/CSS/JS直接放进桶里,配个静态网站托管功能,不用Web服务器就能跑。
- 备份与归档:重要数据定期备份到对象存储,支持生命周期管理,自动迁到低成本的冷存储或冰川层,我见过不少公司用这个替换磁带。
- 大数据与AI训练:训练集、数据集直接以对象形式存储,Spark和TensorFlow都可以通过S3协议高效读取。
- 多媒体内容分发:图片、视频上传后在CDN层加速,对象存储作为源站,配合签名URL做防盗链。
- 日志和物联网数据:海量设备上报日志直接写入对象存储,再用分析引擎查询,成本极低。
一个真实案例:我之前服务的一家在线教育公司,每天产生约5TB的录播视频。之前用CIFS共享文件存储,一年后目录数上千万,ls命令都要十几秒。迁移到对象存储后,问题全消失了。而且我们给每个视频对象挂了自定义元数据(教师ID、课程ID、时长),检索效率翻了好几倍。
小经验:做对象存储选型时,记得关注S3 API兼容性。现在AWS S3是事实标准,市面上大部分对象存储(包括开源MinIO、Ceph RGW、阿里云OSS)都兼容S3 API。我建议优先选API兼容度高的,避免后面被绑定。
避坑提醒:曾经有个项目把数据库binlog直接全量写到对象存储,忽略了桶内对象版本控制。一次误删除把旧备份全吞了。后来我养成了习惯——所有生产桶默认开启版本控制,并且配上跨区域复制。数据安全怎么做都不过分。
总结一下这一章的核心
对象存储用扁平空间、元数据驱动、HTTP API访问的模式,完美解决了海量非结构化数据的存储难题。它和块存储、文件存储是互补关系,不是替代关系。理解它们的区别,能帮你后续在做架构设计时选对合适的存储底座。
嗯,这一章先聊到这。内容不复杂,但都是地基。后面我们会一步步带大家手把手实现SSE-KMS加密,那才是真正的重头戏。