高性能架构初见--规则引擎 | 青训营笔记

109 阅读3分钟

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

业务场景:在业务中如果业务的商业逻辑不是特别复杂,但是调整速度总是很快,开发人员就要不断的走更改代码->测试代码->上线更改这一全过程,耗费时间不说,业务方面的调整也十分被动,很明显商业的逻辑与代码的逻辑被耦合到了一起,这是导致低效率出现的主要原因。很容易的我们希望能找到一种便捷的“接口”来让业务人员更改上线规则,这种便捷的接口就是规则引擎。

基本内容

定义理解

规则引擎的本质就是要实现业务决策的逻辑与应用程序代码实现的解耦合,从而解决开发人员重复编码所可能导致的效率降低,引入bug等问题,以及满足业务决策人员快速调整业务决策的需求。当然它是被作为组件嵌入到应用程序中的。

组成部分包括输入(业务人员输入规则),处理(规则的翻译), 输出(规则的执行)

应用场景包括快速响应式的商业逻辑对抗黑灰产,快反馈的活动策略运营,针对数据设计的规则引擎可以帮助数据分析师快速提取出想要的数据。

实现途径

从规则引擎的组成部分我们不难联想到规则引擎实质上就像是一个“业务逻辑编译器”,通过某些符合上下文无关文法的输入,我们可以将其解析为需要执行的代码逻辑,送到服务端去执行,因此这就需要我们根据业务场景的具体需求来针对性的设计一套文法的“规则接口”,来满足业务决策者的需要。

实现的分析设计过程

整体设计

根据具体需求,敲定支持的运算规则,数据类型,选取基本运算符,以及确定运算符之间的优先级规则。

词法分析

词法分析过程即为所有的语素(lexeme)建立与特定Token的对应(多对一),通过为每一个语素建立有限状态机,确立最大匹配和优先级匹配原则,从而将源输入转译为token序列。建立有限状态机的过程为正则表达式->非有限状态机到有限状态机。

语法分析

使用TopDown或BottomUp方法进行语法分析确定设计出的文法是否符合LL(1)或者LR(1)等文法,如果确定符合某种文法则可使用代码实现其建立语法树的过程,如果不满足则需要我们选取其他的文法或者进行文法的修改。

语义分析

根据建立的语法树,进行修饰建立注解语法树,从而进行语法树的类型检查和类型推导以及编译时运算。