Запуск OSMI-AI с использованием очереди (Queue)
По умолчанию, OSMI-AI работает в основном потоке NodeJS. Однако при большом количестве предсказаний это плохо масштабируется. Поэтому есть два режима, которые можно настроить: основной (default) и queue.
Режим очереди
При помощи следующих переменных окружения вы можете запустить osmi-ai в режиме очереди.
| Переменная | Описание | Тип | По умолчанию |
|---|---|---|---|
| MODE | Режим работы osmi-ai | Enum String: main, queue | main |
| WORKER_CONCURRENCY | Количество задач, обрабатываемых параллельно одним воркером | Число | 10000 |
| QUEUE_NAME | Название очереди сообщений | Строка | osmi-ai-queue |
| QUEUE_REDIS_EVENT_STREAM_MAX_LEN | Максимальная длина потоковых событий (автоматическое отстригание) | Число | 10000 |
| REDIS_URL | URL Redis | Строка | |
| REDIS_HOST | Хост Redis | Строка | localhost |
| REDIS_PORT | Порт Redis | Число | 6379 |
| REDIS_USERNAME | Имя пользователя Redis (опционально) | Строка | |
| REDIS_PASSWORD | Пароль Redis (опционально) | Строка | |
| REDIS_TLS | Подключение к Redis через TLS (опционально) | Логическое (Boolean) | false |
| REDIS_CERT | Самоподписанный сертификат Redis | Строка | |
| REDIS_KEY | Файл ключа самоподписанного сертификата Redis | Строка | |
| REDIS_CA | Файл CA для самоподписанного сертификата Redis | Строка |
В режиме queue основной сервер отвечает за обработку запросов и отправляет задачи в очередь сообщений. Сам сервер не выполняет задачи. Один или несколько воркеров получают задания из очереди, выполняют их и отправляют результаты обратно.
Это позволяет динамически масштабировать систему: можно добавлять воркеры для обработки увеличенной нагрузки или убирать их в менее загруженные периоды.
Как это работает:
- Основной сервер получает запросы на предсказания или другие задачи от веб-интерфейса и добавляет их в очередь.
- Эти очереди задач представляют собой списки задач, ожидающих обработки. Воркеры — это отдельные процессы или потоки, которые берут задачи из очереди и выполняют их.
- После выполнения задача:
- Воркеры записывают результаты в базу данных.
- Отправляют событие о завершении задачи.
- Основной сервер получает событие и отправляет результат обратно в интерфейс.
- Также для потоковой передачи данных назад в интерфейс используется pub/sub Redis.
Диаграмма потока
1. Точка входа запроса
Запрос на предсказание поступает на сервер Express и сразу проверяет, установлено ли значение MODE=QUEUE. Если да, то происходит переключение с прямого выполнения на асинхронную обработку через очередь.
2. Создание задания и двойные каналы
Система создаёт два параллельных пути:
- Канал задач: данные запроса превращаются в задачу Redis через BullMQ, HTTP-поток ожидает завершения
- Канал потока: устанавливается соединение SSE для получения обновлений в реальном времени через Redis pub/sub
3. Обработка воркером
Независимые процессы воркеров опрашивают Redis на наличие задач. Когда задачу получают:
- Восстанавливают полный контекст выполнения (база данных, компоненты, контроллеры отмены)
- Выполняют рабочий процесс по узлам (Node-by-node)
- Публикуют события в реальном времени (токены, инструменты, прогресс) в Redis-каналы
4. Общение в реальном времени
Во время выполнения:
- транслирует события от воркеров в Redis
- перенаправляет события из Redis в SSE-клиенты
- обеспечивает доставку событий в браузер в режиме реального времени
5. Завершение и ответ
Когда задача завершена, результат сохраняется в Redis:
- HTTP-поток разблокируется и получает результат
- Соединение SSE закрывается корректно
- Освобождаются ресурсы (контроллеры отмены, соединения)
Локальная настройка
Запуск Redis
Перед запуском основного сервера и воркеров Redis должен быть запущен. Можно запустить Redis на отдельной машине, убедившись, что он доступен для сервера и воркеров.
Например, можно запустить Redis через Docker, следуя данному руководству. Запуск основного сервера Это тот же процесс, что и при обычном запуске osmi-ai, за исключением настройки переменных окружения, описанных выше.
Команда:
pnpm start
Запуск воркера
Аналогично основному серверу, необходимо правильно настроить переменные окружения. Обычно используют один и тот же .env файл для обеих инстанций. Чтобы запустить воркера, откройте другой терминал и выполните:
pnpm run start-worker
Основной сервер и воркер должны использовать одинаковый секретный ключ. См. раздел " Для продакшна рекомендуется использовать Postgres в качестве базы данных для повышения производительности.
Docker-настройка
Метод 1: Использование готовых образов (рекомендуется)
Этот метод использует предварительно собранные Docker-образы из Docker Hub, что обеспечивает быстрое и надежное развертывание.
Шаг 1: Настройка окружения
Создайте файл .env в папке docker со следующим содержимым:
# Основные параметры
PORT=3000
WORKER_PORT=5566
# Конфигурация очереди (обязательно)
MODE=queue
QUEUE_NAME=osmi-ai-queue
REDIS_URL=redis://redis:6379
# Опциональные настройки очереди
WORKER_CONCURRENCY=5
REMOVE_ON_AGE=24
REMOVE_ON_COUNT=1000
QUEUE_REDIS_EVENT_STREAM_MAX_LEN=1000
ENABLE_BULLMQ_DASHBOARD=false
# Базы данных (опционально, по умолчанию SQLite)
DATABASE_PATH=/root/.osmi-ai
# Хранение данных
BLOB_STORAGE_PATH=/root/.osmi-ai/storage
# Секретные ключи
SECRETKEY_PATH=/root/.osmi-ai
# Логирование
LOG_PATH=/root/.osmi-ai/logs
Шаг 2: Деплой
cd docker
docker compose -f docker-compose-queue-prebuilt.yml up -d
Шаг 3: Проверка развертывания
# Проверить статус контейнеров:
docker compose -f docker-compose-queue-prebuilt.yml ps
# Посмотреть логи:
docker compose -f docker-compose-queue-prebuilt.yml logs -f osmi-ai
docker compose -f docker-compose-queue-prebuilt.yml logs -f osmi-ai-worker
Метод 2: Сборка из исходных кодов
Этот метод подходит для разработки или кастомных модификаций.
Шаг 1: Настройка окружения
Создайте такой же файл .env, как в Методе 1.
Шаг 2: Развертывание
cd docker
docker compose -f docker-compose-queue-source.yml up -d
Шаг 3: Процесс сборки
Этот процесс включает:
- сборку основного приложения
- сборку образа воркера
- настройку Redis и сети
Шаг 4: Мониторинг сборки
docker compose -f docker-compose-queue-source.yml logs -f
docker compose -f docker-compose-queue-source.yml ps
Проверка работоспособности
# Основной сервер:
curl http://localhost:3000/api/v1/ping
# Воркер
curl http://localhost:5566/healthz
Панель управления очередями
Если установить ENABLE_BULLMQ_DASHBOARD=true, откроется доступ к просмотру всех заданий, их статусов, результатов и данных по адресу: <ваш-osmi-ai-домен>/admin/queues.

