诸位好呀,我们现在有个模块需要大量的条件判断,看着写的大坨大坨的 if 。。。很头疼,想在 team 中引入。可我这块经验只在以前的风控中用过 grule 。 想调研一下,grule 、goval 、gengine 或者还有其他的吗?谁能点评一下,各有什么优劣。 团队技术栈以 go 为主,python 次之。大多数有几年 c 艹、java 经验。
1
sospopo101343793 2024-07-03 11:28:54 +08:00
|
2
sin30 2024-07-03 11:37:24 +08:00
|
3
skiworld11 2024-07-03 11:42:30 +08:00
s-exp
|
![]() |
4
ufan0 2024-07-03 11:46:20 +08:00
首先排除 drools
|
![]() |
5
R4rvZ6agNVWr56V0 2024-07-03 13:06:00 +08:00
轻量级的么,可以考虑一下 google cel
|
![]() |
6
iyear 2024-07-03 13:07:30 +08:00 via Android
expr-lang 相比各种语言虚拟机更轻,做规则引擎够用了。如果更复杂的话就考虑引入 goja ,gopher-lua 的语言实现吧
|
![]() |
7
covering 2024-07-03 13:23:18 +08:00 via Android
把条件表格整理成二维数组,写个循环按顺序匹配。要引入新的框架,大概率 review 不好过
|
8
xinshoushanglu 2024-07-03 15:22:36 +08:00
drools 不好用,而且太老旧了。我们现在用 liteflow 嵌脚本来实现规则定制
|
![]() |
9
Desdemor 2024-07-03 17:06:21 +08:00
|
![]() |
10
kaiccc 2024-07-03 17:12:11 +08:00
liteflow 还可以,满足我们的需求
|
![]() |
11
wingoo 2024-07-03 18:03:03 +08:00
记得好像 b 站有一个, 不知道有没有用过的
好像就是 gengine, 看了下 最后更新日期 2021, 可以排掉了 |
![]() |
12
airycanon 2024-07-03 18:21:49 +08:00
|
![]() |
13
airycanon 2024-07-03 18:24:22 +08:00
补充 #12 优点是可以支持复杂的语法,相当于一个简单的脚本语言了。
|
![]() |
14
mightybruce 2024-07-03 18:43:56 +08:00
我提供一个能实现各种功能,直接解释并运行 go 小段代码的 go 库,达到 go 嵌套 go 的效果
https://github.com/traefik/yaegi 想做什么都能达到哦, 毕竟这个是一个 go 解释库 |
15
mulychou 2024-07-03 20:33:32 +08:00
借楼问一下,java 有推荐的吗
|
![]() |
16
qfmy1991 2024-07-04 02:38:04 +08:00 via Android
QLExpress 阿里的
|
![]() |
17
Ico945 2024-07-04 10:04:57 +08:00 via iPhone
感觉自己的逻辑翻译成规则引擎 dsl 这一步也挺费劲的
|
![]() |
18
ryalu 2024-07-04 10:30:38 +08:00
|
![]() |
19
ryalu 2024-07-04 10:32:37 +08:00
@mightybruce #14 哈哈,无限套娃是吗
|
![]() |
20
SmiteChow 2024-07-04 11:37:48 +08:00
想清楚规则谁来写?能不能停机更新?如果是非开发人员写或者需要热更新,才需要规则引擎,否则建议使用程序配置文件。
|
![]() |
21
singer 2024-07-04 16:32:10 +08:00
golang 中的 ast 还算可用,自行定制开发其实并不会有太大的障碍。我开发 golang 规则引擎 N 年了,内部使用非常完美,但无法开源。目前没看到市面上有用着非常友好的规则引擎库,如果非得推荐一款,那就 https://github.com/bytedance/arishem 。优势在于内置的函数够多不用对底层二开。
gengine 的并发模型,arishem 的内置函数定义,再加上自研的规则权重可能会让规则引擎更加强大。 |
![]() |
23
kennir 2024-07-07 13:15:03 +08:00
grule 用了很久了
|
![]() |
27
Ico945 297 天前
@showB1 我们之前用过 drools 和自研的,drools 的 dsl 是通过模板语言拼接的,可读性巨差而且后期维护成本越来越高;自研就支持自定义格式的了,我们直接支持了自定义 json 转起来就更方便了。
|
28
ChristopherY 142 天前
OP 现在实现这一套规则引擎了吗?
|
![]() |
29
showB1 OP @ChristopherY 你好,好久没登录,我们用了 arishem
|