Тема оформления
Архитектура системы
1. Концепция и базовые принципы построения
Архитектура программного комплекса «UrFU HeatBalance» спроектирована на основе современных шаблонов распределённых систем корпоративного уровня:
- Микросервисная декомпозиция: функциональные модули разделены по границам предметных областей (Bounded Contexts) в соответствии с методологией Domain-Driven Design (DDD).
- Изоляция хранилищ данных (Database-per-Service): каждый микросервис, требующий долговременного хранения, обладает собственной схемой или базой данных, исключающей прямые межсервисные зависимости на уровне SQL-запросов.
- Событийно-ориентированное взаимодействие (Event-Driven Architecture): интеграция между подсистемами телеметрии, расчётными модулями и хранилищем истории построена на асинхронном обмене событиями через брокер сообщений.
- Единая точка входа (API Gateway Pattern): клиентский интерфейс и внешние устройства взаимодействуют с кластером через централизованный реверс-прокси и шлюз API.
- Асинхронная отказоустойчивость: сбои отдельных расчётных сервисов не нарушают доступность ядра авторизации, каталога датасетов и приёма телеметрических пакетов.
2. Общая архитектурная схема (High-Level Architecture)
На диаграмме ниже представлена сквозная топология компонентов системы, включая клиентские интерфейсы, шлюзы, микросервисы бизнес-логики, брокер сообщений и уровень хранения:
3. Детальное описание архитектурных уровней
3.1. Клиентский уровень (Frontend Tier)
Клиентский интерфейс реализован в виде одностраничного веб-приложения (Single Page Application, SPA) на базе библиотеки React 19 с использованием компонентной библиотеки Ant Design:
- Модульная архитектура представлений: отдельные рабочие пространства для каждого типа печи, панели управления датасетами, журнала истории расчётов, мониторинга IoT и аналитического дашборда.
- Оптимизированный рендеринг графиков: векторные интерактивные SVG-графики трендов КПД с плавающей шкалой и всплывающими подсказками.
- Печатные стили отчётности: встроенные CSS-правила
@media printдля форматирования расчётных ведомостей под стандарт листа A4 без экранных элементов навигации. - Динамическая мульти-темизация: поддержка 4 цветовых схем (Light, Dark, Emerald, Ocean) с сохранением пользовательских предпочтений в
localStorage.
3.2. Периметр безопасности и шлюз API (Edge & Gateway Tier)
Входной трафик маршрутизируется через двухзвенный контур:
- Nginx Reverse Proxy:
- SSL/TLS-терминация входящих соединений по протоколам TLSv1.2 и TLSv1.3 с автоматическим перенаправлением с HTTP (порт 80) на HTTPS (порт 443).
- Отдача статических скомпилированных файлов клиентского приложения React и портала документации.
- Настройка заголовков безопасности (
X-Frame-Options,X-Content-Type-Options,X-XSS-Protection). - Буферизация и ограничение размера загружаемых файлов (
client_max_body_size 50M).
- YARP API Gateway (Microsoft Yet Another Reverse Proxy):
- Реализован на платформе .NET 10.
- Выполняет сопоставление внешних REST-путей с внутренними микросервисными адресами Docker-сети.
- Осуществляет трансформацию URL (удаление или подстановку версионных префиксов
/api/v1/). - Обеспечивает централизованную валидацию JWT-токенов перед проксированием запросов в защищённые кластеры.
3.3. Уровень аутентификации и безопасности (Security Tier)
Безопасность комплекса обеспечивается сервисом HeatBalance.Auth:
- Реализация протоколов OAuth 2.0 и OpenID Connect на базе сертифицированного фреймворка OpenIddict.
- Выпуск криптографически подписанных токенов доступа JWT (JSON Web Token) с алгоритмом подписи RSA/ECDSA.
- Управление жизненным циклом учётных записей на базе ASP.NET Core Identity.
- Ролевая дифференциация прав (RBAC):
- Роль
User— доступ к штатным калькуляторам, персональным датасетам и своим IoT-устройствам. - Роль
Admin— расширенный доступ к панели мониторинга здоровья микросервисов, сквозному аудиту чужих устройств и специализированному модулю предиктивной аналитики.
- Роль
- Per-User Data Isolation: сквозная фильтрация данных по идентификатору пользователя (
sub/NameIdentifier), гарантирующая изоляцию информации между различными предприятиями и операторами.
3.4. Уровень прикладных микросервисов (Application Core Tier)
HeatBalance.DatasetService: отвечает за хранение вариантов технологических режимов работы установок. Интегрирован с распределённым кэшем Redis 7.0 для минимизации латентности при частых запросах.HeatBalance.RunService: фиксирует каждый выполненный расчёт (включая все входные параметры, рассчитанные статьи теплового баланса и дату). Предоставляет эндпоинты пагинации и поиска по архиву.HeatBalance.ReportService: принимает структурированные балансовые матрицы и формирует чистовые отчёты в формате PDF для архивации и печати.
3.5. Вычислительный уровень (Calculation Engines Tier)
Каждый расчётный сервис представляет собой изолированное ASP.NET Core Web API приложение, инкапсулирующее математическую модель конкретного типа печи:
HeatBalance.ChamberKilnService— расчёт камерных печей периодического действия.HeatBalance.ConveyorKilnService— расчёт конвейерных печей непрерывного действия.HeatBalance.ElectricKilnService— расчёт установок с электронагревателями сопротивления.HeatBalance.DrumDryerService— расчёт вращающихся барабанных сушилок и топочных камер.
Сервисы являются полностью stateless (не сохраняют внутреннее состояние): при одинаковых входных данных гарантируется детерминированный и воспроизводимый результат вычислений.
3.6. Уровень промышленного IoT и аналитики (IIoT & Analytics Tier)
HeatBalance.IoTService: высоконагруженный шлюз сбора телеметрии. Выполняет быструю аутентификацию по аппаратному ключуX-Device-Token, валидацию диапазонов измерений 15 типов датчиков, фиксацию пакетов в журнале и запуск асинхронной цепочки расчётов.HeatBalance.AnalyticsService: аналитический агрегатор, периодически запрашивающий исторические ряды расчётов изRunServiceи показанияIoTService. Выполняет сглаживание SMA, расчёт Z-Score для детекции сбоев технологических карт, экстраполяцию МНК для прогнозирования срока службы футеровки и бенчмаркинг параметров.
4. Сводная таблица сетевых портов и протоколов взаимодействия
| Компонент / Сервис | Внутренний порт (Docker) | Внешний порт хоста | Протокол | Назначение взаимодействия |
|---|---|---|---|---|
| Nginx Reverse Proxy | 80, 443 | 80, 443 | HTTP, HTTPS | Входная точка инфраструктуры, SSL, отдача статики |
| YARP API Gateway | 8080 | — | HTTP / REST | Внутренний маршрутизатор API запросов |
| HeatBalance.Auth | 8080 | 5001 | HTTP / REST | Авторизация, OIDC эндпоинты /connect/* |
| HeatBalance.DatasetService | 8080 | 5100 | HTTP / REST | CRUD операции с датасетами, кэш |
| HeatBalance.RunService | 8080 | 5200 | HTTP / AMQP | История расчётов, консьюмер SaveRunCommand |
| HeatBalance.ReportService | 8080 | 5300 | HTTP / REST | Генерация PDF-документов |
| HeatBalance.ConveyorKilnService | 8080 | 5101 | HTTP / REST | Расчёт баланса конвейерной сушильной печи |
| HeatBalance.ChamberKilnService | 8080 | 5102 | HTTP / REST | Расчёт баланса камерной сушильной печи |
| HeatBalance.ElectricKilnService | 8080 | 5103 | HTTP / REST | Расчёт баланса электрической сушильной печи |
| HeatBalance.DrumDryerService | 8080 | 5104 | HTTP / REST | Расчёт баланса сушильного барабана |
| HeatBalance.IoTService | 8080 | 5400 | HTTP / AMQP | Приём телеметрии, группировка датчиков |
| HeatBalance.AnalyticsService | 8080 | 5007 | HTTP / REST | Предиктивная аналитика, деградация, аномалии |
| RabbitMQ Message Broker | 5672, 15672 | 5672, 15672 | AMQP / HTTP | Шина событий MassTransit / Management Web UI |
| Redis Cache 7.0 | 6379 | 6379 | RESP (TCP) | Распределённый оперативный кэш датасетов |
| PostgreSQL Database | 5432 | — | TCP / SQL | Основное реляционное хранилище данных |