Skip to content

Внутрикорпоративная CDN

Внутрикорпоративная CDN в Agora используется для доставки потока в удаленные офисы и сегменты корпоративной сети, где прямое вещание с центрального origin-сервера создает лишнюю нагрузку на медленные или дорогие каналы связи.

В этом режиме Agora направляет зрителя не сразу на центральный origin, а на подходящий рестример внутри его сетевой зоны. Благодаря этому один и тот же поток доставляется в удаленный офис один раз, а дальше раздается локально через рестример.

Как работает CDN в Agora

В схеме внутрикорпоративной CDN используются следующие сущности:

  • origin-стримеры - исходные узлы, на которых поток принимается или формируется в Agora;
  • restreamer - узел раздачи, который получает поток от origin и обслуживает зрителей внутри своей зоны;
  • zone - логическая зона корпоративной сети, обычно удаленный офис;
  • CIDR-маршруты - правила, по которым IP-адрес зрителя сопоставляется с зоной;
  • fallback zone - резервная зона, которая используется, если в основной зоне нет доступных рестримеров.

Зритель открывает ссылку на поток в браузере. Agora определяет IP-адрес клиента, находит подходящую зону, выбирает в ней доступный рестример с минимальной текущей нагрузкой и отдает клиенту адрес воспроизведения.

Если в зоне нет доступных рестримеров, Agora использует резервную зону. Если IP-адрес клиента не попал ни в одно правило маршрутизации, CDN-маршрутизация для этого клиента не применяется.

Когда администратору нужно настраивать CDN

CDN настраивают в тех случаях, когда:

  • сотрудников много и один origin не справится с раздачей
  • сотрудники смотрят одни и те же live-потоки из удаленных филиалов;
  • между центральной площадкой и филиалом есть медленный приватный канал;
  • нужно уменьшить количество одновременных подключений к центральному origin;
  • необходимо закрепить определенные диапазоны IP-адресов за локальными узлами раздачи.

Что нужно подготовить заранее

Перед настройкой CDN администратор подготавливает:

  • хотя бы один рабочий origin-стример, на котором уже доступен поток;
  • хотя бы один сервер, который будет зарегистрирован как restreamer;
  • сетевые диапазоны филиалов или офисов в формате CIDR, например 10.20.30.0/24;
  • внешний адрес раздачи для каждого рестримера, который будет использоваться зрителем, например https://edge-1.office.example;
  • при необходимости резервную зону для аварийного переключения.

Перед настройкой CDN надо убедиться, что origin-стримеры уже видны в разделе Стримеры, находятся в рабочем состоянии.

Порядок настройки CDN

Рекомендуемый порядок настройки:

  1. Настроить origin-стримеры.
  2. Создать зоны.
  3. Настроить CIDR-маршруты зон.
  4. Указать резервные зоны при необходимости.
  5. Настроить рестримеры.
  6. Назначить рестримеры в зоны.
  7. Проверить выдачу конфигурации рестримерам.
  8. Проверить viewer portal из нужной сети.

Именно такой порядок уменьшает количество ошибок, связанных с пустыми зонами, незаполненными адресами раздачи и неправильной маршрутизацией клиентов.

Раздел Streams: список потоков

Список потоков в админке: пример потока test-stream

Потоки создаются и редактируются в разделе Streams левого меню. Для сценария CDN на origin должен быть настроен хотя бы один поток, который зрители будут открывать через viewer portal и balancer. Подробнее о настройке потоков см. в разделе Потоки.

Создание зоны

Зона описывает отдельный офис, филиал или сетевой сегмент, где зрители должны обслуживаться через локальный рестример.

В карточке зоны администратор задает:

  • name;
  • fallback zone, если нужен резерв;
  • список CIDR-маршрутов;
  • опцию «Пропускать проверку живости стримера» (skip_streamer_healthcheck в API): если она включена, встроенный balancer при маршрутизации в эту зону выбирает рестример без требований к свежей статистике и успешному healthcheck на рёбре. Отключённые (disabled) рестримеры по-прежнему не участвуют. У резервной зоны своё значение этой опции. Имеет смысл только для лабораторных проверок CDN, без продакшена с реальными зрителями.

Название зоны должно быть уникальным и понятным, например:

  • msk-office-1;
  • spb-office;
  • plant-a;
  • vpn-users.

Резервная зона используется, если в основной зоне нет ни одного доступного рестримера.

Раздел Zones: список зон (пример office1, office2)

Карточка зоны: маршрут, резерв и опция пропуска проверки живости (пример office1)

На скриншоте карточки показан пример зоны с сохранённым CIDR, без резервной зоны и с включённой опцией «Пропускать проверку живости стримера» для лабораторной проверки.

Настройка CIDR-маршрутов

Маршруты в зоне задаются в формате CIDR.

В admin API каждый маршрут передаётся полями address (строка — IPv4-адрес сети в dot notation, например 10.0.0.0) и mask (целое число — длина префикса, как в CIDR: 24 для /24). Внутреннее хранение в базе может отличаться; на границе API используется именно строка с точками между октетами. Запись вида 10.0.0.0/24 в интерфейсе админки можно разобрать на эту пару полей.

Примеры корректных маршрутов:

  • 10.12.13.0/24;
  • 10.12.0.0/16;
  • 192.168.100.0/24;
  • 0.0.0.0/0.

Agora сопоставляет IP-адрес зрителя с маршрутами всех зон и выбирает правило с самой длинной маской. Это означает, что более специфичное правило имеет приоритет над более общим.

Например:

  • зона Office-A содержит маршрут 10.12.0.0/16;
  • зона Office-A-floor-3 содержит маршрут 10.12.13.0/24.

Зритель с адресом 10.12.13.42 попадет в Office-A-floor-3, потому что маршрут /24 точнее, чем /16.

Если один и тот же CIDR уже используется в другой зоне, его нужно перенести или удалить из старой зоны. Один и тот же маршрут не должен одновременно принадлежать нескольким зонам.

Маршрут 0.0.0.0/0 отвечает за дефолтный роутинг. Если его не указать, то клиент, который не попал ни в один маршрут, окажется без выданного рестримера и без проигрывания.

Настройка резервной зоны

Резервную зону используют в тех случаях, когда в основной зоне все рестримеры недоступны или отключены.

При настройке резервирования рекомендуется:

  • выбирать резервную зону, до которой у офиса действительно есть рабочая связность;
  • не создавать циклические цепочки резервирования;
  • использовать простую и понятную схему резервирования, чтобы ее было легко сопровождать.

Типичный пример:

  • зона office-ekb имеет основной локальный рестример;
  • зона office-msk назначена как fallback zone для office-ekb.

Если локальный рестример в office-ekb недоступен, зрители из этой зоны начинают получать поток через office-msk.

Настройка рестримера

Рестример создается в том же разделе стримеров, что и обычный стример, но для него выбирается тип restreamer.

В карточке рестримера администратор заполняет:

  • hostname;
  • тип узла restreamer;
  • схему подключения HTTP или HTTPS;
  • API-порт;
  • zone;
  • playback_base_url.

Поле playback_base_url задает адрес, который Agora возвращает зрителям для воспроизведения потока. Обычно это внешний URL рестримера в корпоративной сети или в пользовательском сегменте, например https://edge-1.office.example.

Для рестримера привязка к зоне обязательна. Один рестример может относиться только к одной зоне.

Раздел Streamers: список узлов (пример srv1, srv2)

Карточка рестримера: тип restreamer, зона и playback_base_url (пример srv1)

Что получает рестример от Agora

Рестример получает конфигурацию через config_external, как и другие стримеры, но в CDN-сценарии Agora выдает ему on-demand-конфигурацию для раздачи потоков.

Это означает следующее:

  • поток на рестримере не поднимается заранее без запроса зрителя;
  • рестример получает вход от origin в формате m4s;
  • публикация на рестримере запускается по первому обращению клиента.

Такой режим уменьшает постоянную нагрузку на рестример и не заставляет держать активными все возможные потоки одновременно.

Как Agora выбирает рестример для зрителя

При обращении зрителя к потоку Agora выполняет следующие действия:

  1. Определяет IP-адрес клиента.
  2. Ищет подходящую зону по CIDR.
  3. Находит в зоне доступные рестримеры.
  4. Исключает отключенные и недоступные узлы.
  5. Выбирает рестример с минимальным количеством текущих клиентов.
  6. Возвращает viewer portal адрес воспроизведения на выбранном рестримере.

В качестве доступных рассматриваются только те рестримеры, которые:

  • не отключены в административном интерфейсе;
  • отвечают на healthcheck как рабочие;
  • имеют актуальную эксплуатационную статистику.

Если для зоны включена опция «Пропускать проверку живости стримера», то для шага выбора именно в этой зоне требования к healthcheck и к свежести статистики не применяются: в кандидаты попадают все привязанные к зоне рестримеры, кроме отключённых в админке. При переходе по цепочке fallback к другой зоне снова действуют её собственные настройки.

Отладка CDN: query-параметр source_ip

Для проверки маршрутизации balancer и viewer portal с рабочего места вне целевой корпоративной подсети в URL страницы портала можно добавить query-параметр source_ip: Agora будет считать «адресом зрителя» указанный IPv4 или IPv6 и подбирать зону по CIDR так, как если бы запрос пришёл с этого IP. Страница портала передаёт тот же параметр в запрос к balancer/streams/{stream}; при необходимости вместе с ним пробрасывается и token viewer API.

Типичный сценарий отладки в связке с skip_streamer_healthcheck:

  • в зонах, которые хочется проверить, можно включить «Пропускать проверку живости стримера», чтобы не зависеть от живой статистики и healthcheck;
  • в CIDR маршрутах этой зоны вписать правильные адреса, которые должны относиться к этой зоне;
  • открыть viewer portal с ?source_ip=… и убедиться, что в ответе balancer попадаете в нужную зону и получаете ожидаемый playback_url.

Так можно пошагово проверить зоны, fallback и выбор рестримера без физического нахождения в сегменте сети и без поднятого «зелёного» edge по метрикам. В бою опцию source_ip не используют: она обходит естественное сопоставление с реальным адресом клиента и предназначена для диагностики и лабораторных стендов.

Ниже — пример страницы viewer portal: в блоке отображается итоговый playback_url, выданный balancer. При source_ip=10.1.0.1 (зона с маршрутом 10.1.0.0/16) в URL виден edge первого офиса (srv1 в примере стенда):

Viewer portal: source_ip в подсети office1, playback у srv1

При source_ip=10.2.0.2 выбирается зона 10.2.0.0/16 и соответствующий рестример (srv2):

Viewer portal: source_ip в подсети office2, playback у srv2

Как администратору проверить, что CDN настроена правильно

После настройки рекомендуется проверить CDN по следующему сценарию:

  1. Открыть раздел стримеров и убедиться, что нужный рестример зарегистрирован и не отключен.
  2. Проверить, что у рестримера заполнены zone и playback_base_url.
  3. Открыть карточку зоны и убедиться, что нужный CIDR сохранен корректно.
  4. Проверить, что у зоны при необходимости указана резервная зона и что опция пропуска проверки живости включена только там, где это осознанно нужно для тестов.
  5. Проверить, что поток существует и работает на origin.
  6. Проверить, что рестример получает внешнюю конфигурацию через config_external.
  7. Открыть viewer portal из сети, IP-адрес которой попадает в нужную зону.
  8. Убедиться, что воспроизведение идет через локальный рестример, а не напрямую с origin.

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

Что видит пользователь при корректной настройке

Для пользователя CDN работает прозрачно. Он открывает обычную ссылку на поток, а Agora сама:

  • определяет подходящую зону;
  • выбирает оптимальный рестример;
  • направляет воспроизведение на локальный адрес раздачи.

Пользователю не нужно вручную выбирать офис, узел или точку вещания.

Типовые ошибки настройки

Если CDN не работает ожидаемым образом, администратор в первую очередь проверяет следующее:

  • рестример создан как restreamer, а не как обычный origin;
  • рестример не отключен;
  • у рестримера заполнен playback_base_url;
  • рестример привязан к правильной зоне;
  • в зоне сохранен корректный CIDR;
  • IP-адрес клиента действительно попадает в нужный маршрут;
  • у зоны не задана ошибочная резервная зона;
  • origin-стример доступен и отдает поток;
  • рестример получает config_external;
  • в зоне есть хотя бы один доступный рестример.

Если IP-адрес клиента не попадает ни в один маршрут, CDN-маршрутизация для такого клиента не применяется. В этой ситуации в первую очередь проверяют правильность сети, маски и порядок фактической маршрутизации трафика в корпоративной инфраструктуре.

Рекомендуемый эксплуатационный подход

Для устойчивой работы внутрикорпоративной CDN рекомендуется:

  • называть зоны по физической или организационной топологии;
  • не смешивать в одной зоне несвязанные офисы;
  • держать хотя бы один резервный маршрут обслуживания для критичных площадок;
  • регулярно проверять состояние рестримеров в разделе мониторинга;
  • отдельно контролировать доступность origin и edge-узлов;
  • документировать, какой диапазон IP относится к какому офису.

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