规则引擎推荐 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
showB1
V2EX    程序员

规则引擎推荐

  •  
  •   showB1 2024-07-03 11:26:21 +08:00 4798 次点击
    这是一个创建于 465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    诸位好呀,我们现在有个模块需要大量的条件判断,看着写的大坨大坨的 if 。。。很头疼,想在 team 中引入。可我这块经验只在以前的风控中用过 grule 。 想调研一下,grule 、goval 、gengine 或者还有其他的吗?谁能点评一下,各有什么优劣。 团队技术栈以 go 为主,python 次之。大多数有几年 c 艹、java 经验。

    29 条回复    2025-05-19 09:41:21 +08:00
    sospopo101343793
        1
    sospopo101343793  
       2024-07-03 11:28:54 +08:00
    sin30
        2
    sin30  
       2024-07-03 11:37:24 +08:00
    skiworld11
        3
    skiworld11  
       2024-07-03 11:42:30 +08:00
    s-exp
    ufan0
        4
    ufan0  
       2024-07-03 11:46:20 +08:00
    首先排除 drools
    R4rvZ6agNVWr56V0
        5
    R4rvZ6agNVWr56V0  
       2024-07-03 13:06:00 +08:00
    轻量级的么,可以考虑一下 google cel
    iyear
        6
    iyear  
       2024-07-03 13:07:30 +08:00 via Android
    expr-lang 相比各种语言虚拟机更轻,做规则引擎够用了。如果更复杂的话就考虑引入 goja ,gopher-lua 的语言实现吧
    covering
        7
    covering  
       2024-07-03 13:23:18 +08:00 via Android
    把条件表格整理成二维数组,写个循环按顺序匹配。要引入新的框架,大概率 review 不好过
    xinshoushanglu
        8
    xinshoushanglu  
       2024-07-03 15:22:36 +08:00
    drools 不好用,而且太老旧了。我们现在用 liteflow 嵌脚本来实现规则定制
    Desdemor
        9
    Desdemor  
       2024-07-03 17:06:21 +08:00
    https://github.com/expr-lang/expr 补个楼上的链接
    kaiccc
        10
    kaiccc  
       2024-07-03 17:12:11 +08:00
    liteflow 还可以,满足我们的需求
    wingoo
        11
    wingoo  
       2024-07-03 18:03:03 +08:00
    记得好像 b 站有一个, 不知道有没有用过的
    好像就是 gengine, 看了下 最后更新日期 2021, 可以排掉了
    airycanon
        12
    airycanon  
       2024-07-03 18:21:49 +08:00
    airycanon
        13
    airycanon  
       2024-07-03 18:24:22 +08:00
    补充 #12 优点是可以支持复杂的语法,相当于一个简单的脚本语言了。
    mightybruce
        14
    mightybruce  
       2024-07-03 18:43:56 +08:00
    我提供一个能实现各种功能,直接解释并运行 go 小段代码的 go 库,达到 go 嵌套 go 的效果
    https://github.com/traefik/yaegi

    想做什么都能达到哦, 毕竟这个是一个 go 解释库
    mulychou
        15
    mulychou  
       2024-07-03 20:33:32 +08:00
    借楼问一下,java 有推荐的吗
    qfmy1991
        16
    qfmy1991  
       2024-07-04 02:38:04 +08:00 via Android
    QLExpress 阿里的
    Ico945
        17
    Ico945  
       2024-07-04 10:04:57 +08:00 via iPhone
    感觉自己的逻辑翻译成规则引擎 dsl 这一步也挺费劲的
    ryan961
        18
    ryan961  
       2024-07-04 10:30:38 +08:00
    ryan961
        19
    ryan961  
       2024-07-04 10:32:37 +08:00
    @mightybruce #14 哈哈,无限套娃是吗
    SmiteChow
        20
    SmiteChow  
       2024-07-04 11:37:48 +08:00
    想清楚规则谁来写?能不能停机更新?如果是非开发人员写或者需要热更新,才需要规则引擎,否则建议使用程序配置文件。
    singer
        21
    singer  
       2024-07-04 16:32:10 +08:00
    golang 中的 ast 还算可用,自行定制开发其实并不会有太大的障碍。我开发 golang 规则引擎 N 年了,内部使用非常完美,但无法开源。目前没看到市面上有用着非常友好的规则引擎库,如果非得推荐一款,那就 https://github.com/bytedance/arishem 。优势在于内置的函数够多不用对底层二开。

    gengine 的并发模型,arishem 的内置函数定义,再加上自研的规则权重可能会让规则引擎更加强大。
    ychost
        22
    ychost  
       2024-07-04 19:09:33 +08:00
    @mulychou java 用 groovy 最简单功能最强,其它的用 QLExpress 之类的也行
    kennir
        23
    kennir  
       2024-07-07 13:15:03 +08:00
    grule 用了很久了
    showB1
        24
    showB1  
    OP
       2024-07-29 13:49:53 +08:00
    @singer 听上去不错
    showB1
        25
    showB1  
    OP
       2024-07-29 13:51:34 +08:00
    @kaiccc 这个只适用于 java 生态?
    showB1
        26
    showB1  
    OP
       2024-09-24 17:08:54 +08:00
    @Ico945 开始动手了 ,感觉你说的对
    Ico945
        27
    Ico945  
       2024-09-24 19:48:42 +08:00
    @showB1 我们之前用过 drools 和自研的,drools 的 dsl 是通过模板语言拼接的,可读性巨差而且后期维护成本越来越高;自研就支持自定义格式的了,我们直接支持了自定义 json 转起来就更方便了。
    ChristopherY
        28
    ChristopherY  
       227 天前
    OP 现在实现这一套规则引擎了吗?
    showB1
        29
    showB1  
    OP
       146 天前
    @ChristopherY 你好,好久没登录,我们用了 arishem
    div style="box-sizing: border-box">
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2485 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 01:47 PVG 09:47 LAX 18:47 JFK 21:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86