Pull to refresh

130 тысяч камер видеонаблюдения – как заставить их работать?

Reading time 8 min
Views 50K
Привет, Хабр! Хотим снова поблагодарить вас за отличную обратную связь, на ряд ваших вопросов мы дадим развёрнутые ответы, в том числе – подробно расскажем про инфраструктуру нашей системы. Мы и сами подумывали в скором времени сделать такой пост, но раз вы тоже высказали интерес к данной тематике, то мы немного форсировали процесс.


Под катом – сразу к делу.

Архитектура системы построена по модульному принципу, что является стандартом для систем такого масштаба. Но есть одно существенное отличие: этих модулей в системе не просто много, а очень много. Каждый модуль выполняет отдельные узкоспециализированные задачи, связанные с получением видеоизображений и информации от городских и ведомственных информационных систем (ИС), управлением доступом к обрабатываемым данным, предоставлением фото- и видеоизображений пользователям ЕЦХД и различным внешним потребителям, в том числе жителям города.

Модули тесно взаимодействуют между собой на основе различных технологий (в основном – JSON, REST API и SOAP). Сами модули реализованы на различных языках (Java, C#, Java Script и другие), с использованием фреймворков (ASP.NET Web API, WCF, NLog, Entity Framework, MySQL ADO.NET managed drivers, Unity 3, EPPlus, Json.NET, EmitMapper, DotNetZip, jQuery, knockoutjs, Moment.js, underscore.js и так далее).

Всё это программное разнообразие функционирует под управлением различных операционных систем (Windows Server, SUSE Linux Enterprise Server, CentOS и другие) в среде виртуализации VMware vSphere 5.

Архитектура системы приведена на схеме:



Все модули имеют собственные механизмы отказоустойчивости и балансировки. Для этого используются кластерные технологии, различные варианты балансировки HTTP-запросов на основе nginx, а также управление очередями и приоритетами на прикладном уровне. Кроме того, все модули объединены по принципу слабой связности, что существенно повышает возможности развития и модификации системы в целом.

Данный подход позволяет сделать систему не только масштабируемой, но и очень гибкой в части реализации новых технологических процессов или внесения изменений в существующие, так как каждый модуль может развиваться самостоятельно, и поддержка обратной совместимости модуля является обязательным требованием.

Описание основных компонентов системы


Видеоядро, обеспечивающее получение и обработку видеопотоков, представляет собой несколько сотен видеосерверов, работающих на ресурсах выделенных виртуальных машин под управлением Linux, обеспечивающих приём видеотрафика с более чем 145 тысяч камер, кодеров и других систем формирования видеопотока. Приём трафика осуществляется по протоколу RTSP (видео в формате H.264), схема приёма трафика может использоваться различная – на постоянной основе с настраиваемой глубиной записи (периодом хранения), или по запросу в случае необходимости простого просмотра видео. Такой гибкий подход позволяет экономить как серверные ресурсы, так и снижать загруженность каналов связи.

В качестве протокола транспортного уровня в основном используется TCP, но в ряде случаев может использоваться и UDP. Видеосервера выполняют несколько задач:

Основную: получение видеопотока, его запись и последующую выдачу потокового или архивного видео серверам ретрансляции или долговременное хранение части архивного видео на отдельном выделенном хранилище;
Ряд дополнительных: контроль доступности видеоисточника, контроль получения и соответствия видеопотока заданным параметрам (fps, bitrate, потери пакетов), а также через специализированные шины обмена данными информация от видеосерверов поступает в систему контроля оказания услуги для последующего учёта и передачи в службы эксплуатации.

Управление видеосерверами осуществляется через специализированный HTTP API, позволяющий полностью автоматизировать работу через управляющие системы. Функционирование видеосерверов контролируются через Zabbix, с использованием дополнительных внутренних механизмов видеосерверов.

Рестримминг – сервера ретрансляции – связующее звено между видеоядром (осуществляющим первичный приём видео и его запись) и пользователями (по сути основными потребителями видеоконтента). Встроенные механизмы реинкапсуляции и дистрибуции потокового видео позволяют обеспечивать ретрансляцию «живого» и архивного видеоконтента на ПК и портативные устройства (планшеты, телефоны). Рестримминг также может обеспечивать потоковую выдачу видеоконтента по RTSP для дополнительных систем, например, для систем видеоаналитики или системы управления транскодированием – ведь пользователям иногда требуется и «сжатый» видеопоток, если вдруг «просел» канал, а посмотреть видео очень хочется :) Также пользователи могут воспользоваться и специальным режимом просмотра в виде слайдшоу. Сервера ретрансляции работают в кластере и поддерживают режим динамического резервирования, а также изолируют видеоядро от возможных всплесков создаваемой пользователями нагрузки.

Пользовательский интерфейс – веб-интерфейс (front-end) обеспечивает авторизованный доступ для нескольких десятков тысяч зарегистрированных пользователей к системе видеонаблюдения и предоставляющий широкий набор различных функциональных возможностей, доступных из любой точки внутригородской сети, а в ряде случаев и через закрытые выделенные Интернет-ресурсы.

Работа обеспечивается в среде различных операционных систем (Windows, MacOS, Linux) на всех основных браузерах, что существенно упрощает организацию рабочих мест. Также поддерживается работа и с ряда мобильных устройств, например, на базе iOS.

Функциональные возможности достаточно разнообразны – начиная от обычного просмотра потокового и архивного видео (через flash-плеер на ПК, и нативные средства на iOS) и управления PTZ-функциями камер, поисковых механизмов с привязками к различным слоям картографии и интеграции с данными городских систем, и до использования гибкой ролевой модели, формирования персонального представления пользовательского интерфейса и встроенных механизмов обучения пользователей.

Front-end использует такие технологии как RequireJS, knockout, lodash, leaflet и другие. Back-end построен по модульному принципу, позволяющему обеспечивать необходимый уровень резервирования и масштабирования компонентов, используется система управления конфигурациями. ПО и технологии: Java/Tomcat, MariaDB, RabbitMQ и ряд других.

Шлюз интеграции – набор модулей подсистем, обеспечивающих изоляцию внешних потребителей информации от ядра системы. Выдаёт различную информацию внешним системам после прохождения авторизации и учётом заданных полномочий (т.е. доступного объёма данных и функциональных возможностей). Функционирует три основных логических компонента:

  • Компонент сервисного взаимодействия – это HTTP API, через который обеспечивается выдача заданного набора информации (наименования камер, адреса и координаты размещения, скриншоты и другая сопроводительная информация).

  • Компонент ретрансляции – предназначен для минимизации нагрузки на видеоядро и предоставления трансляции видеопотоков внешним системам (поддерживается вещания на flash, а также HLS для iOS-устройств). Видеоядро и сервера рестримминга обладают функциональностью CDN, а данный компонент работает как дополнительное CDN-звено распространения видеоконтента.

  • Компонент предоставления интерфейса – предназначен для встраивания во внешние системы в качестве готового интерфейса воспроизведения потоковой и архивной видеоинформации, например, путём встраивания через iframe и простой кастомизации (настройки визуального представления – цвета, необходимые функциональные кнопки и т.п.) через простые параметризированные вызовы.

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



Для предоставления пользователям доступа к камерам системы видеонаблюдения существует целый комплекс взаимосвязанных компонентов, обеспечивающих аутентификацию и авторизацию пользователей, приоритезацию доступа к функциям PTZ-управления, протоколирование действий пользователей и взаимодействие отдельных модулей.

Система поддерживает два вида аутентификации: с использованием учётных записей пользователей ЕЦХД и с использованием единой городской системы управления доступа к ресурсам (фактически, это возможность SSO для общегородских ИС). При этом, для одного физического пользователя, возможно совместное использование различных видов аутентификации. Ключевая аутентификационная информация пользователей ЕЦХД хранится в Active Directory, а вся дополнительная информация – в БД Microsoft SQL.

Все пароли, разумеется, передаются между модулями в зашифрованном виде. Или не передаются вообще, так мы тоже умеем :)

Предоставление полномочий и приоритетов доступа реализовано на основе единой для всех модулей ролевой модели, которая позволяет предоставлять доступ не только к камерам видеонаблюдения, но и к отдельным функциям системы. На текущий момент в системе существует более 100 различных полномочий: доступ к «живой» трансляции, возможность просмотра и экспорта архива фото- и видеоизображений, PTZ-управление, внесение изменений в отдельные системные реестры и справочники, создание расписания для получения снимков, создание маршрутов патрулирования, возможность доступа с мобильных устройств и многое другое. Система постоянно развивается, подключаются новые группы пользователей со своими задачами, и добавление новых полномочий в систему происходит, фактически, на лету.

Дополнительно существует несколько уровней приоритетов для различных групп пользователей и системных сервисов, что позволяет избегать конфликтов между различными группами пользователей и «прозрачно» перехватывать PTZ-управление камерами, обеспечивать управление в режимах патрулирования или перемещать зону обзора по расписанию.

Для того чтобы быстро и просто предоставлять полномочия для десятков тысяч пользователей и управлять ими, в системе применяются различные механизмы: назначение полномочий на группы пользователей, использование шаблонов с предопределенными типовыми полномочиями, смарт-группы (когда на основе заданных правил новые пользователи автоматически распределяются по группам). Аналогичные механизмы применяются для управления реестрами камер, но распределение по группам, в основном, реализовано по географическому принципу, типу услуги или принадлежности к ведомственной системе видеонаблюдения.

Контроль доступа осуществляется практически в режиме реального времени, и любое изменение состава полномочий моментально сказывается на пользователе. Дополнительно для контроля времени жизни ссылок на «живые» видеопотоки используются сессионные механизмы валидации на основе токенов. Кстати, именно отсутствие этого механизма в тестовом сервисе для жителей города и позволило получить доступ к «просроченным» ссылкам на видеопотоки.

В системе зафиксируются все действия пользователя и взаимодействие модулей на всех уровнях, что позволит проводить анализ любой ситуации. Система протоколирования фиксирует дату и время события, какие действия выполнил пользователь (вплоть до нажатия кнопок интерфейса), какие задания планировщика выполнялись в системе, чем завершился информационный обмен и многое другое. На текущий момент в системе зафиксировано более 10 млрд. записей о выполнении «технологических» процессов, каждая из которых состоит из нескольких отдельных протоколируемых действий. Сотрудники ДИТ ежедневно получают статистику, позволяющую определить активность пользователей в различных разрезах: какими порталами пользовались, количество просмотров «живых» трансляций, по каким группам камер было наибольшее количество запросов и т.п.

В качестве «вишенки на торте», система видеонаблюдения в цифрах:

Количество камер: более 145 тысяч;
Количество пользователей: более 10 тысяч;
Объём сетевого видеотрафика: около 120 Гбит/с;
Объём системы хранения: 20 Пбайт.

Официальная страничка системы тут. Можно посмотреть технические характеристики камер, узнать, как действовать в случае происшествия, которое могло попасть в объектив, и посмотреть несколько камер в публичных местах с помощью сервиса «Окно в город».

Читайте также в нашем блоге на Хабре:
» Хабраэффект для 130 000 камер Москвы
» Информационные технологии кормят более 750 тысяч человек в Москве
» Блог департамента информационных технологий города Москвы на «Хабрахабре»

Спасибо за внимание!
Tags:
Hubs:
+34
Comments 51
Comments Comments 51

Articles

Information

Website
dit.mos.ru
Registered
Employees
51–100 employees
Location
Россия