面向意图的北向接口是一种与网络实现技术无关的北向接口,仅表达应用相关的词汇和术语,使得用户不需要看到×××、MPLS、路由协议等具体的网络技术。
SDN北向接口的挑战
根据Open Networking Foundation(ONF)的定义,软件定义网络(Software Defined Networking,SDN)构架分为垂直的三层:基础构架、控制层和应用层。SDN的北向接口(North-Bound Interface,NBI) 位于控制平面和应用之间,将控制器提供的网络能力和信息进行抽象并开放给应用层使用。因此,NBI对应用的创新和SDN生态系统的繁荣起着至关重要的作用。
现有的NBI多关注在网络功能层面。功能型NBI(Functional NBI)通常由网络领域的专家,从网络系统的角度设计,并自底向上的考虑NBI能够提供怎样的网络能力。这种设计不需要知道用户需求,而尽可能多的暴露网络的信息和能力,为上层应用提供了最大限度的编程能力。这样的功能型NBI的例子包括:设备和链路的发现、分配接口ID、设置设备的转发规则、管理成千上万的网络状态信息。
然而,让我们完全站在应用开发者的角度,假设我们并不了解复杂的网络概念和配置。应用的开发者希望将更多的精力集中在应用功能的体现、用户交互的友好,在使用网络服务的时候希望能够像使用云服务一样简单、自动化,希望网络能够具有灵活的、可靠的和可扩展的。这要求网络能够提供一套面向网络服务的、声明式的、反应用户意图的NBI(Intent NBI),例如:“在A站点和B站点之间建立连接”,“为我的数据中心互联(Data Center Interconnection,DCI)提供服务质量保障(Service Level Agreement,SLA)”,“为我的虚拟数据中心(Virtual Data Center,VDC)上网提供业务链(Service Function Chain,SFC)服务”。
对于应用的开发者来说网络服务接口的复杂性是网络相关应用开发的痛点。复杂是可扩展性的敌人,复杂使得接口不易于使用,复杂使应用的开发容易出错,复杂阻碍了网络相关应用的创新!
解决复杂性的方法是在控制器平台上构建一层声明式的网络中间件,应用通过Intent NBI告诉控制器想要做什么而不是怎么去做。由它捕捉到应用的意图,转换成领域和具体技术相关的网络配置细节,并隐藏转换过程的复杂性。
什么是Intent NBI
为了简化消费网络服务的应用和控制器之间的交互,控制平面应该提供一层Intent NBI。Intent NBI是一种与网络实现技术无关的北向接口,仅表达应用相关的词汇和术语,使得用户不需要看到×××、MPLS、路由协议等具体的网络技术。Intent NBI自顶向下地从需求视角对网络对象与能力进行抽象,并通过声明式的表达体现使用者的意图(想做什么),而不是如何去做。Intent NBI表达了应用期望控制器交付的服务输出,将控制器变成一个资源分配和资源管理的“黑盒系统”。
让我们用乘坐出租车打一个比方,通常乘客的意图就是从A地到B地。他不需要知道怎么走,只要对司机说:“嘿,我要去B地。”就这么简单,仅包含客户关心的信息。同样,乘客也不需要告诉司机为什么他要从A地到B地,因为这和乘客的需求无关。这样的例子扩展到网络服务领域是完全适用的。
Intent NBI可以为应用和应用开发带来很多的好处:
● Intent的描述是声明式的,并不指定执行的方式,使得控制器能够为基于Intent的请求自动的计算最优的结果,最大程度的满足请求。
● 基于Intent的请求和控制器平台及控制器的实现无关,它只是体现了应用层的需求,并使用应用相关的词汇和信息。相同的Intent请求可以由不同的控制器通过不同的方法或算法完成,这也使得应用具备跨平台的可移植性。
● 使用Intent NBI的应用可以在高层避免冲突的发生,增加请求的成功率。例如,一个常规的连接建立,需要应用指定连接路径经过的网络节点,之后控制器在相应的网络节点上下发配置。然而,如果基于运营商的某种管理策略,该路径上的某个网络节点是此应用不可使用的,则这样的部署请求将会失败。如果我们使用Intent,应用仅表达在A和B站点之间建立连接的需求,则控制器可以智能的为该请求选择一条避开指定网络节点的最有路径,并完成部署。
Intent表述模型
控制器理解Intent请求,需要有一种形式化的模型来描述Intent。总结生活中Intent的表述例子,通常可以归结于两类表达:一种是表达操作(Operation),表示“想要做什么”;另一种是表达结果(Result),表示“希望达到某一状态”。网络中意图表达的例子有:
● “I want toCREATEa Network for HR (Customer Facing Node)"
● "I want toBLOCKthe http flow (Flow)"
● "I want toADJUSTthe bandwidth (Connection) to 10G“
● “I want toAVOIDthe bandwidth utilization on the connection greater than 80%. (Result)”
从这些例子中,我们可以得出下面的Intent表述模型:
Intent由Object和Operation,或者Object和Result组成。服务层网络中
● 对象,可以总结为:面向用户的节点(Customer Facing Node,CFN)、连接(Connection)和业务流(Service Flow)。
● 操作,描述用户期望的行为,可以用“在某个条件下(Condition),做某个动作(Action),同时遵守某种约束(Constraint)”的模式来表述。
● 结果,描述用户希望达到的状态,可以用“期望达到某一状态”或者“避免达到某一状态”的子句来表述。
华为的Intent NBI实践
华为提出的NEMO项目一直引领Intent NBI的实践,提供了一套完整的基于意图的实现。NEMO项目开发了一种面向网络服务的编程语言作为一种新的SDN北向接口形式,打破了传统上“烟囱式”基于场景逐一定义接口的方式,基于Intent的表述模型总结出一套面向网络服务的原语,通过灵活的组合实现任意场景应用的描述与部署,并通过15种简单的语句替代了传统上成百上千的API。NEMO语言以更加自然和直接的方式表达用户的意图,网络应用和开发者在使用NEMO语言描述网络服务时,只需要告诉控制器做什么,而不需要指明如何去做。
NEMO的Intent执行引擎实现了一个网络中间件,隐藏网络实现和部署的复杂性,将高层次的服务级别的Intent转化成真正的网络部署,并通过软件自动化的方式解决网络中资源和策略的冲突。创新提出的三层映射架构,简化了Intent到网络部署的转换,使得每层映射功能清晰,第三方模块和新的算法功能可以快速的集成。
此外,NEMO还提供了一系列的支撑工具,比如沙箱,为测试、仿真和部署都提供了便利,为网络应用提供了一套集成开发环境。
业务定制与业务创新一直倍受运营商的关注。NEMO抓住运营商的需求,面向不同行业用户的意图,基于通用的网络操作模式和以应用为中心的网络模型,为运营商的业务设计人员提供一种简单易用的网络业务模板定制方式。使用NEMO语言可以快速的捕捉行业用户的意图,方便的在应用中描述其对网络的需求,而将网络实现层面的复杂性留给SDN控制器,并通过优化的软件系统,自动实现资源的分配、网络性能的监控、资源与策略的冲突解决,极大的简化了运营商的设计工作并加速了业务创新和新业务的布放。
华为正携手标准组织IETF、ONF以及开源社区共同完成Intent NBI、相关模型、NEMO语言语法以及Intent引擎的定义和实现。
本文转载自:http://developer.huawei.com/ict/cn/site-sdn/article/08