scalability-playbook について
システムのスケーラビリティ上のボトルネックを特定し、解消するための段階的なガイドです。測定、拡張策、実行条件、負荷テスト、コスト計画を扱います。
主な機能
- 01ボトルネックの測定と影響評価
- 02工数順に並べた拡張策
- 03指標のしきい値と実行条件
- 04段階的なスケーリング計画
- 05負荷テストとコスト分析
活用シーン
- 01データベースクエリの遅延診断
- 02単一サーバーから水平拡張への計画
- 03システム指標に基づく拡張アラート設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ patricio0312rev/ skills --skill scalability-playbookインストール後、Claude Code で/scalability-playbookを入力して読み込まれたか確認します。
詳細
スケーラビリティのプレイブック
スケーラビリティのボトルネックを特定し、解消するための体系的なアプローチです。
ボトルネックの分析
現在のシステムプロファイル
Traffic: 1,000 req/min
Users: 10,000 active
Data: 100GB database
Response time: p95 = 500ms
特定されたボトルネック
1. データベースクエリ
症状: ページの読み込みが遅い(2~3秒) 測定値: クエリ時間の p95 = 800ms 影響: 高 — すべての読み取りに影響します トリガー: p95 が 500ms を超えたとき
2. 単一サーバー
症状: CPU 使用率が高い(80% 超) 測定値: ロードアベレージ >4 影響: 中 — 時折、処理が遅くなります トリガー: CPU 使用率が 70% を超えたとき
3. キャッシュなし
症状: 同じ DB クエリの繰り返し 測定値: キャッシュヒット率 = 0% 影響: 中 — 不要な負荷が発生します トリガー: クエリ数が 10k/分を超えたとき
スケーリング戦略(順序付き)
レベル 1:すぐにできる改善(数日)
1.1 データベースインデックスの追加
問題: クエリが遅い 解決策:
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_orders_user_created ON orders(user_id, created_at);
期待される効果: クエリが 80% 高速化 コスト: $0 作業期間: 1日
1.2 クエリキャッシュの有効化
問題: クエリが繰り返し実行される 解決策: Redis キャッシュ層
const cached = await redis.get(`user:${userId}`);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(userId);
await redis.setex(`user:${userId}`, 3600, JSON.stringify(user));
期待される効果: DB 負荷を 60% 削減 コスト: $50/月 作業期間: 2日
レベル 2:水平スケーリング(数週間)
2.1 読み取りレプリカの追加
問題: 読み取り中心のワークロード 解決策: 読み取りをレプリカにルーティング
Write Load: Primary DB
Read Load: 3x Read Replicas
期待される効果: 読み取り容量が 3 倍 コスト: $300/月 作業期間: 1週間
2.2 ロードバランサーと複数のサーバー
問題: 単一障害点 解決策:
ALB
├── Server 1
├── Server 2
└── Server 3
期待される効果: スループットが 3 倍 コスト: $400/月 作業期間: 1週間
レベル 3:アーキテクチャの変更(数か月)
3.1 静的アセット用 CDN
問題: アセットの配信が遅い 解決策: CloudFront CDN 期待される効果: アセットの読み込みが 90% 高速化 コスト: $100/月 作業期間: 1週間
3.2 非同期処理
問題: 同期処理が遅い 解決策: バックグラウンドジョブキュー
// Before: Sync
await sendEmail(user);
await processPayment(order);
await updateAnalytics(event);
return response; // Waits 5+ seconds
// After: Async
await queue.add("send-email", { userId });
await queue.add("process-payment", { orderId });
await queue.add("update-analytics", { event });
return response; // Returns immediately
期待される効果: 応答が 80% 高速化 コスト: $50/月(SQS) 作業期間: 2週間
レベル 4:データ層の最適化(数か月)
4.1 データベースシャーディング
問題: 単一の DB が大きすぎる 解決策: user_id でシャーディング
Shard 1: user_id 0-24999
Shard 2: user_id 25000-49999
Shard 3: user_id 50000-74999
Shard 4: user_id 75000-99999
期待される効果: 容量が 4 倍 コスト: $1,200/月 作業期間: 2か月
4.2 イベント駆動型アーキテクチャ
問題: 密結合、連鎖的な障害 解決策: メッセージブローカー(Kafka)
Service A → Kafka → Service B
↘ ↗ Service C
期待される効果: 分離性と回復力の向上 コスト: $500/月 作業期間: 3か月
スケーリングのトリガー
| Metric | Current | Warning | Critical | Action |
| ---------------- | ------- | ------- | -------- | ----------------------- |
| CPU | 40% | 70% | 85% | Add servers |
| Memory | 50% | 75% | 90% | Upgrade instances |
| DB Connections | 20 | 40 | 50 | Add read replicas |
| Query Time (p95) | 200ms | 500ms | 1000ms | Add indexes |
| Queue Depth | 100 | 1000 | 5000 | Add workers |
| Error Rate | 0.1% | 1% | 5% | Investigate immediately |
段階的なスケーリング計画
フェーズ 1:現状から 10 倍へ(0~3か月)
目標: 10,000 req/min、ユーザー数 100K
実施項目:
- データベースインデックスを追加(第 1 週)
- Redis キャッシュを実装(第 2 週)
- 読み取りレプリカを 3 台追加(第 4 週)
- アプリケーションサーバーを水平スケーリング(第 6 週)
- 静的アセット用 CDN を導入(第 8 週)
コスト: $500 → $1,000/月
フェーズ 2:10 倍から 100 倍へ(3~12か月)
目標: 100,000 req/min、ユーザー数 1M
実施項目:
- データベースシャーディング(4~6か月目)
- マルチリージョン展開(6~8か月目)
- マイクロサービスの切り出し(8~12か月目)
- イベント駆動型アーキテクチャ(10~12か月目)
コスト: $1,000 → $10,000/月
フェーズ 3:100 倍から 1000 倍へ(12~24か月)
目標: 1M req/min、ユーザー数 10M
実施項目:
- グローバル CDN(13か月目)
- 高度なキャッシュ(L1/L2)(14~15か月目)
- カスタム DB ソリューション(16~18か月目)
- エッジコンピューティング(18~20か月目)
コスト: $10,000 → $100,000/月
負荷テスト計画
# Current baseline
hey -n 10000 -c 100 https://api.example.com/users
# Target 10x
hey -n 100000 -c 1000 https://api.example.com/users
# Measure:
# - Requests/sec
# - p50, p95, p99 latency
# - Error rate
# - Resource utilization
費用対効果分析
| Strategy | Cost/Month | Expected Impact | ROI | Priority |
| ------------- | ---------- | ------------------ | --- | -------- |
| DB Indexes | $0 | 80% faster queries | ∞ | HIGH |
| Redis Cache | $50 | 60% less DB load | 12x | HIGH |
| Read Replicas | $300 | 3x capacity | 10x | MEDIUM |
| Load Balancer | $400 | 3x throughput | 7x | MEDIUM |
| DB Sharding | $1,200 | 4x capacity | 3x | LOW |
ベストプラクティス
- まず測定する:やみくもに最適化しないでください
- 手軽にできる改善から始める:簡単にできることから取り組みます
- 負荷テストを行う:本番環境への導入前に検証します
- 継続的に監視する:アラートを設定します
- 先を見越して計画する:限界に達する前にスケーリングします
- コストを意識する:ROI に基づいて判断します
- 段階的に進める:小さく安全な変更を行います
出力チェックリスト
- 現在のシステムプロファイル
- ボトルネックの特定と測定
- スケーリング戦略を労力の少ない順に整理
- 各アクションの実行条件を定義
- 段階的な計画(1x → 10x → 100x)
- 各フェーズのコスト見積もり
- 負荷テスト計画
- 監視ダッシュボード
- ロールバック手順