Skip to content

Архитектура системы ​

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) ​

Входной трафик маршрутизируется через двухзвенный контур:

  1. 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).
  2. 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 Proxy80, 44380, 443HTTP, HTTPSВходная точка инфраструктуры, SSL, отдача статики
YARP API Gateway8080—HTTP / RESTВнутренний маршрутизатор API запросов
HeatBalance.Auth80805001HTTP / RESTАвторизация, OIDC эндпоинты /connect/*
HeatBalance.DatasetService80805100HTTP / RESTCRUD операции с датасетами, кэш
HeatBalance.RunService80805200HTTP / AMQPИстория расчётов, консьюмер SaveRunCommand
HeatBalance.ReportService80805300HTTP / RESTГенерация PDF-документов
HeatBalance.ConveyorKilnService80805101HTTP / RESTРасчёт баланса конвейерной сушильной печи
HeatBalance.ChamberKilnService80805102HTTP / RESTРасчёт баланса камерной сушильной печи
HeatBalance.ElectricKilnService80805103HTTP / RESTРасчёт баланса электрической сушильной печи
HeatBalance.DrumDryerService80805104HTTP / RESTРасчёт баланса сушильного барабана
HeatBalance.IoTService80805400HTTP / AMQPПриём телеметрии, группировка датчиков
HeatBalance.AnalyticsService80805007HTTP / RESTПредиктивная аналитика, деградация, аномалии
RabbitMQ Message Broker5672, 156725672, 15672AMQP / HTTPШина событий MassTransit / Management Web UI
Redis Cache 7.063796379RESP (TCP)Распределённый оперативный кэш датасетов
PostgreSQL Database5432—TCP / SQLОсновное реляционное хранилище данных

Разработано в рамках проекта моделирования тепловых балансов и промышленного мониторинга