基于队列树的SDN控制器高效消息处理机制

2017-03-06 20:31蒋暕青洪梅李泽军
电脑知识与技术 2016年30期
关键词:软件定义网络

蒋暕青 洪梅 李泽军

摘要:SDN控制器是SDN网络的核心,是决定SDN网络效率的关键因素之一。SDN控制器管理网络的主要途径是处理交换设备发来的各种消息,因此如何高效的处理消息就成为了设计SDN控制器的关键。基于SDN网络中消息的特征,该文设计了一种基于队列树的高效消息处理机制: 通过对不同类型消息的分类处理实现了控制器对关键消息的及时响应;通过对相似消息的归并处理大大降低了控制器的工作量;通过可调整的线程池实现了控制器对不同消息的自适应处理。

关键词:软件定义网络;消息处理;队列集

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)30-0225-03

A Queue Set based Efficient Message Processing Mechanism for SDN Controller

JIANG Jian-qing, HONG Mei, LI Ze-jun

(National Engineering Research Center for Broadband Networks & Applications, Shanghai 200336, China)

Abstract: SDN Controller is the Core of a SDN network, which mainly determines the efficiency of the network. Since the Controller manages a SDN network mainly by processing the messages of the switches in the network, how to efficiently processing the messages becomes the critical point in designing a SDN Controller. According to the characteristics of messages in the SDN networks, the paper proposes an efficient message processing mechanism based on queue tree, which mainly consist of three methods: message categorization to insure the timely processing for important messages; message merging to reduce the workloads of Controllers; and adjustable thread pool to achieve the adaptivity in processing different messages in various situations.

Key words: SDN; Message Processing; Queue Tree

1 引言

2020年全球近三分之二的總工作负荷将在云端处理,数据中心(Data Center, DC)将成为大部分互联网流量的源头或终点。而在数据中心产生的所有流量中,内部流量占数据中心总流量的76%,主要是存储和虚拟机之间的数据交换等活动。因此,未来的互联网将是以云计算数据中心为核心的网络。在现有的数据中心中,各业务之间相互独立占用资源且没有资源移动性要求,因此各业务网络采用物理方式隔离,自成一体。这种方式构建的网络扩展性非常有限,只能纵向替换而不能横向添地进行加扩展,造成系统性能存在瓶颈。往往为了满足1%的峰值时刻的流量需求,导致99%的机器必须参与工作,且每台机器的工作效率往往低于20%。

传统互联网由于存在着复杂的交换机、终端、路由器、以及其他设备,在这些网络设备中使用着大量封闭、专有的内部接口以及协议;所以在传统网络中的流量控制普遍效率低下而且多采用“告警-响应”的方式,网络服务在现有的网络管理方式下做出响应前,很有可能已经受到了影响。传统网络中因为存在大量不同设备,使用不同协议,所以无法对所有的网络设备进行有效的统一控制,而且网络维护成本居高不下,网络管理需要大量人工配置。为了打破这种局面,在2008年Nick McKeown 教授等人提出了软件定义网络[1-2](Software Defined Network, SDN )的概念。软件定义网络是把传统网络设备紧密耦合的网络架构分拆为应用、控制、数据转发3层分离的体系架构。如图 1,其核心技术OpenFlow通过实现网络设备的控制权和转发权的相互独立,从而灵活、方便的控制数据包的转发,提供了一种可编程的网络管理模式。在软件定义网络中,控制器通过南向接口(OpenFlow协议)获取底层网络设备信息,进行统一部署、集中管理以及灵活控制,从而解决了分散网络设备的管理控制问题。同时,控制器提供了可编程扩展的北向接口,按不同需求设计的功能应用软件可以直接运行在控制器上,利用控制器对全局网络设备进行统一更新和功能升级。

控制层的功能通过集中式的SDN控制器(Controller)来实现。SDN控制器包含两层开放的接口:其中北向接口为可编程接口,面向应用层;南向接口通过OpenFlow等协议与转发层进行交互。应用层由软件形态的应用程序构成,网络管理员或系统开发者只需要关注网络应用的自身逻辑,并不需要关注底层更多的实现细节。控制层中的控制器主要根据具体应用需求对转发层的各种网络设备进行各种配置和管理。通过对转发表的集中管理,控制器能够实时控制网络各链路中流量的大小和走向,进而能够实现对网络带宽资源和网络功能元件虚拟化管理,从粗放的网络模块增加转变为细粒度的资源池扩充,使得网络资源利用率都得以大幅提升。而转发层一般只需基于控制层下发的指令和策略对数据分组进行转发即可。通过这种方式,网络在不需要对转发层进行硬件更改或替换的情况下,便可灵活地对新业务或新协议进行适配,推进了网络新技术和新协议的实现和部署,提高了网络的灵活性和可操作性。SDN颠覆了现有网络架构,它使得网络从一个垂直集成、封闭的状态演变成为水平集成、开放、支持快速创新的生态系统。自2009年业内第一次提出相关概念以来,SDN就引起了业界的巨大关注,成为研究热点。

SDN控制器虽能大幅提升网络资源的利用率,但随着数据中心规模的扩大,SDN控制器仍面临着一个主要问题:交换机和用户主机数目的增长,使得每个交换机需存储的流表内容也在相应增加(理论上每台交换机上的流表最多需覆盖到网络中的所有主机),这不仅需要每台交换机有更大的存储容量和更快的查询速度,也对控制器的工作效率提出了更高的要求。尽管当前已有若干SDN控制器被相继提出,但由于受制于性能和可扩展性等,它们所能管理的网络规模还有些,尚不具备商业化运营的能力。因此,随着大数据浪潮的到来,我们迫切需要可面向云计算数据中心的高性能SDN控制器。SDN控制器管理网络的主要途径是处理交换设备发来的各种消息,因此如何高效的处理消息就成为了设计SDN控制器的关键。基于SDN网络中消息的特征,本文设计了一种基于队列树的高效消息处理机制: 通过对不同类型消息的分类处理实现了控制器对关键消息的及时响应;通过对相似消息的归并处理大大降低了控制器的工作量;通过可调整的线程池实现了控制器对不同消息的自适应处理。

2 研究现状

随着终端计算处理能力的提高、网络传输能力的扩大,网络所承载的信息急剧膨胀,互联网不再是单纯以通信为目的的网络,而是更多地朝着满足人们获取信息需求的方向发展,成为一个信息承载和分发的平台。由于人们对信息获取方式(有线、移动)、信息类型 (数据、话音、视频)、信息质量、信息安全等呈现多元化的需求,所以互联网为了适应和满足各类需求不断地引入大量的控制协议,形成了一个庞大的控制平面。这些控制协议从设计上依附于特定的转发协议,而且从实现技术上看,控制平面与转发平面都运行在网络设备中,给网络功能的扩展和网络的管理带来了巨大的挑战,传统网络架构越来越不能满足当今企业、运营商以及用户的需求。

基于这种背景,SDN软件定义的网络被提出并作为软件定义数据中心的重要一部分。SDN(软件定义网络)是一种新型的网络架构,它的设计理念是将网络的控制平面与数据转发平面进行分离,支持集中化的网络状态控制,实现底层网络设施对上层应用的透明。SDN具有灵活的编程能力,使得网络的自动化管理和控制能力获得空前的提升,能够有效地解决当前网络所面临的资源规模扩展受限,组网灵活性差,难以快速满足业务需求等问题。软件定义网络是一种新型网络创新架构,其核心技术通过将网络设备控制面与数据面分离开来,通过软件程序灵活地配置网络功能,使得网络的自动化管理和控制能力得到空前的提升,从而实现了网络流量的灵活控制,为核心网络及应用的创新提供了良好的平台,能有效解决当前网络系统所面临的资源规模扩展受限、組网灵活性差、 难以快速满足业务需求等问题,便于网络升级和适应各种新型业务的需求。SDN控制器负责整个网络的控制平面,承接物理网络和上层应用。目前市场上厂商的、开源的控制器大大小小有几十种,但是这些控制器的消息队列不可控,不够灵活,扩展性不够好。现有的大部分SDN控制器的解决方案通常都是采用固定的消息队列模式,队列模式不可调整,不能对某个单独消息做特殊队列安排。

鉴于此,如何找到一种更好的SDN控制器消息队列管理方案就成了本领域技术人员亟待解决的问题。

3 基于队列树的SDN控制器高效消息处理机制

3.1 SDN控制器消息特征

根据OpenFlow协议[3],SDN控制器需要处理的消息主要分为以下几类:

1) 拓扑变化相关消息:例如交换机的上线下线、交换机的端口变化、链路变化、拓扑发现LLDP消息等;

2) 主机通讯相关信息:例如ARP消息、IP消息、DHCP消息等;

3) 网络心跳和流量监控等消息:主要是OpenFlow协议中的Echo消息和针对交换机、端口或流表的流量统计数据。

上述三类消息的特征和重要性都有着很大的区别。第一类消息的数量最小,重要性却最大,需要控制器及时的做出相应,否则会影响整个网络的通信。第二类消息的数量会比较多,网络中的每个主机的通信行为都会导致控制器收到相应的消息。若某个主机大量的发包,则控制器很有可能会被阻塞掉。但是重要性却没有第一类消息大,因为若控制器处理不及时,只会影响到相关主机的通信。第三类消息的数量不多,重要性也最低,可以看做是对网络的监控消息,处理不及时不会影响到网络的通信。

因此,SDN控制器的消息处理机制面临以下的两个挑战:首先是需要能够保证重要性最高的第一类消息任何情况下都要得到及时的处理;其次是针对第二类消息应有一个高效的分类归并处理和缓存机制,以应对DDos攻击等带来的大量消息。

3.2 消息队列树

根据3.1所分析的消息的特征,我们设计了如图2所示的消息队列树。在这个消息队列树上有两个类型的对象:消息类型节点(MsgTypeNode)和消息队列(MsgQueue)。消息类型节点代表了一个特定类型的消息,根据消息的种类及他们之间的包含关系,他们构成了父子关系。每一个消息类型节点多有对应的一个消息队列,其中存储了该类型所对应的消息或子队列。设置子队列的原因是有些消息可以进行归并处理。例如,针对同一个主机地址的ARP_Request是只需要处理一次的。

每一个消息类型节点都对应于一个相应的消息处理线程Msg_Handler。消息处理节点需要实现以下的几个接口:

1) PushMsg 用来处理一个消息。该函数应该会首先判断当前消息是否可以放入某个子节点中,如果其没有子节点或所有的子节点都和此消息不匹配,则该消息应放入其自身的消息队列中。放入消息队列中时,还需要判断是否有子队列。若有子队列,则应根据子队列分队规则选择相应的子队列。

2) GetMsg 用以返回一个消息给相应的Msg_Handler处理。GetMsg接口应支持两个参数:IfDel和Msg。IfDel表示返回相应的消息后是否需要从队列中删除。Msg参数表示指定被返回的消息的属性。

每一个消息类型节点是否存在取决于是否有相应的Msg_Handler。当系统初始化时,所有支持的Msg_Handler都应在系统中注册以提交其支持的消息的类型信息。SDN控制器根据所有Msg_Handler提交的注册信息以决定建立的消息队列树。SDN控制器会为每一个消息处理Msg_Handler生成一定数量的线程。这些线程都会监控一个公共的信号量。当消息类型节点添加一个消息到自身队列后,会通过增加信号量的值以通知所有的Msg_Handler线程来取消息。

3.3 系统的架构

图3显示了基于队列树的SDN控制器消息处理架构。SDN控制器根据消息类型划构建一个队列树,不同类型的消息会根据规则放入队列树上的不同的队列中。根据一个消息的消息特征为所述消息建立一个对应的Handler,所述消息的消息特征包括消息类型;所述Handler包括add_msg接口和msg_handler接口;其中,add_msg接口用于接收消息并将所述消息封装并添加到所述消息队列中;msg_handler接口用于对所述消息进行处理。在一个实施例中,所述消息特征还包括协议版本。在一个实施例中,所述消息和对应的Handler采用注册机制管理,以所述消息的消息特征为关键字,以对应的Handler为值进行注册。协议消息与具体的消息处理Handler采用注册机制,灵活可控,可只注册需要处理的协议消息。在一个实施例中,每一个消息队列对应一个独立的线程池,所述消息队列中的被封装的消息由所述线程池处理。各个消息队列的线程池相互独立,互不干扰,极大提高了消息处理的并发性。所述消息队列包括子队列,消息以协议子类型或者消息目的地址或者自定义字段作为关键字来区分以封装到不同的子队列中。在一个实施例中,所述被封装的消息具有相同的封装结构,所述封装结构包括消息体、协议版本、消息类型以及对应的Handler。在一个实施例中,一个消息队列包括多种消息类型。

SDN控制器接收消息,并根据消息的消息特征確定对应的Handler,调用所述Handler的add_msg接口将所述消息封装并添加到所述消息队列中。在一个实施例中,所述消息队列包括子队列,所述Handler的add_msg接口将消息以协议子类型或者消息目的地址或者自定义字段作为关键字来区分以封装到不同的子队列中。所述消息为OpenFlow消息。在一个实施例中,所述SDN控制器以EPOLL模式接收消息。EPOLL是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,EPOLL更加灵活,没有描述符限制。EPOLL使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。

所述消息队列中取出被封装的消息,并调用所述被封装的消息对应的Handler的msg_handler接口对所述被封装的消息进行处理。在一个实施例中,各个线程池分别从对应的消息队列(Queue)中获取消息(CMsg),再从CMsg中获取关联的Handler,最后通过Handler的msg_handler接口来处理消息。各个Queue的线程池相互独立,互不干扰,极大提高了消息处理的并发性。

4 总结

SDN控制器是SDN网络的核心,是决定SDN网络效率的关键因素之一。SDN控制器管理网络的主要途径是处理交换设备发来的各种消息,因此如何高效的处理消息就成为了设计SDN控制器的关键。基于SDN网络中消息的特征,本文设计了一种基于队列树的高效消息处理机制: 通过对不同类型消息的分类处理实现了控制器对关键消息的及时响应;通过对相似消息的归并处理大大降低了控制器的工作量;通过可调整的线程池实现了控制器对不同消息的自适应处理。

参考文献:

[1] Fundation O N.Software-defined networking: The new norm for networks. ONF White Paper, 2012.

[2] 王文东,胡延楠.软件定义网络, 正在进行的网络变革[J].ZTE TECHNOLOGY JOURNAL, 2013.

[3] McKeown N, et al. OpenFlow: enabling innovation in campus networks[J]. ACM SIGCOMM Computer Communication Review, 2008,38(2): 69-74.

猜你喜欢
软件定义网络
中国联通SDN的思考和应用实例
业务功能链技术及其应用探析
针对大规模软件定义网络的子域划分及控制器部署方法
一种新的SDN架构下端到端网络主动测量机制