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

规则引擎推荐

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

    诸位好呀,我们现在有个模块需要大量的条件判断,看着写的大坨大坨的 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 这一步也挺费劲的
    ryalu
        18
    ryalu  
       2024-07-04 10:30:38 +08:00
    ryalu
        19
    ryalu  
       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
       354 天前
    @singer 听上去不错
    showB1
        25
    showB1  
    OP
       354 天前
    @kaiccc 这个只适用于 java 生态?
    showB1
        26
    showB1  
    OP
       297 天前
    @Ico945 开始动手了 ,感觉你说的对😓
    Ico945
        27
    Ico945  
       297 天前
    @showB1 我们之前用过 drools 和自研的,drools 的 dsl 是通过模板语言拼接的,可读性巨差而且后期维护成本越来越高;自研就支持自定义格式的了,我们直接支持了自定义 json 转起来就更方便了。
    ChristopherY
        28
    ChristopherY  
       142 天前
    OP 现在实现这一套规则引擎了吗?
    showB1
        29
    showB1  
    OP
       61 天前
    @ChristopherY 你好,好久没登录,我们用了 arishem
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2939 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:57 · PVG 10:57 · LAX 19:57 · JFK 22:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.