规则引擎种类及对比

一、规则引擎是什么样的

规则引擎(Rule Engine)是一种软件组件或系统,它允许开发者以业务规则的形式定义、管理和执行复杂的业务逻辑。这些业务规则可以被视为“如果-那么”(if-then)语句的集合,其中“如果”部分定义了触发规则的条件,而“那么”部分则指定了当条件满足时应执行的动作。

规则引擎的核心价值在于它将业务逻辑从应用程序代码中分离出来,使得业务规则的变化可以通过修改规则集来实现,而无需修改或重新部署应用程序代码。这样做的好处包括提高了应用程序的灵活性、可维护性和可扩展性。

二、规则引擎种类

1. 决策表规则引擎

  • 特点:主要用于处理复杂的业务逻辑,通过表格形式将条件和动作进行明确描述。它适用于处理流程中涉及多个条件分支的情况,通过决策表的形式将各种条件和结果直观地展示出来,便于理解和维护。
  • 应用场景:适用于需要处理大量条件分支和决策路径的业务场景,如金融风控、保险理赔等。

2. 脚本式规则引擎

  • 特点:通过脚本语言来实现规则的执行。它允许使用脚本语言编写业务逻辑,通过解释执行脚本的方式来处理规则。这种引擎适用于需要灵活编写复杂逻辑的场景,可以通过脚本语言实现各种复杂的计算和数据处理。
  • 应用场景:适用于需要高度灵活性和定制化的业务场景,如数据分析、科学计算等。

3. 面向对象的规则引擎(Object-Oriented Rule Engine)

  • 特点:采用面向对象的思想来实现规则的执行。它将业务规则和对象进行关联,通过对象之间的交互来实现规则的触发和执行。这种引擎适用于大型软件系统,可以很好地处理复杂的业务规则和对象之间的关系。
  • 应用场景:适用于需要处理复杂对象关系和业务逻辑的系统,如企业级应用、游戏开发等。

4. 基于事件的规则引擎(Event-Based Rule Engine)

  • 特点:通过监听事件来触发规则的执行。当系统中发生特定事件时,规则引擎会根据预设的规则进行判断和执行。这种引擎适用于需要实时响应和处理事件的场景,如金融交易、物联网等。
  • 应用场景:适用于需要实时处理事件和进行快速响应的系统,如实时监控、自动化工作流等。

5. 轻量级规则引擎

  • 特点:通常具有较小的规模、较少的依赖和较低的侵入性,同时提供易于学习的API和基于POJO的开发方式。它们支持通过表达式(如MVEL、SPEL和JEXL)定义规则,并允许从原始规则创建组合规则。

三、规则引擎选型

目前的规则引擎系统中,使用较多的开源规则引擎是Drools,另外还有商用的规则管理系统BRMS是ILOG JRules。这两款规则引擎设计和实现都比较复杂,学习成本高,适用于大型应用系统。当然还有还有付费版的URule这样优秀的规则引擎。

1.Drools


Drools 是用 Java 语言编写的开放源码规则引擎,基于Apache协议,基于RETE算法,于2005年被JBoss收购。Drools就是为了解决业务代码和业务规则分离的引擎。Drools 规则是在 Java 应用程序上运行的,其要执行的步骤顺序由代码确定,为了实现这一点,Drools 规则引擎将业务规则转换成执行树。drools优点:

1、简化系统架构,优化应用。
2、提高系统的可维护性和维护成本。
3、方便系统的整合。
4、减少编写“硬代码”业务规则的成本和风险。

​ Drools是一个业务逻辑集成平台(BLip)。它是用Java编写。它是由JBoss和红帽公司扩展支持,并实现Rete模式匹配算法的一个开源项目。

通俗地说,Drools是一种工具,使我们能够分离内部业务流程,找到逻辑和数据的集合。我们需要注意的两个重要关键词是逻辑和数据。Drools的被分成两个主要部分:编写和运行系统。

制作: 制作过程涉及创建规则文件(.DRL文件)。

运行时: 它涉及到创建工作存储器和处理活化。

优点:1.策略规则和执行逻辑解耦方便维护。

缺点:

  1. 内存占用问题
    • Drools在内存中维护一个规则网络,这个网络会存储所有已定义的规则以及每个规则的上下文信息和被匹配的对象信息。随着规则数量和对象数量的增加,内存占用也会显著增加,这可能导致在处理大量数据时遇到性能瓶颈。
    • 解决方案:可以通过优化规则网络的结构、使用增量式更新规则网络的方式减少内存占用,或者使用Drools提供的调优参数(如memoryThreshold)来设置内存阈值,当内存占用超过该阈值时触发增量更新。
  2. 不必要的规则匹配
    • Drools使用的Rete算法是一种自顶向下的算法,它会对所有规则进行匹配,即使某些规则与当前对象无关。这种全面的匹配方式会导致不必要的计算资源消耗。
    • 解决方案:可以采用基于Rete-NT算法的模式匹配引擎,该算法在匹配过程中只执行与匹配参数相关的规则,从而避免了对所有规则的匹配,提高匹配效率。
  3. 规则冲突问题
    • 当多个规则匹配同一个对象时,Drools的默认处理方式是通过对规则进行排序的方式解决规则冲突。然而,这种方式可能无法很好地进行规则重用和优化,尤其是在规则数量庞大且复杂的情况下。
    • 解决方案:可以采用基于权重与互斥关系的规则冲突解决方案,对规则进行权重分配,并定义规则之间的互斥关系。当多个规则匹配同一个对象时,根据规则的权重和互斥关系来判断哪个规则可以优先执行。

​ 由于Drools本身不提供可视化界面,所以调用方式可以分为以下两种:

创建好服务后提供api直接调用

二次开发。与前端配合(通过蚂蚁G6组件实现规则编辑,传递json格式的drl脚本),后端解析json并集成quartz或akka任务调度,使用spring kafka组件接收来自集群的数据流。

2.Ilog JRules


IBM WebSphere ILOG JRules 是目前业界领先的业务规则管理平台。与传统的由 IT 人员用硬代码来维护规则的做法不同,ILOG JRules 让业务用户能够在不依赖或者有限依赖于 IT 人员的情况下,快速创建、修改、测试和部署业务规则,以满足经常变化的业务需求。ILOG JRules 提供了一整套的工具,帮助开发人员和业务人员进行规则的全生命周期管理。

主要组件:
    1、Rule Studio(RS) 面向开发人员使用的开发环境,用于规则的建模和编写。
    2、Rule Scenario Manager 规则测试工具。
    3、Rule Team Server(RTS) 基于Web的管理环境,面向业务人员使用,用于规则发布、管理、存储。
    4、Rule Execution Server(RES) 面向运维人员使用,用于规则执行、监控。

​ JRules 规则引擎提供了 RetePlus、Sequential 和 FastPath 三种运行模式,以适应不同的应用需求,获得最优性能。在基于业务规则引擎的应用中,需要根据不同应用的特点,合理地组织和编排业务规则,选择合适的运行模式,有助于更好的发挥规则引擎的效能,但同时复杂度较高。

也就说使用的话,有以下的缺点

  1. 学习曲线较陡
    • Ilog JRules提供了丰富的功能和复杂的规则定义能力,但这也意味着它有一个相对陡峭的学习曲线。对于初学者来说,需要投入较多的时间来熟悉其规则语言、工具集以及开发流程。
  2. 依赖IBM生态
    • 自从Ilog JRules被IBM收购后,它逐渐融入了IBM的产品生态中。这意味着,要充分利用Ilog JRules的功能,可能需要与IBM的其他产品(如WebSphere、DB2等)进行集成,这可能会增加系统的复杂性和维护成本。
  3. 成本较高
    • 作为一款商业软件,Ilog JRules的授权费用可能较高,这对于一些预算有限的企业来说可能是一个考虑因素。此外,如果需要专业的技术支持和培训,也需要额外的投入。
  4. 性能调优需求
    • 在处理大规模业务规则和数据时,Ilog JRules的性能可能需要进行调优。这包括规则引擎的配置、规则集的优化以及系统的整体架构设计等方面。如果处理不当,可能会导致性能瓶颈或延迟。

3.Easy Rules


Easy Rules 是一款 Java 规则引擎,它的诞生启发自有Martin Fowler 一篇名为 “Should I use a Rules Engine?” 文章。Easy Rules 提供了规则抽象来创建带有条件和操作的规则,以及运行一组规则来评估条件和执行操作的RulesEngine API。

1. 轻量级和易于学习
  • 轻量级库:Easy Rules是一个轻量级的规则引擎,不依赖于其他复杂的框架或库。这使得它的启动时间非常快,并且在内存消耗方面非常低。
  • 易于学习的API:它提供了基于POJO(Plain Old Java Object)的开发模型,使得开发者可以很容易地学习和使用它。
2. 强大的规则定义能力
  • 基于注解的编程模型:Easy Rules允许开发者使用注解(如@Rule@Condition@Action等)来定义规则,使得规则的定义更加直观和简单。
  • 支持表达式语言:它还支持通过表达式语言(如MVEL、SPEL和JEXL)来定义规则,这提供了更灵活的规则定义方式。
  • 组合规则:Easy Rules支持从原始规则创建组合规则,如UnitRuleGroup、ActivationRuleGroup和ConditionalRuleGroup,这允许开发者构建更复杂的业务逻辑。

4.Visual Rules


旗正VisualRules是由国家科技部和财政部的创新基金支持,专门针对国内规则引擎市场空白的情况,结合国内项目的特点而开发的一款业务规则管理系统(BRMS)产品。

Visual Rules是在规则引擎基础上发展出来的一款产品,其秉承了规则引擎可以使业务逻辑的变化可以独立于程序之外的特点,同时结合国内软件项目的特点,为数据库层和界面层也提供了独立于程序之外配置的特点,因此本产品不光是一个业务规则管理系统,还是一个基于规则引擎的web快速开发平台。

​ 

是一个基于规则引擎实现的可视化定制业务逻辑的商业规则管理系统,同时也具备快速开发Java软件项目的功能。其特点主要体现在以下几个方面:

一、业务逻辑的可视化定制与管理
  • 外部管理:Visual Rules允许在程序外部对软件项目中所设计的业务逻辑进行单独管理,使得业务逻辑的变化可以独立于程序之外,降低了软件项目因业务逻辑变更而带来的维护成本。
  • 可视化开发工具:提供了类自然语言(业务人员可以理解的语言)的可视化开发工具以及在线方式的业务逻辑编辑工具,直接供业务人员修改相关逻辑,无需程序员介入,提高了业务逻辑层的可维护性和灵活性。
二、快速开发与集成
  • 快速开发:Visual Rules可以生成软件项目大部分的业务程序代码,大大节约了软件开发时间,据称能节约50%以上的开发时间。同时,它还减少了60%以上的软件维护工作量,使得软件项目更加易于管理和维护。
  • 易于集成:Visual Rules可以集成到现有的软件项目中,将软件中经常容易发生变化的部分独立出来,由规则库进行管理。这使得软件项目更加模块化,易于扩展和维护。

5.Decision Engine决策引擎

决策引擎(Decision Engine)是一款结合规则管理,规则执行,规则设置,规则测试,规则发布为一体的决策引擎系统。对于业务规则的修改,规则的结合,有很大的好处,在开发当中,直接利用决策引擎系统进行相应的快速交付。并且通过现有的技术进行相应的决策。

6.URule规则引擎

URule是一款纯Java规则引擎,它以RETE算法为基础,提供了向导式规则集、脚本式规则集、决策表、交叉决策表(PRO版提供)、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的定义、维护与发布。

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 规则引擎初步了解 5 1 为什么会有规则引擎? 5 2 什么是规则引擎? 5 3 为何要使用规则引擎? 6 3.1 声明式编程 6 3.2逻辑与数据分离 6 3.3 速度及可测量性 6 3.4 知识集中化 6 3.5 工具集成 6 3.6 解释机制 6 3.7易懂的规则 7 4 何时应当使用规则引擎? 7 5 如何使用规则引擎? 7 6 何时不要使用规则引擎 ? 8 7 规则引擎的架构和推理 8 8规则引擎的算法 10 9 Java规则引擎商业产品 10 10 Dools介绍 11 第二章. Drools 规则引擎 11 2.1. 概述 11 2.2. 编制 13 2.3. RuleBase 18 2.4. WorkingMemory 和有状态/无状态Sessions 22 2.5. StatefulSession 28 2.6. StatelessSession 29 2.7. Agenda 31 2.8. Truth Maintenance with Logical Objects 34 2.9. 事件模型(Event Model) 37 2.10. 顺序模式 41 第三章. 安装和设置(Core 与IDE) 42 3.1. 安装和使用 42 3.1.1. 依赖库 42 3.1.2. 运行时(Runtime) 43 3.1.3. 安装IDE (规则工作台) 43 3.2. 从源码进行安装 54 3.3. 源码Checkout 54 3.4. 构建 59 3.4.1. 构建源码 59 3.4.2. 构建使用手册 61 3.5. Eclipse 65 3.5.1. 产生Eclipse项目 65 3.5.2. 导入Eclipse项目 66 3.5.3. 导出IDE插件 71 3.5.4. 构建更新站点 76 第四章. 决策表 78 4.1. 在电子表格中的决策表 78 4.1.1. 何时使用决策表 78 4.1.2. 概述 79 4.1.3. 决策表如何工作 81 4.1.4. 关键字和语法 83 4.1.5. 基于决策表建立并集成电子表格 87 4.1.6. 在决策表中管理业务规则 88 第五章. 规则工作台 (IDE) 89 5.1. Introduction 89 5.1.1. 特性概要 90 5.1.2. 建立规则项目 90 5.1.3. 新建规则向导 92 5.1.4. 规则编辑器 94 5.1.5. 视图 95 5.1.6. 领域规范语言DSL 98 5.1.7. The Rete视图 100 5.1.8. 大容量DRL文件 101 5.1.9. 调试规则 102 第六章. 规则语言 103 6.1. 概述 103 6.1.1. 规则文件 103 6.1.2. 规则的构成 104 6.1.3. 保留字 104 6.2. Comments注释 106 6.2.1. 单行注释 106 6.2.2. 多行注释 106 6.3. Package 107 6.3.1. import 108 6.3.2. expander 108 6.3.3. global全局变量 108 6.4. Function 110 6.5. Rule 111 6.5.1. Rule 属性 112 6.5.2. LHS (when) 条件元素 115 6.5.3. The Right Hand Side (then) 140 6.5.4. 对自动封箱/拆箱以及元数据类型的注解 141 6.6. Query 141 6.7. Domain Specific Languages 领域特定语言 142 6.7.1. 何时使用DSL 142 6.7.2. 编辑与管理DSL 143 6.7.3. 在规则中使用DSL 144 6.7.4. 增加对fact的约束 145 6.7.5. DSL如何工作 146 6.7.6. 从头开始建立DSL 146 6.8. 规则流 147 6.8.1. 设置规则所属的规则流组 148 6.8.2. 简单的规则流 148 6.8.3. 如何建立规则流 148 6.8.4. 在你的应用程序中使用规则流 153 6.9. XML规则语言 153 6.9.1. 何时使用XML 153 6.9.2. XML 格式 154 6.9.3. 遗留的Drools 2.x XML 规则格式 159 6.9.4. Automatic transforming between formats (XML and DRL) 159 第七章:部署和测试 160 7.1. 部署选项 160 7.1.1. 使用RuleAgent部署 160 7.1.2. 使用drl源码部署 161 7.1.3. 在你的classpath中部署规则 161 7.1.4. 可部署的对象RuleBase, Package等等. 161 7.1.5. 部署模式 163 7.1.6. Web Services 166 7.1.7. 未来的构想 166 7.2. 测试 166 7.2.1. 测试框架 166 7.2.2. FIT for Rules – 一种规则测试框架 166 第八章. BRMS (业务规则管理系统) 168 8.1. 简介 168 8.1.1. 什么是BRMS? 169 8.1.2. 特性概要 170 8.2. 管理指南 170 8.2.1. 安装 171 8.2.2. 数据库配置 172 8.2.3. 安全性 173 8.2.4. 数据管理 176 8.3. 体系结构 178 8.3.1. 从源码构建 179 8.3.2. 可重用组件 180 8.3.3. 版本和存储库 180 8.3.4. 贡献 181 8.4. 快速使用指南 181 8.4.1. 快速使用指南 181 8.4.2. BRMS 概念 183 8.4.3. The business user perspective 197 8.4.4. 部署: 将规则与你的应用集成 197 8.5. 例子与教程 200 8.5.1. 保险经济折扣 200 第九章. Java规则引擎API 202 9.1 简介 202 9.2 java规则引擎API体系结构 202 9.3 规则管理API 202 9.4 运行时API 203 9.5 java规则引擎API的安全问题 204 9.6 异常与日志 205 9.7 JSR小结 205 9.8 Dools API 参考 205 9.8.1 简介 205 9.8.2. 如何使用 205 9.8.3. 参考书目 209
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值