Home
Get Started
実践ガイド
外部仕様設計
バッチ処理仕様設計
UAC 仕様設計
データ仕様設計
インフラ設計
移行計画
テスト方針・計画
開発プロセス・規約
インフラ 可用性設計
システムの可用性目標を実現するため、冗長化構成・障害対策・バックアップ方式を設計し、RTO/RPO目標を達成する具体的な実装方式を定義します。
🎯 概要
- 目的: システムの可用性要件を満たすため、冗長化構成、障害対策、バックアップ・リカバリ方式を設計し、サービス停止リスクを最小化する
- スコープ: サーバー・ネットワーク・データベースの冗長化設計、フェイルオーバー方式、バックアップ・リストア方式、監視・障害検知の仕組み、RTO/RPO/稼働率目標の実現方式をカバーする
- 推奨する実施タイミング: 非機能要件が確定した後、インフラ構成設計と並行して実施する
- 関連するステークホルダー: インフラチーム、システムアーキテクト、運用チーム、セキュリティチーム、プロジェクトマネージャー
📥 重要な前提知識・インプット
- 前提知識: 冗長化構成の種類(Active-Active、Active-Standby、N+1構成)、RTO/RPO/稼働率の概念、フェイルオーバー・レプリケーション技術、バックアップ方式(フル・増分・差分)、DR(災害復旧)の基本
- インプット: 非機能要件書(可用性・継続性要件)、SLA要件、システム構成図、運用体制情報、予算制約
📄 成果物の定義
- ドキュメントテンプレート: 📄
[テンプレ]インフラ 可用性設計書
- 必須要素: 冗長化構成図、フェイルオーバーフロー図、バックアップ・リストア方式定義書、監視項目一覧、RTO/RPO実現方式仕様書、DR構成図、稼働率計算書
✅ 品質基準・レビュー観点
✅ 品質チェックリスト:
| チェック項目 | チェック内容 |
|---|---|
| 単一障害点の排除 | 全ての主要コンポーネントが冗長化されているか |
| RTO/RPO目標の実現性 | 要件で定義されたRTO/RPOを実現する具体的な方式が設計されているか |
| フェイルオーバーの自動化 | 障害検知から切替までの自動化が設計されているか |
| バックアップの多重化 | バックアップデータが複数箇所に保存され、リストアテストが計画されているか |
| 監視・アラートの網羅性 | 障害を早期検知するための監視項目と閾値が適切に設定されているか |
| DR環境の実効性 | DR環境への切替手順が整備され、定期訓練が計画されているか |
👁️🗨️ レビュー観点:
- 可用性要件との整合性: 非機能要件で定義された稼働率、RTO、RPO、BCP要件が設計に反映されているか
- 技術的実現可能性: 冗長化構成、フェイルオーバー、バックアップの各方式が技術的に実現可能か
- 運用実現性: 24時間365日監視、障害対応、DR訓練を実施できる運用体制が整っているか
- コスト妥当性: 冗長化構成、DR環境、監視ツール、バックアップストレージのコストが予算内に収まるか
🧪成果物のサンプル
# 可用性(Availability)
## 可用性の基本方針
システムの停止リスクを最小化し、障害発生時の影響範囲・復旧時間を最小限に抑えるための全体戦略を以下に示す。
### 冗長化方針
- **単一障害点(SPOF)の排除**: すべての主要コンポーネントを冗長化
- **N+1構成**: 通常運用に必要な台数+1台の冗長構成を基本とする
- **Active-Active構成**: 負荷分散と可用性向上を両立
### データ保護方針
- **多重化**: 本番データは最低3箇所に保持(本番DB、スタンバイDB、バックアップ)
- **リアルタイム同期**: トランザクションログのストリーミングレプリケーション
- **暗号化**: 保存データ・転送データともに暗号化
### バックアップ方針
- **定期バックアップ**: フルバックアップ(週次)、増分バックアップ(日次)
- **多世代管理**: 直近7世代を保持
- **リストアテスト**: 月次で復元テストを実施
### 監視・運用方針
- **24時間365日監視**: 障害の早期検知と迅速な対応
- **自動化**: 障害検知から復旧までの自動フェイルオーバー
- **エスカレーション**: 重要度に応じた通知・対応フロー
### 災害対策の基本方針
- **DR環境**: 別リージョンにDR(Disaster Recovery)環境を構築
- **定期訓練**: 年2回のDR切替訓練を実施
- **手順書整備**: フェイルオーバー手順を文書化・定期更新
---
## 可用性要件の実現方式
### A1. 継続性(Continuity)
#### A1.1 運用スケジュール
##### A1.1.1 通常運用時間
- **要件**: 24時間365日稼働
- **実現方式・仕様**:
- アプリケーションは常時稼働前提で構築
- 無停止デプロイ方式(Blue-Green Deployment / Rolling Update)を採用
- 計画停止作業は深夜帯 02:00–04:00 に限定し、年間12回以内
##### A1.1.2 特定日の運用
- **要件**: 年度末・決算期は計画停止を実施しない
- **実現方式・仕様**:
- メンテナンス禁止期間を運用カレンダーで設定
- CI/CDパイプラインに禁止期間チェックを組み込み、自動制御
##### A1.1.3 計画停止
- **要件**: 月1回、1時間以内
- **実現方式・仕様**:
- OSパッチ適用はRolling Updateでサービス影響ゼロ
- ミドルウェア更新は短時間メンテナンスウィンドウで実施
- 事前通知は2週間前にユーザーへ通知
---
#### A1.2 業務継続性(BCP)
##### A1.2.1 対象業務範囲
- **要件**: 受注処理系・決済処理系は継続必須
- **実現方式・仕様**:
- 対象業務モジュールは完全冗長構成(Active-Active)
- 非対象業務(レポート生成など)は停止許容
- 機能フラグによる縮退運転モード実装
##### A1.2.2 サービス切替時間
- **要件**: 10分以内に代替系へ切替
- **実現方式・仕様**:
- LB(ロードバランサ)が障害検知後、自動フェイルオーバー
- ヘルスチェック間隔:5秒 × 連続3回失敗で切替
- DNSフェイルオーバーのTTL:60秒

*※ draw.ioで作成した切替フロー図を配置*
---
#### A1.3 障害時の目標復旧水準
##### A1.3.1 RPO(Recovery Point Objective)
- **要件**: 30分以内のデータ保全
- **実現方式・仕様**:
- DBスナップショット:15分間隔で自動取得
- トランザクションログ:リアルタイム同期(ストリーミングレプリケーション)
- 実効RPO:最大15分(スナップショット間隔に依存)
##### A1.3.2 RTO(Recovery Time Objective)
- **要件**: 2時間以内に復旧
- **実現方式・仕様**:
- 代替ノードはWarm Standby(常時起動・待機状態)
- IaC(Infrastructure as Code)により環境構築を自動化
- 手動切替の場合でも30分以内に復旧可能
- 自動フェイルオーバーの場合は5分以内
##### A1.3.3 RLO(Recovery Level Objective)
- **要件**: 縮退運転で受注・決済機能のみ復旧
- **実現方式・仕様**:
- 機能フラグで優先度の高いサービスのみ有効化
- 周辺API(レポート生成、分析機能など)は停止状態を許容
- 段階的復旧:第1段階(受注・決済)→第2段階(在庫管理)→第3段階(全機能)
---
#### A1.4 大規模災害時の復旧
##### A1.4.1 システム再開目標
- **要件**: 72時間以内にDR環境でシステム再開
- **実現方式・仕様**:
- 別リージョン(東京→大阪)にDR環境を構築
- DRへのデータ同期:非同期複製(遅延時間:5秒以内)
- 手動フェイルオーバー手順書を整備(年2回訓練実施)
- DNS切替による接続先変更(TTL:300秒)

*※ draw.ioで作成したDR構成図を配置*
---
#### A1.5 稼働率
##### A1.5.1 稼働率目標
- **要件**: 99.9%(年間停止時間:約8.76時間)
- **実現方式・仕様**:
- 冗長構成(N+1)による障害時の影響最小化
- 監視アラート 24時間365日体制
- MTTR目標:30分以内
- MTBF目標:720時間(30日)以上
##### A1.5.2 稼働率の計算式
```
稼働率 = (総運用時間 - 停止時間) / 総運用時間 × 100
例)年間稼働率 99.9% の場合
停止許容時間 = 365日 × 24時間 × (1 - 0.999) = 8.76時間/年
```
---
### A2. 耐障害性(Fault Tolerance)
#### A2.1 サーバー冗長化方式
| 層 | 冗長化方式 | 構成台数 | 備考 |
|----|-----------|---------|------|
| ロードバランサー | Active-Active | 2台 | クラウドLB使用 |
| Webサーバー | Active-Active | 3台(N+1) | 最小2台で運用可能 |
| APサーバー | Active-Active | 3台(N+1) | オートスケール対応 |
| DBサーバー | Primary-Standby | 2台+読取レプリカ2台 | 同期レプリケーション |

*※ draw.ioで作成した冗長化構成図を配置*
#### A2.2 ネットワーク冗長化
- **2ルート構成**: 異なるISPから2系統の回線を確保
- **VRRP**: 仮想ルーターによる自動切替(切替時間:3秒以内)
#### A2.3 データベース冗長化
- **同期レプリケーション**: Primary-Standby間は同期複製
- **非同期レプリケーション**: 読取レプリカへは非同期複製
- **自動フェイルオーバー**: Primaryダウン時、Standbyが自動昇格(30秒以内)
#### A2.4 ストレージ保護
- **RAID構成**: RAID 10(ミラーリング+ストライピング)
- **スナップショット**: 15分間隔で自動取得、7世代保持
#### A2.5 アプリケーションのフェイルオーバー仕様
- **ステートレス設計**: セッション情報は外部ストア(Redis)に保持
- **リトライ機構**: 一時的な障害に対する自動リトライ(最大3回)
- **サーキットブレーカー**: 連続障害時の自動遮断と復旧
---
### A3. 監視・障害検知方式
#### A3.1 監視項目一覧
| カテゴリ | 監視項目 | 閾値(警告/致命的) | 監視間隔 |
|---------|---------|------------------|---------|
| リソース | CPU使用率 | 70% / 90% | 1分 |
| リソース | メモリ使用率 | 80% / 95% | 1分 |
| リソース | ディスク使用率 | 80% / 90% | 5分 |
| サービス | HTTP応答時間 | 1秒 / 3秒 | 1分 |
| サービス | エラー率 | 1% / 5% | 1分 |
| DB | レプリケーション遅延 | 10秒 / 30秒 | 1分 |
| ネットワーク | パケットロス率 | 1% / 5% | 1分 |
#### A3.2 アラート通知フロー

*※ draw.ioで作成した監視フロー図を配置*
#### A3.3 ログ監視方式
- **集約基盤**: 中央ログ管理システム(ELKスタック等)
- **リアルタイム分析**: エラーログの自動検知とアラート
- **保存期間**: 90日間オンライン保存、それ以降はアーカイブ
---
### A4. バックアップ・リストア方式
#### A4.1 バックアップ方式
| 種別 | 対象 | 頻度 | 保存期間 | 保存先 |
|------|------|------|---------|--------|
| フルバックアップ | DB全体 | 週次(日曜深夜) | 4週間 | 別リージョンストレージ |
| 増分バックアップ | 差分データ | 日次(深夜2時) | 7日間 | 同一リージョンストレージ |
| スナップショット | DBインスタンス | 15分間隔 | 24時間 | クラウドスナップショット |
| ログバックアップ | トランザクションログ | リアルタイム | 7日間 | 同一リージョンストレージ |
#### A4.2 リストアテスト計画
- **実施頻度**: 月次(毎月第2土曜日)
- **テスト内容**:
- フルバックアップからの完全復元
- 特定時点へのポイントインタイムリカバリ
- DR環境への復元
- **成功基準**: RTO/RPO目標値の達成
---
### A5. 可用性設計に関する依存関係・前提条件
#### A5.1 インフラ依存
- **クラウドサービスSLA**: 99.99%(AWS/Azure/GCPのSLAに依存)
- **ネットワークSLA**: ISPの提供SLA 99.9%
#### A5.2 運用組織の体制
- **24時間365日監視体制**: 3交代制
- **オンコール体制**: 1次対応者2名、2次対応者2名を常時確保
- **緊急対応チーム**: 重大障害時に30分以内に招集可能
#### A5.3 サードパーティ製品
- **監視ツール**: 稼働率99.9%以上
- **バックアップソリューション**: データ損失ゼロ保証
---
## テスト計画(可用性関連)
### フェイルオーバーテスト
- **実施時期**: 本番リリース前、および四半期ごと
- **テスト項目**:
- LB配下のサーバー1台停止時の動作確認
- Primary DB停止時の自動フェイルオーバー確認
- ネットワーク切断時の切替動作確認
### RTO/RPO検証
- **検証方法**: 実際に障害を発生させ、復旧時間・データ保全を計測
- **合格基準**: 設計値(RTO: 2時間、RPO: 30分)を満たすこと
### DR切替訓練
- **実施頻度**: 年2回(6月・12月)
- **訓練内容**: 本番環境からDR環境への完全切替
- **参加者**: 開発チーム、運用チーム、経営層
### 監視アラート動作確認
- **実施頻度**: 月次
- **確認項目**: 各監視項目の閾値超過時のアラート発報確認
---
## リスクと対策
| No | リスク | 影響 | 発生確率 | 対策 |
|----|--------|------|---------|------|
| 1 | 冗長化構成の誤設定 | 全サービス停止 | 低 | IaCによる自動設定管理、peer review |
| 2 | バックアップデータの破損 | 復旧不能 | 低 | 月次リストアテスト、多重化保存 |
| 3 | DRリージョンの同時障害 | 長期停止 | 極低 | 第3のバックアップサイト検討 |
| 4 | 監視システムの障害 | 障害検知遅延 | 中 | 監視システム自体の冗長化 |
| 5 | 運用担当者の対応遅延 | RTO超過 | 中 | 自動復旧機構の強化、手順書整備 |
--- 🔄 設計の進め方・プロセス
🏗️ プロセス1: 可用性要件の整理と目標値の設定
設計対象:
非機能要件書から可用性関連の要件を抽出し、具体的な目標値(稼働率、RTO、RPO)を設定する。
具体例:
- 稼働率目標: 99.9%、99.95%、99.99%のいずれを目指すか
- RTO(目標復旧時間): 障害発生から何時間以内にシステムを復旧させるか
- RPO(目標復旧時点): データ損失をどの時点まで許容するか(15分、30分、1時間など)
- 運用スケジュール: 24時間365日稼働か、計画停止を許容するか
- BCP対象範囲: どの業務機能を継続必須とするか
設計原則:
- 要件の具体化: 「高可用性」「高信頼性」といった曖昧な表現を、数値目標に落とし込む
- ビジネス影響の評価: システム停止時のビジネス損失を評価し、適切な可用性レベルを設定する
- コストバランス: 過度な可用性要件はコスト増につながるため、リスクとコストのバランスを考慮する
- ステークホルダー合意: 目標値は経営層、事業部門、運用チームと合意形成を行う
文書化の推奨表現:
- 可用性要件一覧表: 稼働率、RTO、RPO、運用スケジュール、BCP要件を一覧表にまとめる
- 目標値の根拠: なぜその目標値を設定したのか、ビジネス要件との紐付けを記載する
- 許容ダウンタイム計算: 稼働率目標から算出される年間許容停止時間を明記する
🏗️ プロセス2: 冗長化構成の設計
設計対象:
単一障害点(SPOF)を排除するため、各レイヤー(ロードバランサー、Webサーバー、APサーバー、DBサーバー、ネットワーク)の冗長化構成を設計する。
具体例:
- ロードバランサー: Active-Active構成で2台以上
- Webサーバー/APサーバー: N+1構成(最小運用台数+1台)
- データベース: Primary-Standby構成、同期レプリケーション
- ネットワーク: 2ルート構成、異なるISPから回線を確保
- ストレージ: RAID構成、スナップショット多重化
設計原則:
- SPOF排除: 全ての主要コンポーネントを冗長化し、1台障害でもサービス継続できる構成とする
- 自動フェイルオーバー: 障害検知から切替までを自動化し、人手を介さない復旧を実現する
- 負荷分散との両立: 冗長化構成を活用し、通常時の負荷分散も同時に実現する
- コスト最適化: 過度な冗長化を避け、リスクとコストのバランスを取る
文書化の推奨表現:
- 冗長化構成図: 各レイヤーの冗長化構成を視覚的に表現した図を作成する
- 冗長化構成一覧表: 各コンポーネントの冗長化方式、構成台数、切替方式を一覧化する
- フェイルオーバーフロー図: 障害検知から切替までの流れを時系列で図示する
- 切替時間の算出: ヘルスチェック間隔、リトライ回数から実際の切替時間を計算する
🏗️ プロセス3: バックアップ・リストア方式の設計
設計対象:
RPO要件を満たすためのバックアップ方式と、RTO要件を満たすためのリストア方式を設計する。
具体例:
- フルバックアップ: 週次(日曜深夜)にDB全体をバックアップ
- 増分バックアップ: 日次(深夜2時)に差分データをバックアップ
- スナップショット: 15分間隔でDBインスタンスのスナップショットを取得
- トランザクションログバックアップ: リアルタイムでログをバックアップストレージに転送
- バックアップ保存先: 本番環境とは別リージョンのストレージに保存
設計原則:
- RPO実現: バックアップ頻度を設定し、データ損失を許容範囲内に抑える
- 多重化: バックアップデータを複数箇所に保存し、バックアップ自体の障害に備える
- リストアテスト: 定期的にリストアテストを実施し、復旧手順の有効性を検証する
- 世代管理: 複数世代のバックアップを保持し、過去の任意の時点へ復旧できるようにする
文書化の推奨表現:
- バックアップ方式一覧表: バックアップ種別、対象、頻度、保存期間、保存先を一覧化する
- リストア手順書: 障害種別ごとのリストア手順を詳細に記載する
- リストアテスト計画: テスト頻度、テスト内容、成功基準を明記する
- RPO/RTO検証結果: 設計したバックアップ・リストア方式で目標値を達成できることを示す
🏗️ プロセス4: 監視・障害検知方式の設計
設計対象:
障害を早期検知し、迅速に対応するための監視項目、閾値、アラート通知方式を設計する。
具体例:
- リソース監視: CPU使用率、メモリ使用率、ディスク使用率、ネットワーク帯域
- サービス監視: HTTP応答時間、エラー率、スループット
- DB監視: レプリケーション遅延、接続数、スロークエリ
- ログ監視: エラーログのリアルタイム検知
- 外形監視: 外部からのHTTPヘルスチェック
設計原則:
- 早期検知: 障害の予兆を検知できる監視項目と閾値を設定する
- 誤検知防止: 閾値を適切に設定し、不要なアラートを抑制する
- 通知の最適化: 重要度に応じた通知先(メール、Slack、電話)を設定する
- 自動復旧: 可能な限り自動復旧を行い、人手を介さない復旧を実現する
文書化の推奨表現:
- 監視項目一覧表: 監視カテゴリ、監視項目、閾値(警告/致命的)、監視間隔を一覧化する
- アラート通知フロー図: 障害検知からエスカレーションまでの通知フローを図示する
- 運用体制: 24時間365日監視体制、オンコール体制、緊急対応チームの体制を明記する
🏗️ プロセス5: DR(災害復旧)環境の設計
設計対象:
大規模災害時にシステムを継続するためのDR環境を設計する。
具体例:
- DR環境の配置: 本番環境とは異なるリージョン(東京→大阪など)に構築
- データ同期方式: 非同期レプリケーション(遅延時間5秒以内)
- 切替方式: 手動フェイルオーバー(DNS切替)
- DR訓練: 年2回(6月・12月)に本番→DR切替訓練を実施
設計原則:
- 地理的分散: 本番環境とは十分に離れた場所にDR環境を配置する
- データ同期: 本番データをDR環境にリアルタイム同期し、データ損失を最小化する
- 訓練の実施: 定期的にDR切替訓練を実施し、手順の有効性を検証する
- コスト最適化: DR環境は縮小構成(最小限のリソース)で構築し、コストを抑える
文書化の推奨表現:
- DR構成図: DR環境の配置、データ同期方式、切替方式を視覚的に表現する
- DR切替手順書: 災害発生時のDR切替手順を詳細に記載する
- DR訓練計画: 訓練頻度、訓練内容、参加者、成功基準を明記する
🚨 よくある失敗と予防策
🚧 実例収集後、追記予定
📚 参考資料・関連リンク
- 参考文献: 『サイト信頼性エンジニアリング(SRE)』、『インフラ設計の教科書』、各クラウドベンダーの可用性設計ベストプラクティス
- 関連する他のガイド: 📄
システムアーキテクチャ設計、📄
非機能要件の実現方式、インフラ構成設計ガイド、運用設計ガイド
- ツール・テンプレート: draw.io、AWS Well-Architected Framework、Azure Well-Architected Framework、稼働率計算ツール
テンプレートサイト: 📄テンプレート集