Кластеризация 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 будет "склеиваться" по всем им, но при этом если у источника есть свои источники, из них уже ничего не подгружается. Такое поведение было введено в Flussonic 21.01.
Однако в случае необходимости вы можете управлять передачей архива по цепочке серверов при помощии параметра remote_dvr
, который нужно добавить после URL-адреса источника:
remote_dvr=nochain
— архив подгружается с ближайшего сервера в цепочке (опрашивается первый уровень edge серверов), без запроса дальше по цепочке (так происходит по умолчанию).remote_dvr=chain
— с рекурсией в источники источников.remote_dvr=none
— не обращаться к другим источникам, кроме текущего, с целью экономии.
Обращения по цепочке серверов могут привести к зацикливанию, поэтому использовать эту возможность нужно с осторожностью.