面接問題:APIが毎秒10,000リクエストでサーバーが詰まった、15分で何をするか
問題¶
Your API is getting 10,000 requests per second. Server is choking. Users are complaining. You have 15 minutes to fix it. What do you do?
解答¶
0〜3分:現状把握(計測してから動く)¶
# まず何が詰まっているか特定する
# CPU が高い? メモリ? DB 接続? ネットワーク?
top / htop → CPU・メモリの使用状況
netstat -an → 接続数・CLOSE_WAIT の蓄積
iostat → ディスク I/O
curl -w "%{time_total}" https://api/health → レスポンスタイム
3〜8分:即時対処(原因に応じて)¶
ケース A: CPU 高負荷(重い処理がある)
→ 水平スケール(サーバー・コンテナを追加)
→ Kubernetes: kubectl scale deployment api --replicas=10
ケース B: DB コネクション枯渇
→ コネクションプール設定を確認・増やす
→ 読み取りは Read Replica に向ける
ケース C: 特定エンドポイントが重い
→ キャッシュを追加(Redis)
→ rate limiting でリクエストを絞る
ケース D: キャッシュで対応できるリクエストが多い
→ CDN または Application-level キャッシュを追加
Cache-Control: max-age=60 をヘッダに追加するだけで劇的改善
8〜15分:応急処置の実施と確認¶
1. Circuit Breaker を確認(外部依存が詰まって cascading failure を起こしていないか)
2. Rate Limiting を一時的に強化(悪意あるトラフィックを排除)
3. スケールアウト後のメトリクスを監視してレスポンスタイムが下がるか確認
4. 恒久対策の計画(Auto Scaling 設定、インデックス追加など)
根本対策(障害後に実施)¶
Auto Scaling → CPU/リクエスト数ベースで自動スケール
Application Cache → 頻繁に読まれるデータを Redis にキャッシュ
DB Indexing → EXPLAIN ANALYZE で遅いクエリを特定
Async Processing → 重い処理を Queue に逃がす
CDN → 静的コンテンツはオリジンに届けない
面接でのポイント¶
- 最初に「まず計測・原因特定をする」と言う(闇雲にスケールしない)
- 即時対処と恒久対策を分けて話す
- 「スケールアウトだけが解」と言わない(コスト・根本原因の観点を示す)
- 具体的なツール(Redis, Kubernetes, CDN)を交えて話せると加点