Общая архитектура¶
Состав системы¶
Система «СВЯЗКА» состоит из нескольких компонентов, каждый из которых работает в отдельном контейнере Docker:
| Компонент | Назначение | Технология |
|---|---|---|
| Пользовательский интерфейс | Веб-приложение, с которым работает пользователь | React 19, Vite |
| Веб-сервер | Раздаёт интерфейс и проксирует запросы к серверной части | nginx |
| Серверная часть | Обрабатывает запросы, управляет данными, запускает обработку документов | FastAPI (Python) |
| Фоновый обработчик | Выполняет длительные задачи: поиск по реестру, сверка | Celery (Python) |
| Очередь задач | Передаёт задания от серверной части к фоновому обработчику | Redis |
| База данных | Хранит сведения о документах, реестрах, группах, настройках | MongoDB |
| Хранилище файлов | Хранит исходные PDF и изображения страниц | MinIO (S3-совместимое) |
| Внешний распознаватель | Разделяет страницы на документы, классифицирует и извлекает данные | Claude (Anthropic) |
Схема взаимодействия¶
graph TB
User["Пользователь<br/>(браузер)"]
Nginx["nginx<br/>веб-сервер"]
Frontend["Пользовательский<br/>интерфейс<br/>(React)"]
Backend["Серверная часть<br/>(FastAPI)"]
Celery["Фоновый<br/>обработчик<br/>(Celery)"]
Redis["Очередь задач<br/>(Redis)"]
MongoDB["База данных<br/>(MongoDB)"]
MinIO["Хранилище файлов<br/>(MinIO)"]
Claude["Внешний<br/>распознаватель<br/>(Claude)"]
User -->|"HTTPS"| Nginx
Nginx -->|"статические файлы"| Frontend
Nginx -->|"/api/*"| Backend
Backend -->|"чтение / запись"| MongoDB
Backend -->|"загрузка / скачивание"| MinIO
Backend -->|"запросы на распознавание"| Claude
Backend -->|"постановка задач"| Redis
Redis -->|"выдача задач"| Celery
Celery -->|"чтение / запись"| MongoDB
Celery -->|"чтение"| MinIO
Как компоненты связаны между собой¶
Пользователь и веб-сервер¶
Пользователь открывает адрес https://alfainft.monroe-tech.ru в браузере. Веб-сервер nginx принимает все входящие запросы:
- запросы к статическим файлам (HTML, CSS, JavaScript) обслуживаются напрямую из каталога собранного интерфейса;
- запросы с префиксом
/api/проксируются на серверную часть.
Серверная часть и хранилища¶
Серверная часть (FastAPI) --- центральный узел системы. Она:
- принимает запросы от пользовательского интерфейса через REST-адреса;
- читает и записывает сведения о документах, реестрах, группах и настройках в базу данных MongoDB;
- загружает исходные PDF и сохраняет изображения страниц в хранилище MinIO;
- отправляет изображения страниц внешнему распознавателю Claude для разделения, классификации и извлечения данных;
- ставит длительные задачи (например, поиск по реестру) в очередь Redis.
Фоновый обработчик¶
Фоновый обработчик Celery забирает задачи из очереди Redis и выполняет их независимо от серверной части. Это позволяет не блокировать ответы на запросы пользователя, пока идёт длительная операция.
Celery напрямую обращается к MongoDB для чтения данных реестра и записи результатов поиска.
Два режима обработки¶
Серверная часть поддерживает два режима отправки запросов к Claude:
- Немедленный (
sync) --- каждый документ отправляется на распознавание сразу. Результат приходит за несколько секунд. - Пакетный (
batch) --- документы накапливаются в партию и отправляются группой. Результат приходит позже (обычно от 15 до 30 минут), но стоимость распознавания снижается вдвое.
Режим задаётся переменной окружения PROCESSING_MODE и может быть изменён в настройках программы.
Сетевая изоляция¶
Все контейнеры объединены внутренней сетью Docker. Снаружи доступны только:
- порт nginx (через HTTPS) --- для пользователей;
- порт серверной части (
8000) --- для nginx; - порт MinIO (
9000,9001) --- только на localhost, для администрирования.
Прямого доступа к MongoDB, Redis или Celery извне нет.