NEMO:一种声明式网络编程与业务定制语言
2016-05-14
华为技术有限公司 北京 100095
1 研究背景
SDN是近年来网络领域的热点话题,代表着网络未来的发展、演进方向。软件定义网络是一种新型的网络架构,在这一新型架构中,网络按照层次分为三层,即应用层、控制层和基础设备层,实现网络控制与转发的解耦,构建开放、可编程的网络体系结构,如图1所示。SDN生态体系的开放与可编程,使得网络服务、应用的开发与部署大大加快,支持未来各种网络体系结构和新兴业务的创新,满足新应用、新技术的time-tomarket快速部署、发放的能力。
图1 网络开放接口
开放、可编程是SDN网络的显著特征。SDN网络中,开放接口的关注点逐渐上移,主要经历了三个阶段。
第一阶段,网络开放关注基础设备层的设备开放接口,通过设备开放接口,直接实现对网络基础设备的控制域编程,通过直接生成并下发网络基础设备(如交换机、路由器以及网络芯片)的转发表项,实现网络对数据报文转发行为的控制,在Open Networking Foundation中定义了OpenFlow协议标准[1],通过[match, action]的模型方式,生成对包转发的转发表项,实现在网络设备具体的转发行为的细节控制。
第二阶段,网络开放关注控制器能力开放,通过控制器的开放接口,可以实现特定的功能型、特定场景或技术方案的网络控制能力实现。在ONF的North Bound Interface Work Group中,定义了大量的不同功能的开放接口,如Topology接口,L2VPN、L3VPN接口,Tunnel接口等,这些接口从具体的独立的网络能力角度,隐藏了具体网络设备的转发表项细节。此阶段的控制能力开放接口,虽具备了一定的抽象,简化了使用流程,使用者仍需具备丰富的网络知识和相关技术背景。
当前,第三阶段,网络开放关注系统能力开放接口,更注重于网络整体能力的抽象与开放,提供面向网络操作意图的网络操作接口。使用这类用户意图的声明式接口,网络用户、应用只需描述想要“What”,而无需关心“How”[2],向用户隐藏了网络相关的技术信息,大大降低了网络用户、服务的网络操作难度,使得网络更容易被操作和使用。
2 研究现状
近年来Intent NBI已经在标准、学术界以及开源上越来越引起人们的关注与参与。
在标准上,2014年底在IETF成立IB-NEMO讨论组,专注于推动面向用户意图的Intent北向接口,2015年10月成立SUPA(Simplified Use of Policy Abstractions)工作组也将Intent Policy作为未来网络控制领域的核心发展趋势,2015年初ONF专门成立Intent NBI工作组,讨论Intent的架构以及接口。
在学术领域,Sigcomm发表了多篇研究Intent的论文[3-4]。其中,Université catholique de Louvain大学发表的《A Declarative and Expressive Approach to Control Forwarding Paths in Carrier-Grade N e t w o r k s》[5]设计了一种称为D E F O的网络DSL(Domain Specific Language),该语言也是一种通过抽象topology、demand、constraint来描述网络行为目标(Intent)的语言。University of Wisconsin-Madison大学发表的《PGA: Using Graphs to Express and Automatically Reconcile Network Policies》[6],重点研究多用户Intent Policy的组合计算和冲突解决方法。
在开源领域,ODL、ONOS、OpenStack也都已经开始涌现面向Intent实现的开源项目。ONOS侧重于Intent Framework,提供一个Intent整体运行环境与框架,而Intent NBI的具体接口设计与实现的开源项目主要集中在opendaylight中。其中,GBP、NEMO、NIC是Opendaylight中面向Intent的主要项目。GBP采用抽象Group和Group之间的通信需求契约Contract来描述用户需求,而NIC采用endpoint之间的operation来描述业务需求,但这两个项目的主要目标应用场景为数据中心DC内的网络需求描述,难以实现、满足复杂多样的WAN网络需求。
NEMO通过对网络资源以及网络行为的抽象,提供了免用用户意图的Intent模型,并基于该模型设计了面向网络操作的DSL。相较于纷繁复杂的功能型接口,NEMO语言利用有限的网络抽象元语,即可实现对网络资源、业务以及操作的灵活表达,并可适用于数据中心、WAN网络等多种网络中。
3 NEMO的基本概念
NEMO的核心目标是提供一种抽象的面向用户意图的Intent NBI以及相应的描述网络需求的语言。通过这种Intent接口,用户只需聚焦于真正的业务需求,而无需关心具体的网络实现技术。在数据存储领域,一个成功的应用是SQL (Structured Query Language),它将复杂的数据操作抽象成一种统一的、直观的方式供用户使用,屏蔽底层数据存储以及操作的具体机制。借鉴于SQL,NEMO提供了一种高级的简单直观的网络操作语言,屏蔽底层复杂的网络技术实现,实现业务的灵活表达与部署。所以,NEMO是“网络领域的SQL”。
3.1 NEMO处理流程方法
从网络用户或应用对网络需求的Intent描述到最终映射到物理网络的配置信息,主要经过以下3个转变过程,如图2所示。
图2 NEMO总体处理流程与操作方法
1)抽象。从网络资源使用角度来看,网络拓扑、转发能力以及网络策略构成了网络管理的三大核心元素。为方便用户或应用表达对网络的需求,网络核心元素需求被抽象成更加统一、抽象的网络对象模型,屏蔽不同厂家、设备细节的差异,在NEMO模型中,网络对象模型为[object,operation]。对于三种类型的核心网络元素,拓扑被抽象成结点(node)以及结点之间的链路(connection);转发能力被抽象成不同种类的流( fl ow);网络策略被抽象成各种网络操作,如条件(condition)、行为(action)以及约束(constraint)。
2)编排组合。利用抽象出的网络对象模型,用户或者网络应用可以根据自己的需求,组合或编排出各种网络意图,实现对网络资源分配、网络业务的自定义部署。用户可以定义被操作对象object,以及作用在网络对象上的网络行为,实现对网络的整体控制,如网络资源申请、拓扑管理、带宽控制、SLA等。
3)编译和映射。用户使用NEMO语言表述的目标需求,首先经过编译处理,将用户的业务资源需求视图生成用户独立的虚拟网络需求视图;经过映射逻辑,实现用户的虚拟网络需求视图到真实物理网络的部署。
3.2 NEMO的设计理念和需要满足的约束
1)对用户的网络操作意图的抽象,得到网络目标信息模型。
2)以用户为中心的北向接口设计,以网络用户、服务的网络操作为角度,抽象关键词,形成平台无关、底层网络技术无关、声明式(declarative)的语言。
3)网络用户的Intent需求描述要可灵活组合、安全、可理解、无二义性,编译、映射结果要无冲突。
4)可映射,可以实现用户高级抽象的业务需求到网络具体技术相关、复杂的网络控制指令的编译、映射。
5)MDA架构,南向网络技术的PnP特性,能够满足底层多样性网络技术映射需求,实现PIM到PSM的映射,同时满足新增南向网络技术的在线加载。
6)多租户的支持,用户之间的业务视图、网络视图要相互隔离、互不影响,每个租户拥有自己的绝对安全的网络使用空间。
7)网络变化自适应,对于网络的异常、网络性能变化,能够自动重新进行虚拟网络到物理网络的映射、部署,网络用户、服务感知不到网络变化,降低网络异常对业务的影响。
4 NEMO架构设计
NEMO作为将用户业务需求转换为物理网络配置的一整套系统,包括NEMO模型、具体语言表现形式以及NEMO引擎对用户需求的处理以及对物理网络的映射。本节将会介绍NEMO模型、语言以及NEMO引擎的设计,还会列举几个典型的应用实例。
现有的网络资源和业务抽象采用“自底向上”的抽象方式,聚焦在控制器的能力开放上,而非从网络用户操作需求角度出发,难以满足用户意图,并且,功能型接口随着网络功能的增加层出不穷,很难收敛,不同功能型接口很难配合拉通,难以实现组合和复用。为解决这些问题,NEMO提供一套通用的用户Intent描述的接口和语言的表述方式,实现复杂的网络需求功能。
4.1 NEMO模型
从对Intent处理流程来看,NEMO抽象可以分成三个层次,即业务视图层、虚拟网络视图层和物理网络视图层。通用的抽象模型应该能够适用于各个层次的不同需求。分析每个层次的不同需求,均可以表示为[object,operation],即对某对象进行何种操作。为适应不同层次的需求,object和operation在各个层次会有不同的实例以及不同的属性。除了采取确定操作的Intent外,用户也可以仅表明期待或避免的结果,而不指定采用何种operation达到这种状态,因此,result是NEMO模型对Intent的另一种抽象。
使用基于模型的抽象方法(Model-based Abstraction)对网络资源和业务进行抽象,可以将intent抽象为对象(object)、操作(operation)以及结果(result),如图3所示。用户只需表明最终的网络状态,而不必关心如何达到这种网络状态。例如,保证所有链路的利用率小于80%。用户无需关心采取何种operation去实现这个状态。
图3 NEMO模型
4.2 NEMO语言设计
对象(object)是一个抽象类,定义了被管理或被作用的对象,在不同层次中可以被继承或者扩展。不同的抽象层次中,object指代的具体内容存在差异。例如,在业务视图层,object可以是业务结点、业务结点之间的链路或者关注的数据流等,而在物理网络视图,object将是不同的网络设备。
对象(object)由node、connection和flow构成。Node指的是一种网络资源,代表了网络功能结点,如网络业务结点、转发功能结点(防火墙,负载均衡器等)或者一系列网络功能结点的逻辑集合(子网、自治域等)。Connection是另外一种网络资源,描述了node实体之间的逻辑链路。Connection并不指代具体的物理链路,只描述node之间的可达关系。Connection作为连通资源,是保证可达性的必要条件。Flow指的是满足特定特征的网络流量,典型的匹配项是网络流量的五元组。
操作(operation)是一个抽象类,定义了为实现某种网络业务需求而采取的网络动作。如改变特定数据流路径,阻断不安全访问等。更详细地,operation可以分为带条件(condition)或限制(constraint)的操作或者不带条件或限制的操作。
Operation由condition、action和constraint组成。Action是构成operation的必要组成部分,表示采取的具体动作。Condition代表了operation的触发条件,只有当condition满足时,action才开始生效。Constraint代表对action本身的限制或者对action操作范围的限制。
结果(result)代表了一种期待或者避免的最终状态。
NEMO语言是基于网络抽象模型以及网络行为操作的一种DSL。利用有限的关键词以及特定的语法结构,以接近自然语言的形式表示用户的Intent。
针对NEMO模型中的每个元素对象,NEMO语言对应的语法规则如下所示。
1)对于Node:
METHOD Node node-name Type node-type Contain subnodes Property property-name: propertyvalue。
METHOD指的是对node实例采取的操作,创建(CREATE)、更新(UPDATE)、删除(DELETE)以及导入(IMPORT)。Node、Type、Contain和Property是定义Node关键词。其中Node表明该node的名字标识,Type表明了该node的类型,如l2-group;Contain表明了该node包含的内部结点,如主机h1;Property表明了该node的属性,如ip-prefix。其中,Contain和Property可根据情况确定是否保留。
2)对于Connection:
METHOD Connection connection-name Type connection-type Endnodes node-names Property property-name: property-value。
METHOD指的是对connection实例采取的操作,创建(CREATE)、更新(UPDATE)、删除(DELETE)以及导入(IMPORT)。Connection、Type、Endnodes和Property是定义Connection的关键字。Connection表明该connection的名字标识,Type表明该connection的类型,如p2p;Endnodes表明connection连接的node,Property表明该connection的属性,如bandwidth。其中,Property可根据情况确定是否保留。
3)对于Flow:
METHOD Flow flow-name Match match-type:match-value。
METHOD指的是对flow实例采取的操作,创建(CREATE)、更新(UPDATE)、删除(DELETE)以及导入(IMPORT)。Flow、Match是定义Flow的关键字。Flow表明该flow的名字标识,Match表明该flow匹配的特定数据包特征,如source ip。
4)对于Operation:
METHOD Operation operation-name Priority value Target object-name Condition conditionexpression Action action-type Constraint constraintexpression。
METHOD指的是对operation实例采取的操作,创建(CREATE)、更新(UPDATE)、删除(DELETE)以及导入(IMPORT)。Operation、Priority、Target、Condition、Action和Constraint是定义operation的关键词。Operation表明该Operation的名字标识,Priority表明该Operation的优先级,优先级越高越先被执行,Target表明该Operation操作的对象,如node实例;Action表明该Operation采取的具体动作,condition表明该Operation的action的触发条件,当Condition满足时,Action被触发,Constraint表明采取action的限制条件。目前NEMO语言支持的object类型、每种object的属性以及Operation中支持的action、condition请参见文献[7]。
另外,NEMO语言支持对新object类型和action的扩展。语法如下:
METHOD NodeModel/ConnectionModel/FlowModel/ActionModel type-name Property propertyname: property-value-type。
METHOD指的是对model实例采取的操作,创建(CREATE)、更新(UPDATE)、删除(DELETE)以及导入(IMPORT)。其中NodeModel、ConnectionModel、FlowModel、ActionModel和Property为定义model的关键字。Property表明每种model的属性名以及属性值的数据类型。
4.3 NEMO引擎架构设计
NEMO引擎是实现用于意图描述到物理网络配置的核心部件。NEMO引擎在完成Intent到设备配置时经历了两个阶段,首先完成将Intent业务视图编译成虚拟网络视图,再将虚拟网络视图映射到物理网络视图上。引擎的架构图如图4所示。
图4 NEMO引擎架构设计
NEMO引擎实现了从用NEMO语言描述的业务需求到具体物理网络配置的映射。租户管理完成用户虚拟网络空间的管理,每个组合独享一个VN space,业务逻辑管理完成对应NEMO描述的业务需求的语法检查,虚拟网络管理用于根据一定的算法生成满足用户需求的虚拟网络,物理网络控制域管理实现了从虚拟网络对物理网络的映射,而物理网络插件是物理网络设备与NEMO引擎的中间件,用于将映射结果配置到相应的物理设备上。
NEMO引擎在实现上主要经过了两个阶段。
1)编译阶段。NEMO引擎按照特定的算法,将用户利用NEMO模型(node/connection/flow/operation)表达的业务需求编译成特定的虚拟网络,以及对虚拟网络的控制。NEMO引擎采用[host,vRouter,vSwitch,vLink]模型来表示虚拟网络。具体生成的规则如下。
①对在业务视图上的每个l2-group包含的host类型的结点根据接入位置创建vSwitch,即将接入相同设备的host创建一个vSwitch,否则,创建多个vSwitch,并将后创建的vSwitch都连接到第一个被创建的vSwitch上。②对业务视图上的每个l3-group类型的结点,创建一个vRouter,并将其中包含的l2-group结点对应的第一个vSwitch连接到vRouter上。③在业务视图上的每个二层ext-group类型的结点分配一个vSwitch。④在业务视图上的每个三层ext-group类型的结点分配一个vRouter。⑥对业务视图上l2-group结点与l3-group结点连接,相当于将l2-group创建的vSwitch连接到l3-group结点对应的vRouter上。⑦在业务视图上l3-group之间的互连,将所有l3-group对应的vRouter都连接到第一个vRouter上。
一个典型的例子如图5所示。用户创建1个l2-group结点n1,2个外部的l3-group结点,并且该l2-group包含2台从不同位置接入的主机。
图5 业务视图
根据上述提供的生成虚拟网络的规则,不同位置接入的主机在生成虚拟网络时会创建两个vSwitch,并将第二个vSwitch连接到第一个vSwitch上。对于外部的l3-group根据接入位置的不同创建两个vRouter,并将这两个vRouter连接到l2-group对应的vRouter上。生成的虚拟网络视图如图6所示。
图6 虚拟网络视图
2)映射阶段。为实现物理网络的控制,需要将编译生成的虚拟网络映射到物理网络上。NEMO引擎采用[host,switch,router,path]模型表示对物理网络的抽象。虚拟网络到物理网络的映射算法规则如下。
①虚拟网络中生成的vSwitch会映射到与vSwitch连接主机的接入设备上。
②为二层ext-group结点创建的vSwitch映射到extgroup的接入设备上。
③为三层ext-group结点创建的vRouter映射到extgroup的接入设备上。
④虚拟网络中的vRouter(除了③中的)将会被映射到物理网关或核心路由器上。
⑤虚拟网络中的vLink将会被映射到物理网络路径上,该路径将是各种不同技术实现的隧道。
根据映射算法,将实现虚拟网络到物理网络的映射,但该映射过程强烈依赖于底层物理网络的状态,底层网络状态的异常、资源不足等均可导致映射失败。因此,NEMO引擎具有发现底层物理网络状态,并当网络状态发生变化时触发引擎的重映射。
5 典型应用实例
NEMO是用于网络业务描述、部署的统一抽象模型,适用于任意SDN网络(包括数据中心、WAN网络等)任意网络业务的部署,但该模型不涉及网元的创建与管理(如NFV中虚拟资源组件的创建)。
本节介绍利用NEMO语言、NEMO引擎实现从业务需求描述到物理配置的典型实例。
5.1 带宽按需分配场景(BoD)
业务需求描述:企业A有两个站点,总部在北京,分部在深圳。企业A希望两个站点之间的视频连接在9:00-18:00时间内享受2Gb/s带宽,而在其他时间段带宽为1Gb/s。
利用NEMO语言描述该业务需求如下所示。
CREATE Node headquarter Type l2-group Property ippref i x: 192.0.2.0/24, location: Beijing;
CREATE Node site Type l2-group Property ip-prefix:198.51.100.0/24, location: Shenzhen;
CREATE Connection c1 Type p2p Endnodes headquarter, site;
CREATE Flow f1 Match src-ip 192.0.2.0/24, dst-ip 198.51.100.0/24, proto: video;
CREATE Operation o1 Priority 2 Object f1 Condition time > 9 && time < 18 Action qos-bandwidth 2048 M;CREATE Operation o2 Priority 1 Object f1 Action qosbandwidth: 1024 M;
为验证NEMO描述的Intent对物理网络的影响,设计仿真物理网络,如图7所示。该物理网络中的交换机由OpenVswitch仿真。
图7 BoD场景的仿真物理网络
在控制器上下发NEMO语句,由NEMO引擎完成对物理网络的配置。为直观验证带宽的变化,现将head所在虚拟机设为视频服务器,site所在虚拟机设置为视频客户端,分别在不同时段播放视频,利用视频的卡顿来验证带宽的变化。
图8是在不同时间段采集的视频图像,从图像上可以直观感受利用NEMO引擎已经实现了不同时间段带宽的灵活调整,实现了业务的快速部署。
图8 不同时间段采集到视频
5.2 业务链场景(SFC)
业务需求:企业B的总部在北京,分部在深圳,企业B希望两站点之间的HTTP流经过特定的防火墙以及负载均衡器。采用NEMO语言描述该需求如下所示。
CREATE Node headquarter Type l2-group Property ippref i x: 192.0.2.0/24 location: Beijing;
CREATE Node site Type l2-group Property ip-prefix:198.51.100.0/24 location: Shenzhen;
CREATE Connection c1 Type p2p Endnodes headquarter, site;
IMPORT Node fw1 Type fw;
IMPORT Node lb1 Type lb;
CREATE Node chain1 Type chain-group Contain fw1,lb1;
CREATE Connection c2 Type p2p Endnodes headquarter, chain1;
CREATE Connection c3 Type p2p Endnodes chain1,site;
CREATE Flow f1 Match src-ip: 192.0.2.0/24, dst-ip:198.51.100.0/24, dst-port: 80;
CREATE Operation o1 Priority 1 Object f1 Action gothrough: chain1;
为验证是否该业务可实际部署到物理网络中,设计仿真网络如图9所示。
图9 业务链场景仿真物理网络
在控制器上下发NEMO语句,利用主机之间的HTTP包来验证业务是否流经业务链。
经验证,当防火墙规则为允许包转发时,两站点之间的HTTP包可达,若关闭防火墙的转发功能,两站点之间的HTTP包不可达。利用在防火墙上设置规则,可成功验证两站点之间通信的业务流已经被引入到业务链中。利用NEMO模型,可快速实现业务链场景的灵活部署。
6 现有面向Intent的北向接口对比
目前,面向Intent的SDN北向接口模型还处于研究中,各个标准组织还没有达成对这一接口的共识,但在开源领域,一些模型已经获得了广泛关注,具有较大影响力。
6.1 Neutron
Neutron为Openstack提供了“网络即服务”的功能,租户在云中能够自定义构建起一套虚拟网络环境,互联其虚拟机,并提供网络服务,真正构建起一个属于租户的虚拟DC,如图10所示。Neutron将网络抽象为网络Network、子网subnet、端口port、路由器router等。
图10 Neutron构建的物理网络
Neutron的网络抽象适用于云计算网络场景,以虚拟机中心,弱化拓扑概念。但该抽象只能描述虚拟机之间的互通与隔离,不能描述大部分的网络业务,如SLA、QoS等。虽然现在Neutron也在扩展,但只是逐个场景的扩展,针对一个业务需求就实现一个扩展,没有一个通用的模型来支撑。
6.2 GBP
针对当前大量的三层网络业务需求,GBP引入了策略模型,使用group和policy rule来描述网络业务需求,可以很方便地实现业务的自动化和安全性。
GBP将策略作用的对象称为group,将具有相同策略的虚拟机组合成group,策略是一些规则的集合,每个规则规定了两个group之间流量的行为,比如重定向、业务链等。GBP提出的模型如图11所示。
GBP模型改善了Neutron的不足,引入了动态调整机制,但GBP提出的模型只关注对流的处理,不能描述对网络拓扑、网络资源的请求,适用于数据中心网络,对WAN等复杂网络、复杂场景并不具有通用性。相对于这些北向接口模型,NEMO模型适用于各种网络,并且以接近自然语言的方式实现业务的描述,自动完成对网络的配置管理,真正实现了将各种业务统一为一种网络业务模型,实现业务的灵活部署与快速发放。
7 总结
本文通过分析SDN领域开放接口演进的三个阶段,提出新型的网络接口应是面向网络操作意图的抽象接口,即任何网络应用只需描述需要达到的结果即“What”,而不用关心实现该意图的具体操作过程即“How”。采用“自顶向下”提出了一种新型网络业务编程语言NEMO,将现有网络操作意图(Network Intent)抽象成一系列的网络元语,通过这些网络元语的灵活组合形成丰富的网络应用。另外,本文介绍了NEMO通过对网络资源和网络行为抽象出的网络Intent模型,即[object,operation]和result模型以及一种接近自然语言的语言表现形式,并介绍了NEMO引擎的架构设计,即实现Intent表示到具体设备配置的实现方式。为使用户更直观地体验NEMO实现业务部署的灵活性,最后提供了常见网络应用场景的部署过程以及最终效果。随着网络自动化过程的不断推进,提供面向用户Intent的网络操作接口及网络整体能力的抽象与开放,必将成为未来网络的发展方向,促进SDN网络生态环境更加繁荣。
图11 GBP模型
参考文献
[1]Pat Bosshart, Dan Daly, Glen Gibb, et al. P4: programming protocol-independent packet processors[J]. ACM SIGCOMM Computer Communication, 2014,44(3): 87-95
[2]Christopher J. Intent NBI -Definition and Principles[R].Version V3.August, 2015
[3]Brandon Schlinker, Radhika Niranjan Mysore, Sean Smith,et al. Condor: Better Topologies Through Declarative Design[C]//the 2015 ACM Conference on Special Interest Group on Data Communication, 2015: 449-463
[4]Stefano Vissicchio, Olivier Tilmans, Laurent Vanbever,et al. Central Control Over Distributed Routing[C]//the 2015 ACM Conference on Special Interest Group on Data Communication,2015
[5]Chaithan Prakash, Jeongkeun Lee, Yoshio Turner,et al. PGA:Using Graphs to Express and Automatically Reconcile Network Policies[C]//the 2015 ACM Conference on Special Interest Group on Data Communication,2015:29-42
[6]Renaud Hartert, Stefano Vissicchio, Pierre Schaus,et al. A Declarative and E x p r e s s i v e A p p r o a c h t o Control Forwarding Paths in Carrier-Grade Networks[C]//the 2015 ACM Conference on Special Interest Group on Data Communication,2015
[7]Reference manual[EB/OL].[2016-07-22].https://wiki.opendaylight.org/images/e/ee/Reference_manual.01.pdf