前言

买云盘时面对"云硬盘 / NAS / 对象存储"三个菜单不知道选谁?它们对应存储世界的三种抽象:块、文件、对象。理解差异,选型就是送分题。

一、三种抽象一览

┌─ 块存储 (Block) ──────┐  ┌─ 文件存储 (File) ─────┐  ┌─ 对象存储 (Object) ─────┐
│ 裸的磁盘块             │  │ 目录/文件层级          │  │ 扁平的海量键值           │
│ 云硬盘 CBS/EBS        │  │ NAS/CIFS/NFS          │  │ OSS/COS/S3              │
│                       │  │                        │  │                          │
│ OS 直接 mkfs+mount   │  │ 多机同时挂载           │  │ HTTP API 增删查          │
│ 挂给虚拟机当 C盘/D盘  │  │ POSIX 文件接口          │  │ bucket + object key      │
└───────────────────────┘  └────────────────────────┘  └──────────────────────────┘
   像"本地硬盘"                像"共享文件夹"              像"网盘+CDN"

二、块存储:性能担当

是什么:把存储切成固定大小的"块"提供给主机,主机在上面自建文件系统。云硬盘对虚拟机来说就是一块 /dev/vdb。

# 云硬盘的日常(虚拟机视角)
lsblk
mkfs.xfs /dev/vdb1
mount /dev/vdb1 /data
# 完全是本地盘的体验 —— 数据实际落在分布式存储集群上

特点:

  • 低延迟(云硬盘分等级):ESSD PL1 < 1ms 级
  • 单盘挂给单个实例(共享盘是特殊形态)
  • 需要自己管文件系统(快照、扩容走云 API)
  • 计费:容量 + 预置性能(IOPS/吞吐)

性能等级对比(以某厂为例):

类型 典型 IOPS 场景
普通云盘 数百 温数据、开发测试
SSD 云盘 2万+ 常规生产
ESSD 10万+(分 PL 等级) 数据库、核心业务

适用:系统盘、数据库、任何"要像本地盘一样用"的场景。

三、文件存储:共享担当

是什么:存储服务端维护目录树,多台机器同时通过网络挂载同一份数据(NFS/SMB/CIFS 协议)。

# NFS 挂载(客户端)
dnf install -y nfs-utils
mount -t nfs 10.0.2.100:/share /mnt/share

# 20 台 web 服务器挂同一个 NAS 目录 —— 上传一次, 全部可见

特点:

  • 多机共享读写(这是核心价值)
  • POSIX 接口兼容,应用几乎无感
  • 吞吐型(大带宽),但随机小 IO 与延迟不如块存储
  • 按容量计费,比块存储贵

适用:Web 集群共享静态资源、容器共享目录(K8s 的 NFS CSI)、AI 训练数据集共享、内容管理系统。

常见坑:NFS 锁机制较弱,数据库类应用放 NFS 是自找麻烦;挂载要配 _netdev 避免开机阻塞。

四、对象存储:海量担当

是什么:数据以"对象"(数据+元数据+键)形式存进扁平的 bucket,通过 HTTP REST API 读写——没有目录树,a/b/c.jpg 只是名叫 a/b/c.jpg 的 key。

# OSS 工具示例(ossutil / aws cli 同理)
ossutil cp backup.tar.gz oss://my-bucket/backup/2024-10-19.tar.gz
ossutil ls oss://my-bucket/backup/
ossutil sign oss://my-bucket/report.pdf --timeout 600   # 生成临时访问 URL
# Python SDK(阿里云 OSS 示意)
import oss2

bucket = oss2.Bucket(auth, "https://oss-cn-hangzhou.aliyuncs.com", "my-bucket")
bucket.put_object("logs/2024-10-19/app.log", open("app.log", "rb"))
data = bucket.get_object("logs/2024-10-19/app.log").read()

特点:

  • 无限容量、按用量计费(每 GB 单价最低)
  • 单对象最大 TB 级;不能修改只能整体重写(覆盖上传)
  • 不支持 POSIX:不能 mount 后随机读写(有特殊工具模拟,但别当真盘用)
  • 天然多副本/纠删码,持久性 11 个 9
  • 与 CDN 无缝配合:回源到 OSS,静态资源全球加速

适用:图片/视频等静态资源、备份归档、大数据湖、日志归档、App 安装包分发。

五、对比与决策

维度 块存储 文件存储 对象存储
接口 块设备 POSIX 文件 HTTP API
共享 单机(默认) ✅ 多机 ✅ 全球
延迟 最低(<1ms) 中(ms 级) 高(几十~几百 ms)
容量 单盘有限(几十 TB) 大 无限
随机改写 ✅ ✅ ❌(整体覆盖)
单位成本 高 更高 最低
典型负载 数据库/系统盘 共享目录 静态资源/备份

一句话决策:

  • 要低延迟随机读写(数据库)→ 块存储
  • 要多机共享的目录→ 文件存储
  • 要海量便宜 + 一次写入多次读取 → 对象存储

六、经典组合架构

                    ┌─ CDN ─┐
用户 ──► 域名 ──────►│ 边缘缓存 │──未命中──► 对象存储 OSS(图片/JS/CSS)
                    └────────┘
应用服务器 ──► 数据库 ──► 块存储(云硬盘, ESSD)
     │
     └──► /shared/upload ──► 文件存储 NAS(多机共享)
     │
     └──► 每日备份 ──► 对象存储归档(低频/冷存储类型, 成本再砍 50%+)

存储分层:热数据块存储 → 温数据 NAS → 冷数据对象归档——按访问频率摊薄成本。

七、实操建议

1. 对象存储安全三原则:
   - bucket 默认私有, 公开要单独授权
   - 临时访问用签名 URL, 别长期放公开链接
   - 敏感数据开服务端加密

2. 数据生命周期规则:
   - logs/ 前缀 30 天后转低频, 90 天删除
   - backup/ 前缀保留 4 份版本

3. 云硬盘记得做快照策略(每日增量 + 保留 7 天)

小结

存储 记忆点
块 云上"本地盘",快,给数据库
文件 云上"共享文件夹",多机挂载
对象 云上"无限网盘",便宜,配 CDN,只能整体读写
分层 热→块、温→文件、冷→对象

本文是「云计算」系列第 3 篇。