VL2 — 让一万台服务器像在同一台交换机上
待复核VL2(Virtual Layer 2)是 Microsoft 2009 年提出的一套数据中心网络架构,让一整个机房上万台服务器看起来像挂在同一台巨型交换机上。
日常类比:以前的机房像多层办公楼——同一层聊天很快,跨楼层要等电梯(带宽收敛),座位号绑死部门(IP 绑位置)。VL2 改成开放式大厅:任意两工位有多条等长小路,名片(应用地址)和座位号(物理地址)解耦,搬工位不用改名片。
VL2 是后来 Azure 网络底座的重要原型,并与同期 Clos 路线共同影响了 Google Jupiter、Andromeda 等一代云数据中心网络。
不理解 VL2,下面这些事都说不清:
- 为什么云厂商敢承诺「VM 随便迁移、IP 不变」——那是 VL2 双地址思想的延续
- 为什么现代数据中心机房从「树形」变成了「Clos」拓扑——VL2 是把这个搬上工业舞台的关键论文
- 为什么 VXLAN / NVGRE 这些 overlay 协议会火——VL2 先证明了「L2 语义跑在 L3 上」是可行的
- 为什么云厂商不再追求买一台「核武器级超级交换机」——VL2 证明便宜的商用交换机堆出来更划算
VL2 解决三件事,对应三招:
- 任意两台服务器之间带宽相等 → Clos 拓扑(折叠胖树)+ Valiant 负载均衡
- 应用地址不绑物理位置 → 双地址:LA(位置地址)+ AA(应用地址)
- 替代 ARP 广播风暴 → 集中式 Directory System 查 AA→LA 映射
招式 1:Clos + Valiant 负载均衡
Section titled “招式 1:Clos + Valiant 负载均衡”Clos 拓扑长这样(简化;ToR = Top-of-Rack,机架顶上那台接服务器的交换机):
[Intermediate 交换机] ← 中间层,多台并列 / | \ [Aggregation 交换机] ← 汇聚层 / | \ [ToR 交换机] ← 接服务器 / | \ 服务器 服务器 服务器任意两台服务器之间有多条等长的路径。怎么分配流量才不堵?
Valiant 负载均衡(VLB):每条流随机挑一台中间交换机「绕一下」再去目的地。类比:不管早高峰想去哪,先随机分配你去哪个十字路口换乘,路网就不会偏堵某一条主干道。
招式 2:双地址(LA / AA)
Section titled “招式 2:双地址(LA / AA)”- LA(Locator Address):跟物理位置绑定,跑标准路由(OSPF = 交换机之间互相通告「我能到哪些地址」的协议)
- AA(Application Address):应用看到的扁平地址,不绑位置,VM 搬家也不变
通信走 IP-in-IP 封装(外层再套一层 IP 信封):外层 LA 给路由用,内层 AA 给应用看。
招式 3:Directory System
Section titled “招式 3:Directory System”像公司前台查工位号:应用要给某个 AA 发包,先问 Directory「这个 AA 现在在哪台 LA?」Directory 用复制状态机(RSM = 多台机器投票保持同一份通讯录)保证一致,替代 ARP 泛洪。
案例 1:从流量画像推出设计约束
Section titled “案例 1:从流量画像推出设计约束”论文测量了 Microsoft 生产数据中心(不是普适定律)。用伪代码读这组数:
traffic = measure_dc() # 约 75% 机房内,25% 出机房matrix = sample_every(minutes) # 流量矩阵几分钟就变flows = classify(traffic) # elephant 少但体积大;mice 多assert needs_any_to_any(traffic) and not static_vlan_ok(matrix)逐部分解释:
- 机房内流量占大头 → 必须把「任意服务器对」带宽做平,不能只优化出入口
- 矩阵常变 → 静态 VLAN / 手工调优跟不上,要靠拓扑 + 随机分流
- elephant/mice 并存 → 随机 hash 多数够用,偶发撞车要另治(见踩坑)
案例 2:用 ECMP「免费」落地 VLB
Section titled “案例 2:用 ECMP「免费」落地 VLB”完整 VLB:先随机挑一台 Intermediate 绕一下,再在等价路径上用 ECMP(五元组哈希)转发。伪代码:
la = directory.lookup("10.1.1.5") # AA → LAmid = random_pick(intermediate_switches) # VLB 的「随机换乘」pkt = encapsulate(outer=la, via=mid, inner=original)path = ecmp_hash(pkt.5tuple) % num_pathsforward(pkt, path)逐部分解释:
- Directory 查出目的 LA;随机选 Intermediate 才是 VLB 本体
- IP-in-IP 外套 LA,内层仍是应用看到的 AA
- ECMP 只在等价路径里挑路——单独一次 hash ≠ 完整 VLB
案例 3:VM 迁移不改 IP
Section titled “案例 3:VM 迁移不改 IP”# 迁移前:AA=10.1.1.5 → LA=192.168.1.20(机架 A)directory.update("10.1.1.5", "192.168.5.7") # 迁到机架 Bla = directory.lookup("10.1.1.5") # → 192.168.5.7send(encapsulate(outer=la, inner=original)) # 新包走新 LA逐部分解释:
- AA 不变,只改 Directory 里的 AA→LA 映射
- 后续封装用新 LA,流量自动跟到新机架
- 保活连接还依赖 hypervisor/迁移协议;VL2 只保证「地址语义不断」
- ECMP hash collision:两条 elephant 撞同一链路就堵;同一 ToR 上两条大流吞吐突然腰斩时,先查是否撞路径。后续 Hedera、CONGA 专门治这个。
- Directory 首包延迟:第一次查 AA 加几十微秒;短连接占多数的场景敏感。
- 没考虑多租户隔离:VL2 假设单租户;多租户云要靠 VXLAN / NVGRE 加租户标识。
- 要求重投资 Clos:不能在老树形拓扑上「软件升级」,必须重新布线。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 大型数据中心(万台服务器级),机房内部流量占大头(论文画像约 75%)
- 流量矩阵动态变化、需要 VM 迁移而不改 IP
- 多路径冗余 + 等价带宽是硬要求
不适用:
- 小机房(几十台),简单 L2 就够;跨机架流量 <20%、机架内为主时 Clos 重布线 ROI 低
- 跨机房 / 跨地域——VL2 只管机房内;跨机房要用 WAN / 专线 / SDN-WAN
- 严格多租户隔离——需要 VXLAN / NVGRE 等 overlay 补充
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2008 年前:数据中心普遍用三层树形拓扑,越往上越收敛,跨机架带宽极不对等。
- 2008 年同期:UCSD 的 Al-Fares 等人发表 A Scalable, Commodity Data Center Network Architecture(Fat-Tree),同样主张商用交换机 + Clos。
- 2009 年 SIGCOMM:Microsoft Research 发表 VL2,把 Fat-Tree 思想 + Valiant + 双地址 + Directory 凑齐,落到生产数据中心。
- 之后:Azure、Google Jupiter / Andromeda 都走上 Clos + overlay 这条路。VXLAN(2014 RFC)把双地址思想标准化成跨厂商协议。
- 测量先于设计:VL2 有说服力,是因为它先公布了 Microsoft 生产流量画像。
- 商用胜于专用:便宜商用交换机 + 软件智能(VLB / ECMP / Directory)代替昂贵超级交换机。
- 解耦是万能解药:LA/AA 解耦才能迁 VM;控制面(Directory)和数据面解耦,控制面坏了数据面还能跑。
- Valiant 是个老想法:VLB 来自 1980 年代并行计算机互联网络,老论文常常是新工程的金矿。
- 论文 PDF:VL2 SIGCOMM 2009(12 页,可读性很高)
- 同期姐妹论文:Al-Fares Fat-Tree, SIGCOMM 2008
- 后续工作:Hedera, NSDI 2010(治 ECMP hash collision)
- 工业续集:Google Jupiter Rising, SIGCOMM 2015
- clos-1953 —— Clos 1953 原始论文,无阻塞多级网络的数学基础
- ecmp-equal-cost —— ECMP 协议本身
- clos-1953 —— Clos 拓扑的数学起源,VL2 是它在数据中心的工业落地
- fat-tree-2008 —— 同期的 Fat-Tree 论文,主张相同但更偏学术
- vxlan-2014 —— 把 VL2 的双地址思想标准化成跨厂商 overlay
- ecmp-equal-cost —— VL2 用 ECMP 在商用交换机上实现 Valiant 负载均衡
- google-jupiter —— Google 把 VL2 思想跑十年的工业续集
- andromeda-2018 —— Andromeda — Google Cloud 网络虚拟化的高速通道
- b4-2013 —— B4 — Google 用 SDN 把跨数据中心 WAN 利用率拉到 95%+