Jangan pernah melakukan loop terhadap 1 juta pengguna di dalam request handler — sebarkan (fan out) melalui queue, throttle sesuai kapasitas yang bisa diterima setiap provider, buat setiap pengiriman idempotent, dan arahkan kegagalan ke DLQ untuk retry. Panggilan API hanya melakukan enqueue; worker yang mengerjakan I/O yang lambat.
Arsitektur
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
