Размещение стримов¶
Стримы распределяет по стримерам лейаутер, подсистема 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, % — занятость архивных дисков, с которой стример считается заполненным.
Пределы ограничивают назначение захвата и резервных копий архива. Раздачу на эдже и раздачу остатков архива они не ограничивают — эти роли назначаются независимо от загрузки машины.
Что дальше¶
Что лейаутер решил и почему стрим оказался там, где оказался, показывает Состояние размещения.