Перейти к содержанию

Приложение Б. Схема соединений (С4)

Схема С4 фиксирует соединения между внешними участниками, опубликованными сетевыми входами решения и внутренними доменами BOX5-DIT-MGSN для продуктового контура. Связанные реестры приведены в Приложении В и Приложении Г.

Схема соединений разбита по группам сервисов и compose-доменам, а внутри домена показаны конкретные сервисы и основные протоколы. Полный перечень контейнеров и параметров сервисов приведён в Приложении Г.

В схеме не раскрываются полные URL внешних систем, логины, пароли, ключи и токены. Внутренние PostgreSQL, Redis, ClickHouse и Kafka sidecar- компоненты показаны как типы соединений или как доменные sidecar-сервисы, а не как полный перечень контейнеров.

Б.1. Общая схема соединений по группам сервисов

flowchart LR classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef domain fill:#eefaf3,stroke:#15803d,color:#1f2937; classDef infra fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; classDef sandboxCls fill:#fff1f2,stroke:#be123c,color:#1f2937; users["Пользователи
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

flowchart LR classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef domain fill:#eefaf3,stroke:#15803d,color:#1f2937; classDef infra fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; browser["Пользовательский браузер"] nginx["ui-nginx
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: авторизация, события, отчёты и аудит

flowchart TB classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef service fill:#eefaf3,stroke:#15803d,color:#1f2937; classDef data fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; gateway["ui-rest-to-gprc"] keycloak["Keycloak / OIDC"] smtp["SMTP / Email"] kafka["inf-kafka"] minio["ds-minio / DTS"] auth["st-auth"] access["st-access"] camera["st-camera-storage"] event["st-event-storage"] statistic["st-event-statistic"] audit["st-audit"] reportEmail["st-report-email"] reportPdf["st-report-pdf-xlsx-generator"] pg[("PostgreSQL sidecars")] redis[("Redis sidecars")] ch[("ClickHouse sidecars")] gateway -->|"HTTP/gRPC"| auth gateway -->|"HTTP/gRPC"| access gateway -->|"HTTP/gRPC"| camera gateway -->|"HTTP/gRPC"| event gateway -->|"HTTP/gRPC"| statistic gateway -->|"HTTP/gRPC"| audit gateway -->|"HTTP/gRPC"| reportEmail gateway -->|"HTTP/gRPC"| reportPdf auth -->|"OIDC code exchange"| keycloak auth -->|"SMTP reset mail"| smtp reportEmail -->|"SMTP notifications"| smtp camera <-->|"camera/object topics"| kafka event <-->|"event topics"| kafka statistic <-->|"event analytics topics"| kafka audit <-->|"add_audit_record"| kafka access -->|"privilege topics"| kafka reportEmail <-->|"notification topics"| kafka auth --> pg access --> pg camera --> pg event --> pg statistic --> ch audit --> pg reportEmail --> pg reportPdf --> minio event --> minio camera --> minio auth --> redis access --> redis class gateway edge; class auth,access,camera,event,statistic,audit,reportEmail,reportPdf service; class pg,redis,ch,kafka,minio data; class keycloak,smtp external;

Исходный Mermaid-код схемы: ПД-MER-010. Б.2.2. statistics: авторизация, события, отчёты и аудит.

Каноническое хранилище audit history находится в st-audit и его PostgreSQL.

Б.2.3. inference и extended-inference: медиаконтур и NRI

flowchart TB classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef service fill:#eefaf3,stroke:#15803d,color:#1f2937; classDef data fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; gateway["ui-rest-to-gprc"] cameras["IP-камеры
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: интеграционный контур с системами заказчика

flowchart TB classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef service fill:#eefaf3,stroke:#15803d,color:#1f2937; classDef data fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; gateway["ui-rest-to-gprc
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

flowchart LR classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef domain fill:#eefaf3,stroke:#15803d,color:#1f2937; classDef infra fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; ui["ui-rest"] stats["statistics"] inf["inference"] svr["severstal"] kafka["inf-kafka"] minio["ds-minio"] dts["ds-data-temporary-storage"] dsGateway["ds-domain-gateway"] prom["log-prometheus"] loki["log-loki"] stats <-->|"Kafka"| kafka inf <-->|"Kafka"| kafka svr <-->|"Kafka"| kafka ui -->|"/api/s3*"| minio ui -->|"DTS API"| dts stats -->|"S3 / HTTP"| minio inf -->|"S3 / HTTP"| minio svr -->|"S3 / HTTP"| minio dsGateway --> minio stats -.->|"/metrics"| prom inf -.->|"/metrics"| prom svr -.->|"/metrics"| prom ui -.->|"docker logs"| loki stats -.->|"docker logs"| loki inf -.->|"docker logs"| loki svr -.->|"docker logs"| loki class ui edge; class stats,inf,svr domain; class kafka,minio,dts,dsGateway,prom,loki infra;

Исходный Mermaid-код схемы: ПД-MER-013. Б.2.5. Инфраструктурные домены: kafka-domain, data-storage, elk-log.

Контур наблюдаемости представлен Prometheus и Loki: сервисы передают метрики и логи для эксплуатационного контроля.

Б.2.6. node-red-sandbox: песочница сценариев

flowchart TB classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937; classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937; classDef service fill:#fff1f2,stroke:#be123c,color:#1f2937; classDef data fill:#f5f3ff,stroke:#6d28d9,color:#1f2937; user["Аналитик данных"] box["Основной UI/API BOX5-DIT-MGSN
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. Основания описания

Основание описания: функциональная структура, реестр внешних систем и реестр сервисов/компонентов, приведённые в приложениях А, В и Г текущего документа.