BOX 3.x
Архитектура и сервисы BOX 3.x
Логические слои, ключевые сервисные домены, хранилища и путь данных от камеры до бизнес-события.
На этой странице
Принципы построения
BOX 3.x — распределённая микросервисная система в контейнерной среде Docker Swarm. Референсная топология разделяет комплекс на одну мастер-ноду с интерфейсами, бизнес-логикой и данными и одну или несколько вычислительных нод для обработки видео.
Большинство межсервисных взаимодействий передаётся асинхронно через Apache Kafka. Пользовательские запросы входят через Nginx и React, а слой ui-rest-to-grpc преобразует REST-запросы во внутренние gRPC-вызовы или команды Kafka.
- Docker Swarm
- Одна мастер-нода
- Вычислительные ноды 1…N
- Apache Kafka как центральная шина
- REST-to-gRPC для синхронных запросов
- Изолированные хранилища сервисов
Ключевые домены
Имена отдельных сервисов могут меняться между релизами, поэтому при проектировании нужно учитывать и доменную ответственность, и состав фактически установленной версии.
| Домен | Ответственность | Примеры компонентов |
|---|---|---|
| Видео и inference | Приём потоков, распределение камер, запуск моделей и формирование результатов | inf-mediaserver, inf-load-balancer, inf-inference |
| События и решения | Приём, фильтрация, хранение и обработка событий | st-event-storage, st-event-filter, st-decision-matrix |
| Камеры и доступ | Камеры, наблюдения, пользователи, роли и аудит | st-camera-storage, st-auth, st-access, st-audit |
| Данные и файлы | Временные данные, изображения, видео и объектное хранилище | ds-data-temporary-storage, ds-minio, inf-image-storage |
| Модели и медиаматериалы | Модели ИИ, снимки, видеоархив и фрагменты для отчётов | inf-models-storage, inf-snapshot-processor, va-video-archive, inf-report-video-extractor |
| Отчётность и интерфейсы | Веб-интерфейс, отчёты, уведомления и API | ui-nginx, ui-react, ui-rest-to-grpc, report generators |
Данные и хранилища
Операционные сущности размещаются в PostgreSQL; сервисы статистического домена обычно используют собственный экземпляр или изолированную схему. ClickHouse обслуживает аналитические нагрузки и временные ряды, Redis — сессии, кэш и оперативные состояния. S3-совместимый MinIO хранит изображения, видео и другие файлы.
Конкретная топология, репликация, сроки хранения и размер хранилищ задаются проектом. При интеграции не следует обращаться к внутренним базам напрямую: используйте поддерживаемые API и события.
Путь от камеры до реакции
Камера передаёт поток на вычислительную ноду. inf-mediaserver обслуживает видеопоток, inf-load-balancer распределяет камеры, а inf-inference выполняет детекцию и публикует результаты в Kafka. Сервисы мастер-ноды подписываются на соответствующие топики, фильтруют и сохраняют события в PostgreSQL или ClickHouse, связывают их с медиаматериалами и передают оператору или внешней системе.
- Камера или VMS
- inf-mediaserver
- inf-load-balancer и inf-inference
- Apache Kafka
- Фильтрация и event storage
- Оператор, отчёт или внешняя система
Наблюдаемость
Для диагностики нужен единый маршрут по слоям: доступность камеры, входной поток, обработанный FPS, состояние inference, очередь Kafka, задержка записи, доступность хранилищ и доставка потребителю. Метрики собираются Prometheus, панели и дашборды строятся в Grafana, журналы агрегируются в Loki.
Сбой на последнем экране не обязательно означает проблему интерфейса: проверяйте весь путь события и сопоставляйте его с релизами и изменениями конфигурации.
Синхронные запросы и события: два маршрута
Веб-запрос и результат обработки кадра проходят разными путями. REST-to-gRPC обслуживает запросы интерфейса и интеграционных клиентов; Kafka переносит асинхронные события между сервисами. Имена топиков и состав подписчиков следует сверять с конфигурацией установленного релиза.
- 1Камера / VMS → inf-mediaserver↓ Кадры
Видеопоток поступает на вычислительную ноду.
- 2inf-inference↓ События Kafka
Модель и логика обработки формируют результаты; inf-load-balancer отвечает за распределение камер.
- 3Сервисы статистического домена↓ Запрос API / уведомление
st-event-filter, st-event-storage и st-decision-matrix фильтруют, сохраняют и обрабатывают результаты.
- 4Оператор и интеграции
Клиент получает событие и связанные медиаматериалы через прикладные интерфейсы.
Управляющий маршрут: браузер → Nginx → ui-rest-to-grpc → gRPC-сервис или команда Kafka. Это логическая схема, а не перечень всех топиков.
