面接問題:2時間で1,000万件のメールを送るアーキテクチャ¶
問題¶
バックエンドをクラッシュさせず、スパム判定されずに2時間で1,000万件のメールを送るにはどう設計するか?
アーキテクチャ設計¶
API サーバー
↓ メール送信タスクをキューに投入
Message Queue (SQS / RabbitMQ)
↓
Worker Fleet(水平スケール)
↓ スロットリング制御しながら
専用メール送信サービス (SES / SendGrid / Mailgun)
↓
受信者メールサーバー
主なポイント¶
スパム対策¶
- 送信レート制限: ESP の制限(SES は デフォルト 14送信/秒、上限緩和申請可能)に合わせる
- IPウォームアップ: 新規 IP は少量から始めて評判を積み上げる
- ドメイン認証: SPF / DKIM / DMARC を設定する
- バウンス管理: バウンスしたアドレスをリストから除去する
バックエンド保護¶
- バックエンドはキューに投入するだけ。処理はワーカーに委譲
- ワーカーは水平スケールし、ESP のレート制限に合わせてスロットリング
- 失敗したメールはデッドレターキューに入れて後で再処理
監視¶
- 配信成功率・バウンス率・スパム報告率をリアルタイム監視
- アラートを設定し、問題があれば送信を一時停止できる仕組みを用意
数字感覚¶
- 1,000万 ÷ 7,200秒(2時間)= 約1,389通/秒 が必要レート
- SES 上限緩和後なら対応可能。複数アカウント・IP プールで分散もあり