2013-01-08 18 views
1

假設我有一個基於外部條件執行某些活動的過程,它隨着時間的推移可以修改,例如,基於存儲在數據庫中的數據。如果這樣的過程然後被強行殺死並再次啓動,則數據將不一致 - 例如,關於服務狀態的信息將不足或部分同步的數據分支將是多餘的。強制殺死(中止)過程的處理

如何處理這種情況?我應該在啓動過程時檢查一些有線不一致情況,並在主邏輯啓動之前對數據進行標準化,或者我能檢測到中止信號並進行清洗?我並不擔心這個過程獲得的資源,但是它已經能夠執行的未完成的更改(儘管新鮮啓動的過程可以很好地檢測到這些更改)。

回答

1

這樣的問題一般都解決了以下方式:

  1. 分手了你的過程分成幾個小行動
  2. 確保每個動作都idempotent,這意味着它可以在不改變被執行多次第一次執行的結果
  3. 成功完成操作後,提前執行整個過程的狀態。

像這樣,你總是可以重新開始流程,從最後一個成功執行的動作開始,然後從那裏繼續。

1

你沒有提到你的過程是什麼或者它維持的狀態,你在寫數據文件,插入/更新/刪除數據庫中的行嗎?

如果您所談論的潛在不一致數據存儲在數據庫中,處理這種情況的通常方法是確保您的所有數據更改都在表示原子工作單元的事務中處理。

通過這種方式,如果進程在事務處理中途中止,數據庫將檢測到這一點並自動撤銷對該點所做的更改,將狀態恢復到先前(一致)的時間點。

因此使用事務應確保數據庫狀態始終保持一致,並且需要進行最少的一致性檢查。