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

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

 

20090
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 вещания под нагрузкой

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

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

20090
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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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