Ответ вслух Middle Кеш и очереди обновлено

Зачем очередь и как сделать её надёжной

Вопрос

Объясни, зачем бэкенду очередь задач и как сделать обработку надёжной.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Очередь отделяет приём работы от выполнения. Пользователь оформил заказ, получил ответ за сто миллисекунд, а письмо, чек и выгрузка в учётную систему делаются воркерами фоном.

Что должно прозвучать в ответе

  • Отвязать долгую работу от ответа пользователю: письма, PDF, интеграции

  • Сгладить пики нагрузки и ограничить параллелизм воркеров

  • At-least-once: задачи могут прийти повторно, обработчики идемпотентные

  • Повторы с экспоненциальной задержкой и лимитом, затем DLQ

  • Outbox, если нужно атомарно записать в базу и отправить событие

  • Выбор инструмента: BullMQ на Redis, RabbitMQ, Kafka для потока событий

Что могут спросить следом

  • Чем Kafka отличается от RabbitMQ?
  • Как следить, что очередь не растёт?

Разбор

Очередь отделяет приём работы от выполнения. Пользователь оформил заказ, получил ответ за сто миллисекунд, а письмо, чек и выгрузка в учётную систему делаются воркерами фоном. Заодно очередь сглаживает пики: задачи копятся, а воркеры разбирают их с той скоростью, которую выдерживают внешние сервисы.

Надёжность строю из трёх частей. Первое: почти все очереди доставляют at-least-once, поэтому обработчики идемпотентные, с ключом операции и уникальным индексом в базе. Второе: повторы с экспоненциальной паузой и лимитом попыток, а то, что не прошло, уходит в dead letter queue с алертом. Третье: если в одной операции нужно и записать в базу, и отправить событие, использую outbox, чтобы не было записи без события.

В Node-проектах обычно беру BullMQ поверх Redis: повторы, задержки и конкурентность из коробки. Если нужен общий поток событий для многих сервисов с возможностью перечитать историю, это уже Kafka.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.