时间:2015-12-25 16:10 文章来源:http://www.lunwenbuluo.com 作者:张朝昆,崔勇,唐翯祎, 点击次数:
作为另一种利用硬件灵活处理技术,FlowAdapter采用交换机分层的方式来实现高效、灵活的多表流水线业务.FlowAdapter交换机分为3层:最上层是可以通过更新来支持任何新协议的软件数据平面,底层是相对固定但转发效率高的硬件数据平面,位于中部的FlowAdapter层负责软件数据平面和硬件数据平面之间的通信.
当控制器下发规则时,软件数据平面将存储这些规则,形成M个阶段的流表.由于这些规则相对灵活,不能全部由交换机直接转化成相应转发动作,而硬件数据平面可以实现规则的高速匹配转发.因此可利用中间层FlowAdapter将两个数据平面中的规则进行无缝转换,即,将相对灵活的M阶段的流表转换成能够被硬件所识别的N阶段的流表.为了达到转换目的,FlowAdapter首先检查软件数据平面的全部规则,然后根据完整的规则将M阶段的流表转换成1阶段流表,最后再将1阶段流表转换成N阶段流表发送给硬件数据平面.通过这种无缝转换,理论上解决了传统交换机硬件与控制器之间多表流水线技术不兼容的问题.另外,FlowAdapter相对控制器完全透明,对FlowAdapter交换机的更新不会影响控制器的正常运行.
与利用硬件设计交换机的观点不同,虽然软件处理的速度低于硬件,但是软件方式可以最大限度地提升规则处理的灵活性,同时又能避免由于硬件自身内存较小、流表大小受限、无法有效处理突发流等问题,因而同样受到学术界的关注.利用交换机CPU处理转发规则,可以避免硬件灵活性差的问题.由于CPU处理数据包的能力变得越来越强,商用交换机很自然地也会采用这种更强的CPU.这样,在软件处理转发速度与硬件差别变小的同时,灵活处理转发规则的能力得到提升.进一步地,还可以采用NP的处理方式.由于NP专门用来处理网络的各种任务,如数据包转发、路由查找和协议分析等,因此在网络处理方面,NP比CPU具有更高效的处理能力.无论采用CPU还是NP,应发挥处理方式灵活性的优势,同时尽量避免处理效率低而带来的影响.
此外,在数据平面中,哪些元素可以交给硬件处理,哪些元素可以交给软件处理,也是值得考虑的问题.例如,原本设计到硬件中的计数器功能并不合理[38],而应当放置到CPU中处理,这样既可以保证计数器的灵活性,又能节省硬件空间,降低复杂度,同时还能够避免硬件计数的限制.
2.2转发规则相关研究
与传统网络类似,SDN中也会出现网络节点失效的问题,导致网络中的转发规则被迫改变,严重影响了网络的可靠性.此外,流量负载转移或网络维护等也会带来转发规则的变化.SDN允许管理人员自主更新相关规则,但采用较低抽象层次(low-level)的管理方式来更新规则容易出现失误,导致出现规则更新不一致的现象.即便没有出现失误,由于存在更新延迟问题,在更新过程中,转发路径上有些交换机已经拥有新规则,而另一些交换机还使用旧规则,仍然会造成规则更新不一致性的问题.
将配置细节进行抽象,使管理人员能够使用较高抽象层次(high-level)的管理方式统一更新,就可防止低层管理引起的不一致性问题.一般采用两阶段提交方式来更新规则:第1阶段,当某个规则需要更新时,控制器询问每个交换机是否处理完对应旧规则的流,并对处理完毕的所有交换机进行规则更新;第2阶段,当所有交换机都更新完毕时,才完成更新,否则将取消该更新操作.为了能够使用两阶段提交方式更新规则,在预处理阶段,对数据包打上标签以标示新旧策略的版本号.在转发过程中,交换机将检查标签的版本,并按照对应版本的规则执行相应的转发动作.当数据包从出口交换机转发出去时,则去掉标签.然而,这种方式需要等待旧规则的数据包全部处理完毕才能处理新规则的数据包,这样会造成规则空间被占用进而产生较高的成本.增量式一致性更新算法可以解决规则空间成本较高的问题,该算法将规则更新分成多轮进行,每一轮都采用二阶段提交方式更新一个子集,这样可以节省规则空间,达到更新时间与规则空间的折中.McGeer提出了基于OpenFlow的安全更新协议来完善抽象层两阶段提交方式的安全性,该协议将无法识别新旧规则的报文发送至控制器,来保证流转发的正确性.此外,规则更新过程需要考虑性能问题.Ghorbani等人研究了虚拟机场景下规则更新算法,该算法可以确保在更新过程中拥有足够的带宽,同时不会影响到其他流的正常转发.
由于OpenFlow无法主动增加未知协议,为保证新协议能在SDN中使用,OpenFlow只能将该协议更新到接口的规格说明书当中,并未真正做到协议无关.因此,如何做到协议无关转发,成为数据平面可扩展的重要研究方向之一.在数据平面建立与协议无关的流指令集(flowinstructionset,简称FIS),可以做到协议无关的转发.
协议无关的FIS抽象了数据平面,每个协议相关的规则会转化成FIS中协议无关的指令,并被数据平面硬件所识别,从而实现快速转发.协议无关的FIS使规则与转发设备无关,提高了数据平面的可扩展性,真正实现了控制平面与数据平面的全面分离.
3、控制层关键技术研究
控制器是控制层的核心组件,通过控制器,用户可以逻辑上集中控制交换机,实现数据的快速转发,便捷安全地管理网络,提升网络的整体性能.本节首先详细阐述了以NOX控制器为基础的两种技术改进方法:一种是采用多线程的控制模式,另一种是通过增加分布式控制器数量,实现扁平式和层次式控制模式.然后介绍了主流接口语言的研究发展,实现控制语言抽象.最后,深入分析了控制器的一致性、可用性和容错性等特性.
3.1控制器设计问题
控制器的基本功能是为科研人员提供可用的编程平台.最早且广泛使用的控制器平台是NOX,能够提供一系列基本接口.用户通过NOX可以对全局网络信息进行获取、控制与管理,并利用这些接口编写定制的网络应用.随着SDN网络规模的扩展,单一结构集中控制的控制器(如NOX)处理能力受到限制,扩展困难,遇到了性能瓶颈,因此仅能用于小型企业网或科研人员进行仿真等.网络中可采用两种方式扩展单一集中式控制器:一种是通过提高自身控制器处理能力的方式,另一种是采用多控制器的方式来提升整体控制器的处理能力.
控制器拥有全网信息,能够处理全网海量数据,因此需要具有较高的处理能力.NOX-MT提升了NOX的性能,它是具有多线程处理功能的NOX控制器.NOX-MT并未改变NOX控制器的基本结构,而是利用传统的并行技术提升性能,使NOX用户可以快速更新至NOX-MT,且不会由于控制器平台的更替产生不一致性问题.
另一种并行控制器为Maestro,它通过良好的并行处理架构,充分发挥了高性能服务器的多核并行处理能力,使其在网络规模较大情况下的性能明显优于NOX.
对于众多中等规模的网络来说,一般使用一个控制器即可完成相应的控制功能,不会对性能产生明显影响.然而对于大规模网络来说,仅依靠多线程处理方式将无法保证性能.一个较大规模的网络可分为若干个域,如图3所示.若保持单一控制器集中控制的方式来处理交换机请求,则该控制器将与其他域的交换机之间存在较大延迟,影响网络处理性能,这一影响将随着网络规模的进一步扩大变得无法忍受.此外,单一集中控制存在单点失效问题.通过扩展控制器的数量可以解决上述问题,也就是将控制器物理分布在整个网络中,仅需保持逻辑中心控制特性即可.这样可使每个交换机都与较近的控制器进行交互,从而提升网络的整体性能.
分布式控制器一般可采用两类方式进行扩展,分别是扁平控制方式和层次控制方式.对于扁平控制方式,所有控制器被放置在不相交的区域里,分别管理各自的网络.各控制器间的地位相等,并通过东西向接口进行通信.对于层次控制方式,控制器之间具有垂直管理的功能.也就是说,局部控制器负责各自的网络,全局控制器负责局部控制器,控制器之间的交互可通过全局控制器来完成.
扁平控制方式要求所有控制器都处于同一层次.虽然物理上各个控制器位于不同的区域,但逻辑上所有的控制器均作为全局控制器,掌握全网状态.当网络拓扑变化时,所有控制器将同步进行更新,而交换机仅需调整与控制器的地址映射即可,无需进行复杂的更新操作,因此,扁平分布式扩展对数据层的影响较小.Onix作为首个SDN分布式控制器,支持扁平分布式控制器架构.它通过网络信息库(networkinformationbase,简称NIB)进行管理.每个控制器都有对应的NIB,通过保持NIB的一致性,实现控制器之间的同步更新.HyperFlow允许网络运营商部署任意多个控制器,并将这些控制器分布在网络的各个角落.控制器之间保持着物理分离而逻辑集中的特点,因此仍然保持SDN集中控制的特点.HyperFlow通过注册和广播机制进行通信,并在某控制器失效时,通过手动配置的方式将失效控制器管理的交换机重新配置到新控制器上,保证了可用性.在扁平控制方式中,虽然每个控制器掌握全网状态,但只控制局部网络,造成了一定资源的浪费,增加了网络更新时控制器的整体负载.此外,在实际部署中,不同的域可能属于拥有不同经济实体的运营商,无法做到控制器在不同域之间的平等通信.
层次控制方式按照用途将控制器进行了分类.局部控制器相对靠近交换机,它负责本区域内包含的节点,仅掌握本区域的网络状态.例如,与临近交换机进行常规交互和下发高命中规则等.全局控制器负责全网信息的维护,可以完成需要全网信息的路由等操作.层次控制器交互存在两种方式:一种是局部控制器与全局控制器之间的交互,另一种是全局控制器之间的交互.对于不同运营商所属的域来说,仅需协商好全局控制器之间的信息交互方式即可.Kandoo实现了层次分布式结构.当交换机转发报文时,首先询问较近的局部控制器.若该报文属于局部信息,局部控制器迅速做出回应.若局部控制器无法处理该报文,它将询问全局控制器,并将获取的信息下发给交换机.该方式避免了全局控制器的频繁交互,有效降低了流量负载.由于这种方式取决于局部控制器所处理信息的命中率,因此在局部应用较多的场景中具有较高的执行效率.
SDN网络操作系统应当具有实时运行所开发应用的能力,即,能够达到开发与执行的平衡.NOX采用Python或C++,使用Python时开发效率较高,执行效率较低;而使用C++时执行效率很高,开发效率却很低.于是,科研人员致力于开发通用的平台,尽可能地在开发与执行之间达到一个较好的平衡.Beacon是一个基于Java的通用平台,它向用户提供了一系列相关的库与接口用于开发,并提供运行时模块化的功能,使其在保证性能的情况下具有了实时运行的能力,实现了开发与执行两者之间的平衡.操作系统将资源形成文件系统,文件具有层次结构,方便操作系统随时读取与调用.控制器所管理的资源也具有类似特征,能够使得用户和应用通过标准的文件I/O进行交互.yanc控制器即采用了文件系统的方式处理资源,它把网络应用视为不同的进程,每个进程被分隔成不同的视图或分片(slice).在yanc中,无论物理交换机还是数据流参数都将形成文件,不同的应用则根据自身的需求调用不同的文件.此外,SDN控制器平台已经存在大量实际开发,包括Floodlight,POX和Ryu等.
3.2接口语言
控制器提供了北向接口,方便用户配置网络.然而,当今的网络存在各式各样的应用,如流量监控、负载均衡、接入控制和路由等.传统的控制器平台(例如NOX)仅能提供低级配置接口,且使用像C++这种通用语言,抽象程度较低,造成网络配置成本并未大幅度降低.针对这种情况,科研人员致力于开发一种抽象的、高级配置语言.这些抽象语言能够统一北向接口,改善接口的性能,从而全面降低网络的配置成本.
耶鲁大学团队开发了一系列网络配置语言,旨在搭建具有优化性能的通用北向接口.Nettle是描述性语言,采用了函数响应式编程(functionalreactiveprogramming,简称FRP)方式.FRP是基于事件响应的编程,符合控制器应对各种应用的实际响应情况.Nettle的目标是实现网络配置的可编程化,而可编程化的网络配置要求控制器性能足够高,因此,该团队又提出了McNettle,一种多核Nettle语言.McNettle并未改变描述性与FRP的特性,而是利用共享内存、多核处理的方式增强了用户开发体验.Procera则进一步对语言抽象作了优化,采用高级的网络策略来应对各种应用.为了使控制器更好地发挥接口语言的性能,该团队提出了Maple.Maple对接口语言作了进一步抽象,允许用户使用自定义抽象策略.为了能够高效地将抽象策略分解成一系列规则,并下发到相应的分布式交换机上,Maple不但采用了高效的多核调度器,最关键的是,它采用了跟踪运行时优化器(tracingruntimeoptimizer)来优化性能.该优化器一方面通过记录可重用的策略,将负载尽可能地转移到交换机来处理.另一方面,通过动态跟踪抽象策略与数据内容及环境的依赖性,使流表始终处于最新状态,从康奈尔大学与普林斯顿大学联合研究团队首先提出了Frenetic,与Nettle等语言类似,它也具有描述性和FRP特性.两者主要有3点不同:一是抽象层次,由于Frenetic是建立在NOX之上的语言,因此比Nettle抽象层次要高;二是Frenetic有查询语言和实时系统,这是Nettle所不具备的;三是Frenetic基于数据包,而Nettle基于事件流.NetCore增强了Frenetic的能力,包括增加通配符匹配处理模式、主动生成规则和通用的语法结构等.由于Frenetic和NetCore都采用模块并行组装方式,这要求每个模块(即服务,如接入控制等)都各自生成所需包的备份,造成一定的资源浪费.Pyretic则采用了模块顺序组装方式,使得每个应用可以顺序处理,也有效地避免了潜在应用冲突发生的可能.为了增强这类接口语言的理论基础,2014年初,该团队提出利用Kleene代数理论作为检测的NetKAT语言,它改进了NetCore语言特性,可以利用数学理论验证配置的正确性,避免了网络配置潜在的问题.
接口语言描述性语言FRP实现语言抽象层次特点NOX否否C++/Python低仅提供IP地址操作等低配置接口语言Nettle是是Haskell较高较早采用描述性语言和FRP的抽象语言之一,基于事件流McNettle是是Haskell较高多核NettleProcera是是FML高与Frenetic采用包操作不同,采用事件流Frenetic是是Python高比Nettle语言更抽象,有查询语言,实时系统,基于数据包NetCore是否Haskell高改进Frenetic,采用通配符匹配,主动生成规则等功能Pyretic是否Python高采用顺序组合模式扩展了Frenetic和NetCoreNetKAT是否任意高增加Kleene代数理论。
3.3控制层特性研究
控制层存在一致性、可用性和容错性等特性,而所提到的这3种特性的需求无法同时满足,达到三者之间的平衡,是今后的重要工作之一.多数情况下,科研人员是在一部分特性影响较小的前提下重点提升另一部分特性.因此,科研人员在对控制层特性研究中各有侧重.下面对控制层的一致性、可用性和容错性分别进行讨论.
1.一致性
集中控制是SDN区别于其他网络架构的核心优势之一,通过集中控制,用户可以获取全局网络视图,并根据全网信息对网络进行统一设计与部署,理论上保证了网络配置的一致性问题.然而,分布式控制器仍然具有潜在的不一致性问题.由于不同控制器的设计对网络一致性要求有所不同,严格保证分布式状态全局统一的控制器,将无法保证网络性能;反之,如果控制器能够快速响应请求,下发策略,则无法保证全局状态一致性.性能无明显影响的情况下,保证状态一致性成为了SDN设计中的关键问题.
并发策略同样会导致一致性问题,可由控制层将策略形成规则,并按两阶段提交方式解决.为了避免数据层过多的参与,控制层可直接通过并发策略组合的方式来解决,并可利用细粒度锁(fine-grainedlocking)确保组合策略无冲突发生.HFT采用了层次策略方案,它将并发策略分解,组织成树的形式,树的每个节点都可独立形成转发规则.HFT首先对每个节点进行自定义冲突处理操作,这样,整个冲突处理过程就转化成利用自定义冲突处理规则逆向搜索树的过程,从而解决了并发策略一致性问题.
2.可用性
规则备份可以提升网络的可用性.RuleBricks针对规则备份提出一种高可用性方案.在RuleBricks中,不同的规则对应不同颜色的“砖块”,“砖块”的大小由通配符的地址空间大小决定,其中,最上层的“砖块”对应的规则是目前的活跃规则.如果因为网络节点失效导致某种颜色的“砖块”消失,则下面的备份“砖块”会显现出来成为新的活跃规则.通过对“砖块”的设定、选取和操作的优化,RuleBricks可以有效限制流的重分配和规则爆炸的问题.
控制器作为SDN的核心处理节点,需要处理来自交换机的大量请求,而过重的负载会影响SDN的可用性.
联系方式
随机阅读
热门排行