Средний

Очереди сообщений и асинхронная обработка

Урок 3 из 3 в курсе Масштабирование backend-систем

Содержание курса (3/3)

Очереди сообщений и асинхронная обработка

очереди позволяют обрабатывать задачи вне HTTP-запроса и сглаживать пики нагрузки.

Почему это важно: Синхронная обработка медленных операций (email, изображения, отчёты) делает API медленным и хрупким.

Главная идея

HTTP-запрос быстро кладёт задачу в очередь; worker обрабатывает её асинхронно.

Как это выглядит на практике

  1. Пользователь загружает фото — API принимает файл и кладёт задачу в очередь.
  2. Запрос возвращает 202 Accepted за 50 мс вместо 5 секунд.
  3. Worker подхватывает задачу и делает resize, upload в S3, уведомление.
  4. При пике нагрузки очередь буферизует задачи, worker'ы обрабатывают в своём темпе.

Что происходит под капотом

  • Брокеры очередей: RabbitMQ, Redis (Sidekiq, BullMQ), Kafka, SQS.
  • At-least-once vs exactly-once delivery — разные гарантии доставки.
  • Idempotency: задачи должны быть безопасны при повторной обработке.
  • Dead letter queue: задачи, которые не удалось обработать после N попыток.

Типичные ошибки и заблуждения

  • Ошибка: очередь = магический буфер. Если worker'ы медленнее продюсера, очередь будет расти бесконечно.
  • Ошибка: exactly-once гарантия легко достигается. На практике это очень сложно.
  • Ошибка: любые задачи подходят для очереди. Задачи, требующие немедленного ответа, нужно делать синхронно.
  • Ошибка: Kafka — это очередь. Kafka — это лог, у него другая модель использования.

Ключевые выводы

  • Очередь разделяет приём и обработку задач.
  • Идемпотентность — must-have для асинхронных задач.
  • Мониторьте длину очереди и время обработки.
  • Dead letter queue спасает от потерянных задач.

Термины урока

Queue: структура данных FIFO для задач/сообщений.
Producer: компонент, кладущий задачи в очередь.
Consumer (worker): компонент, обрабатывающий задачи из очереди.
Idempotency: свойство операции, при котором повторное выполнение не меняет результат.

Связь с работой backend-разработчика

Очереди — ключевой инструмент масштабирования backend'а. Всё, что не требует синхронного ответа, должно обрабатываться асинхронно.

Мини-разбор реальной ситуации

API отправки email тормозил на 3 секунды из-за SMTP. После переноса в Sidekiq время ответа упало до 20 мс, а письма всё равно уходили вовремя.

Что запомнить

  • Асинхронность ≠ магия — нужны мониторинг и идемпотентность.
  • Медленные операции = кандидаты для очереди.
  • Dead letter queue = ваша страховка.

Итог

Очереди сообщений — это не только про масштабирование, но и про надёжность и стабильность системы.

Комментарии к уроку

Войдите, чтобы оставить комментарий.

Пока нет комментариев — будьте первым.