开源规则引擎
开源的规则引擎整体分为下面几类:
-  通过界面配置的成熟规则引擎,这种规则引擎相对来说就比较重,但功能全,比较出名的有:drools, urule。 
-  基于jvm脚本语言,互联网公司会觉得drools太重了,然后会基于一些jvm的脚本语言自己开发一个轻量级的规则引擎,比较出名的有,groovy(开源风控radar),aviator,qlexpress。 
-  基于java代码的规则引擎:基于jvm脚本语言会有一些语法学习的成本,所以就有基于java代码去做的规则引擎,比如通过一些注解实现抽象的方式去做到规则的扩展,比较出名的有: easy rules。 
这边重点介绍三款产品drools、qlexpress和groovy,先介绍下基础能力和优劣势,后面再进行详解。
Drools
drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。
drools官网地址:https://drools.org/
drools源码下载地址:https://github.com/kiegroup/drools
在项目中使用drools时,即可以单独使用也可以整合spring使用。如果单独使用只需要导入如下maven坐标即可:
<dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.6.0.Final</version>
</dependency>
如果我们使用IDEA开发drools应用,IDEA中已经集成了drools插件。如果使用eclipse开发drools应用还需要单独安装drools插件。
drools API开发步骤如下:

Groovy
Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
Groovy是从Java衍生出来的,并且运行在Java虚拟机上的语言.其目标是不管作为脚本语言,还是编程语言,都可以简单、直接使用。Groovy 也并不会替代 Java,而是相辅相成、互补的关系,具体使用哪门语言这取决于要解决的问题和使用的场景。
 
QLExpression
由阿里的电商业务规则、表达式(布尔组合)、特殊数学公式计算(高精度)、语法分析、脚本二次定制等强需求而设计的一门动态脚本引擎解析工具。
 在阿里集团有很强的影响力,同时为了自身不断优化、发扬开源贡献精神,于2012年开源。
QLExpress脚本引擎被广泛应用在阿里的电商业务场景,具有以下的一些特性:
1、线程安全,引擎运算过程中的产生的临时变量都是threadlocal类型。
 2、高效执行,比较耗时的脚本编译过程可以缓存在本地机器,运行时的临时变量创建采用了缓冲池的技术,和groovy性能相当。
 3、弱类型脚本语言,和groovy,javascript语法类似,虽然比强类型脚本语言要慢一些,但是使业务的灵活度大大增强。
 4、安全控制,可以通过设置相关运行参数,预防死循环、高危系统api调用等情况。
 5、代码精简,依赖最小,250k的jar包适合所有java的运行环境,在android系统的低端pos机也得到广泛运用。
规则引擎对比
常见能力对比如下:
| 规则引擎 | QLExpression (ms) | groovy(ms) | drools(ms) | 
|---|---|---|---|
| 动态规则 | 支持 | 支持 | 支持 | 
| 灵活性 | 低 | 高 | 中 | 
| 复杂度 | 低 | 高 | 中 | 
| 上手 | 快 | 慢 | 慢 | 
| 使用广度 | 中 | 中 | 高 | 
执行性能对比如下:
| 执行次数\规则引擎 | QLExpression (ms) | groovy(ms) | drools(ms) | 
|---|---|---|---|
| 100w | 1590 | 171 | 364 | 
| 1000w | 12551 | 709 | 3530 | 
| 5000w | 60230 | 3516 | 19414 | 
三种规则引擎都支持动态规则,可以通过提供的api动态扩展规则
- 灵活性上看groovy和drools支持脚本编写方式,市面上有常见的包装方案;
- 其中QLExpression在中小企业应用较广泛对熟悉java的选手来说基本开箱即用;
- groovy和drools作为规则引擎在互联网企业应用较多,有一定的学习和培训成本;
- drools追随者更多适用面积更广泛;