لا تمرّ أبداً في حلقة على مليون مستخدم داخل معالِج الطلب — بل وزّع العمل عبر طابور (queue)، واضبط المعدّل بما يستطيع كل مزوّد قبوله، واجعل كل عملية إرسال idempotent، ووجّه الإخفاقات إلى DLQ لإعادة المحاولة. استدعاء الـ API لا يفعل سوى وضع المهمة في الطابور؛ أما العمّال (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
