ОсновноеRadiotalkПользовательское
MyRadio24 - Сервис для создания интернет радио
126   •   Посмотреть все темы

НОВЫЙ СЕРВЕР ВЕЩАНИЯ - замена ICECAST2

 

20091
Dimitry @Dimitry
НОВЫЙ СЕРВЕР ВЕЩАНИЯ (замена ICECAST2)

Возможно вы заметили что последнее время не так много нововведений.
Всё потому, что мы решили разработать свой собственный СЕРВЕР трансляций вместо использования IceCast2.
Базовая реализация IceCast2 больше не удовлетворяет требованиям нашему функционалу, а добавлять новые функции в него - проблематично. Так как ранее мы разработали свой собственный Auto-DJ разобрав все протоколы IceCast2 и MP3 вещания, разработка сервера показалась физически возможной. После 3х месяцев работы у нас появилась первая рабочая версия сервера с базовым функционалом - пришло время тестирования. Вводить в использование новый сервер мы будем очень осторожно и постепенно, на начальном этапе возможны проблемы с вещанием которые мы быстро исправим. Сначала мы запустим LIVE сервер вещания, а потом заменим все сервера со слушателями.

Что изменится с приходом нового сервера:

- обработка неверной кодировки метаданных LIVE вещания теперь ещё лучше (автоматизировано)
- стабильность LIVE вещания станет лучше, при проблемах с трафиком DJ не будет отключен сразу
- мгновенное определение LIVE вещания и переключение LIVE <=> Auto-DJ
- без проблем с радиобосс: неопытные DJ ставят вещание в радиобосс на паузу, тогда сервер начинает отключать диджея каждые 10 секунд (исправлено)
- больше не нужно будет настраивать отдельный сервер статистики в SAM BROADCASTER И RADIOBOSS, статистику выдаст наш сервер по умолчанию
- имя вещающего DJ теперь будет строго браться из раздела Пользователи, рекомендуется каждому диджею зарегистрироваться (теперь это возможно), соответственно и статистика будет у каждого DJ пользователя своя личная
- улучшенный сбор статистики, оперативнее и больше данных
- адаптивное перенаправление слушателей на другие сервера и проксирование потоков откроет возможность масштабировать 1 радио на более 10000 слушателей одновременно
- улучшенная адаптивная буферизация потока (небольшая задержка)

Этапы тестирования или как не поймать проблем

1. OK Наше тестирование вещания и прослушивания с разных программ
2. OK Автоматизированное тестирование нагрузки от более 1000 LIVE вещаний и 10000 слушателей
3. OK Пользовательское тестирование вещания и прослушивания с разных программ/устройств
4. OK Частичная параллельная интеграция - как вторичный LIVE сервер
5. OK Попытка запуска и замена старого IceCast2 на наш новый сервер
6. OK Запуск первого транслирующего сервера для слушателей
7. OK Отладка ошибок и оптимизация работы вещающего сервера под нагрузкой
8. OK Замена всех Icecast2 серверов вещания на наши собственные - стабильные сервера!
9. OK Отладка ошибок и оптимизация работы сервера для LIVE вещания под нагрузкой

На данный момент сервер работает стабильно и все ошибки исправлены.

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

20091
Dimitry @Dimitry
Сегодня проведена эмуляция нагрузки от слушателей на сервер

При тестировании использовалось 1 радио которое вещало в MP3 формате 192kbit. При тестировании использовался локальный скрипт который совершает много одновременных HTTP подключения и скачивает поток. При всех тестах лагов в звучании не обнаружено, однако при последнем тесте 10000 слушателей, подключение к серверу длилось вместо 1 секунды почти 2 секунды. Память с увеличением слушателей увеличивалась и не освобождалась, но если отключить слушателей и подключить заново, то она стабилизировалась. Нагрузка на процессор примерно в 2 раза меньше чем от сервера IceCast2, но условия работы не равные.

Результаты тестирования при MP3 формате 192kbit

listen_stream: 100
CPU: 0.3 - 0.7%,
MEM: 54 MB

listen_stream: 500
CPU: 2.7 - 3.3%,
MEM: 50 MB

listen_stream: 1000
CPU: 6.0 - 6.7%,
MEM: 55 MB

listen_stream: 2000
CPU: 10.0 - 12%,
MEM: 190 MB

listen_stream: 3000
CPU: 16 - 18%,
MEM: 310 MB

listen_stream: 5000
CPU: 28 - 30%,
MEM: 320 MB

listen_stream: 7000
CPU: 40 - 42%,
MEM: 335 MB
Network: 1300mbit

listen_stream: 10000
CPU: 59 - 65%,
MEM: 424 MB
Network: 1800mbit

При 128kbit вещании:
listen_stream: 10000
CPU: 55 - 57%,
MEM: 514 MB
Network: 1300mbit

От слушателей нагрузка не очень высокая.
Тестируем нагрузку от большого кол-ва вещающих станций.
------------------------------------------------------------------

500 станций вещающих в разных форматах
CPU: 6%
Проблемы не выявлены.

1000 станций
CPU: 12%
Некоторые станции начинают отключаться.
Причина пока не выявлена. (не критично)

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

20091
Dimitry @Dimitry
Запуск первого сервера версия 1.0

Несколько дней назад был запущен наш первый сервер listen5 в работу для новых клиентов. В реальных условиях нагрузка на процессор всё таки выше, примерно как у icecast, расход памяти остался таким же как и был при тестах выше.
Сегодня: 1500 слушателей 192kbps и 30 радио создают среднюю нагрузку CPU 18% / MEM 50mb
Скорее всего потому что тесты выше проводились на новейшем Xeon процессоре с 4200Mhz, а этот сервер с процессором 3600Mhz.
Поэтому можно сказать что наш сервер и сервер Icecast2 создают примерно одинаковую нагрузку.
В любом случае мощностей сервера хватает чтобы спокойно обрабатывать 5000 слушателей, а больше и не требуется.
Следующим этапом мы будем переключать другие вещающие сервера и если будет всё отлично то и LIVE сервер.

20091
Dimitry @Dimitry
Преимущества нашего сервера на данный момент - которые себя уже показали - версия 1.1

1. У одного радио на тарифе PRO были постоянные проблемы с обновлением метаданных - названий песен на сервере.
Ничего не помогало, что-то было не так с Icecast в совокупности с некоторыми треками этого радио. (собственной звукозаписи)
Однако смена сервера Icecast на наш сервер сразу же решила эту проблему, что даёт ещё 1+ нашему серверу.

2.Также протестировали новую фишку нашего сервера при которой слушателей никогда не выкидывает с сервера.
Можно перезагружать АвтоDJ и отключаться от LIVE вещания сколько угодно, радио переходит в Оффлайн режим, но как только возобновляется вещание, все слушатели сразу же получают новый поток - все остаются подключены. В случае с Icecast, существует fallback на тишину, однако по непонятным причинам иногда все слушатели вылетают с потока.

20091
Dimitry @Dimitry
Доработки сервера и исправление ошибок - версия 1.2

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

20091
Dimitry @Dimitry
Доработка сервера и исправление ошибок - версия 1.3

Неделю назад все сервера уже были перезапущены ночью.
Теперь при LIVE вещании в плеерах Winnamp/WMP/AMP в скобках отображается имя диджея, ранее всегда было имя Auto-DJ.
После обновления ОС и замены серверов, все найденные ошибки исправлены, сервера показывают стабильную работу.
Дальше будут только мелкие доработки. Icecast можно отправить в историю - для совместимости все протоколы соблюдены.

20091
Dimitry @Dimitry
Доработка сервера и исправление ошибок - версия 1.4

Исправлено переполнение буфера и утечки памяти. Теперь сервер расходует ещё меньше памяти и расход памяти с течением времени не увеличивается.
Исправлена работа с Ogg форматом. Ранее при вещании LIVE в данном формате поток мог зависать и молчать. Все известные проблемы вновь исправлены.

20091
Dimitry @Dimitry
Доработка сервера и исправление ошибок - версия 1.5

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

Добавлена возможность из программ вещания передавать параметр Stream Name. Этот параметр обычно используется в качестве названия эфира или указания имени ведущего и контактов. Также он отображается в скобках после названия трека в различных плеерах на ПК. Ранее мы технически заменили его на имя диджея из нашей системы. Но теперь в настройках можно выбирать, отображать имя диджея или Stream Name из программы вещания. Позднее этот параметр будет отображаться в каталоге и в наших приложениях. Чтобы параметр заработал, перезагрузите также радио с Auto-DJ v3.06 и переподключите вещание. Кроме этого в скрипты плеера добавлен новый соответствующий параметр streamname. А старый djname как и раньше выводит реальное имя ведущего LIVE.

20091
Dimitry @Dimitry
Мультисерверы и проксирование LIVE сервера - версия 1.6

За последнее время было исправлено несколько ошибок и введены новые функции.
Основное важное нововведение это возможность легко запускать на одном физическом сервере несколько радио серверов. Также добавлены функции проксирования LIVE сервера и потоков для слушателей. Это позволяет проще размещать сервера в разных дата-центрах, перенаправлять слушателей и масштабироваться.

20091
Dimitry @Dimitry
Правильная обработка ошибок 403/404 и перенаправления (redirect) - версия 1.7

В новой версии изменена структура обработки ошибок с кодами 403, 404, а также добавлена возможность перенаправления на другие адреса (redirect). Теперь мы можем контролировать куда направить слушателя, если он напрямую подключается к listen серверу. Например если слушатель подключается к серверу listen1, а настроен другой, мы можем автоматически направить его на верный. Данная функция находится в режиме тестирования. Кроме этого была улучшена адаптация под iOS при открытии ссылок на поток напрямую.

20091
Dimitry @Dimitry
Облачные ретрансляторы (relays), метаданные, вещание по ключу и управление буфером - версия сервера 1.8 + Auto-DJ PRO v3.15

Новый режим уже включен для всех станций. Старый режим отключен.

1. Добавлен новый способ вещания через облачные ретрансляторы - позволяющий одной радиостанции одновременно использовать неограниченное кол-во вещающих серверов размещённых в разных странах и дата-центрах. Весь сервис уже переведён на данный тип вещания.

2. Cоздан специальный протокол для передачи и обновление всех метаданных в реальном времени. Если в панели управления изменить название радио, жанр, имя Auto-DJ или ссылку на сайт, то эти данные будут мгновенно автоматически отправлены на все сервера включая облачные. Никаких перезагрузок больше не требуется. На данный момент поддерживаются такие поля метаданных:
pub/public/name/djname/description/genre/url/limit

3. Добавлена поддержка ключей вещания. Поддержка ключей позволяет выдавать доступ к прослушанию слушателям только по ключу - защищенной ссылке. Тем самым можно защитить поток и сделать его приватным. Управление ключами находится в разработке.

4. В настройках PRO была добавлена поддержка настройки буфера вещания (burst). Можно указать сколько КБ при подключении к потоку будет выдано слушателю сразу и тем самым управлять буфером и задержкой вещания.


Какие плюсы у нового режима вещания
- можно легко решить проблемы с блокировкой серверов в России и Украине
- одна радиостанция может вещать одновременно с нескольких серверов и тем самым не ограничиваться одним listen сервером
- нам как сервису проще распределять нагрузку и слушателей по серверам
- при отсутствии слушателей более 5 минут для экономии ресурсов ретрансляции сами отключаются
- при перезагрузке радио все облачные ретрансляции остаются в рабочем состоянии и все слушатели будут подключены даже если нет потока до 3х минут
- точнее показывает общее кол-во слушателей (теперь без видео ретрансляций) и в модерировании можно увидеть все сервера с которых сейчас слушают
- новый режим совместим и старая прямая ссылка listen продолжит работать напрямую или перенаправит на другой сервер (для полноценного GEO-распределения слушателей нужно всё равно использовать постоянную ссылку .org)




Текущие заметки
- требуется настройка балансировки слушателей
- в разделе модерирования первый слушатель может появиться с задержкой в 10 секунд так как сервер неизвестен (если слушателей несколько, то все данные актуальные в реальном времени)
- вещание идёт на live сервер и с него потоки идут на облачные и видео ретрансляции (желательно запустить отдельный сервер)
- метаданные с точки лайв вещания Akmal%27%3bHammAli (Akmal';HammAli) обрезаются до Akmal (ошибка старая из-за ';)
- при перезагрузки радио наш HTML5 плеер иногда сам не переподключается
- при LIVE вещании в mp3 качестве меньше 96кбит в зависимости от перекодировщика радио может подвиснуть (проблема старая)