CDN 2.3 дает следующие дополнительные возможности по сравнению с CDN 2.1 и 2.2:
CDN 2.3 позволяет ограничить двойное транскодирование одного и того же входящего в CDN потока на двух и более транскодерах одной группы. Такое может происходить в крупных CDN с большими объемами входящего и исходящего медиа трафика при одновременном подключении большого числа подписчиков. В результате создается излишняя нагрузка на транскодеры, которая может приводить к выходу серверов из работы.
Для решения этой проблемы, в каждой группе выделяется специальный узел с ролью Controller, который получает информацию о потоках от всех узлов CDN и собирает ее текущее состояние. Узлы с ролью Edge должны обращаться к узлу Controller, при его наличии, для определения маршрута воспроизведения потока. Если поток уже транскодируется на каком-либо из узлов Transcoder, узел Controller не позволяет строить маршрут для этого потока через другой транскодер. Если узел Controller недоступен, Edge строит маршрут для воспроизведения потока по алгоритму CDN 2.1.
Узел Controller не должен использоваться для публикации или воспроизведения потока.
Роль Controller назначается узлу при помощи настройки
cdn_role=controller |
На узле Edge определяется таймаут запроса к узлу Controller при помощи параметра
cdn_controller_request_timeout=5000 |
Таймаут задается в миллисекундах, по умолчанию значение установлено в 5000 мс.
Длительность кэширования ответов узла Controller на запросы к нему задается на узле Edge при помощи параметра
cdn_controller_response_cache_expire=10000 |
Кэширование задается в миллисекундах, по умолчанию значение установлено в 10000 мс.
Настройки таймаута и кэширования должны задаваться только на Edge узлах.
Проверка двойного транскодирования проводится при помощи REST запроса к узлу Edge.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
Здесь:
REST запросы необходимо отправлять на Edge сервер.
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | |
---|---|---|---|---|---|
/cdn/show_redundant_transcodings |
| 200 – Redundant transcoding found 404 - No redundant transcoding | Проверить двойное транскодирование |
Описание | Пример |
---|---|
Имя потока |
|
Список узлов, на которых транскодируется поток | 192.168.1.17,192.168.1.18 |
В сборке 5.2.471 в статистику, в CLI и в REST API добавлен либо дополнен вывод информации о CDN, в которой участвует данный сервер
Команда интерфейса командной строки WCS
show cdn-nodes |
отображает версию CDN, поддерживаемую каждым узлом, и группу, в которую входит узел:
Ip State Processing state Role Version Group ------------------------------------------------------------------ 192.168.0.102 ACTIVE NEW_STREAMS_ALLOWED TRANSCODER 2.3 null 192.168.0.187 ACTIVE NEW_STREAMS_ALLOWED EDGE 2.3 null |
При этом для узла в статусе ACTIVE отображается версия CDN, которая получена от узла в результате согласования версий, для узла в статусе PASSIVE - версия, заданная в настройках текущего узла (см ниже)
REST API запрос /cdn/show_nodes возвращает версию CDN, поддерживаемую каждым узлом
[ { "version": "2.3", "role": "TRANSCODER", "globalState": "ACTIVE", "processingState": "NEW_STREAMS_ALLOWED", "id": "192.168.0.102" }, { "version": "2.3", "role": "EDGE", "globalState": "ACTIVE", "processingState": "NEW_STREAMS_ALLOWED", "id": "192.168.0.187" } ] |
ПриП этом для узла в статусе ACTIVE отображается версия CDN, которая получена от узла в результате согласования версий, для узла в статусе PASSIVE - версия, заданная в настройках текущего узла (см ниже)
С точки зрения узлов CDN предыдущих версий, узел Controller представляет собой Origin сервер
Узлы CDN 2.1 буду выбирать маршруты воспроизведения потоков без участия узла Controller, даже если он присутствует в группе.
Начиная со сборки 5.2.471, согласование версий CDN работает следующим образом: при установке соединения для CDN сигналинга, узлы отправляют друг другу поддерживаемую версию CDN. Если версии различаются, узел с большей версией понижает ее до меньшей. Например, если в CDN 2.2 вводится Edge с версией 2.3, он будет отправлять другим узлам только сообщения, совместимые с версией 2.2. С точки зрения всей CDN данный Edge сервер будет выглядеть, как поддерживающий версию 2.2.
Чтобы избежать потери согласования версий при разрывах связи между узлами, каждый узел периодически рассылает другим узлам свою версию. Интервал рассылки указывается в миллисекундах при помощи настройки
cdn_nodes_version_refresh_interval=90000 |
По умолчанию, период рассылки версии составляет 90 секунд.
Если узел перешел в статус PASSIVE в результате потери связи с ним, либо явного назначения статуса REST запросом /cdn/enforce_state, обмен сообщениями с таким узлом прекращается. Остальные узлы будут предполагать, что узел в статусе PASSIVE поддерживает версию CDN, указанную настройкой
cdn_force_version=2.0 |
По умолчанию, узлам в статусе PASSIVE назначается версия CDN 2.0.
Например, если в CDN 2.3 один из Edge узлов теряет связь с остальными, узлы CDN будут предполагать, что данный Edge поддерживает версию CDN 2.0 до тех пор, пока этот Edge вновь не подключится к CDN и не пройдет процедуру согласования версий.
Для того, чтобы узел Edge выбирал маршрут воспроизведения потоков при помощи узла Controller, эти узлы должны принадлежать к одной группе, и эта группа должна быть определена явно в настройках CDN:
cdn_groups=g1 |
Узел Controller строит маршруты только через транскодеры своей группы.
Узел Controller, для которого группа не определена, не участвует в определении маршрутов.