Skip to content

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Неймспейсы

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

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

Теги

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

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

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

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

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

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

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

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

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

Что дальше

Что лейаутер решил и почему стрим оказался там, где оказался, показывает Состояние размещения.