本节摘要:云存储有三种基础模型——对象存储(OSS/S3/COS)、块存储(EBS/ESSD/CBS)、文件存储(EFS/NAS/CFS)。它们不是"同一种东西的不同实现",而是为不同访问模式设计的不同抽象。本节讲清楚三种模型的不可替代性,用"自建一个图片服务"的真实案例展开,最后给一张"我的业务该用哪种存储"的决策表。

阅读完本节,你应当能够:
很多新手以为"对象存储便宜又无限大,把所有数据都放进去就好"——然后尝试在 S3/OSS 上跑 MySQL 或视频编辑软件,结果性能惨不忍睹。
举一个反例:某团队 2022 年为了"省成本"把 MySQL 的数据文件存到 S3 上,结果一次简单的 SELECT COUNT(*) 查询要 45 秒——而同样查询在 EBS 上只要 50 毫秒。差异 900 倍。原因:对象存储的"对象"是不可变的大文件块(最小 1 个,常见 4MB-5GB),随机读一条记录要先 GET 整个对象,IOPS 通常只有 100-1000,而 EBS 能到 10000+。
正解:数据库 = 块存储;图片/视频/备份 = 对象存储;共享文件系统 = 文件存储。它们是工具箱里的三把不同扳手。
| 维度 | 对象存储 | 块存储 | 文件存储 |
|---|---|---|---|
| 访问协议 | HTTP REST(PUT/GET/DELETE) | 块设备协议(xvdb/vdb) | NFS/SMB 协议 |
| 容量上限 | 无限(PB 级) | 单盘 64TB | PB 级 |
| 典型延迟 | 50-200ms(首字节) | 0.5-2ms(随机读) | 2-10ms |
| IOPS | 100-1000 | 10000-100000 | 数千-数万 |
| 吞吐量 | 高(适合大文件) | 高(适合随机 IO) | 中(适合顺序 IO) |
| 典型用途 | 图片、视频、备份、静态网站 | 数据库、系统盘 | 共享文件、容器持久化 |
| 计费 | 按 GB/月 + 请求次数 | 按 GB/月 + 性能等级 | 按 GB/月 + 吞吐 |
| 存储类型 | AWS | 阿里云 | 腾讯云 |
|---|---|---|---|
| 对象存储 | S3(Simple Storage Service) | OSS(Object Storage Service) | COS(Cloud Object Storage) |
| 块存储 | EBS(Elastic Block Store) | ESSD / SSD 云盘 | CBS(Cloud Block Storage) |
| 文件存储 | EFS(Elastic File System) | NAS(文件存储) | CFS(Cloud File Storage) |
| 归档存储 | S3 Glacier | 归档存储(OSS Archive) | COS 归档 |
| 冷归档 | S3 Glacier Deep Archive | 冷归档存储 | COS 深度归档 |
某图片分享应用,2023 年的存储架构:
| 数据 | 存储 | 月存储量 | 月成本 |
|---|---|---|---|
| 用户原始图(5MB/张) | 阿里云 OSS 标准存储 | 50TB | 5000 元 |
| 用户缩略图(200KB/张) | 阿里云 OSS 标准存储 | 2TB | 200 元 |
| 30 天前的原图 | OSS 低频存储(IA) | 200TB | 8000 元 |
| 90 天前的原图 | OSS 归档存储 | 500TB | 4500 元 |
| 数据库(PostgreSQL) | ESSD PL1 500GB | 500GB | 1500 元 |
| 合计 | 约 19200 元 |
关键策略:用"生命周期规则"自动把数据从标准层降到低频层、再降到归档层。1 个 OSS 生命周期配置 = 每月省 5000 元,且无需人工干预。
{ "Rules": [ { "ID": "downgrade-old-images", "Status": "Enabled", "Prefix": "user-original/", "Transitions": [ { "Days": 30, "StorageClass": "IA" }, { "Days": 90, "StorageClass": "Archive" }, { "Days": 365, "StorageClass": "ColdArchive" } ] } ] }
AWS S3 用 LifecycleConfiguration,腾讯云 COS 用 LifecycleRule,结构类似。
| 业务场景 | 推荐存储 | 理由 |
|---|---|---|
| 用户上传图片/视频 | 对象存储(S3/OSS/COS) | 容量无限、按量便宜 |
| MySQL/PostgreSQL 数据 | 块存储(EBS/ESSD/CBS) | 低延迟、高 IOPS |
| 容器共享配置文件 | 文件存储(EFS/NAS/CFS) | 多 Pod 同时挂载 |
| 网站静态资源 | 对象存储 + CDN | 出向流量走 CDN |
| 视频点播原始文件 | 对象存储 + 媒体转码服务 | 大文件 + 处理流水线 |
| 机器学习训练数据集 | 文件存储(NFS)或对象存储(S3) | 取决于框架 |
| 数据库备份 | 对象存储(标准或低频) | 容量大、访问少 |
| 异地容灾归档 | 对象存储(归档层) | 极便宜 |
| Kafka/RocketMQ 持久化 | 块存储 | 高吞吐顺序写 |
| 反例 | 后果 | 正解 |
|---|---|---|
| 在 S3 上跑 MySQL | 性能 900 倍下降 | 用 EBS 或 Aurora |
| 把 100GB 数据库用对象存储备份后还原到 EBS | 还原要 4 小时 | 用 EBS 快照 |
| 不用生命周期规则 | 30 天前的热数据付热存储价格 | 配 IA/Archive 转换 |
| 在块存储上放图片 | 月成本 5 倍于对象存储 | 转对象存储 + CDN |
| 用文件存储当数据库 | 性能不够 | 块存储 |
⚠️ 常见坑:"对象存储 = 便宜的网盘"是严重误解。对象存储的"对象"是不可变(immutable)的,写入后不能修改(要修改也是新写一个对象覆盖),所以不能作为"高性能随机写"的存储——它的设计目标是"一次写、多次读、海量扩展"。任何需要"频繁修改局部内容"的场景都不适合对象存储。
💡 关键直觉:存储选型的核心问题是"我的访问模式是什么"。一次写多次读 = 对象;随机读写 = 块;多机共享 = 文件。"用最便宜的存储 + 配生命周期"是云成本治理的硬功夫。
下一节我们切到"网络"——VPC/子网/专线在三家怎么落。