Документация
Техническая архитектура DoXML
Данный документ описывает техническую архитектуру программного комплекса DoXML.
Общая архитектура
DoXML построен как набор взаимодействующих сервисов:
┌─────────────────────────────────────────────────────────────┐
│ Клиент (браузер) │
└─────────────────────────────┬───────────────────────────────┘
│ HTTPS
┌─────────────────────────────▼───────────────────────────────┐
│ Traefik (обратный прокси-сервер) │
│ SSL/TLS, маршрутизация, ограничение частоты │
└──────────────┬──────────────────────────────┬───────────────┘
│ │
┌──────────▼──────────┐ ┌──────────▼──────────┐
│ Клиентское │ │ Панель управления │
│ приложение │ │ организации │
│ React/Vite │ │ React/Vite │
└──────────┬──────────┘ └──────────┬──────────┘
│ │
└──────────────┬───────────────┘
│ /api/v1
┌─────────────────────────────▼───────────────────────────────┐
│ Сервер приложений (Spring Boot 4) │
│ REST API, бизнес-логика, валидация, XML-генерация, OCR │
└──────────────┬──────────────────────────────┬───────────────┘
│ │
┌──────────▼──────────┐ ┌──────────▼──────────┐
│ Сервис │ │ Сервис │
│ лицензирования │ │ распознавания │
│ (Spring Boot 4) │ │ текста │
└──────────┬──────────┘ └─────────────────────┘
│
┌──────────────┼──────────────────────────────────────────────┐
│ Инфраструктурные сервисы │
│ PostgreSQL │ Redis │ Apache Ozone │ Панель управления Traefik│
└───────────────────────────────────────────────────────────────┘
Компоненты системы
1. Клиентское приложение
Технологии: React 18, Vite 5, TypeScript, TanStack Form, TanStack Query, Zustand, Tailwind CSS, Radix UI, Gravity UI.
Назначение:
- Рабочее место пользователя.
- Список проектов и документов.
- Редактор форм документов на базе @doxml/document-form-view.
- Экспорт, валидация, shared folders, профиль.
2. Панель управления организации
Технологии: React 18, Vite 5, TypeScript.
Назначение:
- Панель администратора организации.
- Управление пользователями, проектами, документами.
- Настройки организации, лицензии, типы документов, новости.
- Статистика.
3. Сервер приложений
Технологии: Java 25, Spring Boot 4, Maven, PostgreSQL, Redis, JPA/Hibernate.
Назначение:
- Обработка бизнес-логики.
- REST API с префиксом
/api/v1. - Аутентификация и авторизация (JWT, CSRF).
- Управление проектами, документами, пользователями.
- Валидация XML по XSD, генерация XML/PDF/DOCX/HTML.
- Интеграция с OCR, справочниками, платёжными системами.
4. License Service
Технологии: Java 25, Spring Boot 4 (тот же артефакт в режиме license).
Назначение:
- Проверка подписи лицензионных ключей.
- Управление лицензионными правами.
- Лицензионный lock/unlock продукта.
5. PostgreSQL
Назначение:
- Основная реляционная база данных.
- Пользователи, организации, аккаунты, проекты, документы.
- Хранение formData документов в JSONB.
- Хранение метаданных файлов и папок.
6. Redis
Назначение:
- Кэширование часто запрашиваемых данных.
- Хранение сессий/refresh-токенов.
- Rate limiting (Bucket4j).
- Очереди и временные данные.
7. Apache Ozone
Назначение:
- S3-совместимое объектное хранилище.
- Хранение файлов документов, изображений, приложений.
- Интеграция с сервером приложений через API протокола S3.
8. OCR Service
Назначение:
- Распознавание текста в загруженных документах.
- Поддержка русского и английского языков.
- Асинхронная обработка через HTTP API.
9. Traefik
Назначение:
- Обратный прокси-сервер и балансировка.
- SSL-терминация (Let's Encrypt).
- Маршрутизация запросов на сервисы по Host/Path.
Схема взаимодействия
Клиент
│ HTTPS
▼
Traefik
│
├─→ Клиентское приложение / панель управления организации (React)
│ │
│ ▼ /api/v1
├─→ Сервер приложений (Spring Boot)
│ │
│ ├─→ PostgreSQL
│ ├─→ Redis
│ ├─→ Apache Ozone
│ └─→ Сервис распознавания текста
│
└─→ Сервис лицензирования (Spring Boot) → PostgreSQL
Слои приложения
Уровень представления
- Клиентское приложение — рабочее место пользователя.
- Панель управления организации — администрирование организации.
Уровень приложения
- REST Controllers.
- Security (JWT, CSRF, rate limiting).
- Сервисы бизнес-логики.
- DocumentFormView runtime (shared package).
Уровень данных
- PostgreSQL — структурированные данные + JSONB.
- Redis — кэш, сессии, rate limiting.
- Ozone — файлы и объекты.
Архитектурные паттерны
1. Микросервисная архитектура
- Backend, License Service, OCR Service — отдельные контейнеры.
- Клиентское приложение и панель управления организации — отдельные сборки.
- Каждый сервис масштабируется независимо.
2. API-First
- Backend предоставляет RESTful API.
- Frontend взаимодействует только через API.
- Контракты API в camelCase.
3. Разделение ответственности
- Frontend — отображение и взаимодействие.
- Backend — бизнес-логика и persist.
- License Service — лицензирование.
4. Контейнеризация
- Все компоненты упакованы в Docker.
- Оркестрация через Docker Compose.
- Изоляция зависимостей и единообразное развёртывание.
Безопасность
- HTTPS/TLS на всех внешних соединениях.
- JWT-аутентификация с refresh-токенами.
- CSRF-защита для изменяющих запросов.
- Rate limiting по IP и endpoint.
- Изоляция сети Docker.
- Проверка лицензий.
- Хранение паролей в хешированном виде.
Масштабирование
Вертикальное
Увеличение ресурсов сервера: CPU, RAM, диск.
Горизонтальное
- Несколько экземпляров сервера приложений за балансировщиком.
- Репликация PostgreSQL (read replicas).
- Redis Cluster.
- Распределённое хранилище Ozone.
Мониторинг и логирование
- Spring Boot Actuator: health, metrics, Prometheus.
- Docker logs.
- Метрики PostgreSQL и Redis.
- Алерты по CPU, RAM, диску, ошибкам.
Резервное копирование
- Дампы PostgreSQL.
- Резервная копия объектного хранилища Ozone.
- Каталог
license/с ключами.
Заключение
Архитектура DoXML основана на современных принципах: микросервисы, контейнеризация, API-First, безопасность на всех уровнях. Это обеспечивает масштабируемость, независимое обновление компонентов и высокую доступность.
Версия документа: 2.0
Дата обновления: 2026