Bir request handler içinde asla 1 milyon kullanıcı üzerinde döngü kurmayın — bunun yerine bir kuyruk üzerinden fan-out yapın, her sağlayıcının kabul edebileceği kadarıyla throttle uygulayın, her gönderimi idempotent hale getirin ve başarısızlıkları yeniden deneme için bir DLQ'ya yönlendirin. API çağrısı yalnızca kuyruğa iş ekler; yavaş I/O işini worker'lar yapar.
Mimari
Admin ─▶ Campaign API ─▶ [enqueue job] ─▶ Kafka/SQS ─┐
▼
┌──────────────── Worker pool (autoscaled) ───────────────┐
│ claim ─▶ dedup(Redis SETNX) ─▶ rate-limiter ─▶ provider │
└──────────┬──────────────────────────────┬───────────────┘
│ ok │ fail (5xx/timeout)
▼ ▼
sent_log (DB) Retry (backoff) ─▶ DLQ
