コンテンツにスキップ

面接問題:メッセージキューのバックログが急増し遅延が数時間に達したとき20分でどう対処するか

問題

Your message queue backlog is growing fast. Consumers can't keep up. Delays are now hours long. You have 20 minutes. What do you do?

解答

即時対応(0〜5分):現状把握と原因特定

1. メトリクスを確認
   - キュー深さ(backlog size)の増加速度
   - コンシューマーのスループット(messages/sec)
   - エラーレートと Dead Letter Queue の状況
   - コンシューマーのリソース使用率(CPU/Memory/DB接続数)

2. ボトルネックを特定
   - 遅いのはコンシューマー処理か?外部依存(DB・API)か?
   - 特定のメッセージ種別で詰まっていないか?

緊急対処(5〜15分)

ケース A: コンシューマーが少ない(スケール不足)
→ コンシューマーを水平スケールアウト
  - Kubernetes: kubectl scale deployment consumer --replicas=10
  - ECS: desired count を増やす

ケース B: 特定処理が遅い(外部依存のボトルネック)
→ 並列処理を増やす / batch size を調整
→ 重い処理だけ別キューに分離して優先度制御

ケース C: 毒メッセージ(Poison Message)で詰まっている
→ DLQに移動させてバックログを解消
→ 原因を後から調査

恒久対策(15〜20分で計画)

1. コンシューマーの並列度を設定可能にする(設定値でスケール)
2. Priority Queue を導入(重要メッセージを先に処理)
3. Back Pressure を実装(プロデューサーの投入速度を制御)
4. Circuit Breaker(外部依存がダウンしたとき無限リトライしない)
5. オートスケーリングの閾値設定(backlog depth ベース)

アーキテクチャ例

Producer → [Priority Queue] → Consumer Group (auto-scale)
                               ↓ 失敗
                           [DLQ] → Alert + 手動/自動リトライ

面接でのポイント

  • 「まず計測・原因特定してから対処する」姿勢を最初に見せる
  • スケールアウト以外の選択肢(優先度制御・バッチサイズ調整・毒メッセージ除去)まで言及できると加点
  • 今の緊急対応と、再発防止の恒久対策を分けて話す
  • SQS / Kafka / RabbitMQ など具体的なツールと組み合わせて説明できるとなお良い