数据中心拓扑 —— Spine-Leaf、Fat-Tree、Dragonfly
数据中心几万台服务器怎么连?拓扑选错就是性能瓶颈。本文按演进讲拓扑——从经典三层到现代 Spine-Leaf,再到 AI 时代的 Rail-Optimized 和 Dragonfly。
演进概览
graph LR T1[1990s
三层
接入-汇聚-核心] --> T2[2010s
Spine-Leaf
两层 Clos] T2 --> T3[2015+
Fat-Tree
无收敛] T3 --> T4[2020+
Rail-Optimized
AI 集群] T3 --> T5[HPC
Dragonfly
大跨度低跳数]
驱动力是东西向流量增长——传统三层适合”南北向”(用户→服务器),现代数据中心 80%+ 是东西向(服务器↔服务器)。
经典三层(已过时)
graph TB CORE[Core 核心层
2-4 台] AGG1[Agg 汇聚] AGG2[Agg 汇聚] ACC1[Access 接入
ToR] ACC2[Access 接入
ToR] ACC3[Access] ACC4[Access] CORE --- AGG1 CORE --- AGG2 AGG1 --- ACC1 & ACC2 AGG2 --- ACC3 & ACC4 ACC1 --- S1[Server × N] ACC2 --- S2[Server × N]
特征:
1 | |
这种拓扑 2010 年后大型互联网就开始抛弃——已经不适合云数据中心。
Clos 网络的回归
Clos 网络是1953 年 Charles Clos 在电话交换机里的发明——多层交换机互联,理论上可以无阻塞连接任意输入输出对。
graph TB
subgraph Stage3["Stage 3"]
M1[Switch] & M2[Switch] & M3[Switch]
end
subgraph Stage2["Stage 2"]
N1[Switch] & N2[Switch] & N3[Switch]
end
subgraph Stage1["Stage 1"]
O1[Switch] & O2[Switch] & O3[Switch]
end
M1 --- N1 & N2 & N3
M2 --- N1 & N2 & N3
M3 --- N1 & N2 & N3
N1 --- O1 & O2 & O3
N2 --- O1 & O2 & O3
N3 --- O1 & O2 & O3
每层每台交换机连接下一层每台——任意两个端点 N 跳到达,且无阻塞。
数据中心实际部署的 Spine-Leaf 就是 Clos 的简化版(2 层)。
Spine-Leaf 拓扑
现代数据中心的事实标准:
graph TB S1[Spine 1] --- L1[Leaf 1] S1 --- L2[Leaf 2] S1 --- L3[Leaf 3] S1 --- L4[Leaf 4] S2[Spine 2] --- L1 & L2 & L3 & L4 S3[Spine 3] --- L1 & L2 & L3 & L4 S4[Spine 4] --- L1 & L2 & L3 & L4 L1 --- S1A[Server × 32] L2 --- S2A[Server × 32]
特征:
1 | |
一个具体例子
1 | |
加大规模就是堆 Spine 数量 + Leaf 数量——水平扩展。
Fat-Tree(Charles Leiserson 1985)
Fat-Tree 是胖树——上层链路带宽 ≥ 下层总带宽,严格无收敛。
graph TB
subgraph Core["Core"]
C1 & C2 & C3 & C4
end
subgraph Agg["Aggregation Pod 1"]
A1 & A2
end
subgraph Edge["Edge Pod 1"]
E1 & E2
end
C1 --- A1 & A2
C2 --- A1 & A2
C3 --- A1 & A2
C4 --- A1 & A2
A1 --- E1 & E2
A2 --- E1 & E2
E1 --- H1[Host]
E2 --- H2[Host]
k 元 Fat-Tree(每交换机 k 端口):
1 | |
例:k=48 → 27648 Host,3120 交换机。这就是早期”超大规模数据中心”的基本设计。
Fat-Tree vs Spine-Leaf
1 | |
Rail-Optimized 拓扑(AI 集群)
第五章 5.8 已经讲过——这里再深入:
graph TB
subgraph Rail0["Rail 0 平面"]
L0_1[Leaf-0-1] --- L0_2[Leaf-0-2]
S0[Spine-0] --- L0_1
S0 --- L0_2
end
subgraph Rail1["Rail 1 平面"]
L1_1[Leaf-1-1] --- L1_2[Leaf-1-2]
S1[Spine-1] --- L1_1
S1 --- L1_2
end
L0_1 --- N1G0[节点 1 GPU 0]
L1_1 --- N1G1[节点 1 GPU 1]
L0_2 --- N2G0[节点 2 GPU 0]
L1_2 --- N2G1[节点 2 GPU 1]
8 GPU/节点 = 8 个 Rail 平面,每平面独立 Spine-Leaf:
1 | |
为什么 Rail 适合 AI
1 | |
NVIDIA SuperPOD 设计指南把 Rail-Optimized 作为标准。万卡集群基本都是这个套路。
Spine 之上:跨 Rail / 跨 Pod
1 | |
Dragonfly(HPC)
HPC 超算用得多——跳数少、带宽利用高:
graph TB subgraph Group1["Group 1
本地全互联"] G1A[R1] --- G1B[R2] --- G1C[R3] --- G1A end subgraph Group2["Group 2"] G2A[R4] --- G2B[R5] --- G2C[R6] --- G2A end subgraph Group3["Group 3"] G3A[R7] --- G3B[R8] --- G3C[R9] --- G3A end G1A --- G2A G1B --- G3A G2B --- G3B
每个 Group 内全互联,Group 之间稀疏互联——最大跳数 3-5 跳。
1 | |
Dragonfly 的优势在于节省线缆——跨 group 链路远少于 Fat-Tree。
待补充:Slingshot 11 实际 ExaFLOP 超算部署细节。
数据中心物理布线
1 | |
线缆类型选择直接决定光模块成本——AI 集群里光模块占总成本 10-15% 不奇怪。
L2 / L3 / VXLAN
graph TB L2[二层 VLAN
STP 时代
最大几千台] L3[三层 BGP
Spine-Leaf 标配
每 ToR 一个 BGP AS] VXLAN[VXLAN Overlay
跨 L3 做虚拟 L2
多租户] L2 --> L3 --> VXLAN
为什么用 L3 而不是 L2
1 | |
现代数据中心默认 L3 + BGP——VLAN 只在 ToR 内部。
VXLAN:跨 L3 做虚拟 L2
1 | |
VXLAN 让多租户云成为可能——每租户一个 VNI(24-bit)。
1 | |
流量工程:ECMP 与 hashing
Spine-Leaf 多路径——ECMP(Equal-Cost Multi-Path) 在多个等价路径间做哈希分流:
1 | |
问题:
1 | |
解决:
1 | |
NVIDIA Spectrum-X / Quantum-2 都支持 Adaptive Routing。
数据中心规模的几个例子
一般企业 IDC(数百到几千台服务器)
1 | |
互联网中型数据中心(万台规模)
1 | |
Hyperscale 数据中心(10万+)
1 | |
AI 训练集群
1 | |
网络收敛比(oversubscription)
1 | |
一些查询命令
1 | |
拓扑设计的几个权衡
1 | |
万卡级集群拓扑设计要 1-2 月——不是简单的”买交换机连起来”。
实战清单
1 | |
小结
- 经典三层已淘汰,Spine-Leaf 是事实标准
- Fat-Tree 在超大规模仍有价值
- AI 集群推 Rail-Optimized——8 GPU = 8 个独立 Rail
- HPC 用 Dragonfly 节省线缆
- VXLAN + EVPN 是多租户标配
- ECMP 单流瓶颈靠 Adaptive Routing 解决
- 现代数据中心 L3 + BGP,VLAN 只在 ToR
下一篇讲交换机本身——商用 vs 白盒、SONiC 生态。