对象存储概述

大家好,欢迎来到这门课。今天咱们先聊聊最基础的东西——对象存储到底是什么。我刚开始接触存储时,也分不清对象、块、文件这仨到底有啥区别。别说,当年第一次用 AWS S3 的时候,我甚至觉得它就是个云盘。后来踩了坑才明白,完全不是一回事。

什么是对象存储?

对象存储(Object Storage),说白了就是把数据当做一个“对象”来存。每个对象包含三部分:真正的数据、元数据(比如文件名、大小、创建时间)和一个全局唯一的 ID。你想想看,它就像图书馆里的一本书——书的内容是数据,书脊上的编号是 ID,图书馆的目录卡片就是元数据。你只要知道编号,就能找到那本书,不用管它在哪个书架、哪一层。

对象存储的典型代表就是 AWS S3、阿里云 OSS、MinIO 这些。它的核心特点是无层级结构、扁平命名空间,通过 HTTP API 访问,天生适合海量非结构化数据。我在项目中遇到过客户把几十亿张图片存在 OSS 上,检索一张图只需要一次请求,速度飞快。

核心特征:对象存储的访问路径通常是 http://域名/桶名/对象键,而不是文件系统的目录树。

对象存储 vs 块存储 vs 文件存储

这三者的区别,我画了张图帮你直观理解。记住一句话就行:块存储管“盘”,文件存储管“目录”,对象存储管“东西”。

三种存储架构对比 块存储 例如:EBS、SAN、本地磁盘 以固定大小的“块”为单位 通过 SCSI / iSCSI 协议访问 需要格式化文件系统才能用 ② 延迟低,适合数据库 文件存储 例如:NFS、CIFS、NAS 以文件/目录树结构组织 通过 SMB / NFS 协议访问 需要挂载到操作系统 ② 适合共享目录、办公文件 对象存储 例如:S3、OSS、MinIO 以对象(数据+元数据+ID)存储 通过 HTTP RESTful API 访问 无需挂载,直接 URL 访问 ② 扩展性好,适合海量数据 关键区别总结 维度 块存储 文件存储 对象存储 单位 块(512B~4KB) 文件(变长) 对象(变长) 协议 SCSI / iSCSI SMB / NFS HTTP REST 元数据 很少 少量(文件名/时间) 丰富(自定义 tag) 扩展性 受硬件限制 中等 几乎无限 典型场景 数据库、VM 共享文件夹 备份、媒体、日志 💡 提示:选哪种存储,取决于你的数据访问模式和数据量级。
避坑指南:我曾经在项目中直接拿对象存储当文件系统用,遍历目录用 listObjects 带了前缀,结果性能惨不忍睹。后来才意识到——对象存储没有真正的“目录”,前缀只是模拟。别拿它当 NFS 用!

主流对象存储服务

现在市面上用得最多的对象存储服务,我列了个表,方便你对比。我个人习惯根据部署环境来选:公有云用 S3 或 OSS,私有云或边缘直接用 MinIO。

服务 所属公司 API 兼容性 部署方式 我的评价
AWS S3 Amazon 行业标准 公有云 事实标准,学习首选
阿里云 OSS 阿里云 兼容 S3 公有云 国内生态好,文档中文友好
MinIO MinIO, Inc. S3 兼容 自建/私有云 开源轻量,适合测试
华为云 OBS 华为 兼容 S3 公有云/混合云 政企场景多
Ceph RGW 开源社区 S3 兼容 自建分布式 大厂自建首选
注意:虽然大多数对象存储都宣称“兼容 S3 API”,但细节上总有差异。比如分片上传、签名算法版本、桶策略语法。一定要在目标平台做完整测试,别想当然认为复制粘贴就行。

你可能会问:既然都能存对象,为啥要区分这么多家?说白了,就是锁定与生态的博弈。AWS S3 是祖宗,几乎所有 SDK 都优先支持它。但如果你在国内用阿里云,OSS 的内网传输免流量,还能配合 CDN 加速,这就是生态优势。MinIO 呢?我经常在开发环境跑一个 MinIO 容器,本地调试完直接换连接地址上线,无缝切换,相信我,这比每次都连远端 OSS 省事多了。

最后说一句:对象存储的加密上传下载,是本课程的核心。这一章你先记住,对象存储的本质是“通过 HTTP 协议操作对象”,加密只是加了一层安全壳。后面我们会手写 SDK 调用,包括 AES-256 客户端加密、KMS 服务端加密,甚至自己写一个加密中间件。现在打好基础,后面才不慌。