data-infra
Словарь ↗Очередь сообщений (Message Queue)
Очередь сообщений — это инфраструктура, которая разделяет производителя (producer) единицы работы и потребителя (consumer), который в итоге её выполняет, удерживая сообщения (единицы работы или данных) в упорядоченном буфере до тех пор, пока рабочий процесс не будет готов их обработать. Вместо того чтобы Сервис A напрямую вызывал Сервис B и ждал ответа (синхронно, с тесной связью и хрупкостью, если B медленный или недоступен), Сервис A публикует сообщение в очередь и сразу продолжает работу; Сервис B (или парк рабочих процессов) потребляет сообщения из очереди в своём темпе. Почему это важно для разработчиков AI/SaaS: AI-нагрузки часто медленные и переменной длительности — генерация изображения может занять 5 секунд, транскрибация часового аудио — минуту, пакетное задание эмбеддинга по 10 000 документам — намного дольше, — и ничему из этого не место внутри цикла запрос/ответ веб-запроса, который должен возвращаться заметно быстрее секунды, чтобы ощущаться отзывчивым. Именно очереди позволяют продукту мгновенно принять запрос («ваше видео обрабатывается»), вернуть управление пользователю и завершить реальную AI-работу в фоне, уведомляя пользователя через вебхук, опрос (polling) или websocket по готовности. Как это работает: производитель публикует сообщение (обычно в JSON) в именованную очередь или топик; один или несколько рабочих-потребителей забирают сообщения и обрабатывают их, как правило подтверждая успешную обработку, чтобы сообщение было удалено (либо, при сбое, сообщение снова становится видимым для повтора, либо после N неудачных попыток перемещается в очередь недоставленных сообщений (dead-letter queue), чтобы одно «ядовитое» сообщение не блокировало весь конвейер навсегда). Популярные реализации варьируются от очередей задач на базе Redis (BullMQ для Node, Laravel Horizon/Redis-очереди для PHP, Sidekiq для Ruby) для более простых нагрузок до выделенных брокеров вроде RabbitMQ и распределённых систем на основе логов вроде Kafka или AWS SQS/SNS для сценариев с высокой пропускной способностью или множеством потребителей. Практический пример: пользователь загружает 45-минутный эпизод подкаста в AI-сервис транскрибации. Эндпоинт загрузки сохраняет файл, публикует сообщение `{job: "transcribe", file_id: "f_9921", user_id: "u_44"}` в очередь `transcription-jobs` и немедленно возвращает браузеру `202 Accepted`. Пул рабочих процессов, масштабируемый независимо от веб-серверов, забирает задания из очереди, вызывает API распознавания речи, записывает транскрипт в базу данных и отправляет вебхук обратно во фронтенд для обновления интерфейса в реальном времени — то есть веб-сервер, обработавший загрузку, ни на секунду не блокировался на те 3 минуты, что заняла сама транскрибация.
Похожие термины