Transaction log tailingパターン
メッセージ発行の信頼性を担保するためのパターン
Outboxパターンの文脈でしか出てこないのかは知らんので、具体化して書いてる↓mrsekut.icon
仕組み
(① Outbox テーブルに書き込む)
ビジネスデータの更新と「送りたいメッセージ」を、同じDBトランザクション内で書き込む
② DB自身のトランザクションログを末尾から読み取って、変更を検知してブローカーに流す
ここがこのパターンの本体mrsekut.icon
アプリのテーブルへのINSERT/UPDATE/DELETEはすべてこのログに記録される
ので、それを「あたかもレプリカDBであるかのように」末尾を追いかけて読み取り、outboxへの追記を検知してイベントに変換し、ブローカーへpublishする
Polling publisherパターンと比較して
pros
コミットされた瞬間にログに乗るので、ほぼリアルタイム
DBへの追加負荷が小さい
アプリコードに手を入れにくい
場合によってはoutboxテーブルすら不要で、業務テーブルへの変更を直接CDCで拾う設計も可能
cons
インフラが複雑
DB依存
WAL/binlogのフォーマットや論理レプリケーション設定に依存する
DB固有の知識が要る
ツール
Debezium
Maxwell
AWS DMS