V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
showB1
V2EX  ›  程序员

规则引擎推荐

  •  
  •   showB1 · 141 天前 · 3499 次点击
    这是一个创建于 141 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    gengine 的并发模型,arishem 的内置函数定义,再加上自研的规则权重可能会让规则引擎更加强大。
    ychost
        22
    ychost  
       140 天前
    @mulychou java 用 groovy 最简单功能最强,其它的用 QLExpress 之类的也行
    kennir
        23
    kennir  
       137 天前
    grule 用了很久了
    showB1
        24
    showB1  
    OP
       115 天前
    @singer 听上去不错
    showB1
        25
    showB1  
    OP
       115 天前
    @kaiccc 这个只适用于 java 生态?
    showB1
        26
    showB1  
    OP
       58 天前
    @Ico945 开始动手了 ,感觉你说的对😓
    Ico945
        27
    Ico945  
       58 天前
    @showB1 我们之前用过 drools 和自研的,drools 的 dsl 是通过模板语言拼接的,可读性巨差而且后期维护成本越来越高;自研就支持自定义格式的了,我们直接支持了自定义 json 转起来就更方便了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:19 · PVG 21:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.