Älä koskaan käy 1M käyttäjää läpi silmukassa pyyntökäsittelijässä — hajauta työ jonon (queue) kautta, rajoita lähetystahti siihen, mitä kukin palveluntarjoaja pystyy vastaanottamaan, tee jokaisesta lähetyksestä idempotentti ja ohjaa epäonnistumiset DLQ:hun uudelleenyritystä varten. API-kutsu vain lisää työn jonoon; workerit tekevät hitaan I/O:n.
Arkkitehtuuri
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
