从Drools到JVS-Rules,为了搞定风控系统我踩了哪些坑?(附选型建议)

32 阅读4分钟

本文基于真实选型经历,对比7款Java规则引擎,并给出私有化部署场景下的最终选择。不含广告,所有评价均为个人体验。

一、背景:当if-else改到崩溃

去年公司风控系统要从零搭建。业务那边规则天天变:贷款额度门槛、客户等级系数、逾期次数阈值……每天都有新的组合条件。

一开始我们用硬编码,一个if-else堆了上百行。改一次规则要经过:业务提需求 → 开发改代码 → 测试验证 → 上线。最快也得一天。业务说:“就改个数字,为什么不能我直接改?”

于是我开始调研规则引擎。

二、踩坑实录:那些年我试过的引擎

2.1 Drools:功能强大,但上手太难

Drools是老牌,网上都说好。我下载下来,文档一看——KIE、KModule、有状态无状态会话、DRL语法……团队成员花了两周才写出第一个复杂规则。

最痛苦的是调试。规则写错了,没有可视化界面,只能靠打日志。有一次一个规则条件写反了,导致所有贷款申请都被拒了半小时,差点出生产事故。

锐评:Drools适合那种有专门团队维护规则的大厂,小团队碰它就是找罪受。

2.2 EasyRules:简单,但过于简单

后来换了EasyRules,注解方式很清爽。但很快就发现它只能做简单的if-then。我们需要“贷款金额>50万 AND 客户等级<3 OR (历史逾期>2 AND 金额<10万)”这种组合,EasyRules完全不支持决策表,最后还是得写Java代码。

锐评:EasyRules就是个带注解的表达式执行器,称不上“引擎”。

2.3 Aviator / Fel:表达式计算器

这两款更适合做数学公式计算。让业务人员写a+b*c没问题,但让他们写带多个条件的规则逻辑?不可能。

三、转折:发现JVS-Rules

有次在GitHub搜“rule engine visual”,看到了JVS-Rules。点进去一看,有Web界面、有决策表、有规则流,而且源码全开。

当时第一反应:开源产品做可视化,会不会很糙?

抱着试试的心态,按文档执行docker-compose up -d,几分钟后端+前端全跑起来了。登录进去,画了一个“贷款金额>50万 → 人工审核”的规则,点测试,通过了。半小时从零到第一个规则上线。

实话实说:这个上手速度,Drools和EasyRules都比不了。

四、深度体验:为什么最后选了它

4.1 私有化部署,等保无压力

我们的系统必须部署在自有机房,不能连外部云。JVS-Rules的docker-compose一键启动,数据库用自己的MySQL,所有组件都在内网。等保三级审计时,审计员查了所有依赖,没有对外请求,顺利通过。

对比:有些规则引擎号称开源,但管理端却要调用厂商的云端API才能用。这种绝对不能碰。

4.2 可视化编排,业务自己上手了

风控部门的产品经理以前改规则要提工单,排期一周。现在他自己登录后台,拖拽流程图节点,改完点发布,2分钟生效。

虽然他还是会偶尔拖错,但至少不再需要我当人肉翻译机。

4.3 Spring Boot集成,代码量极少

官方提供了starter,application.yml里配数据库地址,然后注入RuleEngine类直接调用:

java

@Autowired
private RuleEngine ruleEngine;

public void checkOrder(Order order) {
    Map<String, Object> facts = new HashMap<>();
    facts.put("order", order);
    List<RuleResult> results = ruleEngine.fire(facts);
    // 处理结果
}

比起Drools需要写KieContainerKieSession、加载kmodule.xml,这份代码简洁太多了。

4.4 源码全开,二次开发无阻碍

我们有审计需求:所有规则变更记录要导出PDF并加盖电子章。我直接改了JVS-Rules的导出模块代码,重新编译打包,两天搞定。

如果是闭源产品,这种需求得等厂商排期,可能半年都没音讯。

五、横向对比(一句话版)

引擎可视化私有化源码自由度上手速度适合场景
Drools支持部分开源慢(2-3周)大厂、专门团队
EasyRules支持全开源快(1天)简单表达式
JVS-Rules支持全开源(前后端)快(2-3天)企业级、业务自维护

六、选型建议(够直白了)

  • 如果你的规则少于20条且不常变更 → 硬编码更省事,别折腾规则引擎。
  • 如果你想要业务人员自己维护规则 → 必须有可视化界面。JVS-Rules和URule可以看,Drools直接pass。
  • 如果你必须私有化部署且源码自主可控 → 优先选全开源的方案。JVS-Rules是目前我见过最完整的。

七、结尾

以上都是我的真实选型经历,不是广告。如果你也在选规则引擎,建议先去GitHub搜一下JVS-Rules,自己docker-compose up跑起来试试。

有更好用的也欢迎评论区告诉我,互相学习。

本文代码示例基于JVS-Rules v2.2,具体以官方文档为准。