工单流转之框架选型
背景如下:我们有一个问题工单,要经过很多状态的流转实现工单的完成,在初期可以简单使用if-else去实现,但是基于一个扩展性而言,后续肯定要通过其他手段来实现工单的流转,避免硬编码以及性能上这些方面的问题。
背景如下:我们有一个问题工单,要经过很多状态的流转实现工单的完成,在初期可以简单使用if-else去实现,但是基于一个扩展性而言,后续肯定要通过其他手段来实现工单的流转,避免硬编码以及性能上这些方面的问题
1. 业务需求如下
|
维度 |
场景 |
要求 |
|
生命周期 |
工单存在很多状态,并且可回退、可撤销 |
状态迁移必须可枚举、可校验 |
|
可扩展性 |
未来会新增等状态与动作 |
新增状态/事件不改动已有代码 |
|
可视化 |
产品和运营需要看懂流转规则 |
规则最好可配置、可文档化 |
|
一致性 |
多终端、多线程同时操作 |
不允许出现“幽灵状态” |
2. 技术方案对比
|
维度 |
硬编码 if-else |
工作流引擎(Flowable/Camunda) |
状态机(Cola-StateMachine/Spring StateMachine) |
|
核心思想 |
过程式判断 |
流程驱动 |
事件驱动(事件→状态迁移) |
|
学习成本 |
低 |
高 |
低(Java DSL) |
|
可视化 |
无 |
强(BPMN 图) |
中(DSL 代码即文档) |
|
扩展方式 |
为0 |
改 BPMN、重新部署 |
加状态、事件、处理器即可 |
|
性能 |
高 |
较重(DB 日志、历史表) |
高 |
|
事务一致性 |
需手动保证 |
内嵌事务 |
与业务事务同域 |
|
适用场景 |
简单、少状态 |
复杂、长流程、多人审批 |
中等复杂、状态有限、需要高并发 |
对于我们的项目来说,流程驱动会导致很多额外的配置,每次新增或者删除都需要大改整体流程,我们更倾向于事件驱动,通过规则配置来实现状态迁移。并且工作流这种BPMN引擎天生就重,跟状态机这种框架的性能没法比。从整体考量,使用状态机是最好的选择
为什么工作流性能比状态机性能差那么多?
核心差距在于工作流引擎的持久化模型本身会记录很多信息,比如流程定义表、运行时执行表、历史活动节点、历史变量、历史意见等等信息,导致一次审批往往要制造7-10条数据,跨多张表并且需要落库,导致性能压力大
而状态机本身只记录状态,至于状态机定义、运行时的实例这些都是在java代码和内存中的,没有落库操作,状态机本身实际上不会去持久化任何信息,如果需要任何扩展性操作只需要在行为侧进行配置即可。因此状态机对比起工作流这种重量级引擎,大多数时候都是比较高效的
3. Java 生态状态机框架对比
|
框架 |
最新版本 |
性能 |
DSL 友好度 |
侵入性 |
社区活跃度 |
备注 |
|
Cola-StateMachine |
v1.4.0 |
10M ops/s+ |
Fluent API,极简 |
零侵入 |
阿里维护,star 4.2k |
单 Java 文件即可跑 |
|
Spring StateMachine |
3.2.x |
1M ops/s |
基于注解、XML、YAML |
与 Spring 强耦合 |
Pivotal 官方 |
功能全但重 |
|
Squirrel-Foundation |
0.3.9 |
2M ops/s |
Fluent API |
需继承抽象类 |
个人维护,3 年未更新 |
风险高 |
|
Stateless4j |
2.6.0 |
1M ops/s |
Builder 模式 |
需要泛型定义 |
个人维护,star 1.1k |
功能有限 |
4. 为什么最终选 Cola-StateMachine
|
理由 |
具体收益 |
|
极简 |
单依赖 |
|
高性能 |
纯内存实现,无反射;每次流转仅一次 Map 查找 |
|
零侵入 |
不依赖 Spring、不依赖注解;普通 POJO 即可 |
|
可测试 |
DSL 即文档,单元测试可以“一眼看穿” |
|
可扩展 |
状态、事件、处理器均可插拔;支持嵌套状态机 |
|
阿里背书 |
在阿里内部多个核心系统(交易、履约)落地验证 |
5. 结论
- 对于“状态有限、规则明确、高并发、短生命周期”的工单系统,状态机 > 工作流。
- 在 Java 生态中,Cola-StateMachine 以极简、高性能、零侵入胜出。
- 采用 Cola-StateMachine,可在 1 天 内完成核心流转开发,1 周 内上线生产。
从学习成本、扩展性、性能多方面考虑,最终采用Cola-StateMachine实现
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)