Раздел 2. Структура программного обеспечения¶
Раздел описывает структуру программного обеспечения BOX5-DIT-MGSN с точки зрения публичных и внутренних API. Полный состав контейнеров, хранилищ и инфраструктурных компонентов приведён в Приложении Г к ПД, а детальный реестр REST endpoint-ов приведён в Приложении OpenAPI. В данном разделе фиксируются укрупнённые части ПО, их зоны ответственности и связи, необходимые для понимания API.
2.1. Перечень частей ПО¶
Программное обеспечение BOX5-DIT-MGSN построено как набор Docker Compose-доменов и прикладных сервисов. Для типового эксплуатационного состава выделяются 9 основных compose-доменов и 96 уникальных сервисов и компонентов. DEV, TEST и PROD используют один и тот же API-контур применяемых доменов; различия фиксируются в И2/И3 как различия топологии и мощности, а не как отдельные API-контракты.
2.1.1. Уровни программного обеспечения¶
| Уровень | Назначение | Основные компоненты |
|---|---|---|
| Внешний вход и UI | Единая точка входа пользователей и браузерных API. | ui-nginx, ui-react, ui-rest-to-gprc |
| Прикладные backend-сервисы | Реализация бизнес-операций, справочников, событий, отчётов и интеграций. | Домены statistics, severstal, data-storage |
| Видеоаналитика и среда выполнения инференса | Получение видеопотоков, выполнение сценариев видеоаналитики, хранение кадров и публикация событий. | Домены inference, extended-inference |
| Асинхронный обмен | Доставка событий, команд, статусов, audit-записей и служебных уведомлений между доменами. | kafka-domain, доменные Kafka-клиенты |
| Хранилища данных | Транзакционные, аналитические, кэшевые, файловые и объектные данные. | PostgreSQL, ClickHouse, Redis, MinIO, DataTemporaryStorage |
| Наблюдаемость и эксплуатационный контроль | Сбор метрик и логов, контроль доступности сервисов. | elk-log, /metrics, Docker logs |
| Песочница сценариев | Подготовка и проверка Node-RED/NRI-сценариев до переноса в рабочий inference-контур. | node-red-sandbox |
2.1.2. Основные части ПО¶
| Часть ПО | Compose-домен / контур | Назначение | API-поверхность |
|---|---|---|---|
| Пользовательский интерфейс и API gateway | ui-rest |
Публикует web UI, проксирует REST, GraphQL, WebSocket и файловые маршруты. | /, /api/*, /api/graphql, /api/ws/, /api/base/*, /api/config/*, /api/consul/* |
| Авторизация и доступ | statistics |
Управляет входом пользователей, JWT, ролями, группами доступа и правами на объекты/камеры. | /api/statistics/auth/*, /api/statistics/access/* |
| Камеры, объекты и конфигурация видеоаналитики | statistics |
Хранит дерево объектов, камеры, зоны, пресеты категорий, связи камер и клиентскую конфигурацию. | /api/statistics/camera-storage/*, /api/config/*, /api/consul/* |
| События, аудит и комментарии | statistics |
Принимает и хранит события, статусы подтверждения, audit-журнал и комментарии к событиям. | /api/statistics/event-storage/*, /api/statistics/audit/*, /api/statistics/comments/* |
| Отчёты и уведомления | statistics |
Формирует отчёты PDF/XLSX/DOCX/HTML, хранит настройки email-уведомлений и отчётные расписания. | /api/statistics/report-pdf-xlsx-generator/*, /api/statistics/auth-report-pdf-xlsx-generator/*, /api/statistics/report-email/* |
| Событийная статистика и посещение зон | statistics |
Хранит настройки статистического зеркала событий и данные посещения объектов через зоны входа/выхода. | /api/statistics/event-statistics/*, /api/statistics/object-visit-zone-counter/* |
| Видеоаналитика и inference | inference, extended-inference, severstal |
Обрабатывает live/архивные видеопотоки, хранит изображения, отдаёт мониторинг, сведения о моделях, HLS/WebRTC и медиафрагменты. | /api/inference/image-storage/*, /api/inference/models-storage/*, /api/inference/gateway/*, /api/inference/load-balancer/*, /api/inference/monitoring/*, /api/thermal/mediaserver/* |
| Виртуальные камеры и медиа | statistics, data-storage |
Управляет загруженными видео для виртуальных камер, временными файлами и объектными ссылками. | /api/statistics/virt-cam-video-upload/*, /api/data-storage/*, /api/s3/* |
| Интеграционный контур заказчика | severstal, интеграционные входы |
Синхронизирует внешние справочники, камеры, события, АСУ ТП-сигналы и статусы обработки. | /api/integration/*, маршруты gateway для доменов заказчика, Kafka/HTTP-интеграции |
| Файловое и объектное хранение | data-storage |
Предоставляет временное хранение файлов, прокси к MinIO и выдачу бинарных объектов по API. | /api/data-storage/*, /api/s3/*, файловые маршруты ui-nginx |
| Наблюдаемость | elk-log |
Собирает метрики и логи сервисов, используется для эксплуатационного контроля. | /metrics, Loki/Prometheus API внутри эксплуатационного контура |
| Песочница Node-RED/NRI | node-red-sandbox |
Изолирует разработку и проверку сценариев перед переносом в рабочий inference-контур. | /sandbox/*, внутренние API sandbox-сервисов |
2.1.3. Состав REST API по подсистемам¶
REST API документируется по тегам OpenAPI. На уровне структуры ПО теги
объединяются в функциональные группы, чтобы показать владение endpoint-ами.
Теги config, consul и models-storage ниже являются именами API-групп и
не добавляют одноимённые compose-домены к составу сервисов из Приложения Г к
ПД.
| Функциональная группа API | Теги OpenAPI | Назначение |
|---|---|---|
| Авторизация и права | auth, access |
Вход, токены, пользователи, роли, группы доступа, привилегии. |
| Камеры и конфигурация | camera-storage, config, consul |
Камеры, объекты, зоны, пресеты категорий и клиентская конфигурация. |
| События и аудит | event-storage, audit, comments |
События, статусы подтверждения, комментарии и audit. |
| Отчёты и уведомления | report-pdf-xlsx-generator, auth-report-pdf-xlsx-generator, report-email |
Генерация отчётов, скачивание файлов, настройки рассылки и проверка отправки. |
| Аналитические агрегаты | event-statistics, object-visit-zone-counter |
Настройки статистического зеркала событий и учёт посещения объектов через зоны. |
| Видео и медиа | virt-cam-video-upload, image-storage, gateway, s3, data-storage, mediaserver |
HLS/WebRTC, изображения, загруженные видео, файлы и объектное хранилище. |
| Inference и модели | load-balancer, monitoring, models-storage |
Балансировка камер, состояние inference и сведения о моделях; models-storage здесь является OpenAPI-тегом маршрута к реестру svr-models-registry, а не отдельным сервисом поставки. |
| Служебные операции | base |
Проверка доступности API gateway и прохождения запроса через опубликованный вход. |
2.2. Взаимосвязи между частями ПО¶
Взаимосвязи между частями ПО строятся вокруг единого входа ui-nginx и
gateway-сервиса ui-rest-to-gprc. Браузерные клиенты не обращаются напрямую к
внутренним сервисам statistics, inference, severstal и хранилищам:
запросы проходят через опубликованные маршруты gateway и далее адаптируются в
HTTP/gRPC, REST, Kafka, S3 или SQL-вызовы.
2.2.1. Общая схема связей¶
браузер / API-клиент"] cameras["IP-камеры
VMS / видеофайлы"] customer["Системы заказчика
ПК-КОТ / АСУ ТП"] sso["Keycloak / OIDC"] smtp["SMTP / уведомления"] nginx["ui-nginx
внешний вход"] gateway["ui-rest-to-gprc
REST / GraphQL / WS"] ui["ui-react
SPA"] stats["statistics
auth, камеры, события, отчёты"] inference["inference
media, NRI, HLS"] severstal["severstal
интеграции заказчика"] sandbox["node-red-sandbox
подготовка сценариев"] kafka["kafka-domain
событийная шина"] storage["data-storage
MinIO / DTS"] db["PostgreSQL / ClickHouse / Redis
доменные хранилища"] obs["elk-log
Prometheus / Loki"] users -->|"HTTP / HTTPS / WS"| nginx nginx -->|"статический UI"| ui nginx -->|"/api/*"| gateway nginx -->|"/api/s3*, файлы"| storage nginx -->|"/sandbox/*"| sandbox gateway -->|"HTTP/gRPC"| stats gateway -->|"HTTP/REST, gRPC"| inference gateway -->|"API доменов заказчика"| severstal gateway -->|"S3 / files"| storage gateway -->|"audit, websocket события"| kafka cameras -->|"RTSP, VMS API, загрузка"| inference cameras -->|"архивы и топология"| severstal customer -->|"PostgreSQL, HTTP, Kafka/Avro"| severstal sso -->|"OIDC authorization code"| users stats -->|"SMTP"| smtp stats <-->|"events, audit, commands"| kafka inference <-->|"events, heartbeats"| kafka severstal <-->|"sync, statuses"| kafka stats --> db inference --> db severstal --> db stats --> storage inference --> storage severstal --> storage stats -.->|"metrics, logs"| obs inference -.->|"metrics, logs"| obs severstal -.->|"metrics, logs"| obs gateway -.->|"logs"| obs class users,cameras,customer,sso,smtp external; class nginx,gateway,ui edge; class stats,inference,severstal,sandbox app; class kafka,storage,db,obs infra;
Исходный Mermaid-код схемы: ПА-MER-002. 2.2.1. Общая схема связей.
2.2.2. Синхронные API-связи¶
| Источник | Получатель | Протокол | Назначение связи | Особенности |
|---|---|---|---|---|
| Браузер пользователя | ui-nginx |
HTTP/HTTPS, WebSocket | Загрузка UI, вызовы REST/GraphQL, обновления в реальном времени. | ui-nginx является внешним входом и проксирует запросы к нижележащим сервисам. |
ui-nginx |
ui-react |
HTTP | Выдача SPA и статических файлов интерфейса. | ui-react не обращается к backend напрямую; после загрузки браузер вызывает /api/*. |
ui-nginx |
ui-rest-to-gprc |
HTTP, WebSocket | Передача браузерного API в gateway. | Основной маршрут: /api/*, GraphQL и /api/ws/. |
ui-rest-to-gprc |
statistics |
HTTP/gRPC, REST | Авторизация, камеры, события, отчёты, аудит, справочники и прикладная аналитика. | Для защищённых операций используется Bearer-токен; схема отражена в OpenAPI. |
ui-rest-to-gprc |
inference и extended-inference |
HTTP/gRPC, REST | Мониторинг inference, HLS/WebRTC, модели и изображения. | Медиаответы могут быть бинарными или потоковыми, без JSON-схемы ответа. |
ui-rest-to-gprc |
severstal |
HTTP/gRPC, REST | Операции доменов заказчика, интеграционные справочники и сценарии. | Набор маршрутов зависит от включённых доменов и эксплуатационной конфигурации. |
ui-rest-to-gprc |
data-storage, ds-minio |
HTTP, S3 API | Загрузка, выдача и проксирование файлов, изображений и отчётных артефактов. | Доступ к объектам выполняется через gateway/nginx, прямые параметры хранилища не раскрываются. |
statistics |
Keycloak / OIDC | HTTP/OIDC | Внешняя авторизация и обмен authorization code на локальные токены. | Параметры внешнего провайдера задаются в конфигурации контура. |
statistics |
SMTP | SMTP | Сброс пароля, отчёты и уведомления. | Учетные данные и адреса серверов не публикуются в документации. |
inference |
IP-камеры и VMS | RTSP, HTTP/VMS API | Получение live-потоков, preview и архивных фрагментов. | Физические камеры и VMS находятся за границей ПО BOX5-DIT-MGSN. |
2.2.3. Асинхронные связи¶
Асинхронный обмен используется для событий, команд, heartbeats, audit-записей, статусов и синхронизации справочников. Основной брокер решения - Kafka-домен; отдельные технологические Kafka-контуры могут использоваться внутри интеграционных или sandbox-доменов.
| Отправитель | Получатель | Тип сообщений | Назначение |
|---|---|---|---|
inf-nri-inference, inf-load-balancer, медиа- и inference-сервисы |
statistics, ui-rest-to-gprc, мониторинг |
События инференса, heartbeat, статусы камер | Передача результатов видеоаналитики, состояния камер и состояния inference. |
st-camera-storage |
inference, statistics, нижележащие сервисы |
Изменения камер, объектов, зон и пресетов | Распространение актуальной топологии камер и правил обработки. |
st-event-storage, st-event-statistic, st-object-visit-zone-counter |
UI и отчётные сервисы | События, статусы, аналитические агрегаты и события посещения зон | Обновление ленты событий, статистических представлений и отчётов. |
st-audit, ui-rest-to-gprc, прикладные сервисы |
st-audit, хранилище audit |
Audit-записи действий пользователей и сервисов | Централизованное хранение истории действий. |
severstal |
Основной контур BOX5-DIT-MGSN и внешние получатели | Синхронизация, статусы, интеграционные события | Обмен с ПК-КОТ, АСУ ТП и другими системами заказчика. |
node-red-sandbox |
Основной контур после публикации сценариев | Версии flows и сценарные артефакты | Перенос проверенных сценариев в рабочий inference-контур. |
2.2.4. Связи с хранилищами¶
| Тип хранилища | Использующие части ПО | Назначение |
|---|---|---|
| PostgreSQL | statistics, inference, severstal, node-red-sandbox |
Основное транзакционное состояние: пользователи, права, камеры, события, сценарии, справочники и служебные таблицы. |
| ClickHouse | statistics, gateway-аналитические маршруты |
Агрегаты событий, аналитические запросы и ускорение выборок для дашбордов. |
| Redis | statistics, inference, data-storage, node-red-sandbox |
Кэш, блокировки, очереди задач, временное состояние и служебные координаторы. |
| MinIO / S3 | statistics, inference, severstal, ui-rest-to-gprc |
Изображения событий, preview, отчётные файлы, импорт/экспорт конфигураций и медиаартефакты. |
| DataTemporaryStorage | data-storage, ui-rest-to-gprc, прикладные сервисы |
Временное хранение загруженных изображений и файлов по uuid. |
| Файловые каталоги compose-контура | ui-nginx, mediaserver, отчётные и видео-сервисы |
Статические файлы UI, HLS-данные, загруженные видео и локальные отчётные артефакты. |
2.2.5. Границы ответственности API¶
| Граница | Описание |
|---|---|
| Внешняя API-граница | Для пользователей и внешних API-клиентов опубликован gateway-слой. Внутренние сервисы не рассматриваются как самостоятельные публичные точки входа. |
| Браузерный API | Основная поверхность - REST endpoint-ы /api/*, GraphQL /api/graphql, WebSocket /api/ws/, файловые маршруты и HLS/WebRTC-маршруты через ui-nginx. |
| Внутренний service-to-service API | Внутренние связи между gateway и доменными сервисами выполняются через HTTP/gRPC, REST, Kafka, S3 и SQL-клиенты. |
| Файловые и потоковые ответы | Для отчётов, изображений, видео и HLS endpoint может возвращать бинарное или потоковое содержимое без отдельной JSON-схемы. |
| Авторизация | Защищённые операции используют Bearer-токен или специальные контурные ключи для синхронизационных входов; точная схема по endpoint-ам приведена в OpenAPI-приложении. |
| Конфигурация | Состав доступных доменов, внешние endpoints, SMTP/OIDC/S3-параметры, версии сервисов и функциональные флаги задаются эксплуатационной конфигурацией и не раскрываются в ПА как чувствительная информация. |
Таким образом, структура ПО в ПА связывает опубликованные API с внутренними
частями решения: ui-rest формирует внешний контракт, домены statistics,
inference, severstal и data-storage реализуют прикладную
логику, kafka-domain обеспечивает асинхронную связность, а доменные хранилища
и elk-log поддерживают состояние, файлы, метрики и журналы.