Skip to main content

Микросервисы ЛиманИСУ 2.0

Программное обеспечение ЛиманИСУ 2.0 построено по микросервисной архитектуре. Компоненты взаимодействуют через REST API и системы обмена сообщениями (NATS, NanoMQ). Авторизация осуществляется через Keycloak (OAuth2, JWT).

Архитектура ЛиманИСУ 2.0

Обзор архитектуры

КомпонентТехнологияНазначение
FrontendReact 18, TypeScriptОдностраничное веб-приложение
BackendPython/FastAPI, Java/SpringМикросервисная серверная часть
Базы данныхPostgreSQL 14, ClickHouse 24.2.1Метаданные и телеметрия
Очередь сообщенийNanoMQ (MQTT), NATSАсинхронный обмен событиями
Хранение файловMinIO (S3 API)Объектное хранилище
АвторизацияKeycloak 25.0.2OpenID Connect / OAuth2

Соответствие модулей и микросервисов


Сервисы на Python (FastAPI)

FastAPI Backend Diagnost

Основной аналитический сервис для обработки и анализа сырых сигналов, получаемых из объектного хранилища S3, с интеграцией с ClickHouse.

Возможности:

  • Получение и обработка сырых сигналов из S3
  • Интеграция с ClickHouse для хранения и анализа данных
  • Асинхронная работа с S3 через aiobotocore
  • API для работы с телеметрией, спектрами, дефектами и оборудованием
  • Поддержка CORS для взаимодействия с фронтендом

Конфигурация (переменные окружения):

# Настройки S3
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_ENDPOINT_URL=your-s3-endpoint
S3_BUCKET=your-bucket

# Настройки ClickHouse
CH_HOST=localhost
CH_PORT=9000
CH_DATABASE=default
CH_USERNAME=user
CH_PASSWORD=password

# CORS
ALLOWED_ORIGINS=http://localhost:3000

Defect Detection Service

Сервис отслеживания дефектов по сырым сигналам вибрации оборудования.

Возможности:

  • Обработка файлов с сырыми сигналами при их появлении в S3 хранилище
  • Расчет статистических параметров сигнала (RMS, пик-пик, крест-фактор и др.)
  • Спектральный анализ сигналов для поиска дефектов
  • Анализ спектра огибающей для выявления модуляций
  • Публикация результатов обработки в NATS
  • Сохранение найденных признаков дефектов в ClickHouse

Конфигурация:

DEBUG=False

# NATS
NATS_URL=nats://localhost:4222
NATS_SUBJECT=file.events
NATS_CONSUMER_GROUP=PROCESSOR_GROUP

# Backend API
BACKEND_API_URL=http://localhost:8000
BACKEND_API_KEY=your-api-key

# ClickHouse
CH_HOST=localhost
CH_PORT=9000
CH_DATABASE=default
CH_USERNAME=user
CH_PASSWORD=password

# S3
S3_ACCESS_KEY=your-key
S3_SECRET_KEY=your-secret
S3_BUCKET=your-bucket
S3_ENDPOINT_URL=your-endpoint

Equipment Mode Service

Определение режимов работы оборудования на основе поступающих событий через NATS. Система обрабатывает данные в реальном времени и сохраняет результаты в ClickHouse.

Поддерживаемые режимы:

  • Холостой ход
  • Запуск оборудования
  • Штатная работа
  • Останов оборудования
  • Разгон / Выбег
  • Авария
  • Нагрузочный режим

Конфигурация:

DEBUG=True

# NATS
NATS_URL=nats://localhost:4222
NATS_SUBJECT=events.>

# Backend
BACKEND_API_URL=http://localhost
BACKEND_API_KEY=EXAMPLE

# ClickHouse
CH_HOST=localhost
CH_DATABASE=default
CH_USERNAME=user
CH_PASSWORD=password
Режим работы по умолчанию

Переменная DEBUG по умолчанию установлена в True для данного сервиса.


Event Journal Service

Обнаружение и выдача предупреждающих событий. Предоставляет API для журналирования событий с использованием ClickHouse.

Возможности:

  • Хранение и получение событий оповещений в реальном времени
  • Высокопроизводительная обработка данных с помощью ClickHouse
  • Интеграция с системой очередей сообщений NATS
  • RESTful API endpoints на базе FastAPI

Конфигурация:

# NATS
NATS_URL=nats://localhost:4222
NATS_SUBJECT=events.>

# Backend
BACKEND_API_URL=http://localhost
BACKEND_API_KEY=EXAMPLE

# ClickHouse
CH_HOST=localhost
CH_DATABASE=default
CH_USERNAME=user
CH_PASSWORD=password

Notification Service

Рассылка уведомлений на основе событий в NATS по каналам: e-mail и SMS.

Возможности:

  • Email-уведомления через SMTP
  • SMS-сообщения
  • Интеграция с NATS для обработки событий
  • Интеграция с внешним API для получения данных

Конфигурация:

DEBUG=True

# NATS
NATS_URL=nats://localhost:4222
NATS_SUBJECT=events.>
NATS_CONSUMER_GROUP=NOTIFICATION_GROUP

# SMTP
MAIL_SERVER=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=user
MAIL_PASSWORD=password

# Backend
BACKEND_API_URL=http://localhost:8000

Telemetry Limits Service

Мониторинг и контроль телеметрических данных: отслеживание границ телеметрии и генерация уведомлений при выходе значений за установленные пределы.

Возможности:

  • Мониторинг телеметрических данных в реальном времени
  • Генерация событий при выходе телеметрии за граничные значения
  • Генерация событий при отсутствии телеметрии длительное время
  • Интеграция с NATS для обработки событий

Конфигурация:

DEBUG=True

# NATS
NATS_URL=nats://localhost:4222
NATS_SUBJECT=events.>

# Backend
BACKEND_API_URL=http://localhost:8000

Telemetry Service

Сбор и анализ данных с оборудования. Предоставляет REST API для получения телеметрии с возможностью гибкой фильтрации по дате, оборудованию и измерительным точкам.

Возможности:

  • Фильтрация данных по временному диапазону
  • Фильтрация по типу оборудования и измерительным точкам
  • Выдача фиксированного количества точек для оптимизации отображения
  • REST API с FastAPI и Swagger-документацией
  • Хранение в ClickHouse
  • Поддержка CORS

Конфигурация:

# ClickHouse
CH_HOST=localhost
CH_PORT=9000
CH_DATABASE=default
CH_USERNAME=user
CH_PASSWORD=password

# CORS
ALLOWED_ORIGINS=http://localhost:3000

Bearing Reference Book Service

Справочник подшипников с предзагруженной базой данных. Предоставляет API для работы с каталогом подшипников: создание, получение по ID, фильтрация, пагинация и сортировка.

Возможности:

  • Предзагруженная база данных подшипников
  • CRUD-операции для управления подшипниками
  • Расширенные возможности фильтрации, пагинации, сортировки и поиска по ID
  • RESTful API интерфейс
  • PostgreSQL в качестве хранилища данных

Конфигурация:

DATABASE_USER=postgres
DATABASE_PASSWORD=your_password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=bearing_reference_book

Defects Reference Book Service

REST API для работы со справочником дефектов. Построен на FastAPI с использованием асинхронного подхода и поддержкой PostgreSQL.

Возможности:

  • RESTful API для работы с базой дефектов
  • Асинхронная обработка запросов
  • CORS-поддержка для интеграции с фронтенд-приложениями
  • Предзагруженная база дефектов

Конфигурация:

DATABASE_USER=postgres
DATABASE_PASSWORD=your_password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=defects_reference_book

Remaining Resource Forecast Service

Прогнозирование времени безаварийной эксплуатации оборудования на основе анализа данных о дефектах и модуляции. Использует линейные и экспоненциальные модели.

Возможности:

  • Автоматический сбор данных об оборудовании через API
  • Анализ дефектов модуляции с использованием линейных и экспоненциальных моделей
  • Прогнозирование остаточного ресурса на основе спектрального анализа и огибающей
  • Интеграция с NATS для обмена сообщениями
  • Сохранение результатов прогнозирования в ClickHouse
  • Непрерывный мониторинг и обновление прогнозов

Конфигурация:

BACKEND_API_URL=http://localhost:8000
BACKEND_API_KEY=your-api-key
CH_HOST=localhost
CH_DATABASE=default
NATS_URL=nats://localhost:4222

Ping for Larus

Мониторинг доступности компонентов системы (бэкенда, Keycloak) и выполнение регулярных проверок по расписанию.

Возможности:

  • Периодическая проверка доступности API по адресу LISU_URL
  • Аутентификация через Keycloak с использованием ISSUER_URI и JWK_URI
  • Выполнение задач по расписанию (CRON)

Конфигурация:

LISU_URL=http://limanisu-backend:8080
ISSUER_URI=http://keycloak:8080/realms/lisu
JWK_URI=http://keycloak:8080/realms/lisu/protocol/openid-connect/certs
# CRON=0 */5 * * * # расписание выполнения (опционально)

Зависимости: limanisu-backend, keycloak


Сервисы на Java (Spring)

lisu-crud

Основной Java-сервис для управления пользователями (CRUD), деревьями объектов, телеметрией, журналами событий и интеграцией с Keycloak.

Возможности:

  • Аутентификация и авторизация через Keycloak (OAuth2, JWT)
  • CRUD-операции для пользователей, ролей, деревьев объектов, точек телеметрии, журналов событий и технического обслуживания
  • Гибкая система ролей и прав доступа
  • Импорт/экспорт файлов, поддержка загрузки и скачивания
  • Ведение журналов событий и технического обслуживания
  • Управление уведомлениями и алертами
  • Генерация отчетов в PDF и Excel
  • REST API

Конфигурация:

# application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/lisu
username: ${DB_USERNAME}
password: ${DB_PASSWORD}

# Keycloak
KC_URL: http://keycloak:8080
ISSUER_URI: http://keycloak:8080/realms/lisu
JWK_URI: http://keycloak:8080/realms/lisu/protocol/openid-connect/certs

report-distributor

Автоматизированное формирование и рассылка технических отчетов по оборудованию на основе данных телеметрии и диагностики.

Возможности:

  • Формирование автоотчетов по агрегатам и оборудованию с анализом дефектов, режимов работы в формате DOCX с таблицами, графиками и рекомендациями
  • Интеграция с внешними источниками данных (через REST)
  • Рассылка отчетов по расписанию на электронную почту
  • Поддержка аутентификации и авторизации через OAuth2/Keycloak
  • Веб-интерфейс для вызова формирования отчетов (REST API, OpenAPI/Swagger)

Конфигурация:

# application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/lisu
username: ${DB_USERNAME}
password: ${DB_PASSWORD}

KC_URL: http://keycloak:8080
ISSUER_URI: http://keycloak:8080/realms/lisu
JWK_URI: http://keycloak:8080/realms/lisu/protocol/openid-connect/certs

backup-distributor

Автоматическое создание, хранение и восстановление резервных копий данных в системе.

Возможности:

  • Планирование и автоматизация задач резервного копирования
  • Поддержка ClickHouse и PostgreSQL
  • Создание бэкапа по заданному расписанию
  • Мониторинг состояния и истории бэкапов
  • API для управления заданиями и получения статусов
  • Аутентификация через JWT и интеграция с Keycloak

Конфигурация:

# application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/lisu
username: ${DB_USERNAME}
password: ${DB_PASSWORD}

KC_URL: http://keycloak:8080
ISSUER_URI: http://keycloak:8080/realms/lisu
JWK_URI: http://keycloak:8080/realms/lisu/protocol/openid-connect/certs

Frontend (React)

limanisu-front

Веб-клиент системы мониторинга технического состояния оборудования. Отображает интерфейс пользователя для взаимодействия с данными телеметрии, дефектов, событий и отчетов.

Технологический стек:

КомпонентТехнология
ФреймворкReact 18
ЯзыкTypeScript
UI-библиотекаAnt Design
ГрафикиECharts
СостояниеMobX
HTTP-клиентAxios
РоутингReact Router 6

Структура проекта:

/src
├── app/
│ ├── providers/ # Глобальные провайдеры
│ ├── context/ # React Context
│ ├── router/ # Маршрутизация
│ └── store/ # MobX хранилища
├── components/ # UI компоненты
├── pages/ # Страницы приложения
└── shared/ # Общие ресурсы
├── constants/ # Конфигурации
├── hooks/ # Кастомные хуки
├── ui/ # Базовые компоненты
└── utils/ # Вспомогательные функции

Ключевые механизмы:

  • Роутинг: иерархическая навигация (React Router 6), Protected Routes для JWT-аутентификации, ленивая загрузка (code splitting)
  • Работа с API: RESTful-клиент на Axios, автоматическое обновление токенов (401 -> refresh-токен)
  • Аутентификация:
    • Access Token (5-30 мин, в localStorage)
    • Refresh Token (7-30 дней, httpOnly cookie)
    • Механизм silent refresh при 401 ошибке
  • CI/CD: сборка через Webpack -> Docker-образ

Конфигурация (переменные окружения):

# Keycloak
REACT_APP_KEYCLOAK_AUTH_URL=http://keycloak:8080
REACT_APP_KEYCLOAK_KEY=lisu-client

# API endpoints
REACT_APP_BASE_URL=http://localhost:8080/api
REACT_APP_DICTIONARY_URL=http://localhost:8081/api
REACT_APP_CHARTS_URL=http://localhost:8082/api
REACT_APP_LOG_EVENTS_URL=http://localhost:8083/api
REACT_APP_TELEMETRY_URL=http://localhost:8084/api

# WebSocket
REACT_APP_DATAHUB_WS_URL=ws://localhost:8085/ws

# Дополнительно
REACT_APP_URL_MODEWORK_INFO=http://localhost:8086/api
REACT_APP_URL_INFO_DEFECTS=http://localhost:8087/api

Порт публикации: 3000 (в контейнере 80)


Взаимодействие микросервисов

Микросервисы взаимодействуют через два основных механизма:

  1. REST API -- передача данных в формате JSON через HTTP
  2. Очереди сообщений -- NATS и NanoMQ для асинхронного обмена событиями
Принцип взаимодействия

Все REST-запросы между сервисами авторизуются через Bearer Token (Keycloak). Все запросы и ответы используют формат JSON с заголовками Content-Type: application/json и Accept: application/json.

Сводная таблица сервисов

СервисЯзыкБДОчередьПорт
FastAPI Backend DiagnostPythonClickHouse, S3--8000
Defect Detection ServicePythonClickHouse, S3NATS--
Equipment Mode ServicePythonClickHouseNATS--
Event Journal ServicePythonClickHouseNATS--
Notification ServicePython--NATS--
Telemetry Limits ServicePython--NATS--
Telemetry ServicePythonClickHouse----
Bearing Reference BookPythonPostgreSQL----
Defects Reference BookPythonPostgreSQL----
Remaining Resource ForecastPythonClickHouseNATS--
Ping for LarusPython------
lisu-crudJavaPostgreSQL--8080
report-distributorJavaPostgreSQL----
backup-distributorJavaPostgreSQL, ClickHouse----
limanisu-frontReact/TS--WebSocket3000

REST API -- общие сведения

СВД ЛиманИСУ 2.0 предоставляет RESTful API для работы с данными и интеграции с внешними системами.

Пример авторизации:

Authorization: Bearer <API_KEY>

Пример JSON-ответа:

{
"id": 1,
"name": "admin",
"email": "admin@localhost.ru",
"roles": ["USER", "ADMIN"]
}

Поддерживаемые HTTP-методы:

МетодНазначение
GETПолучение данных (пользователь, оборудование)
POSTСоздание новых записей
PUTОбновление существующих данных
DELETEУдаление данных