一种基于编排控制流程业务开通的控制子任务引擎模块
文献发布时间:2023-06-19 10:24:22
技术领域
本发明涉及编排控制流程的业务开通领域,尤其是一种基于编排控制流程业务开通的控制子任务引擎模块。
背景技术
运营商的传统业务开通,一般要经过客户管理系统、资源系统、服务开通系统和专业网管激活系统等,流程很长。新增一种业务,需要各个系统间协商,明确新增业务的必要条件,涉及多系统和多部门的协作,流程周期长,逻辑固化,协调难,为了更快的适应新业务发展的需求,尤其是云网融合相关的业务,提出了基于编排控制流程的业务开通方案,如图1所示,目标就是摆脱固化流程和硬编码,可灵活组合、定义能力和流程,应对业务变化和支持业务创新。
整个编排控制流程实际会分成多个模块,比如业务编排模块、网络编排模块、资源编排模块、规则编排模块、控制意图工单模块、控制子任务引擎模块和网元控制引擎模块等。在工单接收完成以后,子任务引擎(STE)是执行工单(任务)的一种方式,可以看作是通用的流程引擎的一个开通定制版本,主要思路是将开通工单(任务)按设备+配置项拆分为多个子任务,实现多设备多子任务的串行-并行-串行执行逻辑。复杂的流程控制主要通过定制子任务分解逻辑来实现。子任务引擎主要通过同步服务调用,适合比较实时的场景,不适合需要较长的等待的场景(可能导致调用环节超时)。由于引擎以及功能服务化,不需要再配置引擎实例,统一通过服务治理接口进行管理和分配。
发明内容
针对上述情况,本发明提供一种基于编排控制流程业务开通的控制子任务引擎模块。
为实现上述目的,本发明采用下述技术方案:
在本发明一实施例中,提出了一种基于编排控制流程业务开通的控制子任务引擎模块,该模块包括:
任务场景建模子模块,用于场景编排建模,包括角色、配置项、场景模型、参数编排和资源编排;
任务调度子模块,包括页面即时调度和工单定时调度;
任务执行服务子模块,用于提供工单执行的方法接口、工单子任务分解、子任务调度、子任务执行、部署后处理和返单;
数据服务子模块,用于提供数据模型、工单信息查询、场景模型信息查询、子任务状态更新、设备登录信息查询、工单日志更新、设备基础信息更新和设备基础信息采集。
进一步地,场景通过编排器或者基础数据进行场景编排建模,并按树形进行分类展示,叶子为场景,形成业务能力目录。
进一步地,配置项按树形进行分类展示,形成原子能力目录。
进一步地,工单定时调度分区域\分不同业务类型\分组并行调度。
进一步地,页面即时调度是页面手动触发任务处理,包含有事前检查、配置预览、配置下发、事后核查、配置巡检和异常回滚预览。
进一步地,任务执行服务子模块提供REST GET接口框架,被工单定时调度或者页面即时调度。
进一步地,工单子任务分解根据场景建模的结果进行分解,通用逻辑如下:
根据场景定义的角色,获得角色对应的设备信息;
调用设备登录信息查询,获得设备信息,含设备系列;
调用场景模型查询服务;
获得场景的模型定义和相关配置项的模板定义;
根据场景模型,每个角色+配置项对应一个子任务,并设置对应的事务\阶段\序号;
返回设备信息和子任务信息。
进一步地,工单子任务分解根据场景建模的结果进行分解,特殊逻辑如下:
如果角色是一个数组,则分解出多个子任务,阶段和事务相同,序号递增;
根据设备系列和配置项得到对应的配置项模板和方法。
进一步地,子任务调度流程如下:
优先按阶段串行执行;
阶段之间按条件等待;
相同阶段的子任务,不同的事务单元并行执行;
同一事务单元,按序号顺序执行;
串行执行的动作不允许失败。
进一步地,子任务调度调用服务更新子任务状态。
有益效果:
1、创新的任务控制任务调度,通过基础数据可进行网络建模。
2、引擎支持多设备多任务串行、并行和事务的异常处理。
3、灵活的规则处理,通过控制模板+指令模板两层任务控制。
4、支持实时以及准实时的任务调度。
附图说明
图1是本发明一实施例的编排控制流程业务开通方案全流程图;
图2是本发明一实施例的控制子任务引擎模块整体流程示意图;
图3是本发明一实施例的子任务调度流程示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神,应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种基于编排控制流程业务开通的控制子任务引擎模块,主要通过任务场景建模、任务调度、任务执行服务和数据服务等子模块实现多设备多子任务的串行-并行-串行执行逻辑。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
本发明一种基于编排控制流程业务开通的控制子任务引擎模块,该模块包括:
任务场景建模子模块,用于场景编排建模,包括角色、配置项、场景模型、参数编排和资源编排;
任务调度子模块,包括页面即时调度和工单定时调度;
任务执行服务子模块,用于提供工单执行的方法接口、工单子任务分解、子任务调度、子任务执行、部署后处理和返单;
数据服务子模块,用于提供数据模型、工单信息查询、场景模型信息查询、子任务状态更新、设备登录信息查询、工单日志更新、设备基础信息更新和设备基础信息采集。
为了对上述基于编排控制流程业务开通的控制子任务引擎模块进行更为清楚的解释,下面结合一个具体的实施例来进行说明,然而值得注意的是该实施例仅是为了更好地说明本发明,并不构成对本发明不当的限定。
图2是本发明一实施例的控制子任务引擎模块整体流程示意图。如图2所示,为控制任务引擎的处理过程,承接工单接口,可以由工单接口触发建立工单,工单建立后可以由定时触发任务处理,也可以通过页面进行即时处理。任务处理前会根据场景建模中的类型,针对此类型的任务进行任务分解服务,分解成具体要处理执行的子任务,然后转到任务执行服务,任务执行服务中实际可根据建模中的类型,来进行具体的类型的任务处理,包含有事前检查、配置预览、配置下发、事后核查、配置巡检和异常回滚预览等。每个具体类型的任务都分别执行,通过任务调度进行调度,任务涉及到的控制部分,则由网元控制引擎模块实现。
一、基础概念说明
1、名词概念
子任务引擎依赖如下概念:
(1)模型相关
场景:对应一个业务;
配置项:组成场景的基本单元;配置项=设备原子能力;
任务:对应一张工单,涉及多个网元操作的场景;
子任务:一个网元+一个控制模板对应一个子任务;
角色:一个角色对应一类网元;角色信息可能会影响业务参数;
网元:对应角色\系列属性;
参数:分为全局参数和特殊参数(包含特殊前缀和网元相关);
模板:角色+系列+配置项+任务分类=模板;
控制模板:包含控制逻辑,对应一个子任务;
指令模板:不含逻辑,只含命令和参数;
命令:模板+参数+网元=命令。
(2)流程相关
阶段:可以把子任务分为不同的阶段顺序执行;
事务:在一个阶段中,可以定义事务单元;不同事务单元可以并行处理;事务单元内的串行执行;
序号:在同一事务中,按序号顺序执行;
2、子任务调度流程
图3是本发明一实施例的子任务调度流程示意图。如图3所示,子任务引擎使用固定的子任务调度流程,即:
优先按阶段串行执行;
阶段之间可以按条件等待;
相同阶段的子任务,不同的事务单元并行执行;
同一事务单元,按序号顺序执行;
串行执行的动作不允许失败(失败则中止后续操作)。
特殊处理:
如果同一个角色对应多个设备(类似延伸电路的延伸交换机),则由特殊处理逻辑(定制化处理逻辑,强行指定调度顺序等逻辑,改变流程等)进行处理,分解为多个子任务。
3、任务分类
子任务引擎主要用于开通(涉及多设备场景),开通任务相对比较特殊,因此预设了几个特定的分类:
事前检查:对应prechk模板,检查冲突,获取和设置临时性参数;
配置预览:对应cfg模板,执行预览命令,获取实际下发命令(仅对手动下发),预览结果可以直接下发;
配置下发:对应cfg模板,执行配置命令;
事后核查:对应postchk模板,验证配置正确性;
配置巡检:定期检查;
异常回滚预览:对应rb模板,为了防止回滚异常,只提供手动预览和下发功能。
注意,在子任务引擎中,阶段指的是配置阶段,不要把任务分类定义为阶段,否则会造成逻辑混乱;子任务和角色只和配置项有关,和任务分类无关,即precheck和cfg是两类子任务,而不是两个子任务。
二、场景建模
1、场景-业务
场景对应业务;
场景可以通过编排器进行场景编排建模,也可以通过基础数据建模;
场景可以按树形进行分类展示,叶子为场景,形成业务能力目录;
场景树建议包含业务类别(例如云间高速)\业务类型(例如L3VPN)\业务操作类型;
存为下表1:
表1
存为对象(json/xml),如下表2;
由场景编排确定使用STE还是PTE;
表2
引擎类型如下表3:
表3
2、角色-设备
设备是角色的实例,角色是设备的抽象;
传统的开通流程以设备为核心,子任务对应设备;
在场景编排阶段,编排的是角色,在运行态的时候实例化为对应的设备;
有了设备连接池服务以后,设备的原子能力服务化成为可能,原子能力成为开通流程的核心;场景编排的最小单元就不再是角色,而是配置项;子任务对应配置项,角色退变成配置项的一个重要属性,主要用于可视化;
存为下表4:
表4
3、配置项-原子服务(控制模板)
控制模板是配置项的实例(结合具体设备),配置项是控制模板的抽象,控制模板对应的原子化的配置服务;
配置项也可以按树形进行分类展示,形成原子能力目录(可以参照yang-model);
配置项本身和场景无直接关系(实际是相关的);
存为下表5:
表5
配置项模板定义表(避免硬编码控制模板编码)如下表6:
表6
4、场景模型
相当于流程定义;
存为下表7:
表7
注意:为了支持角色多设备,模型的序号不要连续配置,建议留出至少1000;
常见模式1(批量配置),每个设备一个事务单元,设备角色为数组;
常见模式2(业务配置):一个事务单元,每个设备一个子任务;
注:场景模型是针对tasktype=cfg的;
其他场景(preview,precheck,postcheck等比较简单,暂时不需要编排)。
5、参数编排(转换模板)
参数编排是场景编排的一部分;
参数的特殊转换规则通过参数规则+参数模板实现;
解决工单参数到业务(配置项)参数的特殊映射逻辑;
默认映射:
工单参数全部转换为业务参数;
简单映射:
工单参数名字转后映射为业务参数,值不变;
字典映射:
工单参数名字和值都转换为业务参数;
包含特殊参数,如业务类型(场景)的转换;
非空和格式校验;
特殊转换规则(反射为函数):
需要关联计算的;
特别复杂的可以通过资源分配服务来处理;
特殊参数(工单必须的参数):
业务工单号(用于和前端对数);
工单流水号(用于接口去重);
对应场景(业务类型)的参数;
操作类型(下发\追单\废单等);
角色实例(对应设备);
特别的,如果一个角色对应多个设备,那么角色值是一个数组;子任务分解时会串行执行,相应的参数需要使用特殊的前缀(和控制模板相匹配),数组大小不得超过1000(参数控制)。
6、资源编排(分配和冲突检测)
资源是一类特殊的参数;
可以以服务形式而非模板形式提供,返回开通所需的资源参数,被CRM或者控制模板;
也可以以模板形式提供,被参数模板调用;
包含必要的前缀;
三、任务调度
1、批量准实时调度
Worker模式;
主进程负责调起worker线程;
线程启动参数:业务类型、节点和设备组(默认按设备组取模);
可以分区域\分不同业务类型\分组并行调度(要保证完整覆盖);
不同条件的进程/线程互不干扰;
相同条件的单例,主备(类似kafka的消费模型);
Java:
不再使用quartz进行调度,而是使用java线程池实现(广西版本);
每个线程扫描获取一个待部署的工单,调用对应的任务执行服务(方法),调用完成后执行部署后处理和返单操作;调用的tasktype=cfg;
线程执行一定任务次数后自动回收;自动启动新的执行线程;
注意不同线程任务的互斥;
注:也可以使用其他语言实现;
例如:supervior+多进程,或者协程;
2、(页面)即时调度
页面手动触发的事前检查、配置预览、配置下发、事后核查、配置巡检和异常回滚预览等操作;
同步调用任务执行服务;
对应不同的tasktype;
配置预览:
Tasktype=preview,返回预览命令;
预览命令可直接下发(不走控制器引擎,直接调用设备cli连接池服务);
异常回滚预览:
Tasktype=rbpreview,返回回滚模板的预览命令;
预览命令可以直接下发;
事前检查:
Tasktype=prechk;
事后核查:
Tasktype=postchk;
配置巡检:
Tasktype=rcheck;
四、工单执行服务WES
提供REST GET接口框架,可以被工单定时调用或者页面即时调用;
同步调用;
调用工单处理方法Wex(实时调度时可直接调用方法);
Prefork多进程并行处理,解决GIL问题;
通过协程实现设备级的并发处理;
Url参数:
wsid 任务标识,用于跟踪日志和结果;
Tasktype 任务类型,用于前端指定不同的任务类型;
Instanceid 开通引擎的服务号,用于跨引擎的任务;简化掉;
Starttime 调度时间,原用于多次执行同一任务;非必要;
Flag 同步异步标识,改为回调url,不通过数据库交互结果;
回调url 可选,用于异步场景;默认为空,同步调用;
推送url 可选,用于配置可视化场景,推送日志到推送服务器;
Loglvl 配置日志开关,默认空不返回日志信息(debug详细信息,info概要提示信息,error错误信息);
合并工单和任务,使用同一id;使用uuid1生成id,并用BASE64压缩,作为主键;
结果以json编码格式返回;
“wsid”:”xxxxx”
"Starttime":"20180427094654.383",
"Endtime":"20180427094654.417",
"Error":""
“Status”:”C”C完成F失败R(异步)执行中
“logs”:””配置日志信息.默认不返回
Debug:程序调试信息
Info:设备命令日志
Error:配置错误信息
Warn:程序提示信息
Emerg不用
1、工单执行方法TEx
提供工单执行方法接口;
(如果都用python/go实现,工单调度也可以是方法调用,而不是服务调用,避免服务接口的超时问题);
调用DAO的工单信息查询服务,获取工单相关信息和工单参数信息;
根据结果判断对应的engtype;
目前只支持engtype=STE;
通过工单状态控制,子任务分解只执行一次;
如果wsstatus=' ',则调用子任务分解,获取子任务信息;
如果wsstatus=' ',则跳过;
调用子任务分解方法,获取子任务信息(设备\阶段\事务\序号\控制模板\参数);
调用DAO的设备信息查询服务,获取设备登录权限等信息(在子任务分解时得到);
调用子任务调度方法:
根据子任务信息进行调度;
执行子任务执行;
调用开通日志更新服务:
更新工单任务状态。
2、工单子任务分解
对于确定需要通过子任务引擎执行的工单(可以通过适配引擎规则指定,也可以编排指定),调用子任务分解;
以前子任务分解是在任务执行阶段执行,但是由于存在预览\配置检查\下发等不同阶段,实际上子任务分解动作被重复执行多次,没有意义;固定根据角色分解为不同的子任务;根据角色名称的字母顺序确定子任务的顺序;通过业务类型的硬编码来确定子任务的事务类型;
现在可以根据场景建模的结果进行分解;
通用逻辑如下:
根据场景定义的角色,获得角色对应的设备信息(wsparaname=角色编码);
调用设备登录信息查询,获得设备信息(含设备系列);
调用场景模型查询服务;
获得场景的模型定义和相关配置项的模板定义;
根据场景模型,每个角色+配置项对应一个子任务,并设置对应的事务\阶段\序号;
特殊逻辑如下:
如果角色是一个数组,则分解出多个子任务,阶段和事务相同,序号递增;
根据设备系列和配置项得到对应的配置项模板和方法;
返回
设备信息
子任务信息(不需要保存,直接内存传参):
Wsid、阶段、事务、序号、角色、设备、配置项、模板、模板类型和方法;
控制模板信息示例:
templetinfo={'templet':'ct.col.perf.DEV_CI_IOX','func':'DEV_R_CI_IOX_CPU','type':'remote','fid':'xxx'}
3、子任务调度STA
子任务按阶段\事务\序号进行排序;
每个任务对应一个协程;
顺行执行阶段;
阶段内,每个事务起一个协程,按序号顺序执行子任务;按事务join;
调用服务更新子任务状态(开通可视化用);
子任务状态(存es)
Id:uuid(wsid+deviceid+cfgitem)
Wsid
Devceid
Cfgitem
T_ctime
K_cfglog
k_chklog
K_viewlog
K_pchklog
K_rblog
4、子任务执行STEx
调用前参数适配;
通过网元控制器调用对应的模板和参数:设备信息\模板信息\参数;
调用nec;
def nec(neinfo,templetinfo,para={}):
调用后参数适配。
5、部署后处理
部署后处理通常包含以下逻辑:
例如:
生成业务信息(vpn);
生成业务电路信息;
即时采集设备基本信息;
产品可以预置一些固定方法,通过控制模板实现。
6、返单
调用工单接口的返单方法。
五、数据服务
1、数据模型
原则上:资源数据+模型数据存rdbms,业务数据\历史数据存es;
工单日志(存es,含工单原始报文,解析字段,工单状态,时间);
工单参数表(es);
子任务表(es);
子任务日志(存es);
设备表;
场景表;
角色表;
配置项表;
场景模型表。
2、工单信息查询
根据wsid查询工单信息和工单参数信息;
返回:
Engtype
Scene
wsstatus
Wspara:{}
3、场景模型信息查询
入参:scene;
返回:配置项模板定义,场景模型定义,如下表8、9:
表8
表9
4、子任务状态更新
因为不存在并发锁,所以不需要实时更新子任务状态;
任务状态由任务执行方法返回;
如果需要开通可视化,则可更新到redis或者推送到推送服务;
子任务日志不再保存在数据库,而是保存在es中,数据库只是作为工单查询。
5、设备登录信息查询(资源服务)
6、工单日志更新
开通日志保存在es中,按月创建索引(按每天10w工单,100w子任务估算,一月3kw记录),默认保存1年;
入es:
Logger+文件+filebeats+es(文件io,需要开放es,文件格式需规范);
Logger+rsyslog+es(日志格式需要规范为json,不能超长(默认2k),logger需要支持syslog,可支持中继;rsyslog有点类似nsq);
Logger+es(没有bulk,性能不好);
参考:
Rsyslog+es
https://www.rsyslog.com/doc/v8-stable/configuration/modules/omelasticsearch.html
https://blog.csdn.net/force_eagle/article/details/52354484
http://chenlinux.com/2014/10/19/rsyslog-impstats-elasticsearch/
Pythone logging+syslog
https://blog.csdn.net/langb2014/article/details/53397307
可以用syslog(可以通过facility,tag区分日志类型,如开通\采集等),也可以用udp(无法区分不同类型日志)。
7、设备基础信息更新(资源服务)
即时采集设备的基础信息服务;
更新设备的基础信息,包含int信息和ip信息;
并在结果返回。
8、设备基础信息采集(资源服务)
即时采集设备的基础信息;
返回json。
本发明提出的基于编排控制流程业务开通的控制子任务引擎模块,创新的任务控制任务调度,通过基础数据可进行网络建模;引擎支持多设备多任务串行、并行和事务的异常处理;灵活的规则处理,通过控制模板+指令模板两层任务控制;支持实时以及准实时的任务调度。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包含的各种修改和等同布置。
对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
- 一种基于编排控制流程业务开通的控制子任务引擎模块
- 一种基于编排控制流程业务开通的控制意图工单处理方法