🗄️

マイクロサービス におけるデータ整合性の担保方法とは

2023/03/16に公開

概要

マイクロサービスでは複数のDBが存在するのでデータ整合性が難しくなります。
そこで、整合性を担保する方法を2つ見て行こうと思います〜!

  1. 2相コミット
  2. Saga(サーガ)

💭2相コミット(2フェーズコミット)とは

各データベースの状況を確認してから、各DBを同じ状態にする手法

具体的には2つのフェーズに分かれている。

フェーズ1

DB_AとDB_Bにコミットして良いか確認
※確認している間はロックされる

フェーズ2

確認の結果両方OKだった場合コミットを実行

2相コミットのデメリット

  • ロックされるため、調整が難しい。
  • 通信が同期的になり、システム全体のレイテンシーを低下させる

💭Saga(サーガ)とは

補償トランザクション(ロールバック用のAPI)を使って整合性を取る手法。

補償トランザクションによって、擬似的なロールバックが可能となります。

Sagaの実現方法

Choreography(コレオグラフィ)

呼び出されたサービスが次のサービスを呼び出す設計。
呼ばれたサービスはどのような処理を行うかという事だけしか知らず、その先のサービスで何が起きるかは関知しない。

Orchestration(オーケストレーション)

中央集権的なコントローラ(オーケストレータ)が、
どのローカルトランザクションを実行するかを管理と指示してくれる設計

参照

https://zenn.dev/tatta/books/4e993c596e7dc9/viewer/4700fb

https://blog.bytebytego.com/p/orchestration-and-choreography

Discussion