规则引擎Aviator实践分享

什么是规则引擎

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

规则引擎能做什么

降低复杂业务逻辑组件复杂性、降低应用程序的维护和可扩展成本。

常见应用场景

1.风控配置

2.用户积分

3.离线计算

4.商品等级

应用规则引擎带来哪些好处

1.逻辑和数据隔离

2.可扩展性高

3.可维护性高

4.知识集中化

5.提高业务灵活性

6.业务透明度增强

7.减少系统频繁迭代升级风险

8.简化系统架构

核心组件

Fact

事实对象,对于真实事物或者事实的承载对象,例如:登录事实对象,可能包含:登录ip,用户id,登录设备,近一一小时内登录成功次数,近一小时登录失败次数,可以理解为规则引擎所需要的输入参数。规则引擎会基于Fact对象和规则,构造DAG。

Rule

规则,由条件构成和结论构成的推理语句。例如:if ... then ... else .....,if 登录ip in 黑产ip列表内,then 命中登录黑名单 else 放行。这里的规则通指,if..then...else...的原子规则,而非多条件多关系的规则集。

LHS

规则的左半部分,通常指规则的if.... 部分。进一步细化,一般是指,具体的左半边因子,操作符,右半边因子。例如:if 登录ip in 黑产ip列表内。左半边因子即登录ip,操作符即in,右半边因子即黑产ip列表。

RHS

规则的右半部分,通常指规则的then以及else部分。一般是指具体的action,因为then以及else,往往是对应具体的动作,例如:或者给其他参数赋值(赋值动作),执行其他的函数(执行方法动作)。

知识包,知识包是打包了,某一个业务场景下,所有的规则,所有的库文件(Fact元数据描述库,动作库,常量库,枚举库),甚至包括评分卡,决策流等。一个知识包往往是一个业务场景下大的集合,知识包都有版本概念,可以发布新版本的知识包,当有新的知识包发布,所有依赖某个业务规则的客户端,都会更新为最新知识包下的规则。

Session

kiesession代表一次回话,一个回话往往对应一个工作区,即包括整体流程的执行。

Workmemory

工作区,即执行规则的内存空间,一个workmemory对应一次回话,对应一次规则的执行。

Rete

由LHS部分构成的规则网络,通常是DAG图。

Rete算法_yin__ren的博客-CSDN博客_rete算法

漫话规则引擎(2): 模式匹配算法 - 心内求法 - 博客园

Agenda

议程,决定执行哪些RHS的Action。

Action

动作,RHS部分对应的具体动作,例如:赋值,打印参数,执行方法等。

技术选型

名称

场景

核心技术

优点

缺点

应用案例

难度

Drools

1、业务代码和业务规则分离

2、适用于大型应用系统

模式匹配:Rate OO 算法

1、将初始数据(fact)输入Working Memory。

2、使用Pattern Matcher比较规则(rule)和数据(fact)。

3、如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。

4、解决冲突,将激活的规则按顺序放入Agenda。

5、使用规则引擎执行Agenda中的规则。重复步骤2至5,直到执行完毕所有Agenda中的规则。

1、功能完善

2、具有监控

3、操作平台等功能

4、支持DMN

5、文档完善

1、学习成本高

2、比较重,复杂度高

3、独立系统很难进行二次开发

4、以内存实现时间窗功能,无法支持较长跨度的时间窗

5、不二次开发很难融入京东技术生态

携程

🌟🌟🌟🌟🌟

EasyRules

1、业务代码和业务规则分离

2、适用于大型应用系统

表达式语言(MVEL/SpEL)

1、使用MVEL表达式模式开发时,可以直接编写java代码直接编译执行,更好的支持扩展

2、使用SpEL,模式时可以进行yml文件编写,更好支持脚本模式开发,yml格式文件更加易读

1、 轻量

2、 易学

3、支持复合规则

4、定义规则方式多样

5、支持复杂业务场景

6、可集成至京东技术生态

1、不支持DMN

2、活跃度较低

3、文档较少

Apache Nifi

🌟🌟🌟

Aviator

1、各种表达式的动态求值

Aviator会将表达是编程字节码,交给JVM去执行。 AviatorEvaluator(执行器)支持两种模式进行表达式执行: 1、以执行速度优先: AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL); 2、编译速度优先,这样不会做编译优化: AviatorEvaluator.setOptimize(AviatorEvaluator.COMPILE); AviatorEvaluator在执行表达式执行结果,可以进行对表达式缓存,使用了LRU算法,进行缓存淘汰。

1、轻量级

2、高性能

3、文档完善

4、社区活跃

5、可扩展

6、易学

7、可集成至京东技术生态

1、不支持DMN

2、支持业务场景较简单

美团酒旅实时数据规则引擎

🌟🌟

URule

1、业务代码和业务规则分离

2、适用于大型应用系统

1、应用Rete算法做为核心算法,生成可视化Rete树,规则文件校验,模型版本控制

2、使用JSR 170进行规则内容存储管理

1、功能完善

2、支持规则集,决策树,决策表

3、文档完备(有视频教程)

4、易集成

5、易改造

1、社区不活跃

2、应用案例较少

3、源码应用技术栈相对落后

中小公司

🌟🌟🌟

最终选择 考虑对接系统:微应用制作,仓配相关业务系统等,大多应用场景为:页面组件校验规则,计算规则,频繁变更因子表示,多数属于表达式规则,故选择更加轻量级,高效的表达式引擎,Aviator。

AviatorScript 文档 · 语雀

微应用规则引擎

架构设计

规则依赖流程

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
aviator规则引擎配置是指在使用aviator规则引擎的过程中,对其进行相关参数的设置和调整,以适应具体业务的需求和实际场景的要求。 配置aviator规则引擎通常包括以下几个方面: 1. 规则文件的加载:在使用aviator规则引擎之前,需要将规则文件加载到引擎中。规则文件可以是文本文件,也可以是数据库中的数据。通过适当的配置,可以指定规则文件的路径或者连接信息,使得引擎能够正确地加载和解析规则文件。 2. 规则变量的设置:规则引擎需要获取和设置一系列的规则变量,以进行规则的计算和推理。在配置引擎时,可以指定规则变量的名称、类型和初值,以及变量的作用域和可见性等。这样,在使用规则引擎时可以直接引用规则变量,进行相应的计算和判断。 3. 规则优先级的设定:规则引擎通常会包含多条规则,而这些规则有时候会有互相之间的冲突。通过设定规则的优先级,可以确定规则执行的先后顺序,从而在执行过程中遵循预期的逻辑。一般来说,可以通过给规则设置权重或者指定执行顺序的方式来设定规则的优先级。 4. 规则引擎选项的调整:aviator规则引擎通常提供了一系列的配置选项,用于控制规则的执行模式和行为。比如,可以通过设置最大执行时间、最大递归深度、启用缓存等选项来控制规则的执行效率和安全性。此外,还可以针对debug模式、编译模式和并发模式等方面进行相应的设置。 通过合理的配置,aviator规则引擎可以在各种复杂的场景下发挥出强大的计算和决策能力,提高系统的效率和灵活性。但是需要注意的是,配置规则引擎要根据具体的需求和条件,避免过度的调整和复杂的配置,以免引起不必要的性能开销或者错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值