
113
3
Sagaパターン
マイクロサービスアーキテクチャにおいて複数のサービスをまたがる
分散トランザクションの一部が失敗してしまった場合に、結果整合性を
実現する方法として代表的なアーキテクチャパターンがSagaパターン
※5
です(サーガパターンと読みます)。
具体例を用いて説明しましょう。図3.3.6 はあるシステムの注文ユー
スケースを実現するマイクロサービスの例です。注文処理サービスは
ファサード的に処理を束ねるもので、注文サービスの注文登録処理
(①)を呼び出した後、続いて在庫サービスの在庫引当処理(②)、最後
に決済サービスの決済処理(③)を呼び出します。ここで、クレジット
カードが無効化されていたなどの理由で決済エラーが発生(④)したら
どうなるでしょうか。①と②は既にトランザクションが完了してデータ
ベースが更新済みのため、決済が失敗したのにもかかわらず注文が登録
され、在庫の数量も減った不整合状態が発生してしまいます。この不整
合状態を解消するためには、③の決済処理の成否に応じて後処理が必要
となります(もちろん①や②が失敗したケースも考慮が必要となります
が、ここでは③の処理に絞って考えます)。
⹅
図3.3.6
分割トランザクションの失敗
注文処理
サービス
注文
サービス
①注文登録
②在庫引当
③決済
④決済エラー
DB
在庫
サービス
DB
決済
サービス
DB