...
Настройка должна задаваться на Transcoder узлах. Также эта настройка может задаваться на Origin узлах, в этом случае при помощи REST API можно контролировать загрузку Origin сервера и при достижении статуса GROUP_CONNECTION_ALLOWED публиковать потоки на другом Origin сервере.
Равномерное распределение нагрузки по узлам
...
Ограничение количества кодировщиков (encoders) видео на Transcoder узлах
При необходимости, на Transcoder узлах может быть ограничено максимальное количество одновременно используемых кодировщиков (encoders) видео при помощи настройки
Code Block | ||
---|---|---|
| ||
cdn_transcoder_forvideo_new_connects_expire_ms=10000 |
...
encoders_threshold=10000 |
При достижении этого количества, узел Transcoder переходит в статус GROUP_CONNECTION_ALLOWED. Учитываются все кодировщики на сервере, например, если один поток транскодируется по двум профилям, будет использовано 3 кодировщика, включая кодировщик PNG.
Настройка должна задаваться на Transcoder узлах
...
Равномерное распределение нагрузки по узлам
Для того, чтобы Origin узлы не принимали на себя транскодинг, если все Transcoder узлы заняты, предусмотрена настройка
Code Block | ||
---|---|---|
| ||
cdn_origin_allowed_to_transcode=false |
В данном случае (по умолчанию), если для транскодирования нового потока по указанному профилю нет доступных Transcoder узлов, поток не будет играться с ошибкой No available transcoders.
При необходимости, транскодирование на Origin серверах можно разрешитьпотоки по доступным Transcoder узлам распределялись равномерно, для транскодирования нового потока выбирается следующий свободный узел (алгоритм Round Robin). При этом, чтобы один и тот же опубликованный поток при одновременном запросе с нескольких клиентов не расходился по нескольким Transcoder узлам, предусмотрено кэширование по имени потока. Интервал времени кэширования задается в миллисекундах при помощи настройки
Code Block | ||
---|---|---|
| ||
cdn_transcoder_for_originnew_allowedconnects_toexpire_transcodems=true |
...
10000 |
В данном случае интервал кэширования составит 10 секунд.
Настройка должна задаваться на Edge Transcoder узлах.
Получение текущего состояния узла при помощи REST API
Для получения информации о состоянии узла используется REST API запрос /cdn/show_nodes
REST-запрос должен быть HTTP/HTTPS POST запросом в
Предотвращение транскодирования на 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-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://test.flashphoner.com:8081/rest-api/cdn/show_nodes
- HTTPS: https://test.flashphoner.com:8444/rest-api/cdn/show_nodes
...
- test.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательная часть URL
- /cdn/show_stream_routesnodes - используемый REST-метод
...
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
/cdn/show_nodes/show_nodes |
| 200 – OK 500 – Internal Server Error | Показать состояние узлов CDN | ||||||||
/cdn/show_node_state |
| 200 – OK 500 – Internal Server Error | Показать состояние узла CDN, которому направлен запрос | ||||||||
/cdn/enforce_node_state |
| 200 – OK 500 – Internal Server Error | Принудительно изменить состояние узла |
Параметры
Имя параметра | Описание | Пример |
---|---|---|
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, кроме себя самого.
Запрос /cdn/enforce_node_state позволяет принудительно изменить состояние узла, например, вывести определенный транскодер из выбора маршрутов. Для сброса заданного состояния необходимо передать пустое тело запроса
Code Block | ||||
---|---|---|---|---|
|
...
POST /rest-api/cdn/enforce_state HTTP/1.1 Content-Length: 4 |
...
|
...
Content-Type: application/json |
...
|
...
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
{} |
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
200 – OK
500 – Internal Server Error
...
Показать состояние узлов CDN
Параметры
...
Имя параметра
...
Описание
...
Пример
...
globalState
...
Статус узла: ACTIVE или PASSIVE
...
ACTIVE
...
id
...
Адрес узла
...
192.168.1.64
...
Участвует ли узел в выборе маршрута для воспроизведения потоков:
NEW_STREAMS_ALLOWED - участвует
GROUP_CONNECTION_ALLOWED - не участвует
...
NEW_STREAMS_ALLOWED
...
ORIGIN
...
Вычисление текущего состояния узла и его рассылка
Текущее состояние узла определяется следующим образом в порядке приоритета:
1. Если есть значение, заданное принудительно при помощи запроса /cdn/enforce_node_state, то выбирается это значение.
2. Если достигнуто ограничение по нагрузке процессора, то выбирается состояние GROUP_CONNECTIONS_ALLOWED.
3. Если достигнуто ограничение по кодировщикам видео, то выбирается состояние GROUP_CONNECTIONS_ALLOWED.
4. Если ограничения не достигнуты, то выбирается состояние NEW_STREAMS_ALLOWED.
Узел рассылает свое состояние другим узлам с периодичностью, заданной в миллисекундах при помощи настройки
Code Block | ||
---|---|---|
| ||
cdn_nodes_state_refresh_interval=60000 |
По умолчанию, периодичность рассылки составляет 60 секунд. Для Transcoder узлов рекомендуется уменьшить это значение до 1 секунды, чтобы своевременно распределять потоки на другие узлы.
Авторизация узлов в CDN
Авторизация узлов, которые пытаются подключиться к CDN, производится по IP-адресу. Адреса узлов, которые могут войти в CDN, должны быть указаны в следующей настройке
...