IB网络拓扑基础:Fat-Tree拓扑原理、核心层/汇聚层/接入层角色划分、无阻塞网络设计原则
聊到InfiniBand组网,绕不开的一个话题就是Fat-Tree。说白了,它就是目前高性能计算集群里最主流的拓扑结构。我这些年经手的大大小小项目,十有八九都在用这个架构。为什么?因为它能很好地平衡成本和性能。
Fat-Tree拓扑原理
Fat-Tree这个名字挺形象的。你看一棵树,树干粗、树枝细。但Fat-Tree恰恰相反——越往上层,链路越“胖”。
传统树形拓扑有个致命问题:根节点容易成为瓶颈。所有叶子节点通信都要经过根,根一旦扛不住,整个网络就瘫了。Fat-Tree怎么解决?它让每一层都有足够的带宽往上走。
举个例子。一个两层的Fat-Tree,接入层有4台交换机,每台下行接16个节点。汇聚层也有4台交换机。每台接入交换机上行接2条链路到汇聚层。这样算下来,接入层总下行带宽和上行带宽是1:1的。
嗯,这里要注意:Fat-Tree的“胖”不是指单条链路变粗,而是指并行链路数量多。我见过不少新手以为要换更贵的线缆,其实不是,多加几条线就行。
核心要点:Fat-Tree通过多路径冗余实现无阻塞。任何一条链路断了,流量自动切换到其他路径。这是它高可靠性的基础。
核心层/汇聚层/接入层角色划分
标准的Fat-Tree分三层。我习惯把它们比作公司的组织架构:
- 接入层(Leaf):直接连服务器。相当于一线员工,干具体活的。
- 汇聚层(Spine):连接接入层交换机。相当于中层管理,协调资源。
- 核心层(Core):连接汇聚层。相当于高层决策,把控全局。
实际项目中,小规模集群可能只有两层(接入+汇聚)。但超过1000节点,我建议上三层。为什么?因为两层架构下,汇聚层交换机的端口数会爆炸。你想想看,1000个节点需要多少上行口?
| 层级 | 主要功能 | 典型设备 | 端口速率 |
|---|---|---|---|
| 接入层 | 连接计算节点 | QSFP28 36口 | 100Gbps |
| 汇聚层 | 汇聚接入流量 | QSFP56 40口 | 200Gbps |
| 核心层 | 全网路由决策 | OSFP 64口 | 400Gbps |
我曾经在一个项目中,客户非要省掉核心层。结果跑AI训练任务时,汇聚层交换机端口全部打满,丢包率飙到5%。后来老老实实加了核心层,问题才解决。
无阻塞网络设计原则
无阻塞,说白了就是任何时刻、任何端口都能以线速转发。这需要满足一个条件:上行总带宽 ≥ 下行总带宽。
具体怎么算?我教你一个口诀:“下行看端口数,上行看链路数”。
假设一台接入交换机有36个下行口(接服务器),每个口100Gbps。那么下行总带宽就是36×100=3.6Tbps。上行至少也要3.6Tbps。如果上行用200Gbps端口,就需要18条上行链路。
避坑指南:我曾经犯过一个错——只算了端口数,没算实际流量。有些节点跑的是MPI通信,流量大;有些节点跑的是管理任务,流量小。最好按峰值流量来算,别按平均值。
无阻塞设计的另一个关键是等价多路径(ECMP)。Fat-Tree天然支持多路径,但需要配置好哈希算法。我习惯用源目IP+端口做哈希,这样能避免哈希冲突。
嗯,这里还要提一下剪枝。有些场景下,你不需要所有节点都全互联。比如存储节点和计算节点分开部署,那就可以剪掉一些不必要的链路。但剪枝要谨慎,剪多了就变成阻塞网络了。
警告:无阻塞不等于零丢包。即使带宽够,突发流量还是可能造成短暂拥塞。建议配合PFC(优先级流控)和ECN(显式拥塞通知)一起使用。
实战中的设计考量
我这些年总结了几条经验:
- 端口利用率别超过70%。超过这个值,延迟会急剧上升。留30%余量应对突发。
- 核心层交换机最好冗余。至少2台,最好4台。一台挂了不影响业务。
- 布线要规范。光纤标签要写清楚“从哪来、到哪去”。我见过一个项目,光找线就花了三天。
- 先模拟再施工。用工具算好带宽需求,画好拓扑图。别等线都布好了才发现带宽不够。
最后说一句:Fat-Tree不是万能的。如果你的集群规模超过10万节点,可能要考虑Dragonfly或Torus。但99%的场景下,Fat-Tree够用了。
这张图展示的是一个标准的3层Fat-Tree。核心层2台交换机做冗余,汇聚层4台,接入层8台。每台接入交换机连3个节点,总共24个节点。你算算看,上行带宽和下行带宽是不是1:1?