Платформа
ForgeVis записывает видео сам по себе. Платформа — это то, что добавляется, когда одного рекордера становится мало: база данных вместо файлов конфигурации, веб-интерфейс вместо SSH и кластеры вместо серверов, которые держат в голове.
Это дополнение, а не зависимость. Ничего из описанного ниже не меняет то, как работает рекордер, — меняется лишь то, кто говорит ему, что записывать.
Три варианта и как понять, какой ваш
Решает не число камер. Решает то, где живёт список камер, — и каждый ответ тянет за собой следующую часть.
| Камеры заданы в | Нужна БД | Нужна платформа | |
|---|---|---|---|
| Standalone | config.yaml | нет | нет |
| Standalone + БД | таблице cameras | да | да — схема принадлежит ей |
| Кластер | таблице cameras, распределение через консенсус | да | да |
Standalone
Один сервер, камеры в файле конфигурации, изменения подхватывает файловый watcher. Для одного объекта это и есть весь продукт, и ничего с этой страницы ему не нужно — руководство описывает его целиком.
Standalone с базой данных
Список камер переезжает из файла в PostgreSQL. Рекордер читает камеры, у которых node_name совпадает с его собственным, и узнаёт об изменениях через триггер уведомлений.
Вот здесь платформа и становится необходимой, по причине, которую стоит назвать прямо: рекордер этой схемой не владеет. Он читает две таблицы и не создаёт ни одной. Кто-то должен их построить, поддерживать миграции и дать способ править строки, отличный от psql, — и этот кто-то бекэнд.
Кластер
Несколько рекордеров держат общее состояние через консенсус Raft и сами решают, какая нода пишет какую камеру. Камеры упавшей ноды переезжают на живые без звонка дежурному.
Здесь рекордер загружает все включённые камеры, а записывает только те, что ему назначил кластер. Отсюда следует, что кластерная нода без кластера — это не standalone-сервер: нет членства — нет назначений, нет назначений — нет записи. cluster.enabled нельзя включить наполовину.
Что делает каждая часть
Бекэнд
API и владелец базы данных.
- Владеет схемой. Таблицы, индексы и миграции — его, включая те две таблицы, которые читает рекордер. Миграции применяются до старта рекордеров, см. Общая база данных.
- Объекты, камеры, тенанты, лицензии.
- Обращается к нодам. Состояние, метрики, состав кластера, сертификаты.
- Выпускает сертификаты кластера. У каждого кластера свой удостоверяющий центр; бекэнд хранит его приватный ключ зашифрованным и подписывает то, что запрашивают ноды. См. Добавление нод.
Control Plane
Интерфейс оператора — парк серверов и кластеры, собранные из него.
Добавить сервер, собрать кластер, повысить ноду до voter, вывести её в drain перед обслуживанием — всё здесь, ничего через SSH.
Что входит в поставку
Обзор и Контуры завершены и включены. Объекты, камеры, тенанты, лицензии, биллинг, брендирование и журнал действий есть в коде, но выключены: модуль становится видимым, когда все его части делают то, что обещает интерфейс. Пока модуль лицензий выключен, лицензия ставится руками — файл forgevis.lic кладётся рядом с config.yaml на ноде.
Что при этом не меняется
Рекордер продолжает работать так же, как работал.
- Видео через платформу не идёт. RTSP, HLS и WebRTC отдаёт сама нода, напрямую клиенту. Платформа — путь управления, а не путь данных: потеря платформы стоит вам интерфейса, а не записи.
- У ноды остаётся своя аутентификация. Платформа представляется ноде машинным пользователем из её же
security.users— тем же механизмом, что и оператор. - Транскодирование нигде не появляется. H.264 и H.265 по-прежнему проходят насквозь.
Дальше
- Общая база данных — кто владеет схемой и в каком порядке всё должно стартовать.
- Добавление нод — учётные данные, сертификаты и сборка кластера.
- Кластеризация и HA — та же тема со стороны рекордера.