არასდროს გაატაროთ 1M მომხმარებელი ციკლში request handler-ის შიგნით — გაანაწილეთ (fan out) queue-ის მეშვეობით, დააყენეთ throttle იმ დონეზე, რასაც თითოეული provider იღებს, გახადეთ ყოველი გაგზავნა idempotent და მიმართეთ ჩავარდნები DLQ-ში ხელახალი მცდელობისთვის. API გამოძახება მხოლოდ ამატებს queue-ში; ნელ I/O-ს worker-ები ასრულებენ.
არქიტექტურა
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
