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 {
   url 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 — не обращаться к другим источникам, кроме текущего, с целью экономии.

Пример:

Настройки потока на server1.example.com (origin):

stream test_1 {
  url fake://fake;
  dvr /storage 6h;
}
stream test_2 {
  url fake://fake;
  dvr /storage 6h;
}

Настройки потока на server2.example.com (Edge):

stream test_1 {
  url m4f://server1.example.com/test_1;
  dvr /storage 3h;
}

stream test_2 {
  url m4f://server1.example.com/test_2;
  dvr /storage 3h;
}

Настройки потока на server3.example.com (Edge) (дублирует server2.example.com):

stream test_1 {
  url m4f://server1.example.com/test_1;
  dvr /storage 3h;
}

stream test_2 {
  url m4f://server1.example.com/test_2;
  dvr /storage 3h;
}

Настройки потока на server4.example.com (Edge):

stream test {
  url m4f://server2.example.com/test_1 remote_dvr=chain;
  url m4f://server3.example.com/test_2 remote_dvr=nochain;
  dvr @plain 1h;
}

Чтобы настроить конфигурацию, соответствующую поведению версий Flussonic до 21.01, добавьте remote_dvr=chain к одному из m4f адресов (с осторожностью к нескольким) и remote_dvr=none ко всем остальным URL-адресам.

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