跳到正文
Elaine Blog
返回

Temporal、Camunda 与持久工作流

分布式系统、协调与消息

流程持续数小时到数月、包含人工审批、超时和补偿时,不能把状态留在 Java 线程或一串定时消息中。持久工作流把步骤与等待状态保存下来,进程重启后可继续执行,并提供可观察的流程历史。

Table of contents

Open Table of contents

持久执行是什么

持久执行指引擎记录工作流事件,并通过重放恢复决策状态。工作流代码因此必须确定性:相同历史得到相同命令。网络调用、当前时间和随机数应通过引擎提供的 API 或 Activity(活动)执行。

Activity 是可能失败并重试的外部动作,例如扣库存或发邮件。它仍会遇到“外部系统成功但完成回执丢失”,所以必须携带幂等键。工作流持久化不等于外部副作用 Exactly-Once。

Temporal 与 Camunda 的侧重点

需求优先评估
开发者用代码定义长期编排、自动重试和定时器Temporal
BPMN 可视化建模、人工任务、业务与技术共同治理Camunda
只有两三个短步骤、团队已有可靠消息基础设施普通编排服务 + Outbox

BPMN 是业务流程模型与标记法,用标准图形表示任务、网关和事件。可视化不自动带来正确性;流程版本、变量兼容、权限和历史保留仍需设计。

用 Saga 模型建立直觉

运行分布式系统实验室的补偿测试下载

mvn -Dtest=DistributedMechanismsTest#sagaCompensatesCompletedStepsInReverseOrder test

示例在支付失败后逆序归还库存。真实工作流还应持久化“库存完成、支付失败、补偿中、补偿完成”等状态,并为补偿失败设置重试上限与人工任务。

选型验收

实现一个包含定时器、重复 Activity、人工审批、取消和补偿失败的最小流程。停止 Worker 后重启,验证状态恢复;升级流程定义,验证运行中实例兼容;再测历史增长、可搜索字段、权限隔离、备份恢复和跨区域策略。

阅读 Temporal Java 开发文档Camunda 组件文档时,围绕同一验收场景比较,不按功能数量打分。

下一步

你已经完成“分布式系统、协调与消息”章节。先运行全部分布式系统实验室下载测试,再回到Java 架构师学习路线复盘每种方案的故障边界。下一章将进入 Elasticsearch 与搜索架构。


分享这篇文章:

上一篇
消息系统选型与常见事故
下一篇
Redis 数据类型与典型建模