CN102810070A - 高性能业务能力封装流程引擎及其流程控制方法 - Google Patents

高性能业务能力封装流程引擎及其流程控制方法 Download PDF

Info

Publication number
CN102810070A
CN102810070A CN2012102461183A CN201210246118A CN102810070A CN 102810070 A CN102810070 A CN 102810070A CN 2012102461183 A CN2012102461183 A CN 2012102461183A CN 201210246118 A CN201210246118 A CN 201210246118A CN 102810070 A CN102810070 A CN 102810070A
Authority
CN
China
Prior art keywords
flow
node
instance
flow process
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2012102461183A
Other languages
English (en)
Inventor
王剑冰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian Fujitsu Communication Software Co Ltd
Original Assignee
Fujian Fujitsu Communication Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujian Fujitsu Communication Software Co Ltd filed Critical Fujian Fujitsu Communication Software Co Ltd
Priority to CN2012102461183A priority Critical patent/CN102810070A/zh
Publication of CN102810070A publication Critical patent/CN102810070A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

高性能业务能力封装流程引擎及其流程控制方法,包括生成规定流程各节点功能以及流程执行规则的配置文件;读取流程定义单元的配置文件将其转换为流程的对象且保存于内存中;执行以规则为主线串接各个流程节点,对各个节点进行调用并与之交互;在内存中申请空间存放和维护流程变量、流程数据以及流程实例和各节点的状态数据;将内存中实例的节点状态、执行时间、流程变量值信息,并将其封装为一系列查询接口,通过网络共同远程监控终端进行访问;通过消息机制触发日志处理。本发明从各个方面提高了流程引擎的性能,经过测试达到了业务系统对性能的要求。

Description

高性能业务能力封装流程引擎及其流程控制方法
【技术领域】
本发明涉及计算机流程处理领域,特别是指一种高性能业务能力封装流程引擎及其流程控制方法。
【背景技术】
目前流程引擎的产品有很多,如jBPM、OSWorkflow、Apache ODE、WebSphere Process Server、Oracle Aqulogic、Microsoft BizTalk等,在国内,主要是使用上述几个引擎做扩展和应用,而且绝大部分是使用Java或C++实现,主要是因为电子商务在流程引擎方面的应用较多,对于性能优化的侧重点一般不在流程引擎上,但是,C/C++语言在性能上的先天优势,某些系统对实时性要求较高的情况下,本身也使用C/C++语言进行开发,需要和流程引擎进行较紧密的结合,并保证流程引擎不会给程序的运行带来明显的性能上的影响。流程引擎的主要功能是执行业务流程,是BPM的架构核心,其设计好坏、效率高低直接影响到整个BPM的性能高低。当然这种对效率要求较高的流程引擎一般应用在针对自动流程的环境下,这类应用往往关注的是“快速”而不是庞大的功能集。
【发明内容】
本发明所要解决的技术问题之一在于提供一种高性能业务能力封装流程引擎,从各个方面提高了流程引擎的性能,经过测试达到了业务系统对性能的要求。
本发明所要解决的技术问题之二在于提供一种高性能业务能力封装流程控制方法,从各个方面提高了流程引擎的性能,经过测试达到了业务系统对性能的要求。
本发明采用以下技术方案解决上述技术问题之一:
高性能业务能力封装流程引擎,包括:
流程定义单元,用于生成规定流程各节点功能以及流程执行规则的配置文件,所述流程由节点和节点间的关系组成;
流程解析与加载单元,用于读取流程定义单元的配置文件将其转换为流程的对象且保存于内存中;
流程与节点的交互单元,用于执行以规则为主线串接各个流程节点,对各个节点进行调用并与之交互,根据节点的返回结果通过判断节点影响流程实例的执行路线;
流程执行单元,用于根据流程定义创建对应的流程实例时,在内存中申请空间存放和维护流程变量、流程数据以及流程实例和各节点的状态数据;
流程监控单元,用于通过IPC访问内存中实例的节点状态、执行时间、流程变量值信息,并将其封装为一系列查询接口,通过网络共同远程监控终端进行访问;
流程日志单元,用于通过消息机制触发日志处理,采用多线程的并行处理方式将流程实例执行的成功与否以及各节点执行情况和时间保存到数据库,并将该流程实例从共享内存中的空间释放出来。
进一步,所述节点包括开始、结束、函数、脚本、状态、分支、汇聚;所述节点间的关系包括前驱和后续。
本发明采用以下技术方案解决上述技术问题之二:
高性能业务能力封装流程控制方法,包括如下步骤:
生成规定流程各节点功能以及流程执行规则的配置文件,所述流程由节点和节点间的关系组成;
读取流程定义单元的配置文件将其转换为流程的对象且保存于内存中;
执行以规则为主线串接各个流程节点,对各个节点进行调用并与之交互,根据节点的返回结果通过判断节点影响流程实例的执行路线;
根据流程定义创建对应的流程实例时,在内存中申请空间存放和维护流程变量、流程数据以及流程实例和各节点的状态数据;
通过IPC访问内存中实例的节点状态、执行时间、流程变量值信息,并将其封装为一系列查询接口,通过网络共同远程监控终端进行访问;
通过消息机制触发日志处理,采用多线程的并行处理方式将流程实例执行的成功与否以及各节点执行情况和时间保存到数据库,并将该流程实例从共享内存中的空间释放出来。
进一步地,所述节点包括开始、结束、函数、脚本、状态、分支、汇聚;所述节点间的关系包括前驱和后续。
本发明的优点在于:本发明使用C++作为引擎核心的编写语言,使用Lua作为脚本节点以及判断节点的应用,从程序执行方面对性能进行了提高。流程引擎在执行过程中对流程定义的读取以及日志的保存如果都使用数据库或者文件,会给性能带来较大瓶颈,所以高效流程引擎使用共享内存作为流程定义、流程实例、流程日志等的数据缓存,并使用其他模块来对流程定义进行加载和日志的落地。高效流程引擎从各个方面提高了流程引擎的性能,经过测试达到了业务系统对性能的要求。
【附图说明】
下面参照附图结合实施例对本发明作进一步的描述。
图1是本发明流程引擎总体架构图。
图2是本发明节点定义示意图。
图3是本发明各节点的类图关系示意图。
图4是本发明流程定义缓存图。
图5是本发明各种脚本语言执行效率的对比数据图。
图6是本发明C/C++和Lua的交互关系示意图。
图7是本发明Lua对栈的定义示意图。
图8是本发明C/C++调用Lua过程栈的变化示意图。
图9是本发明Lua调用C/C++接口过程栈的变化示意图。
图10是本发明判断节点示意图。
图11是本发明流程监控示意图。
图12是本发明流程日志处理示意图。
【具体实施方式】
提高流程引擎的性能,就必须提高流程引擎执行内核的效率,让流程的执行环境在内存中进行,所以本发明在架构中引入了缓存部分,设计专门的流程加载模块可以将配置数据向缓存中加载,同时还设计专门的数据同步模块能将缓存中执行结束的流程实例同步到持久层,而流程引擎的使用者通过接口调用流程执行的时候只会在缓存中进行,故而能提高流程引擎的性能。
如图1所示,是本发明流程引擎总体架构图。
业务流程必然和功能模块打交道,本发明将一些功能编写成动态库,能在流程中动态加载并被流程直接调用,其执行的效率和在同一个程序中一样。另外为支持灵活性和维护的方便性,需要引入一些即时生效的脚本作为节点的执行内容。从执行效率以及接口效率来评估,使用C/C++语言作为流程引擎核心的编写语言,而采用和C/C++语言交互性好且执行效率很高的脚本语言Lua,是比较合适的方案。
下面详细介绍本发明的各单元及步骤:
1、流程定义
流程引擎的设计是面向图的设计,流程都是由两个最基本的元素组成:“节点”及“有向连接”。对于“有向连接”几乎没有任何歧义,所有的流程建模描述中“有向连接”都是存在“From”和“To”这两个特性。但是对于“节点”,则因为所处的视角、功能不同,则存在很多不同的理解了,比如WfMC的过程定义元模型、jBPM、EPC中对节点含义和种类的定义都不太相同。
本发明中的节点类型包含:开始、结束、函数、脚本、状态、分支(并行、判断)、汇聚等。如图2。
各种节点类型的简要定义如下:
1)开始节点:一个流程实例启动后执行的第一个节点,该节点只有一个后续节点,没有前驱节点,一个流程只能有一个开始节点。
定义格式如下:
<start index="0">
<transition to_index="xxx"/>
</start>
2)结束节点:流程实例执行到该节点后即结束,该节点只有一个前驱节点,没有后续节点,一个流程可以有多个结束节点。
定义格式如下:
<end index="xxx"/>
3)函数节点:为包含业务能力的节点,执行动态库中的函数以完成某个业务功能,返回后执行后一节点,该节点只能有一个前驱节点和一个后续节点。
定义格式如下:
Figure BDA00001892758400051
4)脚本节点:为包含业务能力的节点,执行Lua脚本函数以完成某个功能,返回后执行后一节点,该节点只能有一个前驱节点和一个后续节点。
定义格式如下:
<task type="1"index="xxx"func_name="xxx"hangUp="true/false">
<transition to_index="xxx"/>
</task>
5)状态节点:停留在该状态,等待触发信号执行后一节点,该节点只能有一个前驱节点和一个后续节点。
定义格式如下:
<state index="xxx">
<transition to_index="xxx"/>
</state>
6)并行节点:触发并行执行后续的多个节点,该节点只能有一个前驱节点,但可有多个后续节点。
定义格式如下:
Figure BDA00001892758400061
7)判断节点:通过配置在该节点中的Lua脚本,根据返回值判断执行后续的哪个或哪几个节点,该节点只能有一个前驱节点,但可有多个后续节点。
定义格式如下:
Figure BDA00001892758400062
8)汇聚节点:等待前驱节点全部执行完成,触发执行后续节点,该节点只能有一个后续节点,但可以有多个前驱节点。
定义格式如下:
可以看出节点具有共性也有个性,从流程定义的角度,我们将节点抽象为父类,各种类型的节点继承节点父类,并增加自己的属性、函数,以及实现节点执行函数。
各节点的类图关系如图3。
将节点类设计为一个抽象类,它包含了纯虚函数virtual execute()=0,在执行流程时以父类对象指针指向最终节点类的对象,并调用父类对象指针的execute函数,则实际会调用最终子类中的所实现的execute成员函数。在流程引擎中我们去除了有向线连接对象,即jBPM中的Transition,使用每个节点的前驱或后续节点号的方式来贯穿整个流程。任何流程的开始节点号都定义为0。
2、流程解析与加载
前台配置的流程的定义是存储在数据库中的,一般的流程引擎的做法是每次连续的执行都要到数据库中去读取流程配置,这样势必造成I/O的增加,降低流程引擎的性能。由于流程定义的读取频率要远远高于写频率,所以,要保证流程的高速运转,必须将流程定义加载到内存中,并且解决好读写的冲突问题。
流程定义缓存主要分为共享内存和私有内存两部分,共享内存中是流程定义索引区和流程定义区,这部分可以由所有的调用者程序共享读取;私有内存中是脚本加载区和动态库加载区,在程序启动的时候需加载和初始化。流程索引是根据流程定义ID以及流程的版本号查找流程定义存放的地址的区域,为了加速流程定义的查找速度。如图4所示。
流程定义使用xml格式配置,调用rapidxml开源程序中的函数进行解析,并将配置按类的定义以序列化方式保存在共享内存的流程定义中。
Figure BDA00001892758400071
在共享内存中就是以FLOW_DEF类型的结构数组的方式存储多个流程定义。
由于流程的执行是一个持续的过程,在流程实例未结束之前,改流程实例使用的流程配置都应该保持在内存中且不能被改动。对于新增的流程,在流程定义区新开辟空间并上载新流程定义,上载完成后锁定流程定义索引区,更新Hash(流程定义ID,流程版本)和流程定义存放地址的对应关系,然后解锁;对于要删除的流程,一般是将该流程打上删除标志而不是立即删除,由流程上载模块负责查询没有使用该流程定义的流程实例后将其删除并回收空间;对于修改的流程,采用升级的方式处理,也就是先将新的流程加载到新开辟的流程区,并更新流程定义索引区,新的流程实例会按新版本执行,当使用旧版本的流程实例全部结束后,流程上载模块会将旧版本的流程定义删除并回收空间。通过这样的增、删、改的机制可以解决流程定义读写的冲突。
3、流程与节点的交互
流程引擎是由一个执行规则串接各个流程节点来完成的,这个规则就是各个节点间的关系,也就是流程引擎的主线,而挂接在这个主线上的函数节点和脚本节点实现的是具体的业务能力(功能),主线需要对各个节点进行调用和并与之交互,并可以根据节点的返回结果通过判断节点影响流程实例的执行路线。除了功能之外,流程函数能增加流程引擎的快速性,而流程脚本能增强流程引擎的灵活性同时也不失快速性。
3.1流程函数
对于流程引擎来说,调用节点中定义的业务功能是重要的,很多流程引擎在SOA思想的影响下,在考虑通用性方面,会考虑使用通用的接口调用功能,如使用WebService和外部的服务进行通信,还有的是采用调用java类的方式,如jBPM。而高效流程引擎在则是采用调用C语言编写的动态库的方式,这样在加载之后执行动态库中函数的速度和执行程序本身的函数是一样的,能大大增强执行效率。
C语言中可以将功能函数编译成动态库(.so),然后使用dlopen函数在流程引擎加载流程定义时加载到私有内存,在调用动态库函数的时候使用dlsym函数获取函数指针,然后就可以调用函数了。
如下是打开动态库和获取函数指针的代码:
typedef bool(*FUNC_TYPE)(void*in_param1,void*in_param2,…);
void*func_handle=dlopen("./evtproc/evtproc.so",RTLD_LAZY);
FUNC_TYPE func=(FUNC_TYPE)dlsym(func_handle,"func_name");
在动态库加载区中建立函数ID和函数指针的HashMap对应关系,在流程定义中只保存函数ID,在调用之前使用函数ID在HashMap中查找对应的函数指针。
动态库可以在程序运行过程中随时加载,这给流程定义的热布署带来很大的方便。
3.2流程脚本
脚本具有灵活性强、能立即生效等特点,在流程引擎的节点中使用脚本可以带来灵活性和扩展性,对于高效引擎来说,即使是脚本也不能失去高效性。
3.2.1Lua脚本以及与C/C++的交互
Lua脚本语言是用标准C编写而成的嵌入式脚本语言,和C/C++有良好的交互性,能为应用程序提供灵活的扩展和定制功能,而且几乎在所有操作系统和平台上都可以编译和运行。Lua是脚本语言中执行效率最高的,且很轻量级,内存占用很少。
经过对相同的浮点数运算程序测试,以C语言(编译器gcc4.0.1)为基准,进行速度测试,可得出如图5的各种脚本语言执行效率的对比数据。
C/C++程序中对Lua库的初始化,需要使用lua_open函数初始化并获得Lua环境句柄指针,然后使用luaL_openlibs加载Lua的库,并包含所有Lua函数的Lua脚本进行加载。多次加载Lua脚本,如果加载了相同名称的函数,后面的会将前面覆盖。
Figure BDA00001892758400111
Figure BDA00001892758400121
Lua和C语言的交互,一般是Lua嵌入到C/C++程序中,简单的功能可以直接由Lua函数提供,如果Lua完成不了的,也可以编写可由Lua调用的C/C++接口函数,让Lua起到桥梁作用,快速重组这些接口函数。
C/C++和Lua的交互如图6所示,主要是通过栈来进行的,Lua规定栈的位置如果自下而上最下为1,依次向上加1;如果自上而下则最上为-1,依次向下减1。Lua对栈的定义如图7所示。
下面来分析一下,C/C++和Lua交互的具体细节:
1)C/C++调用Lua
C/C++调用Lua首先使用lua_getglobal获取Lua函数同时自动将函数压入栈,然后使用lua_push系列函数将参数依次压入栈,然后使用lua_pcall函数调用Lua函数,调用完成时函数和参数都已由Lua自动弹出,栈中只保留Lua的返回值,C/C++从栈中将Lua的返回值取出,最后清空栈。
在C/C++将参数压入栈时,如果参数都是基础类型(如int、char*等)只需要用lua_pushnumber和lua_pushstring函数即可,但是如果压入的参数是结构体,则需要和Lua的table进行对应。Lua的返回值可以是数组,可以将返回值里数组成员逐个取出。
下面用图8所示C/C++调用Lua过程栈的变化示意图和代码的方式来描述一下C/C++所调用的Lua函数参数带一个结构和一个简单类型,返回值为一个简单类型和一个数组的混合方式的交互。
调用Lua的C++代码:
Figure BDA00001892758400122
Figure BDA00001892758400131
2)Lua调用C/C++接口
Lua调用C/C++接口首先将C/C++接口注册为一个Lua函数,如下:
lua_register(gpLuaState,"getFlowVarInt",c4lua_getFlowVarIntVal);
其中getFlowVarInt是Lua函数名,c4lua_getFlowVarIntVal是C/C++接口函数名,在注册完了之后,在Lua里就可以调用getFlowVarInt函数,就等于是调用了c4lua_getFlowVarIntVal函数。
Lua函数调用C/C++接口函数的参数传入以及返回值传出均是使用栈来进行,接口函数本身的定义必须包含且只能包含一个lua_State指针参数,为Lua环境句柄指针,函数返回值必须为int型,代表接口函数写到栈中的给Lua函数的返回值的个数。接口函数形式如下:
int c4lua_getFlowVarIntVal(lua_State*L);
Lua函数在调用接口函数注册函数时,会自动将其传入的Lua参数写入栈,假定Lua函数getFlowVarInt在被调用时传入了两个参数:参数1为int型,参数2为string型,Lua在调用C/C++接口c4lua_getFlowVarIntVal时,会将参数按前后次序压入栈,然后调用函数接口,这些栈操作部分都是由Lua自动完成的,无需用户操作。而接口函数c4lua_getFlowVarIntVal中的需用户实现的部分则必须对栈进行操作,先获取调用自己的Lua函数传递的参数,使用lua_tonumber(gpLuaState,-1)获取第1个参数,lua_tostring(gpLuaState,-2)获取第2个参数,并在执行完业务代码后将Lua函数所需的返回值压入栈,这些返回值将会被Lua函数自动取得,Lua支持多个返回值,如函数有2个返回值,用lua_pushnumber(gpLuaState,100),lua_pushboolean(gpLuaState,true)压入栈,并且C/C++接口函数本身返回值为2,代表压入栈的给Lua函数的返回值的个数。如图9所示为Lua调用C/C++接口过程栈的变化示意图。
Figure BDA00001892758400151
3.2.2Lua脚本在判断节点的应用
判断节点往往需要经过一些逻辑运算以及比较作出判断,而逻辑运算有时会比较复杂,如果单纯依靠配置来实现必然会失去灵活性且可能增加配置的复杂性,如果使用脚本作为判断节点的执行内容,会带来很多的方便和灵活性,并且由于Lua的语言本身以及它和C/C++交互的高效性,相对其他脚本来说对性能的影响是最小的。
对于判断节点,配置一个关联的Lua函数,为便于流程引擎的执行,所有的判断节点Lua函数为固定的参数形式以及固定的返回值形式。参数为两个:一个是流程的相关信息,table形式,另一个是节点号,整数形式,均由流程引擎传入;返回值为固定类型的2个值,一个为boolean型表示脚本执行成功与否,另一个为int型数组,其中的元素为后续可执行的节点号,如果节点号在该数组中,则流程引擎认为执行该节点的条件满足,不在数组中的后续节点不执行,并且后续可执行节点可以是多个,即多选。
如图10的流程中的判断节点,要判断节点1设置的变量如果大于3则执行节点3和节点4,如果小于等于3则执行节点5。
则判断节点的Lua函数可以写成:
Figure BDA00001892758400161
4、流程执行
流程实例是流程定义的一次执行,一个流程定义可以创建多个流程实例。流程引擎使用者根据流程定义创建对应的流程实例时,将在缓存中申请空间存放和维护流程变量、流程数据以及流程实例和各节点的状态等数据。
流程引擎成功创建一个流程实例后会返回一个流程实例结构句柄,里面包括了流程实例在缓存中的存放位置指针等一系列信息,流程在执行过程中可以根据指针快速定位流程实例的各种数据。
每个流程实例的各个节点的状态在共享内存中都进行维护,节点的状态分为:初始状态、等待触发、已成功触发、已取消、出错、失败等。所有节点在执行之前都为初始状态,有配置为挂起模式的节点,在第一次成功执行后转换为等待触发状态,第二次触发后转换为已成功触发,而未配置为挂起模式的节点,第一次执行完直接转换为成功触发状态。节点执行出错的置为出错状态,而失败状态则是指外部调用者以失败的信号强行将节点置为失败。取消状态是指在分支节点判断完成后,将条件不满足的后续节点置为取消,跳过该节点而不执行。
流程的执行过程,并从0号节点开始按照流程定义执行,在流程定义索引区查找流程定义存放的地址,取出当前节点的定义,执行该节点对象的执行函数,更新节点状态,并根据执行结果以及节点的定义确定下一步的操作。流程实例执行到状态节点或函数、脚本节点的挂起状态时流程挂起,调用返回,并等待触发信号对挂起的节点进行触发继续流程实例的执行;遇到结束节点时,流程实例执行结束,调用返回,并产生流程结束消息发送给流程入库模块。
一次流程的执行,主要就是根据流程的定义,进行各个节点的执行,每个节点将执行本节点的execute()方法、修改本节点状态以及调用后续的下一(多个)节点的的执行方法execute()进行封装,称之为节点动作,流程就是从触发的节点开始,执行节点动作,以此递归执行,直到遇到挂起状态或流程结束。
下面描述一下各类型节点的执行方式:
1)开始节点
无执行内容,直接调用下一节点执行动作。
2)函数、脚本节点
●判断状态为初始状态,执行本节点execute()方法,如为挂起模式,修改状态为等待触发,本次执行返回;如为非挂起模式,修改状态为已触发,执行下一节点执行动作。
●判断状态为等待触发,设置状态为已触发,执行下一节点执行动作。
3)状态节点
判断状态为初始状态,修改状态为等待触发,本次执行返回;判断为的等待触发状态,修改状态为已触发,执行下一节点执行动作。
4)并行节点
修改状态为已触发,执行后续的多个节点动作。
5)判断节点
执行判断节点的Lua函数,修改状态为已触发,获取Lua函数返回值,根据返回值数组中的节点ID,调用这些节点ID对应的节点动作。
6)汇聚节点
判断前驱节点是否为已触发状态或取消状态,如果为“否”本次执行返回,如果为“是”修改状态为已触发,执行下一节点执行动作。
7)结束节点
结束流程实例。
5、流程监控
流程的执行过程在后台进行,流程引擎需要提供对流程实例执行情况的监控。流程实例中的节点状态、执行时间、流程变量值等的都在共享内存区中可以通过IPC进行访问,流程引擎为监控提供了一系列查询接口供同主机的外部进程访问,并且可以在此基础上封装成监控服务,供远程主机访问和显示。由于在共享内存中进行查询开销较少,所以可以提供较为实时的监控。
如图11所示,为实现可视化效果较好的流程监控,用户选择某一个流程实例后,终端读取流程实例对应的流程定义,并将之转换为流程图。Socket服务能根据终端的请求将流程实例的各个节点的状态传输给给终端,由终端在流程图上将对应节点根据不同状态置为不同的颜色。
6、流程日志
如图12所示为流程日志处理示意图。
一个流程实例执行结束的流程引擎会产生一个消息存放在队列中,由入库模块将流程实例执行的成功与否以及各节点执行情况和时间保存到数据库,相当于记录了流程的执行轨迹,并将该流程实例从共享内存中的空间释放出来。
流程入库程序可以是多线程并行执行,并且是在流程结束后才进行,而且实例和监控区的共享内存空间较大,可以是对多个流程的批量处理,所以如果配置合适,并且流程实例的执行压力不是特别大的情况,基本不会形成性能瓶颈。
关闭流程引擎将共享内存中的所有数据落地到文件,重新启动时则从文件上载回共享内存,如果主机在流程实例未执行完成的时候出现崩溃,则因共享内存数据失去,流程实例数据将会丢失,这是一种缺陷,但这是流程执行效率和数据安全之间的一种权衡的结果。
本发明使用C++作为引擎核心的编写语言,使用Lua作为脚本节点以及判断节点的应用,从程序执行方面对性能进行了提高。流程引擎在执行过程中对流程定义的读取以及日志的保存如果都使用数据库或者文件,会给性能带来较大瓶颈,所以高效流程引擎使用共享内存作为流程定义、流程实例、流程日志等的数据缓存,并使用其他模块来对流程定义进行加载和日志的落地。高效流程引擎从各个方面提高了流程引擎的性能,经过测试达到了业务系统对性能的要求。
以上所述仅为本发明的较佳实施用例而已,并非用于限定本发明的保护范图。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.高性能业务能力封装流程引擎,其特征在于:包括:
流程定义单元,用于生成规定流程各节点功能以及流程执行规则的配置文件,所述流程由节点和节点间的关系组成;
流程解析与加载单元,用于读取流程定义单元的配置文件将其转换为流程的对象且保存于内存中;
流程与节点的交互单元,用于执行以规则为主线串接各个流程节点,对各个节点进行调用并与之交互,根据节点的返回结果通过判断节点影响流程实例的执行路线;
流程执行单元,用于根据流程定义创建对应的流程实例时,在内存中申请空间存放和维护流程变量、流程数据以及流程实例和各节点的状态数据;
流程监控单元,用于通过IPC访问内存中实例的节点状态、执行时间、流程变量值信息,并将其封装为一系列查询接口,通过网络共同远程监控终端进行访问;
流程日志单元,用于通过消息机制触发日志处理,采用多线程的并行处理方式将流程实例执行的成功与否以及各节点执行情况和时间保存到数据库,并将该流程实例从共享内存中的空间释放出来。
2.如权利要求1所述的高性能业务能力封装流程引擎,其特征在于:所述节点包括开始、结束、函数、脚本、状态、分支、汇聚;所述节点间的关系包括前驱和后续。
3.高性能业务能力封装流程控制方法,其特征在于:包括如下步骤:
生成规定流程各节点功能以及流程执行规则的配置文件,所述流程由节点和节点间的关系组成;
读取流程定义单元的配置文件将其转换为流程的对象且保存于内存中;
执行以规则为主线串接各个流程节点,对各个节点进行调用并与之交互,根据节点的返回结果通过判断节点影响流程实例的执行路线;
根据流程定义创建对应的流程实例时,在内存中申请空间存放和维护流程变量、流程数据以及流程实例和各节点的状态数据;
通过IPC访问内存中实例的节点状态、执行时间、流程变量值信息,并将其封装为一系列查询接口,通过网络共同远程监控终端进行访问;
通过消息机制触发日志处理,采用多线程的并行处理方式将流程实例执行的成功与否以及各节点执行情况和时间保存到数据库,并将该流程实例从共享内存中的空间释放出来。
4.如权利要求3所述的高性能业务能力封装流程控制方法,其特征在于:所述节点包括开始、结束、函数、脚本、状态、分支、汇聚;所述节点间的关系包括前驱和后续。
CN2012102461183A 2012-07-16 2012-07-16 高性能业务能力封装流程引擎及其流程控制方法 Pending CN102810070A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2012102461183A CN102810070A (zh) 2012-07-16 2012-07-16 高性能业务能力封装流程引擎及其流程控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2012102461183A CN102810070A (zh) 2012-07-16 2012-07-16 高性能业务能力封装流程引擎及其流程控制方法

Publications (1)

Publication Number Publication Date
CN102810070A true CN102810070A (zh) 2012-12-05

Family

ID=47233779

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012102461183A Pending CN102810070A (zh) 2012-07-16 2012-07-16 高性能业务能力封装流程引擎及其流程控制方法

Country Status (1)

Country Link
CN (1) CN102810070A (zh)

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103677913A (zh) * 2013-12-06 2014-03-26 华为技术有限公司 基于业务流程管理bpm的业务处理方法及装置
CN103870260A (zh) * 2012-12-14 2014-06-18 腾讯科技(深圳)有限公司 业务接口开发的方法及系统
CN104391686A (zh) * 2014-10-14 2015-03-04 深圳怡化电脑股份有限公司 流程控制方法及装置
CN105407075A (zh) * 2014-09-12 2016-03-16 博雅网络游戏开发(深圳)有限公司 业务逻辑的实现方法和系统
CN106897130A (zh) * 2017-01-24 2017-06-27 武汉奇米网络科技有限公司 一种基于流程引擎的自动化运维方法及系统
CN107562516A (zh) * 2017-08-07 2018-01-09 北京金山安全管理系统技术有限公司 多线程处理方法和装置、存储介质及处理器
CN109189758A (zh) * 2018-07-26 2019-01-11 新华三技术有限公司 运维流程设计方法、装置和设备、运行方法、装置和主机
CN109189393A (zh) * 2018-07-24 2019-01-11 中国联合网络通信集团有限公司 业务处理方法及装置
CN109597689A (zh) * 2018-12-10 2019-04-09 浪潮(北京)电子信息产业有限公司 一种分布式文件系统内存优化方法、装置、设备及介质
CN109753314A (zh) * 2017-11-01 2019-05-14 南京南瑞继保电气有限公司 一种可配置的流程自动执行方法及系统
CN109978486A (zh) * 2017-12-28 2019-07-05 北京京东尚科信息技术有限公司 用于流程控制的方法、装置、系统及介质
CN110389748A (zh) * 2019-06-17 2019-10-29 平安银行股份有限公司 业务数据处理方法及终端设备
CN111857686A (zh) * 2020-07-16 2020-10-30 江苏神彩科技股份有限公司 基于跨系统的流程引擎设计及实现方法
CN112148353A (zh) * 2020-09-22 2020-12-29 京东数字科技控股股份有限公司 一种数据处理方法及装置
CN113342484A (zh) * 2021-05-14 2021-09-03 深圳奥哲网络科技有限公司 流程引擎方法、系统、设备及存储介质
CN113448655A (zh) * 2021-07-09 2021-09-28 赞同科技股份有限公司 C标准动态库的调用方法与装置
CN114462900A (zh) * 2022-04-13 2022-05-10 云智慧(北京)科技有限公司 一种业务活动节点的拆分方法、装置及设备
CN115018655A (zh) * 2022-04-21 2022-09-06 江苏康众汽配有限公司 基于动态扩展和流程编排的保司对接适配系统及适配方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020095495A1 (en) * 2001-01-16 2002-07-18 Junichi Otsuka Device status monitoring system, device status monitoring method, and a data storage medium and object program therefor
JP2004258823A (ja) * 2003-02-25 2004-09-16 Hitachi Ltd ビジネスプロセス処理方法およびシステム並びにその処理プログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020095495A1 (en) * 2001-01-16 2002-07-18 Junichi Otsuka Device status monitoring system, device status monitoring method, and a data storage medium and object program therefor
JP2004258823A (ja) * 2003-02-25 2004-09-16 Hitachi Ltd ビジネスプロセス処理方法およびシステム並びにその処理プログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王剑冰: "一种基于流程的高效引擎开发", 《井冈山大学学报(自然科学版)》 *

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103870260A (zh) * 2012-12-14 2014-06-18 腾讯科技(深圳)有限公司 业务接口开发的方法及系统
CN103870260B (zh) * 2012-12-14 2019-01-08 腾讯科技(深圳)有限公司 业务接口开发的方法及系统
CN103677913B (zh) * 2013-12-06 2017-07-25 华为技术有限公司 基于业务流程管理bpm的业务处理方法及装置
CN103677913A (zh) * 2013-12-06 2014-03-26 华为技术有限公司 基于业务流程管理bpm的业务处理方法及装置
US10063424B2 (en) 2013-12-06 2018-08-28 Huawei Technologies Co., Ltd. Communications processing method and apparatus
CN105407075A (zh) * 2014-09-12 2016-03-16 博雅网络游戏开发(深圳)有限公司 业务逻辑的实现方法和系统
CN105407075B (zh) * 2014-09-12 2019-01-11 博雅网络游戏开发(深圳)有限公司 业务逻辑的实现方法和系统
CN104391686A (zh) * 2014-10-14 2015-03-04 深圳怡化电脑股份有限公司 流程控制方法及装置
CN106897130A (zh) * 2017-01-24 2017-06-27 武汉奇米网络科技有限公司 一种基于流程引擎的自动化运维方法及系统
CN107562516A (zh) * 2017-08-07 2018-01-09 北京金山安全管理系统技术有限公司 多线程处理方法和装置、存储介质及处理器
CN109753314A (zh) * 2017-11-01 2019-05-14 南京南瑞继保电气有限公司 一种可配置的流程自动执行方法及系统
CN109978486A (zh) * 2017-12-28 2019-07-05 北京京东尚科信息技术有限公司 用于流程控制的方法、装置、系统及介质
CN109189393A (zh) * 2018-07-24 2019-01-11 中国联合网络通信集团有限公司 业务处理方法及装置
CN109189758B (zh) * 2018-07-26 2021-02-09 新华三技术有限公司 运维流程设计方法、装置和设备、运行方法、装置和主机
CN109189758A (zh) * 2018-07-26 2019-01-11 新华三技术有限公司 运维流程设计方法、装置和设备、运行方法、装置和主机
CN109597689A (zh) * 2018-12-10 2019-04-09 浪潮(北京)电子信息产业有限公司 一种分布式文件系统内存优化方法、装置、设备及介质
CN109597689B (zh) * 2018-12-10 2022-06-10 浪潮(北京)电子信息产业有限公司 一种分布式文件系统内存优化方法、装置、设备及介质
CN110389748A (zh) * 2019-06-17 2019-10-29 平安银行股份有限公司 业务数据处理方法及终端设备
CN111857686A (zh) * 2020-07-16 2020-10-30 江苏神彩科技股份有限公司 基于跨系统的流程引擎设计及实现方法
CN112148353A (zh) * 2020-09-22 2020-12-29 京东数字科技控股股份有限公司 一种数据处理方法及装置
CN112148353B (zh) * 2020-09-22 2024-05-17 京东科技控股股份有限公司 一种数据处理方法及装置
CN113342484A (zh) * 2021-05-14 2021-09-03 深圳奥哲网络科技有限公司 流程引擎方法、系统、设备及存储介质
CN113448655A (zh) * 2021-07-09 2021-09-28 赞同科技股份有限公司 C标准动态库的调用方法与装置
CN114462900A (zh) * 2022-04-13 2022-05-10 云智慧(北京)科技有限公司 一种业务活动节点的拆分方法、装置及设备
CN115018655A (zh) * 2022-04-21 2022-09-06 江苏康众汽配有限公司 基于动态扩展和流程编排的保司对接适配系统及适配方法

Similar Documents

Publication Publication Date Title
CN102810070A (zh) 高性能业务能力封装流程引擎及其流程控制方法
CN110825362B (zh) 低代码应用软件开发系统及方法
CN107463635B (zh) 一种图片数据查询的方法和分布式NewSQL数据库系统
RU2733507C1 (ru) Контейнерное развертывание микросервисов на основе монолитных унаследованных приложений
CN104793946B (zh) 基于云计算平台的应用部署方法和系统
CN102999537B (zh) 一种数据迁移系统和方法
US10990288B2 (en) Systems and/or methods for leveraging in-memory storage in connection with the shuffle phase of MapReduce
CN102520944B (zh) Windows应用程序虚拟化的实现方法
CN105022630B (zh) 一种组件管理系统及组件管理方法
CN102023979B (zh) 元数据管理方法及系统
US20100162230A1 (en) Distributed computing system for large-scale data handling
De Alwis et al. Function-splitting heuristics for discovery of microservices in enterprise systems
CN102638566B (zh) 一种基于云存储的blog系统运行方法
US20130227194A1 (en) Active non-volatile memory post-processing
CN109814884A (zh) 一种根据游戏资源类型进行资源管理的方法及系统
CN106021445A (zh) 一种加载缓存数据的方法及装置
CN103942281B (zh) 一种对持久化存储的对象进行操作的方法及装置
US20080270350A1 (en) Systems and methods for modularizing data flows
CN101145163A (zh) 从多个数据源获取数据的方法及系统
US7860904B2 (en) Standalone execution of incomplete data flows
US20110202564A1 (en) Data store switching apparatus, data store switching method, and non-transitory computer readable storage medium
CN102646232A (zh) 一种高并发企业集中应用系统
CN105930417A (zh) 一种基于云计算的大数据etl交互式处理平台
CN102722368B (zh) 一种基于文档树和消息泵的插件式软件设计方法
CN102446167B (zh) 一种基于逻辑模板对复杂字符串逻辑处理的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20121205