Sagaパターンについて調べたことをメモ

システムアーキテクチャ

概要

Sagaパターンについて調べたことをメモ。

Sagaパターンとは

  • マイクロサービスにおいては、分散トランザクション(2phase commitなど)は推奨されていない
    • 分散トランザクションを避け、整合性を担保するパターンとしてSagaパターンがある
  • 長時間のロックを避け、結果整合性を利用する
  • 補償トランザクション
    • 一連のトランザクションの取り消しを行う操作
    • Sagaパターンでは単純なロールバックを禁止している
  • マイクロサービス特有のパターンではなく、SOAでも使われていた
  • 実装パターン
    • Choreography(コレオグラフィ) 
      • 各サービスが自身の責務を持ってトランザクションを進めていく
      • SPOFを避けれるが、全体のテストがしづらくなる
    • Orchestration(オーケストレーション)とは、
      • 中央集権的なサービスを用意し、各サービスに指示を出してトランザクションを進めていく
      • SPOFになりやすいが、全体のテストがしやすくなる
  • ソフトウェアアーキテクチャ・ハードパーツでは8つの種類のSagaパターンが紹介されている

その他のパターン

マイクロサービスの整合性を保つ別のパターンとして、Sagaパターン同じく結果整合性を利用するTCC(Try-Confirm/Cancel)パターンというものもある。

2phase commitに似ているが、TCCパターンでは、各サービスがトランザクションの準備、確認、キャンセルの3つのステップを持つ。

TCCパターンは補償トランザクションのようなロールバックは行わず、不整合の生じる処理を行わないことにすることで整合性を担保する。

参考