0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

分散トランザクションにおけるSagaパターン設計と分析

Posted at

1. イントロダクション

マイクロサービス環境では、分散トランザクション制御は避けて通れません。特に Sagaパターン は、分散システムで 可用性一貫性 のバランスをとりつつビジネス処理を完遂する代表的手法です。本稿では 3 方式をアーキテクト視点で比較し、選定と改善の実務指針を提示します。

  • Choreography Pattern
  • Orchestration Pattern
  • Single Pessimistic Pattern(Fail Fast 型)

2. 各パターンの要約

2.1 Choreography

イベント駆動。各サービスがイベントを購読し、状態遷移と補償トランザクションを自律的に実行。中央制御が不要なため疎結合・拡張性が高い。一方で全体フローの俯瞰が難しく、過度なイベント連鎖(“イベント・スパゲッティ”)のリスクがある。

saga_choreography.png

2.2 Orchestration

専用オーケストレータが Saga の進行・分岐・補償を統制。監査性・可観測性・手続き的明確さが強み。一方で制御プレーンのボトルネック化/集中障害点(SPOF)化やスケール対応コスト増が課題。

saga_orchestration.png

2.3 Single Pessimistic (Fail Fast)

悲観的方式(例: 競合チェックやロック)で早期に失敗を返すモデル。高スループット下でもレイテンシを最小化しやすいが、“成功率” だけでは価値を測りにくく、ワークロード特性(競合度・ホットキー偏在)との適合が成否を左右する。

pessimistic_lock.png

3. 実験設計の概要

  • 対象パターン: Choreography / Orchestration / Single Pessimistic
  • 収集メトリクス: e2e_latency / convergence_events / saga_steps / load_phase_results
  • 負荷プロファイル: Light / Medium / Heavy(RPS増加・競合率上昇)
  • 評価軸(一次): 平均/中央値/ p95 / p99 レイテンシ, 失敗率, 収束時間, 補償イベント発生頻度
  • 評価軸(二次): 実装複雑度, 運用コスト, デバッグ容易性, スケール戦略

4. 分析結果サマリ(プレースホルダ)

4.1 レイテンシ分布

output.png

Single Pessimistic は中央値まで最速、Choreography は中庸かつ安定、Orchestration は高分位 (p95/p99) で尾が伸び集中制御がボトルネック化。SLO 設計では “中央値” より “尾部” 改善の優先度差が明確。

4.2 失敗率と補償イベント

output.png

Single Pessimistic は失敗率高めでも補償コスト低、Orchestration は失敗抑制と引き換えに補償集中リスク、Choreography は分散するが監視遅れると補償増を見逃しやすい。補償/成功比が “整合性税” 指標。

4.3 Response Timeヒートマップ

output.png

負荷増で Orchestration が顕著に劣化、Single Pessimistic は増加率が緩やか、Choreography は漸進的。重負荷下の色濃度差がボトルネックの性質(中央集約 vs 分散イベント vs ロック衝突潜在)を示唆。

4.4 Throughputとthroughput_effect棒グラフ

output.png

Raw が伸びても throughput_effect が追随しないパターンは失敗/補償オーバーヘッド増。Single Pessimistic はギャップ拡大しやすく、Orchestration は安定効率、Choreography は中間。効率比(throughput_effect / raw) が早期劣化警報に有効。

5. 詳細考察(アーキテクト視点)

5.1 レイテンシ特性

  • Single Pessimistic: 最短(ネットワーク往復 + 最小ローカル処理)。失敗(即時リジェクト)を遅延した成功より安価とみなす前提。
  • Choreography: 中庸。イベント非同期伝搬が局所遅延を平滑化する一方、連鎖長と再試行が p95/p99 を押し上げる。
  • Orchestration: Heavy 負荷下で遅延が顕在化。オーケストレータ待ち行列と同期呼び出しカスケードがボトルネック。

5.2 信頼性と補償

  • Choreography / Orchestration: 補償手順が明示化され失敗率 <1%(想定)。
  • Single Pessimistic: 高失敗率でも “Fail Fast” が前提。健全性は有効処理あたりCPU秒・公平度など別指標で評価。

5.3 性能劣化要因(特に Orchestration)

要因 メカニズム 改善余地
シリアル化 ステップ間同期 + 中央制御 並列ブランチ化 / 非同期化
状態保持コスト Sagaインスタンス状態の集中管理 状態分散 / Event Sourcing + キャッシュ
I/O 待ち 外部サービス依存呼び出し直列化 Bulkhead / Timeout最適化 / CircuitBreaker
オーバーヘッド 汎用フレームワーク層 軽量実装 / gRPC + バイナリプロトコル化

5.4 Choreography のスケール観点

  • 良い点: 新サービス追加は購読登録のみ → 組織スケール容易
  • 課題: 監査(誰が何をどの順序で)が後追いになりやすく分散トレーシング前提。
  • 設計要点: 1イベント=1責務 / 冪等キー / 再送 + DLQ / スキーマバージョン管理。

5.5 Single Pessimistic の適用境界

  • ロック粒度が粗いとドロップ率↑ → 事前パーティショニング必須
  • ホットスポット偏在時はシャーディング再配置コストが顕著
  • “成功率” より “平均待ち行列長” “衝突率勾配” を SLO 指標化

6. 実務的インプリケーション(最終)

6.1 意思決定フレーム

選定マトリクス(要件 vs パターン適合度)

要件/特性 Choreography Orchestration Single Pessimistic 補足判断指標
開発組織スケール(チーム数増) 自律性最大化ならChoreography
可観測性/監査 規制/監査要件でOrchestration優位
初期実装スピード Fail Fastは範囲限定
レイテンシ最小化(p95重視) 競合が低〜中で効果大
競合ホットスポット頻度 ロック競合に弱い
補償手順の一元統制 中央定義可能性
サービス追加頻度 イベント購読追加のみ
ガバナンス/変更承認 フロー定義集約
並列/分岐制御複雑度 DSL/ワークフロー機能
学習コスト ドメインイベント設計負荷
Fail Fast 許容度 ビジネス拒否=正常扱い

凡例: ◎=強く適合 / ○=適合 / △=注意 / ×=不適

クイック診断

Yes が多い列が候補:

  1. 「サービス追加頻度が高い / チーム自治」→ Choreography
  2. 「監査・分岐複雑 / 失敗補償統制」→ Orchestration
  3. 「p99 低遅延最優先 / 競合高速拒否許容」→ Single Pessimistic

6.2 主なアンチパターン

アンチパターン 説明 早期兆候 緩和策
イベント連鎖過度化 目的不明イベント増殖 トレース深さ>10 イベント命名規約 / 集約再設計
オーケストレータ巨大化 1ファイル/クラス集中 PR差分肥大 機能別分割 / 階層化 / DSL分離
ロック粒度過大 単一グローバルロック 成功率急落 / 衝突率急増 シャード細分化 / Key設計見直し
無制限/安易リトライ 再送が指数的増加 DLQ溢れ / p99上昇 Backoff + Jitter + 上限制御
補償ロジック欠落 逆操作未定義 不整合チケット増 補償テンプレ / 自動テスト
モニタリング不足 主要メトリクス欠如 Post-mortem遅延 OTel / 必須Span検証CI
Fail Fast誤用 需要>供給で成功率極小 SLO未定義 スロット予約 / フェアキュー

6.3 リスクと緩和策

リスク 検知指標 (例) 影響大パターン 緩和策
集中ボトルネック Orchestrator CPU>70%継続 Orchestration 水平スケール / ステップ非同期化
イベント滞留 キュー滞留件数増 / p99上昇 Choreography キュー分割 / 優先度 / コンシューマ増強
ホットシャード偏在 衝突率閾値超 / 偏差↑ Single Pessimistic 一貫ハッシュ再計算 / 動的再配置
補償失敗連鎖 補償失敗率>1% 全般 冪等化 / ステップ縮小 / CircuitBreaker
再送洪水 再送率>成功率 Choreography Backoff + 冪等キー / DLQ閾値アラート
監査欠落 トレース欠損率>0.5% 全般 OpenTelemetry / 必須Spanスキーマ検証
公平性劣化 Starvation検出 / 待ち時間分布歪み Single Pessimistic フェアスケジューラ / Token Bucket調整

7. 推奨アクション(最終)

  1. Orchestration Heavy の性能最適化(並列度 / I/O 効率 / キャッシュ戦略再検討)
  2. 競合ログ拡張(リトライ回数 / ロック衝突率 / シャード偏在度)
  3. 監視における 400(業務拒否)と 500(障害)の分離ダッシュボード
  4. 指標層強化(分位数 / 衝突率勾配 / リトライ分布 / 公平度メトリクス)

8. まとめ(最終)

  • Choreography: バランス型・拡張性良好
  • Orchestration: 制御型・スケール最適化余地大
  • Single Pessimistic: 超低レイテンシ・評価軸再設計前提
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?