之前一段时间恰好准备了一个”HOW TO HOUR”,因为自己才疏学浅,东拼西凑找了一些值得一读的文章做了一个简单的概论。把大致内容记录于此,之后亦可以浏览。
一个典型的三层(核心层、汇聚层、接入层)的Data Center Network Structure大体如下图所示
这里涉及到了架构或拓扑、Oversubscription、多路径路由和费用这些概念。在之后的讨论中都有逐条说明。同时,这里也讲到了这种架构来自于Fat Tree Network和Clos Network的“结合”。
第一篇有关的文章是A Scalable, Commodity Data Center Network Architecture。应该是现代数据中心网络架构的先驱。这篇文章提出了如下的模型
可以看出,在核心层和汇聚层都被小型路由器替代了。这里为了达到一比一的Oversubscription,大体比例上是这样的:对于一个k-ary fat tree来说,一共有k个pods,每个路由器有k个ports,一共有k^2/4个核心层路由器,k^3/4个主机,两个主机之间有k^2/4条最短路径。文章中提出了一种寻址方法,即每一个pod switch的IP地址设置为10.pod.switch.id。每一个核心路由器的IP地址设为10.k.j.i,每一个主机的IP地址设为10.pod.switch.id。这里文章提到不用OSPF或OSPF-ECMP的原因是防止信息拥塞等考虑。路由表由两层结构,第一层是后缀表,第二层是前缀表。后缀表决定北向路由,前缀表决定南向路由。
这样的一个问题就是,fat tree结构并没有被充分利用。所以两种动态路由在此被提出。一是流分类Flow Classification,将北向的流按照大小动态分流到北向的端口;一是流调度Flow Scheduling,这里提及了一个中央调度器Central Scheduler。通过中央调度器来决定哪一个流用哪一个端口。
这样的设计存在着一些问题,譬如可扩展性相对较差,负载平衡过于简单,commodity device需要有专门的设计满足寻址和路由,虚拟化计算机的动态迁移,和浪费较多地址空间等问题。所以接下来我们再看一篇文章Portland: A scalable Fault-Tolerant Layer 2 Data Center Network Fabric。这篇文章意在设计这样一种架构,虚拟机迁移过程中IP地址不变、路由器不需要专门配置、Oversubscription达到一比一、路由不出现环路、以及路由表的错误修正。为了达到这些目的,作者认为这会是一个Layer 2的构造。Portland的目标是给出一个可扩展的数据链路层的路由、转发、寻址设计。Portland这里也需要一个逻辑上的中央处理器以保持一个配置信息的软状态。
实现这个设计的关键在于:一、Positional Pseudo MAC Addresses;二、Proxy-based ARP。第一点和第一篇文章中的IP分配的想法是类似的。这里为每一个主机分配一个独特的MAC地址:pod.position.port.vmid。
Fabric Manager分配给主机一个独特的PMAC,每一个主机向边缘路由器发起ARP请求以得到目的主机的PMAC,边缘路由器的功能在于拥有AMAC和PMAC的映射,而Fabric Manager只存有主机的IP和PMAC的映射。在边缘路由器转发的过程中,也会向Fabric Manager查询相应IP地址对应的PMAC。
Portland的设计——位置地址Location Address和应用地址Application Address的分离,使得虚拟机在迁移的过程中无需改变IP地址。中央控件的使用保证了LA-AA的映射。网关负责DCN内外的encapsulation/decapsulation。
在VL2: A Scalable and Flexible Data Center Network一文中,以上几点特征同样留在了设计中。而区别在于,Portland是一个基于Layer 2的设计而VL2则是Layer 3层的设计——IP-PMAC的映射变为了IP-IP的映射。
上面几张图可以看出VL2在于
- Building on proven networking technology.
- Separating names from locators.
- Embracing end systems.
这里要提到的是VL2的directory system design。它代替了Portland中的fabric manager的角色,保证了查询更新地址映射的功能。这个设计包含了(1)一个大约50-100个服务器组成了读优化的冗余目录系统,存储和负责AA-LA的映射和查询;(2)一个相对较小的(5-10)写优化的异步replicated state machine服务器簇,以保证统一的可靠地映射一致更新和存储。具体实现细节可以参考原文章。
话说要提到的一点是,这篇文章的作者在这篇文章发表这年入职了亚马逊,James Hamilton。成为了AWS的VP/Distinguished Engineer。可想而知AWS的架构与之的关系。