Перейти к содержанию

Общая архитектура

Состав системы

Система «СВЯЗКА» состоит из нескольких компонентов, каждый из которых работает в отдельном контейнере 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 извне нет.