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

86 阅读2分钟

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

今天课程的主要内容如下:

  1. 认识规则引擎
  2. 编译原理基本概念
  3. 设计一个规则引擎
  4. 规则引擎的实现

1、什么是规则引擎

当我们在对复杂的业务进行开发时,程序本身逻辑代码和业务代码互相嵌套错综复杂,同时维护成本高可拓展性差

规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。

在字节跳动,规则引擎已经在风控识别、活动运营、配置下发等场景得到了广泛的应用。开发人员可以将业务逻辑与服务代码解耦,实现灵活、高效的业务策略发布。目前公司内部基于规则引擎的动态决策系统已经承接了千万级别QPS的决策请求。

2、为什么要使用规则引擎

业务规则经常变化,系统需依据业务的变化,实现快速低成本的迭代更新。 因此,为了快速、低成本的更新,我们需将逻辑代码业务代码进行解耦:

  • 研发人员(不需懂业务)开发维护程序部分,同时测试通过后,后续不会经常变化改动;
  • 业务人员可直接管理这些业务规则,同时不需要研发人员的参与。

因此它具有以下优点:

  • 简化系统架构,优化应用
  • 提高系统的可维护性
  • 减少编写“硬代码”业务规则的成本和风险
  • 应付特殊状况,即客户一开始没有提到要将业务逻辑考虑在内
  • 过将规则引擎分开,它提供了更大的可重用性。

3、规则引擎编译原理

3.1 理解

  • 语法分析:把源代码字符串转换成词法单元的过程。
  • 语法分析:在词法分析的基础上识别出表达式的语法结构。

3.2 执行

  • 抽象语法树:表达式抽象语法结构的树状表示,对于一个表达式,抽象语法树一定是唯一确定的。

image.png

3.3 输入输出

  • 类型检查:验证执行的结果是否为合适的数据类型。在抽象语法树中,通常会验证某节点的子节点的数据类型是否合法。
  • 参数注入:在规则执行的过程中,使用输入的参数值来计算语法树中的标识符节点值的过程。