常用规则引擎的对比
一.背景
在业务开发的过程中,会存在非常多的业务场景,只是通过单纯的判断能力是不够的,会面临着规则变化快,不可控因素多,业务常见复杂等多个问题往往需要反复改动代码,导致项目上线延期等诸多问题。
二.场景
1.风控场景
风控系统的简单来说就是告诉业务系统这个动作这个人有没有风险,输入有很多:当前用户的设备信息、当前cookie信息、过往操作记录、接入渠道、四项信息 都是有的,然后过程中经过一些列的规则判断,得出风险的结论或者风险的等级,用于业务系统判断该动作是否可以发生或者以什么样的等级进行。
首先风控系统对接的业务会非常多,信贷、营销、下单等,这些业务还需要区分具体产品线,每个业务还会有不同的动作场景,整体来看动作场景的量级已经非常庞大了。对于一个动作场景而言:一系列输入数据还需要经过n层规则匹配和算法过滤出一些中间态因子数据,这些因子再作为规则输入产生结果。很显然整个风控判断规则的数量是非常非常庞大的,这时候规则引擎的存在就非常有必要了,风控系统对于规则场景的诉求也几乎是最强的。
2.资金决策场景
在信贷、理财、支付场景会存在一个资金流转的问题,一笔资金并不是像我们所想象的,是一个点到另一个点这样的简单,往往中间会因为合规、收益等n多问题发生资金的流转决策,每一笔交易的过程可能对于业务上:出资账户、中间户是不同的,技术上:经过的系统也是不同的,这就需要我们根据不同的场景来决定这笔钱该怎么走,这就需要各种各样的规则来完成这些流转的控制。
3.数据打标场景
现在都是数据为营的时代,如果想把这些数据高效的利用起来,肯定就要对这些数据进行清洗、打标、加工,才能产生对应的价值。而清洗、打标的过程实际上就是数据过滤规则产生结果的过程。
三.各种规则引擎对比
1.Drools
Drools 是最活跃的开源规则引擎;DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。
特性:
1、简化系统架构,优化应用。
2、提高系统的可维护性和维护成本。
3、方便系统的整合。
4、减少编写“硬代码”业务规则的成本和风险。
2.Ilog JRules
Ilog JRules是有名的商用BRMS;
Ilog JRules是完整的业务规则管理系统(BRMS),它提供了对整个企业业务规则进行建模、编写、测试、部署和维护所必需的所有工具。
主要组件:
1、Rule Studio(RS) 面向开发人员使用的开发环境,用于规则的建模和编写。
2、Rule Scenario Manager 规则测试工具。
3、Rule Team Server(RTS) 基于Web的管理环境,面向业务人员使用,用于规则发布、管理、存储。
4、Rule Execution Server(RES) 面向运维人员使用,用于规则执行、监控。
3.Easy Rules
Easy Rules 是一款 Java 规则引擎,它的诞生启发自有Martin Fowler 一篇名为 “Should I use a Rules Engine?” 文章。Easy Rules 提供了规则抽象来创建带有条件和操作的规则,以及运行一组规则来评估条件和执行操作的RulesEngine API。
特性:
1、轻量级框架和易于学习的API。
2、基于POJO的开发。
3、通过高效的抽象来定义业务规则并轻松应用它们。
4、支持创建复合规则。
5、使用表达式语言定义规则的能力。
4.Aviator
Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。
特征:
1、支持大部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式?: ,并且支持操作符的优先级和括号强制优先级。
2、支持大整数和精度运算
3、内置支持正则表达式匹配,类似Ruby、Perl的匹配语法,并且支持类Ruby的$digit指向匹配分组。
4、自动类型转换,当执行操作的时候,会自动判断操作数类型并做相应转换,无法转换即抛异常
5.Groovy
Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
特征:
1、同时支持静态和动态类型。
2、支持运算符重载。
3、本地语法列表和关联数组。
4、对正则表达式的本地支持。
5、对java开发人员来说,简单易学