🧩 Outbox Pattern(Transactional Outbox)
Outbox Pattern は、サービス間連携における データ整合性とイベント配送の不整合 を解消するための代表的な Integration パターンである。
✅ このスタイルの概要
アプリケーションのローカルトランザクション内で
(A)DB の更新 と (B)イベントの記録 を同時に行い、
その後バッファ(Outbox テーブル)からイベントを外部に配送する構造を取る。
✅ 解決しようとした問題
- DB 更新は成功したがイベント送信が失敗する
- イベントは送られたが DB 更新がロールバックされた
- 分散トランザクション(2PC)を避けたい
- マイクロサービス間で強整合性を保てない
Outbox Pattern は ローカル DB トランザクションにすべてを閉じ込める ことでズレを防ぐ。
✅ 基本思想・構造
- Outbox テーブルは「未送信イベント」のバッファ
- Dispatcher が定期的に Outbox を読み、Kafka / SNS / etc に送信する
- 成功後に Outbox レコードを削除 or マーク済みにする
✅ 得意なアプリケーション
- マイクロサービス間のデータ整合性が重要
- CRUD + イベント連携が中心の業務系
- 監査・変更履歴を残したいケース
❌ 不向きなケース
- 超高頻度でイベントを大量生成する場合(Outbox がボトルネック化)
- 遅延が極めてシビアなワークロード
✅ 関連スタイル
✅ まとめ
Outbox Pattern は、マイクロサービス時代の 最も実務的な整合性担保パターン であり、
DB 更新とイベント配送のズレを避けるための標準的手法である。