Платформа → Нагрузочное тестирование

Нагрузочное тестирование Janus

Сколько зрителей выдерживает один сервер Krona.Chat: результаты нагрузочного тестирования видеосервера Janus.

Тест проведён 10.10.2026

Тестовый сервер
8 vCPUпроцессор AMD EPYC 964516 ГБоперативной памяти1 Гбит/ссетевой канал1080pвидео ~2,5 Мбит/с
Смешанный сервермодели и зрители на одном сервере до 330 зрителей Модель транслирует на этот сервер, и её зрители смотрят с него же. Самая простая схема — один тип серверов на всё.
Сервер для зрителейраздельная схема до 360 зрителей К нему подключаются только зрители. Видео моделей он получает с сервера для моделей и раздаёт зрителям.
Сервер для моделейраздельная схема ~220 трансляций К нему подключаются только модели. Он принимает их трансляции и пересылает на серверы для зрителей. Расчёт по замерам: проверено 120 трансляций — сервер был загружен всего на 14%.

Как устроены схемы

Смешанная: модель → смешанный сервер → зрители этой модели. Все зрители одной трансляции должны поместиться на один сервер.

Раздельная (каскадирование): модель → сервер для моделей → один или несколько серверов для зрителей → зрители. Пересылку видео между серверами (каскадирование) выполняет сам сервер для моделей, отдельный сервер для этого не нужен. Если у трансляции много зрителей, их распределяют по нескольким серверам для зрителей.

Коротко о главном

  • Один сервер уверенно показывает видео 330–360 зрителям одновременно — без подвисаний и потерь качества.
  • Если вынести приём трансляций на отдельный сервер, сервер для зрителей обслуживает примерно на 10% больше зрителей, чем смешанный, а у одной трансляции может быть сколько угодно зрителей — их распределяют по нескольким серверам для зрителей.
  • Приём трансляций почти не нагружает сервер. Основная нагрузка — доставка видео зрителям.
  • Сервер использует сетевой канал почти полностью: без потерь — до 900 Мбит/с видео к зрителям при канале 1 Гбит/с. Если превысить предел, качество падает сразу у всех, поэтому серверы загружают с запасом — так и считает калькулятор внизу страницы.

Как проводилось тестирование

Тестировались видеосерверы Krona.Chat. Модели и зрители — программные клиенты, которые ведут себя как браузер: заходят в комнату, отправляют и принимают видео.

  1. Запускаем трансляции

    Модели начинают трансляцию видео 1080p, около 2,5 Мбит/с — как у реальной веб-камеры.

  2. Добавляем зрителей

    Каждые 2 секунды подключается новый зритель — нагрузка растёт плавно.

  3. Следим за качеством

    У каждого зрителя считаем, сколько видео теряется по дороге. Пока потери меньше 1%, картинка плавная.

  4. Находим предел

    Тест останавливается, когда качество начинает падать. Максимум зрителей без потерь — это ёмкость сервера.

Схемы проверялись отдельными тестами. На графиках каждая линия — свой тест, линии не складываются.

Результаты

Сколько видео сервер отдаёт зрителям

Чем больше зрителей, тем больше видео отправляет сервер. Пока линия растёт ровно, все зрители получают видео полностью. Когда линия ломается вниз — сервер перегружен и не успевает доставить видео всем.

Показать таблицу

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

Качество видео у зрителей

Доля видео, которая не дошла до зрителя. До 1% зритель этого не замечает, больше — картинка подвисает и рассыпается. Резкий рост потерь и есть предел сервера.

Показать таблицу

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

Загрузка процессора сервера

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

Показать таблицу

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

Какую схему выбрать

Все цифры — для видео 1080p около 2,5 Мбит/с, без потерь качества.

Смешанный сервер

до 330 зрителей

Модели и их зрители на одном сервере. В тесте у каждой трансляции было около 33 зрителей.

Подходит, когда у трансляции до нескольких сотен зрителей. Если трансляций много, а зрителей у каждой мало (около 10), сервер держит немного меньше — около 280.

Раздельная схема

до 360 зрителей

Серверы для моделей принимают трансляции, серверы для зрителей показывают их. Сервер для зрителей держит примерно на 10% больше зрителей, чем смешанный.

Подходит для больших аудиторий: зрителей одной трансляции распределяют по нескольким серверам для зрителей — ограничения «вся аудитория на одном сервере» нет.

Сервер для моделей

~220 трансляций

Часть раздельной схемы: принимает видео от моделей и пересылает его на серверы для зрителей. Это лёгкая работа: 120 трансляций загрузили сервер всего на 14%.

~220 — расчёт по замерам: каждая трансляция для такого сервера — одно входящее видео и одна пересылка дальше.

Сравнение с калькулятором на сайте

Калькулятор серверов на сайте закладывает на сервер около 700 Мбит/с видео к зрителям. Тест показал, что сервер с каналом 1 Гбит/с без потерь отдаёт до 900 Мбит/с, так что калькулятор на сайте считает с хорошим запасом.

Для видео 2,5 Мбит/с это 330–360 зрителей на сервер. Для 1080p с битрейтом 3 Мбит/с — по расчёту около 290 зрителей.

Расчёт, а не результат теста

Калькулятор: сколько серверов нужно

Использует коэффициенты, полученные в тестах. Укажите свою нагрузку и цену сервера у вашего провайдера.

Серверов нужно—
Стоимость в месяц—
Зрителей всего—одновременно
Зрителей на один сервер—

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

Отчёт сгенерирован orchestration/capacity_report.py из данных прогонов (Locust + Prometheus + RTP-статистика зрителей).