Перейти к содержимому
Калькуляторы

От udpxy к GigA+: путь развития ПО доставки видеопотоков

Материал: GigA+ заинтересует тех, кто желает привнести HLS в “репертуар”, но не идёт по пути построения “хитроумного агрегата” собственными силами. Тем, кто уже работал с Gigapxy и знаком со “архитектурным стилем” данного продукта. Стиль этот будет выдержан и улучшен в GigA+. Полный текст

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

Архитектура udpxy была подчинена принципу крайней простоты. Это был простейший вариант "forked server" (по имени системного вызова fork(2)) для выполнения задач на маломощном процессоре с небольшим

количеством памяти.

Оно было кое как написано, обложено костылями со всех сторон.

https://github.com/pcherenkov/udpxy/tree/master/chipmunk

 

Цитата

Чем обосновывался выбор "forked server" как архитектуры приложения? Прежде всего, уверенностью в простоте задачи, для которой не требуются сложные средства. Нагрузка от переключения между (максимум) 16-ю процессами не была существенной и не оправдывала усложнения.

Мультиклиентность была прикручена ещё одним костылём в виде форка, как самое простое решение.

О ресурсах: если два и более клиента смотрят один канал, то бедная железка создаёт на каждого по юдп сокету чтобы получать один и тот же мультикаст а ядро размножает пакеты.

Очень заботливо.

 

Цитата

Бизнес-пользователи просили внести и множество иных изменений, продвигавших продукт в сегмент промышленного ПО.

Бизнес пользователи уже ничего не просили.

udpxy был заброшен долгие годы, там вообще ничего не добавляли, на все просьбы ложился болт, какие то патчи как то принимались...

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

Это и породило в начале инструкции о том как жить с попоболью и udpxy в продакшене:

https://habrahabr.ru/post/111317/

https://habrahabr.ru/post/152397/

А потом и альтернативные решения: mc2http (msd/msd_lite), astra.

 

Цитата

Разработка начиналась под FreeBSD, но вскоре стала параллельно идти под Linux как набирающей популярность в серверной среде.

лол.

Это в 2015 году линукс набирал популярность?)

 

Цитата

Клиенты могли в одночасье предпочесть некий канал А всем иным (как, например, во время трансляции футбольного матча) и перегрузить отведённый каналу (единственный) "движок" (читай - ядро процессора).

Это проблема плохого взаимодействия с системой.

Нет особых проблем в том, чтобы одним потоком на вдуть хоть 40г на современном то железе.

 

Цитата

Почему не был выбран иной механизм, например, кольцевой буфер? Система цепочек воспринималась при планировании наиболее гибкой, а схема потребления память цепочками - более разумной. Оправдался ли расчёт? Несомненно.

Кто то не осилил кольцевой буфер. %)

На самом деле в том же msd_lite кольцевой буфер это один кусок памяти, который в зависимости от состояния интерпретируется либо как цельный буфер либо как два буфера. И мизерный оверхэд на мету.

А где же результаты сравнения?

 

Цитата

Расчёт на то, что в процессе долговременной работы процесс gws может в какой-то момент "упасть" был оправдан. Модуль, отвечающий за обработку внешних запросов, рано или поздно сталкивается с "нестандартными" запросами, способными причинить вред из-за скрытых недостатков кода.

Цитата

Падений же gng, благодаря простоте внутренней логики, было крайне мало.

Да, кот с недостатками он такой - так и падает. )))

Что то у меня даже msd_lite не падал ни разу, не говоря об nginx, где многопроцессная модель используется отнюдь не для предотвращения крахов, а для миграции конфигов, обновления на живую и чтобы воркеры держать под не привилегированными юзерами а мастер процесс под рутом мог делать нужное ему.

 

Цитата

Эталоном остаётся пример покупателя, сумевшего "насытить" 10 гигабитную сетевую карту потоками с не самого современного сервера.

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

Кажется (со слов автора), даже астра отдаёт десяточку в один поток (она потокам так и не научилась, вроде) и без использования фичей ОС.

 

Цитата

GigA+ заинтересует тех, кто желает привнести HLS в "репертуар", но не идёт по пути построения "хитроумного агрегата" собственными силами.

Настроить ffmpeg + nginx не всем по силам, даже копипастой из инета, увы.

Шифрование в ffmpeg вроде тоже есть, прямо из коробки можно накрутить.

Масштабирование - средствами nginx - хоть до бесконечности/планетарных масштабов.

 

 

Спасибо за udpxy, он показал направление, что это возможно и как делать не нужно.

PS: как для рекламной статьи: нет графиков и цифер о деньгах, и слишком часто упоминается об падениях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Завязывайте! UdpXY был интересен в самом начале, но оказался кривым как хрен знает что! Сразу пришлось перейти на нормальный mc2http, а потом и на msd_lite. Вот этот софт (msd_lite) реально работает, реально экономит ресурсы и для него не является достижением загрузить хоть 100G сетевую карту!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Реальный msd_lite у меня нарушал поток так что VLC сообщал об ошибках, а картинка периодически дергалась, а udpxy просто взлетел и заработал.

И это я наслушался хвалы msd и попробовал его первым, а он еще и не особо работает.

 

Делал для себя дома, так что даже разбираться особо не хочется, не заработало значит в печь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

RTFM же!

http://netlab.dhis.org/wiki/ru:software:msd:config#ringbufstorepath

Скорее всего нужно было пошаманить с тем, куда он складывает кольцевой буфер, лучше его ложить в tmpfs а не на реальный диск.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вместо тысячи слов


/usr/local/bin/msd_lite -c /opt/msd_lite/etc/msd_lite.conf

 

[root@msd ~]# grep ringBuf /opt/msd_lite/etc/msd_lite.conf
            <ringBufStorePath>/tmp</ringBufStorePath>
            <ringBufSize>1024</ringBufSize> <!-- Stream receive ring buffer size. Must be multiple of sndBlockSize. -->

[root@msd ~]# df -h | grep /tmp
tmpfs              245M            0  245M            0% /tmp

 

iz@iz-lt ~> vlc share/iptv_msd.m3u
VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c)
[0000000001096148] core libvlc: Запуск vlc с интерфейсом по умолчанию. Используйте 'cvlc' для запуска vlc без интерфейса.
[0000000001198308] qt4 interface error: Unable to load extensions module
[0000000001151ad8] core playlist: stopping playback
[h264 @ 0x7f93cc0f78e0] error while decoding MB 20 29, bytestream -14
[h264 @ 0x7f93cc0f78e0] error while decoding MB 5 21, bytestream -8

 

Что бы там ни было, но костыли udpxy очевидно дают лучший результат

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Лайт уже приживается в роутерах, там ресурсов ещё меньше обычно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В качестве послесловия:

 

За udpxy всем благодарившим - большое "пожалуйста". Я рад, что получил столь обширный комментарий. 

 

Живучесть udpxy, замышлявшегося как приложение для домашнего использования, опередила все мои ожидания. Приложению этому исполнилось 10 лет, оно используется по всему миру и проникло невесть куда (дистрибутивы, порты, прошивки и т.п.).

 

Я рад, что новые продукты (Gigaxy, GigA+) были хорошо приняты, что позволяет мне на постоянной основе заниматься их развитием в коммерческом ключе и выпускать новые приложения. Я рад тем, кто захочет лично проверить эти продукты "на прочность", на пригодность в конкретной среде.

 

В комментариях я нашёл один момент, который стоило бы упомянуть в статье: был период, когда udpxy застыл, и отклики на запросы дейстивтельно шли с трудом и большими задержками. Момент этот был учтён в организации работы с пользователясм новых продуктов и, как мне видится, усилия оценены положительно. Полезной было и замечание об отсутствии в статье графиков и выкладок, хотя статья и не замышлялась как сравнительный анализ. Я несомненно учту и этот момент - ибо не кодом единым.
 

Всех благ,

Павел Черенков

 

P.S.: Я точно не "завяжу". :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

крылья... ноги.... хм, главное хвост!

 

или еще лучше AvProxy https://github.com/marakew/AvProxy/ который уже все умеет

чем этого ждать то msd или gigaxy

Изменено пользователем paradox_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Полная версия msd теперь доступна под BSD лицензией: https://github.com/rozhuk-im/msd

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.