Μην κάνετε ποτέ loop πάνω σε 1 εκατομμύριο χρήστες μέσα σε έναν request handler — κάντε fan out μέσα από μια ουρά (queue), κάντε throttle σε ό,τι μπορεί να δεχτεί ο κάθε provider, κάντε κάθε αποστολή idempotent, και δρομολογήστε τις αποτυχίες σε ένα DLQ για retry. Η κλήση του API απλώς κάνει enqueue· οι workers κάνουν το αργό I/O.
Αρχιτεκτονική
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
