コンテンツにスキップ

面接問題: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 プールで分散もあり