Skip to content

Кластеризация DVR

Задача хранения архива в распределенной среде видеодоставки создает несколько проблем:

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

Самый простой вариант зеркалирования DVR — включить DVR на источнике и на вторичных серверах.

Кластеризация DVR в Flussonic включается очень просто: достаточно забирать через директиву source:

cluster_key abcd;
source streamer:8081 {
  dvr /storage 2d;
}

При этом локальный сервер даже с выключенным DVR начнет отвечать на DVR запросы (не по всем протоколам), забирая недостающее видео с источника.

Важной особенностью Flussonic является возможность использования отдельного сегментного кэша на SSD для снятия нагрузки. Обычно на последние сутки видео приходится до 90% всех просмотров, поэтому при вещании масштабных событий можно использовать SSD для снятия нагрузки с HDD:

stream example {
   input fake://fake;
   dvr /storage 80d;
   cache /storage/cache 2d 800G;
}

При использовании кластеризации DVR можно не указывать сторадж на вторичных серверах, а указать только сегментный кэш:

cluster_key abcd;
source streamer:8081 {
   cache /storage/cache 2d 400G;
}

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

Склеивание DVR с разных серверов

При работе в кластере или с несколькими источниками потока Flussonic объединяет DVR архив, запрошенный со вторичного сервера (restreamer or edge server), с основным архивом (origin or source server). Цель состоит в том, чтобы DVR оставался доступным при отказе источника и переключении на запасной источник.

Если у вас несколько M4F источников потока и кластер с несколькими звеньями в цепочке серверов (DVR — Cache — Edge), могут потребоваться настройки опроса серверов для получения архива. Об этом рассказывает данный раздел.

Мы рассмотрим кластер, содержащий:

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

Архив DVR потока записывается и хранится на исходном сервере, а Edge серверы используются только для доставки потока конечным пользователям и обеспечивают высокую пропускную способность. Мы рассмотрим архитектуру, где в цепочке Edge серверов два звена.

По умолчанию Flussonic ищет данные DVR на всех настроенных источниках потока, но без обхода всех звеньев цепочки (то есть без подключения к дополнительным уровням в цепочке Edge серверов). Если у потока несколько M4F источников, DVR будет "склеиваться" по всем им, но при этом если у источника есть свои источники, из них уже ничего не подгружается.

Однако в случае необходимости вы можете управлять передачей архива по цепочке серверов при помощии параметра remote_dvr, который нужно добавить после URL-адреса источника:

  • remote_dvr=nochain — архив подгружается с ближайшего сервера в цепочке (опрашивается первый уровень edge серверов), без запроса дальше по цепочке (так происходит по умолчанию).
  • remote_dvr=chain — с рекурсией в источники источников.
  • remote_dvr=none — не обращаться к другим источникам, кроме текущего, с целью экономии.

Обращения по цепочке серверов могут привести к зацикливанию, поэтому использовать эту возможность нужно с осторожностью.