分享好友 最新动态首页 最新动态分类 切换频道
Gengine规则引擎
2024-12-26 23:07

最近对B站开源的gengine规则引擎进行了入门级的研究。现在整理的资料记录如下。(欢迎交流讨论

Gengine规则引擎

原博客地址: https://www.cnblogs.com/feixiang-energy/p/15572292.html

:简介

  Gengine是一款基于golang和AST(抽象语法树)开发的规则引擎, Gengine支持的语法是一种自定义的DSL, Gengine通过内置的解释器对规则文件进行解析,构建规则模型,进行相应的规则计算和数据处理。Gengine于2020年7月由哔哩哔哩(bilibili.com)授权开源。Gengine现已应用于B站风控系统、流量投放系统、AB测试、推荐平台系统等多个业务场景。

官网上给出的Gengine相比于Java领域的著名规则引擎drools优势如下

对比

drools

gengine

执行模式

仅支持顺序模式

支持顺序模式、并发模式、混合模式,以及其他细分执行模式

规则编写难易程度

高,与java强相关

低,自定义简单语法,与golang弱相关

规则执行性能

低、无论是规则之间还是规则内部,都是顺序执行

高,无论是规则间、还是规则内,都支持并发执行.用户基于需要来选择合适的执行模式

  Gengine开源地址:GitHub - bilibili/gengine

:环境准备

  Go语言环境准备

  1. Go语言官网(Downloads - The Go Programming Language)下载安装go语言开发包:go1.15.2.windows-amd64.msi
  2. 设置环境变量:GOROOT、GOPATH、GOPROXY、GO111MODULE
  3. 执行go env命令进行测试

    

  开发工具准备

  1. 推荐JetBrains GoLand:goland-2020.2.3.exe

  第三方库准备

  1. 在goland新建项目gengine。
  2. 在goland的settings中设置go mod库管理方式。
  3. 在src目录下新建go.mod文件:使用github.com/bilibili/gengine:v1.5.7版本
  4. hello world测试程序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

 

 

 

  

 

:功能简介

  支持的规则语法

  • 逻辑运算:&&、||、!、==、!=、>、>=、<、<=等。
  • 四则运算+、-、*、/、)等。
  • If else条件选择。
  • 预加载API。

  规则文件

  • 支持规则名称、描述、优先级设置。
  • 支持规则注释。
  • 支持@name、@id、@desc获取规则信息。
  • 支持自定义变量。
  • 支持报错时行号提示。
  • 支持规则内调用注入的函数。
  • 支持规则内conc{}语句块并发执行。
  • 目前不支持web可视化编写规则文件,还需要技术人员进行手动配置。

  执行模式

  • 顺序模式:当指定规则优先级时,按照优先级顺序执行。
  • 并发模式:不考虑优先级、各个规则并发执行。
  • 混合模式:先执行优先级最高的一个,剩余的n-1个并发执行。
  • 逆混合模式:先并发执行优先级最高的n-1个,都执行结束后执行最后一个。

  对外API接口

  • dataContext:支持注入需要在规则中使用的结构体、函数。
  • ruleBuilder:与dataContext关联,支持通过字符串方式导入规则。
  • engine:创建规则引擎,执行ruleBuilder关联的规则。
  • GenginePoll:引擎实例池,支持在高QPS下实现高并发和线程安全。

  支持的规则注入

  • golang的struct结构体。(以指针方式注入
  • 基础类的map、array、slice。
  • Golang编写的函数。

  支持引擎池

  • 类似于线程池或数据库连接池。

:实验验证

  单规则

  一个比较全的单规则例子

  验证了:结构体注入、函数注入、加法运算、自定义变量、结构体变量修改。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

 

 

  

 

  

 

 

 

  

 

 

 

 

  顺序执行

  一个多规则顺序执行的例子

  模拟探测站总貌状态共3个规则:正常、预警、异常。顺序执行。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

 

 

  

 

  

 

  

 

  

 

 

 

 

  并发执行

  一个多规则并发执行的例子

  模拟探测站报警事件共3个规则:温度报警、水浸报警、烟雾报警。并发执行。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

 

 

  

  

  

 

 

 

  

 

 

  

 

 

 

 

 

 

 

 

 

 

 

  引擎池

  一个引擎池的例子

  创建了一个最大3个实例的引擎池。并发执行5个计算引擎。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

 

 

 

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  规则文件热更新

  一个单例引擎增量更新规则文件的例子

  验证了在不中断引擎计算的情况下:1)更新指定名称的规则配置;2)添加规则配置。

  规则文件还支持动态删除、引擎池热更新等操作。不再验证。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

 

 

  

 

  

 

  

 

  

 

 

 

 

  

 

 

 

 

  

:总结

  Gengine将规则文件的配置与程序代码的编写进行了一定程度的分离。规则文件采用类编程语言的方式进行编写,支持简单的数学运算、逻辑运算、if/else操作、结构体/函数注入等功能,同时能支持规则优先级设置和多种执行模式选择。规则引擎可以较便捷的通过规则文件的配置来反映实际业务场景中所需要的规则指标,并且能较灵活的适应业务规则的变化。

  Gengine是由golang语言开发的,为了实现跨语言协同开发,通常可以将规则引擎封装为一个独立运行的规则引擎模块,通过zmq、mqtt等方式进行数据的接入,根据配置的规则进行业务计算,然后将计算结果对外发布。

  Gengine规则引擎也可以搭配rpc、restful等接口,将其封装为一个独立的规则服务或计算服务,通过被其它服务调用的方式对外提供计算能力。

  在实际的业务场景中通常采用微服务架构,各微服务之间通过rpc、restful等接口进行交互。由于Gengine规则文件支持函数注入,因此甚至可以将已编写好的接口调用进行事先罗列,在规则引擎中根据规则计算结果进行不同的业务调用。

  Gengine的规则文件热更新功能也为生产环境中不停机更新业务规则提供了可能。

  Gengine作为B站开源的号称“第三代规则引擎”,还有很多其它的一些特性功能等待去研究发现,并将其融入到业务应用中去。

最新文章
美术画架双面画板儿童学习画板益智玩具多功能带画纸白板黑板0918信息
产品详细说明:产品名称:美术画架双面画板儿童学习画板益智玩具多功能带画纸白板黑板0918产品货号:SXR-0918产品规格:73x56x8CM玩具启迪:1、画画可以发挥孩子的想象力,是一种表达感情的方式。2、画画可以锻炼孩子小手的灵活性和协调性,
从群晖Web Station安装WordPress&PhpMyAdmin看shell的使用
创作立场声明:我再本文中描述的文字内容,为本人亲手创作。感谢小米机械键盘,感谢lg显示器,感谢mac系统,感谢chrome浏览器为本文做的贡献。借着最近蜗牛比较火,我也跟风买了一台,相对其他nas系统来说比较方便,如果你有公网IP可以尝试
www.131pk.com
通过本工具可以快速查询到您站点的谷歌(www.google.com)、百度(www.baidu.com)、必应(cn.bing.com)、雅虎(cn.yahoo.com)、搜搜(www.soso.com)、搜狗(www.sogou.com)、有道(www.youdao.com)等搜索引擎收录情况及反向链接;可以快速查询到谷
Sonar软件下载指南,一键获取使用教程与安装步骤,轻松上手!
Sonar下载指南,提供简单易懂的教程和安装步骤,让您轻松获取使用Sonar的方法。本指南详细介绍了Sonar软件的下载、安装和使用过程,帮助您快速掌握Sonar软件的使用技巧,提高工作效率。无论您是初学者还是专业人士,都能通过本指南轻松上手
ourplay游戏加速器 7.4.4 更新:2024-12-13备案号:沪ICP备17010969号-9A
ourplay安卓版,智能全局搜索,随时随地体验全球精品游戏和应用。ourplay游戏加速器,一般又称OurPlay,谷歌加速器。PUBG NEW STATE抢先畅玩,得限量版跑车皮肤, 11月11日开放测试!OurPlay加速器是一款自带谷歌服务框架的免费加速器,智能
ONE(ONE币)兑换丹麦克朗今日价格行情,ONE(ONE币)今日价格行情,最新消息,ONE24小时实时汇率K线历史走势图分析
ONE是ONE生态的通证。ONE是由BigONE发行的基于以太坊ERC20合约的代币。ONE通证凝聚了BigONE交易平台及生态的所有权益,平台将秉承区块链精神,让所有的用户共享平台收益。1. 永久享受 BigONE 平台 100% 交易手续费的返利BigONE 平台每日会
用AI轻松生成你的专属高清美女写真,玩法大揭秘!
DALL-E 2:OpenAI推出的这款工具以其强大的创作能力而著称,能够生成多种风格和主题的图像,包括超写实的美女照片。用户只需要提供简单的文本描述,DALL-E 2便能巧妙地将其转化为一幅幅令人惊艳的艺术作品。不过,由于其使用门槛和有限的访
SEO分析报告中,如何解释反向链接的作用和价值?提升网站权威性与排名
反向链接的定义及其在SEO中的基本作用反向链接,通常被称为“外部链接”或“入站链接”,是指从其他网站指向您网站的链接。在搜索引擎优化(SEO)中,反向链接扮演着至关重要的角色,因为它们被视为对网站内容质量和可信度的投票。换句话说
【Android -- 学习】学习资料汇总
项目名称项目简介Google I/O 2014Google I/O Android App 使用了当时最新推出的 Material Design 设计Google play music一个跨多个平台音乐播放器Google Santa Tracker for AndroidGoogle 开源的一个儿童教育和娱乐的 Appgithub客户端开源
爬虫工具之selenium(五)-建立代理IP池
IP网站为了防止被爬取,会有反爬机制,对于同一个IP地址的大量同类型的访问,会封锁IP,过一段时间后,才能继续访问,有几种简单的应对套路:1.修改请求头,模拟浏览器(而不是代码去直接访问)去访问2.采用代理IP并轮换3.设置访问时间间隔
相关文章
推荐文章
发表评论
0评