LESSON 30分

ストーリー

佐藤CTO
設計が終わった。だが、本当にこの設計で良いのか?
佐藤CTO
アーキテクチャレビューなしにプロジェクトを開始するのは、地図を確認せずに航海に出るようなものだ。ATAMは、設計のトレードオフを体系的に分析する手法だ
佐藤CTO
NexPayの設計を、ATAMで評価してみよう

ATAMとは

概要

ATAM(Architecture Tradeoff Analysis Method)は、カーネギーメロン大学のSEI(Software Engineering Institute)が開発したアーキテクチャ評価手法です。

ATAMの目的:

  ① トレードオフの発見
    -- ある品質属性を優先すると、他の品質属性が犠牲になるポイント

  ② 感度点の特定
    -- アーキテクチャの小さな変更が品質属性に大きく影響するポイント

  ③ リスクの識別
    -- 品質属性の目標を達成できない可能性があるポイント

  ④ 非リスクの確認
    -- 設計が適切であると確認できたポイント

ATAMのプロセス

ATAMの9ステップ:

Phase 1: プレゼンテーション
  Step 1: ATAMの説明
  Step 2: ビジネスドライバーの説明
  Step 3: アーキテクチャの説明

Phase 2: 調査・分析
  Step 4: アーキテクチャアプローチの特定
  Step 5: 品質属性ユーティリティツリーの作成
  Step 6: アーキテクチャアプローチの分析

Phase 3: テスト
  Step 7: シナリオのブレインストーミングと優先順位付け
  Step 8: アーキテクチャアプローチの分析(追加シナリオ)

Phase 4: レポート
  Step 9: 結果の報告

NexPayへのATAM適用

Step 1-3: ビジネスドライバーとアーキテクチャの説明

■ ビジネスドライバー

1. 月間取引額1,000億円を安全に処理する決済基盤
2. 金融規制(PCI DSS、資金決済法)への準拠
3. 18ヶ月での市場投入
4. 100万ユーザーへのスケーリング
5. 99.99%の可用性(年間ダウンタイム52.6分以内)

■ アーキテクチャの主要決定

1. マイクロサービスアーキテクチャ(DDD + 境界づけられたコンテキスト)
2. イベントソーシング + CQRS(決済サービス)
3. マルチリージョン(東京 + 大阪)
4. Kubernetes (EKS) + Istio
5. Aurora PostgreSQL + Kafka

Step 5: 品質属性ユーティリティツリー

品質属性ユーティリティツリー:

可用性 (Availability)
├── [H,H] 決済APIの99.99%可用性
├── [H,M] リージョン障害時の5分以内フェイルオーバー
└── [M,M] 縮退運転モードでの部分稼働

パフォーマンス (Performance)
├── [H,H] 決済レイテンシ p99 < 800ms
├── [H,M] ピーク時5,000 TPSの処理
└── [M,L] 残高照会 p99 < 200ms

セキュリティ (Security)
├── [H,H] PCI DSS Level 1準拠
├── [H,H] カード情報のトークナイゼーション
└── [H,M] ゼロトラスト(mTLS + JWT)

変更容易性 (Modifiability)
├── [M,H] 新決済手段の追加(2週間以内)
├── [M,M] サービスの独立デプロイ
└── [L,M] 技術スタックの部分的入れ替え

凡例: [ビジネス重要度, 技術難易度]  H=High, M=Medium, L=Low

Step 6: アーキテクチャアプローチの分析

■ 分析結果

トレードオフ (Tradeoff):
  T1: イベントソーシング vs 実装複雑性
    - 効果: 完全な監査証跡、任意時点の状態復元
    - 代償: 実装複雑性の増大、イベントスキーマの進化管理
    - 判定: フィンテックの監査要件上、複雑性は許容

  T2: マイクロサービス vs 運用複雑性
    - 効果: チームの自律性、独立デプロイ、技術選択の自由度
    - 代償: 分散システムの運用複雑性、サービス間通信の信頼性
    - 判定: チーム規模(20名+)と要件を考慮し、複雑性は許容

  T3: マルチリージョン vs コスト
    - 効果: 99.99%可用性、リージョン障害への耐性
    - 代償: インフラコスト約1.5倍、データ同期の複雑性
    - 判定: 決済基盤の可用性要件上、コスト増は許容

感度点 (Sensitivity Point):
  S1: Kafkaのパーティション設計
    - 決済IDでパーティショニング → 順序保証
    - パーティション数の変更は再バランシングが必要
    → 初期設計で十分なパーティション数を確保すること

  S2: Aurora Global Databaseのレプリケーション遅延
    - 通常 < 1秒だが、大量書き込み時に遅延増加の可能性
    → 書き込み量のモニタリングとアラート設定が必須

リスク (Risk):
  R1: イベントスキーマの進化管理
    - スキーマの後方互換性を維持できないと、既存イベントの再処理が破綻
    → Schema Registryの導入とスキーマ進化ポリシーの策定

  R2: サービス間の障害伝播
    - Circuit Breakerの設定不備により、1サービスの障害が全体に波及
    → Istioのサーキットブレーカー設定のテスト・チューニング

非リスク (Non-Risk):
  N1: Aurora PostgreSQLの性能
    - r6g.4xlargeで1,000 TPS以上の処理実績あり。性能要件を満たせる
  N2: EKSのスケーリング
    - HPAとCluster Autoscalerにより、ピーク時5,000 TPSに対応可能

まとめ

ポイント内容
ATAMの目的トレードオフ、感度点、リスク、非リスクの体系的な特定
ユーティリティツリー品質属性をビジネス重要度と技術難易度で優先順位付け
トレードオフイベントソーシング vs 複雑性、マイクロサービス vs 運用負荷
リスクスキーマ進化管理と障害伝播が主要リスク

チェックリスト

  • ATAMの9ステップのプロセスを理解した
  • 品質属性ユーティリティツリーを作成できた
  • トレードオフ、感度点、リスクを特定できた
  • 非リスク(設計が適切と確認できた点)を記録できた

次のステップへ

次は「リスク分析と軽減策」に進みます。ATAMで特定したリスクに対する具体的な軽減策を設計しましょう。


推定読了時間: 30分