Архитектура
Обзор
«Взрыв4D» реализован по современным стандартам микросервисной архитектуры. Все компоненты разрабатываются и исполняются в отдельных Docker-контейнерах, что обеспечивает:
- Изолированность сервисов
- Масштабируемость
- Повторяемость развёртывания
- Независимость от операционной системы
Схема компонентов
┌──────────────────────────────────────────────────────┐
│ Внешний доступ к системе │
│ 3000 (Frontend), 8001 (API Gateway) │
│ MinIO: 9000 / 9001, Adminer: 8080 (опционально) │
└───────────────────────┬──────────────────────────────┘
│
┌────────▼────────┐
│ Docker network │
│ xblast4d-network│
└────────┬────────┘
│
┌─────────────────┼───────────────────────────────────────┐
│ │ │ │
┌─────▼─────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Frontend │ │ API Gateway │ │ MinIO │ │ User Info │
│ 3000 │ │ 8001 │ │ 9000/9001 │ │ 8207 │
└───────────┘ └──────┬──────┘ └─────────────┘ └─────────────┘
│
┌─────────────────┼─────────────────────────────────────────────────────────────────────┐
│ │ │ │ │ │ │
┌─────▼─────┐ ┌───────▼──────┐ ┌──────▼─────┐ ┌──────▼─────┐ ┌─────▼─────┐ ┌────▼────┐ ┌──▼────────┐
│Import │ │Blast Blocks │ │Core Import │ │Block Model │ │Materials │ │Wells │ │Project │
│Storage │ │8202 │ │8203 │ │8204 │ │8209 │ │8205 │ │Manager │
│8201 │ └──────────────┘ └────────────┘ └────────────┘ └───────────┘ └─────────┘ │8206 │
└───────────┘ └────┬──────┘
│
┌───────▼──────┐
│ Viewer Data │
│ 8212 │
└──────────────┘
┌───────────────────────────────┐
│ PostgreSQL, Redis, MinIO Mgr │
│ и служебные сервисы │
└───────────────────────────────┘
Компоненты системы
Frontend
- Фреймворк: Next.js 15 (React 19)
- Языки: TypeScript, JavaScript
- Визуализация: Three.js, WebAssembly (duckdb-wasm)
- Стилизация: Tailwind CSS
- Аутентификация: keycloak-js
API Gateway
- Фреймворк: FastAPI
- Протоколы: HTTP/REST, WebSockets
- Маршрутизация: Nginx (реверс-прокси)
Вычислительные сервисы (Backend)
- Язык: Python 3.10
- Фреймворк: FastAPI + uvicorn
- Асинхронный стек: asyncpg, SQLAlchemy
- Очереди задач: Celery + Redis
- Хранение файлов: MinIO
Инфраструктура
| Компонент | Назначение |
|---|---|
| PostgreSQL | Реляционная база данных |
| Redis | Кэширование и брокер очередей |
| MinIO | S3-совместимое объектное хранилище |
| Keycloak | Управление аутентификацией и авторизацией |
| Nginx | Реверс-прокси и балансировка |
Взаимодействие компонентов
Фронтенд (Next.js) общается с бэкендом через API Gateway по протоколам HTTP/REST и WebSockets. Внешние порты обычно публикуются только на loopback-интерфейсе, а внешний доступ организуется через системный Nginx или иной реверс-прокси.
Вычислительные задачи распределяются через Celery с Redis в качестве брокера сообщений. Результаты сохраняются в PostgreSQL, файлы — в MinIO.
Контейнеризация
Все компоненты оркестрируются через Docker Compose:
docker-compose.yml— основная конфигурацияdocker-compose.prod.yml— эксплуатационная конфигурацияdocker-compose.gpu.yml— конфигурация с GPU-ускорением
Компиляция в классическом понимании отсутствует. Запуск обеспечивается интерпретацией внутри Docker-контейнеров. Это гарантирует повторяемость, защищённость и удобство установки.