Soha ne iterálj végig 1M felhasználón egy request handlerben — oszd szét a munkát egy queue-n keresztül, throttle-özz arra a szintre, amit az egyes szolgáltatók el tudnak fogadni, tegyél minden küldést idempotenssé, és a hibákat irányítsd egy DLQ-ba újrapróbálásra. Az API-hívás csak sorba állít; a lassú I/O-t a workerek végzik.
Architektúra
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
