面接問題:メッセージキューのバックログが急増し遅延が数時間に達したとき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 ベース)
アーキテクチャ例¶
面接でのポイント¶
- 「まず計測・原因特定してから対処する」姿勢を最初に見せる
- スケールアウト以外の選択肢(優先度制御・バッチサイズ調整・毒メッセージ除去)まで言及できると加点
- 今の緊急対応と、再発防止の恒久対策を分けて話す
- SQS / Kafka / RabbitMQ など具体的なツールと組み合わせて説明できるとなお良い