Приложение Б. Схема соединений (С4)¶
Схема С4 фиксирует соединения между внешними участниками, опубликованными сетевыми входами решения и внутренними доменами BOX5-DIT-MGSN для продуктового контура. Связанные реестры приведены в Приложении В и Приложении Г.
Схема соединений разбита по группам сервисов и compose-доменам, а внутри домена показаны конкретные сервисы и основные протоколы. Полный перечень контейнеров и параметров сервисов приведён в Приложении Г.
В схеме не раскрываются полные URL внешних систем, логины, пароли, ключи и токены. Внутренние PostgreSQL, Redis, ClickHouse и Kafka sidecar- компоненты показаны как типы соединений или как доменные sidecar-сервисы, а не как полный перечень контейнеров.
Б.1. Общая схема соединений по группам сервисов¶
web UI"] video["IP-камеры,
CSVN/VMS,
виртуальные камеры"] industrial["ПК-КОТ,
АСУ ТП"] sso["Keycloak / OIDC"] email["SMTP / Email"] externalApi["Внешние системы
получатели данных"] ui["ui-rest
edge и API gateway"] stats["statistics
события, отчёты, аудит, auth"] inference["inference + extended-inference
медиа, NRI, модели, ресурсы"] severstal["severstal
интеграционный контур"] kafka["kafka-domain
основная событийная шина"] data["data-storage
MinIO / DTS"] obs["elk-log
Prometheus / Loki"] sandbox["node-red-sandbox
подготовка сценариев"] users -->|"HTTP/HTTPS, WS"| ui sso -->|"OIDC authorization code"| users video -->|"RTSP, VMS API, HTTP upload"| inference video -->|"VMS API, архивы"| severstal industrial -->|"PostgreSQL, HTTP, Kafka/Avro"| severstal ui -->|"HTTP/gRPC, REST"| stats ui -->|"HTTP/gRPC, REST"| inference ui -->|"customer-domain API"| severstal ui -->|"S3 proxy"| data ui -->|"/sandbox"| sandbox stats <-->|"events, audit, commands"| kafka inference <-->|"inference events, heartbeats"| kafka severstal <-->|"sync, statuses, events"| kafka sandbox -.->|"публикация flows"| ui stats -->|"SMTP"| email stats -->|"события, отчёты, медиа"| externalApi severstal -->|"event statuses"| externalApi stats -->|"files, media"| data inference -->|"images, video fragments"| data severstal -->|"files, exports"| data stats -.->|"metrics, logs"| obs inference -.->|"metrics, logs"| obs severstal -.->|"metrics, logs"| obs ui -.->|"logs"| obs class users,video,industrial,sso,email,externalApi external; class ui edge; class stats,inference,severstal domain; class kafka,data,obs infra; class sandbox sandboxCls;
Исходный Mermaid-код схемы: ПД-MER-008. Б.1. Общая схема соединений по группам сервисов.
Б.2. Детализация соединений по группам сервисов¶
Б.2.1. ui-rest: внешний вход и API gateway¶
80, 443"] react["ui-react
SPA HTTP 8000"] gateway["ui-rest-to-gprc
REST / GraphQL / WS"] stats["statistics services"] inf["inference services"] svr["severstal services"] minio["ds-minio / DTS"] kafka["inf-kafka"] clickhouse["ClickHouse
analytics routes"] sandbox["node-red-sandbox-nginx"] browser -->|"HTTP/HTTPS"| nginx nginx -->|"/"| react nginx -->|"/api/*, /api/ws, /api/graphql"| gateway nginx -->|"/api/s3*"| minio nginx -->|"/sandbox/"| sandbox gateway -->|"HTTP/gRPC"| stats gateway -->|"HTTP/gRPC, REST"| inf gateway -->|"CUSTOM_DOMAINS=[severstal]"| svr gateway -->|"S3 API / files"| minio gateway -->|"Kafka audit/ws"| kafka gateway -->|"ClickHouse client"| clickhouse class browser external; class nginx,react,gateway edge; class stats,inf,svr domain; class minio,kafka,clickhouse,sandbox infra;
Исходный Mermaid-код схемы: ПД-MER-009. Б.2.1. ui-rest: внешний вход и API gateway.
ui-rest — единственный основной пользовательский вход. ui-nginx публикует
web UI, API, WebSocket, маршруты файлов и служебные прокси; ui-rest-to-gprc
адаптирует browser-facing REST/GraphQL/WS в gRPC/HTTP/Kafka/S3-вызовы
внутренних сервисов.
Б.2.2. statistics: авторизация, события, отчёты и аудит¶
Исходный Mermaid-код схемы: ПД-MER-010. Б.2.2. statistics: авторизация, события, отчёты и аудит.
Каноническое хранилище audit history находится в st-audit и его PostgreSQL.
Б.2.3. inference и extended-inference: медиаконтур и NRI¶
RTSP"] virtual["Виртуальные камеры
HTTP/MP4"] kafka["inf-kafka"] minio["ds-minio"] mediaserver["inf-mediaserver"] balancer["inf-load-balancer"] nri["inf-nri-inference"] monitoring["inf-monitoring"] images["inf-image-storage"] extractor["inf-report-video-extractor"] flows["inf-flows-manager"] resources["inf-vl-resource-manager"] converters["mm-conversion / yolo-conversion"] guardant["inf-guardant-control-center"] coturn["inf-coturn"] pg[("PostgreSQL sidecars")] redis[("Redis sidecars")] cameras -->|"RTSP"| mediaserver virtual -->|"HTTP/MP4"| mediaserver mediaserver -->|"frames / streams"| balancer balancer -->|"camera tasks"| nri nri -->|"events, heartbeat"| kafka nri -->|"images, fragments"| images nri -->|"model artifacts"| registry registry["svr-models-registry"] gateway -->|"HTTP/gRPC"| balancer gateway -->|"HTTP/gRPC"| mediaserver gateway -->|"HTTP/gRPC"| monitoring gateway -->|"HTTP/gRPC"| flows gateway -->|"HTTP/gRPC"| resources flows -->|"flow versions"| nri resources -->|"GPU reservations"| nri registry -->|"artifacts"| minio images -->|"images"| minio extractor -->|"video fragments"| minio monitoring <-->|"status topics"| kafka converters -->|"converted artifacts"| registry balancer --> guardant mediaserver --> coturn balancer --> pg monitoring --> pg flows --> pg resources --> redis images --> redis class cameras,virtual external; class gateway edge; class mediaserver,balancer,nri,monitoring,images,extractor,flows,resources,converters,guardant,coturn,registry service; class kafka,minio,pg,redis data;
Исходный Mermaid-код схемы: ПД-MER-011. Б.2.3. inference и extended-inference: медиаконтур и NRI.
inf-nri-inference получает версии flows и модельные ресурсы через сервисы extended-inference и хранилища домена.
Б.2.4. severstal: интеграционный контур с системами заказчика¶
customer-domain API"] vms["CSVN / VMS
Cisco, Milestone, Macroscop"] pkkot["ПК-КОТ"] asutpExt["АСУ ТП
signal Kafka"] kafka["inf-kafka"] minio["ds-minio / DTS"] integration["svr-severstal-integration"] pkdb["svr-postgres-pk-kot"] org["svr-severstal-org-sync"] asutp["svr-asutp"] asutpKafka["svr-asutp-kafka"] schema["svr-asutp-schema-registry"] nifi["svr-severstal-nifi-integration"] scenario["svr-scenario-storage"] liteScenario["svr-lite-scenario-storage"] asset["svr-asset-storage"] launch["svr-launch-storage"] registry["svr-models-registry"] translations["svr-translations-store"] security["svr-security-notice
audit consumer"] pg[("PostgreSQL sidecars")] redis[("svr-asutp-redis")] gateway -->|"HTTP/gRPC/REST"| integration gateway -->|"HTTP/gRPC"| scenario gateway -->|"HTTP/gRPC"| liteScenario gateway -->|"HTTP/gRPC"| asset gateway -->|"HTTP/gRPC"| launch gateway -->|"HTTP/gRPC"| registry gateway -->|"HTTP/gRPC"| translations vms -->|"SOAP/WSDL или HTTP VMS API"| integration pkkot -->|"PostgreSQL read"| pkdb pkdb -->|"read model"| integration integration -->|"HTTP push statuses"| pkkot org -->|"org/camera sync"| integration asutpExt -->|"Kafka / Avro"| asutpKafka asutpKafka --> asutp schema -->|"Schema Registry API"| asutp asutp -->|"unit state events"| kafka integration <-->|"status, sync, events"| kafka security -->|"consume add_audit_record only"| kafka scenario --> pg liteScenario --> pg asset --> pg launch --> pg registry --> pg translations --> pg integration --> pg nifi --> pg asutp --> pg asutp --> redis scenario --> minio registry --> minio class vms,pkkot,asutpExt external; class gateway edge; class integration,pkdb,org,asutp,asutpKafka,schema,nifi,scenario,liteScenario,asset,launch,registry,translations,security service; class kafka,minio,pg,redis data;
Исходный Mermaid-код схемы: ПД-MER-012. Б.2.4. severstal: интеграционный контур с системами заказчика.
svr-security-notice показан как внутренний технический consumer audit topic.
Б.2.5. Инфраструктурные домены: kafka-domain, data-storage, elk-log¶
Исходный Mermaid-код схемы: ПД-MER-013. Б.2.5. Инфраструктурные домены: kafka-domain, data-storage, elk-log.
Контур наблюдаемости представлен Prometheus и Loki: сервисы передают метрики и логи для эксплуатационного контроля.
Б.2.6. node-red-sandbox: песочница сценариев¶
ui-nginx"] nginx["nr-sbx-nginx
81 / /sandbox"] frontend["nr-sbx-frontend"] backend["nr-sbx-backend"] nodeRed["nr-sbx-node-red-vl"] nri["nr-sbx-nri
Jupyter 18889"] celery["nr-sbx-celery"] flower["nr-sbx-flower"] mm["nr-sbx-mm-conversion"] yolo["nr-sbx-yolo-conversion"] kafka["sandbox Kafka"] redis["sandbox Redis"] volumes[("shared volumes
flows, models, configs")] minio["ds-minio"] user -->|"HTTP /sandbox"| box box -->|"proxy"| nginx user -->|"direct 18889"| nri nginx --> frontend nginx --> backend nginx --> nodeRed nginx --> flower backend -->|"REST / Socket.IO"| frontend backend -->|"Node-RED API"| nodeRed backend -->|"tasks"| celery backend --> redis backend --> kafka celery --> redis celery --> kafka celery --> mm celery --> yolo celery --> minio nri --> nodeRed nri --> volumes nodeRed --> volumes mm --> volumes yolo --> volumes backend -.->|"publish flows / Box API"| box class user external; class box,nginx edge; class frontend,backend,nodeRed,nri,celery,flower,mm,yolo service; class kafka,redis,volumes,minio data;
Исходный Mermaid-код схемы: ПД-MER-014. Б.2.6. node-red-sandbox: песочница сценариев.
Песочница находится в отдельной Docker-сети node-red-sandbox и используется для разработки, проверки и подготовки NRI-сценариев перед переносом в продуктовый контур.
Б.3. Сетевые зоны контура¶
| Зона | Назначение | Состав конфигурации продуктового контура |
|---|---|---|
| Хост Docker Compose-контура | Единая нода контура, публикует внешние порты и хранит compose-данные. | Сервисы развёрнуты через Docker Compose; опубликованные входы задаются compose-конфигурацией и nginx. |
bx_default |
Основная bridge-сеть решения BOX5-DIT-MGSN: ui-rest, statistics, inference, extended-inference, severstal, kafka-domain, data-storage, elk-log. |
В этой сети работают ключевые сервисы ui-nginx, ui-rest-to-gprc, inf-kafka, inf-nri-inference, svr-severstal-integration, st-auth, ds-minio, log-prometheus. |
node-red-sandbox |
Изолированная bridge-сеть песочницы разработки и проверки NRI-сценариев. | Сервисы песочницы работают в отдельной сети; публикация наружу идёт через node-red-sandbox-nginx на порт 81, а основной UI проксирует /sandbox/ на этот контур. |
Б.4. Опубликованные сетевые входы¶
| Порт хоста | Контейнер | Назначение | Статус в продуктовом контуре |
|---|---|---|---|
80/tcp |
ui-rest-ui-nginx-1 |
Основной HTTP-вход web UI, REST API, WebSocket, статические файлы, S3 proxy, analytics routes и прокси /sandbox/. |
Основной пользовательский вход; конкретный адрес задаётся эксплуатационной конфигурацией. |
443/tcp |
ui-rest-ui-nginx-1 |
Публикуемый порт HTTPS. | Порт опубликован; активность TLS зависит от nginx-конфигурации контура, основной вход - HTTP 80. |
81/tcp |
node-red-sandbox-nginx-1 |
Вход в Node-RED Sandbox: frontend, backend, Socket.IO, Node-RED, Flower. | Технический контур разработки сценариев; пользователи основного BOX5-DIT-MGSN работают через /sandbox/ на ui-nginx. |
9000/tcp |
data-storage-ds-minio-1 |
Прямой S3-compatible endpoint MinIO. | Технический доступ; для web UI используется прокси /api/s3* через ui-nginx. |
3003/tcp |
data-storage-ds-data-temporary-storage-1 |
API временного файлового хранилища DTS. | Технический доступ для файловых операций и интеграций. |
3100/tcp |
elk-log-log-loki-1 |
Loki API для логов. | Эксплуатационный доступ к журналам сервисов. |
19000/tcp |
statistics-st-event-statistic-clickhouse-1 |
Нативный порт ClickHouse для статистики событий. | Технический доступ к аналитическому хранилищу, не пользовательский API. |
18889/tcp |
node-red-sandbox-nri-1 |
Jupyter/NRI окружение песочницы. | Технический доступ для разработки и проверки сценариев в песочнице. |
Основная Kafka inf-kafka, доменные PostgreSQL/Redis, большинство ClickHouse-
инстансов и внутренние HTTP/gRPC-сервисы наружу не публикуются и доступны
только по Docker DNS-именам внутри bx_default.
Б.5. Основные внутренние соединения¶
| Направление | Протоколы | Состав соединения |
|---|---|---|
Browser -> ui-nginx -> ui-react |
HTTP | Загрузка SPA, статической конфигурации, логотипов и статического раздела /docs/. |
Browser -> ui-nginx -> ui-rest-to-gprc |
HTTP/REST, GraphQL, WebSocket | Основная browser-facing API поверхность /api/*, /api/graphql, /api/ws/; проверочный /api/base/ping/. |
ui-rest-to-gprc -> statistics |
HTTP/gRPC, Kafka, ClickHouse/S3 по отдельным маршрутам | Авторизация, пользователи, камеры, события, отчёты, аудит, права доступа. |
ui-rest-to-gprc -> inference / extended-inference |
HTTP/gRPC, REST | Управление камерами в инференсе, медиасервером, версиями flows и ресурсами. |
ui-rest-to-gprc -> severstal |
HTTP/gRPC/REST customer-domain API | Сценарии, ассеты, запуски, реестры моделей, CSVN/ПК-КОТ/АСУ ТП операции домена severstal. |
statistics, inference, severstal -> inf-kafka |
Kafka | События инференса, команды, heartbeats, audit topic, синхронизация справочников и статусов. |
| Сервисы доменов -> sidecar-хранилища | PostgreSQL, Redis, ClickHouse native/HTTP | Транзакционное состояние сервисов, кэши, очереди, аналитические витрины и события. |
Сервисы доменов -> ds-minio / DTS |
S3 API, HTTP | Изображения, видеофрагменты, отчётные файлы, временные объекты и загруженные видеозаписи. |
Сервисы -> Prometheus / Loki |
HTTP /metrics, Docker Loki driver |
Сбор метрик и логов для эксплуатационного контроля. |
ui-nginx -> node-red-sandbox-nginx |
HTTP proxy | Переход в песочницу по /sandbox/; дальше трафик остаётся в сети node-red-sandbox. |
node-red-sandbox сервисы |
HTTP, WebSocket, Redis, Kafka, файловые volume | Разработка, проверка и подготовка NRI-сценариев перед переносом в продуктовый контур. |
Б.6. Внешние соединения¶
| Внешняя сторона | Узел BOX5-DIT-MGSN | Протоколы | Назначение и статус |
|---|---|---|---|
| Пользователи | ui-nginx |
HTTP/HTTPS, WebSocket | Web UI, REST API, лента событий, отчёты, администрирование, настройка сценариев и просмотр событий. |
| IP-камеры | inf-mediaserver, inf-load-balancer, inf-nri-inference |
RTSP; downstream HLS/WebRTC внутри BOX5-DIT-MGSN | Прямые live-видеопотоки для инференса. |
| CSVN/VMS Cisco, Milestone, Macroscop | svr-severstal-integration, st-camera-storage, st-virt-cam-video-upload |
Cisco/Milestone SOAP/WSDL; Macroscop HTTP; локальный connector VIRTUAL |
Топология камер и архивные видеозаписи. RTSP относится к прямому потоку камер, а не к основному обмену архивами VMS. |
| Загруженные видеозаписи / виртуальные камеры | ui-nginx, ui-rest-to-gprc, st-virt-cam-video-upload, inf-mediaserver |
HTTP multipart upload, HTTP/MP4, gRPC | Анализ видеофайлов без постоянного потока с физической камеры. |
| ПК-КОТ | svr-postgres-pk-kot, svr-severstal-integration, svr-severstal-org-sync |
PostgreSQL read-only, HTTP push | Чтение справочников и передача подтверждённых событий/статусов. |
| АСУ ТП | svr-asutp |
Kafka, Avro, Schema Registry HTTP API | Приём _meta и _data сигналов, расчёт состояний и публикация результата в основной контур BOX5-DIT-MGSN. |
| Keycloak / OpenID Connect | Браузер пользователя, st-auth, ui-rest-to-gprc |
OIDC / OAuth2 authorization code, HTTP/gRPC | SSO-контур авторизации; параметры провайдера задаются эксплуатационной конфигурацией OPEN_ID_*. |
| SMTP / Email | st-report-email, st-auth |
SMTP | Email-уведомления, отчёты и служебные письма. |
| Внешние системы-получатели данных | svr-severstal-integration, сервисы отчётов и событий |
HTTP/REST, S3/HTTP для файлов по конкретному потоку, согласованные запросы к витринам данных | Передача событий, статусов, отчётов, медиа и выгрузок данных в системы заказчика. |
Б.7. Основания описания¶
Основание описания: функциональная структура, реестр внешних систем и реестр сервисов/компонентов, приведённые в приложениях А, В и Г текущего документа.