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(显式拥塞通知)一起使用。

实战中的设计考量

我这些年总结了几条经验:

  1. 端口利用率别超过70%。超过这个值,延迟会急剧上升。留30%余量应对突发。
  2. 核心层交换机最好冗余。至少2台,最好4台。一台挂了不影响业务。
  3. 布线要规范。光纤标签要写清楚“从哪来、到哪去”。我见过一个项目,光找线就花了三天。
  4. 先模拟再施工。用工具算好带宽需求,画好拓扑图。别等线都布好了才发现带宽不够。

最后说一句:Fat-Tree不是万能的。如果你的集群规模超过10万节点,可能要考虑Dragonfly或Torus。但99%的场景下,Fat-Tree够用了。

Fat-Tree三层拓扑结构图 核心层 (Core) 400Gbps 互联 汇聚层 (Spine) 200Gbps 上行 汇聚层 (Spine) 200Gbps 上行 接入层 (Leaf) 100Gbps 下行 接入层 (Leaf) 100Gbps 下行 接入层 (Leaf) 100Gbps 下行 接入层 (Leaf) 100Gbps 下行 节点1 节点2 节点3 节点4 节点5 节点6 节点7 节点8 节点9 节点10 节点11 节点12 核心层 汇聚层 接入层 计算节点

这张图展示的是一个标准的3层Fat-Tree。核心层2台交换机做冗余,汇聚层4台,接入层8台。每台接入交换机连3个节点,总共24个节点。你算算看,上行带宽和下行带宽是不是1:1?

专注资料整理