什么是规则引擎?
- 是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来
- 规则引擎的核心就是获取knowledge(知识)
- 应用knowledge到特定的数据上(fact)
- 使用 “production rules(产生式规则)” IF <conditions> THEN <actions> Rule表达逻辑(任何逻辑都可以用这种方式表达)
什么是规则?
- 一个rule由conditions,和actions组成。当所有的conditions匹配,rule可能“fire” Conditions即LHS(left hand side)
- Actions即RHS(right hand side或者consequence)
- Rule操纵应用程序中的数据( fact )
术语:
- Rule engines(比如Drools)使用正向或者反向链(或者混合使用)
- 正向链从事实到结论的推理。rule在LHS conditions匹配的时候执行。Actions可以改变facts,并可能导致新rule被fire。
- 反向链指则是从假设,即要证明的结论,到事实的推理
推理引擎:
- 规则系统的大脑实际上就是一个推理引擎,用于匹配facts和rules
- 推理引擎将事实、数据与产生式规则进行匹配(模式匹配),以推出结论
- 当匹配被找到,rule actions被fire
- Actions—经常会改变facts的状态,或者在应用上执行一些“外部”action
正向链
何时使用规则引擎
- 当没有更让人满意的“传统”方案
- 当遇到以下问题:
太复杂
没有已知的算法
太易变
JBoss Drools
Drools是一个业务逻辑集成平台,基于JAVA和RATE算法的产生式规则引擎实现,是Red Hat旗下的开源产品.
Drools历史
2001年,Drools问世,基于线性蛮力搜索
在2.0版本后,又基于Rate算法进行了重写,提高了Drools的性能,规则文件主要以XML为主
在3.0版本,引入了.drl文件格式,它是一种领域特定语言(DSL)专门针对规则编写
在5.0版本,引入了Drools Funsion/Flow rule等重要功能模块
Drools组成模块
总结:
- Rules技术提供了一种新的方式用于创建业务应用系统,通过“声明式”的rule语言写业务逻辑,而不是传统的程序语言
- Rule engine非常适合解决复杂问题,且在没有更好的其他
- Rule engine非常适合用来表述业务逻辑