8.3 KiB
8.3 KiB
Система очереди AI запросов
Обзор
Система очереди AI запросов предназначена для управления нагрузкой на Ollama и обеспечения стабильной работы AI ассистента. Она предотвращает перегрузку модели, обеспечивает приоритизацию запросов и предоставляет мониторинг производительности.
Архитектура
Компоненты
- AIQueueService (
backend/services/ai-queue.js) - основной сервис очереди - AI Queue Routes (
backend/routes/ai-queue.js) - API маршруты для управления очередью - AIQueueMonitor (
frontend/src/components/AIQueueMonitor.vue) - компонент мониторинга - Обновленный Chat Route - поддержка очереди в чате
Технологии
- better-queue - библиотека для управления очередью
- Node.js - серверная часть
- Vue.js - клиентская часть
- Chart.js - визуализация статистики
Конфигурация очереди
Основные параметры
{
concurrent: 2, // Количество одновременных запросов
maxTimeout: 180000, // Максимальное время выполнения (3 мин)
afterProcessDelay: 1000, // Задержка между задачами (1 сек)
maxRetries: 2, // Максимальное количество повторных попыток
retryDelay: 5000 // Задержка между повторными попытками (5 сек)
}
Приоритизация
Система автоматически определяет приоритет задач:
- Администраторы: +10 к приоритету
- Срочные запросы: +20 к приоритету
- Чат: +5 к приоритету
- Анализ: +3 к приоритету
- Генерация: +1 к приоритету
- Короткие запросы (<100 символов): +2 к приоритету
- Долгое ожидание (>30 сек): +5 к приоритету
API Endpoints
Получение статистики
GET /api/ai-queue/stats
Добавление задачи в очередь
POST /api/ai-queue/task
Content-Type: application/json
{
"message": "Текст сообщения",
"language": "ru",
"history": [...],
"systemPrompt": "...",
"rules": {...},
"type": "chat"
}
Получение статуса задачи
GET /api/ai-queue/task/:taskId
Управление очередью (только для админов)
POST /api/ai-queue/control
Content-Type: application/json
{
"action": "pause|resume|clear"
}
Информация о производительности
GET /api/ai-queue/performance
Использование в чате
Обычный режим (без очереди)
POST /api/chat/message
Режим с очередью
POST /api/chat/message-queued
Мониторинг
Компонент AIQueueMonitor
Компонент предоставляет:
- Статус очереди: активна, ожидает, пуста, ошибка
- Количество задач: в очереди и выполняющихся
- Производительность: успешность, среднее время обработки
- Детальная статистика: общее количество, ошибки, время
- Управление: пауза, возобновление, очистка (для админов)
- График производительности: реальное время
Интеграция в интерфейс
<template>
<AIQueueMonitor :isAdmin="userIsAdmin" />
</template>
<script>
import AIQueueMonitor from '@/components/AIQueueMonitor.vue'
export default {
components: {
AIQueueMonitor
}
}
</script>
Ограничения и защита
Rate Limiting
- Ограничение по пользователю: 10 запросов в минуту
- Размер сообщения: максимум 10,000 символов
- Валидация: проверка обязательных полей
Фильтрация
- Проверка формата сообщения
- Валидация ID запроса
- Проверка размера сообщения
- Контроль частоты запросов
Слияние задач
- Объединение одинаковых запросов от одного пользователя
- Обновление метаданных при повторных запросах
Производительность
Оптимизации
- Кэширование: ответы кэшируются на 5 минут
- Проверка здоровья: мониторинг состояния модели
- Ограничение ресурсов: Docker контейнер с лимитами
- Таймауты: защита от зависших запросов
Мониторинг
- Время обработки запросов
- Успешность выполнения
- Размер очереди
- Количество ошибок
- Статистика по пользователям
Устранение неполадок
Частые проблемы
-
Медленные ответы
- Проверить размер очереди
- Увеличить количество concurrent задач
- Проверить ресурсы Ollama
-
Ошибки таймаута
- Увеличить maxTimeout
- Проверить состояние модели
- Очистить очередь
-
Высокая нагрузка
- Уменьшить concurrent задачи
- Включить rate limiting
- Добавить задержки между задачами
Логи
# Просмотр логов очереди
docker logs dapp-backend | grep AIQueue
# Статистика очереди
curl http://localhost:8000/api/ai-queue/stats
# Проверка здоровья
curl http://localhost:8000/api/health
Настройка для продакшена
Рекомендуемые параметры
{
concurrent: 1, // Один запрос за раз для стабильности
maxTimeout: 300000, // 5 минут таймаут
afterProcessDelay: 2000, // 2 секунды между запросами
maxRetries: 1, // Одна повторная попытка
retryDelay: 10000 // 10 секунд между попытками
}
Мониторинг
- Настройка алертов при высокой нагрузке
- Логирование всех операций
- Метрики производительности
- Автоматическое масштабирование
Безопасность
- Аутентификация для всех endpoints
- Авторизация для управления очередью
- Валидация всех входных данных
- Защита от DDoS атак
Разработка
Добавление новых типов задач
- Обновить функцию
getTaskPriority - Добавить обработку в
processTask - Обновить документацию
Расширение мониторинга
- Добавить новые метрики в
getStats - Обновить компонент
AIQueueMonitor - Добавить новые API endpoints
Интеграция с другими сервисами
- Подключение к Redis для персистентности
- Интеграция с системами мониторинга
- Подключение к лог-агрегаторам