基于YANG模型传送SDN北向开放API的定义,开源平台架构及可编程技术研究 告
北京邮电大学
信息光子学与光通信国家重点实验室
2015.3
目录
- SDN被向接口 2
REST API 2
1.2 RESTful 4
1.3 SDN北向接口发展现状与趋势 4
2.开源实现的SDN北向接口&YANG 5
2.1 YANG 5
2.2 OpenDaylight 6
- SDN北向接口标准化 23
3.1 ONF NBI-WG 23
3.2 IRTF和IETF相关工作组 24
- 学术界关于北向接口的研究 25
VTN 25
4.2 Nox&Pox 26
- 部分SDN初创公司关于REST API主要应用 27
5.1 Big Switch Networks 27
5.2 Embrane 27
-
总结 28
-
SDN被向接口
根据接口特性可以将北向接口分为强耦合接口(应用编程接口)、松耦合接口以及基于状态的功能接口三种。
1)强耦合API包括进程内API和进程间API。进程内API主要由控制器提供用于在控制器内实现编程功能;进程间API主要由控制器外部部件用来同控制器通信以执行功能或者交换/读取状态。
2) 松耦合接口由外部部件以松耦合的方式与控制器通信,通常并不需要立即响应,也不需要直接或即时同步出现。
3) 基于状态的功能接口包括主要以处理状态为主的API,其功能就是设置和读取状态以及通知状态改变。功能性API提供一套功能以供编程使用,如编程库或SDK,包括系统和协议,它们并不通过过程调用,而是
通过状态改变。
REST API
1.1.1 REST 简介
REST 从资源的角度来观察整个 络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式。获得这些表徵致使这些应用程序转变了其状态。随着不断获取资源的表示方式,客户端应用不断地在转变着其状态,所谓表述性状态转移(Representational State Transfer)。表象化状态转变或者表述性状态转移。
这一观点不是凭空臆造的,而是通过观察当前Web互联 的运作方式而抽象出来的。“设计良好的 络应用表现为一系列的 页,这些 页可以看作的虚拟的状态机,用户选择这些链接导致下一 页传输到用户端展现给使用的人,而这正代表了状态的转变。”
REST是设计风格而不是标准。基于HTTP,URI,以及XML这些现有的广泛流行的协议和标准,伴随着REST,HTTP协议得到了更加正确的使用。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。
? 资源是由URI来指定的。
? 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
? 通过操作资源的表现形式来操作资源
? 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,消费Web服务的刻苦软件还是Web浏览器。当然也可以是任何其他的格式。
1.1.2 REST的优点
? 可以利用缓存Cache来提高响应速度。
? 通讯本身的无状态性可以让不同的服务器处理一系列请求中的不同请求,提高服务器的扩展性。
? 浏览器即可作为客户端,简化软件需求。
? 不需要额外的资源发现机制。
? 在软件技术演进中的长期兼容性更好。
1.1.3 REST vs SOAP
1) 成熟度
SOAP虽然发展到现在已经脱离了初衷,但是对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况。不同平台,开发语言之间通过SOAP来交互的web service都能够较好的互通(在部分复杂和特殊的参数和返回对象解析上,协议没有作很细致的规定,导致还是需要作部分修正)。REST国外很多大 站都发布了自己的开发API,很多都提供了SOAP和REST两种Web Service,根据调查部分 站的REST风格的使用情况要高于SOAP。但是由于REST只是一种基于Http协议实现资源操作的思想,因此各个 站的REST实现都自有一套,在后面会讲诉各个大 站的REST API的风格。也正是因为这种各自实现的情况,在性能和可用性上会大大高于SOAP发布的web service,但统一通用方面远远不及SOAP。由于这些大 站的SP往往专注于此 站的API开发,因此通用性要求不高。由于没有类似于SOAP的权威性协议作为规范,REST实现的各种协议仅仅只能算是私有协议,当然需要遵循REST的思想,但是这样细节方面有太多没有约束的地方。REST日后的发展所走向规范也会直接影响到这部分的设计是否能够有很好的生命力。总的来说SOAP在成熟度上优于REST。
2) 效率和易用性
SOAP协议对于消息体和消息头都有定义,同时消息头的可扩展性为各种互联 的标准提供了扩展的基础,WS-*系列就是较为成功的规范。但是也由于SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。REST被人们的重视,其实很大一方面也是因为其高效以及简洁易用的特性。这种高效一方面源于其面向资源接口设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了Http最初的应用协议设计理念。同时,在我看来REST还有一个很吸引开发者的就是能够很好的融合当前Web2.0的很多前端技术来提高开发效率。例如很多大型 站开放的REST风格的API都会有多种返回形式,除了传统的xml作为数据承载,还有(JSON,RSS,ATOM)等形式,这对很多 站前端开发人员来说就能够很好的mashup各种资源信息。
因此在效率和易用性上来说,REST更胜一筹。
3) 应用设计与改造
REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。
1.2 RESTful
满足以下架构约束条件和原则的应用程序或设计就是RESTful:
-
客户端和服务器结构
-
能够利用Cache机制
-
层次化的系统
-
连接协议具有无状态性
-
统一接口
-
按需代码(Code on Demand)
1.3 SDN北向接口发展现状与趋势
1.3.1 北向接口发展简述
络开放是产业发展的必然趋势,不但能够为设备的 络带来变革,还可以进一步细分产业链,带来新的产业发展机遇。在 络通信领域,从 络开放性的角度来理解SDN,可以将SDN抽象出图1所示的北向接口、南向接口、东西向接口3中接口类型,其中,SDN通过南向接口实现数据 络中控制平面与数据平面的分离,以ONF的OpenFlow协议和IETF的ForCES、OVSDB、NETCONF+YANG、PCEP等协议为典型代表;东西向接口负责解决多个设备控制平面之间的协同工作的问题;
图1 SDN接口示意
从应用的角度自北向南看,SDN北向接口是用户业务以及各种 络业务开发者有效控制和利用 络的门户,开发者能与软件编程的形式调用各种 络资源;从 络运营角度自南向北看,SDN北向接口是通过控制器向上层业务应用开放的接口,SDN向上提供资源抽象,实现软件可编程控制的 络架构,上层的 络资源管理系统或者 络应用可以通过控制器的北向接口,全局把控整个 络的资源状态,并对资源进行统一调度。
北向接口方案制定成为当前SDN领域竞争的焦点,目前尚未形成统一的标准。不同的参与者或者从用户角度出发,或者从运营商角度出发,提出了很多方案,甚至部分传统的 络设备厂商在其现有设备上提供了编程接口供业务应用直接调用。如Cisco的ONE方案,基本不涉及原有 元设备的智能分离,仅通过管理面编程开放有限的能力,缺陷是创新业务的开发和部署困难,与硬件厂商捆绑缺乏兼容性。总体而言,当前SDN北向接口发展一方面由各开源平台推动,力图通过支持更多 络应用落地,造成事实标准;另一方面通过各个标准组织对北向接口的分类、框架、协议等进行标准化定义;还有学术界的知名SDN专家,站在本领域的研究前沿,也在积极探索北向接口的制定。
2.开源实现的SDN北向接口&YANG
2.1 YANG
Yang Tools Plugin通过各个Plugin的model定义来自动生成API、Service Interface和相应Java代码。
YANG初始作为NETCONF的建模语言被创建出来,在整个NETCONF的配置协议体系中,YANG用来描述具体 元的配置、状态、通知时间、操作维护的数据信息以及之间的约束关系。在NETCONF+NETMOD联合配置框架下工作时, 元可以对客户端体检的配置信息通过YANG描述的模型进行校验,保证其准确性,同时,也保证各厂商NETCONF协议支持的规范兼容性。一个YANG来描述的OSPF配置示例,表明一个OSPF的属性配置包括Area名称(ID)、启用OSPF的接口描述、Metrix的配置范围以及心跳保活检测的时间范围等。YANG建模示例:OSPF协议配置项以及约束如图3所示。
图2 OSPF协议配置项以及约束
目前,YANG的标准化将要完成,其应用范围已经完全脱离了前述的 元配置管理的数据模型描述范畴,部分厂商根据自身的需求,更多地采用YANG在SDN控制场景中来构建南北向的API定义,如上述的OpenDaylight。OpenDaylight定义的REST API,基于YANG来构建模型,然后由YANG Tools开源工具生成对外的API以及部分Plug-in框架代码,接口符合IETF RESTCONF【RFC6241】规范。
2.2 OpenDaylight
2.2.1 OpenDaylight Controller:YANG模式和模型
绑定独立数据模式表述数据的结构、程序和由模块的通知。并且该模式是基于YANG语言的。YANG规范允许图式节点不在原杨规范定义的存在。通常,这些节点与一个或多个扩展模块定义语句,但没有进一步的语义这个节点是在一个计算机可以理解的形式定义(如有效使用的节点,它可以用)。这一模型我们添加的概念图式的未知节点。一个未知的schema节点可以是一个任意模式的节点的子节点。
2.2.2 YANG Tools:YANG to Java Mapping
一、Model
杨模块转换为Java作为两个Java类。每个类在单独的Java文件。对Java文件的名称组成如下:
。Java在可以是数据或服务。示例如下图5 所示:
YANG
Java
module module {
}
ModuleData.java
package org.opendaylight.yang.gen.v1.urn.module.rev201379;
public interface ModuleData {
}
ModuleService.java
package org.opendaylight.yang.gen.v1.urn.module.rev201379;
public interface ModuleService {
}
二、YANG grouping flow to JAVA
YANG
JAVA
grouping flow {
}
package org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026;
import java.math.BigInteger;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.GenericFlowAttributes;
import org.opendaylight.yangtools.yang.common.QName;
public interface Flow extends
{
}
图3 YANG grouping flow to JAVA
图六使用YANG语言写了一个grouping flow,编译之后会将grouping里相应的leaf字段映射成JAVA语言。并且YANG里用grouping定义的结构体会在JAVA里映射成接口。
三、YANG container with uses mapping
杨容器相匹配的分组流元生成Java接口匹配,代码示例如图七所示:
YANG
JAVA
//code omitted
//grouping flow {
container match {
uses match:match;
}
//code omitted
//}
//code omitted
package org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;
import org.opendaylight.yangtools.yang.binding.Augmentable;
import org.opendaylight.yangtools.yang.common.QName;
public interface Match
{
}
图4 Container match to JAVA
2.2.2 JAX-RS
Java API for RESTful Web Services旨在定义一个统一的规范,使得Java程序员可以使用一套固定的接口来开发REST应用,避免了依赖于第三方框架。OpenDayight使用了JAX-RS来简化REST API的开发。
2.2.3 北向接口
OpenDaylight为应用(App)提供开放的北向API。支持OSGi 框架和双向的REST 接口。OSGi框架提供给与控制器运行在同一地址空间的应用,而REST API 则提供给运行在不同地址空间的应用。所有的逻辑和算法都运行在应用中。
Topology REST APIs
可提供的服务
请求内容
请求方式
服务器响应
检测拓扑信息
GET
Topology
获取UserLink信息
GRT
List
设置UserLink
PUT
TopologyUserLinkConfig
图5 TopologyRestAPI
Topology的基本单元是:节点node,node的标识包括id和类型,头节点和尾节点连接器的连线组成边edge,edge和多个property的组合构成了具有实际属性的edgeProperties即有了一个具有实际特性的连接,若干edgePeoperties的组合构成了Topology。
另外该APIs提供了TopologyUserLinkConfig组成的list,存储的是用户定义连接的配置信息。
HOST TRACKER REST API
Host Trancker REST APIs提供追踪主机在 络中的位置的功能。主机位置通过Host node connector表示。Host node connector本质是一个逻辑实体,它表示一个交换机或端口。一个主机被IP地址和MAC地址所标识。
Host Tracker REST APIs可提供的服务:
请求分类
客户端请求
服务器响应
地址
GET:返回一个同IP地址参数的主机
PUT:增加一个主机
DELETE:删除一个主机
hostConfig
活动主机
GET:返回本 络所有主机的列表
不活动主机
GET:返回本 络中静态配置和NodeConnector掉线的主机
图6 Host Trancker REST APIs
Host Tracker REST APIs数据模型:
图7 Host Tracker REST APIs
Flow Programmer REST API
Flow Progranmmer REST APIs提供对流性能的编程。
可提供的服务;
请求分类
客户端请求
服务器响应
一般的流
GET:返回指定流的配置列表
list
指定节点上的流
GET:返回在某节点上的流的配置列表
list
指定节点上的静态流
GET:返回与可读的名字、nodeId匹配的流
flowConfig
PUT:增加或修改一个流的配置。若流存在则替换最近的流。
flowConfig
DELETE:删除流配置
(custom)
POST:切换流配置
(custom)
图8 Flow Progranmmer REST APIs
Flow Progranmmer REST APIs数据模型
Data Elements
Data Types
XML Elements
名称(类型)
最大/最小 出现
flowConfig
vlanPriority (string)
0/1
nwDst (string)
0/1
idleTimeout (string)
0/1
tosBits (string)
0/1
name (string)
0/1
dlSrc (string)
0/1
hardTimeout (string)
0/1
protocol (string)
0/1
node (node)
0/1
cookie (string)
0/1
installInHw (string)
0/1
tpDst (string)
0/1
nwSrc (string)
0/1
vlanId (string)
0/1
tpSrc (string)
0/1
ingressPort (string)
0/1
etherType (string)
0/1
dlDst (string)
0/1
priority (string)
0/1
actions (string)
0/unbounded
list
flowConfigs
flowConfig (flowConfig)
0/unbounded
Node
node
type (string)
0/1
id (string)
0/1
图9 Flow Progranmmer REST APIs
Static Routing REST API
Static Routing REST APIs涉及到静态路由的管理。
可提供的服务:
请求分类
客户端请求
服务器响应
routes
GET:返回静态路由现状的列表
list
Route
GET:返回所提供配置名称的静态路由
staticRoute
PUT:增加新的静态路由(如果该路由存在,返回错误)
staticRoute
DELETE:删除静态路由
(custom)
图10 Static Routing REST APIs
Static Routing REST APIs数据模型:
Data Elements
Data Types
XML Elements
名称(类型)
最大/最小 出现
list
staticRoutes
staticRoute (staticRoute)
0/unbounded
staticRoute
staticRoute
name (string)
注:The name of the static route.
0/1
prefix (string)
注:The prefix for the route. Format: A.B.C.D/MM Where A.B.C.D is the Default Gateway IP (L3) or ARP Querier IP (L2)
0/1
nextHop (string)
注:NextHop IP-Address (or) datapath ID/port list: xx:xx:xx:xx:xx:xx:xx:xx/a,b,c-m,r-t,y
0/1
图11 Static Routing REST APIs
Statics REST API
Statics REST APIs返回被南向的协议插件(如OpenFlow)公开的各种统计信息。
可提供的服务:
请求分类
客户端请求
服务器响应
flow
GET:返回所有节点的所有流的统计信息的列表
list
port
GET:返回所有经过节点上的NodeConnector的端口统计信息
list
table
GET:返回在所有节点上的链表信息
list
Flow on a node
GET:返回指定节点上的流的统计信息的列表
nodeFlowStatistics
Port on a node
GET:返回所有经过指定节点上的NodeConnector的端口统计信息
nodePortStatistics
table on a node
GET:返回在指定节点上的链表信息
nodeTableStatistics
图12 Statistics REST APIs
Statistics REST APIs数据模型
Data Elements
Data Types
XML Elements
名称(类型)
最大/最小 出现
action
action
type (actionType)
0/1
flow
flow
actions (action)
0/unbounded
hardTimeout (short)
1/1
idleTimeout (short)
1/1
match (match)
0/1
priority (short)
1/1
id (long)
1/1
FlowStat
flowOnNode
flow (flow)
0/1
tableId (byte)
1/1
byteCount (long)
1/1
durationSeconds (int)
1/1
packetCount (long)
1/1
durationNanoseconds (int)
1/1
list
allTableStatistics
tableStatistics (tableStatistics)
0/unbounded
match
match
matchField (matchField)
0/unbounded
matchField
matchField
node
node
type (string)
0/1
id (string)
0/1
nodeConnector
nodeConnector
type (string)
0/1
id (string)
0/1
node (node)
0/1
nodeConnectorStatistics
nodeConnectorStatistics
receivePackets (long)
1/1
receiveBytes (long)
1/1
transmitErrors (long)
1/1
transmitPackets (long)
1/1
receiveDrops (long)
1/1
receiveOverRunError (long)
1/1
receiveErrors (long)
1/1
nodeConnector (nodeConnector)
0/1
transmitDrops (long)
1/1
transmitBytes (long)
1/1
collisionCount (long)
1/1
receiveCrcError (long)
1/1
receiveFrameError (long)
1/1
nodeFlowStatistics
flowStatistics
node (node)
0/1
flowStatistic (flowOnNode)
0/unbounded
nodePortStatistics
portStatistics
node (node)
0/1
portStatistic (nodeConnectorStatistics)
0/unbounded
nodeTable
nodeTable
id (string)
0/1
node (node)
0/1
nodeTableStatistics
tableStatistics
node (node)
0/1
tableStatistic (nodeTableStatistics)
0/unbounded
nodeTableStatistics
maximumEntries (int)
1/1
name (string)
0/1
matchedCount (long)
1/1
activeCount (int)
1/1
lookupCount (long)
1/1
nodeTable (nodeTable)
0/1
图13 Statistics REST APIs
Subnets REST API
Subnets REST APIs用来管理子 。
可提供的服务:
请求分类
客户端请求
服务器响应
subnets
GET:列出给定范围的所有子
list
subnet
GET:列出给定区域一个子 的配置
subnetConfig
PUT:增加一个子 到指定的区域,节点连接器可选
subnetConfig
DELETE:从指定区域删除子
(custom)
POST:修改一个子 。用新的代替旧的。只有端口的列表可以修改。若不存在则新建子 。
subnetConfig
图14 Subnets REST APIs
Subnets REST APIs数据模型
Data Elements
Data Types
XML Elements
名称(类型)
最大/最小 出现
list
subnetConfigs
subnetConfig (subnetConfig)
0/unbounded
subnetConfig
subnetConfig
subnet (string)
0/1
name (string)
0/1
nodeConnectors (string)
0/unbounded
图15 Subnets REST APIs
Switch Manager REST API
Switch Mannager REST APIs用来批准node、node connector、property的接入。可提供的服务:
请求分类
客户端请求
服务器响应
nodes
GET:在 络上检索所有的节点和他们的属性
list
save
POST:保存最近的交换机设置
(custom)
node
GET:在 络上检索指定节点的节点连接器和他们的属性
list
node property
DELETE:删除指定节点的属性
(custom)
Node property value
PUT:增加一个转发层模式属性的描述给节点
(custom)
nodeConnector property
DELETE:删除节点连接器的属性
(custom)
图16 Switch Mannager REST APIs
Switch Manager REST APIs数据模型
Data Elements
Data Types
XML Elements
名称(类型)
最大/最小 出现
list
nodes
nodeProperties (nodeProperties)
0/unbounded
node
node
type (string)
0/1
id (string)
0/1
nodeConnector
nodeConnector
type (string)
0/1
id (string)
0/1
node (node)
0/1
nodeConnectorProperties
nodeConnectorProperties
nodeconnector (nodeConnector)
0/1
properties/property
0/unbounded
nodeProperties
nodeProperties
node (node)
0/1
properties/property
0/unbounded
图17 Switch Mannager REST APIs
User Manager REST API
User Manager REST APIs用来管理用户,并且只能用于HTTPs协议。
可提供的服务:
请求分类
客户端请求
服务器响应
users
POST:增加一位新用户
userConfig
users
DELETE:删除一个用户
(custom)
图18 User Manager REST APIs
User Manager REST APIs数据模型
Data Elements
Data Types
XML Elements
名称(类型)
最大/最小 出现
userConfig
userConfig
roles (string)
0/unbounded
password (string)
0/1
user (string)
0/1
configurationObject
图19 User Manager REST APIs
2.2.4 OpenDaylight简述
图20 基于OpenDayLight 的SDN架构图
OpenDayLight。图1为OpenDayLight给出的SDN架构,其中, 络应用/编排/业务和控制平台之间的OpenDayLight APIs即为通常所说的北向接口,这里指定以REST方式进行定义,OpenDayLight所给出的SDN应用包括对L2/L3转发以及负载均衡、集线器等。
图21 OpenDaylight架构
OpenDaylight是Linux基金下的一个开源软件项目,以进一步的应用和创新目标为基础,创建一个共同的软件定义 络(SDN)行业支持的平台。OpenDaylight旨在打造一个统一开放的SDN平台,如图2所示,应用可以通过OpenDaylight的北向接口API访问 络中的资源和信息。
图22 应用通过OpenDaylight北向接口访问 络资源
2.1.3.1 MD-SAL&YANG
图23 MD-SAL Overview
OpenDaylight控制器采用了模块化驱动(model-driven)的方法抽象出SDN控制器各个组件的南北向API以及各种服务和组件使用的数据结构,并且使用YANG数据建模语言【RFC6020】作为服务和数据抽象的建模语言。
ONOS
2.2.1 ONOS简介
服务提供商希望他们的 络敏捷、高效,满足日益增长的带宽需求,以创新服务和新型业务模式获取收入。软件定义 络SDN是服务提供商 络转型的关键,而ONOS是一个为服务提供商量身打造的新型运营商级别的SDN 络操作系统,由ON.Lab和ONOS 区内领先的服务提供商、供应商和开发者共同开发。
ONOS是首款开源的SDN 络操作系统,主要面向服务提供商和企业骨干 。ONOS的设计宗旨是满足 络需求实现可靠性强、性能好、灵活度高。此外,ONOS的北向接口抽象层和API支持简单的应用开发,而通过南向接口抽象层和接口则可以管控OpenFlow或者传统设备。总体来说,ONOS将会实现以下功能:
1.SDN控制层面实现电信级特征(可靠性强,性能好,灵活度高);
2.提供 络敏捷性强有力保证;
3.帮助服务提供商从现有 络迁移到白牌设备;
4.减少服务提供商的资本开支和运营开支。
图24 ONOS架构概述
ONOS具有下述核心功能:
1.分布式核心平台,提供高可扩展性、高可靠性以及高稳性能,实现运营商级SDN控制器平台特征。ONOS像集群一样运行,使SDN控制平台和服务提供商 络具有 页式敏捷度。
2.北向接口抽象层/APIs,图像化界面和应用提供更加友好的控制、管理和配置服务,抽象层也是实现 页式敏捷度的重要因素。
3.南向接口抽象层/APIs,可插拔式南向接口协议可以控制OpenFlow设备和传统设备。南向接口抽象层隔离ONOS核心平台和底层设备,屏蔽底层设备和协议的差异性。且南向接口是从传统设备向OpenFlow白牌设备迁移的关键。
4.软件模块化,让ONOS像软件操作系统一样,便于 区开发者和服务提供商开发、调试、维护和升级。
2.2.2 ONOS北向抽象层(API)
ONOS架构中有两个强大的北向抽象层:意图框架和全局 络视图。意图框架屏蔽服务运行的复杂性,允许应用向 络请求服务而不需要了解服务运行的具体细节,这就意味着 络运营商和应用开发者可以进行高级编程。他们可以轻松地提出意图:一个策略声明或连接需求。
意图框架处理所有应用的请求,判断可以满足哪些应用,解决应用之间的冲突,执行管理者的策略,对 络编程提供请求的功能,交付请求的服务给应用。
一个意图转化为多个目标。例如,一个连接2个主机的意图转化为2个目标,各提供一个方向的流。将意图转化的目标编译成指令发送给 络设备,整个流程按照 络运维人员指定的策略进行。从某种程度上说这个方法可以解决意图之间的冲突。
全局 络视图为应用提供了 络视图,包括主机、交换机以及 络相关的状态参数,如利用率。应用可以通过APIs对 络视图进行编程,一个API可以为应用以 络图的形式提供 络视图。
确切的说,北向接口抽象层和APIs将应用与 络细节进行隔离。而且也可以隔离需要了解 络事件(如链路中断)的应用和其它应用。反而言之,将 络操作系统与应用隔离, 络操作系统可以管理来自多个、竞争应用的请求。从业务角度看,提高了应用开发速度,允许 络改变并且保证应用不会当机。
2.2.3 软件模块化
软件模块化是ONOS一大特征,基于软件的形式可以很方便地进行添加、改变和维护。ONOS团队在模块化方面投入很多心血,务必让开发者可以简单快捷地操作软件。将软件拆分为若干组件以及组件之间的交互。从如下的示意图所示,ONOS的主体架构是围绕分布式核心的分层架构。所以,从宏观结构上说,北向接口与南向接口API将应用、分布式核心和适配层相互隔离,可以独立添加新的应用和协议适配器。
同样,从具体细节来看,分布式核心内部的子结构也能体现模块化特征,分布式核心的存在价值就是约束所有子系统的规模并保证模块的可拓展性。此外,连接不同模块的接口是至关重要的,允许模块不依赖其他模块独立更新。这样就可以不断更新算法和数据结构,并且不会影响整体系统或是应用。
显然,ONOS很重视接口,因为接口可以促进模块业务和职责的分离,尽量使子系统之间的交互更为自然、简单。这一特点是确保软件稳定更新的关键。例如,尽量提供南向API的抽象程度,避免将不同协议的偏差传递到上层,并且强化分布式核心而不是适配层来创建 络模型对象。
ONOS源代码的树形结构不仅仅为了遵循而是要加强这些结构原则。合理控制模块大小并且模块之间保持适当依赖形成一个非循环的结构图,模块之间通过API模块相互关联,正如下图所示。
图25:ONOS Models
2.3 Floodlight
Floodlight是BIG Switch控制器的开源版本,Floodlight架构如图4所示,其北向接口也是基于REST API。Floodlight不仅提供了基本的 络状态查询、统计、配置接口,还提供了以下3种API。
图26 Floodlight架构
1) 静态流推送器API
静态流推送器API允许用户手动将流插入到OpenFlow 络,包括OpenFlow的主动添加和被动添加2中方式。
2) 虚拟 络API
虚拟 络API负责创建新的虚拟 络的名称、ID、 关等,将主机加入到虚拟 络中等。
3) 防火墙API
防火墙API负责防火墙的创建、开启、删除等操作。
2.4 Ryu
Ryu采用组件化的结构,由Rython语言编写,并提供大量库函数(组件)供SDN应用的开发。RyuSDN框架如图5所示,针对北向的用户的应用,Ryu框架也提供了丰富的API。
1) RESTful管理API
用户通过相应组件配置管理SDN 络的接口,如可以通过OF REST组件API配置OpenFlow交换机;通过Firewall组件API配置防火墙等。
图27 RyuSDN框架
2) REST API
REST API是与OpenStack云编排系统(orchestration)对接的接口。
3) 用户自定义API
用户也可通过自定义的方式实现REST API或RPC API。
2.5 Group-Based-Policy
Group-Based-Policy是由Cisco和IBM主导,在Openstack平台新增的一个关于北向接口的开源项目。
2013年11月,Cisco收购Insieme Networks公司以后,以该公司技术为核心,推出了以应用为中心的基础设施解决方案“ACI”。同时,在其主导的OpenDaylight 区创建新的孵化项目Group Policy,随后与IBM联合提案,在Neutron项目中增加以应用为中心的、面向策略的、抽象的接口项目,并最终命名为“基于组的策略抽象(GBP)”。
该项目的基本目标是制定更合适与应用所使用的、开放的北向API、其出发点认为目前面向 络及其服务的北向接口比较复杂,不利于应用开发者使用,特别是不熟悉 络编程的人员,无法面对复杂的 络协议和功能,因此,需要提供面向策略的语义接口,能够使上层对 络的使用更简化。
2.6 Congress Project
Congress Project由VMware公司主导,与2014年初启动,目的是提供面向策略的北向接口(Policy as a service)。
作为云计算领域领头的IT公司,VMware面对的主要是IT设施以及应用层面的开放,Congress的提出也是对Cisco(Vendor厂商)面向应用部署、自动化方面渗透的GBP项目的一个应激防御,防止由Vendor厂商来主导面向应用层次接口的开放制订。
Congress希望给应用提供一个关于部署、配置、管理等方面的接口框架,简化应用层对下层细节理解以及使用管理。主要涉及以下几个方面:
? 租户资源的配置(如VMs、Applications);
? 自动化部署(如application/VM locations);
? 资源应用自适应(如Web App scaling based on load);
? 基础设施的管理(如relationship between hosts、newworks。Storege)。
3. SDN北向接口标准化
3.1 ONF NBI-WG
ONF原本在架构与框架工作小组(architecture framework WG,ARCH-WG)中有一个研究小组在从事不同SDN解决方案的北向接口研究,为了响应产业对SDN北向API标准化的需求,新成立了北向接口工作小组(NBI-WG)。
NBI工作组目前尚未发布相关的标准草案,但是在工作组的目标文档中提出,对于SDN北向接口应给出不同层次的抽象及接口范围,ONF北向接口层次框架规划如图6所示。
图28 ONF北向接口层次框架规划
ONF期望定义并发展通用的以及一些预定领域的API,其主要目的是为控制器、 络服务以及开发者提供可扩展且稳定的北向API,增加软件设计上与SDN控制器交互运作的便利性,同时确保控制器供货商开发时能在共通API自由创新。
3.2 IRTF和IETF相关工作组
IRTF已经成立了SDN研究工作组(software defined networking research group,SDNRG),工作组草案提出了SDN层次化结构,其中,在管理和控制层面上给出了 络服务抽象层(networking services abstraction layer,NSAL),为应用、服务、控制和管理提供接入,也就是北向接口,具体的接口形式包括但不局限于RESTful APIs、RPC、公开的或特定的协议、CORBA接口。IRTF认为北向接口应该具有更多信息,整个设备、资源的管理平面也纳入到SDN北向接口的考虑范围。SDNRG定义的SDN层次架构如图7所示。
图29 SDNRG定义的SDN层次架构
IETF前期对于SDN的标准化多集中于南向接口技术,围绕传统的协议接口进行完善和扩展,并在一定程度上进行少量创新,试图在对传统 络不造成较大冲击的情况下适应SDN的需求,如ForCES【REC5810】、BFD、PCEP、BGP的修改、新增I2RS提交的OVSDB等。北向接口方面,前期的ALTO可作为 络拓扑以及路径计算服务的开放接口,NETCONF管理协议,完成YANG、RESTCONF等一系列与SDN紧密相关的扩展,可作为北向接口的选择之一。另外,考虑到NFV以及NFV与SDN结合的影响,IETF成立了SFC(service function chain)工作组,意图确立各 络功能服务整合的体系架构以及对外的接口,SFC的对外控制接口是SDN北向接口的重要组成部分
一方面,产业界出资与学术机构合作研究可商业化的原型系统实现,并以原型平台为基础,对业界推介SDN的北向接口定义,如ONIX、NOX、BEACON等都是类似这样的SDN控制器平台,进而自定义一套北向接口。
另一方面,针对OpenFlow,在POF这类 络编程方面接近汇编语言可能的缺陷,如暴露太多底层细节,模拟设备的转发行为,需要编程者在类似规则重叠、优先级冲突、数据面状态一致性上等细节上最更多考虑。一些研究者致力于创造新的 络编程语言的研究,代表有Frenetic、Pyretic、Maple、Netcore等。
4. 学术界关于北向接口的研究
一方面,产业界出资与学术机构合作研究可商业化的原型系统实现,并以原型平台为基础,对业界推介SDN的北向接口定义,如ONIX、NOX、BEACON等都是类似这样的SDN控制器平台,进而自定义一套北向接口。
另一方面,针对OpenFlow,在POF这类 络编程方面接近汇编语言可能的缺陷,如暴露太多底层细节,模拟设备的转发行为,需要编程者在类似规则重叠、优先级冲突、数据面状态一致性上等细节上最更多考虑。一些研究者致力于创造新的 络编程语言的研究,代表有Frenetic、Pyretic、Maple、Netcore等。
VTN
VTN简单介绍
VTN是SDN控制器中用于提供多租户虚拟 络的一项应用。通常,为每个部门的系统配置 络需要耗费大量的人力、物力,同样,需要为每个租户安装各种 络应用,并且很难共享这些资源,因此,设计、部署、管理整个复杂的 络是一项繁重的任务。为了解决这一难题,OpenDaylight提出在控制器中使用VTN,VTN的独特之处在于逻辑抽象平台。VTN将逻辑层面与物理层面完全分离,用户可以设计、利用任何所需 络,并且无需了解物理 络的拓扑结构和带宽限制。
VTN允许用户根据对L2/L3层 络的感知来定义 络。由此可知,基于VTN设计的 络会自动被映射到底层物理设备,并配置到支持SDN控制协议的独立的交换机上。这样不仅屏蔽了底层 络的复杂性而且可以更好的管理 络资源,减少了 络服务的配置时间和配置错误。
图30 VTN架构
4.1.2 VTN API
Virtual Tenant Network项目是ODP中的一个重要项目,主要负责在SDN控制器上提供对多租户虚拟 络的支持。利用该项目,可以很好的让ODP支持OpenStack。
北向API
VTN提供了REST API,因此用户可以通过web操作来对VTN资源进行管
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!