这是我参与「第五届青训营」伴学笔记创作活动的第6天。
这是目前青训营课程中最有意思的一节课,带我们了解的规则引擎的概念,以及动手实现了一个简单的规则引擎,之前没有听说过这类东西。
规则引擎是什么
规则引擎的定义是这样的:规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。
其出现是为了解决开发慢的痛点,让运营等其他同学可以动态配置规则,可以有效地动态变更计划,防止黑灰产或者活动发布,以及数据分析,具体如下
- 风控对抗
- 活动策略运营
- 数据分析和清洗
规则引擎的关键
- 词法分析
- 语法分析
规则引擎的本质呢就是我们自己定义一套语法,然后去解析用这套语法写的表达式,然后根据解析的内容执行表达式。这个过程其实就是编译和执行的过程。
所以一般有以下几个关键点
-
词法分析(Lexical Analysis),将源代码分解成词法单元(token)。
-
语法分析(Syntax Analysis),将词法单元组成语法结构。
-
抽象语法树(Abstract Syntax Tree, AST),从语法结构中构造出AST。
-
类型检查(Type Checking),对程序进行类型检查。
-
代码生成(Code Generation),将AST转换为机器可执行的代码。
市面上常见的规则引擎
有Drools、govaluate等,Drools比较偏重量级。
总结
规则引擎在业务上应用还是比较广泛的,比如这次的抖音极简版的项目,可以针对视频feed流来实现一个对应的规则引擎,比如可以在其中限制收到的城市或者关键字等等