Niekada neapdorokite 1 mln. naudotojų cikle užklausos apdorojimo funkcijoje — paskirstykite darbą per eilę, ribokite srautą pagal tai, ką kiekvienas tiekėjas gali priimti, padarykite kiekvieną siuntimą idempotentišką ir nukreipkite klaidas į DLQ pakartotiniam bandymui. API iškvietimas tik įdeda užduotį į eilę; visą lėtą I/O atlieka workeriai.
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
