软件定义网络SDN的研究进展(9)
发布时间:2021-06-06
发布时间:2021-06-06
SDN的研究进展
70JournalofSoftware软件学报V01.26,No.1,January2015护,可以完成需要全网信息的路由等操作.层次控制器交互存在两种方式:一种是局部控制器与全局控制器之间的交互,另一种是全局控制器之间的交互.对于不同运营商所属的域来说,仅需协商好全局控制器之间的信息交互方式即可.Kandoo[52】实现了层次分布式结构.当交换机转发报文时,首先询问较近的局部控制器.若该报文属于局部信息,局部控制器迅速做出回应.若局部控制器无法处理该报文,它将询问全局控制器,并将获取的信息下发给交换机.该方式避免了全局控制器的频繁交互,有效降低了流量负载.由于这种方式取决于局部控制器所处理信息的命中率,因此在局部应用较多的场景中具有较高的执行效率.
SDN网络操作系统应当具有实时运行所开发应用的能力,即,能够达到开发与执行的平衡.NOX采用Python或C++,使用Python时开发效率较高,执行效率较低;而使用C++时执行效率很高,开发效率却很低.于是,科研人员致力于开发通用的平台,尽可能地在开发与执行之问达到一个较好的平衡.Beacon[531是一个基于Java的通用平台,它向用户提供了一系列相关的库与接口用于开发,并提供运行时模块化的功能,使其在保证性能的情况下具有了实时运行的能力,实现了开发与执行两者之间的平衡.操作系统将资源形成文件系统,文件具有层次结构,方便操作系统随时读取与调用.控制器所管理的资源也具有类似特征,能够使得用户和应用通过标准的文件I/O进行交互.yanc[”】控制器即采用了文件系统的方式处理资源,它把网络应用视为不同的进程。每个进程被分隔成不同的视图或分片(slice).在yanc中,无论物理交换机还是数据流参数都将形成文件,不同的应用则根据自身的需求调用不同的文件.此外,SDN控制器平台已经存在大量实际开发,包括Floodlight[55],POX[56】和Ryup川等.典型控制器的对比情况见表3.
Table3Comparisonofgeneralcontrollerplatforms
表3典型控制器平台对比
控制器
NOX【12J线程单
多
多
单
单
单
多
多
多
多分布否否否是是是是是实现语言C++,PythonC++/PythonJavaC++/Python/Java开发团队NiciraTorontoRiceNiciraNOX—MTt”1Maestrol471OnixI”1HyperFlow川Kandoop刮BeaconI”’Floodlight口副POXp”Ryup”C++Torontoc,C++&PythonJavaJavaTorontoStanfordBigSwitchNiciraNTT否Python是Python
3.2接口语言
控制器提供了北向接口,方便用户配置网络.然而,当今的网络存在各式各样的应用,如流量监控、负载均衡、接入控制和路由等.传统的控制器平台(例如NOX[121)仅能提供低级配置接口,且使用像C++这种通用语言,抽象程度较低,造成网络配置成本并未大幅度降低.针对这种情况,科研人员致力于开发一种抽象的、高级配置语言.这些抽象语言能够统一北向接口,改善接口的性能,从而全面降低网络的配置成本.
耶鲁大学团队开发了一系列网络配置语言,旨在搭建具有优化性能的通用北向接口.Nettle[581是描述性语言,采用了函数响应式编程(functionalreactiveprogramming,简称FRP)方式.FRP是基于事件响应的编程,符合控制器应对各种应用的实际响应情况.Nettle的目标是实现网络配置的可编程化,而可编程化的网络配置要求控制器性能足够高,因此,该团队又提出了McNettle【591,一种多核Nettle语言.McNettle并未改变描述性与FRP的特性,而是利用共享内存、多核处理的方式增强了用户开发体验.Procera[60】则进一步对语言抽象作了优化,采用高级的网络策略来应对各种应用.为了使控制器更好地发挥接口语言的性能,该团队提出了Maple【61】,如图6所示.Maple对接口语言作了进一步抽象,允许用户使用自定义抽象策略.为了能够高效地将抽象策略分解成一系列规则,并下发到相应的分布式交换机上,Maple不但采用了高效的多核调度器,最关键的是,它采用了跟踪运行时优化器(tracingruntimeoptimizer)来优化性能.该优化器一方面通过记录可重用的策略,将负载尽可能地转移到交换机来处理.另一方面,通过动态跟踪抽象策略与数据内容及环境的依赖性,使流表始终处于最新状态,从