...
Распределение нагрузки по Transcoder узлам
Определение загрузки узла, исходя из загрузки процессора
Если в CDN входят несколько Transcoder узлов с одинаковыми профилями, нагрузка по таким узлам распределяется, исходя из загрузки процессора. Максимально допустимая загрузка конкретного Transcoder узла определяется настройкой
...
Эта величина задает соотношение между средней загрузкой процессора (параметр JVM SystemLoadAverage) и количеством процессорных ядер с учетом гипертрединга. Если значение превышено, Transcoder перестает участвовать в выборе маршрута для новых потоков и профилей. При этом в секции PROFILE данный узел отображается в маршрутах потока для тех профилей, по которым уже транскодируется этот поток.Настройка должна задаваться на Transcoder узлах.
Текущее состояние узла (участвует ли он в выборе маршрута для новых потоков) можно определить при помощи REST API. Узел в статусе NEW_STREAMS_ALLOWED может принимать новые потоки для транскодирования, узел в статусе GROUP_CONNECTION_ALLOWED может только отдавать потоки, которые на нем уже транскодируются.
Настройка должна задаваться на Transcoder узлах. Также эта настройка может задаваться на Origin узлах, в этом случае при помощи REST API можно контролировать загрузку Origin сервера и при достижении статуса GROUP_CONNECTION_ALLOWED публиковать потоки на другом Origin сервере.
Равномерное распределение нагрузки по узлам
Для того, чтобы потоки по доступным Transcoder узлам распределялись равномерно, для транскодирования нового потока выбирается следующий свободный узел (алгоритм Round Robin). При этом, чтобы один и тот же опубликованный поток при одновременном запросе с нескольких клиентов не расходился по нескольким Transcoder узлам, предусмотрено кэширование по имени потока. Интервал времени кэширования задается в миллисекундах при помощи настройки
Code Block | ||
---|---|---|
| ||
cdn_transcoder_for_new_connects_expire_ms=10000 |
В данном случае интервал кэширования составит 10 секунд.
Настройка должна задаваться на Transcoder узлах
Предотвращение транскодирования на Origin
Для того, чтобы Origin узлы не принимали на себя транскодинг, если все Transcoder узлы заняты, предусмотрена настройка
Code Block | ||
---|---|---|
| ||
cdn_origin_allowed_to_transcode=false |
В данном случае (по умолчанию), если для транскодирования нового потока по указанному профилю нет доступных Transcoder узлов, поток не будет играться с ошибкой No available transcoders.
При необходимости, транскодирование на Origin серверах можно разрешить
Code Block | ||
---|---|---|
| ||
cdn_origin_allowed_to_transcode=true |
Эта настройка должна задаваться на Edge узлах.
Получение текущего состояния узла при помощи REST API
...
REST-методы и статусы ответа
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
/cdn/show_nodes |
| 200 – OK 500 – Internal Server Error | Показать состояние узлов CDN |
Параметры
Имя параметра | Описание | Пример |
---|---|---|
globalState | Статус узла: ACTIVE или PASSIVE | ACTIVE |
id | Адрес узла | 192.168.1.64 |
processingState | Участвует ли узел в выборе маршрута для воспроизведения потоков: NEW_STREAMS_ALLOWED - участвует GROUP_CONNECTION_ALLOWED - не участвует | NEW_STREAMS_ALLOWED |
role | Роль узла: ORIGIN, TRANSCODER или EDGE | ORIGIN |
Запрос /cdn/show_nodes может быть направлен определенному узлу, в ответ узел вернет состояния всех видимых ему узлов CDN, кроме себя самого.
...