高 平,张 帆,张 东,翟飞龙
(1.中国航空无线电电子研究所,上海 200233; 2.西安交通大学 计算机科学与技术系,西安 710049;3.地理信息工程国家重点实验室,西安 710054; 4.中国电子科技集团公司第三十二研究所,上海 201808)
云计算为越来越多的互联网应用业务,如在线购物、网络直播、数据存储等提供强有力的技术支撑,云平台则对计算、存储网络等资源进行统一的管理和调度[1]。云架构网络作为云计算技术的基础设施平台,它的性能直接影响到企业提供的云服务质量。在网络性能优化上,由于云计算业务种类和数量的急剧增长以及服务节点和网络规模的不断增大,节点流量模型的更加复杂,对网络流量控制提出更高的要求。针对复杂业务模型和动态网络环境,为了给各类业务提供高确定的与合理的服务质量(Quality of Service,QoS)保障,研究一种适用于云架构网络的流量控制技术势在必行。为此,本文提出一种基于软件定义网络(Software Defined Network,SDN)的高确定性流量控制方法。该方法将SDN集中优化控制、全网感知优点与多队列调度机制、拥塞控制策略相结合,保证各类业务的带宽和时延,同时使用全可编程SDN交换机并配合个性化的流表下发机制,动态调整业务传输带宽和业务流等级。
队列调度是网络流量控制的重要技术,也是实现网络QoS控制的重要手段。在工业界和学术界已经出现了许多队列调度算法及其改进算法。文献[2]提出的RR算法实现简单,但不能满足不同类业务对时延的需求。文献[3]提出的PQ算法考虑到不同业务处理的优先级,但易使低优先级的业务流“饿死”,难以保证调度的公平性[4]。文献[5]提出的WFQ算法在原理上比轮询类调度算法优越,但实现较为复杂[6],传统网络交换设备的处理算法对用户不透明,用户无法做过多的干预,所以无法对相应的业务流做精确的带宽保证。文献[7]提出的CBWFQ算法允许用户对流分类,并且考虑到公平性,但缺少对语音类业务的支持。文献[8-9]提出的WRR算法和DWRR算法为每个队列设置不同的权重值,保证了不同优先级队列中的业务,但由于受到硬件资源的限制,只能将各类业务大致的划分到有限的队列中进行粗粒度管理,无法充分发挥算法的作用。此外,网络中业务数量和流量分布经常变化,需要时常调整算法参数。传统配置方式在频繁操作下存在人力时间成本高、易引入误操作的问题。除了RR、WRR这类轮循类算法外,另外提出了基于时延的调度算法,如EDF[10]、RCS[11]等,以及基于服务曲线理论的调度算法,如HFSC[12]、SCED[13]等,但这些算法很少能在商用交换设备得到部署。综上,在传统网络中使用上述某种算法对云架构网络进行流量控制存在以下问题:传统队列调度算法难以同时保证业务带宽和时延保证;传统网络的队列调度算法难以实现细粒度流量控制;静态的参数配置不适合动态的网络流量需求。可以看出,在传统网络中使用上述流量控制技术难以为云架构网络中的业务提供高确定性的时延和带宽保证。
基于对云架构网络业务及传统流量控制问题的分析,根据提出的SDN高确定性流量控制方法,本文设计一套高确定性流量控制系统,将SDN技术与传统流量控制技术相结合,对云架构网络中的各类应用业务全面感知,实现对网络中的业务流集中化、实时化、精细化管理。
本文系统采用分层设计,总体分为应用层、控制层和网络层。系统总体架构如图1所示。
图1 本文系统总体架构
系统总体架构由以下3个方面组成:
1)应用层。在该层上主要运行智能流量控制软件,包括网络态势感知模块和网络流量配置模块。网络态势感知模块感知网络情况并将网络信息呈现给网络管理者;网络流量配置模块根据网络管理者下发的策略,区分不同的业务流,对不同级别的业务流下发不同的QoS保证策略。
2)控制层。在该层运行SDN控制器,系统采用轻量级的Ryu[14]作为SDN控制器。该层包括5个模块:即端口信息收集模块、流量信息收集模块、主机管理模块、交换机管理模块和拓扑管理模块,获取网络的资源以及网络流量状况。其中网络的信息包括交换机、端口、主机的信息和网络拓扑结构,以及基于流的流量统计信息和基于端口的流量统计信息。控制器根据这些信息下发流量策略,完成网络的通信。
3)网络层。该层由物理SDN交换机、虚拟SDN交换机以及终端主机组成,其中虚拟SDN交换机、虚拟主机以及两者之间的链路由虚拟交换机生成软件Mininet[15]生成。SDN交换机跟控制器使用OpenFlow作为南向协议进行交互,完成网络状态信息的提取和流表的下发。
网络中的资源是有限的,当各种网络应用为了满足自身网络资源的需求而抢夺网络资源时,就会出现对服务质量的要求。服务质量主要包括传输带宽、传送时延、数据的丢包率和时延抖动等。网络中不同业务对于服务质量有不同的要求。例如,有些业务流具有时效性,只有在规定的时限内完成才有价值,这类流对时延和时延抖动敏感,而有些业务流较大,期望在相对较短时间内完成,这类流对吞吐量和带宽敏感。为了保证不同业务流需求,本文通过下面4种方法对业务流的Qos进行保障。
1)多队列调度机制。考虑到DWRR比WFQ的计算复杂度更低,具有良好的公平性、各队列间互不影响等优点,本文方法将DWRR引入到SDN控制器的多队列调度中。根据应用层中为不同业务流定制的流表,将不同类别的流分配到相应的队列中,队列之间实现轮询发送。为保证不同队列的带宽,利用了“赤字计数器”,并为不同队列设置不同的权重值,即每次发送指定的字节数。
SDN下的多队列调度流程如图2所示。
图2 SDN下的多队列调度流程
利用SDN网络全局控制的特性,为数据流分配合适的路径。对于有时延要求的业务流,将根据时延的敏感程度为其队列配置较大权重,控制器会根据其配置信息,在SDN交换机上预装流表,避免Packet-In消息上报和流表下发导致的网络时延。对于其他的业务流,网络流量管理模块会以网络态势感知模块获取的网络中每条链路的剩余带宽为权重,使用最短路径算法为其计算一条转发路径,并为路径上所有交换机下发相应的流表项,通过转发端口权重值小的队列进行转发。同时,网络流量管理模块会实时地监控网络的负载情况,当局部链路负载过重时,调整对时延无要求或对时延要求较小的业务流相关的流表,实现网络的负载均衡。通过将SDN的全局感知的优势与DWRR算法相结合,对业务流充分合理调度,实现同时对业务带宽和时延的保证。
2)拥塞控制策略。在云架构网络中流量分布具有高动态性和突发性,而且交换设备的缓存有限,很容易出现缓存溢出的拥塞丢包和流延迟变大的现象。为此,系统中摒弃TCP Reno,采用DCTCP协议,如图3所示,利用显示拥塞通知(Explicit Congestion Notification,ECN)控制了缓存队列的长度,当拥塞发生时,对超过队列拥塞标记阈值的数据包标记,接收端收到被标记的包后,通知源端对这类包限速。这样可以在很少占用缓冲区的情况下实现高吞吐量传输。通过拥塞控制策略,进一步为网络中高QoS业务流提供高确定性时延和带宽保证。
图3 拥塞控制策略
3)全可编程的SDN交换机。ONetSwitch是一款全可编程的SDN交换机,系统将其做为网络层中物理SDN交换机。利用该交换机“软件可编程、逻辑可重构、硬件可扩展”的特点,可以对交换机端口队列数量合理配置,对业务数量大的端口多配队列,对业务量数量小的端口少配队列,使参与多队列调度的业务流得到了更精细的划分,在很大程度上增加了不同业务流之间的隔离程度,减小它们之间影响。ONetSwitch交换机的使用让原有的队列调度算法实现了细粒度流量控制。
4)个性化的流表下发机制。在传统网络流量QoS保障中,需要对网络设备进行参数设置,配置的策略是静态的。而且需要网络管理员精通不同厂家设备的配置方式,对管理员业水平要求较高,配置过程耗时、易出错。本文方法能够让网络管理者根据业务流本身的性质通过网络流量配置模块,使控制器向交换机下发为不同的需求业务流定制的流表。流分类方法主要包含基于源IP地址、目的IP地址、源端口号、目的端口号、MAC地址、服务编码(ToS)、基于MPLS包头等。网络流量配置模块可以将上述分类方法任意组合并根据带宽时延要求划分业务流,不同类别的业务流可以随时调整转发队列。个性化的流表下发机制实现了在动态的网络环境下依然可以保证不同级别的QoS的。
云架构网络流量控制系统原型分前端可视化界面、SDN控制器和SDN交换机3个部分。
前端可视化界面由JavaScript、HTML和CSS开发,运行在Apache服务器上,用于实现软件和网络管理员的可视化交互。前端界面一方面通过Restful接口与SDN控制器交互,将网络拓扑信息、交换机信息、主机信息和相关的流量控制信息展示出来。其中,交换机信息包括交换机dpid、端口号、端口MAC;主机信息包括主机MAC、连接端口号等;流量控制信息包括交换机上的流表信息、流表匹配数据包条目以及端口带宽等。另一方面,前端接收管理员的指令,根据源IP地址、目的IP地址、源端口号、目的端口号、协议号、流量的优先级和指定带宽,为业务流添加或删除流量策略,完成流量的细化控制。
云架构网络流量控制系统原型如图4所示。
图4 云架构网络流量控制系统原型
SDN控制器安装在一台服务器上,预装基于Linux的Ryu控制器系统。在Ryu控制器下,开发了流量控制的应用程序,通过openflow协议与SDN交换交互,获取全网资源信息,生成网络拓扑,并根据流量信息和前端提供的流量策略为各类业务流计算最优传输路径,向在相应路径上的交换机下发流表信息,实现不同级别的QoS保证。同时,控制器与前端交互,向前端提供网络拓扑信息、交换机信息、主机信息和相关的流量控制信息。
由于本文系统需要在云网络下运行,既需要仿真的SDN网络中具有一定规模的主机、网络交换机和网络链路,又要具有更好的真实性效果。因此,本文采用Mininet和物理交换机组成半实物环境来进行仿真。运用ONetSwitch交换机作为物理SDN交换机,利用Mininet生成若干虚拟SDN交换机和虚拟主机,Mininet宿主机上有多个网口,分别于控制器以及物理交换机相连。在宿主机上按照定义的网络结构为网卡和Mininet中相应的虚拟交换机之间搭建网桥,将物理网络中的流量导入Mininet构建的虚拟网络中,同时将虚拟网络的流量导入物理网络中,实现网络的互联,即可构建半实物半虚拟的网络环境,扩展网络规模、并增强了实验结果的真实性。
为了实现系统中的多队列调度机制,在物理SDN交换机上,对原有的轮循调度功能进行修改,实现DWRR调度;在虚拟SDN交换机上,通过Linux流量控制器(Traffic Control,TC),根据控制器下发流量策略,将不同的业务流导入相应的队列中,并为队列设置指定带宽,实现了多队列的轮循调度,完成高QoS业务流带宽和时延保证功能。为了实现拥塞控制策略,在物理SDN交换机上,实现ECN功能,即为每个队列设置一个标记阈值,当实际队列长度超过该值时,会对多出的数据包进行ECN标记;在mininet上创建拓扑时启用ECN功能,使虚拟SDN交换机支持ECN功能,并且在虚拟终端上使用DCTCP协议。通过以上的方式可以进一步防止拥塞发生,减小业务流的时延。
本文系统能够根据用户需求区分关键业务流和背景流,为指定的关键业务流提供性能保证。为此,本文设计下面的实验,观察在多个流共存的拥塞状况下,关键业务流的丢包率、时延抖动、平均时延以及队列占用的情况。
实验环境:该系统在由一台安装Mininet的服务器、ONetSwitch物理交换机以及安装Ryu控制器PC机组成的网络上运行,如图5所示。其中,虚拟化SDN交换机数量10台,物理SDN交换机端口数4个,物理SDN交换机每个端口数据传输带宽为1 000 Mb/s。
图5 实验拓扑示意图
在实验中,观察关键业务流在背景流的干扰下的性能指标。设置1条关键业务流与2条背景流。如图5所示,背景流为TCP流量,分别从主机Host1和Host3发出,都到达主机Host0,一共占用1 000 Mb/s的带宽,带宽被完全占用。关键业务流从主机Host2到主机Host0,同样是TCP流量,持续80 s,共计发送8.688 GB数据。在这种情况下,关键业务流与背景流在Switch1、Switch2和ONetSwitch 3个交换机上发生竞争。为了完全保证关键业务流的带宽和时延,通过前端为3条流配置流量策略:将关键业务流的优先级设为最高,带宽为1 000 Mb/s,2条背景流优先级分别设为中等和最低。
使用sockperf测试关键业务流时延,如图6所示,99%的数据包的平均时延小于500 μs,所有的数据包平均时延为270 μs,小于2 ms。并使用iperf3测试关键业务流的丢包率,如表1所示,出现了4个重传包,按照1 500 Byte的最大数据包大小进行计算:关键业务流丢包率=4/((8.688×1 0243)/1 500)≈6.4×10-7。为了测试关键业务流的时延抖动,将其改为UDP流,经过iperf测试发现时延抖动为0.144 ms。通过以上测试,可以看出本文系统能为指定的业务流提供可靠的性能保障。
图6 数据包时延分布
间隔时间/s传输量/MB重传数据包数0~101 116010~201 108120~301 116030~401 112140~501 113050~601 110160~701 111170~801 11000~808 8964
为了进一验证拥塞控制策略的性能,采用与图5相同的拓扑,链路带宽为100 Mb/s,对比本文方法和传统的TCP Reno协议下拥塞控制方法的效果,并观察队列的占用情况。主机Host1和主机Host2向主机Host0同时发送数据,在这种情况下,交换机Switch1发生拥塞。如图7所示,与传统TCP Reno相比,本文系统的拥塞控制方法可以使队列中数据包个数降低到个位数,队列占用率至少降低了80%,较大程度上避免了拥塞的发生。
图7 队列占用情况
本文提出一种基于SDN的云架构网络高确定性流量控制方法。该方法将SDN集中优化控制、全网感知、灵活敏捷管理的优点与传统多队列调度机制相结合,并使用拥塞控制策略保证了业务流的带宽和时延。运用全可编程交换机进行业务流的细粒度管理,再配合个性化的流表下发机制,实现了业务传输带宽、路由和业务流等级动态调整。实验结果表明,该方法实现对业务流的集中化、实时化、精细化管理,为云架构网络中交换业务提供高确定性带宽、路由和时延保障。下一步将继续完善本文方法,并将其使用到更大的网络范围中进行验证。