Skip to content

Размещение стримов

Стримы распределяет по стримерам лейаутер, подсистема central. Вы добавляете стримеры и заводите стримы, а он решает, какая машина принимает источник стрима, какая хранит копию его архива, какая раздаёт его направлениям доставки. Решение пересчитывается при каждом изменении, а при отказе машины стримы переносятся на живые сами.

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

Размещением управляют три настройки. Неймспейсы делят кластер на непересекающиеся части. Теги задают требования и предпочтения. Лимиты ограничивают, сколько берёт одна машина.

Как распределяются стримы

Что делает лейаутер

  • Назначает роли и пересчитывает назначения. Прогон запускается при изменении входа — добавили стример, завели стрим, поправили настройки. Расписания нет, вручную запускать не нужно.
  • Учитывает возможности стримера. Стриму с архивом нужен стример с архивными дисками, если в его неймспейсе нет DVR-стримера: тогда архив записывает DVR-стример, а стримеру захвата диски не нужны.
  • Учитывает нагрузку. Из подходящих стримеров выбирается менее загруженный по процессору, сети и заполненности архива. Перегруженный стример разгружается переносом стримов.
  • Не переносит стримы без причины. Пока вход не менялся, назначения остаются прежними. Недогруженность соседней машины поводом для переноса не является.

Роли назначений

Роли не выбирают и не включают отдельно. Они следуют из того, что уже настроено: у стрима есть источник — нужен захват, стриму задано число резервных копий архива — появятся копии, в кластере есть эдж-стримеры — появится раздача на эдже, на стримере остался архив перенесённого стрима — появится раздача остатков или чистка. Знать их стоит затем, чтобы читать таблицу назначений на вкладке Лейаут стрима.

Захват (ingest) — основная роль, она есть у каждого работающего стрима. Стример принимает источник стрима, транскодирует его и пишет архив, если они настроены. У стрима один стример захвата. Требования стрима к машине проверяются именно здесь, поэтому большинство причин отказа относится к этой роли.

Запись архива (dvr_record) — архив стрима записывает не стример захвата, а DVR-стример его неймспейса. DVR-стример — обычный стример с включённым тумблером DVR-нода на вкладке Кластер. Назначение одно на стрим и появляется у каждого стрима с архивом, как только в неймспейсе есть DVR-стример. Прямой эфир DVR-стример получает со стримера захвата, как резервная копия.

Раздача на эдже (edge) — стрим раздаётся его получателям с эдж-стримера, а не со стримера захвата. Эдж — обычный стример с включённым тумблером Эдж-нода на вкладке Кластер. Роль назначается каждому стриму на каждом подходящем эдже, отдельно включать её не нужно. Такой стрим не захватывает источник и не пишет архив, а получает готовое от стримера захвата.

Резервная копия архива (dvr_backup) — архив записывается ещё на нескольких стримерах помимо стримера захвата или записи. Сколько копий держать, задаёт поле Резервные копии DVR на вкладке Лейаут. В неймспейсе с DVR-стримером копии размещаются только на DVR-стримерах.

Раздача остатков архива (dvr_parts) — стрим перенесён на другой стример, а записанный архив остался на прежнем. Назначение отдаёт этот архив соседям, поэтому прошлый интервал проигрывается без швов, и стирает его по глубине хранения стрима. Нового стример не пишет: входов стрима у него нет.

Чистка архива (dvr_cleanup) — на стримере лежит архив стрима, а раздавать его нельзя или незачем. Назначение только стирает архив по глубине хранения: входов у стрима нет, соседи с этого стримера не читают. Это слабейшая роль: она достаётся остатку, которому не положена никакая другая. Когда остаток получает раздачу, а когда чистку — в разделе Остатки архива.

Отказоустойчивость

Состояния стримера описаны в списке стримеров, а лейаутер реагирует на них так.

  • Потеря сигнала. Назначения замораживаются — не снимаются, не создаются, новых стримов машина не получает. Короткий сбой не приводит к переносу стримов, и после восстановления связи машина продолжает вести те же.
  • Офлайн. Стримы переносятся на живые машины, как только подходящие находятся.

Раздача на эдже — исключение. Она сохраняется при любом состоянии связи, потому что эдж поднимает стрим по обращению получателя, и снимать назначение из-за молчания незачем. Стример, выведенный из кластера, теряет все назначения.

Остатки архива

Когда стрим перенесён на другой стример, записанный архив остаётся на прежней машине. Central учитывает такой архив как остаток и обслуживает одной из двух ролей, пока не истечёт глубина хранения стрима.

  • Раздача остатков — стример подходит стриму по неймспейсу и тегам, не является эджем, машиной захвата или резервной копии, и у него задан внутрикластерный адрес.
  • Чистка архива — во всех остальных случаях: адреса нет, неймспейс другой, требуемые теги не совпали, стрим выключен, запись у стрима снята. Чистке нужны только роль Стример, архивное хранилище и живая подтверждённая машина. Лимит стримов её не считает.

Вкладка Лейаут стрима после переноса: захват на новом стримере, раздача остатков на прежнем

Раздача, которая положена, но не создана, видна незакрытой потребностью на вкладке Лейаут стрима — обычно с причиной нет пригодного адреса. Чистка вместо раздачи за пределами неймспейса или тегов потребности не даёт: неймспейс и теги сработали как настроены, и роль видна только в таблице назначений. Остаток, не обслуженный даже чисткой, — незакрытая потребность роли чистка архива, например с причиной роль ноды не подходит.

Прежний стример без внутрикластерного адреса: остаток чистится, раздача остатков — незакрытая потребность

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

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

Сироты

Архив, у которого нет стрима, — сирота. Таким остаётся архив удалённого стрима; так же выглядит архив на стримере, вернувшемся в кластер после долгого отсутствия.

Стример сам находит такой архив и докладывает о нём central, а тот назначает чистку с причиной сирота. Делать ничего не нужно: через сутки архив стёрт, место свободно. Если стрим с этим именем существует, архив считается его архивом и обслуживается по его правилам.

У сироты нет страницы стрима. Её назначение видно на странице стримера в срезе стримов: строка с пометкой без документа, роль чистка архива, причина сирота.

Что решил лейаутер

Каждое назначение и каждый перенос лейаутер записывает вместе с причиной — интерфейс отвечает на вопросы «почему этот стрим здесь» и «почему его здесь нет».

Страница Раскладка консоли показывает размещение целиком: карточка последнего прогона — его номер, время, исход и три цифры — и таблица истории прогонов. Прогон, завершившийся нулями во всех цифрах, — штатный: лейаутер пересчитал назначения и ничего менять не пришлось. Кнопка Запустить прогон делает вручную то, что изменение конфигурации делает само; она нужна редко, в основном при разборе.

На вкладке Лейаут стрима та же история рассказана про один стрим: статус размещения, незакрытые потребности, текущие назначения и история решений лейаутера именно для него.

Как влиять на размещение

Настройки стримера живут на вкладке Кластер его страницы.

Вкладка Кластер стримера: роль, неймспейс, лимиты и теги

У стрима свои неймспейс и теги, и задаются они на вкладке Лейаут его страницы — там же, где видны его назначения.

Вкладка Лейаут стрима: неймспейс, теги и число резервных копий архива

Неймспейсы

Неймспейс — жёсткая граница. Стрим назначается только на стримеры с тем же неймспейсом, и никаких исключений между неймспейсами нет. Пустое значение — тоже неймспейс, поэтому стрим без него назначается только на стримеры без него.

Так кластер делят на непересекающиеся части — например, по площадкам. Стримеру неймспейс задаётся на вкладке Кластер, стриму — на вкладке Лейаут.

Теги

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

Тег и неймспейс умеют одно и то же — запрещать размещение — и граница в обоих случаях непересекаема. Разница в масштабе. Неймспейс делит весь кластер: разметить надо всё, и ни один стрим не переедет между частями. Тег привязывает к машинам отдельные стримы и допускает отступление через preferred_. Нужна изоляция всего кластера — берите неймспейс; условие про отдельные стримы — тег.

Стримеру теги задаются на вкладке Кластер, стриму — на вкладке Лейаут. Форма записи решает, что тег означает. Слово fast ниже — просто пример, на его месте может быть любое ваше.

  • fast — свойство. Так помечают машину или стрим, ничего при этом не требуя.
  • required_fast — требование. Стрим с ним назначается только на стример, у которого тег fast тоже есть. Правило действует в обе стороны — стример с required_fast возьмёт только стримы с этим тегом.
  • preferred_fast — предпочтение. При прочих равных выигрывает стример с тегом fast, но при его отсутствии назначение всё равно состоится.

Сверяется само слово, а не форма записи. Требование required_fast удовлетворяет любая из трёх форм на другой стороне — fast, required_fast или preferred_fast. Предпочтение preferred_fast считается так же.

Примеры размещения

Два дата-центра с узким каналом между ними. Пока лейаутер видит кластер целиком, он размещает стримы и их архивные копии на любых машинах: трафик переправки архива идёт через канал между ДЦ, а при отказе площадки её стримы переезжают в другой ДЦ, хотя источники там принять нельзя. Разделите кластер неймспейсами dc1 и dc2 — и каждый стрим со всеми ролями живёт внутри своей площадки. Разметить придётся всё: неймспейс нужен каждому стриму и каждому стримеру, а стример без него стримам dc1 и dc2 недоступен.

Multicast-источник доступен не из каждого ДЦ. Десять нод раскиданы по двум ДЦ, а multicast роутится только внутри своего. Привязывать к площадке нужно один стрим, а не весь кластер — поэтому не неймспейс, а тег: стримерам dc1 и dc2, стриму required_dc1. Остальные стримы по-прежнему размещаются на всём кластере.

SDI-плата воткнута в конкретную машину. Другая машина этот источник принять физически не может. Машинам с платами — тег dektec, стриму — required_dektec: стрим назначится на одну из них, а при отказе перенесётся на другую машину с платой, а не на любую живую. Железо описано на страницах Платы захвата и Приём SDI.

Стриму лучше в своём ДЦ, но переезд допустим. preferred_dc1 держит стрим в первом ДЦ, пока там хватает мощности, и переливает во второй при переполнении. Такое отступление неймспейс выразить не может.

Машина и стрим с несколькими тегами. Тегов у машины и у стрима может быть много: стример в первом ДЦ с платой захвата несёт dc1 и dektec, а стрим с required_dc1 и required_dektec назначится только на такие машины.

Лимиты и нагрузка

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

Три поля на вкладке Кластер задают пределы.

  • Лимит стримов — сколько стримов машине можно нести. Ноль оставляет её в кластере, но пустой.
  • Лимит сети, кбит/с — предел трафика машины. Сверх него лейаутер стримов не добавляет, а при превышении разгружает машину.
  • Лимит DVR, % — занятость архивных дисков, с которой стример считается заполненным.

Пределы ограничивают назначение захвата, записи архива и резервных копий архива. Раздачу на эдже, раздачу остатков и чистку архива они не ограничивают — эти роли назначаются независимо от загрузки машины.

Что дальше

Машины, между которыми размещение распределяет стримы, описаны на странице Стримеры; резервирование самого central, а не стримеров — Группа central на отдельных серверах.