规则引擎的设计
认识规则引擎
规则引擎的定义
嵌入在应用程序的组件,对业务决策能够从应用中抽取出来,使用自定义的语义进行业务的决策。通过输入数据,解释业务规则,根据业务规则进行决策
通常情况下我们的业务实现逻辑是这样的
但是当规则较为复杂,且影响因素过多、频繁修改时这种方式就不太可取了
所以就出现了下面这种情况
采取这种方式的好处
- 业务人员可以直接修改决策
- 可以减少开发人员的工作量
- 开发人员只需要维护规则引擎即可,解决重复编码的问题
- 对业务与服务进行解耦,提高服务的可维护性
- 缩短开发路径,提高效率
规则引擎的组成和应用场景
组成
- 数据输入(接受预定义的语义编写的规则作为策略,接受业务数据作为执行过程的参数)
- 规则理解(按照预定的词法、语法、优先级、运算符等正确理解业务规则的表达式的语义)
- 规则执行(根据输入参数的对策略集中的规则进行解释与执行,包括类型的检查和结果的正确性)
Note: 按照预定的一些规则书写表达式
应用场景
-
风控对抗
策略研发和产品能够对黑灰产的特征进行识别与对抗,规则引擎作为风控系统的核心,能够调整和优化对抗策略,以达到最好的识别效果(防止薅羊毛)
-
活动策略运营
活动运行根据用户的反馈或者效果进行策略的修改,在规则引擎的引入可以提高运营策略的迭代效率,方便新玩法的探索和效果验证
-
数据分析和清洗
在数据分析系统中使用规则引擎可以快捷地对数据进行整理、清洗和转换(我们可以更具数据分析师的需求的规则进行数据的处理,提高数据的产出率)
规则引擎的核心原理(编译原理相关的概念)
理解
-
词法分析(把源代码进行转化为词法单元token的过程)
有限自动机(DFM): 它是一个状态机,并且是有限的,没输入一个字符所到达的状态都是唯一确定的
-
语法分析(从token中识别表达式的语法结构)
- 自顶向下分析: 面向目标分析法 就是用文法硬凑与输入符号匹配的句子
- 递归下降预测分析: 需要进行回溯
执行
-
构建 AST Tree(唯一,不能存在二义性,不然结果可能步唯一)
使用树来对语法单元进行表示,每一个节点或者子树都是一个语法单元,单元的构成规则就是语法(每个节点还可以有下级节点)
上下文无关语法(二型文法)
产生式左边只有一个非终结符,语言句子无需考虑上下文,就可以判断正确性
视频里使用 :我个人喜欢使用 ->
exp -> add
add -> add '+' mul | mul // 加法表达式
mul -> mul '*' pri | pri // 乘法表达式
pri -> string | bool | number | identifer // 基础表达式
输入输出
-
类型检查
验证结果是否为正确的类型,我们可以在 抽象语法树中的某一个父亲节点进行类型的检查,验证是否合法,否则进行返回
-
参数注入
对子树进行求值并进行替换,知道求出最终的结果