基于构件技术的规则引擎研究
- 格式:doc
- 大小:26.50 KB
- 文档页数:3
课程管理中的规则引擎研究一、引言随着教育信息化的快速发展,学校的课程管理变得复杂起来,需要采用先进的技术手段进行管理,规则引擎作为一种新兴的技术手段,逐渐引起了人们的关注。
本文旨在对课程管理中的规则引擎进行研究,探讨规则引擎在课程管理中的应用。
二、规则引擎的概念规则引擎是一种处理业务逻辑的系统,它通过用户定义的规则来响应事件和请求。
规则引擎在多种场合都有广泛的应用,包括金融、电信、医疗、教育等行业。
规则引擎的主要作用是将复杂的业务逻辑转化为易于理解和维护的规则语言,提高业务逻辑的可读性和可维护性。
三、规则引擎在课程管理中的应用1.规则引擎在教学计划制定中的应用教学计划是学校课程管理的重要组成部分,规则引擎可以根据学生的个人情况、学科发展趋势等条件,自动制定符合学生需要的教学计划。
同时,规则引擎还可以针对学生不同的能力和兴趣,制定符合其需求的教学计划。
2.规则引擎在教学评价中的应用教学评价是课程管理的另一个重要组成部分,规则引擎可以根据学生的实际表现,自动进行评价、反馈和调整。
同时,规则引擎还可以根据学生的考试成绩、课程表现等多维度数据,进行学生能力评估,并为学生提供个性化的学习建议。
3.规则引擎在考试安排中的应用考试安排是课程管理中的一个难点问题,规则引擎可以根据教学计划、学生能力、教师工作安排等多种因素,自动制定考试安排,确保考试的公平和合理性。
同时,规则引擎还可以根据学生的个人情况,提供考试课程建议,帮助学生更好地备考。
四、规则引擎的优势1.提高效率:规则引擎能够自动进行数据分析和计算,避免了人工操作的繁琐,提高了工作效率。
2.增加精度:规则引擎基于用户定义的规则进行处理,能够自动判断数据的合理性和准确性,大大降低了人工处理数据的误差率。
3.可扩展性:规则引擎可以灵活配置和扩展规则库,根据实际需要进行适当调整和扩展。
五、规则引擎的应用案例规则引擎在课程管理中的应用已经逐渐得到了实践和验证。
例如,国内某院校通过规则引擎,实现了学生个性化课程管理和评价,提高了学生的学习效果和学业成绩;某教育机构利用规则引擎,实现了课程快速排课和调整,减少了教学管理的工作量和难度。
第20卷第3期信息工程大学学报Vol.20No.32019年6月Journal of Information Engineering UniversityJun.2019㊀㊀收稿日期:2018-07-04;修回日期:2018-09-14㊀㊀基金项目:国家自然科学基金资助项目(91430214,61732018)㊀㊀作者简介:陈孟东(1984-),男,工程师,博士,主要研究方向为计算机体系结构㊂DOI :10.3969/j.issn.1671-0673.2019.03.009一种领域专用的规则引擎设计与实现陈孟东,王㊀宇,谢向辉,吴㊀东(数学工程与先进计算国家重点实验室,江苏无锡214125)摘要:在身份认证协议中,安全字符串是必需的㊂安全字符串的恢复是一个反向的过程,通过在大量候选字符串上做计算并验证,找到丢失或遗忘的正确字符串㊂在反向的恢复过程中,需要根据变换规则对字符串进行快速处理,生成新的字符串㊂针对上述需求,首次提出用硬件加速变换规则的处理过程,并在现有的FPGA 平台上,设计实现领域专用的规则引擎㊂实验结果表明,在单个Xilinx Zynq XC7Z030FPGA 上实现的该规则引擎的处理性能优于CPU ,性能功耗比相比GPU 有3倍的提升,相比CPU 有50倍的提升,有效提升了规则处理的速率和能效㊂关键词:字符串;规则;引擎;领域专用中图分类号:TP391.9㊀㊀㊀文献标识码:A文章编号:1671-0673(2019)03-0302-06Design and Implementation of A Domain-Specific Rule EngineCHEN Mengdong,WANG Yu,XIE Xianghui,WU Dong(State Key Laboratory of Mathematical Engineering and Advanced Computing,Wuxi 214125,China)Abstract :Security strings are often needed in identity authentication mechanism.Security stringsrecovery is a reverse process,which does much calculation on a large amount of possible strings tofind the right one,so that we can recover lost or forgotten strings and regain access to valuable infor-mation.In this reverse process,we need to first process basic strings based on transformation rules,so as to generate new ones quickly.In response to the above requirements,this work puts forward the idea of accelerating the processing of rules using hardware for the first time,and a domain spe-cific rule engine is designed and implemented on the existing FPGA platform.The experimental re-sults show that the performance of the rule engine on a single Xilinx Zynq XC7Z030FPGA is better than that of CPU,its performance power ratio being 3times higher than that of GPU,and 50times higher than that of CPU.The speed and energy efficiency of the rule processing is improved effec-tively.Key words :character string;rule;engine;domain-specific㊀㊀随着计算机技术的发展和互联网规模的扩大,身份认证机制逐渐成为人们保护自身信息安全的重要方式[1]㊂认证过程需要一个用户名和安全字符串组合的身份信息㊂通常使用HASH 算法来计算安全字符串的摘要,并将摘要值与用户凭据一同存储㊂当用户进行身份认证时,其认证系统通过接收用户输入的安全字符串,重新使用HASH 算法把字符串转换成摘要,与系统存储的摘要值进行对比,以此完成认证过程㊂而安全字符串的遗忘会带来不便和损失[2],身份认证协议的分析技术为解决此问题而产生㊂在身份认证协议分析中,需要在短时间内快速㊀第3期陈孟东,等:一种领域专用的规则引擎设计与实现303㊀生成大量的待测试字符串,供后续HASH算法计算摘要值,与存储的摘要值进行比较,进而分析出正确的字符串㊂在快速生成待测试字符串过程中,采用字典加规则的方式是一种非常精准有效的方式[3]㊂通过已有字符串结合对字符串的变换规则,可以生成大量的可能性比较高的字符串,进而提高分析的速率㊁提升精度㊂变换规则种类多,处理过程复杂,是一项计算量大㊁对处理时间要求较高的任务,到目前为止,公开的实现方式都是基于CPU和GPU[4-5]进行处理,在处理速度㊁系统功耗等方面有诸多不足㊂本文针对身份认证协议分析中的规则处理,提出一种全硬件实现的㊁高能效的㊁可重构的规则处理架构,实现了一种领域专用的规则处理加速器㊂本文的研究基于Xilinx Zynq FPGA实现,实验结果表明该引擎在处理性能㊁系统功耗等方面表现良好㊂1㊀相关研究现状1.1㊀身份认证协议分析中的规则人在设置安全字符串时基于一个基础加以简单变换形成新的字符串,如增加前缀㊁增加后缀等,这种变换称为变换规则[4-5]㊂这种基于规则的方式为身份认证协议的分析提供了一个思路:收集已知的安全字符串形成一个字典,分析时在该字典中尝试,相比于全字符搜索空间,可显著减少计算量并保证较高命中率;同时对字典加以规则变换又可生成新的字符串,扩大字典的覆盖空间,提高命中率㊂精妙设置的字典结合规则,可以在满足搜索规模㊁时效等限制时,显著提升分析的命中率㊂在身份认证协议分析中,业内有许多总结积累而成的字符串变换规则,多个工具有自己支持的规则,并提供字典加规则的分析模式㊂John the Ripper[4]是一款开源且免费的密码分析软件,其主要目的是用来分析弱的Unix口令,现已支持100多种算法,提供对多种不同类型系统架构的支持,包括Unix/Linux㊁Windows/DOS模式和OpenVMS等㊂它支持字典分析模式,并支持10类40余种字符串变换规则及其处理,其规则处理在CPU上进行㊂文献[6-7]使用John the Ripper及其自带的变换规则进行身份认证协议分析,分析过程包括规则处理过程都是在CPU上软件实现㊂Hashcat[5]是一款多平台的免费分析套件,应用广泛,支持包括CPU㊁GPU(支持NVIDIA GPU和AMD GPU)㊁DSP㊁FPGA等包含OpenCL运行时的各种平台,支持Linux㊁Windows㊁MacOS多种操作系统,支持分布式处理,支持近200种算法,支持多种分析模式,支持字典与规则的处理,其规则的处理过程主要在CPU和GPU上进行㊂文献[8]使用hashcat及其自带的规则进行研究,试验在Intel Xe-on CPU上进行,论文统计了完整分析过程的性能,没有统计单独的规则处理时间,没有功耗相关的研究数据㊂文献[9-12]都采用hashcat中字典加规则的分析方式进行试验,但都是基于GPU平台,也没有进行系统功耗方面的研究㊂以Hashcat所用的规则为基础,选取常用的基本变换规则41种进行研究,并实现其加速引擎,表1列出了几种典型的变换规则,每个规则各自以1个可见字符为其助记符,有的规则需要携带参数,参数个数从0到3个不等㊂表1以字符串p@ ssW0rd为输入,举例说明了规则的变换结果㊂表1 规则及其含义助记符定义实例变换结果u所有字母大写u P@SSW0RDr倒序r dr0Wss@ppN整体重复N遍作为后缀p2p@ssW0rdp@ssW0rdp@ssW0rd {循环左移{@ssW0rdpDN去除N位置的字符D3p@sW0rdiNX在N位置插入字符X i4!p@ss!W0rd sXY所有的X替换为Y ss$p@$$W0rd∗XY交换X㊁Y位置的字符∗34p@sWs0rd+N N位置字符在ASCII表序中增加1位+2p@tsW0rd 在实际使用中,单个的规则可以组合在一起共同进行一次变换,例如uD3ss$为3个规则组合的情况,所有规则处理结束后生成1个新的字符串㊂1.2㊀高效能的规则处理加速平台身份认证协议的分析过程需要对可见字符构成的字符串空间进行搜索计算,从而找到正确的字符串,在字符串长度增加时,其搜索的空间以及计算量都呈指数级增长,而且分析运算中包含了大量计算密集型模块,单个计算节点的计算能力无法满足需求㊂即便是在字典加规则的具有一定针对性的分析模式中,字典的条目数和规则的数量也是非常庞大的,以1个5千万条目的字典和1个10万条目的㊁每个条目由3个基本规则组合形成的规则文件为例,仅仅规则的处理过程就需要生成5ˑ1013个新的待测试字符串,计算量庞大,以最为简单的304㊀信息工程大学学报㊀2019年㊀MD5算法为例,在单个通用CPU上完成分析过程,其时间仍然需要十几天㊂可见,单个计算节点的计算能力与身份认证协议的分析任务仍有较大差距㊂通常的做法是构建大规模的计算集群,将搜索的空间进行划分,形成不同的计算任务,各个节点在自己的任务空间中进行搜索计算,以此来加速整个分析过程㊂在构建大规模的分析集群时,性能和功耗是两个主要关注的问题㊂规则处理以及身份认证协议分析都是计算复杂型的任务,通用CPU的计算能力已远远不能满足需求,在性能提升上已经遇到了瓶颈㊂GPU加速单元的出现使得其在性能方面具有明显优势,在处理集成度高㊁计算密集型等问题时的理论计算性能已经大幅超过了通用处理器[13]㊂但是,GPU作为加速设备也出现了问题,尤其是在构建大规模的计算系统时,其构建成本㊁频率墙㊁功耗墙㊁存储墙等问题使得GPU高成本㊁高功耗的特点已经无法忽视[14]㊂专用ASIC集成度高㊁处理性能高,但是开发复杂㊁成本高,且其功能一旦实现,不能更改,不适合应用于规则的加速处理㊂FPGA具有低功耗㊁高并行的特点,它既能提升计算速率,又可使功耗保持在可接受的范围[14-16]㊂其广泛应用以及可重构特性,为其在规则加速处理中的应用提供了基础㊂其功耗低㊁并行度高㊁扩展性强的特点,使它适合应用于规则的加速处理以及整个身份认证协议的分析㊂本文聚焦处理性能和能效,针对基于FPGA的规则处理技术进行研究,设计并实现一种规则引擎㊂2㊀规则引擎设计规则引擎以全硬件实现的方式对规则的解析处理进行加速㊁处理时,软件只需配置好规则与字典文件的大小以及存储位置,规则引擎便可以自动从片外获取规则和字典,并解析处理,生成新的字符串㊂新生成的字符串可以通过高速总线写回片外存储空间,供其他应用使用,也可以在片内集成HASH验证算法,直接验证字符串的正确性,进而完成整个身份认证协议的分析过程㊂2.1㊀加速平台结构本文的规则引擎基于一个完整的身份认证协议分析系统实现,该分析系统是一个大规模的可重构的计算集群,其计算能力来自大量低功耗可重构Xilinx Zynq XC7Z030[17]芯片㊂该芯片是一个混合核心处理器,包含了通用嵌入式计算核心(主频为1GHz的双核ARM CortexTM-A9处理器)和基于FPGA的可重构计算核心㊂两种异构计算资源通过高速的互连总线紧密耦合,可以支持通用计算任务和加速计算任务的并行协同执行㊂混合核心处理平台外围集成了1GB的低功耗DDR内存㊁32 GB的Flash存储器㊁千兆以太网接口㊁高速环形网接口等㊂基于Zynq XC7Z030的计算平台结构如图1所示,其实物图如图2所示㊂图1㊀硬件平台结构图图2㊀硬件平台实物图规则引擎在单个Zynq XC7Z030的可重构FP-GA上实现,大规模系统中的每个FPGA内都可以集成规则引擎,规则文件和字典文件按计算任务划分后存储在片外的低功耗DDR内存中㊂2.2㊀数据格式设计在基于规则的身份认证协议分析中,需要将大量的变换规则组织成规则文件㊁将常用字符串组织成字典文件进行存储与使用㊂在硬件实现规则引擎过程中,考虑扩展需求㊁存储空间限制以及规则的可读性,每个规则都采用8比特定长进行编码,直接以助记符的ASCII码作为规则的编码,8比特编码理论上最多可以支持256种规则,为将来规则的新增扩展预留了空间,现有规则采用ASCII码编码存储,保证了规则文件的可读性,减少了软硬件间编译转换的工作量㊂实际进行字符串变换时,常为多个规则的组合情况,设计硬件存储空间时,考虑规则组合及规则携带参数情况,为每次变换分配40字节的存储空㊀第3期陈孟东,等:一种领域专用的规则引擎设计与实现305㊀间㊂通常每个字典文件中的字符串长度相同,硬件逻辑中为每个字典条目分配32字节的存储空间,即字符串的长度最大为32㊂规则文件与字典文件格式及其在硬件中存储形式如图3所示㊂图3㊀规则文件与字典文件存储格式2.3㊀处理核心设计规则处理就是对规则进行译码,然后对字符串进行变换,生成新的字符串的过程㊂由于不同的变换规则会改变字符串的长度,即使输入字符串长度相同,输出字符串仍会长度不同,给后续的使用带来困难㊂解决的办法是:对字典文件进行分类,每次处理的字典文件中都是相同长度的字符串,处理时,首先针对一个规则,循环字典文件中所有的字典条目,这样,生成的新字符串的长度都是相同的,给后续HASH 流水线的使用带来便利㊂然后更换规则,重新获取字典并对字典进行循环,直至所有的规则处理完毕㊂对于规则组合在一起共同对字符串施加变换的情况,后面规则的处理依赖于前面规则的处理结果,规则只能严格按顺序执行㊂在设计过程中,针对每个规则的执行时间进行了优化,将每一个规则都在1个时钟周期之内处理完毕,包括规则的解析和字符串的变换㊂这样,每个时钟周期都有一个规则处理完毕,变换由几个规则组合在一起,便需要几个周期来生成一个新的字符串㊂图4描述了3次规则变换,且每次变换是规则3组合,字典条目数为k 时的详细处理过程㊂每次变换由3个基本规则组成,所以每3个时钟周期可以生成1个新的字符串㊂图中的横轴是时间轴,代表时钟周期㊂string 1,string 2,string 3, ,stringk 是一个字典的k个条目,rule 1_1,rule 1_2,rule 1_3是3个基本规则,共同组成了一次变换,rule 2_1,rule 2_2,rule 2_3,rule 3_1,rule 3_2,rule 3_3与此类似㊂string 1_o ,string 2_o , ,stringk _o 是每次变换的输出㊂时钟周期1到n 完成对k 个字典条目的第1次变换,n +1到m ㊁m +1到l 分别完成第2次和第3次变换㊂图4㊀规则处理流程㊀㊀处理核心的逻辑简图如图5所示㊂41种基本规则中的每一种都被设计成一个单独的规则加速单元RPE(Rule Processing Element)㊂外围是预处理电路㊁规则译码电路以及存储管理电路㊂预处理电路负责将连续存放的规则和字典文件分割成规则和字典条目㊂规则译码电路对每次变换的基本规则进行逐一译码,然后选择相应的规则加速单元进行运算㊂每个加速单元根据输入的字符串以及字符串长度信息进行新字符串的生成工作㊂存储管理电路负责使用高速总线从片外获取规则和字图5㊀处理核心逻辑图306㊀信息工程大学学报㊀2019年㊀典文件,形成片上的各级缓存,以及将生成的新字符串输出至片外㊂41种基本规则的处理逻辑组成1个处理核心,根据硬件资源的限制,在规则引擎内部可以放置1个或者多个处理核心同时工作,每个核心各自取规则和字典进行变换㊂2.4㊀存储设计规则引擎自动进行规则和字典的存取,为满足高速引擎对规则和字典的速率需求,共设置3级存储结构㊂第1级存储:片外DDR㊂整个规则文件和字典文件都存储在DDR中,Zynq中的CPU将规则文件和字典文件在DDR中的起始地址以及大小信息配置到FPGA逻辑,硬件自动进行规则的获取㊂同时,如果需要将规则引擎处理生成的新字符串传到片外供其他应用使用,则新生成的字符串也是由规则引擎自动传输到DDR内存中㊂第2级存储:片内RAM㊂FPGA内部的规则引擎通过AXI(高级可扩展接口,Advanced eXtensi-ble Interface)总线将规则与字典分批预取入FPGA 内部后,缓存于片内RAM中㊂AXI总线的4个高性能接口AXI_HP工作于150MHz时,总带宽可达到4.8GB/s,可保证对规则引擎的高速供数㊂随着处理逻辑不断消耗RAM中的数据,规则引擎会不断从片外获取数据,保证处理逻辑的需求㊂第3级存储:片内FIFO㊂处理逻辑从片内RAM获取字典数据,进行预处理,将字典再存入片内FIFO缓存中,供核心处理逻辑进行高速处理㊂3㊀实验与结果为验证所设计规则引擎的功能正确性和性能指标,在基于Zynq XC7Z030芯片的硬件平台上,通过Vivado(v2015.2)工具套装进行开发实现㊂对不同的处理核心数量㊁不同的字符串长度㊁不同的规则组合等情况进行测试,分析其性能和功耗情况,并与其他平台的运行结果进行对比和分析㊂3.1㊀硬件实现结果通过Vivado工具,对设计进行综合与实现,根据硬件资源的限制,分析最多可放置的处理核心数量及整体处理性能㊂处理性能以变换为1个基本规则组合时每秒可以生成的新字符串个数计算㊂结果显示,最高实现频率150MHz,片上最多可以放置的核心数量为2,所以最大的处理能力是每秒处理300M个基本规则,生成300M个新字符串㊂在放置单个处理核心情况下,资源占用为42%,仍有足够的资源放置HASH算法流水线,可以用于片内的验证工作㊂如果在片内放置2个规则引擎处理核心,此时,资源占用约为80%,片内已不能放置HASH算法流水线,规则引擎可用于将生成的新字符串传输到片外,供其他应用使用㊂3.2㊀性能与功耗对比本文首次采用FPGA以硬件的方式进行规则的解析处理工作,性能和功耗的对比是同CPU和GPU上的软件实现进行㊂将相同的规则文件和字典文件分别在CPU和GPU上运行,并与本文的规则引擎的结果进行对比分析,对比从处理性能和功耗两个角度进行㊂软件实现采用最新的hashcat4.1.0进行, hashcat是业界最快的分析工具,支持CPU和GPU 平台[5]㊂软件的结果与其运行平台有很大关系,如NVIDA GPU中其桌面产品和专门用于高性能计算的产品,计算能力差距非常巨大㊂本文选取主流偏上的产品平台进行试验,采用的CPU平台为: Intel(R)Core(TM)i7-6700CPU@3.40GHz, 32G内存,GPU平台为:NVIDIA GeForce GTX 970,1664个处理核心,1.18GHz主频㊂性能的对比结果如图6所示㊂对于规则组合情况,在每种平台上分别测试了1个规则㊁3个规则㊁9个规则组合成1次变换的情况㊂对于字典中字符串的长度,测试了长度为8字节和12字节的情况㊂通过分析可以发现:对于不同的字典长度,3种平台的处理性能都不受影响;处理性能受规则组合情况影响很大,规则组合越多,处理越复杂㊂本文的规则引擎处理性能在规则1组合情况下可以达到每秒生成300M个新字符串,其性能优于CPU实现,差于GPU实现㊂然而,当使用该规则引擎来构建大规模㊁低功耗的规则处理系统时,其计算能力会显著增加,但这不是本文的工作㊂图6㊀规则引擎与不同平台的性能对比在实际运行过程中,对规则引擎和GPU平台㊀第3期陈孟东,等:一种领域专用的规则引擎设计与实现307㊀的运行功耗进行实时观测,CPU的功耗以65W计算,计算性能功耗比(每瓦特每秒可以处理的规则数量),结果如图7所示㊂规则引擎的运行功耗仅为2W,其性能功耗比相比于GPU有3倍的提升,相比于CPU有50倍的提升㊂可以看出,本文的规则引擎处理速度快㊁功耗低,非常适合构建大规模的规则处理系统㊂图7㊀规则引擎与其他平台的能效对比4㊀结束语字符串变换规则的处理是身份认证协议分析中的重要部分,其处理过程复杂,对处理性能㊁系统功耗有很高要求,本文针对这些需求,首次提出以全硬件的方式进行规则处理的加速,有效利用FP-GA高并行㊁低功耗的特点,构建了规则引擎,并进行了设计实现,实验结果表明,规则引擎在Zynq XC7Z030FPGA上运行性能优于Intel i7-6700 CPU,性能功耗比相比NVIDIA GeForce GTX970 GPU提升3倍,相比CPU提升50倍,有效提升了规则处理的速率和能效㊂此规则引擎处理性能高㊁系统成本低㊁运行功耗低,特别适合构建大规模㊁分布式㊁可重构的规则处理系统,进而为整个身份认证协议分析系统的设计实现提供基础㊂参考文献:[1]谢全泉.异构平台下口令恢复任务决策机制研究[D].郑州:郑州大学,2016.[2]WU Z Y,CHIANG D L,LIN T C,et al.A reliable dy-namic user-remote password authentication scheme over insecure network[C]//Advanced Information Networking and Applications Workshops(WAINA).201226th In-ternational Conference on.IEEE,2012:25-28. [3]OLSON E.Robust dictionary attack of short simple sub-stitution ciphers[J].Cryptologia,2007,31(4):332-342.[4]Openwall.John the ripper password cracker[EB/OL].[2018-03-11]./john/doc/.[5]STEUBE J.Hashcat advanved password recovery[EB/OL].[2018-03-11].https:///hashcat/.[6]CHOU H C,LEE H C,YU H J,et al.Password crack-ing based on learned patterns from disclosed passwords [J].International Journal of Innovative Computing Infor-mation&Control Ijicic,2013,9(2):821-839. [7]FAHL S,HARBACH M,ACAR Y,et al.On the eco-logical validity of a password study[C]//Symposium on Usable Privacy and Security,2013:1-13.[8]HUH J H,OH S,KIM H,et al.Surpass:system-initia-ted user-replaceable passwords[C]//Proceedings of ACM Conference on Computer and Communications Se-curty,2015:170-181.[9]MILO F,BERNASCHI M,BISSON M.A fast,GPU based,dictionary attack to OpenPGP secret keyrings[J].Journal of Systems&Software,2011,84(12):2088-2096. [10]XU L,GE C,QIU W,et al.Password guessing basedon LSTM recurrent neural networks[C]//IEEE Inter-national Conference on Computational Science and Engi-neering.IEEE,2017:785-788.[11]FLOR N C I O D,HERLEY C.An administrator sguide to internet password research[C]//Proceedings ofthe28th USENIX conference on Large Installation Sys-tem ENIX Association,2014:35-52.[12]UR B,SEGRETI S M,BAUER L,et al.Measuring re-al-world accuracies and biases in modeling passwordguessability[C]//Usenix Conference on Security Sym-ENIX Association,2015:463-481. [13]QIU W,GONG Z,GUO Y,et al.GPU-based high per-formance password recovery technique for hash functions[J].Journal of Information Science&Engineering,2016,32(1):97-112.[14]LI X,CAO C,LI P,et al.Energy-efficient hardwareImplementation of LUKS PBKDF2with AES on FPGA[C]//2016IEEE Trustcom/Big DataSE/I SPA.IEEE,2016:402-409.[15]CHAVES R,KUZMANOV G,SOUSA L,et al.Cost-efficient SHA hardware accelerators[J].IEEE Transac-tions on Very Large Scale Integration(VLSI)Systems,2008,16(8):999-1008.[16]ABBAS A,VOβR,WIENBRANDT L,et al.An effi-cient implementation of PBKDF2with RIPEMD-160onmultiple FPGAs[C]//201420th IEEE InternationalConference on Parallel and Distributed Systems(IC-PADS).IEEE,2014:454-461.[17]XILINX.Zynq-7000all programmable SoC[EB/OL].[2018-03-11].https:///support/docu-mentation/product-briefs/zynq-7000-product-brief.pdf.(编辑:颜峻)。
Java规则引擎工作原理及其应用作者:缴明洋谭庆平出处:计算机与信息技术责任编辑:方舟[ 2006-04-0608:18 ]Java规则引擎是一种嵌入在Java程序中的组件,它的任务是把当前提交给引擎的Java数据对象与加载在引擎中的业务规则进行测试和比对摘要Java规则引擎是一种嵌入在Java程序中的组件,它的任务是把当前提交给引擎的Java数据对象与加载在引擎中的业务规则进行测试和比对,激活那些符合当前数据状态下的业务规则,根据业务规则中声明的执行逻辑,触发应用程序中对应的操作。
引言目前,Java社区推动并发展了一种引人注目的新技术——Java规则引擎(Rule Engine)。
利用它就可以在应用系统中分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时可以动态地管理和修改,从而为企业保持灵活性和竞争力提供有效的技术支持。
规则引擎的原理1、基于规则的专家系统(RBES)简介Java规则引擎起源于基于规则的专家系统,而基于规则的专家系统又是专家系统的其中一个分支。
专家系统属于人工智能的范畴,它模仿人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的术语解释和证明它的推理结论。
为了更深入地了解Java规则引擎,下面简要地介绍基于规则的专家系统。
RBES包括三部分:Rule Base(knowledge base)、Working Memory(fact base)和Inference Engine。
它们的结构如下系统所示:图1 基于规则的专家系统构成如图1所示,推理引擎包括三部分:模式匹配器(Pattern Matcher)、议程(Agenda)和执行引擎(Execution Engine)。
推理引擎通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。
模式匹配器决定选择执行哪个规则,何时执行规则;议程管理模式匹配器挑选出来的规则的执行次序;执行引擎负责执行规则和其他动作。
规规则引擎的定义及其体系结构摘要随着经济的迅速发展,市场的快速变化导致商业业务规则的变化也越来越快,因此对于企业的IT部门或者IT企业来说,这就要求设计出来的应用系统能够适应这种快速变化。
然而,软件的开发周期和维护周期长,这和适应快速变化的市场需求产生了矛盾。
规则引擎的出现很好的解决了这一矛盾。
有了规则引擎,我们可将以程序代码的形式固化在应用系统中的业务逻辑分离、抽象出来,被分离的业务逻辑以业务规则形式存储在规则库中,并通过规则引擎进行执行。
本文将介绍规则引擎的定义,并将以WebSphere ILOG JRules 规则引擎为例介绍其体系结构。
关键字规则引擎业务规则业务对象模型规则执行模型规则调用目录第1章绪论1.1 规则引擎的产生背景第2章规则引擎概述2.1 业务规则2.2 规则引擎2.2.1 什么是规则引擎2.2.2 使用规则引擎的优点2.3 规则引擎运行模式第3章规则引擎的架构和工作机制3.1 规则引擎的架构原理3.2 规则引擎的工作机制第4章总结第1章绪论1.1 规则引擎的产生背景随着信息技术在企业的广泛的应用,企业IT 部门所开发和维护的应用系统也越来越复杂,而现代企业要求响应快速及灵活,他们对企业软件也有同样的要求。
企业管理者对企业级IT系统的开发有着如下的要求:一、为提高效率,管理流程必须自动化,即使现代商业规则异常复杂。
二、市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新。
三、为了快速、低成本的更新,业务人员应能直接管理IT系统中的规则,不需要程序开发人员参与。
因此如何使应用系统能够更快的响应的企业业务的变化已成为企业IT 发展的重要挑战之一。
另外,项目开发人员会碰到了以下问题:一、程序=算法+数据结构,有些复杂的商业规则很难推导出算法和抽象出数据模型。
二、软件工程要求从需求—>设计—>编码,然而业务规则常常在需求阶段可能还没有明确,在设计和编码后还在变化,业务规则往往嵌在系统各处代码中。
系统架构师任务重大,需要了解客户需求以及如何设计和实施系统。
构件化的软件开发方法是系统架构师需要掌握的重要技能之一。
在本文中,我们将深入探讨基于构件的软件开发方法及其应用,以及它对系统架构师的重要性。
一、基于构件的软件开发方法简介基于构件的软件开发方法是指将软件系统拆分成互相独立的构件,然后将这些构件组合在一起以构建整个系统的方法。
这种方法提供了一种将系统模块化的方式,使得系统可以更容易地理解和维护。
构件化还能够提高系统的复用性和可扩展性,从而减少系统的开发时间和成本。
在基于构件的软件开发方法中,系统架构师需要首先对系统进行全面评估,了解系统的需求和各个模块之间的关系。
系统架构师需要设计和定义系统的构件,并确定它们之间的接口和通信方式。
系统架构师需要协调开发团队,确保各个构件能够按照设计规范进行开发,并最终集成到整个系统中。
二、基于构件的软件开发方法的应用基于构件的软件开发方法广泛应用于大型软件系统的开发中。
它可以帮助开发团队更好地理解系统的复杂性,降低系统的维护成本,并提高系统的可靠性和稳定性。
在实际应用中,系统架构师可以通过使用现有的构件库来加速系统的开发进程,同时也可以提高系统的灵活性和可定制性。
三、个人观点和理解作为系统架构师,我深刻理解基于构件的软件开发方法对于系统开发的重要性。
它能够帮助我们更好地管理系统的复杂性,提高系统的可维护性和可扩展性。
基于构件的软件开发方法也能够加速系统的开发进程,降低系统的开发成本。
我认为系统架构师需要深入学习和掌握基于构件的软件开发方法,并将其运用到实际的系统开发中。
四、总结通过本文的讨论,我们深入探讨了基于构件的软件开发方法及其应用在系统架构师工作中的重要性。
我们从简到繁地介绍了基于构件的软件开发方法的基本概念,并探讨了其在实际应用中的优势。
我共享了对于这个主题的个人观点和理解。
希望通过本文的阅读,读者能够更全面、深刻和灵活地理解基于构件的软件开发方法在系统开发中的重要性。
ISSN 1000-9825, CODEN RUXUEW E-mail: jos@Journal of Software, Vol.17, No.6, June 2006, pp.1401−1410 DOI: 10.1360/jos171401 Tel/Fax: +86-10-62562563© 2006 by Journal of Softwar e. All rights reserved.∗基于工作流引擎的构件组装体系结构李海波1,2+, 战德臣1, 徐晓飞11(哈尔滨工业大学计算机科学与技术学院企业智能计算研究中心,黑龙江哈尔滨 150001)2(东北农业大学工程学院,黑龙江哈尔滨 150030)Architecture of Component Composition Based on Workflow EngineLI Hai-Bo1,2+, ZHAN De-Chen1, XU Xiao-Fei11(Centre of Intelligent Computing of Enterprises, School of Computer Science & Technology, Harbin Institute of Technology, Harbin150001, China)2(Engineering Institute, Northeast Agricultural University, Harbin 150030, China)+ Corresponding author: Phn: +86-451-55116600, Fax: +86-451-86412664, E-mail: lihaibo@, Li HB, Zhan DC, Xu XF. Architecture of component composition based on workflow engine. Journal ofSoftware, 2006,17(6):1401−1410. /1000-9825/17/1401.htmAbstract: Nowadays, SA (software architecture) and CBSD (component-based software development), haveshown great advantage in software development. CBSD is a successfully applied down-top methodology to softwaredevelopment; whereas SA still lacks a top-down component composition methodology, especially in processcomponent. Based on workflow and the background of Web application, a component composition method isinvestigated. Being started with the key elements of business process, such as business object, control flow and dataflow, characteristics and interactions between them are formalized. A workflow engine based SA of processcomponent composition is proposed. Except for the control flow, the SA can deal with data flow between businessactivities, and provide a reference to others in applying archive workflow to component composition.Key words: workflow; workflow engine; component composition; process component; control flow; data flow摘要: 近年来,软件体系结构(SA)、基于构件的软件开发技术(CBSD)等开始在软件开发中发挥出重要的作用.CBSD应用的成功主要体现在自底向上构造系统的方法上.目前,对SA的研究还缺乏一种自顶向下的构件动态组装方法,尤其是过程构件的组装.以工作流技术为基础,以基于Web应用为背景,研究了基于工作流引擎的构件组装方法.从业务过程的基本要素——业务对象、控制流和数据流入手,详细分析了这些要素在构件环境下的特点和交互模式,并以此为基础提出了一种基于工作流的引擎的过程构件组装体系结构.该体系结构中除了考虑常规的控制流驱动的构件组装外,还深入研究了文档型的数据流驱动的构件组装机制,能够为其他研究者将文档型工作流技术应用于软件构件组装提供借鉴和参考.关键词: 工作流;工作流引擎;构件组装;过程构件;控制流;数据流中图法分类号: TP301文献标识码: A∗ Supported by the National Natural Science Foundation of China under Grant No.60573086 (国家自然科学基金); the NationalHigh-Tech Research and Development Plan of China under Grant No.2003AA4Z3210 (国家高技术研究发展计划(863)); the NationalResearch Foundation for the Doctoral Program of Higher Education of China under Grant No.20030213027 (国家教育部博士点基金)Received 2005-12-14; Accepted 2006-03-131402 Journal of Software软件学报 V ol.17, No.6, June 2006基于构件的软件工程(component based software engineering,简称CBSE)逐渐成为软件开发的主流范型,是软件开发工程化的现实可行途径.构件必须经过组装才能形成应用系统,所以构件组装技术是关键[1].构件组装的本质是,在构件之间建立关联,根据这种关联协调它们的行为,把它们组织成为一个有机的整体.构件组装策略之一是自顶向下的组装方法,它开始于系统的集中模型,而忽略底层细节,通过逐步求精把细节逐渐引入到框架中来;构件组装的策略之二是自底向上的方法,对各子系统单独建模而忽略它们之间的相互作用.近年来,软构件应用比较成功的模式就是基于标准化运行级构件的规范进行开发,如CORBA,EJB和DCOM,中间件技术作为存在于系统软件与应用之间的特殊层次,抽象了典型的应用模式,是一种自底向上构造软件系统的途径.但当通过组装,构件的粒度由原子构件逐渐变大到过程构件(业务过程)的时候,构件间开始存在一种偏序关系,它描述了活动的执行顺序,是工作流视图[2].目前,对构件组装的研究大多侧重于较高层次的抽象描述,比如接口规约、功能规约等.从工作流角度、业务过程逻辑和业务活动实现分离的思想,使得过程的组装更贴近于自顶向下的组装途径,而当前的研究缺乏一种按照过程的抽象描述组装过程构件的方法.构件按照执行顺序进行组装不能仅仅满足于构件的接口规约,还应该考虑运行时构件的状态.通过与用户以及其他构件的不断交互,构件的状态不断发生变化,在控制条件的约束下,不断地选择、实例化新构件.对执行顺序的处理虽然适合采用工作流技术[2],但在构件环境下,执行顺序的引入增加了过程维的考虑,为构件组装提出了新需求.过程视角体现在工作流技术的两个最基本的特征——控制流和数据流上,前者体现了工作流活动间的执行偏序;后者体现的是活动间的数据依赖关系.因此,从工作流的基本特征分析入手,必然能够准确地掌握基于工作流引擎的构件组装系统结构.因此需要研究:1) 工作流引擎和执行构件(活动)的交互模式,即控制流;2) 可执行构件间的数据交互模式;3) 基于角色的权限控制模式,体现了一种构件重用方法;4) 基于工作流引擎的过程构件组装的系统结构.为此,以基于Web的应用为背景,提出一种基于工作流引擎的过程构件组装体系结构.从分析工作流的基本特征入手,提出了工作流引擎和构件、构件之间的交互模式,以及基于这种交互模式的工作流引擎内部结构,最后给出了按照过程描述组装过程构件的系统结构,并通过一个具体实例加以说明.1 相关工作构件组装研究主要包括两部分:复合构件形成过程研究和基于体系结构(或者组装框架)的研究.其中,前者是为了得到性能稳定、有较强可靠性的复合构件,以用于构件组装,后者则是寻求良好的组装策略以实现开发目的.基于软件体系结构的构件组装方法是构件组装的主流研究方向,是实现构件生产与组装的技术基础,目前取得了一定的进展,如基于软件体系结构的构件组装技术——ABC方法[1,3].对构件组装的研究主要分为如下几个方面:1) 通过体系结构的建模和高层描述进行构件的组装方法[4,5],研究高层的一些性质;2) 通过过程结构[6]以及基于语义和知识[7]的方法,研究过程构件的组装方法;3) 分布式环境下过程构件组装研究主要包括服务组合[8]和构件调度优化[9]等方面.Avoca[10]是软构件技术应用中比较成功的例子.该系统可以利用现有的构件和通信协议组装软件系统,但是,构件的修改必须了解足够的领域知识.SA提供了一种自顶向下构造软件系统的方法,但目前对其研究大多局限于建模和高层描述[4,5]上.对于过程构件的组装方法,多数研究主要集中在过程结构[6]、优化[11]和适应性[9]等方面.对采用SA进行过程构件组装并映射到实现层的研究相对较少,并且,过程中的数据流是构件交互的基础,对数据流的交互模式则考虑得更少.2 概述2.1 基本概念企业日常经营活动中涉及到的相关信息实体与物理实体,如订单、报表、设备、员工等,我们称这类信息为业务对象.业务对象是指企业中所有物理资源和信息资源在信息系统中的抽象,通过一组连续的操作,使得业李海波 等:基于工作流引擎的构件组装体系结构 1403务对象的属性不断改变,最终完成对一个业务对象的处理过程.业务对象之间的交互是工作流系统的数据特性之一[12].因此,首先给出几个相关概念.定义1(业务对象). 业务对象可以用一个三元组表示,记为bo =(ID ,A ,M ).其中:(1) ID 为该业务对象的唯一标识;(2) A 为bo 的属性a i (i=1,2,…,m )的集合,a j (bo )表示bo 的属性集合a j ;(3) M 为作用于bo 上的业务操作m i (i=1,2,…,n )的集合.定义2(业务操作). 业务操作表示为op =(r ,bo ,A ).op 是由一个特定角色r 作用于bo 上的一个原子性动作,并使bo 的属性发生变化;A 表示op 作用的业务对象bo 的属性集合,业务操作与业务对象中的业务操作一一 对应.定义3(业务活动). 业务活动定义为三元组ba =(r ,OP ,),是由一个特定角色r 不间断地执行的一组业务操作的集合OP .是业务操作构成的偏序关系.p p 定义4(业务过程). 业务过程bp 是为实现特定的业务目标,由不同角色执行的一组具有偏序关系的、逻辑上相互关联的、作用于一组相关业务对象上的业务活动,业务活动间的偏序关系由约束条件确定.业务过程可定义为五元组bp =(R ,BA ,BO ,P ,):p (1) R 为角色的集合;(2) BA 表示业务活动ba i (i =1,2,…,n )的集合;(3) BO 表示业务对象的集合;(4) P 表示约束条件的谓词集合;(5) 表示业务活动之间的执行偏序关系.p 上述定义说明:业务过程是由一系列存在执行偏序关系的活动组成,体现了业务活动间的控制流.而业务活动可以进一步分解成一系列业务操作,使业务对象属性发生变化,数据流是在不同业务对象间交互时产生的.2.2 交互式Web 文档(Web document )的多重作用Web 技术对于解决大规模且异构的系统具有其他技术所不可比拟的优势,所以,我们以Web 应用为背景研究构件组装.工作流活动的实现方法之一就是提供交互式的Web 文档(Web page),所以,Web 文档最明显的一个作用就是与用户进行交互:接收用户的输入以及显示处理结果.此外,如果交互式Web 文档的处理涉及到工作流,那么该文档接收的数据可以直接用于确定工作流的路由,或者作为工作流相关数据[13]被提交给工作流引擎,用于确定活动的状态或者计算后续活动.另外,交互式Web 文档之间也随时交换各自的数据.所以在构件环境下,如果考虑工作流,交互式Web 文档共有3个作用:与用户进行交互;与工作流引擎进行交互;活动间的数据交互.因此,Web 文档具有如下定义:定义5(Web 文档). Web 文档表示成WDoc =(C ,D ).其中:C 是构件的集合,包含两类构件,C =(FC ,IC ),分别表示功能构件和界面构件.功能构件用于处理业务逻辑(业务操作),界面构件负责业务对象属性的表示,二者最终组装成业务活动ba ; D 是文档中的数据,包含3类数据,记为D =(UD ,WfRD ,WfID ).其中:UD 是用户数据;WfRD 是工作流相关数据,是用于计算活动间执行偏序的用户数据的子集[13];WfID 是工作流实例数据,并用于控制Web 文档中的数据流.一个Web 文档可以实现一个业务活动.3 基于工作流引擎的构件环境工作流管理技术的主要贡献就是业务过程逻辑和业务活动实现的分离.在运行阶段,工作流引擎根据过程模型调度业务活动的执行,在构件环境下,则是过程构件动态组装的集中体现.过程构件组装时不一定实例化模型中的所有构件,对构件实例化排序就是对过程构件的调度.基于对交互式Web 文档的认识,工作流引擎和构件间的关系总体上概括为两个方面:执行调度和数据交互.下面从工作流技术的两个最基本的特征:控制流和数据流以及权限控制方面进一步分析构件环境下工作流引擎的调度和交互机制.1404Journal of Software 软件学报 V ol.17, No.6, June 20063.1 控制流3.1.1 过程控制方式 从定义4可以看出,业务活动间存在一种执行偏序关系,这种偏序关系被抽象为过程描述,并作为调度规则由工作流引擎进行翻译,结果就是活动的执行顺序(工作流引擎的结构见第3.5节).用户不断地与Web 文档进行交互,使业务对象的属性不断发生变化,并依据静态的过程描述和运行时业务对象属性的取值计算后续活动.定义6(执行偏序关系). 对于∀ba i ,ba j ∈BA ,设bo i 和bo j 分别为ba i 和ba j 操作的两组业务对象,如果在4种基本控制结构[13]的作用下,依据谓词P (a 1,a 2,…,a n ), a i ∈a i (bo i ),能够确定出执行顺序,则称活动ba i 和ba j 之间具有执行偏序关系,记为(ba i p ba j )p ;反之,记为(ba j p ba i )p.工作流引擎依据业务过程中的谓词P (a 1,a 2,…,a n )在运行时的取值计算后续活动,属性a 1,a 2,…,a n 称为工作流相关数据,其含义实质上与工作流管理联盟(WfMC)给出的定义相同.图1是制造企业典型的设备维修过程,其中,实线表示执行偏序关系.根据运行时故障的大小(谓词P ),确定维修申请审批的后续活动是派工还是领料.Fig.1 Equipment maintenance process 图1 设备维修过程在基于构件的Web 环境下,过程构件实际上是集成在一起的、具有执行偏序关系的多个Web 文档.因此,Web 环境下过程构件的定义如下: 定义7(过程构件). 过程构件是由多个Web 文档以及Web 文档(活动)之间的执行偏序关系组成,表示成PC =(WDoc ,).p 过程构件是一系列构件按照执行偏序关系组装而成的更大粒度的构件,而业务活动则是由若干无执行偏序关系的构件组装而成.过程构件必须解决工作流引擎和工作流相关数据交互问题.3.1.2 与运行数据交互采用XML 作为Web 应用间的数据交换格式具有许多优点,比如结构化、易于校验、人与计算机均可读等.加之采用XSLT 样式表(style sheet)进行界面布局,则可以使Web 文档数据与表示方式相分离,因而常利用Web 及XML 来解决分布式环境下的互操作问题.为了实现对过程的调度,所采用的描述方法必须有能力与工作流相关数据进行交互.按照定义5,工作流相关数据对确定活动执行顺序起着关键作用.在交互式Web 文档中则具体体现为对业务对象操作的使能控制,比如,业务对象的“创建”按钮处于Disabled 状态,就表示业务对象暂时不满足创建条件,这种工作流调度模式见第3.3节.所以,既然运行数据最终要体现到Web 文档界面上,那么运行数据就可以生成XML 文件,然后再利用XSLT 样式表在构件组装时控制Web 文档的操作.为此,我们在语法上给出基于XSLT 样式表的相关描述方法.(1) 获取工作流相关数据当处理〈xsl: for-each 〉元素时,处理过程依赖于工作流相关数据的变量x 1,x 2,…,x n 的取值,因此,获取x i 以及获取多个数据在语法上可以分别表示为〈xsl: variable name =“Function (x i )” select =“…”/〉,〈xsl: variable name =“…” select =“Function (query )”/〉,这里,query 以及Function (query )依赖于具体的实现机制,一般来讲,大多采取XPath 和XQuery 语言.(2) 测试谓词真值依据工作流相关数据以及谓词表达式,谓词条件表达成〈xsl: for-each select =“Function (P (x 1,x 2,…,x n ))”〉…〈/xsl: for-each 〉,其中,谓词P 的表达依赖于具体的实现.如果谓词P 中的参数x 1,x 2,…,x n 的取值有多种组合使得P =true,则可以李海波等:基于工作流引擎的构件组装体系结构1405借助于if子元素,表达式如下:〈xsl: if test=“Function(P(x1,x2,…,x n))”〉…〈/xsl: if〉,把那些所有使P=true的参数取值都包含在子元素〈xsl: if〉中,而且,为了使每个判断分支能够执行一定的行为,我们允许每个子元素〈xsl: if〉分支中包含一个模板规则.(3) 工作流活动和Web文档的绑定工作流过程描述中的活动最终应被转换成Web文档,提交给用户执行.界面开发者可以在工作流活动和交互式Web文档中的form或者link建立起映射关系,语法上表示为〈xsl: submit action=“Function(x1,x2,…,x n)” actionElement=“actionID”〉…〈/xsl: submit〉,元素submit将活动Function和HTML中的form元素绑定起来.其中:form元素由actionID标识;变量x1,x2,…,x n 的取值来自于HTML中的form或者XSLT中的变量;XSLT中的变量定义可以参见(1)中的情况.3.2 数据流根据业务对象的定义以及对交互式Web文档的分析可知,业务对象间的交互产生了数据流.因此,业务对象之间在数据上存在着依赖关系,下面给出定义:定义8(数据依赖关系). 设ba j.bo和ba i.bo分别是活动ba j和ba i所操作的业务对象,若ba j.bo的属性集合d j(ba j.bo)的产生需要读取ba i.bo的属性集合d i(ba j.bo),则称业务对象属性d j和d i之间存在着数据依赖关系,记作d i(ba j.bo)→d j(ba j.bo);如果不需要区分属性集合,则简称ba i.bo和ba j.bo之间存在着数据依赖关系,记作ba i.bo →ba j.bo.数据依赖关系是个一般性的概念,只要业务对象之间存在读写操作,都称作具有数据依赖关系.图1中的虚线表示数据依赖关系,其中两个业务对象维修申请单a和派工单b分别由两个业务活动维修申请和派工进行操作,d1是数据集合,包括故障记录号No和故障发生时间Time.此时,A.a和 B.b之间就存在数据依赖关系:No(A.a)→No(B.b)和Time(A.a)→Time(B.b).在工作流引擎的调度下,同一类型的多个活动可能会同时运行.因此,在说明如何调度数据流之前,首先给出活动实例和过程实例的定义:定义9(业务活动实例). 业务活动实例表示为三元组bai=(id,u,ba),是特定用户u对业务活动ba的一次执行,id是活动实例ID.定义10(业务过程实例). 业务过程实例表示为三元组bpi=(id,U,bp),id表示过程实例ID,是特定用户集合U 对业务过程逻辑bp的一次执行.对∀bai∈bpi,其id都等于过程实例的id.在同一个过程实例中,活动实例a i和a j具有相同的过程实例ID,数据流的调度控制主要是指控制同过程实例下的数据交互.同一个Web文档内部业务对象间的交互可以直接进行变量引用,不同Web文档间业务对象的交互不仅需要传递数据,并且要求能够从共享数据中准确定位业务对象.所以,工作流引擎除了能够调度活动外,还应该发挥对数据流的控制能力.Web文档间的数据交互模式实际上是一种多任务表之间的交互模式.3.3 多任务表模式按照WfMC的定义,任务表是指分配给某用户并等待用户处理的任务项队列.不同角色的用户登陆后,从任务表中选取任务项,然后再打开与之关联的应用对其进行处理.在这一管理模式下,任务表成了业务对象间交互的场所.工作流任务表管理器可以作为工作流管理系统的一部分提供给用户,也可以是用户自己编写的程序[14].任务项的表示虽然可以采取多种形式,如列表、E-mail(Metro项目)等,但其目的都是为了管理用户要执行的任务.所以,除了给用户分配任务以外,任务列表还起两个作用:角色的权限控制和业务对象管理,而基于Web文档的业务对象管理模式更能体现这两个作用.基于以上理解,Web文档就是任务表管理器,Web文档中待处理的业务对象就是任务项.因此,这是一种多任务列表模式,集成到一起就是一个过程构件,表示一个业务过程.多任1406 Journal of Software软件学报 V ol.17, No.6, June 2006务列表模式一方面简化了用户操作,使用户对业务对象的操作更加直接;另一方面也便于数据流的控制.图2(a)中,业务对象BOA1和BOB1之间的数据交互需要两个Web文档都处于打开状态,而我们提出的多任务表模式(图2(b))更加适合数据流的控制.与传统的人工检索获取数据的方式相比,基于工作流引擎的数据流控制能够自动完成数据的正确交互.这里所说的“正确”是指两个交互的业务对象应该属于同一个过程实例.(a) Work list pattern defined by WfMC (b) Multi-Work-List pattern(a) 工作流管理联盟定义的任务列表模式(b)多任务列表模式Fig.2 Difference of work list pattern图2 任务列表模式的差别3.4 权限控制企业人员的权限最终表现为对业务对象的操作控制上.一个业务对象经常由多个角色共同操作完成,每个角色负责一类属性,比如,一个设备对象的3类属性——基本属性、使用属性和固定资产属性,就分别由设备管理员、车间人员和固定资产管理员分别处理.角色和业务对象的映射关系可以表示为M rd={m rd|m rd∈(2R→D)∪(R→2D)},其中R和D分别表示角色集合和业务对象属性集合.除了这种现实的业务模式,不同角色在同一个Web文档中所能执行的操作也不同,比如只读、可写权限.考虑组装后的Web文档的空间视图,我们提出一种基于Web文档全局视图、按照角色的权限配置进行过滤的权限控制模式.这种模式大大增加了构件本身的可重用性.比如,采用传统的方法处理设备对象,3类属性需要开发3个Web文档(用户视图),而我们提出的权限控制模式只需要开发一个全局视图,通过权限配置就可以直接对Web文档的布局产生影响,而且当M rd需要局部调整时,只需修改配置文件即可.采用XSLT对Web文档进行权限过滤的描述方法举例如下:〈xsl: template match=“INPUT//input”〉〈xsl: for-each select=“child::display”〉〈td〉〈input type=“text” name=“…” value=“…”/〉〈xsl: value-of select=“display”/〉〈/td〉〈/xsl: for-each〉上述描述对Web界面中的每一个input进行处理,依据变量display确定该input属性是只读还是可写.3.5 工作流引擎多任务表管理模式、权限控制模式决定了工作流引擎对构件的调度控制机制,工作流引擎的内部结构如图3所示.调度的结果最终体现在Web文档上,包括业务对象属性和功能操作.矩形框表示计算,矩形框间的箭头表示过程实例的处理过程.图中涉及了活动状态,考虑到现实情况,由于业务活动未必都能顺利地执行完毕,因此首先引入并解释活动状态.从定义5可知,如果活动执行前需要满足谓词P,则P称作活动执行的前提条件,记为P pre,例如,判断某些数据是否已经准备好.若活动执行完毕后需要满足谓词P,则称P为活动执行的后置条件,记为P post,例如,某些数据是否全部生成.活动在前提条件不满足或者未被执行完时需要等待,直到条件满足为止.活动状态变迁过程如图4所示.当活动的状态从READY变化至COMPLETED,表示活动已经执行完毕;或者变化至ABORT,表示活动被取消.活动状态的变迁主要依据P pre和P post这两类判定条件,如果用户考虑活动执行的时间因素,可以扩充增加OVERTIME和ABORT两个状态,活动执行时通过和用户交互确定活动状态的变迁.李海波等:基于工作流引擎的构件组装体系结构1407活动状态变迁至COMPLETED后,依据过程逻辑定义开始计算后续活动,根据人员角色定义确定出后续活动的执行角色,写入工作流实例数据库,同时,根据工作流数据模型(型)构造工作流相关数据(值),如图3所示.计算出的后续活动用来准备产生Web文档的XSL,工作流实例数据对产生Web文档的XSL起3个作用:1) 根据工作流实例数据,控制业务对象的创建.比如,某Web文档下的一个业务对象,当其状态是CONSTRUCT时,该业务对象的创建操作由disabled变为enabled,表明该活动的执行已经满足了前提条件;2) 获取工作流实例信息,用于控制数据流,如工作流实例ID.比如某Web文档下,一个业务对象属性的产生需要读取其他Web文档下的业务对象属性,此时就需要工作流实例ID作为控制条件;3) 部署视图.根据登陆用户的角色所对应的权限配置,对界面构件全局视图进行权限过滤,以及控制对业务对象属性的操作方式.Fig.3 Structure of workflow engine图3 工作流引擎结构Fig.4 State transformation schema of workflow activity图4 工作流活动状态变迁图4 系统结构基于对构件环境的分析,我们开发了一个开放式、支持企业复杂应用系统建模的开发平台ERP-Modeling. ERP-Modeling完成了从业务建模到软件系统建模,最终到软构件生成以及应用系统部署的全过程,实现了从高层抽象描述到具体实现的映射.通过对实际应用的大量研究,我们总结出了若干种处理业务对象的典型界面模式.这些界面模式能够覆盖企业应用的大部分需求,并且可以由程序自动生成,实现了代码的批量生产.无论按照典型界面模式生成的构件还是由开发人员编写的构件,最终在工作流引擎的调度下组装(集成)在一起,实现业务过程,系统结构如图5所示.很明显,组装过程构件时,工作流引擎起到调度、协调的作用,主要体现在3个方面:(1) 根据用户登陆角色对全局视图进行权限过滤,形成用户视图提供给用户.一个业务对象往往由多个角色共同完成,除了第3节中设备对象的例子,还有维修计划对象、派工单对象等都属于这种情形.我们的方法不是按照角色生成构件,而是先生成构件的全局视图,再根据用户权限配置形成用户视图.因此,这种权限控制模式提高了构件的可复用性,如图5中左侧部分所示.这种设计为修改业务对象属性的访问权限带来了巨大的方便,用户只需修改系统配置,就可以快速完成用户权限的设置,并在下一次打开Web文档或者刷新后生效.。
基于构件技术的规则引擎研究
随着构件技术的成熟,针对构件技术在业务层面的不足,本文研究了规则引擎的架构以及推理机制,通过规则引擎和面向构件技术的结合提出了基于规则引擎的软件构件模型实现方式。
在实际的企业服务开发工程中,使用文中所提出的基于规则引擎的构件模型将提高开发效率同时提高软件复用性和可维护性。
标签:规则引擎构件业务规则
0 引言
面向构件技术是把传统工业标准化、模块化和分工协同的思想应用于软件开发领域,同时继承和发扬了很多相关软件技术的成果,在改善人与计算机的沟通,提高软件的复用程度,以及如何提高开发效率快速反映变化等方面取得了突出的发展。
对于复杂企业级项目开发,在业务应用层面,我们需要面向业务性的构件具有灵活性,同时还要解决“业务逻辑相关”构件的可复用性,可维护性以及可扩展性。
而目前大多数的平台厂商专注于在构件架构的技术上,目的是使开发人员能够开发出粒度非常高的可复用的构件。
但是“多变”的业务逻辑使得我们只能提供低粒度的构件和接口,开发出的业务构件数量庞大,但很难复用和维护。
所以我们必须将“多变”的业务逻辑与程序代码分离,让它们能在运行时可以动态地管理和修改从而提供软件系统的柔性和适应性。
从而实现管理和复用业务逻辑,并且业务逻辑的变更也不会影响引起构件本身的变更。
规则引擎正是应用于上述动态环境中的一种解决方法。
由此,我们在深入理解规则引擎技术的基础上,同时将规则引擎引入面向构件技术。
1 规则引擎
一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑。
业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。
规则引擎的推理步骤如下:
①将初始数据(fact)输入至工作内存(Working Memory)。
②使用Pattern Matcher将规则库(Rules repository)中的规则(rule)和数据(fact)比较。
③如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。
④解决冲突,将激活的规则按顺序放入Agenda。
⑤执行Agenda中的规则。
重复步骤2至5,直到执行完毕Agenda中的所有规则。
任何一个规则引擎都需要很好地解决规则的推理机制和规则条件匹配的效率问题。
当引擎执行时,会根据规则执行队列中的优先顺序逐条执行规则执行实例,由于规则的执行部分可能会改变工作区的数据对象,从而会使队列中的某些规则执行实例因为条件改变而失效,必须从队列中撤销,也可能会激活原来不满足条件的规则,生成新的规则执行实例进入队列。
于是就产生了一种“动态”的规则执行链,形成规则的推理机制。
这种规则的“链式”反应完全是由工作区中的数据驱动的。
2 基于构件技术的规则引擎
2.1 面向构件技术面向构件作为将软件系统分解与隔离的一种方法,是一个非常通用的概念。
它解决了企业应用的结构问题。
通过面向构件技术,一个系统是按照个性化的需求,从一个比较完善、比较成熟的组件库组装而成,大大提高了系统的成功率、稳定性、适应性和逐步发展性。
通过面向构件对业务的封装和积累能够保护现有投资,有助于高效的表达业务,提高软件的复用程度,进而表现其内在的组织敏捷性。
2.2 构件技术中引入规则引擎使用面向构件技术我们需要:应用系统的核心业务逻辑提炼成的构件具有高可复用率;制作构件时应使其尽量覆盖涉及的主题,并考虑潜在的用户需求及将来的变化;应尽量将复杂的功能封装为构件。
但是由于业务逻辑的复杂性以及多变性,现在大多数的构件平台仅能提供较低粒度的构件,使得开发人员需要花大量尽力来定制开发业务逻辑层面的构件,而且很难复用和维护。
因此要使构件能够面向业务层面就要通过规则引擎把“可变化”的业务逻辑与程序代码分离开来。
2.3 实施方案在构件技术的基础上,规则引擎的实现方式是分布型的。
也就是说,规则调用和规则的执行是分布式的。
首先,规则执行以服务的形式存在。
规则服务的实现如下:
①以规则作为参数,创建规则引擎;②为规则引擎添加数据;③执行规则,获得返回。
其次,构件中只嵌入调用规则服务的代码,没有直接嵌入规则引擎。
规则服务的调用如下:
①准备规则集需要的数据;②指定被使用的规则集名称;③调用规则服务、执行规则并获得返回;④处理返回结果。
最后,规则是在业务模型之上定义的,利用可视化规则开发工具,Web规则编辑器定义规则,从而简化规则的编写过程。
可视化规则开发工具定义好的规则最终形成规则库存储在构件之外,可以存储在数据库或文件系统中。
其中,将规则存储在构件之外的另一个好处就是能够实现规则的复用。
Rule Repository Deployer
Administration Deployment
3 结束语
在构件技术的基础上实现的规则引擎不但可以避免业务逻辑组件的复杂性,而且使业务逻辑的开发不再完全依赖程序开发员,减少构件的开发数目,从而降低构件的维护成本。
另外,通过将业务规则剥离出程序之外,可以实现规则本身的管理性,形成业务规则管理和执行的集成系统,方便了与宿主系统的集成。
参考文献:
[1]黄柳青,王满红.构件中国——面向构件的方法与实践[M].北京:清华大学出版社,2006.
[2]何仁杰,梁冰.用规则引擎替换代码[DB/OL]./csdnloading/archive/2005/02/02/277276.aspx.2004.
[3]李国乐.Java规则引擎与其API[DB/OL]./developerworks/cn/java/j-java-riles/#IDACC WOB.07/2005.
[4]庞伟正,金瑞琪,王成武.一种规则引擎的实现方法[J].哈尔滨工程大学学报,2005.
[5]陶晓俊,朱敏.基于规则引擎的企业服务开发模式[J].计算机技术与发展,2008.2.
[6]王李軍,陶明亮,张曙,莫琪叶.面向业务规则引擎研究[J].计算机工程,2007.12.。