分布式存储的三种图论范式:S2D、VSAN 与 Ceph CRUSH 的本质差异

三者虽然都做"放数据"这件事,但底层的图论范式完全不同。本文从图模型、求解范式到工程取舍逐层拆开,最后给一个能记一辈子的对比框架。


一、先给结论:三种范式,三种哲学

|-----------|-----------------------------------|-----------------------|--------------------------------------------|
| 维度 | 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 |


十五、范式选择的本质问题

选哪种范式,本质上是在回答三个问题:

  1. 你能接受多复杂的协调器?
    1. 能接受 → S2D
    2. 中等 → VSAN
    3. 不要 → Ceph
  2. 你的 IO 模式是否需要动态优化?
    1. 强需求 → S2D
    2. 弱需求 → VSAN / Ceph
  3. 你的规模上限在哪里?
    1. < 100 节点 → S2D / VSAN
    2. 500 节点 → Ceph

如果只能记一件事S2D 是"元数据发牌官",VSAN 是"策略合规审计员",Ceph 是"GPS路径计算器"。