三者虽然都做"放数据"这件事,但底层的图论范式完全不同。本文从图模型、求解范式到工程取舍逐层拆开,最后给一个能记一辈子的对比框架。
一、先给结论:三种范式,三种哲学
|-----------|-----------------------------------|-----------------------|--------------------------------------------|
| 维度 | S2D (Storage Spaces Direct) | VSAN (vSAN) | Ceph (CRUSH) |
| 图模型 | 动态加权约束图(全局可见) | 半自治域约束图(disk group 内) | 静态层次树 + 伪随机函数 |
| 核心思想 | 细粒度 Slab 扑克牌式分发与容量绝对对齐 | 策略驱动的容量 + 故障域合规 | hash + hierarchy + pseudo-random placement |
| 本质问题 | 元数据集中式分配与对齐 | 策略合规优化 | 函数映射 |
| 优化目标 | 容量绝对均衡 + 故障域隔离(IO/Latency 由存储栈保证) | 容量均衡 + 故障域 + 策略合规 | 无(确定性计算) |
| Rebalance | 拓扑变更触发 / 细粒度增量 move | 阈值触发 + RVC 周期 | 触发后重映射 PG + backfill |
| 一致性来源 | metadata + coordinator (WAC) | vCenter + DOM 集群 | algorithmic determinism |
| 故障响应 | 改图 → 集中式元数据重分配 | 改图 → 阈值触发重平衡 | 重算 CRUSH → backfill |
| 资源池粒度 | 跨节点全局 Pool | Disk Group 内自治 | 全集群 OSD 树 |
一句话:
S2D 把存储变成" 基于集中元数据的全盘容量对齐问题**";VSAN 把存储变成"策略驱动的合规优化问题";Ceph 把存储变成"可计算的映射函数"。**
越往左越依赖元数据状态,越往右越"可扩展"。
二、谱系定位:从函数到全维度优化
如果把三者放在一条谱上:

三、S2D 的图论本质:元数据驱动的细粒度等量分发
1. 图模型:动态增量图(全局可见)
G =(S ,D ,E)
- S = slabs / extents(数据块)
- D = disks(物理存储)
- E = 可选放置关系
S2D 的特点是整个集群构成一个统一资源池 ,优化器能看到所有 S、所有 D、所有故障域。
2. 边权重 = 容量对齐与故障域约束
S2D 并不是在后台持续根据实时的 IO 延迟(Latency)或热点去漂移和交换数据(其重平衡算法本身不感知实时 IO)。它的分配逻辑类似于"发扑克牌",核心目标是让每一张牌(Slab)均匀交错地落到每块盘上:

- 容量平衡(Capacity Balance): 追求全集群所有物理盘的已用容量百分比绝对均等。
- 故障域惩罚(Fault Domain Penalty): 强约束,确保同一条带的数据副本(如三副本)绝对落在不同的物理节点、机架或机箱中。
3. Rebalance = 离散的水位微调
触发机制: 属于离散触发(非后台持续)。当集群扩容(加新盘)、缩容(拔旧盘)或设备故障 15 分钟后触发。
操作语义:
- move slab
- reassign replica
👉 本质: 由于其数据块粒度仅 256MB,单次移动数据的代价极小,属于增量、细粒度的容量对齐,IO 表现温和。
四、VSAN 的图论本质:策略驱动的合规优化
1. 图模型:半自治域约束图
VSAN 的资源池是分层的:
Cluster
├── Disk Group 1 (node A) ← 局部优化域
│ ├── Cache Tier (SSD)
│ └── Capacity Tier (HDD/SSD)
├── Disk Group 2 (node B) ← 局部优化域
│ ├── Cache Tier
│ └── Capacity Tier
└── ...
关键区别 :每个 Disk Group 是一个相对独立的优化域 ,跨节点通过策略 + 容量阈值协调,不是持续多维权衡。
2. 边权重 = 策略合规 cost function
VSAN 的 cost function 没有 S2D 那么"花哨",更聚焦于业务需求 + 故障域合规:
C (Si ,Dj )=α ⋅capacity balance+β ⋅fault domain compliance+γ⋅policy adherence
注意 :IO / latency 不主导决策------这些由底层存储栈和 SPBM(Storage Policy Based Management)保证,而不是 rebalance 算法。
👉 本质:策略驱动的容量 + 故障域合规优化。
3. Rebalance = 阈值触发 + RVC 周期
VSAN 不是持续优化,而是:
- 触发式:容量 / 故障阈值突破时触发
- 周期式:RVC (Reliability, Availability, Serviceability) 周期检查
- 目标导向:把数据迁移到合规位置即可,不追求"全局最优"
操作语义:
- move component
- rebuild mirror / RAID
- comply with FTT / stripe width
👉 等价于:在策略约束下,调整图的边集合以满足合规性。
5. S2D vs VSAN:关键差异
|---------------|-----------------------|----------------------|
| 维度 | S2D | VSAN |
| 优化目标 | 全盘容量绝对对齐 + 故障域隔离 | 容量均衡 + 故障域 + 策略合规 |
| 资源池 | 跨节点全局 Pool | Disk Group 内自治 |
| 求解方式 | 拓扑变更触发、近实时增量微调 | 阈值触发 + RVC 周期 |
| IO/latency 权重 | 弱(重平衡不参与实时 IO 调度) | 弱(不参与 rebalance) |
| 协调器 | 集群内 WAC / ClusSvc | vCenter + DOM |
| 故障域 | 机箱、机架、site 三级可声明 | 默认机架级(ESA 可声明 site) |
直觉类比:
- S2D 像资深纸牌发牌官: 每次发牌(Slab)都把每个人的牌数算得死死的(容量对齐),平时大家不准换牌,只有有人掀桌子或者新加人时(拓扑变更),他才重新精准倒腾牌堆。
- VSAN 像分公司自治 + 总部协调:分公司先自治,总部只在不达标时介入
五、Ceph CRUSH 的图论本质:确定性函数映射
1. 核心不是图,是"树 + 哈希函数"
CRUSH Map = hierarchy tree:
root
├── datacenter
│ ├── rack
│ │ ├── host
│ │ │ ├── osd
2. Placement = deterministic function
PGCRUSH(x) → OSD set
3. 本质是:伪随机函数映射
不是优化问题,是函数求值问题。
给定 PG id + CRUSH map → 输出唯一 OSD 集合,没有"更好"或"更差"。
4. CRUSH 不是"找最优",而是"算唯一结果"
✔ 不评估代价
✔ 不比较 placement
✔ 只做 consistent hashing + 树遍历
六、最关键差异:优化 vs 合规 vs 函数
|--------|----------------------------|---------------------------|-----------------------|
| | S2D | VSAN | Ceph CRUSH |
| 数学表达 | dealing(Slabs, Pool Disks) | satisfy(policy,placement) | Dj =CRUSH(Si,map) |
| 问题类型 | 集中式元数据等量分发 | 约束满足 | 函数求值 |
| 求解方式 | 拓扑变更触发,增量对齐 | 阈值触发 / 周期检查 | 直接计算 |
| 输出 | 物理盘容量绝对均等 | 合规 / 不合规 | 唯一确定的放置 |
| 优化目标维度 | 2 维(容量与故障域) | 2-3 维 | 0 维(无优化) |
🧠 S2D 是"元数据状态对齐";VSAN 是"局部合规";Ceph 是"函数查表"。
七、图论模型对比(核心可视化)
S2D:元数据空间分发图

特点:
- 全局元数据维护分配表
- 图结构因物理拓扑变更而增量改写
- 平时处于完全对齐的静止状态
VSAN:半自治域约束图

特点:
- 域内可优化(容量、故障域)
- 域间靠阈值/策略协调
- 图是"分段活的"
Ceph:静态函数图

特点:
- 图结构固定(CRUSH map 变更前不动)
- 无权重优化
- 不做 swap
八、Rebalance 的本质差异(重点)
|----------|-----------------------|------------------------------------------|------------------------------------|
| 范式 | 本质 | 操作 | 类比 |
| S2D | metadata distribution | move slabs, balance capacity | dealing playing cards (发扑克牌) |
| VSAN | policy compliance | move component, rebuild, comply with FTT | constraint satisfaction |
| Ceph | partial remapping | 重新 hash PG, backfill missing objects | consistent hashing ring adjustment |
IO 特征对比
|--------------|-------------|----------|------------------|
| | S2D | VSAN | Ceph |
| Rebalance 触发 | 拓扑变更触发 | 阈值 + 周期 | 拓扑变更后触发 |
| IO 粒度 | 细粒度、256MB增量 | 组件级 | PG 级(批量) |
| IO 可预测性 | 高(增量动作温和) | 高(按策略) | 极高(受影响 PG 集合确定) |
| 单次数据移动量 | 小且可控 | 中等 | 大(bulk backfill) |
九、故障处理方式(图论角度)
|------|-------------------------------------|--------------------------------------|--------------------------------|
| | S2D | VSAN | Ceph |
| 故障发生 | graph changes → re-optimize locally | threshold triggered → move component | CRUSH recalculation → backfill |
| 视图更新 | 动态更新集中分配元数据 | 域内调整 + 跨域协调 | 重新计算受影响 PG 的 OSD 集合 |
| 数据迁移 | 细粒度、增量补齐数据 | 合规化、策略驱动 | 确定性、bulk movement |
十、复杂度对比
|--------------|----------------------|----------------------|--------------------------------|
| 维度 | S2D | VSAN | Ceph |
| placement | 集中式等量规划 | 约束满足(多项式) | O (logn) 树遍历 |
| rebalance | 离散触发(增量微调) | 阈值触发(离散) | 确定性重计算(一次性) |
| runtime cost | 低(元数据变更才介入) | minimal but adaptive | 低(纯算法) |
| IO movement | minimal but adaptive | 策略合规导向 | more predictable bulk movement |
| 中心节点 | 强依赖协调器 (WAC) | 依赖 vCenter + DOM | 无中心 |
| 横向扩展性 | 较弱 | 中等 | 极强 |
十一、直觉类比
S2D = "资深纸牌发牌官"
- 像发扑克牌一样,精确地把 256MB 的空间平分到全集群每块盘的口袋里。平时发完就静止,只有牌局人数变了(扩缩容/故障),他才重新进场精准增量倒腾牌堆,对牌局冲击很小。
VSAN = "分公司自治 + 总部协调"
- 像连锁酒店运营:每家分公司(Disk Group)先管好自己,总部只在入住率超标、客诉率超标时介入,不是持续优化,是达标管理。
Ceph = "GPS 导航系统"
- 像 GPS 路径规划:输入起点终点,算法按固定规则算出唯一路径。路径变了,是因为路网变了(拓扑变更),不是算法在"权衡",算出来就行,不管好坏。
十二、为什么这个对比很重要(架构意义)
S2D 的优势与代价
优势:
- ✅ 贴数据移动粒度极细(256MB Slab)
- ✅ 重平衡最"温和",对前端业务冲击极小
- ✅ 适合企业级Hyper-V闭环控制
- ✅ 全集群容量水位绝对对齐
代价:
- ⚠️ 强依赖集群元数据协调器成性能瓶颈
- ⚠️ 大规模下元数据同步开销大
- ⚠️ 横向扩展性(Scale-Out)受限
- ⚠️ 不感知实时IO热点
VSAN 的优势与代价
优势:
- ✅ 策略驱动,业务语义清晰
- ✅ 资源池分层,扩展性比 S2D 好
- ✅ 与 vSphere / vCenter 深度集成
- ✅ 运维简单(SPBM 统一管理)
代价:
- ⚠️ IO/latency 不主导 rebalance
- ⚠️ Disk Group 内优化能力有限
- ⚠️ 强依赖 vCenter 生态
Ceph 的优势与代价
优势:
- ✅ 极度可扩展
- ✅ 完全无中心
- ✅ 算法稳定、可预测
- ✅ 大规模场景(>PB 级)首选
- ✅ 硬件异构友好
代价:
- ⚠️ 单次 rebalance 数据移动量大
- ⚠️ CRUSH map 变更影响面难精确控制
- ⚠️ 不感知 IO 热点
- ⚠️ 调优依赖 CRUSH rules 权重设计
十三、最本质差异(一句话总结)
🔵 S2D:
"把存储问题变成一个集中数据驱动的空间等量分发与对齐问题。"
🟢 VSAN:
"把存储问题变成一个策略驱动的合规优化问题。"
🟠 Ceph:
"把存储问题变成一个可计算的映射函数。"
十四、给实践者的选型直觉
|---------------------------|----------|
| 场景 | 更适合 |
| Windows / Hyper-V 生态、企业闭环 | S2D |
| 想精确控制和控制每一次数据迁移代价(细粒度) | S2D |
| vSphere 生态、策略驱动、运维简单 | VSAN |
| 想"按业务策略自动合规" | VSAN |
| 超大规模、对象 / 块混合、云原生 | Ceph |
| 硬件异构、频繁扩缩容 | Ceph |
十五、范式选择的本质问题
选哪种范式,本质上是在回答三个问题:
- 你能接受多复杂的协调器?
- 能接受 → S2D
- 中等 → VSAN
- 不要 → Ceph
- 你的 IO 模式是否需要动态优化?
- 强需求 → S2D
- 弱需求 → VSAN / Ceph
- 你的规模上限在哪里?
- < 100 节点 → S2D / VSAN
- 500 节点 → Ceph
如果只能记一件事 : S2D 是"元数据发牌官",VSAN 是"策略合规审计员",Ceph 是"GPS路径计算器"。