技术组件调研模板V1(以 Drools 为例)
初步认知
以 Drools 为例子
这个组件是什么,有什么功能?
Drools 是一个基于Charles Forgy’s的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
Drools相关概念
- 事实(Fact):对象之间及对象属性之间的关系
- 规则(rule):是由条件和结论构成的推理语句,一般表示为if…Then。一个规则的if部分称为LHS,then部分称为RHS。
- 模式(module):就是指IF语句的条件。这里IF条件可能是有几个更小的条件组成的大条件。模式就是指的不能在继续分割下去的最小的原子条件。
Drools通过 事实、规则和模式相互组合来完成工作,drools在开源规则引擎中使用率最广,但是在国内企业使用偏少,保险、支付行业使用稍多。
能解决什么问题?
「规则引擎主要完成的就是将业务规则从代码中分离出来。」 在规则引擎中,利用规则语言将规则定义为if-then的形式,if中定义了规则的条件,then中定义了规则的结果。规则引擎会基于数据对这些规则进行计算,找出匹配的规则。这样,当规则需要修改时,无需进行代码级的修改,只需要修改对应的规则,可以有效减少代码的开发量和维护量。
这个组件对比竞品有什么优势和劣势?
易用性、广泛性、高性能、高可用、高一致性等方面。
Java开源的规则引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最为广泛并且开源的是Drools。
规则引擎优点
- 声明式编程
- 逻辑和数据分离
- 速度和可扩展性
- 知识集中化
规则引擎缺点
- 复杂性提高
- 需要学习新的规则语法
- 引入新组件的风险
原理了解
这个组件实现机制是什么样的?
Drools规则引擎的结构示意图:
在 Drools 中,规则被存 放在 Production Memory(规则库)中,推理机要匹配的 facts(事实)被存在 Working Memory(工作内存)中。当时事实被插入到工作内存中后,规则引擎会把事实和规则库里的模式进行匹配,对于匹配成功的规则再由 Agenda 负责具体执行推理算法中被激发规则的结论部分,同时 Agenda 通过冲突决策策略管理这些冲突规则的执行顺序。
Drools 中规则冲突决策策略有
- 优先级策略
- 复杂度优先策略
- 简单性优先策略
- 广度策略
- 深度策略
- 装载序号策略
- 随机策略
使用了什么算法\模型\框架?
Rete 算法
最初是由卡内基梅隆大学的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法 , 该算法提供了专家系统的一个高效实现。自 Rete 算法提出以后 , 它就被用到一些大型的规则系统中 , 像 ILog、Jess、JBoss Rules 等都是基于 RETE 算法的规则引擎。Rete 在拉丁语中译为”net”,即网络。Rete 匹配算法是一种进行大量模式集合和大量对象集合间比较的高效方法,通过网络筛选的方法找出所有匹配各个模式的对象和规则。
其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。Rete 算法可以被分为两个部分:规则编译和规则执行。当Rete算法进行事实的断言时,包含三个阶段:匹配、选择和执行,称做 match-select-act cycle。
Drools 中的 Rete 算法被称为 ReteOO,表示 Drools 为面向对象系统(Object Oriented systems)增强并优化了 Rete 算法。
上手使用
使用场景有哪些?
从Drools规则引擎的使用模版来看,输入、输出和判断三个中,判断是变化的,而输入和输出是基本固定的,所以适用的场合可以分为下面几种:
- 输入和输出的参数不变,即:规则文件接收固定的参数,产生固定的输出。比如:根据货物重量计算运输价格,输入参数是货物重量,规则根据级差价格表,输出运输价格。
- 输入和输出的JavaBean Object不变,即:规则文件接收固定类型的JavaBean,产生固定类型的JavaBean。比如:根据顾客信息和当前购物信息计算优惠价格,输入参数是顾客当前的类别(VIP客户等)和当前购物的种类、数量,规则根据顾客类别、商品种类和购买数量输出优惠价格。
所以,规则引擎适用于「问题确定」的场景,并且存在比较复杂的业务规则并且业务规则会「频繁变动」的系统。比如:
- 风险控制系统(风险贷款、风险评估)
- 反欺诈项目(银行贷款、征信验证)
- 决策平台系统(财务计算)
- 促销平台系统(满减、打折、加价购)
在项目中使用上需要怎么做?
TODO
在使用过程中容易踩到哪些坑?
TODO
参考资料
网络文章、杂志专栏、论文等
https://blog.csdn.net/Taobaojishu/article/details/108231696