4. 叶脊拓扑设计原则
叶脊(Leaf-Spine)拓扑之所以能成为现代数据中心的主流架构,核心在于它用“任意 Leaf 到任意 Leaf 等跳数”的 Clos 结构换来了可预测的时延和可横向扩展的带宽。但真正落地时,设计者面对的并不是一张抽象的拓扑图,而是一组互相牵制的物理与逻辑约束:交换机有多少端口、每个端口多快、下行接多少服务器、上行留多少带宽、Spine 要几台、Leaf 上行怎么分摊、机柜里放得下多少台设备、线缆怎么走。本节围绕这些约束,给出可计算、可判断的设计方法。
端口密度:一切计算的起点
端口密度决定了一台交换机在固定形态下能接入多少对象。以一台 1U 的 64×100G 交换机为例,若下行接服务器用 25G 拆分(1 个 100G 端口拆成 4 个 25G),则单机最多可提供 256 个 25G 下行口;若上行用 100G 或 400G,则上行端口要从这 64 个物理口中划出。这里必须区分三个概念:物理端口数(64)、拆分后的逻辑端口数(256 个 25G)、可用下行端口数(256 减去上行占用的逻辑口)。设计时先确定服务器接入速率和单机接入规模,再反推需要多少台 Leaf。
举例:某机柜计划放 20 台服务器,每台双上行 25G(即每台服务器 2 个 25G 口),则单柜需要 40 个 25G 下行口。若一台 Leaf 提供 48 个 25G 下行口、8 个 100G 上行口,则一台 Leaf 可覆盖约 2 个机柜(48÷40≈1.2,实际按整柜规划取 1 柜更稳妥,或调整服务器上行速率)。端口密度不是孤立数字,它直接决定 Leaf 数量和机柜布局。
收敛比:下行带宽与上行带宽的比值
收敛比(Oversubscription Ratio)定义为“所有下行端口总带宽 ÷ 所有上行端口总带宽”。它衡量的是当所有服务器同时满速发送时,上行链路被超额认购的程度。收敛比 1:1 表示无收敛,下行总带宽等于上行总带宽;3:1 表示下行总带宽是上行的 3 倍,即最坏情况下每 3 个下行口争抢 1 个上行口的带宽。
计算示例:一台 Leaf 有 48 个 25G 下行口,下行总带宽 = 48×25G = 1200G;上行 8 个 100G 口,上行总带宽 = 800G;收敛比 = 1200:800 = 1.5:1。若改为上行 4 个 100G,则收敛比 = 1200:400 = 3:1。收敛比越小,突发流量和 incast 场景下的丢包风险越低,但所需 Spine 端口和线缆成本越高。通用建议:通用计算区 3:1~4:1,存储或高性能计算区 1:1~2:1,AI/GPU 训练区常要求 1:1 甚至更低。
Spine 层冗余设计
Spine 层是 Leaf 之间的全互联核心,其冗余设计要同时满足“设备冗余”和“链路冗余”。设备冗余要求至少 2 台 Spine,且每台 Leaf 必须与每一台 Spine 都有物理连接,形成 N 台 Leaf × M 台 Spine 的完整二分图。这样任意一台 Spine 故障,Leaf 仍可通过其余 Spine 到达其他 Leaf。
链路冗余则要求 Leaf 到每台 Spine 至少 1 条链路,关键业务可 2 条。若采用 2 台 Spine、每 Leaf 上行 8×100G,常见分配是每台 Spine 4 条,即 Leaf 到每台 Spine 4×100G。此时单台 Spine 故障,剩余 Spine 承担全部上行,收敛比临时翻倍,因此设计时要保证“N-1 后收敛比仍在可接受范围”。例如原收敛比 1.5:1,单 Spine 故障后变为 3:1,若业务可接受则无需增加 Spine;若不可接受,则需增加 Spine 数量或提升单链路速率。
Spine 数量还受端口密度约束:若 Leaf 数量为 L,每 Leaf 上行到每台 Spine 的链路数为 k,则每台 Spine 需要 L×k 个下行端口。例如 40 台 Leaf、每 Leaf 到每 Spine 2 条 100G,则每台 Spine 需 80 个 100G 端口,一台 64 口交换机不够,需 2 台一组或选用 128 口平台。这一步必须在选型前算清。
Leaf 层上行链路规划
Leaf 上行规划要回答三个问题:上行用多少条、每条多快、如何分摊到多台 Spine。上行总带宽由目标收敛比反推:若下行 1200G、目标收敛比 2:1,则上行需 600G,即 6×100G 或 3×200G。分摊原则是“尽量均匀”,避免某台 Spine 承载过多 Leaf 流量。常见做法是每台 Leaf 到每台 Spine 的链路数相同,例如 2 台 Spine、每 Leaf 上行 8×100G,则每台 Spine 分 4 条。
上行链路还要考虑 LACP 与 ECMP 的配合。若 Leaf 到 Spine 使用多条链路捆绑(LACP),则同一 Leaf 到同一 Spine 的多条链路被视为一条逻辑链路,ECMP 在 Spine 之间做负载分担;若使用独立三层链路,则 ECMP 可同时在 Spine 和链路两个维度分担。实际部署中,Spine-Leaf 之间通常采用三层路由(如 BGP),每 Leaf 到每 Spine 的每条链路作为独立 ECMP 成员,以获得更细的负载均衡粒度。
机柜与布线约束
机柜约束直接影响 Leaf 的物理分布。典型 42U 机柜中,若每台 Leaf 1U、每柜放 2 台 Leaf 做 MLAG 冗余,则服务器可用空间约 38U。若服务器 1U 双上行,则单柜可放约 38 台服务器,需要 76 个 25G 下行口,超过一台 Leaf 的 48 口,因此要么每柜放 3 台 Leaf,要么跨柜接入。跨柜接入会引入水平布线,增加线缆长度和故障域。
布线约束包括:铜缆 25G/10G 的传输距离通常不超过 3~5 米,适合柜内接入;光纤(如 OM4 多模)在 25G/100G 下可传 70~100 米,适合柜间 Leaf 到 Spine 的连接。若 Spine 与 Leaf 不在同一排机柜,需核算光纤长度并预留冗余。此外,每台 Leaf 的上行光纤数量 = 上行端口数,若每 Leaf 8 条上行、40 台 Leaf,则 Spine 侧需 320 个光纤端口,配线架和理线空间必须提前规划。
一个可复用的设计示例
假设某区域 40 台服务器,每台双上行 25G,目标收敛比 2:1,Spine 冗余 N+1。计算:总下行端口 80 个 25G,总下行带宽 80×25G=2000G;目标上行带宽 1000G,即 10×100G。选 Leaf 48×25G+8×100G,则需 2 台 Leaf(96 个下行口,覆盖 80 口),每台 Leaf 上行 8×100G,总上行 1600G,实际收敛比 2000:1600=1.25:1,优于目标。Spine 侧:2 台 Leaf 各 8 条上行,共 16 条 100G,若用 2 台 Spine,每台需 8 个 100G 下行口,余量充足。N-1 后单 Spine 承担 16 条中的 8 条,上行 800G,收敛比 2000:800=2.5:1,仍可接受。机柜方面:2 台 Leaf 占 2U,40 台 1U 服务器占 40U,共 42U,刚好一个 42U 机柜,但需确认电源和散热余量,实际建议拆为 2 柜或选 45U 机柜。
这个示例说明:端口密度、收敛比、冗余和机柜约束是联动的,任何一项变化都会传导到其他项。设计时不要孤立地追求某一项最优,而要在“带宽、冗余、成本、空间”之间找到可落地的平衡点。