规则引擎概述

我是阿里巴巴做规则引擎相关工作多年的java工程师一枚,本职工作就是通过规则引擎、规则管理平台等技术输出,来应对阿里巴巴复杂多变的上层规则相关业务的支持。

限于技术保密、安全等因素,本文只讲一些个人对“规则引擎”的看法,欢迎大家一起探讨。

总体来说,要搞清楚“规则引擎”,需要很好的回答以下几个问题。

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

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

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

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

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

1、举个通俗易懂的选择出行交通工具的例子。

规则引擎概述_第1张图片

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

规则引擎概述_第2张图片

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

规则引擎概述_第3张图片

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

  • 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/
Rule Base(knowledge base,规则库,知识库)
Working Memory(fact base,事实库)
Inference Engine(推理引擎)
Pattern Matcher(模式匹配器)
Agenda(议事日程)
Execution Engine(执行引擎)
规则引擎概述_第4张图片

规则引擎通过匹配规则库和事实库,挑选出对应的规则到日程,最后执行对应的action。

本质上,“专家决策系统规则引擎模型”和rate算法,解决的是大量重复的condition匹配效率的问题,以及规则冲突规范的问题,和脚本的性能比较不在同一个层面上。

具体,大家可以看看开源规则引擎:drools的实现方式。

当然,实际业务场景并不一定适合这套比价重量级的规则模型,会遇到学习成本高,灵活性差,rate算法不能发挥优势反而初始化成本很高的问题。

以上是个人结合工作实践,将一些个人对“规则引擎”的看法。

本人在阿里巴巴长期担任和负责规则引擎、流程引擎相关的技术开发,并且这方面也相当的缺乏人才。

这个是我们底层脚本引擎的开源项目:https://github.com/alibaba/qlExpress

欢迎对这方面感兴趣的人请联系我哦。
微信: 371754252
email: [email protected]

你可能感兴趣的:(规则引擎)