AWS ソリューションアーキテクト プロフェッショナル二重書込み・ハイブリッドDNS・整合性オリジナル・公式資料照合難易度★★★★☆
RDS for PostgreSQLで注文を確定してからイベントを送るアプリで、DBのCOMMIT直後にプロセスが落ちると送信されない。DBと通知サービスの分散トランザクションは使わない。注文確定と「送るべきイベント」の登録を一体化する設計はどれか。
A
注文とoutboxを同じDBトランザクションで確定し、送信処理が再試行可能に読み出す★ 正解
DB更新と送信すべき事実を原子的に保存し、DBと通知の二重書込みのすき間を埋める。
B
イベントを先に送信し、その後DBをCOMMITすれば整合性は必ず保たれる
DBが失敗すると、確定しなかった注文のイベントだけが送られる逆の不整合が起こり得る。
C
DBをCOMMITしてから、同じプロセスのメモリーキューへだけイベントを入れる
プロセスが落ちるとメモリーの未送信分を失う可能性があり、原子的な永続登録にならない。
D
送信APIをDBトランザクション内で呼ぶだけで、通知サービスもDBのROLLBACKに従うと扱う
外部通知が同じDBのCOMMIT/ROLLBACKへ自動参加するわけではない。
解説
注文データとoutboxレコードを同じDBトランザクションで保存し、別の送信処理がoutboxを読み通知する。送信後・記録前の障害等では重複があり得るため、再試行と消費側の冪等性も必要になる。
根拠資料・確認情報
対応範囲:SAP-C02(2026-11-16最終受験予定、2026-10-30時点)
資料確認日:2026-10-30