Skip to main content

任務生命週期(Task Lifecycle)

Skalds 系統中的任務管理涵蓋「建立」、「更新」與「取消」三大核心流程。每個流程皆透過事件驅動機制,結合 Redis、Database 與 Event Queue,確保任務狀態的即時同步與高效調度。以下分別說明各流程細節與設計理念。


建立任務流程

  1. Skald 啟動時,先向 Redis 登記自身 ID 與心跳訊號。
  2. System Controller 持續與 Redis 同步目前可用的 Skald ID。
  3. 接收外部新增任務請求(如 API 呼叫)。
  4. 產生任務 ID,並將任務細節存入資料庫(Database)。
  5. 以任務 ID 與 Skald ID 建立「新增任務事件」訊息,透過 EventBus 傳遞給指定 Skald。
  6. Skald 接收與自身 ID 相符的事件。
  7. Skald 依據任務 ID 從資料庫取得任務細節。
  8. 根據任務細節建立 TaskWorker 實體。
  9. TaskWorker 實體建立後,向 Redis 登記任務狀態、資訊與心跳。

建立任務流程圖


更新任務流程

  1. 接收外部更新任務請求。
  2. 將指定任務細節更新於資料庫中。
  3. 以任務 ID 與 Skald ID 建立「更新任務事件」訊息,透過 EventQueue 傳遞給指定 Skald。
  4. Skald 接收與自身 ID 相符的事件。
  5. Skald 依據任務 ID 從資料庫取得最新任務細節。
  6. Skald 建立 TaskWorker 更新事件,並透過 EventQueue 傳遞給對應 TaskWorker。
  7. TaskWorker 接收與自身任務 ID 相符的事件,並即時調整內部運作參數。

註:為保持單一入口(EntryPoint),所有任務事件皆由 Skald 統一處理,再轉發給內部 Worker,避免直接對 Worker 操作。

更新任務流程圖


取消任務流程

  1. 接收外部取消任務事件。
  2. 刪除資料庫中的任務資料,或將任務狀態標記為已取消。
  3. 以任務 ID 建立「取消任務事件」,透過 EventBus 廣播給所有 Skald。
  4. Skald 查詢自身是否有對應任務 ID 的 TaskWorker,若有則將其關閉。
  5. TaskWorker Process 接收作業系統事件(如 SIGTERM)。
  6. Process 關閉前,將Heartbeat改為-2。

取消任務流程圖


透過上述事件驅動的任務生命週期設計,Skalds 能夠實現高效、彈性且可擴展的分散式任務管理,並確保任務狀態與資源使用的即時同步與最佳化。