徐新羽 戴新发 夏 静 李文铖
(武汉数字工程研究所 武汉 430205)
随着云计算[1]和大数据的发展,数据中心的流量模型发生了巨大变化,东西向流量取代了南北向流量,占据了主导地位,比例可达70%以上。东西向流量的爆发意味着数据中心内大部分的流量都将发生在服务器之间,从而导致传统数据中心内部的通信带宽已经无法满足流量的传输需求[2~3]。因此,具有分层的多根网络拓扑的胖树[4~5]结构逐渐成为主流,其具有很好的扩展性,并能够为属不同POD的服务器提供多条等价路径,进而提供高带宽和高容错性。
ECMP[6](Equal Cost Multi-Path)算法是一种经典的多路径路由算法,其基于静态哈希进行路径选择,在一定程度上利用了胖树拓扑结构带来的等价路径,实现了数据的快速转发。然而,ECMP没有考虑链路的实时传输状态,以随机的哈希方式选择路径,有可能导致拥塞。SDN[7~8]是一种新型的网络架构,其核心是将控制平面从传统网络的单个设备中剥离,集中到中央控制器上;数据平面由支持南向接口协议的转发设备完成。其具有三大特征:1)网络可编程;2)转发与控制分离;3)集中式控制。因此,SDN能够获取数据中心的全局网络信息,包括可用路径以及它们的剩余带宽和时延等,并据此统一为转发设备制订转发策略,因而基于SDN的路由算法可以很好解决网络负载均衡的问题。
综上所述,要实现网络的负载均衡,必须考虑链路的实时状态。据此,本文提出了一种基于SDN的数据中心负载均衡路由算法,该算法依据SDN控制器获取的全局网络信息对进入交换机的流量进行集中控制,为其选择最优的传输路径。
SDN方案由作为控制平面的控制器和和作为转发平面的OpenFlow[9]交换机组成,交换机的拓扑结构采用胖树拓扑结构。其中,在控制器中设计以下四个模块:拓扑采集模块,信息监视模块,路由计算模块和流表下发模块。拓扑采集模块可以采集交换机各个端口的连接信息,并将其存储起来;信息监视模块用来监视网络链路的已用带宽和时延,并记录下来;路由计算模块依据网络的拓扑信息和各个链路的已用带宽和时延计算出数据流转发路径;流表下发模块根据路由计算模块得出的路径,向交换机下发流表,控制交换机中数据的转发。
图1 控制器模块关系图
在该模块里,主要使用Ryu控制器[10]提供的get_switch()方法和get_link()方法。get_switch()方法用来获取网络中的所有交换机,get_link()方法用来采集网络中交换机之间的链路信息。采集到交换机列表和链路链表后,再通过NetworkX[11]将这些信息记录下来,供路由计算模块调用。
该模块用来监视链路的已用带宽和时延。
1)已用带宽
本文通过控制器每间隔10s主动向交换机发送一个request_stats消息,从而使得交换机将端口信息返回给控制器,从返回信息中提取rx,tx和durt,rx表示接收到的字节数,tx表示发出的字节数,durt表示持续时间。假设,第一次统计到的数据为rx1,tx1,durt1;第二次统计的数据为rx2,tx2,durt2,则端口的速率sp为
链路的已用带宽取决于连接链路两端端口速率小的一方。假设,一端口的速率为sp1;另一端口的速率为sp2。则链路的已用带宽bwu为
2)时延
假设要获取交换机A和交换机B之间的时延,步骤如下:
1)控制器向交换机A下发一个Packet_out报文。报文的数据段携带了一个约定好了的协议报文,其报文的数据段携带了控制器下发报文时的时间戳。Packet_out报文的动作指示交换机将其泛洪或者转发到某端口。
2)交换机B收到了交换机A发送过来的数据包,无法匹配对应流表项,从而Packet_in到控制器。控制器接收到这个数据包之后,和当下时间相减,得到时间差T1。
3)控制器向交换机B发送一个类似的报文。然后控制器从交换机A收到Packet_in报文,记下时间差T2。
4)控制器向交换机A和交换机B分别发送带有时间戳的echo_request。交换机收到之后即刻回复携带echo_request时间的echo_reply消息。所以控制可以通过echo_reply的时间戳减去echo_re⁃quest携带的时间,从而得到对应交换机和控制器之间的RTT。这样就可以得到控制器到A,B的RTT分别为Ta和Tb。
5)交换机A到交换机B的链路时延dela.b为
将胖树网络拓扑抽象为有向图G(N,V),N表示网络中节点的集合,V表示网络中链路的集合。
首先通过Dijkstra算法求得k个POD的胖树拓扑的k条最短路径,用li表示,i=(1...k)。假设li有n条链路,根据胖树拓扑结构的特点可知,每条链路的容量是一样的,设为bwa。通过信息监视模块可以获取第i(i=1...k)条路径的第j(j=1..n)条链路的的已用带宽bwu-ij,则该链路的剩余带宽bwij为
因为路径的剩余带宽取决于路径中链路的最小剩余带宽,所以路径li的剩余带宽bwi为
通过信息监视模块可以获得第i(i=1...k)条路径的第j(j=1..n)条链路的时延delij,因为路径的时延等于所有链路的时延总和,所以所以路径li的的时延deli为
为了综合考虑路径的剩余带宽和时延,将路径权重设置为剩余带宽和时延的比值,则则路径li的权重wi为
求得每条路径的权值,选择权值最大的一条路径,作为流的传输路径。当存在多条路径的权值相等且最大时,随机选择一条路径作为流的传输路径。
路由算法流程如图3所示。
图2 路由算法流程图
在该模块里,使用了ryu控制器提供的OFP⁃FlowMod类创建流表项信息,并使用datapath.send_msg()方法,将流表项下发给相应交换机。
采用 Mininet[12]网络仿真软件和ryu 控制器搭建实验仿真平台。实验拓扑采用含有两个POD的胖树拓扑结构,如图3所示,包含10台OpenFlow交换机和8台主机。网络中的所有链路均设为全双工链路,链路带宽设为1Gb/s,并使用iperf工具产生模拟的数据中心流量,令主机h1-h4向主机h5-h8发送数据流。
图3 仿真实验拓扑图
因为本文的目标是使多路径网络拓扑实现负载均衡,所以选取网路的链路平均利用率作为评价指标,但是只参考链路平均利率路不够,还要考虑数据传输性能,因此再选取网络吞吐量作为评价指标。并与ECMP算进行对比,验证本文算法的有效性和优势。
如图4所示,0~10s之间,本文算法和ECMP算法的网络链路平均利用率几乎一样,因为实验开始,各条链路的实时状态没有差别,依据链路实时信息进行选路的本文算法和随机选路的ECMP算法没有明显差别。随着时间的推移,网络中的各条链路的状态已经不再一样,时延和剩余带宽都有了差别,所以依据链路实时状态选择最优路径的本文算法就比ECMP算法更加有效地利用了多路径的链路资源,所以链路的平均利用率就比ECMP算法高。
图4 链路平均利用率对比图
如图5所示,发包速率在0~500Mb/s之间,本文算法和ECMP算法的网络吞吐量基本一样。当发包速率大于550Mb/s时,本文算法的网络吞吐量明显大于ECMP算法,这是因为基于随机选路的EC⁃MP算法没有考虑链路的实时信息,可能将多条流hash到同一条路径,使得网络发生拥塞,从而降低了网络的吞吐量。而依据链路信息进行选路的本文算法会依据链路的实时状态进行选路,有效地避免拥塞,所以吞吐量要高于ECMP算法。
图5 网络吞吐量对比图
本文设计了一种基于SDN的负载均衡路由算法,综合考虑了链路的剩余带宽和时延,重新设定路径权值,并选择权值最大的路径进行数据的传输。实验结果表明,与传统的多路径路由算法EC⁃MP相比,本文算法在链路平均利用率和网络吞吐量等方面有一定的提高。