规则引擎 | 青训营笔记

110 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

本篇文章记录的是对于规则引擎的学习

什么是规则引擎?

规则引擎是一种可降低复杂业务逻辑组件复杂性降低应用程序的维护和可扩展性成本的组件。

规则引擎有什么用?

下面通过几个案例,来具体看看规则引擎能在业务中能起到什么作用。

Case1:

假设业务部门设计了一场活动,在不同的价格区间,用户将会得到不同的返还积分。如满200送20,满300送40,规则浅显易懂,可以通过简单的if else语句实现。

但是当进入下一个活动时,价格区间和积分数量的改动活动,业务逻辑就得重新设计。由此可见,传统的if else的业务逻辑代码难以复用。

Case2:

在原有的活动基础上,对于用户不同属性、商品的不同属性也有着不同的积分返还。

此时,当规则逻辑增加时,由于代码的耦合,业务代码和复杂度将会急剧增长。

以上两个案例的缺憾看似微小,但是当业务越来越庞大,传统的业务逻辑方式 难以复用代码复杂 的弊端将会更为严重。

那么下面就要介绍规则引擎是怎么样避免出现这样的弊端的。

如下图所示,规则引擎将字符串解析转化为二叉树保存,并在调用传入参数后,返回是否满足规则。

image.png

image.png

结合下图可以看到,规则引擎能够绕过开发人员对业务逻辑的编写,使服务和业务决策实现解耦解决了重复编码的问题的同时,也缩短了开发路径

image.png

规则引擎是如何实现的?

规则引擎的执行类似于代码的编译过程词法分析语法分析是对传入的字符串进行识别和理解,抽象语法树的过程是确定唯一的执行流程,参数注入类型检查是最终的输入输出。

下面简单介绍一下以上几个概念。

词法分析:是通过状态机的方式,将完整字符串先划分为几个字符串。

语法分析:在词法分析的基础上,对字符串的类型进行识别,将操作符所对应的字串串进行关联。

抽象语法树:通过语法分析,形成树的结构。

参数注入:将参数传入对应位置进行运算。

类型检查:对操作符两侧的参数类型进行比较,需要注意的是在编译和执行过程中都需要进行类型检查。

规则引擎的使用场景

风控对抗:也就是对黑灰产的对抗,需要不断调整和优化策略,实现最好的效果。规则引擎的使用,能使决策的快速的更迭,而不需要重启服务。

活动策略运营:将服务代码和业务运营逻辑解耦。

数据分析和清洗:根据不同的需求,自定义处理数据的方法。