Osmi
Конфигурация

Запуск OSMI-AI с использованием очереди (Queue)

По умолчанию, OSMI-AI работает в основном потоке NodeJS. Однако при большом количестве предсказаний это плохо масштабируется. Поэтому есть два режима, которые можно настроить: основной (default) и queue.

Режим очереди

При помощи следующих переменных окружения вы можете запустить osmi-ai в режиме очереди.

ПеременнаяОписаниеТипПо умолчанию
MODEРежим работы osmi-aiEnum String: main, queuemain
WORKER_CONCURRENCYКоличество задач, обрабатываемых параллельно одним воркеромЧисло10000
QUEUE_NAMEНазвание очереди сообщенийСтрокаosmi-ai-queue
QUEUE_REDIS_EVENT_STREAM_MAX_LENМаксимальная длина потоковых событий (автоматическое отстригание)Число10000
REDIS_URLURL 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 основной сервер отвечает за обработку запросов и отправляет задачи в очередь сообщений. Сам сервер не выполняет задачи. Один или несколько воркеров получают задания из очереди, выполняют их и отправляют результаты обратно. Это позволяет динамически масштабировать систему: можно добавлять воркеры для обработки увеличенной нагрузки или убирать их в менее загруженные периоды.

Как это работает:

  1. Основной сервер получает запросы на предсказания или другие задачи от веб-интерфейса и добавляет их в очередь.
  2. Эти очереди задач представляют собой списки задач, ожидающих обработки. Воркеры — это отдельные процессы или потоки, которые берут задачи из очереди и выполняют их.
  3. После выполнения задача:
  • Воркеры записывают результаты в базу данных.
  • Отправляют событие о завершении задачи.
  1. Основной сервер получает событие и отправляет результат обратно в интерфейс.
  2. Также для потоковой передачи данных назад в интерфейс используется 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.