Известный облачный хостинг DigitalOcean с недавних пор обзавелся собственным магазином с готовыми образами, из которых можно быстро развернуть какой-либо сервер приложений. Совсем, как AWS, только DO, для тех, кто уже пользуется услугами этого провайдера. Давайте посмотрим, как, имея аккаунт DO, развернуть простой сервер за 10$ в месяц для стриминга WebRTC на базе Flashphoner WebCallServer, и чем такой сервер может быть полезен.

Развертывание

Входим в аккаунт на DO, переходим по ссылке к образу Flashphoner WebCallServer и нажимаем кнопку «Create Flashphoner Web Call Server Droplet»

WebRTC streaming Digital Ocean Application page

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

WebRTC streaming Digital Ocean Choose server cost/perfomance

Выбираем регион размещения датацентра, например, Франкфурт

Choose a datacenter region

Выбираем способ аутентификации, например, одноразовый пароль

WebRTC streaming Digital Ocean Choose authentication type

Указываем количество серверов (пока нас интересует один сервер) и даем нашему серверу имя. Это имя будет записано, в том числе, в /etc/hostname

WebRTC streaming Digital Ocean Choose droplets count and name

Нажимаем «Create droplet»

WebRTC streaming Digital Ocean Create droplet

После создания сервер автоматически запустится. Можно подключиться к нему по SSH и, если в качестве способа аутентификации был выбран одноразовый пароль, сменить пароль. В консоль будет выведено краткое описание Flashphoner WebCallServer со ссылками на документацию

WebRTC streaming Digital Ocean First login

 

«Это тест. Меня видно?»

Flashphoner WebCallServer запускается полностью готовым к работе, 30-дневная ознакомительная лицензия активируется автоматически. Для тестирования всех основных функций есть веб-интерфейс, мы ограничимся проверкой публикации и проигрывания WebRTC потока.

Открываем в браузере страницу https://droplet_ip:8444/admin/. По умолчанию с сервером поставляется self-signed сертификат, поэтому придется подтвердить исключение безопасности. В дальнейшем можно заменить сертификаты на собственные. Вводим имя и пароль (по умолчанию demo)

WebRTC streaming Digital Ocean Log in to web interface

Выбираем в боковой панели пример Two-Way Streaming, нажимаем кнопку «Connect», затем «Publish». Для проигрывания потока нажимаем «Play»

WebRTC streaming Digital Ocean Two-way Streaming Example in action

 

За пригоршню долларов

На что же способен сервер за 10$ в месяц в качестве аппаратной платформы для WebRTC стриминга? Посмотрим, что нам предлагает DigitalOcean по процессору

lscpu

WebRTC streaming Digital Ocean lscpu output

и по памяти

free -h

WebRTC streaming Digital Ocean free output

Проверяя сервер нагрузочными тестами, видим, что сервер может не так уж и мало. Например, опубликуем один экземпляр потока и посмотрим, сколько подписчиков одновременно могут проиграть это поток, занимая не более 90% процессора:

Разрешение Битрейт, кбит/с Количество публикаций Количество подписчиков
360p 1300 1 70
480p 1800 1 70
720p 3000 1 50

 

При нескольких одновременных публикациях максимальное количество обрабатываемых потоков остается на том же уровне: если опубликовать 7 потоков, на каждый могут подписаться до 10 зрителей.

Допустим, нам нужно транскодировать поток на сервере, чтобы уменьшить разрешение или выровнять FPS. Для этого случая проверим максимальное количество публикаций:

Разрешение Битрейт, кбит/с Количество потоков
360p 1300 5
480p 1800 3
720p 3000 2

 

Таким образом, сервер минимальной стоимости на DO с параметрами 1 CPU core, 2 Gb RAM, 2 TB трафика в месяц пригоден не только для тестирования WebRTC стриминга, но и для использования в небольших проектах. Например, можно:

  • раздавать по WebRTC поток с IP-камеры для простейшего внутрикорпоративного видеонаблюдения;
  • организовать вебинар для сотрудников небольшой компании
  • поднять свое интернет-радио (аудиопоток требует меньше ресурсов процессора)

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

«Я достойна большего!»

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

Количество подписчиков vCPUs RAM, Gb Трафик, TB Пример использования
до 200 4 8 5 Система видеонаблюдения
до 500 8 16 6 Вебинары
до 1000 16 64 9 Видеочат
до 2000 20 96 10 Стриминг HD видео

 

Если планируется дальнейший рост, придется развернуть CDN из расчета 1 Edge сервер на 2000 подписчиков. Предположим, нам требуется раздавать HD видео, планируемое число зрителей 10000. В этом случае потребуется 2 Origin сервера для публикации и 5 Edge серверов для просмотра

WebRTC streaming Digital Ocean CDN example

Пример настройки:

  • Origin 1
cdn_enabled=true
cdn_ip=origin1.flashponer.com
cdn_nodes_resolve_ip=false 
cdn_role=origin
  • Origin 2
cdn_enabled=true
cdn_ip=origin2.flashponer.com 
cdn_point_of_entry=origin1.flashponer.com 
cdn_nodes_resolve_ip=false
cdn_role=origin
  • Edge 1 — Edge 5 (здесь меняется только адрес сервера в параметре cdn_ip)
cdn_enabled=true
cdn_ip=edge1.flashphoner.com
cdn_point_of_entry=origin1.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=edge

CDN также может быть полезной, если подписчики распределены географически, например, наши потенциальные зрители проживают в Европе и Америке

WebRTC streaming Digital Ocean CDN with location based grouping example

Пример настройки:

  • Origin EU
cdn_enabled=true
cdn_ip=origin_eu.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=origin
cdn_groups=EU
  • Origin US
cdn_enabled=true
cdn_ip=origin_us.flashponer.com
cdn_point_of_entry=origin_eu.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=origin
cdn_groups=US
  • Edge 1 EU
cdn_enabled=true
cdn_ip=edge1_eu.flashphoner.com
cdn_point_of_entry=origin_eu.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=edge
cdn_groups=EU
  • Edge 1 US
cdn_enabled=true
cdn_ip=edge1_us.flashphoner.com
cdn_point_of_entry=origin_eu.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=edge
cdn_groups=US

Чем больше зрителей, тем больше разнообразие устройств для проигрывания и каналов до этих устройств. Чтобы обеспечить качество трансляции на различные устройства, скорее всего, потребуется транскодинг видео, который можно возложить на специальные Transcoder серверы CDNWebRTC streaming Digital Ocean CDN with Transcoder nodes

Пример настройки:

  • Origin
cdn_enabled=true
cdn_ip=origin.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=origin
cdn_groups=default
  • Transcoder EU
cdn_enabled=true
cdn_ip=transcoder_eu.flashponer.com
cdn_point_of_entry=origin.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=transcoder
cdn_groups=EU
  • Edge 1 EU
cdn_enabled=true
cdn_ip=edge1_eu.flashphoner.com
cdn_point_of_entry=origin.flashponer.com
cdn_nodes_resolve_ip=false
cdn_role=edge
cdn_groups=EU

Для транскодирования, как мы выяснили во время теста, важно количество процессорных ядер. Из линейки конфигураций CPU-optimized больше всего подходит самая дорогая 32 vCPU, 64 Gb RAM. При этом в других линейках близкие по количеству CPU конфигурации с большим объемом памяти могут быть существенно дороже. К сожалению, сэкономить на транскодерах не получится: поскольку видео кодируется покадрово, памяти должно хватать под все картинки, а процессоров под обработку всех потоков.

При развертывании CDN, пригодится одновременное создание нескольких серверов одной и той же конфигурации. Однако, для географически распределенной CDN однотипные Edge и Transcoder серверы нужно будет разместить в разных датацентрах.

Заключение

Итак, мы развернули и протестировали небольшой сервер для стриминга WebRTC видео с низкой задержкой на Digital Ocean, убедились, что сервер в минимальной конфигурации пригоден не только для тестирования, но и для использования в небольших проектах, получили данные для масштабирования в зависимости от предполагаемого числа зрителей, а также коснулись темы развертывания CDN, которая сама по себе заслуживает отдельной статьи. Оставайтесь с нами, продолжение следует…

Ссылки

Образ Flashphoner WebCallServer в DigitalOcean Marketplace

Методика нагрузочного тестирования

Web Call Server — WebRTC сервер