什么是规则引擎

嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。

为什么需要规则引擎

作为开发人员会遇到需求变动的情况,比如

if a >b then c

改成 if a < b then c

又要改成 if a <= b then c

众所周知这是一个很头疼的事情,因为代码是写死的,改动需要改代码,又要上线。所以就需要有一个解决方案,把这块代码逻辑当成配置一样,可以随意配置,然后程序又可以把这个配置当代码来执行。

选型

由于后端使用golang,一般规则引擎都是要侵入代码的, 所以理所当然的选用go相关的技术组件。所以这里选用的gengine,同时在github的star也是挺多的。

gengine简介

  • gengine是一款基于golang和AST(抽象语法树)开发的规则引擎,gengine支持的语法是一种自定义的DSL

  • gengine于2020年7月由哔哩哔哩(bilibili.com)授权开源

  • gengine现已应用于B站风控系统、流量投放系统、AB测试、推荐平台系统等多个业务场景

  • 你也可以将gengine应用于golang应用的任何需要规则或指标支持的业务场景

https://github.com/bilibili/gengine/wiki/%E8%AF%AD%E6%B3%95

下面还是列出一些比较:

对比 drools gengine