workflow-orchestration-patterns 是做什麼的?
使用 Temporal 為分布式系統設計持久化工作流程。涵蓋工作流程與活動分離、Saga 模式、狀態管理以及確定性約束。適用於建構長時間運行的流程、分布式交易或微服務編排。
核心概念
- 工作流程 (Workflow): 定義業務流程的編排邏輯,必須是確定性的(無副作用、無隨機性)。
- 活動 (Activity): 執行實際的副作用操作(如 API 調用、資料庫寫入),可包含非確定性邏輯。
- Saga 模式: 一系列本地交易,每個步驟都有對應的補償操作,用於跨服務的資料一致性。
設計原則
- 分離職責: 將確定性邏輯放在工作流程中,將非確定性操作封裝在活動中。
- 遵循確定性: 避免在工作流程中使用隨機數、系統時間、外部狀態等非確定性元素。
- 處理失敗: 使用 Saga 模式或 Temporal 內建的重試與超時機制來處理活動失敗。
- 狀態管理: 理解 Temporal 的狀態管理方式(如
Promise、Future、信號),避免狀態洩漏或重播不一致。
支援平台
- 語言: Go、Java、Python、TypeScript、PHP、.NET 等 Temporal SDK。
- 基礎設施: Temporal Server(自託管或 Temporal Cloud)。
常見模式
- 順序工作流程: 簡單的步驟序列。
- 並行工作流程: 使用
Promise.all或類似機制並行執行活動。 - Saga: 序列或並行執行活動,失敗時觸發補償活動。
- 子工作流程: 將複雜邏輯分解為可重用的子工作流程。
最佳實踐
- 活動應保持冪等: 確保重複執行不會造成問題。
- 工作流程不應包含 I/O 操作: 所有 I/O 應該放在活動中。
- 使用信號 (Signal) 進行外部通訊: 允許外部系統觸發工作流程中的操作。
- 查詢 (Query) 用於讀取狀態: 不應改變工作流程狀態。
進階主題
- 超大工作流程: 將長時間運行的工作流程拆分成較小的子工作流程。
- 版本控制: 使用 Temporal 的版本控制功能來處理工作流程定義的更新。
- 監控與除錯: 使用 Temporal Web UI 或 CLI 工具 (
tctl) 來跟蹤工作流程執行。