intermediate
Очереди
Сглаживайте пики и отделяйте медленную работу очередями: concurrency consumers, retries, dead-letter и идемпотентные jobs.
Очереди отделяют producers от медленных consumers — сглаживают пики, ретраят работу и изолируют failure domains. Примеры: SQS, RabbitMQ, BullMQ, Kafka (log-oriented).
| Задача | Практика | |--------|----------| | Concurrency | Лимит parallel consumers на очередь | | Retries | Exponential backoff + max attempts | | DLQ | Poison messages на разбор | | Idempotency | Handlers безопасны при duplicate delivery |
API → enqueue job → Worker pool → side effects (email, PDF, webhook)
Мониторьте **queue depth** и **возраст старейшего сообщения** — lag сигнал масштабируемости. Масштабируйте consumers при росте lag, не только при высоком CPU.
На интервью: at-least-once vs exactly-once; ordering; backpressure при неограниченной очереди; идемпотентные payment handlers.
Типовые ошибки: неограниченная очередь скрывает overload; нет DLQ; consumers быстрее, чем выдерживает downstream БД.
Компромисс — устойчивость и эластичность против eventual consistency и мониторинга.
Чеклист:
- Ограниченные retries с DLQ.
- Идемпотентные consumers с dedupe keys.
- Алерт на lag и oldest-message age.
- Concurrency consumers под ёмкость downstream.