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

170 阅读3分钟

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

一、什么是规则引擎

在规则引擎这个词语被发明出来以前,复杂繁琐的业务逻辑,只能用if-else结构来应对。当然,if-else本身并不是不好,但在进行功能扩展或者别人“接手”代码时,每次都要大刀阔斧的下线改代码,就是很头疼的问题了。因此,规则引擎高效的优点就派上用处了。

规则引擎是一种嵌入在应用程序中的组件,目的是分离应用程序代码中的业务决策,并使用预定义的语义模块编写业务决策。接收数据输入,解释业务规则,并根据业务规则作出业务决策。

规则引擎由三部分组成:

  • 数据输入 支持接收使用预定义的语义编写的规则作为策略集。比如"price > 500"

    接受业务的数据作为执行过程中的参数,比如价格、标签等。

  • 规则理解 能够按照预先定义的词法、语法、优先级、运算符等正确理解业务规则所表达的语义。

  • 规则执行 根据执行时输入的参数对策略集中的规则进行正确的解释和执行。同时对规则执行过程中的数据类型进行检查,确保执行结果正确。

规则引擎的应用场景:

1、风投对抗

规则引擎作为风险控制系统的核心,可以对黑灰产快速的识别和进行对抗。使研发人员能不断调整优化对抗策略。

2、活动策略运营

活动策略要根据用户效果反馈进行实时的运营策略的优化调整。规则引擎的引入,可以将服务代码和业务运营逻辑解耦,提高运营策略的迭代效率。

3、数据分析和清洗

高效的实现对数据的整理、清洗和转换。数据分析师可以根据不同的需求来自定义数据处理的规则,方便快捷的产出所需要的数据。

二、规则引擎的编译原理基本概念

理解

  • 词法分析(Lexical Analysis)即把源代码字符串转换为语法单元(Token)的过程。
  • 语法分析(Syntax Analysis)即在词法分析的基础上,识别表达式语法结构的过程。

执行

  • 抽象语法树

    表达式的语法结构可以用树表示,其每个节点(子树)是一个语法单元,这个单元的构成规则就是语法。

  • 递归下降算法

    递归下降算法就是自顶向下构造语法树,不断对Token进行语法递归的展开(下降)。

输入、输出

类型检查

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

三、设计一个规则引擎

要经历上述过程。