2.1 Требования
Обновлено: 07 Декабрь 2025
Версия: 2.2
Данный документ описывает минимальные и рекомендуемые системные требования для развертывания системы АСК ЛЕГАРУС в зависимости от количества пользователей и использования функций нейросетей.
Технологический стек
Система построена на следующих технологиях:
- Backend: Django 5.2.7 (Python 3.x)
- База данных: PostgreSQL 14+ с расширением pgvector
- Кэш и очереди: Redis 5.0+
- Веб-сервер: Nginx (обратный прокси)
- WSGI сервер: Gunicorn (формула workers: min((2*cpu)+1, 8))
- ASGI сервер: Daphne (для WebSocket через Django Channels)
- Фоновые задачи: Celery с Redis в качестве брокера
- OCR: Tesseract, pdf2image
- Нейросети: sentence-transformers (all-MiniLM-L6-v2), PyTorch (CPU-only), scikit-learn
Сценарии использования
Сценарий 1: 10 пользователей (минимальные требования)
- Базовое использование системы
- Обработка заявок и документов
- Без активного использования нейросетей (классификация может быть отключена)
Сценарий 2: 100 пользователей без нейросетей
- Полноценное использование всех функций
- Обработка файлов и документов
- Классификация заявок отключена или используется редко
Сценарий 3: 100 пользователей с нейросетями
- Полноценное использование всех функций
- Активное использование классификации заявок через ML
- Генерация эмбеддингов для векторного поиска
- Еженедельное переобучение моделей
1. Процессор (CPU)
1.1. Минимальные требования (10 пользователей)
Рекомендации:
- Ядра: 2 ядра (4 потока)
- Архитектура: x86_64 (AMD64)
- Частота: 2.0 GHz и выше
- Примеры: Intel Core i3 8-го поколения, AMD Ryzen 3, или эквивалент
Обоснование:
- Gunicorn: 2-5 workers (min((2*2)+1, 8) = 5)
- Daphne: 1 процесс
- Celery: 1 worker
- PostgreSQL: базовые операции
- Redis: легкая нагрузка
1.2. Рекомендуемые требования (100 пользователей без нейросетей)
Рекомендации:
- Ядра: 4 ядра (8 потоков)
- Архитектура: x86_64 (AMD64)
- Частота: 2.5 GHz и выше
- Примеры: Intel Core i5 10-го поколения, AMD Ryzen 5, или эквивалент
Обоснование:
- Gunicorn: 8 workers (min((2*4)+1, 8) = 8)
- Daphne: 1-2 процесса
- Celery: 2-3 workers (для обработки файлов)
- PostgreSQL: средняя нагрузка с индексами
- Redis: средняя нагрузка (кэш, очереди, Channels)
Дополнительные требования:
- Поддержка инструкций SSE4.2 (для оптимизации PostgreSQL)
- Поддержка AVX (для NumPy/SciPy при обработке файлов)
1.3. Рекомендуемые требования (100 пользователей с нейросетями)
Рекомендации:
- Ядра: 8 ядер (16 потоков) или больше
- Архитектура: x86_64 (AMD64)
- Частота: 3.0 GHz и выше
- Примеры: Intel Core i7/i9, AMD Ryzen 7/9, Xeon, EPYC, или эквивалент
Обоснование:
- Gunicorn: 8 workers (ограничение в коде)
- Daphne: 2 процесса
- Celery: 3-4 workers (включая задачи ML)
- PostgreSQL: высокая нагрузка (векторный поиск через pgvector)
- Redis: высокая нагрузка
- ML задачи: генерация эмбеддингов (\~100ms на CPU), классификация, обучение моделей
Дополнительные требования:
- Поддержка AVX2 (для PyTorch и NumPy)
- Поддержка FMA (Fused Multiply-Add) для ускорения вычислений
- Рекомендуется: поддержка AVX-512 (для максимальной производительности PyTorch)
Примечание: Для обучения моделей на больших данных (>10,000 примеров) рекомендуется использовать отдельный сервер с более мощным CPU или временно увеличивать количество Celery workers.
2. Оперативная память (RAM)
2.1. Минимальные требования (10 пользователей)
Рекомендации:
- Общий объем: 4 ГБ RAM
- Распределение:
- Операционная система: \~500 МБ
- PostgreSQL: 1 ГБ (shared_buffers = 256 МБ)
- Redis: 256 МБ
- Gunicorn (5 workers): \~1 ГБ (200 МБ на worker)
- Daphne: 100 МБ
- Celery (1 worker): 200 МБ
- Nginx: 50 МБ
- Резерв: \~900 МБ
Обоснование:
- Небольшое количество одновременных запросов
- Минимальная обработка файлов
- Без активного использования ML
2.2. Рекомендуемые требования (100 пользователей без нейросетей)
Рекомендации:
- Общий объем: 16 ГБ RAM
- Распределение:
- Операционная система: \~1 ГБ
- PostgreSQL: 4 ГБ (shared_buffers = 1 ГБ, work_mem = 64 МБ)
- Redis: 1 ГБ (для кэша и очередей)
- Gunicorn (8 workers): \~3 ГБ (375 МБ на worker)
- Daphne (2 процесса): 400 МБ
- Celery (2-3 workers): 1 ГБ
- Nginx: 100 МБ
- Обработка файлов (OCR, временные файлы): 2 ГБ
- Резерв: \~3.5 ГБ
Обоснование:
- Средняя нагрузка с пиковыми значениями
- Обработка файлов до 50 МБ (KB) и 1 ГБ (общий)
- OCR обработка изображений и PDF
- Кэширование результатов поиска
Оптимизация:
- Настройка
shared_buffersв PostgreSQL: 25% от RAM (4 ГБ) - Настройка
effective_cache_size: 75% от RAM (12 ГБ) - Настройка Redis
maxmemory: 1 ГБ с политикойallkeys-lru
2.3. Рекомендуемые требования (100 пользователей с нейросетями)
Рекомендации:
- Общий объем: 32 ГБ RAM (рекомендуется 64 ГБ для комфортной работы)
- Распределение (для 32 ГБ):
- Операционная система: \~1 ГБ
- PostgreSQL: 8 ГБ (shared_buffers = 2 ГБ, work_mem = 128 МБ)
- Redis: 2 ГБ
- Gunicorn (8 workers): \~4 ГБ
- Daphne (2 процесса): 500 МБ
- Celery (3-4 workers): 4 ГБ (включая ML модели)
- Nginx: 100 МБ
- ML модели в памяти: 2-4 ГБ
- sentence-transformers (all-MiniLM-L6-v2): \~200 МБ
- SGDClassifier модели: \~500 МБ (типично)
- Эмбеддинги в памяти (кэш): 1-2 ГБ
- Обработка файлов: 3 ГБ
- Резерв: \~7 ГБ
Обоснование:
- Высокая нагрузка с одновременными запросами
- ML модели загружаются в память для быстрого доступа
- Генерация эмбеддингов требует дополнительной памяти
- Векторный поиск через pgvector (индексы HNSW в памяти)
- Обучение моделей требует дополнительной памяти (временные данные)
Оптимизация:
- Настройка
shared_buffersв PostgreSQL: 25% от RAM (8 ГБ для 32 ГБ системы) - Настройка
effective_cache_size: 75% от RAM (24 ГБ) - Настройка Redis
maxmemory: 2 ГБ - Использование
--preloadдля Celery workers (загрузка моделей один раз)
Примечание: Для обучения моделей на очень больших данных (>50,000 примеров) рекомендуется временно увеличивать RAM до 64 ГБ или использовать отдельный сервер для обучения.
3. Хранилище (Диск)
3.1. Типы накопителей и их характеристики
HDD (Жесткий диск)
- IOPS (чтение): 100-200 IOPS
- IOPS (запись): 100-200 IOPS
- Пропускная способность: 100-200 МБ/с
- Задержка: 5-15 мс
- Применение: Не рекомендуется для продакшена
SATA SSD
- IOPS (чтение): 50,000-100,000 IOPS
- IOPS (запись): 30,000-80,000 IOPS
- Пропускная способность: 500-550 МБ/с (чтение), 500 МБ/с (запись)
- Задержка: 0.1-0.5 мс
- Применение: Минимальные требования, базовые сценарии
NVMe SSD
- IOPS (чтение): 100,000-1,000,000+ IOPS
- IOPS (запись): 80,000-800,000+ IOPS
- Пропускная способность: 2,000-7,000 МБ/с (чтение), 1,500-5,000 МБ/с (запись)
- Задержка: 0.05-0.1 мс
- Применение: Рекомендуется для всех сценариев, особенно с нейросетями
3.2. Минимальные требования (10 пользователей)
Рекомендации:
- Тип: SATA SSD
- Объем: 50 ГБ (минимум), 100 ГБ (рекомендуется)
- IOPS (чтение): 5,000+ IOPS
- IOPS (запись): 3,000+ IOPS
- Пропускная способность: 200+ МБ/с
Распределение:
- Операционная система: 20 ГБ
- PostgreSQL (данные + WAL): 10 ГБ
- Redis (персистентность): 1 ГБ
- Медиа файлы (media/): 10 ГБ
- Статические файлы (assets/): 2 ГБ
- Логи: 2 ГБ
- Резерв: 5 ГБ
Обоснование:
- Небольшой объем данных
- Минимальная нагрузка на диск
- Базовая производительность достаточна
3.3. Рекомендуемые требования (100 пользователей без нейросетей)
Рекомендации:
- Тип: NVMe SSD (рекомендуется) или SATA SSD (минимум)
- Объем: 200 ГБ (минимум), 500 ГБ (рекомендуется)
- IOPS (чтение): 20,000+ IOPS (SATA SSD) или 100,000+ IOPS (NVMe)
- IOPS (запись): 15,000+ IOPS (SATA SSD) или 80,000+ IOPS (NVMe)
- Пропускная способность: 400+ МБ/с (SATA SSD) или 2,000+ МБ/с (NVMe)
Распределение (для 500 ГБ):
- Операционная система: 30 ГБ
- PostgreSQL (данные + WAL + индексы): 100 ГБ
- Данные: 60 ГБ
- WAL: 10 ГБ
- Индексы (GIN, HNSW): 30 ГБ
- Redis (персистентность): 5 ГБ
- Медиа файлы (media/): 200 ГБ
- Статические файлы (assets/): 10 ГБ
- Логи: 20 ГБ
- Временные файлы (обработка OCR): 50 ГБ
- Резерв: 75 ГБ
Обоснование:
- Средний объем данных (документы, файлы)
- Обработка файлов требует высокой скорости чтения/записи
- Индексы PostgreSQL (GIN для полнотекстового поиска, триграммы)
- Кэширование результатов
Оптимизация:
- Разделение данных PostgreSQL и WAL на разные диски (если возможно)
- Настройка
random_page_costв PostgreSQL: 1.1 для SSD (вместо 4.0 для HDD) - Настройка
effective_io_concurrency: 200 для SSD
3.4. Рекомендуемые требования (100 пользователей с нейросетями)
Рекомендации:
- Тип: NVMe SSD (обязательно)
- Объем: 500 ГБ (минимум), 1 ТБ (рекомендуется)
- IOPS (чтение): 100,000+ IOPS
- IOPS (запись): 80,000+ IOPS
- Пропускная способность: 2,000+ МБ/с
Распределение (для 1 ТБ):
- Операционная система: 30 ГБ
- PostgreSQL (данные + WAL + индексы + векторные данные): 300 ГБ
- Данные: 150 ГБ
- WAL: 20 ГБ
- Индексы (GIN, HNSW): 100 ГБ
- Векторные эмбеддинги (384 измерения): 30 ГБ
- Redis (персистентность): 10 ГБ
- Медиа файлы (media/): 400 ГБ
- Статические файлы (assets/): 10 ГБ
- Логи: 30 ГБ
- Временные файлы (обработка OCR, ML): 100 ГБ
- Модели ML (на диске, резервные копии): 20 ГБ
- Резерв: 100 ГБ
Обоснование:
- Большой объем данных (документы, файлы, эмбеддинги)
- Векторные индексы HNSW требуют высокой скорости чтения
- Обучение моделей создает временные файлы
- Высокая нагрузка на диск при генерации эмбеддингов
Оптимизация:
- Разделение данных PostgreSQL и WAL на разные NVMe диски
- Настройка
random_page_cost: 1.1 - Настройка
effective_io_concurrency: 200 - Использование
pgvectorс индексами HNSW (оптимизированы для SSD) - Регулярная очистка временных файлов
Примечание: Для очень больших объемов данных (>1 ТБ) рекомендуется использовать RAID 10 (NVMe) или распределенное хранилище.
4. Сетевая инфраструктура
4.1. Минимальные требования (10 пользователей)
Рекомендации:
- Пропускная способность: 100 Мбит/с (внутренняя сеть)
- Задержка: \< 10 мс (внутренняя сеть)
- Протокол: TCP/IP
Обоснование:
- Небольшое количество одновременных подключений
- Базовые операции (HTTP запросы, загрузка файлов)
4.2. Рекомендуемые требования (100 пользователей)
Рекомендации:
- Пропускная способность: 1 Гбит/с (внутренняя сеть)
- Задержка: \< 5 мс (внутренняя сеть)
- Протокол: TCP/IP
- WebSocket: Поддержка WebSocket для Django Channels
Обоснование:
- Множественные одновременные подключения
- Загрузка файлов до 1 ГБ
- WebSocket соединения для уведомлений в реальном времени
- Синхронизация через Redis Channels
Дополнительные требования:
- Настройка Nginx для поддержки WebSocket (upgrade заголовки)
- Настройка таймаутов для больших файлов (120+ секунд)
5. Требования к хостингу
5.1. Облачный хостинг (VPS/Cloud)
Минимальные требования (10 пользователей)
- Провайдер: Любой (TimeWeb, AWS, Hetzner, Yandex Cloud, и т.д.)
- Конфигурация: 2 vCPU, 4 ГБ RAM, 50 ГБ SSD
- Стоимость: \~1000 руб./месяц
Рекомендуемые требования (100 пользователей без нейросетей)
- Провайдер: Рекомендуется с хорошей производительностью дисков
- Конфигурация: 4 vCPU, 16 ГБ RAM, 200 ГБ NVMe SSD
- Стоимость: \~5 000-10 000 руб. /месяц
Рекомендуемые требования (100 пользователей с нейросетями)
- Провайдер: С высокой производительностью CPU и дисков
- Конфигурация: 8 vCPU, 32 ГБ RAM, 500 ГБ NVMe SSD
- Стоимость: \~20 000+ руб./месяц
Рекомендации по провайдерам:
- Hetzner: Хорошее соотношение цена/качество, NVMe SSD
- DigitalOcean: Стабильность, хорошая документация
- AWS EC2: Масштабируемость, множество опций
- Yandex Cloud: Для российских пользователей, хорошая локализация
5.2. Выделенный сервер (Dedicated)
Минимальные требования (10 пользователей)
- Конфигурация: 2 ядра, 4 ГБ RAM, 100 ГБ SATA SSD
- Стоимость: \~3 000-5 000 руб. /месяц
Рекомендуемые требования (100 пользователей без нейросетей)
- Конфигурация: 4 ядра, 16 ГБ RAM, 500 ГБ NVMe SSD
- Стоимость: \~8 000-15 000 руб./месяц
Рекомендуемые требования (100 пользователей с нейросетями)
- Конфигурация: 8 ядер, 32 ГБ RAM, 1 ТБ NVMe SSD
- Стоимость: \~25 000-40 000 руб./месяц
Рекомендации:
- Выделенный сервер обеспечивает предсказуемую производительность
- Нет проблем с "шумными соседями" (noisy neighbors)
- Полный контроль над ресурсами
5.3. Локальный сервер
Минимальные требования (10 пользователей)
- Физический сервер: Мини-ПК или сервер начального уровня
- Конфигурация: 2 ядра, 4 ГБ RAM, 100 ГБ SSD
- Сетевое подключение: 100 Мбит/с
Рекомендуемые требования (100 пользователей без нейросетей)
- Физический сервер: Сервер среднего уровня (1U или 2U)
- Конфигурация: 4 ядра, 16 ГБ RAM, 500 ГБ NVMe SSD
- Сетевое подключение: 1 Гбит/с
- Охлаждение: Адекватное охлаждение для стабильной работы
- Резервное питание: UPS рекомендуется
Рекомендуемые требования (100 пользователей с нейросетями)
- Физический сервер: Сервер высокого уровня (2U или выше)
- Конфигурация: 8 ядер, 32 ГБ RAM (рекомендуется 64 ГБ), 1 ТБ NVMe SSD
- Сетевое подключение: 1 Гбит/с (рекомендуется 10 Гбит/с)
- Охлаждение: Профессиональное охлаждение (серверные стойки)
- Резервное питание: UPS обязательно
- Мониторинг: Датчики температуры, мониторинг оборудования
Рекомендации:
- Использование серверного оборудования (Dell, HP, Supermicro)
- ECC память для предотвращения ошибок
- RAID 1 или RAID 10 для надежности (если несколько дисков)
- Регулярное резервное копирование
6. Операционная система
6.1. Рекомендуемая ОС
Ubuntu 22.04 LTS (рекомендуется)
- Долгосрочная поддержка до 2027 года
- Хорошая поддержка всех необходимых пакетов
- Стабильность и безопасность
- Подробная документация
Альтернативы:
- Ubuntu 20.04 LTS (поддержка до 2025 года)
- РЭД ОС 8+
6.2. Требования к системе
- Архитектура: x86_64 (AMD64)
- Минимальная версия ядра: Linux 5.15+
- Поддержка systemd: Обязательно (для управления сервисами)
- Поддержка Docker: Опционально (для контейнеризации)
7. Программное обеспечение
7.1. Обязательные компоненты
- Python: 3.10+ (рекомендуется 3.11 или 3.12)
- PostgreSQL: 14+ (рекомендуется 16 или 18)
- Redis: 5.0+ (рекомендуется 7.0+)
- Nginx: 1.18+ (рекомендуется последняя стабильная версия)
- Gunicorn: 21.2.0+ (устанавливается через pip)
- Daphne: 4.2.0+ (устанавливается через pip)
- Celery: 5.3.4+ (устанавливается через pip)
7.2. Дополнительные компоненты
- Tesseract OCR: Для обработки изображений
- Poppler: Для работы с PDF (pdf2image)
- antiword: Для обработки старых .doc файлов
- unrtf: Для обработки RTF файлов
8. Резюме по сценариям
Сценарий 1: 10 пользователей (минимальные требования)
| Компонент | Требование |
|---|---|
| CPU | 2 ядра, 2.0 GHz+ |
| RAM | 4 ГБ |
| Диск | 50-100 ГБ SATA SSD, 5,000+ IOPS |
| Сеть | 100 Мбит/с |
| Хостинг | VPS |
Сценарий 2: 100 пользователей без нейросетей
| Компонент | Требование |
|---|---|
| CPU | 4 ядра, 2.5 GHz+ |
| RAM | 16 ГБ |
| Диск | 200-500 ГБ NVMe SSD, 20,000+ IOPS |
| Сеть | 1 Гбит/с |
| Хостинг | VPS |
Сценарий 3: 100 пользователей с нейросетями
| Компонент | Требование |
|---|---|
| CPU | 8 ядер, 3.0 GHz+, AVX2 |
| RAM | 32 ГБ (рекомендуется 64 ГБ) |
| Диск | 500 ГБ-1 ТБ NVMe SSD, 100,000+ IOPS |
| Сеть | 1 Гбит/с (рекомендуется 10 Гбит/с) |
| Хостинг | VDS |
9. Дополнительные рекомендации
9.1. Масштабирование
При превышении нагрузки рекомендуется:
- Горизонтальное масштабирование:
- Разделение на несколько серверов (приложение, БД, Redis)
- Использование балансировщика нагрузки
- Репликация PostgreSQL
- Вертикальное масштабирование:
- Увеличение CPU, RAM, диска на текущем сервере
- Оптимизация конфигурации PostgreSQL и Redis
9.2. Мониторинг
Рекомендуется настроить мониторинг:
- Использование CPU, RAM, диска
- Производительность PostgreSQL (медленные запросы)
- Производительность Redis
- Логи приложения (Django, Celery)
- Доступность сервисов
9.3. Резервное копирование
Обязательно настроить:
- Ежедневное резервное копирование PostgreSQL
- Резервное копирование медиа файлов
- Хранение резервных копий на отдельном сервере/хранилище
9.4. Безопасность
- Регулярное обновление системы и пакетов
- Настройка файрвола (UFW)
- Использование SSL/TLS для HTTPS
- Ограничение доступа к административным интерфейсам
- Регулярный аудит безопасности
10. Примечания
- Все требования указаны для одного сервера (монолитное развертывание)
- При разделении на несколько серверов требования могут отличаться
- Требования основаны на типичной нагрузке и могут варьироваться в зависимости от использования
- Рекомендуется проводить нагрузочное тестирование перед развертыванием в продакшене
- Для критически важных систем рекомендуется закладывать запас ресурсов 20-30%