规则引擎 | 青训营笔记

96 阅读3分钟

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

  • 规则引擎组成与应用场景
  • 规则引擎设计与实现

规则引擎组成与应用场景

规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从程序代码中分离出来,通过预定义的语法模板编写业务决策。实现业务决策与代码开发的解耦。

规则引擎:接收数据输入,解释业务规则,并能根据业务规则实现业务逻辑。

规则引擎组成可分为三部分:数据输入、规则理解和规则执行

  • 规则输入: 支持预定义的语义编写规则作为策略集
  • 规则理解: 按照预定义的语义分析词法、语法、优先级、运算符等,以正确理解业务规则所表达的逻辑
  • 规则执行: 根据执行时输入的参数对策略集中的规则进行正确的解释和执行。

常见的规则引擎的应用场景:

  • 风控对抗: 对抗黑灰产,策略研发和产品能够根据黑灰产特征进行快速识别和对抗。
  • 活动运营策略: 将服务代码与业务运营逻辑解耦,提高运营策略的迭代效率。业务活动运营需要及时进行运营策略的优化和调整。
  • 数据分析和清洗: 数据分析师可以根据不同的需求只定义数据处理规则,快速产出目标数据。

规则引擎设计与实现

如何设计规则引擎?受编译原理启发,规则引擎的设计也可以通过类似于编译的方式将业务决策通过预定义的语法模板“编译”为可以被执行的代码。

如何对业务决策进行“编译”?

  • 词法分析: 通过预定义的语法关键字,将源业务决策字符串转换为语法单词(Token)

    • 基于输入的字符,借助确定的有限自动机(DFA)分割源字符串生成唯一确定的语法单词集合。
  • 语法分析: 通过预定义的语法模板,将语法单词转化为抽象语法树(Abstract Syntax Tree,AST)

    • 基于词法分析识别的语法单词集合生成抽象语法树,树的每一个节点就是一个语法单元。决定树的构成的规则就是语法。

巴科斯范式(BNF)-上下文无关语法

上下文无关语法G:终结符集合T + 非终结符集合N + 产生式集合P + 起始符号S

G由T、N、S和P组成,由语法G推导出来的所有句子的集合称为G语言!

终结符: 组成串的基本符号。词法分析产生的token集合。语法树上的叶子节点。

非终结符: 表示token集合的语法变量。语法树上的非叶子节点。

生产式: 表示形式,语法单元的组合形式。每个生产式就是语法树上的一个字树,每个子树都对应着一个解析函数。

递归下降算法

按照语法规则去匹配语法单元生成抽象语法树

  • 对于一个非终结符,要从左到右依次匹配其产生式中的每个项,包括非终结符和终结符。
  • 在匹配产生式右边的非终结符时,要下降一层,继续匹配该非终结符的产生式。
  • 如果一个语法规则有多个可选的产生式,那么只要有一个产生式匹配成功就行。如果一个产生式匹配不成功就进行回溯。

实现一个在线规则引擎思路

  • 实现规则引擎

    • 定义:词法、token、操作符、抽象语法树规则
    • 语法分析 -> 构建语法树 -> 参数类型检查 -> 执行语法树 -> 输出
  • 编写restful路由 -> 实现业务代码 -> 调用规则引擎 -> 返回输出结果