ఒక request handler లో 1M యూజర్ల మీద ఎప్పుడూ loop వేయకండి — queue ద్వారా fan out చేయండి, ప్రతి provider స్వీకరించగలిగే స్థాయికి throttle చేయండి, ప్రతి send ను idempotent గా చేయండి, మరియు failures ను retry కోసం DLQ కి route చేయండి. API call కేవలం enqueue మాత్రమే చేస్తుంది; నెమ్మదైన I/O ని workers చేస్తాయి.
ఆర్కిటెక్చర్
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
