一 传统的数据中心网络结构
1 结构解释
数据中心网络架构分为三层(从下往上):
第一层,接入层(Access Layer):主要负责物理机和虚拟机的接入、VLAN(Virtual Local Area Network,虚拟局域网)的标记,以及流量的二层转发。
第二层,汇聚层(Aggregation Layer):汇接交换机连接接入交换机,同时提供其他服务,例如安全、QoS、网络分析等,在传统的三层架构中,汇接交换机往往会承担网关的作用,负责收集PoD(Point of Delivery,分发点)内的路由。
第三层,核心层(Core Layer):核心交换机主要负责对进出数据中心的流量进行高速转发,同时为多个汇聚层提供连接性。
2 存在的问题
- 线路的利用率不高。如上图所示,正常情况下,对于一个VLAN网络,只有一个汇聚层交换机可用,其他的汇聚层交换机只有在出故障时才被使用(上图虚线部分)。
- 超占比(Oversubscription)导致带宽利用率很低。由于超占比的比例通常在2.5:1到8:1不等,导致单个主机可用的带宽只有40%到12.5%的带宽可用。1:1的设计成本又太高了。
- 多路径路由算法ECMP的瓶颈问题。该算法采用的是静态分割流方式,无法根据每个流的带宽需求动态分配路径;同时,ECMP算法将路径数量限制在8-16,超过这一设定值,路由表将成倍增长,这会增加硬件开销,也会增加路由表查找时延。
- 构建如此庞大的数据中心网络费用昂贵。进而引出Fat-tree实现1:1的超占比却很省钱的观点。
以下是两张费用对比图表。从图2和表1都可以明显看出,在相同端口数量下,Fat-tree支持的主机数量更多,费用低的多。
二 Fat-tree 拓扑
1 结构解释
三层网络架构,三层都是交换机,最底层接入层连接的是主机host
接入层交换机也被称为ToR(Top of Rack)交换机
汇聚层:汇聚交换机,是L2和L3网络的分界点,汇聚交换机以下的是L2网络,以上是L3网络
k叉树,即假设交换机的端口数量为k,k=6
- 有6个pod;每个pod分为两层,每层6/2=3个交换机,上层称为汇聚层,下层称为接入层(也称Edge Layer);
- 核心层交换机数量为 (6/2)^2=9
- 每个pod有3个接入层switch;每个接入层switch连接3个host;
- 汇聚层k/2的端口连接k/2的核心交换机,剩下的端口连接接入层的交换机;
- 接入层同上,一半的端口连接上一层,一半的端口连接下面的主机。
- 子网(连接同一switch的主机属于同一子网)数量:6×3=18,每个子网host数量:3,所有host的数量(最下面的黑色方块):6×3×3=54
- 每个Pod里交换机的总数:6;每个Pod里host的数量:3×3=9
如上图所示,本文提出Fat-tree这一网络架构,该架构借鉴了Clos架构(参考文献:Charles Clos, A Study of Non-blocking Switching Networks)的思想,用多个小规模、低成本的单元构建复杂,大规模的架构。
从图1和图3的对比,很容易看出区别,Fat-tree使用了多个小规模、低成本的交换机替代了原来核心层、汇聚层昂贵的、高密度端口的交换机。相同点是,也都是三层架构,核心层、汇聚层、接入层。
2 这种设计的好处:
实惠且任一组件都容易替换;
非阻塞,任一主机可获得100%完整带宽;
3 遇到的两个主要问题及解决方案(创新点):
问题1:经典的 IP/Ethernet 网络只会构建了单路径路由协议,这会使得Fat-tree很快遇到性能瓶颈。
解决方案:本文提出了升级版转发协议,极大的提升了扇出的效率。
问题2:大型网络中的布线非常复杂。
解决方案:本文提出了打包和放置技术来缓解布线问题。
第三部分:路由
动机:现有路由协议,比如OSPF2,是按照最短跳数作为最佳路径选择的标准,而Fat-tree里任一两个不同pod里的主机之间的路径都是同等跳数的路径,而原有的路由协议只会选择其中的一条。这就是造成拥塞的主要原因。
故需要改进当前路由协议,使得其支持将两个主机之间数据包均匀地分散到每条等价路径,减轻拥塞,并最大限度发挥Fat-tree的拓扑优势。
寻址:
Pod里的交换机地址:10.pod.switch.1
Pod表示当前pod序号,范围[0, k-1]
Switch表示在当前pod里,当前switch的编号(从左往右,从下往上计数),范围[0, k-1]
核心交换机地址:10.k.j.i
K是固定值,如图3所示,k=4固定
(j, i)是表示核心交换在 (k/2)×(k/2) 的核心交换机矩阵中的坐标,i或j的范围是[0,k/2]
Host的地址:10.pod.switch.ID
Host的地址前3个字节和其所连接的接入层交换机的前3个字节保持一致,最后一个ID为其在子网内的序号,ID范围是[2, k/2+1]
两级路由表
两级路由表示例
图4展示的是Pod2左上角的交换机(10.2.2.1)的两级路由表,显然这种表格设计是用来划分目标IP属于Pod内部还是外部的。
前缀表:Pod内部IP,直接转发给Prefix第3个字节对应的switch,转发的端口号和该端口连接的switch id 保持一致;
后缀表:其他Pod的IP,按照IP的第4个字节,均匀地分散到对应的上层的交换机上(对于接入层的上层就是汇聚层,对于汇聚层的上层就是核心层,但它们其实原理都是一样的,都是均匀地转发给其上层的k/2个交换机)。
结论:对于Pod内每个交换机,其前k/2的端口负责向下转发,后k/2个端口负责向上转发。
同时,每个pod交换机的路由表的前缀表和后缀表大小,都不超过其转发的端口的数量,即k/2。
这种路由表的设计完美地阐述了均匀转发的含义。
同时,这种设计另一个好处就是,同一个目的IP的数据包,会从同一条路径转发,这样就避免了数据包重排序的问题。
路由表生成算法,如下图所示,算法1表示汇聚层路由器路由表生成,算法2表示核心层路由表算法生成,根据这个规律接入层的路由表生成算法也很简单。
本质上就是3层for循环而已,只要搞清楚Fat-tree的拓扑层次很容易就理解了。
以算法1为例,对于任一处于pod x, 在pod内编号为z的汇聚层交换机(10.x.z.1)而言,addPrefi(10.x.z.1, 10.x.i.0/24, i)含义是:对于汇聚层交换机10.x.z.1来说,目的IP的前缀为10.x.i.0/24,那么表示其为pod内第i个子网的主机,转发端口是i,下一跳是交换机 10.x.i.1。
后缀表就稍微复杂一点。
第四部分:其他
流分类(Flow Classification):这里讨论了其他两种关于数据包转发的技术,包括同一组流用同一个端口转发,和将同一组流的不同数据包依次重分配一个最小的端口号进行转发。
流调度(Flow Scheduling):这里讨论的是关于在实际的网络流量中,有两种类型的数据流,一种是少量的长时间大数据传输流,另一种是大量的短时间小数据传输流。如何调度好两者关系是衡量网络架构的重要标准。
容错设计(Fault-Tolerance):
首先,Fat-tree的多路径机制本身就是一种容错机制,其次本文使用了一种广播的方式来通知链路,或者交换机的故障。每个交换机和它相邻的交换机保持双向监测,来确定对方是否down掉了。
这里分析了两种链路断开的情况。
第一种:同一个pod内,下层到上层的交换机的链路断了。那么这个down掉的下层交换机连接的子网和其他主机就彻底断连了。这种情况只能增加叶子节点的交换机来做备用了。
第二种:汇聚层到核心层的交换机的链路断了。对于向外的流量少了一条数据通路,向内的数据可能就转发不进来。这种情况可以通过其他的核心交换机和其他的汇聚层交换机来转发,实现容错。
功率和散热(Power and Heat Issues):略
打包技术(Packing):简单来说,就是把一个Pod里的交换机,比如k=48时,就是48个交换机,装到一个机柜(rack)里;每48台host装到一个机柜里,也即一个Pod的所有host,12个机柜能全部装下。
第五部分:结论
本文提出的Fat-tree网络架构使得数据中心网络可以继续大规模扩展;
Fat-tree架构向后兼容,还是传统的三层架构;
Fat-tree架构在实现扩展的带宽情况下大大降低了总成本。
第六部分:我的思考
问题1:本文提出的 Fat-tree 架构,其优缺点各是什么?
优点:
(1) Fat-tree使用了多个小规模、低成本的交换机替代了原来核心层、汇聚层昂贵的、高密度端口的交换机。降低了成本,同时同质的交换机也降低了维护和替换的难度。
(2) Fat-tree改进后的路由算法,可以均匀地转发数据,减轻拥塞的同时还实现了多路径容错的功能。
(3) 总体来说,并没有颠覆原有三层架构,可以向后兼容。
缺点:由于交换机的数量大增,机房布线的难度大大增加。
问题2:本文针对现有架构的问题,分别是如何解决?
答:现有架构主要是两个问题:
费用昂贵。主要是核心层和汇聚层的交换机昂贵。
带宽利用率不高。超占比机制,使得完整的带宽性能没有被释放出来。
对应的解决方案:
用大量廉价的交换机集群来替代原先少量的昂贵的高性能的交换机。
设计了两级路由表,和均匀转发的路由技术,来提高带宽的利用率及容错。
问题3:相比于 Fat-tree,如今的数据中心网络架构有哪些新的变化?
答:虚拟化的流行。一个物理机划分出多个虚拟机,提供服务。
软件架构的解耦使得东西向的流量变多了。意思是,以前一个系统的前端、后端、数据库都部署在一个物理机上,通常南北向的流量比较大。而现在,Client/Apllication/DB分别部署在数据中心的不同服务器上,服务器之间内部访问调用的流量变大了。同时分布式计算的产生,导致数据中心的服务器之间也会产生大量的流量。
引入了SDN技术。
参考文献
- Mohammad Al-Fares, Alexander Loukissas, Amin Vahdat. A scalable, commodity data center network architecture. SIGCOMM 2008: 63-74.
- Related slides.https://pdfs.semanticscholar.org/bbe5/7b91e8c5154f699583bbaf7fb2b2ebdf9185.pdf?_ga=2.158985978.1521289362.1605967508-912089501.1602771339
- https://blog.youkuaiyun.com/baidu_20163013/article/details/110004560
- https://www.cnblogs.com/nihaizong/p/9261104.html