Jangan sekali-kali gelung ke atas 1J pengguna di dalam pengendali permintaan (request handler) — fan out melalui queue, throttle mengikut kadar yang boleh diterima setiap provider, jadikan setiap penghantaran idempotent, dan halakan kegagalan ke DLQ untuk cuba semula. Panggilan API hanya melakukan enqueue; worker yang melakukan I/O yang perlahan.
Seni bina
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
