🗄️
マイクロサービス におけるデータ整合性の担保方法とは
概要
マイクロサービスでは複数のDBが存在するのでデータ整合性が難しくなります。
そこで、整合性を担保する方法を2つ見て行こうと思います〜!
- 2相コミット
- Saga(サーガ)
💭2相コミット(2フェーズコミット)とは
各データベースの状況を確認してから、各DBを同じ状態にする手法
具体的には2つのフェーズに分かれている。
フェーズ1
DB_AとDB_Bにコミットして良いか確認
※確認している間はロックされる
フェーズ2
確認の結果両方OKだった場合コミットを実行
2相コミットのデメリット
- ロックされるため、調整が難しい。
- 通信が同期的になり、システム全体のレイテンシーを低下させる
💭Saga(サーガ)とは
補償トランザクション(ロールバック用のAPI)を使って整合性を取る手法。
補償トランザクションによって、擬似的なロールバックが可能となります。
Sagaの実現方法
Choreography(コレオグラフィ)
呼び出されたサービスが次のサービスを呼び出す設計。
呼ばれたサービスはどのような処理を行うかという事だけしか知らず、その先のサービスで何が起きるかは関知しない。
Orchestration(オーケストレーション)
中央集権的なコントローラ(オーケストレータ)が、
どのローカルトランザクションを実行するかを管理と指示してくれる設計
参照
Discussion