众所周知,NFV在很大程度上能够减低部署成本和运维成本,目前已经受到许多网络运营商的关注,有些运营商已经开始部署NFV的相关产品到自己的现有业务中。但是,NFV有一大弱点和弊端目前尚且无法超越传统网络功能设备——NFV处理的性能效率,这篇文章从SIGCOMM中的一篇论文获得启发,提出了一种从架构上加速NFV的算法。
笔者参加了2016年12月刚结束的全球网络技术大会,会上电信、移动、联通三大运营商都提出了,他们已经开始部署NFV到实际的业务当中,但是目前只在小流量的服务链路上进行NFV的部署,而大流量或超大流量的链路目前无法部署NFV,还只能用传统网络功能设备进行流量处理。其原因就是NFV在大流量链路上处理性能太不尽如人意,在网络包处理性能上大大不如传统网络功能设备。这样一来,明显就限制了NFV的用途,无法发挥它最大的效能。故而在NFV研究领域最迫切的问题就是提升NFV处理网络包的性能,也就是NFV的处理速度。
在SDN出现之后,NFV有了一些发展,比如:近年网络领域顶级会议SIGCOMM中就发表了一篇名为《OpenBox-A Software-Defined Framework for Developing, Deploying, and Managing》的论文,这篇论文借鉴SDN的控制转发分离的思想,对NFV在实际中的应用进行了重新架构,如图1。
图1
这样的NFV架构更加易于管理,位于Date Plane的就是承载NFV的X86服务器,用户可以通过OpenBox的应用轻松的管理VNF。这样就便于NFV的大规模部署和管理。
除此之外,更重要的是,论文还提出了一种NFV加速算法。其思想是把传统的网络功能拆成各个不可再分的“元素处理模块”,合并和重构不同网络功能的处理模块,从而达到加速的效果。例如:对于防火墙和IPS功能,可以对其拆分成,Read Packet、Header Classifier、Alert、Output、Regex Classifier部分,如图2。
图2
在拆分过后,假设一个网络需要同时部署防火墙和IPS功能,传统的方式如图3。而论文对重复处理的元素模块进行合并,这样处理效率就提高了。合并后的效果如图4所示:
图3
图4
我们可以看出,对于合并之后的处理流程已经简化了许多,对于头域分类器只需进行一次。在实际部署中,一个节点一般有多个NFV功能共同部署,对于大量的网络功能做此简化,可以大大提高NFV处理效率。论文所做得实验显示,光是防火墙加上IPS的网络功能部署,就能够提升80%以上的吞吐量,降低30%以上的时延。
介绍完了OpenBox,笔者认为算法还具有提升空间,众所周知,除了IPS和防火墙这种包具有先后处理顺序的网络功能之外,许多的网络功能部件之间处理是没有关系的,比如CDN和Tester之间就没有顺序关系,实际上在包处理的过程中他们是可以并行处理的。于是笔者提出一种新的NFV架构,使用并行处理的思想对NFV进行加速。即在包分发器(PCD)和一个控制器(Controller)辅助下,对包进行并行处理。如图5所示:
图5
PCD相当于一个复制器,把包分给不同的VNF,Controller汇集处理结果,并决定包的走向。在中间的网络功能处理当中依然可以使用OpenBox的思想,比如:头域分类只需进行一次。这样就在OpenBox的基础上能够进一步的对NFV处理性能进行提升。
除此之外,在实际应用中,由于X86服务器要同时处理多个不同链路上发来的包,在包发往X86服务器上的过程中会产生相当大的时延,直接影响了NFV的处理效率。于是我们可以用下面的结构克服这个困难。X86服务器的进出线路不设在同一个节点,而是相隔若干个节点,包在NFV处理的同时,可以在链路上进行传输,之后我们可以设一个类似图5控制器的东西,对包处理结果进行汇集,再决定包是否要进入内网。为此笔者设计了一种应用场景来阐述这种思想,如图6所示,红色箭头为数据包的流向。
图6
上述两种并行架构思想从理论上可以加快NFV的数据包处理速度和性能,但是依然存在着问题,比如,在图5中Controller的处理是否足够快,要如何设计Controller,在图6中Controller的处理时延会不会很大,导致反而比传统NFV架构增加时延。除此之外,input和output横跨多少SW才能使得在controller中等待处理包的队列效率最大,这都决定到这两种算法的可行性,这些问题还有待进一步探究。
声明:图5图6为原创,其余图片取自《OpenBox-A Software-Defined Framework for Developing, Deploying, and Managing》。