Home
Get Started
実践ガイド
外部仕様設計
バッチ処理仕様設計
UAC 仕様設計
データ仕様設計
インフラ設計
移行計画
テスト方針・計画
開発プロセス・規約
インフラ 性能・拡張性設計
システムの安定稼働と将来的な負荷増大に備えた、インフラの性能設計と拡張性確保の方式を定義します。
🎯 概要
- 目的: システムが要求されるサービスレベルを安定的に提供し、将来的な負荷増大に対して柔軟かつ効率的に拡張できるインフラ基盤を設計する
- スコープ: 性能・拡張性の非機能要件の実現方式、インフラリソース構成、スケーリング方針、性能テスト計画をカバーする。個別機能の詳細な性能チューニングは対象外
- 推奨する実施タイミング: 通常、システムアーキテクチャ設計と並行して、基本設計の初期~中期段階で実施する
- 関連するステークホルダー: システムアーキテクト、インフラチーム、プロジェクトマネージャー、性能テスト担当者
📥 重要な前提知識・インプット
- 前提知識: インフラアーキテクチャ設計の基礎知識、クラウドサービス(オートスケーリング、ロードバランサー、マネージドDB)の理解、性能測定・チューニング手法、キャパシティプランニングの考え方
- インプット: 非機能要件定義書(性能・拡張性要件)、システムアーキテクチャ設計書、業務量予測データ(ユーザー数推移、アクセス傾向)、予算・コスト制約
📄 成果物の定義
- ドキュメントテンプレート: 📄
[テンプレ]インフラ 性能・拡張性設計書
- 必須要素: 性能・拡張性要件の実現方式定義書(業務処理量・性能目標値・リソース拡張性の各項目)、インフラ構成図(スケーリング方針含む)、性能テスト計画書、キャパシティプランニング資料
✅ 品質基準・レビュー観点
✅ 品質チェックリスト:
| チェック項目 | チェック内容 |
|---|---|
| 要件網羅性 | 非機能要件で定義された全ての性能・拡張性項目に対する実現方式が記載されているか |
| スケーラビリティ | 水平スケーリング/垂直スケーリングの方針とオートスケーリング設定が明確か |
| 性能目標値の妥当性 | レスポンスタイム、スループット、リソース使用率の目標値が具体的に定義されているか |
| テスト計画 | 負荷テスト、ストレステスト、スケーラビリティテスト、耐久テストの計画が明確か |
| キャパシティプランニング | 将来の負荷増大を見越したリソース拡張計画が策定されているか |
| コスト試算 | インフラコスト(初期/運用)が見積もられ、予算内に収まるか |
👁️🗨️ レビュー観点:
- 要件との整合性: 非機能要件(業務処理量、性能目標値、リソース拡張性)に対する実現方式が適切に定義されているか
- 技術的実現可能性: 選定したインフラ構成とスケーリング方針が技術的に実現可能で、実績のある構成か
- コスト妥当性: インフラコスト(サーバー、ストレージ、ネットワーク)が予算内に収まり、将来的なスケーリングコストも考慮されているか
- 運用・監視の容易性: 性能監視、アラート設定、リソース自動調整の運用方法が明確で実施可能か
- リスク対策: 性能劣化、拡張限界、コスト増大などのリスクが特定され、対策が講じられているか
🧪成果物のサンプル
# 性能・拡張性(Performance & Scalability)
## 性能・拡張性の基本方針
システムが要求されるサービスレベルを安定して提供し、将来的なビジネス成長やユーザー数の増加に柔軟に対応するためのインフラ・ミドルウェア戦略を以下に示す。
### 性能最適化方針
- **インフラ・ミドルウェアの継続的な監視と分析**: ボトルネックを早期に特定し、リソース配分や設定の最適化を実施
- **キャッシュミドルウェアの積極的な活用**: 頻繁にアクセスされるデータやAPI応答をキャッシュし、DB/APIサーバー負荷を軽減
- **DB設定の最適化とチューニング**: インデックス設計、パラメーター調整を徹底し、DBアクセス性能を最大化
- **ネットワーク経路の最適化**: 低遅延・高帯域のネットワーク構成を採用し、通信性能を確保
### 拡張性確保方針
- **水平スケーリングを前提としたインフラアーキテクチャ**: 共有ディスクレス構成とし、サーバー台数の増減に柔軟に対応
- **クラウドネイティブなサービス活用**: オートスケーリング、マネージドデータベース、メッセージキューなどのサービスを積極的に利用
- **容量計画(キャパシティプランニング)**: 定期的な負荷テストと将来予測に基づき、インフラリソース計画を策定
### 運用効率化方針
- **性能監視の自動化**: 主要なインフラ・ミドルウェアの性能指標をリアルタイムで監視し、異常を早期検知
- **リソース自動調整**: オートスケーリングポリシーに基づき、負荷に応じてサーバーリソースを自動増減
- **パフォーマンスレポート**: 定期的にインフラ・ミドルウェアの性能レポートを作成し、リソース最適化や設定改善に繋げる
---
## 5.3.2 性能・拡張性要件の実現方式
### B1. 業務処理量 (Business Processing Volume)
#### B1.1 通常時の業務量 (Normal Business Volume)
##### B1.1.1 ユーザー数
- **要件**: 通常時アクティブユーザー数 5,000人
- **実現方式・仕様**:
- 認証基盤(IDaaS)は、5,000アクティブユーザーを安定処理可能なプランを選定
- ロードバランサーの最大同時接続数は、ユーザー数 x 平均セッション数(例: 5,000 x 5 = 25,000)を許容する設定
##### B1.1.2 同時アクセス数
- **要件**: ピーク時同時セッション数 25,000
- **実現方式・仕様**:
- ロードバランサーの最大同時接続数は25,000以上を確保
- APサーバーのコネクションプール設定は、各インスタンスあたり200コネクションとし、合計で25,000セッションを処理可能な台数を確保
##### B1.1.3 データ量
- **要件**: データベースデータ総量 1TB、ファイルストレージ容量 5TB
- **実現方式・仕様**:
- データベースは、1TBのデータ量を格納可能なインスタンスタイプ(例: AWS RDS db.r6g.large)を選定
- ファイルストレージは、オブジェクトストレージ(例: Amazon S3)を利用し、5TBのデータ保存を前提とした構成
##### B1.1.4 オンラインリクエスト件数
- **要件**: ピーク時 500 TPS (Transactions Per Second)
- **実現方式・仕様**:
- Webサーバー、APサーバーは、500 TPSを処理可能な台数(例: 各3台)を配置
- ロードバランサーは、500 TPSのリクエストを均等に分散する設定
##### B1.1.5 バッチ処理件数
- **要件**: 日次バッチ処理レコード数 100万件
- **実現方式・仕様**:
- バッチ処理専用のVMインスタンス(例: CPU 8vCPU, メモリ 32GB)を確保
- データベースのバッチ処理用インデックスを最適化し、高速なデータアクセスを可能にする
#### B1.2 業務量増大度 (Business Volume Growth Rate)
##### B1.2.1 ユーザー数増大率
- **要件**: サービス開始後3年間で、ユーザー数が現在の5倍(25,000人)に増加
- **実現方式・仕様**:
- 認証基盤は、将来的なユーザー数増加に対応可能な上位プランへの変更を想定
- オートスケーリンググループの最大インスタンス数を、25,000ユーザーに対応可能な台数に設定
##### B1.2.2 同時アクセス数増大率
- **要件**: サービス開始後3年間で、ピーク時同時アクセス数が現在の5倍(125,000セッション)に増加
- **実現方式・仕様**:
- ロードバランサーは、125,000セッション以上を処理可能なマネージドサービス(例: AWS ALB)を利用
- APサーバーのオートスケーリングポリシーは、CPU使用率70%を閾値としてインスタンスを自動追加する設定
##### B1.2.3 データ量増大率
- **要件**: 年間データ増加率 50%(3年後には約3.4倍)
- **実現方式・仕様**:
- データベースは、シャーディングまたはパーティショニング戦略を導入し、データ量増加に対応可能なアーキテクチャとする
- オブジェクトストレージは、容量無制限の特性を活かし、非構造化データの増加に対応
##### B1.2.4 オンラインリクエスト件数増大率
- **要件**: サービス開始後3年間で、ピーク時オンラインリクエスト件数が現在の5倍(2,500 TPS)に増加
- **実現方式・仕様**:
- Web/APサーバーのオートスケーリンググループの最大インスタンス数を、2,500 TPSに対応可能な台数に設定
- データベースは、リードレプリカの追加や、上位インスタンスタイプへの変更を容易に行える構成とする
##### B1.2.5 バッチ処理件数増大率
- **要件**: サービス開始後3年間で、日次バッチ処理レコード数が現在の3倍(300万件)に増加
- **実現方式・仕様**:
- 分散バッチ処理フレームワーク(例: Apache Sparkクラスタ)を導入し、リソースの柔軟な拡張性を確保
- バッチ処理用データベースのパーティショニング戦略を強化し、大規模データ処理に対応
#### B1.3 保管期間 (Storage Period)
##### B1.3.1 保管期間
- **要件**: OS/ミドルウェアのログは3ヶ月間オンラインで参照可能、3年間アーカイブ保存
- **実現方式・仕様**:
- ログ管理基盤(例: ELKスタック)のストレージポリシーを設定し、3ヶ月間は高速アクセス可能なストレージに保存
- 3ヶ月経過したログは、自動的に低コストのアーカイブストレージ(例: Amazon S3 Glacier)へ移行する設定
### B2. 性能目標値 (Performance Target Values)
#### B2.1 オンラインレスポンス (Online Response)
##### B2.1.1 通常時レスポンス順守率
- **要件**: 主要APIの95%タイル応答時間 200ms以内
- **実現方式・仕様**:
- CDNのキャッシュヒット率を90%以上とする設定
- インメモリキャッシュ(Redis)のヒット率を80%以上とする設定
- データベースのクエリキャッシュを有効化し、適切なサイズを設定
##### B2.1.2 ピーク時レスポンス順守率
- **要件**: ピーク時の主要APIの95%タイル応答時間 500ms以内
- **実現方式・仕様**:
- オートスケーリングによりAPサーバーインスタンスが自動的に追加され、リソース不足による遅延を防止
- ロードバランサーのヘルスチェック間隔を短く設定し、異常ノードへのリクエストを迅速に停止
#### B2.2 バッチレスポンス(ターンアラウンドタイム) (Batch Response (Turnaround Time))
##### B2.2.1 通常時レスポンス順守度合い
- **要件**: 日次バッチ処理は午前3時までに完了
- **実現方式・仕様**:
- バッチ処理専用のVMインスタンスは、午前1時から午前3時まで最大リソースを確保する設定
- データベースのパーティショニングにより、日次バッチ処理の対象データ範囲を限定し、I/O負荷を軽減
##### B2.2.2 ピーク時レスポンス順守度合い
- **要件**: 月次バッチ処理は毎月1日の午前6時までに完了
- **実現方式・仕様**:
- 月次バッチ処理実行時のみ、分散バッチ処理クラスタのノード数を一時的に増強する設定
- データベースのメンテナンスウィンドウを月次バッチ処理に影響しない時間帯に設定
### B3. リソース拡張性 (Resource Scalability)
#### B3.1 CPU拡張性 (CPU Scalability)
##### B3.1.1 CPU利用率
- **要件**: 通常時CPU利用率 50%未満、ピーク時CPU利用率 80%未満
- **実現方式・仕様**:
- Web/APサーバーのオートスケーリングポリシーは、CPU利用率70%を閾値としてインスタンスを追加する設定
- データベースインスタンスは、CPUクレジット(バースト可能)ではなく、常にベースライン性能を保証するタイプを選定
##### B3.1.2 CPU拡張性
- **要件**: 物理/仮想的なCPUの拡張上限は、想定最大負荷の1.5倍まで対応可能
- **実現方式・仕様**:
- クラウドプロバイダーの提供するインスタンスタイプの上限、およびリージョンごとのクォータを確認し、将来的な拡張性を確保
- Kubernetesクラスタのノードグループは、最大ノード数を設定し、CPUリソースの拡張上限を定義
#### B3.2 メモリ拡張性 (Memory Scalability)
##### B3.2.1 メモリ利用率
- **要件**: 通常時メモリ利用率 60%未満、ピーク時メモリ利用率 90%未満
- **実現方式・仕様**:
- Web/APサーバーのオートスケーリングポリシーは、メモリ利用率85%を閾値としてインスタンスを追加する設定
- キャッシュミドルウェア(Redis)の最大メモリ設定は、ピーク時データ量の120%を確保
##### B3.2.2 メモリ拡張性
- **要件**: 物理/仮想的なメモリの拡張上限は、想定最大負荷の1.5倍まで対応可能
- **実現方式・仕様**:
- クラウドプロバイダーの提供するインスタンスタイプの上限、およびリージョンごとのクォータを確認し、将来的な拡張性を確保
- Kubernetesクラスタのノードグループは、最大ノード数を設定し、メモリリソースの拡張上限を定義
---
## テスト計画(性能・拡張性関連)
### 負荷テスト(Load Test)
- **実施時期**: 各インフラ環境構築後、および本番リリース前
- **テスト項目**:
- 想定されるピーク負荷(同時アクセス数、TPS)におけるインフラ・ミドルウェアの応答時間、エラー率
- データベースのCPU使用率、I/O性能、コネクション数
- Webサーバー、APサーバーのCPU使用率、メモリ使用率、スレッド数
- **合格基準**:
- インフラ・ミドルウェアの応答時間が要件値以内であること
- インフラ・ミドルウェア起因のエラー率が0.1%未満であること
- 各サーバーリソース使用率が80%を超えないこと
### ストレステスト(Stress Test)
- **実施時期**: 本番リリース前、および大規模なインフラ構成変更時
- **テスト内容**:
- 想定ピーク負荷の1.5倍~2倍の負荷をかけ、インフラ・ミドルウェアが限界に達するポイントを特定
- リソース枯渇時のインフラ・ミドルウェアの挙動(応答時間悪化、エラー発生、システムダウン)を確認
- **目的**: インフラ・ミドルウェアの限界性能と、限界を超えた際の挙動を把握し、適切な対策を講じる
### スケーラビリティテスト(Scalability Test)
- **実施時期**: 年に1回、または大規模なインフラアーキテクチャ変更時
- **テスト内容**:
- サーバー台数を増減させた際の性能変化(リソース追加による性能向上率)を確認
- オートスケーリングが適切に動作し、負荷に応じてリソースが自動調整されることを検証
- **目的**: 将来の負荷増加に対するインフラの拡張能力を評価し、キャパシティプランニングに役立てる
### 耐久テスト(Endurance Test)
- **実施時期**: 本番リリース前
- **テスト内容**:
- 想定される通常負荷を長時間(24時間以上)かけ続け、インフラ・ミドルウェアの安定稼働を確認
- メモリリーク、コネクションリーク、ディスクI/Oの継続的な増加など、長期稼働による性能劣化がないかを確認
- **目的**: 長期的な運用におけるインフラの安定性と性能維持能力を評価
---
## リスクと対策
| No | リスク | 影響 | 発生確率 | 対策 |
|----|--------|------|---------|------|
| 1 | インフラ・ミドルウェアのボトルネックの見落とし | 特定機能の応答時間悪化、システム全体の性能低下 | 中 | 開発初期からの性能テスト環境整備、継続的なインフラ・ミドルウェアの監視と分析 |
| 2 | 将来の負荷予測の誤り | リソース不足によるサービス停止、過剰なリソース確保によるコスト増大 | 中 | 定期的なキャパシティプランニング、柔軟なオートスケーリング設定、トレンド分析 |
| 3 | スケーリングコストの増大 | 運用コストの予算超過 | 中 | コスト監視ツールの導入、リソースの最適化(インスタンスタイプ見直し、予約インスタンス活用) |
| 4 | インフラ・ミドルウェアチューニングによる副作用 | 他機能への性能影響、予期せぬ不具合発生 | 低 | 変更管理プロセスの厳格化、性能テスト環境での十分な検証、ロールバック計画の策定 |
| 5 | データベースの拡張限界 | データ量増加によるDB性能劣化、スケールアウトの困難さ | 中 | DBシャーディング/パーティショニングの早期検討、データアーカイブ戦略の策定 |
--- 🔄 設計の進め方・プロセス
🏗️ プロセス1: 非機能要件の整理と分析
設計対象:
非機能要件定義書から、性能・拡張性に関わる要件項目を抽出し、インフラ設計に落とし込むべき要件を整理する。
具体例:
- 業務処理量要件(ユーザー数、同時アクセス数、データ量、リクエスト件数、バッチ処理件数)の確認
- 性能目標値(オンラインレスポンス、バッチ処理時間)の確認
- リソース拡張性要件(CPU・メモリ利用率、拡張上限)の確認
- 将来的な負荷増大予測(ユーザー数増大率、データ量増大率)の確認
設計原則:
- 定量的な要件の明確化: 曖昧な表現(「高速」「大量」)ではなく、具体的な数値目標を確認する
- 現在と将来の区別: 初期リリース時の要件と、将来の成長を見越した要件を分けて整理する
- 優先順位の明確化: 全ての要件を同等に扱うのではなく、ビジネスクリティカルな要件を優先する
文書化の推奨表現:
- 要件マッピング表の作成: 非機能要件の各項目とインフラ設計での実現方式を対応付ける表を作成する
- 前提条件の明記: 要件の前提となるビジネス予測やユーザー行動パターンを記録する
🏗️ プロセス2: インフラアーキテクチャとスケーリング方針の決定
設計対象:
性能・拡張性要件を満たすためのインフラ構成(サーバー、DB、ストレージ、ネットワーク)とスケーリング方針を決定する。
具体例:
- Web/APサーバーの台数と配置(ロードバランサー配下での冗長化構成)
- データベースのインスタンスタイプとレプリカ構成(リードレプリカの配置)
- キャッシュミドルウェア(Redis等)の配置と容量設計
- ストレージ(オブジェクトストレージ、ブロックストレージ)の種類と容量設計
- オートスケーリングポリシー(CPU/メモリ使用率の閾値、最小/最大インスタンス数)の設定
- 水平スケーリング/垂直スケーリングの方針決定
設計原則:
- 水平スケーリング優先: 可能な限り、サーバー台数を増やすことで拡張できる構成とする
- ボトルネックの排除: データベース、ネットワーク帯域、ストレージI/Oなど、性能のボトルネックとなりやすい箇所を事前に特定し対策する
- コストと性能のバランス: 過剰なリソース確保によるコスト増大を避け、適切なリソースサイジングを行う
- クラウドサービスの活用: マネージドサービス(オートスケーリング、マネージドDB、CDN等)を積極的に活用し、運用負荷を軽減する
文書化の推奨表現:
- インフラ構成図の作成: サーバー、DB、ストレージ、ネットワークの配置とスケーリング方針を図示する
- リソースサイジング表の作成: 各コンポーネントのスペック(CPU、メモリ、ストレージ容量)を一覧化する
- スケーリングポリシーの明記: オートスケーリングの条件(閾値、増減台数)を具体的に記載する
🏗️ プロセス3: 性能テスト計画の策定
設計対象:
設計したインフラ構成が性能・拡張性要件を満たすことを検証するための性能テスト計画を策定する。
具体例:
- 負荷テスト: ピーク負荷時の性能(レスポンスタイム、スループット、エラー率)を検証
- ストレステスト: 想定負荷の1.5~2倍の負荷をかけ、システムの限界性能を確認
- スケーラビリティテスト: サーバー台数増減時の性能変化とオートスケーリングの動作を検証
- 耐久テスト: 長時間(24時間以上)の負荷をかけ、メモリリーク等の性能劣化がないかを確認
設計原則:
- 本番環境に近いテスト環境: 本番と同等のインフラ構成でテストを実施する
- 実データに近いテストデータ: データ量、データ構造、アクセスパターンを本番に近づける
- 段階的なテスト実施: 機能単体→統合→全体負荷と、段階的にテストスコープを広げる
- 継続的なテスト: リリース前だけでなく、インフラ構成変更時や定期的にテストを実施する
文書化の推奨表現:
- テスト計画表の作成: テストの種類、実施時期、テスト項目、合格基準を一覧化する
- テストシナリオの詳細化: 負荷パターン(同時接続数、TPS、データ量)を具体的に記載する
- 合格基準の明確化: 性能目標値に対する許容範囲を数値で定義する
🏗️ プロセス4: キャパシティプランニングとコスト試算
設計対象:
将来の負荷増大を見越したリソース拡張計画とインフラコストを試算する。
具体例:
- 1年後、3年後、5年後のユーザー数・データ量・アクセス数の予測
- 予測負荷に対応するための必要リソース(サーバー台数、DB容量、ストレージ容量)の算出
- 初期構築コストと月額運用コストの見積もり
- スケールアップ/スケールアウト時のコスト増分の試算
- コスト最適化施策(予約インスタンス、スポットインスタンス、ストレージクラスの使い分け)の検討
設計原則:
- 段階的な拡張計画: 初期から最大構成を用意するのではなく、負荷増大に応じて段階的に拡張する計画とする
- 定期的な見直し: ビジネス状況の変化に応じて、年1回程度キャパシティプランを見直す
- コストモニタリング: 実際のコスト推移を継続的に監視し、予算超過リスクを早期に検知する
文書化の推奨表現:
- キャパシティプラン表の作成: 時系列での負荷予測と必要リソースを表形式で整理する
- コスト試算表の作成: 初期コスト、月額コスト、年間コストを項目別に算出する
- コスト最適化施策の記載: 予約インスタンス等のコスト削減施策を具体的に記載する
🚨 よくある失敗と予防策
🚧 実例収集後、追記予定
📚 参考資料・関連リンク
- 参考文献: 『Webシステムのパフォーマンス改善技法』、『Site Reliability Engineering(SRE)』、各クラウドベンダーの性能設計ベストプラクティス
- 関連する他のガイド: システムアーキテクチャ設計ガイド、非機能要件定義ガイド、データベース設計ガイド、監視・運用設計ガイド
- ツール・テンプレート: 性能テストツール(JMeter、Gatling)、インフラ構成図作成ツール(draw.io、Lucidchart)、クラウドコスト試算ツール(AWS Calculator、Azure Pricing Calculator)
テンプレートサイト: 📄テンプレート集