Nigdy nie iteruj po 1 mln użytkowników w handlerze żądania — rozprowadź pracę przez kolejkę (fan out), ogranicz tempo (throttle) do tego, co każdy dostawca jest w stanie przyjąć, uczyń każdą wysyłkę idempotentną i kieruj błędy do DLQ w celu ponowienia. Wywołanie API jedynie umieszcza zadanie w kolejce; workery wykonują wolne operacje I/O.
Architektura
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
