一种SDN控制器消息队列管理方法及系统与流程

文档序号:13391452阅读:322来源:国知局
一种SDN控制器消息队列管理方法及系统与流程

本发明涉及一种计算机网络技术领域,特别是涉及一种sdn控制器消息队列管理方法及系统。



背景技术:

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

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

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



技术实现要素:

鉴于以上所述现有技术的缺点,本发明的目的在于提供一种sdn控制器消息队列管理方法及系统,用于解决现有技术中sdn控制器种类多,且控制器的消息队列不可控,不够灵活,扩展性不够好的问题。

为实现上述目的及其他相关目的,本发明提供一种sdn控制器消息队列管理方法,所述sdn控制器消息队列管理方法包括:所述sdn控制器根据消息类型划分为至少两个消息队列,每一种消息类型只能属于一个消息队列;根据一个消息的消息特征为所述消息建立一个对应的handler,所述消息的消息特征包括消息类型;所述handler包括add_msg接口和msg_handler接口;其中,add_msg接口用于接收消息并将所述消息封装并添加到所述消息队列中;msg_handler接口用于对所述消息进行处理;所述sdn控制器接收消息,并根据消息的消息特征确定对应的handler,调用所述handler的add_msg接口将所述消息封装并添加到所述消息队列中;从所述消息队列中取出被封装的消息,并调用所述被封装的消息对应的handler的msg_handler接口对所述被封装的消息进行处理。

可选地,所述消息和对应的handler采用注册机制管理,以所述消息的消息特征为关键字,以对应的handler为值进行注册。

可选地,每一个消息队列对应一个独立的线程池,所述消息队列中的被封装的消息由所述线程池处理。

可选地,所述消息队列包括子队列,消息以协议子类型或者消息目的地址或者自定义字段作为关键字来区分以封装到不同的子队列中。

可选地,所述被封装的消息具有相同的封装结构,所述封装结构包括消息体、协议版本、消息类型以及对应的handler。

可选地,所述消息特征还包括协议版本。

可选地,一个消息队列包括多种消息类型。

可选地,所述消息为openflow消息。

可选地,所述sdn控制器以epoll模式接收消息。

本发明提供一种sdn控制器消息队列管理系统,所述sdn控制器消息队列管理系统包括:消息处理设定模块,用于根据消息类型划分为至少两个消息队列,每一种消息类型只能属于一个消息队列;根据一个消息的消息特征建立一个对应的handler,所述消息的消息特征包括消息类型;所述handler包括add_msg接口和msg_handler接口;其中,add_msg接口用于接收消息并将所述消息封装并添加到所述消息队列中;msg_handler接口用于对所述消息进 行处理;消息接收模块,用于接收消息,并根据消息的消息特征确定对应的handler,调用所述handler的add_msg接口将所述消息封装并添加到所述消息队列中;消息处理模块,用于从所述消息队列中取出被封装的消息,并调用所述被封装的消息对应的handler的msg_handler接口对所述被封装的消息进行处理。

可选地,所述消息和对应的handler采用注册机制管理,以所述消息的消息特征为关键字,以对应的handler为值进行注册。

可选地,每一个消息队列对应一个独立的线程池,所述消息队列中的被封装的消息由所述线程池处理。

可选地,所述消息队列包括子队列,消息以协议子类型或者消息目的地址或者自定义字段作为关键字来区分以封装到不同的子队列中。

可选地,所述被封装的消息具有相同的封装结构,所述封装结构包括消息体、协议版本、消息类型以及对应的handler。

可选地,所述消息特征还包括协议版本。

可选地,一个消息队列包括多种消息类型。

可选地,所述消息为openflow消息。

可选地,所述sdn控制器以epoll模式接收消息。

如上所述,本发明的一种sdn控制器消息队列管理方法及系统,具有以下有益效果:handler与消息队列的关系可灵活控制,不是固定不变的,同一类消息可以映射到同一个队列,不同类别的消息可以映射到不同的队列;消息如何入队列完全可控制,消息如何处理也完全可控制。并且,协议消息与具体的消息处理handler采用注册机制,灵活可控,可只注册需要处理的协议消息。因此,使得sdn控制器的消息处理更加灵活,具有高可维护性和高扩展性。

附图说明

图1显示为本发明的sdn控制器消息队列管理方法的一实施例的流程示意图。

图2显示为本发明的sdn控制器消息队列管理系统的一实施例的模块示意图。

图3显示为本发明的sdn控制器消息队列管理系统的一实施例的工作原理示意图。

元件标号说明

1sdn控制器消息队列管理系统

11消息处理设定模块

12消息接收模块

13消息处理模块

s1~s3步骤

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。

需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

本发明提供一种sdn控制器消息队列管理方法。在一个实施例中,如图1所示,所述sdn控制器消息队列管理方法包括:

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

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

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

本发明提供一种sdn控制器消息队列管理系统,所述sdn控制器消息队列管理系统能够应用如上所述的sdn控制器消息队列管理方法。在一个实施例中,如图2所示,所述sdn控制器消息队列管理系统1包括消息处理设定模块11、消息接收模块12以及消息处理模块13。其中:

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

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

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

在一个实施例中,所述sdn控制器消息队列管理系统的一实施例的工作原理如图3所示,其具体的工作步骤可以包括:

步骤1,启动sdn控制器,首先关联handler与queue之间的映射关系。of_packetin消息是sdn控制器需要处理最多的消息,因此of_packetinhandler可单独分配一个queue;其他openflow消息(例如of_hello_handler消息)则可合起来分配一个queue。注册以消息的协议版本+消息类型作为key,以handler作为value进行注册。

步骤2:制定queue(消息队列)与线程池的关联关系。每个queue都拥有自己都有的处理线程池。queue与线程池一一对应,避免了由于单个类型消息过多导致其他消息来不及处理的情况。

步骤3:消息处理模块需要向消息接收模块注册需要处理的openflow消息类型及其对应的handler。

步骤4:启动每个queue关联的线程池。

步骤5:启动消息接收模块开启epoll模式接收openflow消息。

步骤6:消息接收模块收到消息之后,首先分析消息的协议版本和消息类型,以协议版本+消息类型作为key去获取对应的已注册的handler,如不存在对应的handler,则说明此消息未注册,直接丢弃。不同的openflow消息可以划分到不同的queue中。

步骤7:消息接收模块封装消息为统一的固定结构cmsg,该结构包含消息体、协议版本、消息类型以及对应的handler。

步骤8:消息接收模块使用handler的add_msg接口放置消息到指定queue。add_msg接 口由具体的openflow协议处理handler实现,用于告知该种类的openflow消息如何入队列。同一个queue还可以划分为更小的子队列。每个queue内部是一个以(key,value)为结构的多队列系统,以协议子类型或者消息目的地址或者自定义字段作为key,以子队列作为value。

步骤9:各个线程池分别从对应的queue中获取cmsg(被封装的消息),再从cmsg中获取关联的handler,最后通过handler的msg_handler接口来处理消息。各个queue的线程池相互独立,互不干扰,极大提高了消息处理的并发性。

综上所述,本发明的一种sdn控制器消息队列管理方法及系统,具有以下有益效果:handler与消息队列的关系可灵活控制,不是固定不变的,同一类消息可以映射到同一个队列,不同类别的消息可以映射到不同的队列;消息如何入队列完全可控制,消息如何处理也完全可控制。并且,协议消息与具体的消息处理handler采用注册机制,灵活可控,可只注册需要处理的协议消息。因此,使得sdn控制器的消息处理更加灵活,具有高可维护性和高扩展性。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1