自动化与脚本
用 Temporal 设计可持久化分布式工作流时的工作流与活…
在构建长时间运行流程、分布式事务或微服务编排时,用 Temporal 设计可靠工作流的架构与最佳实践。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 Temporal 设计可持久化分布式特定
解决思路
- 将工作流与活动分离:工作流只负责编排,活动负责执行外部调用
- 保持工作流职责单一,每个工作流只承担单一职责
- 保持工作流小巧,用子工作流(child workflows)提升可扩展性
- 明确边界:工作流负责编排,活动负责执行
- 在本地测试时使用 time-skipping 测试环境
- 活动操作必须幂等,确保可安全重试
- 活动保持短生命周期,控制在秒到分钟级,而非小时级
- 始终为活动配置超时(timeout)
- 对长任务使用 heartbeat 上报进度
- 在活动中做错误处理,区分可重试与不可重试错误
- 避免在工作流中使用 datetime.now(),改用 workflow.now()
- 避免在工作流代码中使用线程或异步操作
- 避免从工作流直接调用外部 API
- 避免在工作流中编写非确定性逻辑
- 避免非幂等操作,否则无法处理重试
- 避免缺少超时,否则活动会一直运行
- 避免不做错误分类,导致对校验错误也进行重试
- 注意 payload 限制,每个参数上限 2MB
- 监控工作流执行时长
- 监控活动失败率
- 监控重试次数与退避(backoff)
- 监控待处理工作流数量
- 通过 worker 进行水平扩展
- 对任务队列进行分区
- 用子工作流进行分解
- 在合适场景下对活动进行批处理
适用边界 · 注意事项
- 简单 CRUD 操作(直接用 API 调用即可)
- 纯数据处理流水线(应使用 Airflow、批处理)
- 无状态请求/响应(使用标准 API)
- 实时流处理(使用 Kafka、事件处理器)