用途:该资料面向使用 Temporal 构建可靠分布式系统的开发者,讲解工作流编排架构的核心设计决策、弹性模式与最佳实践。
主要能力与内容:
- 工作流与活动分离。核心规则是工作流承载编排逻辑与决策,活动承载外部交互(API、数据库、网络调用)。工作流必须确定性,不能直接调用外部系统,状态可跨故障自动保留;活动可非确定性,需幂等,通常短时运行。判定框架:触碰外部系统即为活动,编排决策即为工作流。
- 核心模式。Saga 补偿:先注册补偿再执行步骤,失败时按 LIFO 逆序执行补偿,补偿需幂等。实体工作流(Actor 模型):一次执行对应一个实体,持久存活并通过信号与查询管理状态,如购物车、账户、库存。扇出/扇入:并行执行后聚合,建议拆分为子工作流而非扩展单个工作流。异步回调:工作流发送请求后以信号等待外部事件或人工审批。
- 状态与确定性。Temporal 通过事件历史自动保存状态并支持崩溃恢复;工作流内禁止线程与锁、随机数、全局状态、系统时间、直接文件或网络 IO;应使用 workflow.now()、workflow.random() 与纯函数。版本变更可用 workflow.get_version()、新建工作流类型或保持向后兼容。
- 弹性与错误处理。活动默认无限重试,可配置重试间隔、退避系数、上限与最大次数,非重试错误(输入无效、业务规则违规、永久失败)应分类处理。活动可能重复执行,需通过幂等键、唯一约束、upsert、记录已处理请求 ID 等方式保证幂等。长任务可用心跳上报进度以避免停滞超时。
- 实践要点。工作流保持单一职责、使用子工作流扩展;活动保持短时、设置超时、区分可重试错误;注意参数负载限制(约 2MB)。
适用与不适用:适合跨机器/服务/数据库的多步骤流程、需全有或全无语义的分布式事务、长时运行与断点恢复、业务审批、实体生命周期与 CI/CD 等基础设施自动化。不适合简单 CRUD、纯数据处理流水线、无状态请求响应与实时流处理。
限制:资料未提供具体安装命令、代码示例与收费信息;文中提及的容量与负载限制需以官方文档为准。