関連テンプレ構成
テンプレート
# 非機能要件の実現方式
## 性能・パフォーマンス要件の実現方式
### レスポンスタイム目標値
| 処理種別 | 目標レスポンスタイム | 実現方式 |
|----------|---------------------|----------|
| 画面表示 | 3秒以内(95%ile) | キャッシュ活用、CDN配信、遅延ロード |
| API応答 | 1秒以内(95%ile) | データベースインデックス最適化、クエリチューニング |
| バッチ処理 | 1時間以内(夜間バッチ) | 並列処理、分割実行、差分処理 |
### スループット目標値
| 項目 | 目標値 | 実現方式 |
|------|--------|----------|
| 同時接続ユーザー数 | 1,000ユーザー | 水平スケーリング、ロードバランシング |
| API リクエスト処理数 | 10,000 req/min | キャッシュレイヤー、非同期処理 |
### パフォーマンス向上施策
#### キャッシング戦略
```mermaid
graph TD
A["クライアント"] --> B["CDN Cache<br/>静的コンテンツ"]
A --> C["Application Cache<br/>API Gateway"]
C --> D["Redis Cache<br/>セッション・頻繁アクセスデータ"]
D --> E["Database<br/>PostgreSQL"]
```
実装方針:
- CDN(CloudFront): 静的リソース(CSS、JS、画像)のキャッシュ
- Redis: セッション情報、マスタデータ、API レスポンスのキャッシュ
- キャッシュ有効期限: データ特性に応じて5分〜24時間
- キャッシュ無効化: データ更新時の即時パージ機構
#### データベース最適化
インデックス設計:
- 検索頻度の高いカラムに対するインデックス作成
- 複合インデックスの適切な設計
- パフォーマンス劣化を避けるためのインデックス数の制限
クエリ最適化:
- N+1問題の回避(Eager Loading の活用)
- 不要なカラムの SELECT 抑制
- JOIN の最適化と必要に応じた非正規化
コネクションプーリング:
- 最大接続数: 100
- 最小接続数: 10
- アイドルタイムアウト: 10分
#### 非同期処理
適用対象:
- メール送信
- 外部APIコール
- レポート生成
- 大量データ処理
実装方式:
- メッセージキュー: AWS SQS
- ワーカープロセス: Node.js クラスタリング
- リトライ機構: 指数バックオフ(最大5回)
---
## 可用性・信頼性要件の実現方式
### 稼働率目標
| システム区分 | 稼働率目標 | 許容ダウンタイム(月) |
|--------------|------------|------------------------|
| 本番環境 | 99.9% | 43.2分 |
| ステージング環境 | 99.0% | 7.2時間 |
### 冗長化構成
```mermaid
graph TB
subgraph "可用性ゾーン A"
A1["Web Server 1"]
A2["App Server 1"]
A3["DB Primary"]
end
subgraph "可用性ゾーン B"
B1["Web Server 2"]
B2["App Server 2"]
B3["DB Standby"]
end
LB["Load Balancer"] --> A1
LB --> B1
A1 --> A2
B1 --> B2
A2 --> A3
B2 --> A3
A3 -.レプリケーション.-> B3
```
実装方針:
- ロードバランサー: ALB(Application Load Balancer)による自動振り分け
- Webサーバー: 最低2台構成、Auto Scaling による自動スケール
- アプリケーションサーバー: 最低2台構成、ステートレス設計
- データベース: マスター・スタンバイ構成、自動フェイルオーバー
### 障害検知と自動復旧
ヘルスチェック:
- エンドポイント: /health
- チェック間隔: 30秒
- 異常判定閾値: 連続3回失敗
自動復旧:
- 異常インスタンスの自動切り離し
- 新規インスタンスの自動起動
- 復旧完了通知(Slack、メール)
### バックアップ・リカバリ
データベースバックアップ:
- フルバックアップ: 毎日 AM 3:00(保持期間: 30日)
- 増分バックアップ: 6時間ごと(保持期間: 7日)
- トランザクションログ: 継続的アーカイブ(保持期間: 30日)
- バックアップ保存先: 別リージョン(DR対策)
リカバリ目標:
- RPO(Recovery Point Objective): 6時間以内
- RTO(Recovery Time Objective): 4時間以内
---
## 拡張性・スケーラビリティ要件の実現方式
### スケーリング方針
```mermaid
graph LR
A["負荷増加検知"] --> B{"CPU使用率<br/>> 70%?"}
B -->|Yes| C["Auto Scaling<br/>インスタンス追加"]
B -->|No| D["監視継続"]
C --> E["ロードバランサー<br/>自動振り分け"]
E --> F["負荷分散"]
```
水平スケーリング:
- トリガー: CPU使用率 70% 超過、または平均レスポンスタイム 2秒超過
- スケールアウト: 最大10インスタンスまで自動追加
- スケールイン: 負荷低下後、段階的に縮小(最小2インスタンス維持)
垂直スケーリング:
- データベースのスペックアップ(計画的実施)
- ダウンタイム最小化のため、レプリカ昇格方式を採用
### データ増加への対応
パーティショニング戦略:
- 大容量テーブル(ログ、履歴データ)の月次パーティション化
- 古いパーティションのアーカイブストレージへ移行
データアーカイブ:
- 1年以上経過したデータは圧縮してS3へ移行
- アーカイブデータへのアクセスは別APIで提供
---
## 保守性・運用性要件の実現方式
### ログ管理
ログ種別と出力先:
| ログ種別 | 出力内容 | 出力先 | 保持期間 |
|----------|----------|--------|----------|
| アプリケーションログ | 処理開始/終了、エラー情報 | CloudWatch Logs | 90日 |
| アクセスログ | HTTP リクエスト/レスポンス | S3 | 1年 |
| エラーログ | 例外スタックトレース、システムエラー | CloudWatch Logs | 90日 |
| 監査ログ | ユーザー操作履歴、データ変更履歴 | RDS(専用テーブル) | 3年 |
### モニタリング
監視項目:
- システムメトリクス: CPU、メモリ、ディスク使用率
- アプリケーションメトリクス: レスポンスタイム、エラー率、スループット
- ビジネスメトリクス: ユーザー数、トランザクション数
アラート設定:
```mermaid
graph TD
A["メトリクス収集<br/>Datadog Agent"] --> B{"閾値判定"}
B -->|Critical| C["即時通知<br/>PagerDuty + 電話"]
B -->|Warning| D["通知<br/>Slack + メール"]
B -->|Normal| E["ダッシュボード<br/>記録のみ"]
```
### デプロイ・リリース
デプロイ戦略:
- ブルーグリーンデプロイメント採用
- カナリアリリースによる段階的展開
- 問題発生時の即時ロールバック機構
リリースフロー:
1. ステージング環境での動作確認
2. 本番環境の一部(10%)へデプロイ
3. エラー監視(30分)
4. 問題なければ全体へ展開
5. リリース完了報告
---
## セキュリティ要件の実現方式概要
詳細は「セキュリティ仕様・方式」を参照。
主要な実現方式:
- 認証: OAuth 2.0 + JWT
- 認可: ロールベースアクセス制御(RBAC)
- 通信暗号化: TLS 1.3
- データ暗号化: AES-256(保存時)
- 脆弱性対策: 定期的なセキュリティスキャン、依存ライブラリの更新
--- プレビュー
非機能要件の実現方式
性能・パフォーマンス要件の実現方式
レスポンスタイム目標値
| 処理種別 | 目標レスポンスタイム | 実現方式 |
|---|---|---|
| 画面表示 | 3秒以内(95%ile) | キャッシュ活用、CDN配信、遅延ロード |
| API応答 | 1秒以内(95%ile) | データベースインデックス最適化、クエリチューニング |
| バッチ処理 | 1時間以内(夜間バッチ) | 並列処理、分割実行、差分処理 |
スループット目標値
| 項目 | 目標値 | 実現方式 |
|---|---|---|
| 同時接続ユーザー数 | 1,000ユーザー | 水平スケーリング、ロードバランシング |
| API リクエスト処理数 | 10,000 req/min | キャッシュレイヤー、非同期処理 |
パフォーマンス向上施策
キャッシング戦略
graph TD A["クライアント"] --> B["CDN Cache<br/>静的コンテンツ"] A --> C["Application Cache<br/>API Gateway"] C --> D["Redis Cache<br/>セッション・頻繁アクセスデータ"] D --> E["Database<br/>PostgreSQL"]
実装方針:
- CDN(CloudFront): 静的リソース(CSS、JS、画像)のキャッシュ
- Redis: セッション情報、マスタデータ、API レスポンスのキャッシュ
- キャッシュ有効期限: データ特性に応じて5分〜24時間
- キャッシュ無効化: データ更新時の即時パージ機構
データベース最適化
インデックス設計:
- 検索頻度の高いカラムに対するインデックス作成
- 複合インデックスの適切な設計
- パフォーマンス劣化を避けるためのインデックス数の制限
クエリ最適化:
- N+1問題の回避(Eager Loading の活用)
- 不要なカラムの SELECT 抑制
- JOIN の最適化と必要に応じた非正規化
コネクションプーリング:
- 最大接続数: 100
- 最小接続数: 10
- アイドルタイムアウト: 10分
非同期処理
適用対象:
- メール送信
- 外部APIコール
- レポート生成
- 大量データ処理
実装方式:
- メッセージキュー: AWS SQS
- ワーカープロセス: Node.js クラスタリング
- リトライ機構: 指数バックオフ(最大5回)
可用性・信頼性要件の実現方式
稼働率目標
| システム区分 | 稼働率目標 | 許容ダウンタイム(月) |
|---|---|---|
| 本番環境 | 99.9% | 43.2分 |
| ステージング環境 | 99.0% | 7.2時間 |
冗長化構成
graph TB
subgraph "可用性ゾーン A"
A1["Web Server 1"]
A2["App Server 1"]
A3["DB Primary"]
end
subgraph "可用性ゾーン B"
B1["Web Server 2"]
B2["App Server 2"]
B3["DB Standby"]
end
LB["Load Balancer"] --> A1
LB --> B1
A1 --> A2
B1 --> B2
A2 --> A3
B2 --> A3
A3 -.レプリケーション.-> B3
実装方針:
- ロードバランサー: ALB(Application Load Balancer)による自動振り分け
- Webサーバー: 最低2台構成、Auto Scaling による自動スケール
- アプリケーションサーバー: 最低2台構成、ステートレス設計
- データベース: マスター・スタンバイ構成、自動フェイルオーバー
障害検知と自動復旧
ヘルスチェック:
- エンドポイント: /health
- チェック間隔: 30秒
- 異常判定閾値: 連続3回失敗
自動復旧:
- 異常インスタンスの自動切り離し
- 新規インスタンスの自動起動
- 復旧完了通知(Slack、メール)
バックアップ・リカバリ
データベースバックアップ:
- フルバックアップ: 毎日 AM 3:00(保持期間: 30日)
- 増分バックアップ: 6時間ごと(保持期間: 7日)
- トランザクションログ: 継続的アーカイブ(保持期間: 30日)
- バックアップ保存先: 別リージョン(DR対策)
リカバリ目標:
- RPO(Recovery Point Objective): 6時間以内
- RTO(Recovery Time Objective): 4時間以内
拡張性・スケーラビリティ要件の実現方式
スケーリング方針
graph LR
A["負荷増加検知"] --> B{"CPU使用率<br/>> 70%?"}
B -->|Yes| C["Auto Scaling<br/>インスタンス追加"]
B -->|No| D["監視継続"]
C --> E["ロードバランサー<br/>自動振り分け"]
E --> F["負荷分散"]
水平スケーリング:
- トリガー: CPU使用率 70% 超過、または平均レスポンスタイム 2秒超過
- スケールアウト: 最大10インスタンスまで自動追加
- スケールイン: 負荷低下後、段階的に縮小(最小2インスタンス維持)
垂直スケーリング:
- データベースのスペックアップ(計画的実施)
- ダウンタイム最小化のため、レプリカ昇格方式を採用
データ増加への対応
パーティショニング戦略:
- 大容量テーブル(ログ、履歴データ)の月次パーティション化
- 古いパーティションのアーカイブストレージへ移行
データアーカイブ:
- 1年以上経過したデータは圧縮してS3へ移行
- アーカイブデータへのアクセスは別APIで提供
保守性・運用性要件の実現方式
ログ管理
ログ種別と出力先:
| ログ種別 | 出力内容 | 出力先 | 保持期間 |
|---|---|---|---|
| アプリケーションログ | 処理開始/終了、エラー情報 | CloudWatch Logs | 90日 |
| アクセスログ | HTTP リクエスト/レスポンス | S3 | 1年 |
| エラーログ | 例外スタックトレース、システムエラー | CloudWatch Logs | 90日 |
| 監査ログ | ユーザー操作履歴、データ変更履歴 | RDS(専用テーブル) | 3年 |
モニタリング
監視項目:
- システムメトリクス: CPU、メモリ、ディスク使用率
- アプリケーションメトリクス: レスポンスタイム、エラー率、スループット
- ビジネスメトリクス: ユーザー数、トランザクション数
アラート設定:
graph TD
A["メトリクス収集<br/>Datadog Agent"] --> B{"閾値判定"}
B -->|Critical| C["即時通知<br/>PagerDuty + 電話"]
B -->|Warning| D["通知<br/>Slack + メール"]
B -->|Normal| E["ダッシュボード<br/>記録のみ"]
デプロイ・リリース
デプロイ戦略:
- ブルーグリーンデプロイメント採用
- カナリアリリースによる段階的展開
- 問題発生時の即時ロールバック機構
リリースフロー:
- ステージング環境での動作確認
- 本番環境の一部(10%)へデプロイ
- エラー監視(30分)
- 問題なければ全体へ展開
- リリース完了報告
セキュリティ要件の実現方式概要
詳細は「セキュリティ仕様・方式」を参照。
主要な実現方式:
- 認証: OAuth 2.0 + JWT
- 認可: ロールベースアクセス制御(RBAC)
- 通信暗号化: TLS 1.3
- データ暗号化: AES-256(保存時)
- 脆弱性対策: 定期的なセキュリティスキャン、依存ライブラリの更新