规则引擎设计与实现|青训营笔记

49 阅读2分钟

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

1 规则引擎

定义

将业务决策与程序代码分离开,使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策

优点

解决重复编码问题,将业务决策与服务本身解耦,提高服务的可维护性,缩短开发路径,提高效率

组成部分

  • 数据输入:接受业务数据作为执行过程中的参数
  • 规则理解:按照预先定义的词法、语法、优先级、运算符等正确理解业务规则所表达的语义
  • 规则执行:根据执行时输入的参数对策略集中的规则进行正确的解释和执行,同时检查数据类型,确保执行结果正确

应用场景

  • 风控对抗
  • 活动策略运营
  • 数据分析和清洗

2 编译原理

规则引擎——编译原理

  • 理解——词法分析、语法分析
  • 执行——抽象语法树
  • 输入输出——参数注入、类型检查

工作原理

  • 词法分析

    • 源代码字符串 => 词法单元Token
    • 如何识别Token?
      • 有限自动机,状态机,在任何一个状态,基于输入的字符,都能得到一个确定的状态
  • 语法分析

    • 识别表达式的语法结构的过程
  • 抽象语法树

    • 表达式的语法结构可以用树表示,每个节点是一个语法单元
    • 上下文无关语法:无需考虑上下文就可判断正确性,可使用巴克斯范式BNF表达
  • 类型检查

    • 类型综合:根据子表达式的类型构造父表达式的类型
    • 编译时&运行时检查

3 设计一个规则引擎

设计目标

支持特定的词法、运算符、数据类型和优先级,并且支持以上预定义语法的规则表达式的编译和执行

image-20230202140634884.png

image-20230202140702970.png

image-20230202140727553.png

image-20230202140829630.png

4 实现规则引擎