Loopa aldrig över 1M användare i en request-hanterare — fan-outa genom en kö, strypa till vad varje leverantör klarar av att ta emot, gör varje utskick idempotent och dirigera fel till en DLQ för omförsök. API-anropet köar bara upp jobbet; workers utför den långsamma I/O:n.
Arkitektur
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
