Skip to content

gengine简介

rencalo770 edited this page Sep 8, 2021 · 10 revisions

gengine简介

  • gengine是一款基于golang和AST(抽象语法树)开发的规则引擎,gengine支持的语法是一种自定义的DSL
  • gengine于2020年7月由哔哩哔哩(bilibili.com)授权开源
  • gengine现已应用于B站风控系统、流量投放系统、AB测试、推荐平台系统等多个业务场景
  • 你也可以将gengine应用于golang应用的任何需要规则或指标支持的业务场景

gengine相比于java领域的著名规则引擎drools的优势如下:

对比 drools gengine
执行模式 仅支持顺序模式 支持顺序模式、并发模式、混合模式,以及其他细分执行模式
规则编写难易程度 高,与java强相关 低,自定义简单语法,与golang弱相关
规则执行性能 低、无论是规则之间还是规则内部,都是顺序执行 高,无论是规则间、还是规则内,都支持并发执行.用户基于需要来选择合适的执行模式

为什么不使用gopher-lua或者js on golang

  • 因为我们开发业务的主语言是golang,如果使用gopher-lua或者javascript on golang,那么业务逻辑会从golang中"逃逸"到lua上或者javascript上, 使用者需要额外去学习lua或者javascript, 因此增加了业务逻辑的开发难度与测试难度;使用gengine,业务逻辑始终用golang开发,逻辑实现始终控制在golang代码内,且保持golang的语言性能, 当不再需要gengine支持的时候,基本上无需做任何改动,就可以将gengine上配置的代码(规则)转化为golang原生代码.

设计思想

如果你只依赖gengine,那么go.mod文件这么写:

module your_module_name

require github.com/bilibili/gengine v1.5.3

最新tag: https://github.com/bilibili/gengine/tags