了解JBoss Drools Engine

说一个自己比较喜欢的开源产品JBoss Drools, 很多企业内部大型项目都在使用的规则引擎
该怎么理解规则引擎,到底是个什么东西,我好像没听过,我们能用么。

它是配有内置算法及对应数据结构的计算容器,在容器内部可以写我们的业务规则或计算规则。这套算法在规则引擎内的规则数爆增的情况下,可保计算速率不会有明显影响。 光是这点,就足够有吸引力。自己纯写代码不能避免这个问题。举个例子,比如有一个场景根据受保人的信息及车况信息来计算他下一年要交多少车险。略想一下,这个问题很简单么,就是建一个Java Pojo Bean Customer类,然后去针对这个Customer类的各个属性值在哪个区间内给出对应的车险金额。那我们可以这样写:
if((customer.getAge>24||customer.age<40)and (customer.getLoyaltyLevel()==Rang.GOLD) and (customer.getCarAge()<5) and customer.getCarCrashed()==0)
{
    payment = 2000;
}
else if(...)
else if(...)
else if(...)
...
else
{

}

好,当我们写了十几、二十个的else if,这条业务才写完,然后也没错,我们意大利式面条的代码就出现了,看着有木有好揪心,有密集恐惧症的童鞋就碰也不想碰这套业务了。
那这种写法的大O记号为O(n),但如果这些业务规则写在规则引擎内,它的大O记号一定是O(1)<x<O(2),而且很有可能无限趋近于O(1),这是因为Drools engine的ReteOO+Phreak算法,可以做Node Index, Node Sharing, 对某些运算符优化,消除无用的部分匹配等等。这就是为什么规则数爆增的情况下,计算速率不会有明显影响。有兴趣可以去看看这两个算法。

那更多的业务情况不会有这么简单,更多的是几套子业务规则拼成一个完整的业务,一般情况是,先从前面的子业务规则做收纳,把可能有效的信息放在一个集合内。那在后面的业务规则再去把这个集合内的对象遍历一遍做减法,该修改的修改,该移除移除的。然后得出一个最优解。那代码就变成if()else if()...else() + for(if()else if()...else())...,好吧,这又是一份意大利面。说好编程是门艺术呢?怎么编程变成意大利烹饪技???

Drools的规则语法是声明式的,不是解释式的。只有把每个业务规则写进去,把要计算的对象放进Working Memory中,规则引擎自己帮咱们算,我们不需要写if else,不需要写for或while。因为Drools的Working memory的每个对象会被自动的去匹配所有的规则,它内部的事情就交给Drools的算法吧。我们只要告诉它有什么样的业务规则就好。Just care what to do, don‘t worry how to do.

有一次在我把基于Drool写出来的项目给一客户看,他面露喜色,这东西很巧嘛。 嘿嘿,灵巧之处还不仅仅在于此。
能线上修改业务规则,不需要启停服务。在Drools中,业务规则没有放在Java代码内,是以单独的文件形式存放,比如drl(其实是txt)、csv、excel。业务与代码,业务与数据分离了。只要咱们的Model没变,只变业务规则,比方说,正好感上公司十周年庆,全场5折,仅限本周。这个需求一下来,我们就得开始去屡我们的意大利面,然后找到修改的地方,改完以后发QA测,产品人员验收,打包上线。 然而在Drools中,负责产品的人员就可以直接做了,不需要开发人员及QA的介入。有时候产品和开发、QA得解释半天要上线的规则,开发和QA才能听明白。这一套流程下来,一两天去了。如果产品自己做,几分钟或半小时就能搞定。 在互联网+的今天,时间就是市场。

有些人可能觉得这是不是有点夸张,其实真的可以,我们只需要为产品做一个规则管理的Web系统,这套管理系统能检索到所有的规则,并能增删改查及仿真。只有产品不要求开发改数据模型,就真心没开发QA什么事了。有人说,如果我把规则直接放数据库就好了,为什么还要用Drools?很好,但是您要加的规则不是模板化的怎么办?如果是多个对象协同计算怎么办?您是不是要去修改表结构?您也别忽略了Drools 算法的可优化性及潜力。

说了Drools这么多好处,它的缺点也不能不谈,它既然内置了一套算法和数据结构,说明它就是有开销的。它能把Java代码以外的规则文件并入到JVM内一起协作,也是有开销的。但是这些开销是只是业务规则小,计算量小的时候才能体现出来是个问题,如果业务规则复杂和计算量大可以靠它的算法去优化,它的价值就体现出来了。而且这些开销仅仅是在规则加载的时候比较明显。 要不说架构是演变出来的,从来就没有一颗银弹。但是在内存这么便宜的今天,Drools这么点开销真算不上什么 。
所以不是所有的应用都适合用它,如果只有一个或几个简单的规则还是不要用了,为了几个简单的业务去学习一个新产品,不值当。它适合比较复杂的业务及业务规则需要实时修改的,它能帮上很多忙。

这里只讲了Drools Engine的粗枝大叶,Drools 还有其它的组件,下次再聊。

时间: 2024-10-09 00:53:14

了解JBoss Drools Engine的相关文章

开源业务规则引擎JBoss Drools

Drools 是什么? 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. http://www.tuicool.com/articles/3EFNV3M

jboss规则引擎KIE Drools 6.3.0 Final 教程(1)

前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5.x的一些教程,而且这些教程都是"缺胳膊少腿"的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题. 所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final的官方教程给串了起来,用于供读者使用并以此来作为入门以及相关SOA理念的推广的第一

drools 决策引擎介绍、开发

1. 背景介绍 1.1  何为规则引擎 很多企业的IT业务系统中,经常会有大量的业务规则配置,而且随着企业管理者的决策变化,这些业务规则也会随之发生更改,为了适应这样的需求,IT业务系统应该能够快速且低成本的更新,通常做法是将业务规则的配置单独拿出来,使之与业务系统保持低耦合,实现这样功能的程序,叫做规则引擎. 接受数据输入,解释业务规则,并根据业务规则作出业务决策,从而实现了将业务决策从应用程序中分离出来. 1.2  一个实际的例子 银行贷款业务中,每种贷款类型都有不同的业务规则,并且这些规则

Tomcat、Weblogic、Jboss、WebSphere之间的区别和联系

Tomcat.Weblogic.Jboss.WebSphere之间的区别和联系 Websphere: 这是ibm公司的网上的信息.更详细的信息可以访问网站: http://www-306.ibm.com/software/cn/websphere/ WebSphere 产品家族和解决方案 业务整合整合服务器提供了一套用于应用程序整合和业务流程自动化的中央基础设施. 应用服务器应用服务器提供了运行互操作应用程序的平台. IBM Support for Apache Geronimo IBM Sup

Linux服务器Jboss运行环境搭建步骤和开机自动启动脚本编写运行

Jboss运行环境:Linux+Jdk+Jboss+jsp系统 Jboss软件说明:类似于Tomcat,就是一个跑Jsp系统的环境,他的站点路径跟Tomcat类似,Tomcat存放站点文件到webapps目录下,而Jboss存放在server/default/deploy目录下. 本次开发环境和测试步骤如下: Linu操作系统:CentOS 64-bit JBoss软件下载地址http://sourceforge.net/projects/jboss/files/JBoss/JBoss-4.2.

Drools stream integration

This passage discusses how to integrate a provided drools package into datastream application. Packaging:If a maven project is provided by customer. In this case, you need to ensure that the pom file contains the following: <dependencyManagement> &l

drools6集成spring

参考文章链接 http://justsee.iteye.com/blog/1279082 http://liureying.blog.163.com/blog/static/6151352011111810916588/ http://blog.csdn.net/sinat_24910337/article/details/50587793 https://hub.docker.com/r/jboss/drools-workbench/ http://my.oschina.net/CandyDe

Activity 规则任务(businessRuleTask)

Activity 规则任务(businessRuleTask) 作者:邓家海 目前国内研究Activity规则任务businessRuleTask)的文章在网上应该不超出3篇 小觑夜漫酒作伴,破晓黎明当笑言 前言: 最近一直在研究Activity工作流的自动化,方便日后实现办公自动化奠下基础.然后查了相关资料发现Activity里面有一个规则任务(businessRuleTask),这个规则任务(businessRuleTask)可以通过制定一系列的规则来实现流程自动化.但是,当我真正去接触这个

总会有一个是你需要的

http://www.shouce.ren/post/d/id/112300 黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299 黑客入门新手特训.pdfhttp://www.shouce.ren/post/d/id/112298 黑客与设计-剖析设计之美的秘密(彩印).pdfhttp://www.shouce.ren/post/d/id/112297 鸟哥的LINUX私房菜:服务器架设篇 (第二版).pdfhttp://www.shouc