概要
Sagaパターンについて調べたことをメモ。
Sagaパターンとは
- マイクロサービスにおいては、分散トランザクション(2phase commitなど)は推奨されていない
- 分散トランザクションを避け、整合性を担保するパターンとしてSagaパターンがある
- 長時間のロックを避け、結果整合性を利用する
- 補償トランザクション
- 一連のトランザクションの取り消しを行う操作
- Sagaパターンでは単純なロールバックを禁止している
- マイクロサービス特有のパターンではなく、SOAでも使われていた
- 実装パターン
- Choreography(コレオグラフィ)
- 各サービスが自身の責務を持ってトランザクションを進めていく
- SPOFを避けれるが、全体のテストがしづらくなる
- Orchestration(オーケストレーション)とは、
- 中央集権的なサービスを用意し、各サービスに指示を出してトランザクションを進めていく
- SPOFになりやすいが、全体のテストがしやすくなる
- Choreography(コレオグラフィ)
- ソフトウェアアーキテクチャ・ハードパーツでは8つの種類のSagaパターンが紹介されている
その他のパターン
マイクロサービスの整合性を保つ別のパターンとして、Sagaパターン同じく結果整合性を利用するTCC(Try-Confirm/Cancel)パターンというものもある。
2phase commitに似ているが、TCCパターンでは、各サービスがトランザクションの準備、確認、キャンセルの3つのステップを持つ。
TCCパターンは補償トランザクションのようなロールバックは行わず、不整合の生じる処理を行わないことにすることで整合性を担保する。
参考
- www.cs.cornell.edu - SAGAS
- microservices.io - Pattern: Saga
- qiita.com - マイクロサービスに移行した際の分散トランザクションの危険性
- qiita.com - マイクロサービスのトランザクション管理をデザインする(事前知識編)
- zenn.dev - awsで実現するsagaパターン(コレオグラフィ編)
- learn.microsoft.com - saga 分散トランザクション パターン
- docs.aws.amazon.com - Sagaパターン
- wakatchi.dev - TCCパターンとSagaパターンでマイクロサービスのトランザクションをまとめてみた
- eikatou.net - 分散トランザクション Sagaパターンを学ぶ
- techblog.raksul.com - マイクロサービスにSagaパターンを用いて検証を行った
- www.techscore.com - マイクロサービスにおけるトランザクション【Saga】
- www.12-technology.com - [SAGAパターン]コレオグラフィとオーケストレーションのメリット・デメリット
- cloud.google.com - WorkflowsでSagaパターンを実装する
- medium.com - GCP でマイクロサービス Saga パターン編
- www.oracle.com - Microservicesアーキテクチャのトランザクション管理の現実
- speakerdeck.com - 気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド
- engineering.mercari.com - メルコイン決済基盤における分散トランザクション管理