コンテンツにスキップ

面接問題:突然のAPIトラフィック10倍スパイクでシステムをダウンさせないための対策

問題

How would you handle a sudden 10x spike in API traffic without your system going down?

解答

10倍スパイクへの対応は 事前設計(防ぐ)と 緊急対応(受け流す)の両軸で考える。

事前設計:スパイクが来ても壊れない仕組み

1. Auto Scaling(自動スケーリング)
   → CPU/リクエスト数が閾値を超えたらサーバーを自動追加
   → AWS: ALB + ECS Auto Scaling / EKS HPA
   → 起動時間: EC2(数分) < コンテナ(数秒)

2. キャッシュ層(最大の効果)
   → Redis/Memcached でよく読まれるデータをメモリキャッシュ
   → CDN で静的コンテンツ・API レスポンスをエッジキャッシュ
   → Cache Hit Rate 90% なら DB のリクエストを 10分の1 に削減

3. Rate Limiting
   → 異常なリクエスト(ボット・DDoS)をエッジで弾く
   → 1ユーザーあたりの上限を設定して公平性を保つ

4. 非同期処理
   → 即座に返せるものと時間がかかるものを分離
   → 重い処理は Queue(SQS/Kafka)に逃がして Worker が非同期処理

緊急対応:スパイク発生時のトリアージ

Step 1: 計測(何が詰まっているか)
  → モニタリング(Datadog/CloudWatch)でボトルネック特定
  → DB コネクション枯渇? CPU? 外部 API の応答待ち?

Step 2: 即時対処
  → コンテナ・インスタンスを手動でスケールアウト
  → Read Replica に読み取りトラフィックを逃がす
  → キャッシュの TTL を一時的に伸ばす
  → 重要でない機能を一時的に無効化(機能フラグ)

Step 3: Circuit Breaker
  → 外部サービスが詰まったら早期に失敗を返す
  → Cascading Failure を防ぐ

アーキテクチャ例

            [CDN]
Client → [Load Balancer] → [API Servers (auto-scale)]
                            [Redis Cache] → [DB Read Replica]
                            [Message Queue] → [Worker]
                                          [DB Write Primary]

面接でのポイント

  • 事前設計(普段から対応できる設計)と緊急対応を区別して話す
  • キャッシュが最も効果的な対策であることを強調
  • 数値感覚を示す:「キャッシュヒット率90%で DB リクエストを10分の1に」
  • 「まずモニタリングで状況を把握してから対処する」姿勢を示す