[ 后端与 Go | 青训营笔记 ]
这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
课内:Go 规划引擎设计与实现
规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。
重点
- 理解规则引擎的组成部分及应用场景;
- 理解规则引擎的核心原理 - 编译原理的相关概念;
- 设计并实现一个规则引擎;
- 结合已学内容,实现一个 Web 板规则引擎。
细节
认识规则引擎
由来
定义
- 一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
优点与应用场景
应用场景
- 风控对抗;
- 活动策略运营;
- 数据分析和清洗。
组成和实现原理
组成
- 数据输入:支持使用预定义的语义编写的规则作为策略集;
- 规则理解:能够按照预定义的词法、语法、优先级、运算符等正确理解业务规则所表达的语义;
- 规则执行:正确解释并检查执行策略集。
编译原理基本概念
词法分析
- 将源代码字符串转化为词法单元的过程。
如何识别词法单元
- 有限自动机:状态机,状态是有限的。该状态机在任何一个状态,基于输入的字符,都能做一个确定的状态转换;
语法分析
- 在词法分析的基础上,识别表达式的语法结构的过程。
抽象语法树
- 表达式的语法结构可以用树来表示,其每一个节点是一个语法单元,这个单元的构成规则就叫语法。每个节点还可以有下级节点;
类型检查
类型综合
- 根据子表达式的类型构造出父表达式的类型;
编译时检查 & 运行时检查
- 类型检查可以发生在表达式的编译阶段,即构造语法树的阶段,也可以发生在执行时的阶段;
设计规则引擎
设计目标
- 设计一个规则引擎,支持特定语法、运算符、数据类型和优先级。并且支持基于以上预定义语法和规则表达式的编译和执行。
语法树
语法树执行
- 预先定义好每种操作符的执行逻辑。对抽象语法进行后续遍历执行;
总结
了解了规划引擎。