Назад до блогу

Черги та масштабування: backpressure, retry, dead‑letter і “не покласти систему”

Коли потрібні черги (RabbitMQ/Kafka), як налаштувати ретраї, обмеження, dead‑letter, ідемпотентність та backpressure, щоб high‑load не перетворився на інцидент.

3 бер. 2026 р.

Черга — це буфер між “хочу зараз” і “можу обробити”

При пікових навантаженнях черга дозволяє прийняти запити, але обробити їх контрольовано. Це особливо важливо для email/SMS, інтеграцій, білінгу, генерації документів.

1) Вибір: RabbitMQ vs Kafka (спрощено)

  • RabbitMQ: задачі/джоби, маршрутизація, простіший старт.
  • Kafka: стріми подій, високий throughput, довга історія подій.

2) Ідемпотентність

Повідомлення можуть прийти двічі. Обробник має бути ідемпотентним: eventId + дедуплікація/уникнення повторної побічної дії.

3) Retry policy

  • Exponential backoff + jitter.
  • Розділяй тимчасові помилки (timeouts) і “постійні” (валідація).

4) Dead‑letter

Після N невдалих спроб повідомлення має потрапляти в dead‑letter з причиною, щоб його можна було проаналізувати і перевідправити.

5) Backpressure і ліміти

  • Обмежуй concurrency воркерів, щоб не вбити БД/зовнішні API.
  • Вводь rate limit і bulkhead‑ізоляцію для інтеграцій.

Підсумок

Черги допомагають масштабуватись, коли є ідемпотентність, зрозумілі ретраї, dead‑letter і backpressure. Тоді high‑load — це режим роботи, а не катастрофа.

Релевантні статті