1.4 规则引擎家族
市面上的规则引擎比较多,通常分为商用版和开源版两类。常见的规则引擎有Drools、Ilog JRules(商用)、Easy Rules、Jess、Visual Rules(商用)、QLExpress等。在规则引擎选型时,企业可根据自身要求、是否付费,以及业务特性进行考量。
1.4.1 Drools
Drools是目前开源且比较活跃、比较主流的规则引擎,几乎每几个月就发布新的版本,它也是本书要讲解的规则引擎。Drools规则引擎采用Phreak算法(演绎法,在Rete算法上改进的算法),同时配套KIE系列(KIE Server、Business Central Workbench、Kogito等)辅助规则系统,支持多种形式的规则载体(比如.drl文本文件、字符串、Excel、DSL等),功能强大,成熟度高,社区活跃。但由于KIE系列的系统不仅支持Drools,还支持JBoss的其他功能,因此属于重量级的实现。如果技术团队有一定的实力,可以抛弃Drools提供的规则管理、发布等系统(重量级且不太符合国人操作习惯),直接用最核心的API配合自主研发的规则管理系统,以达到轻量级、定制化的目的。
1.4.2 Ilog JRules
Ilog JRules是一种商用规则引擎,所支持的功能比较全面,提供了比较完整的业务规则管理系统(Business Rule Management System,BRMS)。它是基于Java语言开发的,可以部署到任何J2EE项目,能够轻松集成到IDE(集成开发环境)中。
Ilog JRules提供了3种可选的运行模式:RetePlus、Sequential和FastPath。RetePlus模式也采用Rete算法,但对其进行了扩展和优化。该模式在计算和关联性类型的应用方面拥有卓越的性能,执行过程中会循环匹配规则,这一点与Drools规则引擎类似。顾名思义,Sequential模式即顺序运行模式,也就是规则引擎按照顺序判断执行规则,但不会修改工作内存(Working Memory)中的数据。该模式适用于校验和一致性等类型的应用。FastPath模式是增强的Sequential模式,顺序运行,可能会修改工作内存中的数据,但不会重复触发匹配。该模式综合了RetePlus和Sequential的特性,适合在关联性应用和校验类应用中使用。
1.4.3 Easy Rules
Easy Rules是一种基于Java的开源规则引擎,其功能相当于Drools规则引擎最核心部分的简化版本,但使用起来非常简单,学习成本低,容易上手。Easy Rules通过对规则的抽象来创建包含条件和操作的规则,同时提供了用来评估规则条件和规则执行操作的RulesEngine API。整体而言,Easy Rules有以下特点:轻量级,API易于学习,基于POJO开发,通过抽象来定义业务规则并应用,支持创建复合规则,可基于MVEL和SpEL表达式语言来定义规则。但Easy Rules并未提供相关规则管理功能,不是一款完整的BRMS产品,可在规则比较简单的场景中使用,或自主研发相应的管理、发布等系统。
1.4.4 Jess
Jess是基于Java语言编写的规则引擎,使用Rete算法的增强版本来处理规则,具有体积小、速度快、脚本语言强大(可访问完整的Java API)等特点。Jess拥有向后链接和工作记忆查询等独特的功能。Jess采用的是CLIPS程序设计语言,需要专业的开发人员才能使用。Jess也只提供规则引擎部分,并非一套完整的BRMS产品。Jess可免费用于学术用途,也可被许可用于商业用途。
除了上述规则引擎之外,还有由我国科技部和财政部的创新基金支持的Visual Rules(完整的BRMS商用产品)、用于表达式动态求值的轻量级规则引擎Aviator(基于Java)、可嵌入应用的轻量级规则引擎QLExpress(基于Java)等。纵观市面上的这些规则引擎,一些是商业化版本,一些没有完整的BRMS支撑,同时还面临技术社区活跃度、文档丰富度、解决方案成熟度等方面的问题,因此企业在选型时一定要多维度综合考虑。
想要使用开源的规则引擎,通常可从以下方案中选择:方案一是采用Drools这类支持完整BRMS的产品,但它们比较重量级,门槛较高;方案二是采用Easy Rules、QLExpress等轻量级规则引擎,不向运营人员提供规则管理;方案三是基于Drools核心部分、Easy Rules、QLExpress等,自主研发规则管理系统;方案四是完全根据自身业务,自主实现规则引擎。对于中小企业,我推荐采用方案一或方案三。如果条件允许或为满足特定要求,企业当然也可以直接购买商用版本,支持和服务都会好一些。
在了解了规则引擎的整体情况之后,我在后面章节将基于Drools规则引擎进行实战讲解,并尽可能地抽象出规则引擎通用的模型、架构、思维、算法、实战经验等。在学习的过程中,大家也可以与其他规则引擎进行对照,达到融会贯通的效果。