Well-Architected: 大量データの設計パターン
大量データを扱うワークロードに焦点を当て、AWS Well-Architected Frameworkの各柱を深掘りします。「なぜ小規模と同じ設計では破綻するのか」を出発点に、段階的に対策を導入する方法を学びます。
所要時間
約70分
学べること
- 大量データで「何が変わるか」— 小規模では問題にならない 設計がなぜ破綻するか
- データ特性に基づく分類と、ワークロードに応じたサービス選択の判断基準
- 各設計パターンのメリットだけでなく、導入で引き受けるトレードオフ
- データ量の成長に合わせた段階的な対策導入の進め方
- 各Phase(小規模〜大規模)の具体的なAWSコストイメージと最適化手法
- IDサービスでの統合アーキテクチャ
前提知識
- Well-Architected Frameworkの6つの柱の基本理解
- AWSの主要データストアサービス(RDS、S3、DynamoDB等)の基礎知識
目次
- 大量データで何が変わるか
- データ特性の分類
- アプリケーションとインフラの責務
- パフォーマンス効率の柱
- 信頼性の柱
- コスト最適化の柱
- セキュリティの柱
- 運用上の優秀性の柱
- IDサービスの統合アーキテクチャ
- 段階的な導入パス
- アンチパターン
- まとめ
大量データで何が変わるか
小規模なシステムでは問題にならない設計が、データ量の増加とともに破綻します。「大量データ」は単なる数字の違いではなく、設計の前提そのものが変わる質的な変化です。
どこから「大量」なのか
明確な閾値はありませんが、以下の兆候が現れ始めたら設計の見直しが必要です。
| 兆候 | 具体的な数値目安 | 何が起きるか |
|---|---|---|
| DBの応答が遅くなる | テーブル行数が数千万行を超える | フルスキャンの 所要時間が秒単位に |
| ストレージコストが無視できなくなる | 月間のS3/RDS料金が数万円を超える | 階層化しないと年間で桁が変わる |
| バックアップ/リストアに時間がかかる | DBサイズが100GB超 | スナップショットの復元に30分以上 |
| ログの検索が実用的でなくなる | 1日あたり数百万イベント | CloudWatch Logsだけでは検索が遅い |
| 書き込みがボトルネックになる | 秒間数百〜数千の書き込み | 単一DBのWriter限界に近づく |
| コネクションが枯渇する | アプリケーションインスタンスが50台超 | DB最大接続数に到達 |
小規模と大規模で何が違うか
小規模(〜数百万行、〜数十GB):
アプリ ──→ 単一DB ──→ ログファイル
- 1つのDBで全データを管理できる
- SELECT * でも現実的な時間で返る
- ログはファイルに書いて必要なときにgrepで十分
- バックアップは深夜に取れば問題ない
- コストは月額数千円〜数万円程度
大規模(数億行〜、数百GB〜TB):
アプリ ──→ キャッシュ ──→ DB(Writer) ──→ SQS ──→ S3
──→ DB(Reader) ──→ 分析基盤
- 1つのDBでは限界(パーティション、Read/Write分離が必要)
- インデックスなしのクエリは数分〜タイムアウト
- ログは専用の集約基盤なしでは検索不能
- バックアップに数時間、RTO(復旧目標時間)の厳密な設計が必要
- コストは月額数十万円〜、設計次第で10倍の差
大量データで顕在化する5つの問題
小規模では隠れていた問題が、データ量の増加とともに表面化します。
1. レイテンシの非線形増加
データ量が10倍になると、レイテンシは10倍ではなく100倍以上に悪化することがあります。
テーブル行数とフルスキャン所要時間:
行数 フルスキャン インデックス検索
───── ────────── ────────────
10万行 50ms 1ms
100万行 500ms 1ms
1,000万行 5秒 2ms
1億行 50秒〜 3ms ← インデックスなしでは実用不可
10億行 タイムアウト 5ms
教訓: 小規模では「全件スキャンでも速い」が、大規模では
インデックスとパーティションの設計が生死を分ける
2. コストの非線形増加
「データ量に比例したコスト」は楽観的すぎます。データ量が増えると、周辺コスト(I/O、転送、バックアップ等)が加速度的に増加します。
| データ量 | ストレージコスト | I/Oコスト | バックアップ | 合計目安 |
|---|---|---|---|---|
| 10GB | $3/月 | $5/月 | 含まれる | $10/月 |
| 100GB | $25/月 | $50/月 | $10/月 | $100/月 |
| 1TB | $250/月 | $500/月 | $100/月 | $1,000/月 |
| 10TB | $2,500/月 | $5,000/月 | $1,000/月 | $10,000/月 |
この差はストレージ階層化やクエリ最適化の設計で大きく変わります(後述のコスト最適化の柱を参照)。
3. 障害の影響範囲の拡大
小規模では「再起動すれば直る」障害が、大規模では「復旧に数時間、データ不整合のリスク」に変わります。
小規模での障害:
DB再起動 → 数秒でサービス復旧 → 影響軽微
大規模での障害:
DB再起動 → バッファプール再構築(数分)
→ キャッシュコールドスタート(数分)
→ 大量リクエストがDBに直撃(雪崩)
→ タイムアウト連鎖
→ 復旧に30分〜数時間
4. 運用の複雑化
| 運用タスク | 小規模 | 大規模 |
|---|---|---|
| デプロイ | 停止して更新、数分 | ローリング更新、数十分〜 |
| マイグレーション | ALTER TABLE、数秒 | オンラインDDL必須、数時間 |
| バックアップ検証 | 手動でリストア確認 | 自動リストア訓練が必須 |
| ログ調査 | grep で十分 | 専用分析基盤(Athena等)が必要 |
| パフォーマンス監視 | 基本メトリクスで十分 | テナント別・エンドポイント別メトリクスが必須 |
5. セキュリティリスクの増大
データ量が増えるほど、漏洩時の影響が大きくなります。
| データ量 | 漏洩時の影響 | 必要な対策レベル |
|---|---|---|
| ユーザー1万人分 | 重大だが限定的 |