基于Drools的分布式业务规则引擎的设计与实现Word格式.docx
- 文档编号:19296362
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:55
- 大小:1.11MB
基于Drools的分布式业务规则引擎的设计与实现Word格式.docx
《基于Drools的分布式业务规则引擎的设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《基于Drools的分布式业务规则引擎的设计与实现Word格式.docx(55页珍藏版)》请在冰豆网上搜索。
与我一同工作的同志对本研究所做的贡献均已在论文中做了明确的说明并表示了谢意。
若有不实之处,本人愿意承担相关法律责任。
学位论文题目:
基于Drools的分布式业务规则引擎的设计与实现
作者签名:
日期:
年月日
摘要
传统的软件工程开发中,业务逻辑通常会采用硬编码的方式写到应用程序中,当业务逻辑更改时,就会付出高昂的代价。
业务规则引擎的提出和引入,使得业务逻辑从复杂的应用系统中剥离出来。
目前,市场上的业务规则引擎系统逐渐成熟,它们在满足需求、保证性能的前提下,尽可能的追求灵活易用和功能丰富。
但是它们大都是单机部署,运算能力很难扩展。
伴随着互联网的快速发展,业务数据量也迅猛增长,当面对如此巨大规模的数据时,大多数规则引擎就会显得无能为力了。
针对这个问题,本文设计并实现了一款基于Drools的分布式业务规则引擎系统,用户可以采用自然语言的方式进行规则的配置。
本系统采用非结构化数据库技术,满足规则模型多变、不可预估的需求。
此外,本系统提供了多种规则表现形式,使不同类型规则都能通过本系统完成描述,为企业各个部门提供了统一的规则维护管理平台。
通过消息通信机制和函数模块的独立配置维护,使系统可以根据设置执行多重任务,并可灵活扩展系统资源。
本系统采用分布式系统架构,使得系统的运算能力具有可伸缩性,可以根据系统中不同业务的实际需求,分配适当数量的运算节点,并可随时的添加或者减少运算节点的数量。
本文首先介绍了业务规则引擎的研究背景、系统相关技术以及系统需求分析。
然后以此对系统进行整体的设计和详细设计,并且对系统各个功能模块的实现进行了详细的说明。
通过单元测试和集成测试,验证了系统的可用性。
最后,本文总结了系统设计和实现过程,并对系统之后的优化工作进行了说明。
关键词:
规则引擎;
分布式系统;
大数据
Abstract
Inthetraditionalsoftwaredevelopment,businesslogicisusuallyhardcodedinapplications.Whenthebusinesslogicchanges,itwillpayahighprice.Withintroductionofrulesengine,businesslogicisseparatedfromthecomplexapplicationsystems.Atpresent,theexistingrulesenginesaregraduallymature.Withtheprerequisiteofmeetingtheneedsandensuringtheperformance,theytrytobeasflexibleaspossibleandproviderichfunctionality.Buttheyaremostlydeployedinstand-aloneandcomputingpowerishardtobeextended.
WiththerapiddevelopmentoftheInternet,theamountofbusinessdataisalsogrowingrapidly.Facedwithsuchahugescaleofdata,mostoftherulesenginewillappearpowerless.Aimingatthisproblem,thisthesisdesignsandimplementsadistributedbusinessruleenginebasedonDrools.Userscanconfiguretherulesinnaturallanguageinoursystem.Thesystemusesunstructureddatabasetechnologytomeetthedemandofchangeableandunpredictablerulemodel.Andthesystemprovidesmultiplerulerepresentation,sothatdifferenttypesofrulescanbedescribedthroughthesystem.Itprovidesaunifiedmanagementplatformforbusinessrulesofanenterprise.
Basedonmessagecommunicationmechanismandtheindependentfunctionmanagementmodule,itcanperformmultipletasksaccordingtothesetting,andsystemresourcescanbeexpandedflexibly.Throughthedistributedarchitecture,thesystemhasascalablecomputingpower.Accordingtotheactualneedsofdifferentbusiness,itallocatesappropriatenumberofcomputingnodes,andaddsorreducesnodesatanytime.
Firstly,thisthesisintroducesresearchbackgroundofrulesengine,relatedtechnologiesandsystemrequirementsanalysis.Thenitdescribestheoveralldesign,detaileddesignandtheimplementationofeachfunctionmoduleindetail.Throughthemoduletestandintegrationtest,itverifiestheavailabilityofoursystem.Finally,itsummarizesthedesignandimplementationofoursystemanddescribeshowtooptimizethesysteminthefuture.
KeyWords:
RuleEngine;
DistributedSystem;
BigData
1绪论
1.1研究背景
二十世纪四十年代,计算机的问世标志着对人类社会影响空前的信息革命的到来。
随着信息科学的发展,计算机已经被广泛地应用于社会的角角落落,并成为人们生活的必需品。
计算机应用系统的发展很大程度上代表了人类信息科学的发展速度,60年代早期,计算机应用系统大都采用Master/Terminal模式,即多个终端通过一个分时系统来共享宿主主机的数据处理结构,系统中的所有数据处理工作都是在宿主主机上完成的。
随着局域网技术的发展,计算机已经可以通过分散式的网络系统来共享公共数据。
在之前的所有的系统模式中,数据和逻辑处理都是紧密的混合在一起的。
90年代初,作为人类信息系统发展历史上一座重要里程碑,客户机/服务器模式的出现,使得系统的数据管理和应用程序分离开来。
随着信息技术的高速发展,人类进入了快节奏的生活,随着市场的瞬息万变,企事业单位需求、业务流程不断的变化和增加。
一个崭新的问题出现在了技术开发人员面前:
如何开发一套应用系统能够在尽可能长的时间内尽可能多的满足企业、市场、社会各种需求的变化呢?
为了适应当今社会的快速变化,企事业单位必定要进行各项计划和措施的调整,业务逻辑必然会频繁的进行改变,对技术人员来说将业务逻辑的变化实时的反映到应用系统中是一件必须解决的问题。
传统上为了达到这一目的,通常会采取以下两种策略[1]:
(1)技术人员直接修改应用系统的源码。
该方法使得每一次业务逻辑的改变都需要经过功能需求分析、系统设计、系统开发、系统测试等软件工程的各个环节。
该策略使得对原有应用进行修改时工作量大、周期长、成本高的同时,也加剧了系统的不稳定性。
业务人员以及技术人员都会在该过程中做大量重复的工作,无法使生产力得到充分的利用。
当然,这种策略完全不能使得业务逻辑的变化适时地反应到系统中,因为系统代码修改往往具有滞后性。
(2)在应用系统开发过程中,通过使用大量的配置文件或配置参数。
通过修改配置文件或者配置参数可以使得系统拥有一定的灵活性,但是要依靠该方法去灵活地修改系统的业务逻辑确实十分困难的。
而且由于存在大量的配置项,这对系统的运维以及之后的版本升级又提出了一项巨大的挑战。
业务规则引擎的出现完美的解决了以上问题,使得技术人员能够将业务逻辑从复杂的应用系统中抽象出来,并且用一种简单易懂的语言来描述复杂的业务逻辑[2]。
使用业
务规则引擎的应用系统,数据保存在系统的对象中,业务逻辑则保存在规则文件中,如果业务逻辑发生变化,只需对规则文件进行更改即可,进而改善了将业务逻辑混合在代码中的局面,大大降低了修改业务逻辑的代价,将技术人员真正的从修改代码中解放出来[3]。
规则引擎的引入,大大加快了企事业单位响应变化的速度。
目前规则引擎已经广泛应用在电子商务、风险防控、诚信评估等各个行业[4]。
当前在国内外有很多开源或者商用的规则引擎实现,以下将介绍几种比较主流的规则引擎项目:
作为一个开源的类库,Mandarax[5]为使用者方便的进行类库的定义、管理等提供了基础。
它使用反向推理法[6],使得其很适合在拉模式下使用。
反向推理法使其使用内存较少,但计算速度也很慢。
Jess是一个商用规则引擎项目,它是美国Sandia国家实验室开发出来的一款很成熟且功能强大的规则引擎,采用类CLIPS描述语言[7]来进行业务规则的描述,但是由于CLIPS描述语言的生涩难懂,使得其对使用人员要求的门槛较高。
同样作为商业规则引擎的JRules[8]是ILOG公司开发的一款规则引擎产品。
它提供了完整的规则管理系统,为技术人员提供了丰富的工具和功能来进行相关应用的开发。
同时,它还有出色的跨平台能力业务和接近自然语言的业务规则语言。
当前,市场上的业务规则引擎系统逐渐成熟,它们在满足需求,保证性能的前提下,尽可能的追求灵活易用和功能丰富。
伴随着互联网的快速发展,业务数据量也迅猛增长,当面对如此巨大规模的数据时,大多数规则引擎就会显得无能为力了[9]。
开发使用配置足够灵活、运算能力足够强大的分布式业务规则引擎已经成为必然的趋势。
Drools[10]作为当今最流行的开源规则引擎之一,其规则语言的简单易懂,规则表达的自然灵活,运行部署高效快捷,管理调整异常方便使得其得到了广泛的应用。
作为本次课题的成果,本文设计并实现了一套基于Drools的分布式业务规则引擎系统,为用户提供了一个能够使用自然语言达、功能可扩展的规则配置平台,并且通过适当的分布式架构以及消息队列服务对系统各个模块进行解耦,使系统各个模块可单独部署。
当系统由于业务量的增长而出现性能瓶颈时,只需要对相应的功能模块进行扩展即可保证整个分布式系统继续正常工作。
1.2研究目标与意义
本课题是要完成一款统一、开放、高效的分布式业务规则引擎管理系统,以消除跨业务管理壁垒,支撑以标准化、规范化的方式在统一的系统平台上完成不同业务规则的定制和管理。
在规则引擎软件系统实施的过程中,借助于规则全生命周期管控制度和流程,改善和提高现有系统的能力,打造以规则引擎为核心的生态环境,从而可以灵活支撑企事业单位未来业务发展的业务规则需求。
本系统在Drools的基础对其进行了可视化封装,使用户可以用自然语言进行规则的描述,并且提供了函数模板入口,使得用户可以根据实际业务的需求配置具有特定功能的函数,从而使得系统的功能可以得到无限的扩展。
系统为了方便用户在不同的场景使用业务规则引擎,还提供了不同形式规则配置方式(目前支持三种方式,分别是规则集、评分卡、规则流)。
在本系统中,用户可以通过对规则参数的提取并集中管理方式,来更加灵活和方便的进行规则配置。
另外系统实现了规则整体复制以及规则元条件的复制来改善业务人员使用业务规则引擎配置规则时的用户体验。
本系统作为分布式的架构系统,通过相应的资源调度,使得系统的运算能力具有可伸缩性,可以根据系统中不同业务的实际需求,分配适当数量的运算节点,并可随时的添加或者减少运算节点的数量,以最大程度的利用计算机资源。
随着信息化的迅速发展,基于业务规则引擎的开发模式使得企事业单位应对市场变化的能力得到了极大的提高,因而作为一款配置界面友好,功能可扩展,性能可伸缩的分布式业务规则引擎,具有很高的实用价值。
1.3本文结构
本文按照以下的组织结构进行课题成果的介绍:
第一章:
绪论。
主要对业务规则引擎的研究背景进行介绍,并且介绍了本文进行研究的目标和意义。
后面将对该业务规则引擎系统的实现过程进行介绍。
第二章:
系统实现技术。
对课题实现过程中用到的相关技术进行了介绍。
比如开源规则引擎Drools的介绍,ThinkPHP框架以及MongoDB数据库的介绍等。
第三章:
需求分析。
从功能性需求和非功能性需求两方面对需求进行详细说明。
第四章:
总体设计与架构。
根据需求分析进行系统的总体设计,并对系统的整体架构以及数据库设计进行详细的说明。
第五章:
系统详细设计。
对系统各个功能模块的实现进行详细的说明。
此外对业务规则引擎系统中如何与外部应用进行数据交换进行了介绍。
第六章:
系统实现和测试。
对各个模块的实现过程、页面以及关键代码进行了详细的介绍说明,之后经过单元测试和集成测试对系统进行验证。
第七章:
结论。
对本文进行总结,并根据自己在开发测试、以及用户交流等过程中的认识和思考,对系统之后的优化进行了说明。
2系统实现技术
2.1Drools介绍
Drools即JbossRules,是Jboss门下的一个开源的业务规则引擎项目。
在没有使用规则引擎的项目中,开发人员需要将复杂多变的规则采用硬编码的方式写入程序中,在这样的项目中,如果要对相应的规则进行修改,将是一件非常痛苦的事情,特别是对于已经上线的项目。
业务规则引擎就解决了这个问题,它将规则从硬编码中解放出来,采用规则脚本的形式,使得在生产环境中更改规则时候,不用修改代码就能立即生效。
Drools具有易于调整管理、易于阅读以及运行效率高等优点,对于业务人员来说,就可以很轻松地对配置的业务规则进行阅读。
在Drools的工作过程中,需要传递Fact对象,所谓的Fact对象即业务数据对象,它是一个普通的javabean。
可以在Drools规则中对当前的对象进行各种操作,以及调用其提供的方法,Drools规则通过使用原有对象的引用,进而对业务数据进行各项操作。
Drools使用CharlesForgy于1979年提出的RETE算法[11],它是一种前向规则快速匹配算法[12]。
RETE算法的核心思想是尽可能多的保留匹配过程中的所有信息,进而使用空间换时间的方式来提高执行的效率。
RETE算法进行快速匹配主要是利用了基于规则的系统的两个重要特性:
(1)时间冗余性:
在规则运行周期中,Drools运行内存中内容的变化是很缓慢的,即与事实整体相比,只会有很少量的新增事实,这样只需要在运行周期内记住哪些事实是已经碰撞的,并且记录碰撞结果。
在对业务数据进行规则碰撞时,只需要考虑新增事实对规则碰撞的影响即可。
(2)结构相似性:
很多规则都会拥有相似的模式。
2.2Web前端技术
在前端展现上业务规则引擎采用浏览器/服务器模式的瘦客户端模式[13]。
纵观web前端开发领域,HTML、CSS、Javascript这三门语言正在并将长期主导着PC浏览器端甚至是移动端的前端展示和功能实现。
HTML,即超文本标记语言。
所谓的“超文本”指的是html文件中不止能进行文本的编写,它还可以兼容图片、视频、音频等非文字元素。
在HTML语法中,使用者可以以标记符号的方式来进行超文本中各个元素的编辑。
日常生活中最常见的网页其实就是超文本标记语言,只不过要完成复杂的功能,它需要结合一些脚本语言,引入一些第三方组件。
因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。
HTML所具有的简易性,可扩展性,跨平台性,通用性等诸多优点,是网络快速盛行的重要原因。
CSS,即层叠样式表,它是用来对HTML或XML等进行样式控制的语言,能够对页面中的各个元素的样式进行各种精确的控制和设计。
在网页的编辑中,它可以支持用户用到的几乎所有的颜色、字体等样式,并且可以对页面对象以及模式进行编辑。
用户使用层叠样式表时候,还有可以根据自己的习惯进行相应的简写等。
强大的能力和易用特性,使得它成为当前最受欢迎的基于文本展示的样式设计语言之一。
它可以使简单的网页更加美观可用,提升互联网产品的用户体验。
Javascript,是一种弱类型,基于原型的解释性脚本语言。
目前在Web应用开发中,大部分开发人员使用Javascript来使得自己编辑的页面拥有动态功能。
JS具有基于对象,简单动态等现代高级编程语言的特点。
同时它的跨平台性,以及用于浏览器编程,注定了此门语言会受到Web开发人员的青睐。
仅今年,国内外基于Javascript衍生出来的多种新型语言或者编程思想,不仅仅丰富了Javascript本身,增强了其功能,同时给编程开发人员提供了更多的选择。
随着引擎和框架等新特性的加入,Javascript在互联网上已随处可见。
2.3开发框架介绍
本系统中选择ThinkPHP框架[14]作为系统前端后台开发的框架,选用Jfinal框架[15]作为系统后端的开发框架。
ThinkPHP框架提供了一个构建Web应用的基本框架,简化了PHP编写Web应用的流程。
为重复的繁琐复杂的代码提供了预置模块,有助于快速地进行应用开发,同时也保证了应用的稳定。
一般来说,PHP框架都符合MVC设计模式的架构。
该框架将数据层(model层),表现层(view层)和业务逻辑层(control层)分开来,进而可以更好的进行团队开发工作和项目维护。
作为一款轻量级的开发框架,它十分适合对web应用的敏捷开发以及简化企业级应用开发。
所以本系统选择了国内较大较成熟较流行的ThinkPHP框架。
Jfinal是国内开发团队开发的基于java语言的轻量级极速开发框架。
它具有开发速度快、学习简单、功能强大、扩展性强,对外提供Restful接口等诸多优点,对于技术人员来讲,它最大的优势在于开发团队是国内的,提供的官方文档都是中文,极大的缩短了技术人员学习框架的时间,使技术人员能够通过官方文档快速入门。
作为java语言的开发框架,它理所当然的拥有了java语言所具有的所有优势的同时,它还拥有python等动态语言高效的开发效率,进而彻底解放技术人员的开发生产力,改善开发体验。
Jfinal
拥有了struts2的大部分功能的同时,开发效率能够提高五到十倍之多。
2.4MongoDB数据库
MongoDB是一种非关系型数据库,使用C++语言开发。
它不同于熟知的Sqlserver、Mysql等关系型数据库,在MongoDB的表中,没有一种固定的数据结构。
作为一种非结构型数据库,支持数据结构十分松散,模式自由,使用起来异常灵活,可以储存比较复杂的数据类型。
而且他的支持查询语言非常强大[16]。
MongoDB的设计目标同时也是最突出的特点是高性能、易部署、已使用、易存储。
它面向集合存储对象类型的数据,“文档”是MongoDB中数据的基本单位,有多个键-值对形式的数据组成,键是存储文档的唯一标识,而值则是各个文档的存储信息。
多个任何形式的“文档”可以构成“集合”。
由于MongoDB会把热点数据尽可能多的缓存到内存中,来提高数据库命中率,进而改善用户体验,在Web应用中,MongoDB常作为缓存数据库来使用。
对于分布式的数据存储,他自身已有较好的支持,非常适合投入到有数以百计的服务器组成的数据库服务。
但是它也存在则很多不足,针对高度是无形的系统和传统的商业应用,或者涉及到了复杂的跨文档级联查询,其有着明显的瓶颈[17]。
2.5RocketMQ介绍
作为大型项目特别是分布式项目中,进行功能模块解耦和通信的工具,消息中间件在项目开发中占有重要的地位。
对于一些并发量比较大的系统,消息中间件就更不可忽视了,它像一个蓄水池一样将核心应用产生的消息洪峰进行缓冲削弱,进而保证了在前端流量过载的情况下,后端应用能够正常工作[18]。
在本系统中,选择使用阿里巴巴开源的分布式、队列模型的一款消息中间件:
RocketMQ。
RocketMQ能够支持消息的有序消费,很适合做调度服务的中间件,因为大部分调度服务的命令要求按照严格的先后顺序执行。
此外,作为淘宝的核心消息中间件,它每天都要承受百亿次的请求,双十一购物狂欢节的流量洪峰中RocketMQ更是展现了其强大的消息堆积能力。
RocketMQ优良的分布式特性,使得其承载压力的能力可以根据需求进行伸缩,它提供了自动化工具可以使得消息队列集群中的每个节点拥有自动扩容的能力,从而使得整个系统都可以进行水平的扩展。
云计算作为新一代信息技术的核心,具有成本低廉、性能可靠、计算能力弹性等诸多优点,使得很多互联网公司、电商企业纷纷拥抱云计算,并将自己的服务应用迁移到云上[19]。
阿里巴巴集团基于RocketMQ开发上线了一款名叫ONS的消息中间件云服务,这里使用RocketMQ也大大降低了将来系统进行迁云时的代价。
3需求分析
3.1可行性分析
从用户需求上来说,通过调研,发现随着业务规模的不断扩大,很多企事业单位都面临着两个巨大的挑战:
第一,企业和组织的IT资产如何能够快速、低成本地更新以快速响应业务的变化;
第二,企业和组织如何有效管理变化中的商业逻辑。
业务规则引擎的产生主要为了应对这两大业务挑战。
自上世纪90年代起,美国和欧洲开始使用规则引擎以降低实现复杂业务逻辑组件的复杂性,降低应用程序的维护和扩展升级成本。
引入业务规则引擎有如下的优点:
将业务逻辑与复杂的应用代码进行分离;
显著提高拥有复杂业务逻辑应用的可维护性和可扩展性;
方便对系统进行敏捷或迭代开发[20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Drools 分布式 业务 规则 引擎 设计 实现