Iteriere in einem Request-Handler niemals über 1 Mio. Nutzer - verteile die Last über eine Queue (fan out), drossle auf das, was jeder Provider akzeptiert, mache jeden Versand idempotent und leite Fehler zur erneuten Verarbeitung in eine DLQ. Der API-Aufruf reiht nur ein; die Worker erledigen die langsame I/O.
Architektur
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
