规则引擎

简介: 我是阿里巴巴做规则引擎相关工作多年的java工程师一枚,本职工作就是通过规则引擎、规则管理平台等技术输出,来应对阿里巴巴复杂多变的上层规则相关业务的支持。限于技术保密、安全等因素,本文只讲一些个人对“规则引擎”的看法,欢迎大家一起探讨。

我是阿里巴巴做规则引擎相关工作多年的java工程师一枚,本职工作就是通过规则引擎、规则管理平台等技术输出,来应对阿里巴巴复杂多变的上层规则相关业务的支持。
限于技术保密、安全等因素,本文只讲一些个人对“规则引擎”的看法,欢迎大家一起探讨。

总体来说,要搞清楚“规则引擎”,需要很好的回答以下几个问题。
1、“规则引擎”的实际用途和价值
2、“规则引擎”的一般实现方式
3、“规则引擎”发展的一些坎坷

一、“规则引擎”的实际用途和价值

规则引擎和流程引擎一起,是使用在大规模复杂业务场景下必备的业务框架技术,使用这两门技术搭建起来的系统能够很好的梳理清楚业务逻辑,并且方便快速的修改业务逻辑,甚至可以做到需求的实时生效。

1、案例分析:

image

hard code的代价非常大,随着业务的膨胀会使开发人员和规则需求方非常的疲惫。
image

然而,“规则引擎”技术的运用会使整个业务发生很大变化。
image

从上面的案例可以看出,规则引擎最大的价值就在于通过以下的三个过程,大大的缓解了频繁的需求变化给整个业务系统带来的灾难。

  • a、逼迫系统开发人员和业务专家梳理业务,定义统一的BOM(业务对象模型)。
  • b、业务专家可以快速的制定修改规则,然后交由规则引擎自动化地来处理分析。
  • c、规则引擎代替系统开发人员,解决由规则条件关联动作变化带来的开发工作。

二、“规则引擎”的一般实现方式

一套规则引擎总体就是要做到以下的目标:

  建立规则语言标准,动态编辑,自动化执行。

很多业务系统一般会使用某种脚本语言来实现,比如groovy,jruby,javascript,原因很简单单,因为脚本语言本质上可以解决变量识别和自动运行的问题,而且扩展性强,表达能力强,动态部署生效。
另外,其他比如决策表等类似excel的输入,form表单的配置化 也可以转化为脚本语言。

三、“规则引擎”发展的一些坎坷

1、规则管理的复杂性:

a、优先级问题:比如你买了50块钱的东西,有满30减10,满50减20,系统会优先使用哪个规则呢?

b、冲突问题:假设有10条相关的法律规定,伤害致人死亡,会有可能判死刑。然后《未成年人保护法》规定,未满18周岁,不能判处死刑。这种情况下,系统对未成年人的杀人罪该如何判定呢?

c、规则列表的选择问题:很多时候,这可能只是个规则管理的业务模型问题,但是如何设计出一套足够应对所有的业务场景的模型还是非常难的。

2、面向运营人员的规则的页面配置化

a、通过一套通用的form表单来配置规则,产生规则脚本。
最佳的实践可能是采用 表单--------->json,xml格式化数据--------->规则脚本,这样可以很好的分离配置界面和脚本的强耦合关系,方便以后的维护。

3、规则运行效率的问题

如果你google下“规则引擎”,一般会有关于JSR94 和rete算法的介绍。
https://www.ibm.com/developerworks/cn/java/j-java-rules/

image

本质上,“专家决策系统规则引擎模型”和rate算法,解决的是大量重复的condition匹配效率的问题,以及规则冲突规范的问题,和脚本的性能比较不在同一个层面上。
具体,大家可以看看开源规则引擎:drools的实现方式。
当然,实际业务场景并不一定适合这套比价重量级的规则模型,会遇到学习成本高,灵活性差,rate算法不能发挥优势反而初始化成本很高的问题。

以上是个人结合工作实践,将一些个人对“规则引擎”的看法。
本人在阿里巴巴长期担任和负责规则引擎、流程引擎相关的技术开发,并且这方面也相当的缺乏人才。
这个是我们底层脚本引擎的开源项目:

https://github.com/alibaba/QLExpress

欢迎对这方面感兴趣的人联系我哦。
微信: 371754252
email: tianqiao@taobao.com

原文第一版发表于知乎专栏
https://zhuanlan.zhihu.com/p/28487660

相关文章
|
Java
规则引擎选型及应用
规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程。 使用规则引擎可以把复杂、冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植。
24472 0
|
边缘计算 JSON 物联网
解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍
RuleGo是一个基于Go语言的轻量级、高性能规则引擎,旨在通过动态规则链和组件化设计,简化复杂系统的业务逻辑管理和实时响应。
解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍
|
运维 JavaScript Java
govaluate 规则引擎
govaluate 规则引擎
3074 0
govaluate 规则引擎
|
存储 缓存 JavaScript
国内开源规则引擎牛起来
国内开源规则引擎牛起来
1389 0
|
新零售 Java C++
java脚本引擎的设计原理浅析
本人在阿里巴巴长期担任和负责规则引擎、流程引擎相关的技术开发,另外还负责开发和维护开源项目:https://github.com/alibaba/QLExpress QLExpress是一个脚本引擎工具,类似Groovy,JRuby等,是为了解决当时电商规则动态编译、表达式高精度计算、复杂布尔运算、自定义函数和操作符号、语法树生成等需求而设计的。
16677 0
|
数据可视化 算法 Java
JAVA规则引擎工具
本文介绍了六款常用的Java规则引擎:Drools、IBM ODM、Easy Rules、jBPM、OpenL Tablets 和 Apache Camel。每款引擎都有其独特的特点和适用场景,如Drools的高效规则匹配、IBM ODM的Web界面管理、Easy Rules的轻量级特性、jBPM的流程管理、OpenL Tablets的Excel规则定义以及Apache Camel的路由和规则结合。选择合适的规则引擎可以显著提高系统的灵活性和可维护性。
952 0
|
Java API
QLExpress功能清单
QLExpress从一开始就是从复杂的阿里电商业务系统出发,并且不断完善的脚本语言解析引擎框架,在不追求java语法的完整性的前提下(比如异常处理,foreach循环,lambda表达式,这些都是groovy是强项),定制了很多普遍存在的业务需求解决方案(比如变量解析,spring打通,函数封装,操作符定制,宏替换),同时在高性能、高并发、线程安全等方面也下足了功夫,久经考验。
21797 1
|
算法 数据可视化 Java
JAVA规则引擎工具有哪些?
本文对比分析了六种Java规则引擎:Drools、IBM ODM (JRules)、Easy Rules、JBPM、OpenL Tablets以及Apache Camel结合规则组件的应用。Drools是一款功能全面的业务规则管理系统,支持DRL文件定义规则、高效的规则匹配算法、复杂的规则流及决策表,并易于与Java应用集成。IBM ODM (原JRules)提供了强大的规则管理功能,包括Web界面和Eclipse插件定义管理规则、直观的决策表和决策树、REST和Java API集成选项及优化的性能。
2274 3
|
存储 算法 Java
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)(一)
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)
594 1
QLExpress的基本语法
1、操作符和java对象操作 普通java语法 //支持 +,-,*,/,<,>,<=,>=,==,!=,<>【等同于!=】,%,mod【取模等同于%】,++,--,&&,|| //in【类似sql】,like【类似sql】,&&,||,!,等操作符 //and、or 和java里面的&& || .
27397 0