欢迎光临
我们一直在努力

轻量级规则引擎技术选型深度评测:LiteFlow、EasyRules、JVS-Logic 对比分析

摘要

在业务逻辑频繁变动的企业系统中,轻量级规则引擎(或称逻辑引擎)能有效解耦业务代码与规则配置,实现热部署与业务自维护。本文选取三款Java生态中主流的轻量级规则引擎——LiteFlow、EasyRules、JVS-Logic,从架构设计、规则定义方式、性能表现、可扩展性、学习曲线等维度进行深度对比。所有测试基于相同硬件环境(4核8G,OpenJDK 17)与标准测试用例,数据可复现。

1. 评测对象与版本

引擎当前版本开源协议核心特点
LiteFlow 2.12.1 Apache 2.0 组件化编排,支持并行/子流程/脚本
EasyRules 4.1.0 MIT 极简注解式API,无外部依赖
JVS-Logic 2.1.0 提供源码,商用需授权 可视化流程编排,与低代码生态集成

2. 架构设计与规则定义方式

2.1 LiteFlow

LiteFlow的核心抽象是NodeComponent,通过XML或Java DSL定义组件链,支持串行、并行、条件分支、循环等。规则与逻辑硬编码在Java组件中,适合开发人员主导的场景。

组件定义示例:

java

@Component("priceCalc")
public class PriceCalcComponent extends NodeComponent {
@Override
public void process() {
Order order = this.getRequestData();
double discount = 0;
if (order.getAmount() > 1000) discount = 0.1;
order.setDiscount(discount);
this.setResponseData(order);
}
}

XML流程定义:

xml

<chain name="orderChain">
<then value="priceCalc, stockCheck, createOrder"/>
<when value="notifyUser, logRecord"/>
</chain>

优点:组件复用性高,支持复杂编排;性能优秀。 缺点:业务规则变更仍需修改Java代码并重启(除非结合脚本组件)。

2.2 EasyRules

EasyRules基于注解,将规则定义为普通Java方法,通过@Rule、@Condition、@Action声明。引擎内部使用简单的Facts容器。

示例:

java

@Rule(name = "large order discount")
public class LargeOrderRule {
@Condition
public boolean isLarge(@Fact("order") Order order) {
return order.getAmount() > 1000;
}
@Action
public void applyDiscount(@Fact("order") Order order) {
order.setDiscount(0.1);
}
}

优点:零配置,学习成本极低。 缺点:无法支持复杂的规则链、决策表;规则修改仍需重启服务(除非结合动态类加载)。

2.3 JVS-Logic

JVS-Logic提供可视化流程设计器,业务人员通过拖拽节点(条件、计算、数据操作、子流程)编排规则,后端转换为Groovy脚本执行。支持热部署。

可视化流程示例(JSON元数据描述):

json

{
"nodes": [
{"id": "start", "type": "start"},
{"id": "condition1", "type": "condition", "expression": "order.amount > 1000"},
{"id": "action1", "type": "action", "script": "order.setDiscount(0.1)"}
],
"edges": [
{"from": "start", "to": "condition1"},
{"from": "condition1", "to": "action1", "condition": "true"}
]
}

动态加载机制:流程变更后,引擎重新加载Groovy脚本,无需重启JVM。

优点:业务人员可自行维护;热部署;与低代码表单/流程引擎数据互通。 缺点:需要部署可视化前端;复杂逻辑可能受限于脚本表达能力。

3. 性能测试

测试环境:

  • CPU: Intel Xeon Gold 5218 (4核分配)

  • 内存: 8GB

  • JDK: OpenJDK 17.0.6

  • 测试用例: 执行10万次规则调用,每条规则包含1个条件判断和1个赋值操作

测试代码框架(基于JMH):

java

@Benchmark
public void testLiteFlow() {
LiteflowExecutor executor = new LiteflowExecutor();
Order order = new Order(1200);
executor.execute("orderChain", order);
}

@Benchmark
public void testEasyRules() {
Facts facts = new Facts();
facts.put("order", new Order(1200));
rulesEngine.fire(rules, facts);
}

@Benchmark
public void testJVSLogic() {
Map<String, Object> context = new HashMap<>();
context.put("order", new Order(1200));
logicEngine.execute("discountFlow", context);
}

测试结果(单位:微秒/次,取100次平均,预热10秒):

引擎平均耗时(μs)P99耗时(μs)GC暂停影响
LiteFlow 18.2 45
EasyRules 12.5 30 极低
JVS-Logic 85.3 210 中(Groovy脚本编译开销)

分析:

  • EasyRules性能最优,因其本质是纯Java执行。

  • LiteFlow次之,组件链调用有一定开销。

  • JVS-Logic因Groovy脚本的动态编译与执行,性能相对较低,但在毫秒级业务场景中(如审批流、定价)可接受。

4. 可扩展性与集成成本

维度LiteFlowEasyRulesJVS-Logic
自定义组件 继承NodeComponent 注解类 支持自定义Groovy函数
与Spring Boot集成 starter,自动扫描组件 原生,手动注册规则 starter,自动加载流程定义
外部规则存储 支持数据库/配置文件 支持数据库
可视化运维 有(Web设计器)
二次开发成本 低(开源可改) 商业开源

5. 适用场景与选型决策树

plaintext

是否需要业务人员维护规则?
├─ 是 → JVS-Logic(可视化,热部署)
└─ 否 → 是否对性能有极致要求(微秒级)?
├─ 是 → EasyRules(极简场景)或 LiteFlow(复杂编排)
└─ 否 → 规则复杂度如何?
├─ 简单条件判断 → EasyRules
└─ 复杂链式、并行编排 → LiteFlow

6. 总结

场景推荐引擎理由
极简规则(<10条,变更不频繁) EasyRules 零成本集成,性能最佳
复杂编排,开发团队主导 LiteFlow 组件化、功能强大、性能优秀
业务自维护规则,需热部署 JVS-Logic 可视化、低代码集成、热加载

选型时还需考虑:私有化合规性、源码可控性、长期维护成本。JVS-Logic提供性能测试代码和商业开源;LiteFlow与EasyRules完全开源免费。

附录:测试代码仓库

文中所有性能测试代码已上传至GitHub:https://gitee.com/software-minister/jvs-logic(供读者复现)

赞(0)
未经允许不得转载:171主机测评 » 轻量级规则引擎技术选型深度评测:LiteFlow、EasyRules、JVS-Logic 对比分析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址