您的位置:首页 > 编程语言 > Go语言

Maple: Simplifying SDN Programming Using Algorithmic Policies

2015-10-16 20:04 351 查看
前言:课程阅读作业,不想只放在笔记本里面发霉,就发到博客上跟大家共享了。

这篇文章是关于SDN编程语言编译系统的设计Maple。

软件定义网络SDN是现代网络发展的一个重大革新,它是一种将控制平面和网络物理拓扑分离的新型网络架构,使得用户(开发者)可以通过编写运行在集中式控制器上的程序来控制网络流及其转发,为网络功能的优化提供了便捷的方式。文章主要介绍了一个系统Maple,它的主要功能是简化SDN的网络编程,主要实现手段有:(1)开发者可以使用标准的编程语言,设计一些集中式算法,即算法政策,来实现对整个网络的控制;(2)对开发者定义的集中式的算法政策进一步抽象,使得开发者不用考虑将高级的政策转化为分布交换机上一系列的规则这个复杂的过程。以下分别从motivation,文章的模型设计,闪光点以及研究缺陷进行介绍。

1、Motivation

SDN的网络编程架构是SDN中很重要的一个研究模块。其中主要是对编程语言和编程抽象进行设计。目前存在的解决方案主要是两大流派,即编写程序为网络流模式设计细致的或者严格声明的说明规则,来实现控制平面对数据平面的控制以及数据正确转发等等。(1)对流的规则模型和处理优先级进行细粒度的定义和管理,这样的抽象级别很低,不方便开发者进行程序编写;(2)引入交换机本地流规则,对编程进行高层次的抽象,但是这需要一个严格的声明查询和策略规范。这样严格的编程架构会将编程人员的思路局限在框架中,有可能导致错误、冗余以及效率低下等问题。

本文设计的基于算法政策的SDN编程模型完美克服了以上两个模型的问题,该模型允许编程人员通过设计高级算法应用来定义全网的转发行为。编程人员定义一个用一般编程语言编写的函数f后,集中控制器就将其运行在所有进入网络的分组packet中。同时在编写函数f时,编程人员不需要考虑函数对新编程模型的适应性问题,只需要用标准语言设计相应的转发分组的算法。同时在这个模型中,算法政策和严格的声明政策并不冲突,只是算法政策的灵活性更大一些,更加方便编程人员通过编程对网络转发行为进行控制。

2、模型设计

根据以上可知,在基于算法政策的编程模型中,任何一个数据包都有可能调用函数f,频繁的调用访问会对控制器造成计算压力、带宽压力,增大响应时延,降低性能。因此在Maple中设计了两大组件来克服编程模型中的性能问题,分别为实时跟踪优化器(tracing run-time optimizer)和多核调度器。

其中跟踪运行时间优化器主要是设计了跟踪树来记录某个特定分组对函数f的调用,如果调用了,即将其生成的依赖和结果(主要是进行流表匹配)也写进其他的分组中。这样的设计通过对之前控制器的计算结果进行重新利用,极大的减少了函数的调用次数,可以将计算负载转移到分布式的交换机中。跟踪树能够将任意的算法转化成一个允许优化器实现政策分布的正规的形式,即实现交换机本地转发规则的生成和分布。而这个过程对SDN编程者来说是透明的。

在模型中设计了多核调度器来应对本地交换机没有生成函数f对应规则的情景。这个多核调度器使用多核处理器来同时处理函数f的调用,提高了系统的可扩展性。

3、文章的闪光点

通过对文章的理解,我认为文章的闪光点主要在于Maple编程模型的设计,它使得软件定义网络应用的编写从低级“汇编语言”时代前进到了“高级语言”时代,大大提高了SDN编程人员的应用开发效率,具有划时代的意义。其核心组件实时追踪优化器一方面通过记录可重用的策略,将负载尽可能地转移到交换机来处理;另一方面,通过动态跟踪抽象策略与数据内容及环境的依赖性,使流表始终处于最新状态,从而确保抽象策略转成可用规则的效率。这样的设计思路也值得我们借鉴,巧妙转移计算负载压力。

4、研究缺陷

就我目前的水平来看,有几个问题还是值得我进一步的思考。对于这个模型来讲,不同的编程人员编写不同的抽象策略,但是这些策略最终都会转化成一系列的流表转发规则,那么如何避免不同函数之间对同一字段的操作定义冲突呢?另外如果编程人员编写了依赖分组内容的抽象策略那么该模型的重利用能力就不存在了。还有就是如果函数之间存在依赖关系或者共享着某个状态就不能并行执行规则转化。

后来跟同学交流了以后发现自己理解的还是比较浅显的,自己又想了一下大概是这样的流程。

1、当一条数据流到交换机中后,查看流表匹配(数据平面),进行相应的转发行为,如果表中没有该规则,就向控制平面发送请求,控制平面根据编程人员编写的函数f,返回一个能实现该转发的response。这里主要做到的创新有两点:

(1)之前研究的response都是返回的是/32位的目的地址,而Maple是将函数f所实现的一组规则/16完整放到流表中,这样做的好处很明显,就是如果又来了一个数据流跟之前的在同一网络中,但是之前的只是返回一个/32的规则,这时需要重新调用函数f来返回。Maple直接将很多单一的表项整合成一个,提高了交换机中的资源利用率,同时也提高了响应时间,节省了很多控制平面的计算资源。

(2)这里用 trace tree来记录生成的一组规则,放在控制平面的缓存之中。这样的设计方便对规则进行改和查。

2、当交换机中的流表已经占满了所有空间,这是一个规则来了,也不需要再次调用函数f,而是先查trace tree,如果没有再调用。

目前的理解就是这样,欢迎拍砖!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: