IRDA:一种灵活获取NFV对象信息的机制
2022-01-09吴伟楠
吴伟楠,陈 鸣,邓 理
(南京航空航天大学 计算机科学与技术学院,江苏 南京 211106)
0 引 言
网络功能虚拟化(network function virtualization,NFV)技术使得部署、管理和控制网络设备和网络服务更为经济与灵活[1]。管理与编排(management and orchestration,MANO)是NFV系统管理计算节点、CPU、内存、网络等资源的重要功能。而高质量的MANO决策,依赖及时有效地获取硬件服务器、虚拟机和虚拟网络功能(virtualized network function,VNF)实例等NFV对象的状态信息并加以分析、处理和利用[2-4]。
尽管目前的NFV监视系统能满足部分NFV应用的信息获取需求,但随着网络流量和用户量以惊人的速度增长,虚拟化网络规模正不断扩大,NFV对象的数量与类型急剧增多[5]。由此,NFV监视系统面临三个关键挑战。第一,NFV对象由于业务需求、性能瓶颈等因素,生命周期、部署位置和配置参数频繁变动[6-7],导致NFV应用的信息获取需求变化快、动态性强,NFV监视系统难以满足不同NFV应用的个性化信息获取需求,而传统网络硬件设备很少会移动和更改其生命周期。第二,目前存在很多监视NFV对象的技术与方法,但这些方法的功能与性能各有千秋,导致NFV监视系统功能复杂,无法确定哪种方法更适合。相比之下,监视管理传统网络设备已有统一且成熟的方法[8-9]。第三,NFV缩短了新技术的引入周期。每当研发出一种新型VNF应用,就需要更新监视系统程序以支持获取与监视该VNF应用的状态信息,开发与维护成本高。因此,研究如何根据信息获取需求而灵活、高效地获取各种NFV对象状态信息并且能敏捷地能够扩展系统监视能力,是促进NFV技术发展的一项重要工作。
针对第一个挑战,该文将NFV对象划分为3类,设计了一种结构化描述符用于定义灵活多变的信息获取需求。针对第二个挑战,提出了一种信息获取需求与获取技术解耦(information requirements decoupling from acquisition,IRDA)机制,该机制通过解析需求描述符即可获取状态信息。需求方可专注于描述需求而不用学习各种监视技术和方法。针对第三个挑战,提出了一种监视项注册机制,无需修改程序便可扩展IRDA系统的监视能力。
1 相关工作
一些著名的NFV MANO项目已提出相应的解决方案。2014年ETSI组织发布的NFV标准架构[10]通过散布的参考点共享组件间的状态数据,但存在监控管理碎片化问题。OpenBaton项目[11]提出插件机制,利用成熟的监控系统获取状态信息,消除了碎片化问题,但需要为每个监控系统编写专有的监控插件。ONAP项目提出闭环自动化模式[12],通过DCAE模块采集NFV环境的状态数据,并将采集的数据、消息分发给分析应用。T-NOVA项目则提出一种集成监控框架[13],引入独立的监视组件,通过OpenStack和OpenDaylight提供的API监视、收集、合并VNF实例和基础设施的状态数据,传达给编排器。该监控框架足够简单且具有一定扩展性,但扩展监视能力需要由开发人员编程完成。Kim等人[14]基于NFV监视架构,提出一种实用测量框架,能主动测量虚拟网络性能且具有较好的移植性。Naik等人[15]提出了一种可定制的NFV性能监视和瓶颈检测工具NFVPerf,准确性高且系统开销较小。
OpenStack的Ceilometer[16]项目能有效地收集物理和虚拟资源的性能指标数据,既能存储数据以供未来分析,也能实时将数据传输给OpenStack的核心组件使用。随着虚拟网络规模和用户量的扩大,虚拟资源的监视需求是巨大、多样且高度复杂的。Monasca项目[17]提供了一种面向多租户、高度可扩展、高性能和容错的监视即服务(monitoring-as-a-service)解决方案。Monasca采用微服务架构,可以根据运营商/客户的需求部署相应的监控服务,但系统复杂度和资源开销也大幅度上升。
降低NFV监控系统的资源开销也是研究热点之一。江逸茗等人[18]设计了一种基于监控代理的资源监控策略,意在最大化降低监控系统的通信开销。刘玄[19]利用动态资源分配算法优化了监控代理部署的策略,在降低通信开销方面有较好的表现。
综上所述,目前主要通过开发一个融合多种监视技术的监视系统来获取不同NFV对象的状态信息,并尽可能地降低系统开销。此外,需要重新编程才能扩展系统的监视能力。
2 描述信息获取需求的结构化方法
为解决上述问题,该文提出一种信息获取需求与获取技术解耦(IRDA)机制。该机制的基本思路是将信息获取需求与获取该信息的监视技术解耦,需求方专注于描述需求而不用学习各种监视技术和软件的使用方法。本节讨论如何清晰地描述需求方的信息获取需求。
2.1 相关术语
定义1:NFV环境中的资源实体定义为NFV对象。根据实现方法与功能的不同,将NFV对象分为三类。第一类是支撑NFV系统以及虚拟网络运行的通用硬件服务器对象SerObject。第二类是在通用服务器上运行的虚拟机对象VMObject。第三类是部署在虚拟机上的VNF应用实例对象VNFObject。
定义2:描述信息获取需求的结构化描述符称为需求描述符。根据合理的语法要求编写需求描述符,能够清晰描述多变的信息获取需求[20]。需求方的信息获取需求可能涉及到大量NFV对象,这些NFV对象的类型、部署位置和监控方式可能不同。2.2节将重点讨论需求描述符的语法格式。
定义3:获取NFV对象的状态信息所采用的协议和监视技术称为信息获取方法。不同类型的NFV对象通常需要不同的信息获取方法获取状态信息。例如,ServObject可通过简单网络管理协议(simple network management protocol,SNMP)收集状态信息。VMObject可通过虚拟机引擎提供的RESTful API来获取状态信息。VNFObject可通过VNF应用自身提供的API来收集状态信息。而无法获取某新型NFV对象的状态信息时,就需要扩展系统的信息获取能力和监视能力。
2.2 需求描述符
需求描述符应方便人类的理解和编写,利于计算机解析和执行,能明确指定需要监视的NFV对象和需要获取的状态,支持多种数据交付方式,如直接存储到数据库中或交付消息队列。通常,NFV系统中的每一个NFV对象都具有唯一的名称标识。因此,利用该名称能轻松指明需要监视的NFV对象及其部署位置。
该文采用具有良好语义的XML语法定义需求描述符。根标签是
第二层标签
表1 NFV对象的标签定义
第二层标签
3 基于IRDA的系统架构
3.1 系统架构
该文设计的基于IRDA机制的系统架构如图1所示。该架构主要分为三个层次:需求描述层、任务编排层和获取执行层。
图1 基于IRDA的系统架构
需求描述层的主要功能是为用户提供编写需求描述符的工具(包括RESTful API接口、Dashboard图形化界面和CLI命令行工具),支持用户根据其信息获取需求快速便捷地编写需求描述符,并提交到任务编排层。
任务编排层作为系统的核心,主要由IRDA解析模块、调度执行模块和监视项映射表组成。任务编排层是需求描述符的解释调度环境,关键作用是理解用户获取NFV对象状态信息的需求,并将其转换为获取状态信息的任务。监视项映射表存储了监视项与信息获取方法的映射关系。IRDA解析模块接收需求描述符,通过检索监视项映射表,将需求描述符中的监视项转换为具体的信息获取方法,创建相应的信息获取任务,把信息获取任务交接给调度执行模块。调度执行模块根据时间约束调度执行信息获取任务,调用相应的信息获取方法获取所需状态信息并交付。
获取执行层是系统的底层支撑,提供获取所需信息的能力。获取执行层主要由SNMP服务、成熟的监控软件和虚拟机/容器引擎提供的RESTful API等监控组件构成。这些监控组件所能提供的信息获取方法均记录在监视项映射表中。扩展IRDA系统的监视能力时,新监视技术通过监视项注册机制进行注册。监视项注册机制将在3.4节具体讨论。
3.2 系统工作流程
IRDA系统工作时具有“需求描述”、“解析调度”和“执行获取”三种状态,图2描述了IRDA系统的有限状态机。每当有新获取需求时,进入“需求描述”状态,根据需求编写并提交需求描述符。此后,向“解析调度”状态转移。解析执行模块解析描述符并创建信息获取任务,将信息获取任务按时间顺序插入任务队列中。一旦任务队列不为空且首部的任务执行时间到了,系统转入“执行获取”状态。系统在“执行获取”状态时,执行信息获取任务,交付获取的信息。执行过的任务若是单次的,则执行完成后删除该任务;若属于周期性任务,则再次插入任务队列适当位置,等待下次调度。任务队列为空时,回到“需求描述”状态等待新需求。
图2 基于IRDA系统的有限状态机
3.3 IRDA解析模块
正确地理解描述的需求,把监视项转换为具体的信息获取方法是一个难点。IRDA系统支持的信息获取方法记录在监视项映射表中。一个信息获取方法对应一条表项,一条表项共包含五个字段,描述了该信息获取方法的监视项名称、所需参数、调用接口、调用方式以及返回的数据格式。监视项映射表表项示例参见表2,例如监视项“net.if.inOctet”对应的信息获取方法为使用SNMP WALK操作获取OID为“1.3.6.1.2.1.2.2.1.10”的状态信息,支持的NFV对象类型为SerObject,不需要额外参数,返回原生字符串类型的数据。
表2 监视项映射表示例
显然,IRDA解析模块正常工作需要严格检查需求描述符。IRDA解析模块解析需求描述符过程如下:
(1)接收需求描述符并检查语法。接收需求描述符,检查需求描述符语法结构是否正确。如果检查未通过,则返回错误消息。如果检查通过,则继续。
(2)将监视项转换为具体的信息获取方法。依次解析所有
(3)获取需要监视的NFV对象信息。解析
(4)提取控制信息。在需求描述符的根标签中提取开始时间,停止时间,时间间隔和数据交付方法。计算信息获取任务的首次执行时间。
(5)创建并交接任务对象。新建一个信息获取任务对象,使用HashMap实例存储上述获取的各类信息,将其交接调度执行模块。
当监视项目映射表提供的信息获取方法不能满足信息获取需求时,可通过监视项注册机制扩展系统支持的监视项和信息获取方法。
3.4 监视项注册机制
目前扩展NFV系统信息获取能力的解决方案的共同点是,通过编程与编译使监视项与信息获取方法耦合起来。而IRDA解析模块的工作方式使得IRDA系统具有无需修改监视系统的程序也能扩展系统监视能力。
监视项注册机制是用于添加、删除和修改监视项映射表表项的机制,进而扩展IRDA系统的监视能力。信息获取方法的注册过程如下:
(1)按监视项映射表表项的字段结构,依次定义和编写新的监视项名称、支持对象类型、所需参数、信息获取方法的调用方式和调用接口、返回数据类型,作为注册信息;
(2)监视项映射表提供了用于添加,修改和删除注册信息的API。调用对应的API将新编写的注册信息提交给监视项映射表;
(3)测试注册信息。监视项映射表自动调用注册的信息获取方法随机获取一个NFV对象的状态信息,测试方法的有效性。如果能够根据注册信息的描述获取到正确的NFV对象状态信息,则将注册信息添加到监视项目映射表中并对外发布监视项名称。
相比为获取功能编写专门的程序并进行编译,监视项注册的方法无疑更为简单、快捷。
3.5 信息获取任务调度
调度执行模块本质是一个定时任务调度框架,维护着一个线程池和任务队列,负责调度、执行信息获取任务和交付状态信息。调度执行模块接收新任务对象后,将新任务对象实例化,根据任务对象中的时间控制信息设置相应的调度策略,并放入任务队列中等待调度与执行。
任务队列调度过程如下:当到达队首任务的调度时间时,执行信息获取任务,否则等待。当信息获取任务开始执行时,对于信息获取任务中的每种信息获取方法,将启动利用线程池中的一个或多个空闲线程来执行状态获取操作。按定义的交付方式传输状态数据。如果信息获取任务是周期性的,则计算下一个执行时间,将任务插入任务队列中的适当位置。如果信息获取任务是非周期性的,则在执行后将其删除。重复上述步骤,直到任务队列为空。
4 原型系统实现及测试分析
4.1 试验环境搭建
在一台Lenovo ThinkServer RD550服务器上利用LXD容器管理软件和TFN2K[21]DDoS攻击工具,搭建了一个拥有22个容器、能进行小规模DDoS攻击实验的虚拟网络试验环境。该服务器具有一颗六核、主频2.4 GHz的CPU,内存为32 GB,操作系统版本Ubuntu Server 18.04。试验环境的网络拓扑如图3所示,tfn2k节点为部署TFN2K主控端VNF的攻击节点,td1-td5为部署TFN2K代理端VNF的傀儡节点,iperf1和iperf2为部署Iperf3 VNF的虚拟主机,h1为普通虚拟主机,r1-r12是部署Quagga VNF并配置了OSPF路由协议的虚拟路由器,ddosd是部署了VNFfilter的虚拟防火墙[22],VNFfilter用于过滤恶意的UDP报文。每一个LXD容器都启动了NET-SNMP软件以支持SNMP协议。
图3 IRDA原型系统试验环境
4.2 原型系统实现
在上述NFV环境中设计并实现了一个具有IRDA机制的原型系统。原型系统前后端分离,采用RESTful风格的API与HTTP协议进行前后端和模块间的通信。
原型系统的需求描述层作为系统前端,使用C#语言基于.NET框架开发,实现了能根据获取的状态信息实时显示虚拟网络的状态、性能数据的图形化界面,能呈现监视项映射表已注册的监视项名称,并提供了需求描述符编写工具。
任务编排层作为系统后端,由IRDA解析模块、监视项映射表和调度执行模块组成。IRDA解析模块和监视项映射表的基本逻辑基于SpringBoot框架编程实现。调度执行模块的基本逻辑基于Quartz定时任务调度框架实现。获取执行层部署了SNMP客户端、Zabbix软件和基于LXD管理API开发的容器监控程序。
4.3 功能测试与分析
为了验证基于IRDA机制的监视系统是否具有根据需求描述符获取NFV对象相关状态信息的能力和系统扩展监视能力的能力,在虚拟网络中进行DDoS攻击试验,并利用IRDA原型系统获取试验过程中虚拟网络的各类相关状态信息。试验开始前,监视项映射表中注册了LXD容器监控程序和SNMP常用的监控OID,以支持获取宿主服务器、LXD容器、Quagga VNF等NFV对象的状态信息。
试验步骤如下:
(1)运行图3中的虚拟网络,让iperf1节点向iperf2节点发起速率为100 Mbps的UDP流,测试网络连通性。此时,编写需求描述符获取r1节点的3个端口的输入流量。图4为前端系统显示r1的端口流量统计情况。可见,IRDA系统准确获取了所需的状态信息。
图4 r1的端口输入流量统计
(2)输入命令使得tfn2k节点同时控制傀儡节点td1-td5向h1节点发起UDP Flood攻击。此时,编写新的需求描述符获取60秒内所有傀儡节点的UDP攻击报文发送速率。图5为前端系统获取各傀儡节点的实时UDP攻击报文发送速率后,计算得出的各个时刻UDP攻击报文最大、最低和平均发送速率。
图5 傀儡节点UDP攻击报文发送速率统计
(3)启动ddosd上的VNFfilter,过滤发往h1的恶意UDP流。VNFfilter提供了获取丢弃报文数量的RESTful API,但IRDA系统未注册该信息获取方法,无法使用该接口。编写该接口的注册信息,并为其定义新监视项名称“filter.drop.pkts”,提交到监视项映射表。测试通过后,使用“filter.drop.pkts”编写需求描述符监视60秒内ddosd的报文丢弃情况。图6为VNFfilter的UDP报文丢弃数量变化情况。
图6 VNFfilter丢弃报文数统计情况
试验小结:通过解释执行需求描述符,IRDA原型系统能分别获取指定NFV对象的状态信息,并将其传递到前端程序。监视项注册机制能快速地扩展IRDA系统不支持的监视能力。同时,使用可视化工具可以帮助用户快速正确地编写需求描述符。
4.4 性能测试与分析
本节主要对IRDA原型系统性能与资源利用率进行试验与分析。定义从用户向IRDA解释器提交需求描述符到交接状态信息的过程所需的时间为信息获取时延。图7显示了增加IRDA原型系统同时运行的信息获取任务数量与信息获取时延的平均值。
图7 获取时延与信息获取任务数的关系
可见,信息获取时延随系统中信息获取任务数量增加而呈大致的线性增长,每个任务的平均状态获取时延约为30 ms~53 ms。如果其中周期性信息获取任务占的比例高,非首次执行不需解析需求描述符,信息获取时延会较短。
IRDA原型系统运行在宿主服务器上,需要占用系统资源,考察考察IRDA原型系统对宿主服务器资源具有何种影响很重要。在具有相同配置的服务器上部署了OpenStack。然后,使用IRDA原型系统和Ceilometer连续获取多个虚拟机的相同状态信息与性能指标,并逐步增加信息获取任务数量。测量结果如图8所示,可以看出,即使IRDA原型系统同时运行500个获取任务,CPU利用率也低于6%,内存利用率小于3%。但是Ceilometer在类似的情况下占用的服务器资源要大得多。
(a)CPU占用率与信息获取任务数量关系
(b)内存占用率与信息获取任务数量关系图8 宿主服务器CPU、内存与信息获取任务数关系
5 结束语
为满足NFV应用和NFV系统管理的信息获取需求,如何按需灵活获取NFV对象的状态信息是NFV技术迫切需要解决的技术问题。文中提出了一种信息需求与获取技术解耦(IRDA)机制,使用需求描述符定义获取信息的需求,系统可以有效地获取所需的状态数据。文中提出的监视项注册机制可以扩展IRDA系统支持的监控软件或监控技术,从而进一步增强IRDA系统的可扩展性和灵活性。原型系统的测试和评估结果显示了IRDA相关机制的可用性和有效性。下一步,将在更大规模的NFV网络对IRDA机制及其相关技术进行测试,为NFV管理与编排提供一种实用的信息获取技术。