Drools等规则引擎技术对比分析

项目中需要设计开发一个规则引擎服务,于是调研了业界常用的规则引擎。

常见的规则引擎如下:

  Ilog JRules 是最有名的商用BRMS;
  Drools 是最活跃的开源规则引擎;
  Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;

  Visual Rules(旗正规则引擎)国内商业规则引擎品牌,可以认为是ILOG的本土版本。

  Mandarax是一个规则引擎的纯Java实现。基于反向推理(归纳法)。

 

对比如下

1、四者都主要使用foreward-chaining的Rete引擎,按优先级匹配条件语句,实施规则语句。规则实施后会激发事实的变化,引擎又会重新进行条件匹配,直到不能再匹配为止,Rete的算法保证了服从的最高。

(1). Rete 算法的特点:

a. Rete 算法是一种启发式算法,不同规则之间往往含有相同的模式,因此在 beta-network 中可以共享 BetaMemory 和 betanode。如果某个 betanode 被 N 条规则共享,则算法在此节点上效率会提高 N 倍。

b. Rete 算法由于采用 AlphaMemory 和 BetaMemory 来存储事实,当事实集合变化不大时,保存在 alpha 和 beta 节点中的状态不需要太多变化,避免了大量的重复计算,提高了匹配效率。

c. 从 Rete 网络可以看出,Rete 匹配速度与规则数目无关,这是因为事实只有满足本节点才会继续向下沿网络传递。

(2). Rete 算法的不足:

 a. 事实的删除与事实的添加顺序相同, 除了要执行与事实添加相同的计算外, 还需要执行查找, 开销很高 。

        b. RETE 算法使用了β存储区存储已计算的中间结果, 以牺牲空间换取时间, 从而加快系统的速度。然而β存储区根据规则的条件与事实的数目而成指数级增长, 所以当规则与事实很多时, 会耗尽系统资源。

(3)针对 Rete 算法的特点和不足,在应用或者开发基于 Rete 算法的规则引擎时,改进方向

a. 容易变化的规则尽量置后匹配,可以减少规则的变化带来规则库的变化。

b. 约束性较为通用或较强的模式尽量置前匹配,可以避免不必要的匹配。

c. 针对 Rete 算法内存开销大和事实增加删除影响效率的问题,技术上应该在 alpha 内存和 beata 内存中,只存储指向内存的指针,并对指针建里索引(可用 hash 表或者非平衡二叉树)。

d. Rete 算法 JoinNode 可以扩展为 AndJoinNode 和 OrJoinNode,两种节点可以再进行组合 。

 

2、Ilog JRules  和 Visual Rules  是商业版

3、Drools vs ILog vs Jess vs Mandarax

 

猜你喜欢

转载自www.cnblogs.com/xuzhujack/p/10975336.html