← 返回项目列表
DevOps 与工具
定时任务与工作流
从进程内 cron 到持久化的 Temporal 工作流
搭建服务初版 · 共同主导迁移至 Temporal · 2024.12 — 2025.09
Go Temporal Kafka gRPC MySQL/GORM
项目背景
发放任务原先运行在进程内 cron 上:没有重试,看不到哪个租户失败,也无法续跑执行到一半的任务。
核心技术亮点
01
多币种返现与会员忠诚度奖励发放,通过 Kafka 以唯一订单 ID 入账到钱包
02
Temporal SDK、指数退避重试策略和 worker 注册机制
03
发放任务重构为父工作流,为每个租户扇出一个子工作流;发布入账消息失败时执行补偿步骤
04
每日客户分群重新分类,activity 带心跳并分页执行
05
访客数据清理,以幂等方式创建为 Temporal Schedule
核心实现
1
按租户的父子工作流
父工作流列出所有租户,并为每个租户启动一个子工作流;每个子工作流以唯一订单 ID 执行发放,发布失败时进行补偿。
Why: 单个租户失败不再阻塞其他租户,每个子工作流都可以单独重试和查看。
技术决策
| 技术决策 | 选择 | 替代方案 | 原因 |
|---|---|---|---|
| 调度器 | Temporal | 进程内 cron 加手写重试 | 持久化执行、带退避的重试、心跳,以及每次运行都可在 UI 中查看——无需自己实现。 |