【ぶんさんとらんざくしょん】

分散トランザクション とは?

💡 離れた複数の引き出しを同時に操作——全部OK、でなければ全部元に戻す
📌 このページのポイント
分散トランザクション(2フェーズコミット) コーディネーター (トランザクションマネージャー) DB ノード 1 注文サービス DB ノード 2 在庫サービス DB ノード 3 決済サービス ①準備OK? Phase 1 Phase 2 ②全員OK → コミット 1件でもNG → 全員ロールバック
2フェーズコミット:全ノードの合意を得てから一斉コミットする
ひよこ ひよこ

分散トランザクションって、普通のトランザクションと何が違うの?

ペンギン先生 ペンギン先生

普通のトランザクションは1つのDBの中で完結するけど、分散トランザクションは複数のDB・サービスをまたいで「全部成功」か「全部失敗」を保証しようとするんだよ。

ひよこ ひよこ

複数のDBに同時に書き込むって、どうやって管理するの?

ペンギン先生 ペンギン先生

一番有名なのが「2フェーズコミット2PC)」だよ。まず全員に「準備OK?」と聞いて(フェーズ1)、全員がOKなら「コミットして!」と指示する(フェーズ2)。1人でもNGなら全員ロールバックするんだ。

ひよこ ひよこ

ちゃんと保証できるなら完璧なんじゃないの?

ペンギン先生 ペンギン先生

問題はコーディネーターがクラッシュすると参加者が宙ぶらりんになること。ロックを長時間保持するのでパフォーマンスも落ちやすいんだ。

ひよこ ひよこ

マイクロサービスではどう対処するの?

ペンギン先生 ペンギン先生

Sagaパターンがよく使われるよ。各サービスがイベントを順番に処理して、失敗したら「補償トランザクション」で逆順にロールバックする。厳密な即時整合性ではなく「結果整合性」で割り切る設計だね。

ひよこ ひよこ

XAプロトコルって何なの?

ペンギン先生 ペンギン先生

分散トランザクションの業界標準仕様だよ。JavaJDBCやJTAが準拠していて、異なるDBベンダー間でも2PCを使えるようにした規格なんだ。ただ現代のクラウドネイティブ環境では使いにくいケースも多いよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「分散トランザクション」って出てきたら「複数DBをまたぐ全か無かの処理」と思えればだいたいOK!
📖 おまけ:英語の意味
「Distributed Transaction」 = 分散トランザクション
💬 Distributed(分散した)+Transaction(取引・処理一塊)。複数の場所に分散したデータを1つの取引として扱う仕組みだよ
← 用語集にもどる