2. 叶脊Fabric拓扑设计原则

叶脊(Spine-Leaf)Fabric 的设计本质,是把“任意两台接入交换机之间最多两跳可达”这一目标,用可预测的带宽、可扩展的端口和可复制的机架单元固定下来。它并不是简单地“上面放 Spine、下面放 Leaf”,而是围绕收敛比、超订比、端口密度和机架空间四个约束做的一组取舍。理解这些约束之间的换算关系,比记住某个推荐拓扑更重要。

一、两层 Spine-Leaf 与多层 Clos 的适用边界

两层 Spine-Leaf 是最常见的形态:每台 Leaf 上行连接到所有 Spine,每台 Spine 下行连接到所有 Leaf,Leaf 之间不直连,Spine 之间也不互连。这种“全互联”结构使任意 Leaf 到任意 Leaf 的路径固定为 Leaf→Spine→Leaf,跳数恒定、时延可预测,且等价多路径(ECMP)可以天然地把流量分散到所有上行链路。它的代价是:Spine 的端口数决定了 Fabric 的规模上限。

当 Leaf 数量超过单台 Spine 能提供的下行端口数时,两层结构就无法继续扩展,此时需要引入多层 Clos。典型做法是增加一个 Spine 层(有时称 Super-Spine 或 Tier-1 Spine),形成 Leaf→Spine→Super-Spine 的三级结构。多层 Clos 的关键在于:每一级都保持“下级设备连接到上一级所有设备”的规则,从而在任意层级之间维持等价多路径。层数增加会带来跳数增加和布线复杂度上升,因此只有在端口密度确实不够时才升级层数,而不是为了“看起来更高级”而堆叠。

两层 Spine-Leaf 与三层 Clos 结构对比 两层 Spine-Leaf Spine-1 Spine-2 Leaf-1 Leaf-2 Leaf-3 任意 Leaf 间固定 2 跳,ECMP 分散上行 三层 Clos(增加 Super-Spine) Super-Spine-1 Super-Spine-2 Spine-1 Spine-2 Spine-3 Leaf-1 Leaf-2 Leaf-3 每级全互联,跳数增加但规模可扩展 收敛比与超订比的核心换算关系 超订比(Oversubscription) = 下行总带宽 ÷ 上行总带宽 例:48×25G 下行 / 8×100G 上行 = 1200G / 800G = 1.5:1 收敛比(Contention Ratio) = 上行总带宽 ÷ 下行总带宽 上例收敛比 = 800G / 1200G ≈ 0.67:1(即 1:1.5) 端口密度约束 Spine 下行端口数 ≥ Leaf 数量 Leaf 上行端口数 = Spine 数量 两者共同决定 Fabric 规模上限

二、收敛比与超订比:先定义,再计算

这两个概念经常被混用,工程上必须先统一口径。本文约定:超订比 = 下行总带宽 ÷ 上行总带宽,收敛比 = 上行总带宽 ÷ 下行总带宽,两者互为倒数。以一台 48 口 25G 下行、8 口 100G 上行的 Leaf 为例:下行总带宽 = 48 × 25G = 1200G,上行总带宽 = 8 × 100G = 800G,超订比 = 1200/800 = 1.5:1,收敛比 = 800/1200 ≈ 0.67:1。若把上行改为 16 口 100G,则上行 1600G,超订比变为 1200/1600 = 0.75:1,即“无收敛”甚至“反向超订”。

设计时通常按业务类型选择目标超订比:通用服务器接入常用 3:1 到 5:1;存储或高性能计算接入常用 1:1 到 2:1;AI 训练等东西向流量密集场景则要求 1:1 甚至更低。需要强调的是,超订比是“最坏情况下的带宽竞争比例”,实际性能还取决于流量模式、ECMP 哈希质量和拥塞控制,不能只看一个数字。

三、端口密度与机架规划方法

端口密度决定了单台设备能承载多少条链路,也直接决定机架内能放多少台 Leaf、机架间需要多少 Spine。规划时建议按以下顺序推进:

  1. 确定接入需求:统计服务器数量、每台服务器需要的接入速率(如 2×25G 双上行)和冗余要求。
  2. 计算 Leaf 数量:用服务器总数除以单台 Leaf 可用下行端口数,并预留 10%~20% 余量。例如 480 台服务器、每台双上行、单 Leaf 提供 48 个下行端口,则至少需要 480×2/48 = 20 台 Leaf,考虑余量取 24 台。
  3. 确定 Spine 数量:Spine 数量应满足“每台 Leaf 的上行端口数 ≥ Spine 数量”,同时 Spine 的下行端口数 ≥ Leaf 数量。若 Leaf 有 8 个上行端口,则 Spine 最多 8 台;若 Leaf 有 24 台,则每台 Spine 至少需要 24 个下行端口。
  4. 核算超订比:用 Leaf 下行总带宽除以 Leaf 上行总带宽,验证是否落在目标区间。
  5. 映射到机架:通常每个机架放 2 台 Leaf 做 ToR(Top of Rack),服务器双上行分别接入同机架两台 Leaf;Spine 集中放在独立网络机架或核心机柜,Leaf 到 Spine 的布线走机架间主干。
机架规划时,建议把“一个机架 = 2 台 Leaf + N 台服务器”作为一个可复制的单元。这样扩容时只需增加机架单元并接入现有 Spine,而不需要改动已有 Leaf 的配置。

四、一个可复用的规划示例

假设某集群有 600 台服务器,每台服务器 2×25G 双上行接入,目标超订比不超过 3:1。选择 48×25G 下行 + 8×100G 上行的 Leaf,以及 32×100G 下行的 Spine。计算过程如下:

项目计算结果
服务器接入端口需求600 × 21200 个 25G 端口
Leaf 数量1200 ÷ 48,向上取整并加余量28 台
每台 Leaf 上行带宽8 × 100G800G
每台 Leaf 下行带宽48 × 25G1200G
超订比1200G ÷ 800G1.5:1,满足 ≤3:1
Spine 数量Leaf 上行端口数为 8,取 4 台 Spine 留冗余4 台
Spine 下行端口占用28 台 Leaf × 1 条链路28 个 100G 端口,32 口 Spine 可承载

这个示例中,每台 Leaf 用 4 个 100G 上行端口分别连接 4 台 Spine,剩余 4 个上行端口可留作未来扩容或做链路冗余。若后续服务器增加到 900 台,Leaf 数量增至约 40 台,此时 4 台 Spine 的 32 个下行端口仍可承载(40 台 Leaf 需要 40 个下行端口,已超出 32 口),就需要增加 Spine 数量或升级到更高端口密度的 Spine,甚至引入 Super-Spine 层。这正是“端口密度决定规模上限”的具体体现。

不要把超订比算成“上行端口数 ÷ 下行端口数”。端口数之比不等于带宽之比,必须先把端口数乘以对应速率,再计算带宽比。25G 与 100G 端口混用时尤其容易出错。

五、设计检查要点

  • 任意两台 Leaf 之间是否保持等价多路径,是否存在某条上行链路成为唯一路径。
  • Spine 数量是否与 Leaf 上行端口数匹配,避免“有端口但没地方连”。
  • 超订比是否按业务类型设定,并留有扩容余量。
  • 机架内 Leaf 是否成对部署,服务器双上行是否分别接入不同 Leaf。
  • 是否预留了向多层 Clos 升级的路径,例如 Spine 是否还有上行端口可用于连接 Super-Spine。

叶脊 Fabric 的拓扑设计,最终要落到“每一台 Leaf 的上行端口数、每一台 Spine 的下行端口数、每一个机架的 Leaf 数量”这三个可清点的数字上。把收敛比和超订比算清楚,把端口密度和机架单元对齐,拓扑才不是一张好看的图,而是一个可以按机架复制、按端口扩容的工程结构。