Drools规则引擎介绍

Table of Contents

1 规则引擎介绍

1.1 传统业务编程与申明式编程

传统:if/else 声明式:规则1、规则2、规则3

声明式编程,与业务需求分析类似,每个规则代表我们的一个需求。更可读,与需求更接近

drools02.png

1.2 业务规则-面临的问题

  • 业务规则、商业逻辑复杂
  • 业务规则经常变换
  • 24小时不停机,实时修改商业逻辑

1.3 规则引擎解决的问题

  • 申明式编程–Rule Engine 允许你说“做什么”,而不是“怎么去做”
  • Rule系统能解决非常困难的难题
  • 逻辑和数据分离
  • 快捷和灵活
  • 易于理解
  • 可靠的性能:基于RETE算法
  • 将需求转化成规则

1.4 什么是规则引擎

  • 是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离处理
  • 规则引擎的核心就是获取knowledge(知识)
  • 应用knowledge到特定的数据上(fact)
  • 使用“production rules(产生式规则)”
    • IF <conditions> THEN <actions>
    • Rule表达逻辑(任何逻辑都可以用这种方式表达)

1.5 什么是规则

  • 一个rule有conditions,和actions组成。当所有的conditions匹配,rule可能是“fire”
  • Conditions即LHS(left hand side)
  • Actions即RHS(right hand side 或 consequence)
  • Rule操作应用程序中的数据(fact)

drools03.png

1.6 术语

  • Rule engines(比如Drools)使用正向或者反向链(或者混合使用)
  • 正向链从事实到结论的推理。rule在LHS conditions匹配的时候执行。Actions可以改变facts,并可能导致新的rule被fire
  • 反向链则是指从假设,即要证明的结论,到事实的推理

1.7 推理引擎

  • 规则系统的大脑实际上就是一个推理引擎,用于匹配facts和rules
  • 推理引擎将事实、数据与产生链规则进行匹配(模式匹配),以推出结论
  • 当匹配被找到,rule actions被fire
  • Actions
    • 经常会改变facts的状态,或者在应用上执行一些“外部”action

drools04.png

1.8 推理例子

  • 在“People”的数据集(facts)查找并匹配所有的男性
  • Drools:People(sex==“male”)
  • SQL:select * from People where sex = ‘male’

drools05.png

1.9 正向链

drools06.png

1.10 何时使用规则引擎

  • 当没有更让人满意的“传统”方案
  • 当遇到以下问题
    • 太复杂
    • 没有已知的算法
    • 太易变

2 JBoss Drools介绍

2.1 JBoss Drools

  • Drools是一个业务逻辑集成平台,基于JAVA和RATE算法的产生式规则引擎实现,是Red Hat旗下的开源产品
  • Drools历史
    • 2001年,Doorls问世,基于线性蛮力搜索
    • 在2.0版本后,又基于Rate算法进行了重写,提高了Drools的性能,规则文件以XML为主
    • 在3.0版本,引入了.drl文件格式,它是一种领域特定语言(DSL)专门针对规则编写
    • 在5.0版本,引入了Drools Funsion(复杂性处理)/Flow rule等重要功能模块

2.2 Drools组成模块

  1. 基于网页的规则管理系统(Drools Guvnor(Business Rules manager))
  2. 规则引擎(Drools Expert(rule engine))
  3. 流程引擎(jBPM 5(process/workflow))
  4. 复杂事件处理CEP(Drools Fusion(eventprocessing/temporal reasoning))
  5. 解决分配和调度类型的问题(OptaPlanner(automated planning))

2.3 Drools5.x特性

  • 声明式业务规则
    • 避免硬编码业务逻辑到应用中
    • Rule可以随时改变而不需要改变java代码和重新编译
    • 能解决复杂的问题,易于整合
  • Eclipse Rule designer
    • Rule创建向导
    • 语法编辑器(自动补全、颜色区别)
    • 调试:audit log,working memory view,agenda view
  • 多种规则格式
    • DRL
    • DSL
    • Decision Tables-电子表格
    • XML

2.4 Drools IDE

插件的形式

2.5 DSL编辑器

2.6 业务规则编辑器

drools07.png

3 Drools开发环境搭建与创建样例

— 开发包下载

  • 插件下载
  • 添加Drools运行环境
  • 利用ide向导,创建样例

4 案例解析–Golfing Configuration

  • 有4个高尔夫球手从左到右站在一行
    • Fred右边的高尔夫球手穿蓝色裤子
    • Joe是排在第二个
    • Bob穿格子裤子
    • Tom没有排在第一和第四位,并且他没有穿橙色的裤子

5 总结

  • Rules技术提供了一种新的方式用于创建业务应用系统,通过“声明式”的rule语言写业务逻辑,而不是传统的程序语言
  • Rule engine非常适合解决复杂问题,且在没有更好的其他算法的时候
  • Rule engine非常适合用来表述业务逻辑
  • JBoss Drools的环境搭建
  • Drools的实现案例