Skip to end of metadata
Go to start of metadata

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

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

Для выполнения теста вам потребуется:

  • виртуальный (VPS) или физический сервер
  • источник видео трансляции (потоковое видео с программ OBS studio или ManyCam, трансляция с вашей web или IP-камеры)
  • сервер WCS для эмуляции зрителей вашего контента

Проверим возможности Linux x86_64 сервера с производительностью, соответствующей минимальным требованиям для WCS:

  • 2 гигабайта оперативной памяти
  • 10 гигабайт места на диске
  • 1 ядро процессора

Подготовка сервера

 1. Указываем в файле настроек запуска ядра WCS сервера wcs-core.properties размер Java memory heap 1 GB:

-Xmx1024M

Затем перезапускаем WCS.

2. Все современные серверные процессоры многоядерные. Проведем нагрузочные тесты, используя только одно core CPU, отключив все остальные. Для этого смотрим текущий статус используемых ядер CPU:

[root@demo ~]# lscpu | grep list 
On-line CPU(s) list: 0-3

По выводу видим, что на данном сервере 4 core CPU (0,1,2,3). Отключаем все ядра, кроме четвертого:

echo 0 | sudo tee /sys/devices/system/cpu/cpu0/online
echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online
echo 0 | sudo tee /sys/devices/system/cpu/cpu2/online

Текущий статус после выполнения команд:

[root@demo ~]# lscpu | grep list
On-line CPU(s) list:   3
Off-line CPU(s) list:  0-2

Для теста используем 1 CPU Intel Xeon E3-1240 v5@3.50GHz.

Проведение теста

Тест с транскодированием потока

1. Публикуем RTMP поток с определенными параметрами качества из программы OBS Studio на WCS сервер (пример указан в документации).

РазрешениеБитрейт, кбит/с
1280x720 (720p)1500


2. Транскодируем этот поток с помощью REST запросов в несколько популярных разрешений (480p и 360p).

РазрешениеБитрейт, кбит/с
854x480 (480p)1000
640x360 (360p)500


3. Используем пример нагрузочного тестирования с захватом потоков по WebRTC на другом сервере WCS. Этим примером мы эмулируем зрителей (подписчиков) трансляции, воспроизводящих поток в разных разрешениях (720p, 480p, 360p). При заданном числе зрителей (около 100) нагрузка процессора на WCS сервере приближается к 80%, это рекомендуемая максимальная нагрузка на CPU, при которой сервер выполняет свой функционал корректно.


4. Публикуем два потока 720p, транскодируем их в разрешения 480p и 360p, добавляем в нагрузочное тестирование и по загрузке процессора на сервере с WCS (как описано выше, допустимо до 80%) определяем максимальное количество подписчиков на эти трансляции (около 80).


5. Аналогично выполнив тест с тремя потоками 720p, получаем возможное число зрителей около 30.

Тест без транскодирования потока

1. В этом тесте проверим, сколько зрителей получит возможность просмотра трансляции без транскодирования потока на сервере, т.е. публикуем RTMP поток с определенными параметрами качества из программы OBS Studio на WCS сервер (пример указан в документации) и просматриваем его же подписчиками.

РазрешениеБитрейт, кбит/с
1280x720 (720p)1500


2. Используем пример нагрузочного тестирования с захватом потоков по WebRTC на другом сервере WCS. Этим примером мы эмулируем зрителей (подписчиков) трансляции, воспроизводящих поток с WCS сервера. Увеличиваем число зрителей до достижения на WCS сервере параметров загрузки процессора до 80%. При просмотре трансляции 720p мы получили возможное число зрителей потока - 120 подписчиков.


3. Повторяем тест с трансляцией 480p и нагрузочным тестом с захватом потоков на другом сервере WCS.

РазрешениеБитрейт, кбит/с
854x480 (480p)1000



4. Проверим возможности сервера при трансляции 360p и нагрузочным тестом.

РазрешениеБитрейт, кбит/с
640x360 (360p)500



Результаты тестирования

Физический сервер

На основании теста с минимально рекомендуемой конфигурацией (1 CPU, 2 GB RAM, 1 GB RAM для Java heap) на выделенном (физическом) сервере, определили примерные возможности WCS по работе с потоковым видео на таком сервере:


Без транскодинга

Тест

Публикации

Зрители

Количество

РазрешениеБитрейт, кбит/сКоличество
111280x720 (720p)1500120
21854x480 (480p)1000150
31640x360 (360p)500250


С транскодингом


Тест
ПубликацииЗрители
КоличествоРазрешение Битрейт, кбит/сРазрешениеБитрейт, кбит/сКоличество

1

1

1280x720 (720p)

1500

854x480 (480p)100050
640x360 (360p)50050


2

11280x720 (720p)1500854x480 (480p)100020
640x360 (360p)50020
11280x720 (720p)1500854x480 (480p)100020
640x360 (360p)50020




3

11280x720 (720p)1500854x480 (480p)10005
640x360 (360p)5005
11280x720 (720p)1500854x480 (480p)10005
640x360 (360p)5005
11280x720 (720p)1500854x480 (480p)10005
640x360 (360p)5005

Виртуальный сервер

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

Результаты тестов с минимально рекомендуемой конфигурацией (1 CPU, 2 Gb RAM, 1 GB RAM для Java heap) на виртуальном сервере от Digital Ocean (digitalocean.com):


Без транскодинга

Тест

Публикации

Зрители

Количество

РазрешениеБитрейт, кбит/сКоличество
111280x720 (720p)300050
21854x480 (480p)180070
31640x360 (360p)130070


С транскодингом


Тест
Публикации
КоличествоРазрешение Битрейт, кбит/с

1

2

1280x720 (720p)

3000

2

3854x480 (480p)1800
35640x360 (360p)1300

Сервер в облаке (на примере AWS)

Тесты на серверах в облаке Amazon (виртуальных и физических) проводились с применением следующих настроек

1. Включено аппаратное ускорение шифрования WebRTC трафика

2. Включена оптимизация доставки потока подписчикам

На тестируемом сервере был опубликован поток 1080p с битрейтом 2,2 Мбит/с, без значительных скачков битрейта.

Были получены следующие результаты:

Тип инстансаCPUsRAM, GbBandwidth, GbpsКоличество подписчиков
c5.4xlarge1632до 101500
c5.9xlarge3672102000 (предел пропускной способности сети)
c5n.9xlarge3696503000

Рекомендации

По проведенным тестам можно сделать вывод, что физический сервер при схожих параметрах оборудования показывает большую производительность по сравнению с виртуальным сервером. Разнообразие устройств для просмотра и работы с потоковым видео (это как и мобильные платформы, так и web-интеграции контента), ограничения по емкости сетевых каналов до зрителей в свою очередь требуют значительных ресурсов для транскодирования потоков на WCS сервере. Примерные требования по производительности сервера для WCS при типовых задачах указаны ниже: 

Количество подписчиковCPUsRAM, GbТрафик, TbПример использования
до 200485Система видеонаблюдения
до 5008166Вебинары
до 100016649Видеочат
до 2000209610Стриминг HD видео

При большем количество потоков и зрителей, усложнению бизнес модели проекта, наращивание производительности одного WCS сервера нецелесообразно и ведет к появлению единой точки отказа. Масштабирование, географическое и логическое разделение (с выделением в зависимости от производительности и роли отдельных серверов в CDN функций транскодинга и доставки контента) позволяет на основании предложенных и выполненных нами тестов гибко определить необходимый уровень производительности для каждого из WCS серверов.