イベントのリトライ時にデータの不整合が生じないか?¶
Type: DeepDive
Category: データ
Audience: 設計リーダー / SRE / インフラ設計者 / レビュー担当者
背景・概要¶
イベント駆動・非同期処理では、失敗時にリトライされる設計が一般的だが、再実行によって処理が重複・逆順になるとデータ不整合が生じるリスクがある
設計段階で冪等性や再実行順序の影響を把握し、制御を入れる必要がある
例¶
- リトライ時に備え、処理対象の event_id を一意にして、同一イベントの重複実行を抑止する
- 出力先DBに「すでに処理済みかどうか」を示すフラグを保持し、冪等チェックをする
- Google Cloud Pub/Sub + Cloud Tasks・AWS SNS/SQS + Lambda・AzureService Bus + Queue Storage + Functions を使って、確実な順序保証が不要な処理に設計を分離する
よくある失敗例¶
- 複数回の再実行で重複レコードが生成され、業務処理に影響(例:メール2通送信、請求書2枚発行)
- 再処理で以前の値を上書きし、過去の正しい状態を破壊する
- 「同じイベントが複数回くる」ことを前提にしていない
FAQ¶
Q. 冪等性とは?
A. 同じ処理を何回実行しても結果が変わらないこと。イベント処理では必須の性質
Q. リトライが重複するならリトライしなければ?
A. リトライしないとそもそも処理が完了しないからリトライするので、「何回やっても同じになる」ように作るのが基本です