知识卡片
流程解决方案的版本管理:多版本并行运行与实例迁移的取舍
内容
流程可以运行数小时、数天、数周甚至数月,系统里总有正在运行(未执行完、正等待某个信号继续)的流程实例——一旦要修改流程模型,就必须直面这些实例该怎么办。工作流引擎为此提供版本管理:流程模型改动后一部署就生成新版本;已经在跑的活跃实例继续按它们启动时的版本运行;新创建的实例默认用新版本(除非显式指定用旧版本);好的工具还支持把现有实例迁移到新版本。基于这套能力,有两种基本策略可选。多版本并行运行:部署新版本时完全不必操心已在运行的实例,引擎会按各自的流程定义分别管理并行运行的实例——优点是省心,代价是复杂性转移到了你身上(尤其涉及子流程时,子流程各自也有版本,复杂度还会叠加);适用场景包括合规要求(有些流程一旦启动就必须保持稳定)、开发测试环境(不必关心旧实例)、版本迁移代价太高(太复杂太费力)的情况。对流程实例做版本迁移:把所有实例统一迁移到刚部署的新版本,视工具支持程度甚至能写脚本、通过hook把迁移动作放进CI/CD管道——适用于紧急修复补丁(想立刻停用所有旧模型)、或者”生产环境跑多个版本带来的操作复杂性”比”迁移成本”更让人担心的情况。版本控制不止于流程模型本身:胶水代码和数据定义同样要版本化——比如用户对象加了新字段、评分逻辑要用到它,但旧流程实例保存的是没有新字段的旧版用户对象数据,处理方式有三种:反序列化时把新字段设为可选、同时复制一份评分代码(旧模型引用customer-scoring,新模型引用customer-scoring-v2);或者修改代码,让它在有新字段时才使用(代码更复杂,但优势是迁移实例到新版本时无需额外处理,缺点是长期会积累无用代码,需要定期清理确认是否还有版本依赖它);再或者写升级脚本,给旧实例的数据补上带默认值的新字段。
参考来源
- 位置:《流程自动化实战:系统架构和软件开发视角》第3章《开发流程解决方案》"3.4 流程解决方案的版本管理"(源文件:_epub-src/EPUB/xhtml/Section0001_0006.xhtml)
- 结论依据:原文描述工作流引擎的版本管理机制(新版本部署、活跃实例保留旧版本、新实例默认新版本),对比多版本并行运行与实例版本迁移两种策略各自的适用场景,并给出胶水代码/数据定义版本化的三种具体处理方式,直接支撑本卡片结论。
- 原始内容:流程模型修改后一旦部署,就会创建一个新版本……你可以并行运行多个版本的流程模型……你还可以选择将所有流程实例都迁移到刚刚部署的新版本……新的流程模型将会引用customer-scoring-v2,而旧的模型将依旧引用customer-scoring。