洞察 · 雲端 · 2026 · 08 · 12

把批次任務搬上雲端:排程、重跑與可恢復性設計

真正可靠的雲端批次系統,必須假設排程可能重複觸發、工作可能中途失敗,資料也可能延遲抵達。設計重點不是避免所有異常,而是讓每次執行都可辨識、可重跑、可驗證。

把批次任務搬上雲端:排程、重跑與可恢復性設計

先定義業務時間,再選擇排程工具

許多團隊搬遷批次任務時,第一步是把機房裡的 Cron 原樣改成雲端排程。這只能解決「何時啟動」,卻沒有說清楚「這次要處理哪一批資料」。例如凌晨一點執行的結算,可能處理前一個營業日,而不是執行當下的日曆日期。若程式直接讀取系統時間,延遲啟動、跨時區部署或人工補跑都可能讓它選錯資料。

較穩定的做法,是讓排程器傳入明確的 business_date、資料區間或分割區,而工作本身不要自行猜測。時區也應寫入排程與執行紀錄,不能只依賴主機預設值。跨國流程還要決定夏令時間、假日與月底關帳如何處理;如果前一批尚未完成,則應明確選擇禁止重疊、排隊等待,或允許不同資料區間並行。

  • 固定時間排程:適合來源資料有明確截止時間,且下游期待固定交付窗口的工作。
  • 事件觸發:適合檔案上傳或上游任務完成後立即處理,但仍需防範事件重送與資料未完整落盤。
  • 資料就緒檢查:適合多來源彙整;排程只負責喚醒協調器,由協調器判斷必要輸入是否齊全。
  • 混合模式:以事件作為主要觸發,再用定時掃描找出遺漏的資料區間,通常比只依賴單一路徑更容易恢復。

把每次執行建模成可識別、可重入的工作

雲端平台通常提供至少一次的觸發與訊息傳遞語意,因此同一工作可能被啟動兩次。與其追求脆弱的「絕不重複」,更實際的目標是建立穩定的執行鍵,例如 job_name + business_date + partition,並以資料庫唯一鍵、物件儲存路徑或協調器狀態表防止同一邏輯工作產生兩份結果。平台產生的 execution ID 則用於區分每次嘗試,方便追蹤重試歷程。

工作邏輯應盡量具備冪等性。覆寫同一個分割區通常比持續附加安全;更新資料庫時可使用 upsert、版本欄位或唯一約束;呼叫外部 ERP、CRM 或通知服務時,則要傳遞冪等鍵,或在本地保存已送出狀態。若外部系統不支援冪等,就必須把「已產生請求」與「已確認完成」分開記錄,避免逾時後無法判斷是否可以再次送出。

  • 先將輸出寫入暫存位置,完成驗證後再以原子操作發布正式結果。
  • 將進度檢查點綁定資料分割區,不要只記錄處理到第幾筆。
  • 讓成功條件包含筆數、必要欄位、檔案完整性與下游可讀性檢查。
  • 避免把不可重建的狀態只放在工作容器本機;容器被回收後仍應能接續或安全重來。

區分重試、重跑與補跑

重試處理的是同一次執行中的暫時性錯誤,例如網路逾時、服務限流或短暫鎖定。它應設定最大次數、指數退避與隨機抖動,並只套用在可能恢復的錯誤上。資料格式錯誤、權限設定錯誤或程式缺陷不會因等待而消失;盲目重試只會增加費用、延遲告警,甚至反覆呼叫外部系統。

重跑是再次處理同一業務區間,通常發生在修正程式或來源資料之後;補跑則是建立過去尚未執行的一段日期或分割區。兩者都應透過正式介面提交參數與原因,而不是登入主機手動修改日期。大量補跑還要限制並行度,避免壓垮來源資料庫、耗盡 API 配額,或讓歷史工作搶走當日正式批次的資源。

  • 可重試錯誤:保留相同邏輯工作鍵,建立新的嘗試編號並記錄前一次錯誤。
  • 不可重試錯誤:立即進入失敗狀態或隔離區,等待資料修正、權限調整或新版程式。
  • 重跑:記錄使用的程式版本、輸入版本與輸出取代策略,確保結果可以稽核。
  • 補跑:先列出預計建立的分割區與相依關係,再分批執行並保留取消能力。

讓操作人員能回答「發生了什麼」

一個批次工作顯示成功,不代表業務結果正確。執行紀錄至少應包含工作鍵、業務日期、觸發來源、程式版本、開始與結束時間、輸入與輸出位置、處理筆數、嘗試次數及錯誤分類。日誌、指標與追蹤資料都應帶有相同的 job key 與 execution ID,才能從排程器一路查到容器、資料庫與外部 API。

告警也不應只監控程式是否退出。更有用的訊號包括工作未在期限前開始、執行時間異常、輸入遲到、輸出缺少分割區,以及工作成功但產出為空。上線前應實際演練重複觸發、中途終止、延遲資料、外部 API 逾時與跨日期補跑。若值班工程師能從操作手冊完成查詢、重試、重跑、取消與結果驗證,這個批次系統才真正具備雲端環境需要的可恢復性;整合團隊的價值,也通常體現在把這些跨系統邊界與責任定義清楚。

開始

有類似的需求?

告訴我們你的產業、目前系統狀態與預算範圍。我們會在 2 個工作天內回覆,並安排 30 分鐘免費諮詢。