跳转到内容

Fat-Tree 2008 — 用一堆便宜交换机搭出现代数据中心

是什么

Fat-Tree 是一种用大量小端口便宜交换机搭出无阻塞数据中心网络的拓扑设计。日常类比:与其买一台 1000 车道的超级收费站(贵到天上去),不如建 10 个并行的 100 车道收费站(用同样的便宜设备并联),总通行能力一样、价格便宜十倍。

2008 年要建一个支持 27,000 台服务器的数据中心,传统方案核心交换机要 870 万美元;Fat-Tree 用同样数量的 48 口商用千兆交换机,总价 87 万美元,便宜十倍,而且任意两台服务器之间都能跑满网卡。

这篇 SIGCOMM 论文是现代数据中心网络的奠基石——Google Jupiter、Facebook F16、AWS、Azure 全是它的变体。

为什么重要

不理解 Fat-Tree,下面这些事都没法解释:

  • 为什么云厂商敢说『跨机柜带宽和同机柜一样』——因为拓扑是 1:1 收敛
  • 为什么大规模 LLM 训练能用几千张 GPU 跑 all-reduce 不卡死——网络打底
  • 为什么数据中心交换机现在越来越『扁平、同款、海量』,不再是高低分层
  • 为什么超大规模数据中心的网络成本占比能压到 10% 以下

简单说:没有 Fat-Tree,没有现代云。

核心要点

Fat-Tree 的关键是借用 1953 年电话交换网络的 Clos 定理——用三级小交换矩阵能等价一个无阻塞的大交换机。把 Clos 网络『对折』就成了 Fat-Tree。

三个核心机制:

  1. k-ary 拓扑:选一个偶数 k(比如 48)。建 k 个 pod,每个 pod 内含 k/2 个边缘交换机 + k/2 个汇聚交换机;顶上 (k/2)² 个核心交换机。总共支持 k³/4 台服务器。全部用 k 端口同款交换机

  2. 上下带宽对等:每个边缘交换机一半端口接服务器、一半接汇聚层;汇聚层一半下连边缘、一半上连核心。任何一层向上向下的总带宽相等——理论上无阻塞。

  3. 多路径路由:同 pod 任两台服务器之间到核心有 (k/2)² 条等价路径。论文提出两级路由表——先按目的 IP 前缀决定去哪个 pod,再按源 IP 后缀做哈希分流,避免所有流都挤同一条路。

实践案例

案例 1:k=4 最小 Fat-Tree

核心 (k/2)² = 4 台
/ \ / \
/ \/ \
汇聚 汇聚 汇聚 汇聚 ← 每 pod 2 台
| \/ | | \/ |
| /\ | | /\ |
边缘 边缘 边缘 边缘 ← 每 pod 2 台
/\ /\ /\ /\
S S S S S S S S ← 服务器 k³/4 = 16 台
pod 0 pod 1 pod 2 pod 3

每台交换机 4 端口,全网 20 台交换机、16 台服务器、1:1 无阻塞。

案例 2:成本对比(论文里的真账)

支持 27,648 台服务器:

方案设备成本
传统三层4 台 128 口 10GbE 核心交换机 + 汇聚 + 边缘约 870 万美元
Fat-Tree2,880 台 48 口千兆同款商用交换机约 87 万美元

便宜 10 倍,且收敛比从 1:200 提升到 1:1。

案例 3:为什么需要两级路由

S1 (pod 0) → S2 (pod 3) 有 4 条等价路径(经核心 C1/C2/C3/C4)

如果用 OSPF 最短路径,所有流都走 C1,C1 拥塞、C2-C4 闲置。两级路由让交换机:

  • 一级:看目的 IP 前缀 10.3.0.0/16 → 决定『去 pod 3』
  • 二级:看源 IP 后缀 10.0.1.5 的低位 → 选 C2

不同源 IP 自动散到不同核心,流量均匀。

案例 4:流调度(论文里的进阶方案)

两级路由是静态哈希,碰巧大流哈希到同一核心还是会拥塞。论文又给了第二招:

  • 边缘交换机识别『大流』(持续超过阈值的流)
  • 把大流信息上报中央调度器
  • 调度器用全局视图重新分配路径,给大流挑空闲核心

这种『集中决策 + 分布式执行』的思路,10 年后被 SDN(软件定义网络)发扬光大。

踩过的坑

  1. 多路径破坏 TCP:同一条 TCP 流如果被分到多条路径上,包乱序到达 → 触发 TCP 假重传 → 性能崩。论文用『流分类』兜底(同 5-tuple 走同一路径),但生态当时不成熟。

  2. 布线灾难:k=48 要拉 27k 根光纤,机房布线工程量巨大。论文承认这是工程瓶颈,后来用『光纤束 + 模块化机柜』解决。

  3. 同构假设太理想:理论要全部用同款 48 口交换机。实际部署经常碰到迭代——老机器还在跑、新机器进来,端口数不同,纯 Fat-Tree 就破缺。后续 Jellyfish (2012) 用随机正则图解决异构问题。

  4. 故障重路由慢:核心层一台交换机挂了,需要全网重新计算路径,OSPF 收敛要几十秒。PortLand (2009) 用集中式 fabric manager 把收敛压到秒级。

适用 vs 不适用场景

适用

  • 大规模数据中心(万台服务器以上),追求 1:1 收敛比
  • 同构硬件、新建机房(不用兼容老设备)
  • AI 训练集群(all-reduce 大流量、要求带宽对称)

不适用

  • 小型机房(几十台服务器,传统三层够用、布线简单)
  • 高度异构环境(端口数、带宽混杂) → 用 Jellyfish 等随机拓扑
  • 需要超低延迟微秒级(金融交易) → 用 Dragonfly 等专门拓扑
  • 需要服务器自己当交换机的场景 → 看 BCube / DCell(server-centric 拓扑)

历史小故事(可跳过)

  • 1953 年:贝尔实验室的 Charles Clos 为电话交换机写了 A Study of Non-blocking Switching Networks——证明三级小交换矩阵能等价大交换机。论文写于电话时代,无人想到 50 年后用它建网。
  • 2005 前后:Google、Yahoo、微软的数据中心都撞上同一面墙——服务器规模到万级后,核心交换机买不起也撑不住。各家私下在搭类 Clos 拓扑。
  • 2008 年:UCSD 的 Mohammad Al-Fares(PhD 二年级)在 SIGCOMM 把这套思路写成 12 页论文,第一次把『商用交换机 + Clos 拓扑』作为公开研究范式提出
  • 2009-2015 年:VL2、PortLand、Jellyfish、Jupiter 一系列论文围绕它解决路由、地址、故障、异构问题。
  • 现在:你用的每个云服务,底下大概率是 Fat-Tree 或它的变体。

学到什么

  1. 理论可以隔 50 年才发光——Clos 1953 的电话理论 2008 年成了云的地基。读老论文不是怀旧
  2. 『同款 + 海量』比『高端 + 少量』赢——这是规模化的普遍规律,从 Fat-Tree 到 Hadoop 到 LLM 训练 GPU 集群都一样
  3. 拓扑决定一切——网络性能上限被拓扑钉死,路由协议只能在框内优化
  4. 省钱的工程论文也能拿 SIGCOMM 最佳——这篇核心贡献不是新算法,是『把已有理论组合起来,省 10 倍成本』

延伸阅读

关联

  • akamai-2002 —— Akamai 把内容推到边缘;Fat-Tree 是数据中心内部网络,两者互补
  • chord-stoica-2001 —— Chord 解决分布式哈希;Fat-Tree 解决物理连通
  • nsdi-experimental —— SIGCOMM/NSDI 系列里 Fat-Tree 是高引论文典范

你可能也想读

读完 Fat-Tree,下面三类论文是自然延伸:

  • 路由优化方向:VL2 (2009) 用『扁平地址 + Valiant 负载均衡』替代两级哈希;PortLand (2009) 用 fabric manager 集中处理 ARP / 故障重路由,把秒级收敛压到亚秒
  • 拓扑替代方向:Jellyfish (2012) 用随机 d-正则图替代规整 Fat-Tree,支持异构、扩展更平滑;Dragonfly (2008) 用『组内全连接 + 组间稀疏』把直径压到 3 跳
  • 实战工程方向:Google Jupiter (2015) 是十年实战版本,揭示规模化后的真实坑(光纤管理、流量工程、控制平面);Microsoft 的 SwitchBlade、Facebook 的 F4/F16 都是同思路的私有版

反向链接

  • akamai-2002 —— Akamai 2002 — 把网站搬到离用户 10 毫秒的地方
  • vl2-2009 —— VL2 — 让一万台服务器像在同一台交换机上