规则引擎

简介: 我是阿里巴巴做规则引擎相关工作多年的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

相关文章
|
运维 JavaScript Java
govaluate 规则引擎
govaluate 规则引擎
2324 0
govaluate 规则引擎
|
Java
规则引擎选型及应用
规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程。 使用规则引擎可以把复杂、冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植。
24063 0
|
存储 消息中间件 NoSQL
物联网数据通过规则引擎流转到OTS|学习笔记
快速学习物联网数据通过规则引擎流转到OTS
343 15
物联网数据通过规则引擎流转到OTS|学习笔记
1、Drools规则引擎-什么是规则引擎
### 什么是规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件, 实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。 接受数据输入,解释业务规则,并根据业务规则做出业务决策。
541 0
1、Drools规则引擎-什么是规则引擎
EMQ
|
运维 监控 数据可视化
规则引擎集成新的可观测性框架
十月,EMQX在产品质量和用户体验方面进行了进一步提升;此外,EMQX Cloud在订阅渠道、部署地区、操作体验等方面均有更新。
EMQ
237 0
规则引擎集成新的可观测性框架
|
存储 SQL 监控
规则引擎 | 学习笔记
快速学习 规则引擎
1428 0
规则引擎 | 学习笔记
|
设计模式 数据挖掘
2、Drools规则引擎-为什么使用规则引擎
上文我们说过,规则引擎其实就是将if else全部给抽离出来了。但是这就是我们的规则引擎的全部内容吗?规则放在哪里都是放,为什么一定要拿规则引擎来抽离呢?肯定是规则引擎给我们解决了某些问题。本文主要讲的就是规则引擎是解决什么的方案
258 0
|
SQL 消息中间件 JavaScript
11-TDengine集成EMQX:通过规则引擎实现设备数据直接入库
11-TDengine集成EMQX:通过规则引擎实现设备数据直接入库
1119 0
11-TDengine集成EMQX:通过规则引擎实现设备数据直接入库
Drools规则引擎平台如何进行架构
Drools规则引擎平台如何进行架构
801 0
Drools规则引擎平台如何进行架构
|
JSON Java 数据格式
Drools规则引擎-memberOf操作
Drools规则引擎-memberOf操作
318 0