Go 规则引擎|青训营笔记

169 阅读2分钟

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

一、 什么是规则引擎,前景发展是什么?

执行时接受数据输入、解释业务规则,并做出决策,例如风控系统输入有很多:当前用户的设备信息、当前cookie信息、过往操作记录、接入渠道、四项信息 都是有的,然后过程中经过一系列的规则判断,得出风险的结论或者风险的等级。规则引擎已经在风控识别、活动运营、配置下发等场景得到了广泛的应用。

二、 规则引擎的技术前提

image.png

词法分析:把源代码字符串转换为词法单元(Token)的这个过程。确定的有限自动机 DFA | Deterministic Finite Automaton 语法分析

block : '{' blockStmts '}' ;      //语句块
blockStmts : stmt* ;              //语句块中的语句
stmt = varDecl | expStmt | returnStmt | block;   //语句
varDecl : type Id varInitializer? ';' ;         //变量声明
type : Int | Long ;                              //类型
varInitializer : '=' exp ;                       //变量初始化
expStmt : exp ';' ;                              //表达式语句
returnStmt : Return exp ';' ;                    //return语句
exp : add ;                                      //表达式       
add : add '+' mul | mul;                         //加法表达式
mul : mul '*' pri | pri;                         //乘法表达式
pri : IntLiteral | Id | '(' exp ')' ;            //基础表达式 

三、 规则引擎的核心

词法分析是识别一个个的单词,而语法分析就是在词法分析的基础上识别出Token -> AST 上下文无关语法 Context-Free Grammar程序的语法结构。这个结构是一个树状结构。这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。

四、 当下完备常见的规则引擎

Drools是一个基于java的规则引擎,易于调整以及易于管理的开源业务规则引擎

Ilog JRules是完整的业务规则管理系统(BRMS),它提供了对整个企业业务规则进行建模、编写、测试、部署和维护所必需的所有工具

Easy Rules 是一款 Java 规则引擎,它的诞生启发自有Martin Fowler 一篇名为 “Should I use a Rules Engine?” 文章

Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值

Groovy是 用于Java的一种敏捷的,它是一种成熟的[面向对象]编程语言,既可以用于面向对象编程,又可以用作纯粹的。使用该种语言不必编写过多的代码,同时又具有和动态语言中的其他特性