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

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

最終更新:
💡 離れたデータの更新を、ひとつの取引として調整

複数のデータベースなどにまたがる処理を、一つのトランザクションとして調整する仕組み。2フェーズコミットなどで、参加者の確定・取り消しを協調させる。

📌 このページのポイント
2フェーズコミットの二段階① 準備を依頼② 決定を伝える調整役確定できる?調整役全員準備OKなら確定DB ADB BDB ADB B参加者が準備結果を返す進められなければ取消同時刻の更新ではなく、同じ決定に従う通信や調整役の障害では、決定待ちになる場合も
全員が準備できた場合に確定する流れの概要です。Sagaの補償処理とは仕組みが異なります。
ひよこ ひよこ
普通のトランザクションとは、何が違う?
ペンギン先生 ペンギン先生
複数のデータベースなどにまたがる点だよ。たとえば別々のDBにある注文と在庫を更新するなら、片方だけ確定して困らないように調整する必要がある。一つのDBの中だけで行う場合より、通信や障害への対処が難しくなるんだ。
ひよこ ひよこ
2フェーズコミットは、どう進むの?
ペンギン先生 ペンギン先生
調整役が参加者へ、まず確定できるよう準備する指示を出す。全員が準備できたら、確定する決定を伝える。準備段階で進められない場合は取り消す。この二段階で、全体として確定するか取り消すかをそろえるんだ。
ひよこ ひよこ
全員が同じ瞬間に書き込むの?
ペンギン先生 ペンギン先生
同時刻に更新する意味ではないよ。同じ確定・取り消しの決定に従う仕組みなんだ。通信や調整役に問題が起きると、参加者が準備したまま決定を待つことがある。たとえばPostgreSQLでも、準備済みの状態が長く続く可能性を説明しているよ。
ひよこ ひよこ
Sagaなら、同じように全部を元に戻せる?
ペンギン先生 ペンギン先生
Sagaは各サービスで個別のトランザクションを確定しながら進め、必要に応じて補償処理を行う考え方だよ。予約の取消のように、確定した操作の影響を打ち消す別の処理を行う。元のデータ状態への完全な復元や、必ず逆順での処理が保証されるわけではないんだ。
ひよこ ひよこ
どちらを使うかは、どう考えるの?
ペンギン先生 ペンギン先生
必要な整合性、各DBやサービスの対応、途中の状態が見えてもよいか、失敗時に補償できるかを考えるよ。Sagaの補償そのものも失敗することがあるので、進捗の記録や再実行、必要なら人による復旧まで設計する。名前だけで選べる万能な方式ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「分散トランザクション」って出てきたら「複数の場所の更新をひとつの取引として調整すること」と思えばだいたいOK!
📖 おまけ:英語の意味
「Distributed Transaction」 = 分散トランザクション
💬 Distributed(分散した)+Transaction(取引・処理一塊)。複数の場所に分散したデータを1つの取引として扱う仕組みだよ

参考資料

← 用語集にもどる