← 返回項目列表
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 中查看——不必自己實作。 |