1. 工作流版本演进中流程定义变更时进行中实例如何处理(迁移/终止/双版本并存)?
当流程定义变更时,进行中的实例应如何处理?请比较迁移、终止、双版本并存三种策略的取舍?
- 流程定义版本化
- 进行中实例的迁移/终止/双版本策略
- 不同策略的取舍
流程定义变更时需处理进行中实例,常见策略:一是"双版本并存"(run-old-version):已有实例继续按旧版本执行,新实例用新版本,安全但回滚与维护复杂、长期并存成本高;二是"迁移"(migrate):把进行中实例迁移到新版本,需保证状态映射合法、新版本能接续旧状态,通常支持"等实例到达安全点再迁移"或"迁移到新版本的对应状态",能统一行为但需做兼容性验证;三是"终止"(terminate):对不兼容版本直接终止并人工处理,简单粗暴但可能中断业务。工程上常按变更影响面分级:小变更直接兼容旧版本、大变更双版本并存并预留迁移窗口、破坏性变更需终止+人工补偿。
正确的策略取决于变更的破坏性、进行中实例数量与业务容忍度。工作流引擎(如 Temporal、Cadence)提供版本化原语(如 patch/versioning)让代码在重放时按版本分支,从而实现平滑演进。核心是"不破坏进行中实例的一致性与可恢复性"。