Стриминг на многих клиентов
От: Flem1234  
Дата: 13.03.20 15:41
Оценка:
Есть сервер, который должен стримить для всех подключенных к нему клиентов бинарные данные.
Потери допустимы — это что-то типа рил тайм графиков, если выпадет несколько кадров то ничего страшного.
Работает внутри одного сегмента сети.
Количество клиентов может увеличиться как и поток данных.

Сервер на .net core.
Пока что сделано на SignalR, лишь бы запустить первую версию.
По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?
Я пока рассматриваю передачу данных по UDP, только дополнительная работа в том, что один пакет данных придется резать на датаграммы. Может, есть что-то менее трудоемкое.
Re: Стриминг на многих клиентов
От: Jack128  
Дата: 13.03.20 16:14
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Есть сервер, который должен стримить для всех подключенных к нему клиентов бинарные данные.

F>Потери допустимы — это что-то типа рил тайм графиков, если выпадет несколько кадров то ничего страшного.
F>Работает внутри одного сегмента сети.
F>Количество клиентов может увеличиться как и поток данных.

F>Сервер на .net core.

F>Пока что сделано на SignalR, лишь бы запустить первую версию.
F>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?

F>Я пока рассматриваю передачу данных по UDP, только дополнительная работа в том, что один пакет данных придется резать на датаграммы. Может, есть что-то менее трудоемкое.
Ну если 50/50 то возможно проще будет стриминг ускорить? Например поменять формат данных
Отредактировано 13.03.2020 16:15 Jack128 . Предыдущая версия .
Re[2]: Стриминг на многих клиентов
От: Flem1234  
Дата: 13.03.20 16:31
Оценка:
Здравствуйте, Jack128, Вы писали:

F>>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?

J>Ну если 50/50 то возможно проще будет стриминг ускорить? Например поменять формат данных


Да, думаю о том, чтобы подменить сериализатор. В идеале даст 25% ускорения.
Re: Стриминг на многих клиентов
От: Danchik Украина  
Дата: 13.03.20 16:58
Оценка: 4 (1)
Здравствуйте, Flem1234, Вы писали:


F>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?

F>Я пока рассматриваю передачу данных по UDP, только дополнительная работа в том, что один пакет данных придется резать на датаграммы. Может, есть что-то менее трудоемкое.

SignalR это перебор. Тоже нужно подобное, присматриваюсь к
ZeroMQ
Akka.NET — https://getakka.net/articles/clustering/distributed-publish-subscribe.html
Re: Стриминг на многих клиентов
От: VladCore  
Дата: 13.03.20 19:58
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Есть сервер, который должен стримить для всех подключенных к нему клиентов бинарные данные.

F>Потери допустимы — это что-то типа рил тайм графиков, если выпадет несколько кадров то ничего страшного.
F>Работает внутри одного сегмента сети.
F>Количество клиентов может увеличиться как и поток данных.

F>Сервер на .net core.

F>Пока что сделано на SignalR, лишь бы запустить первую версию.
F>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?

F>Я пока рассматриваю передачу данных по UDP, только дополнительная работа в том, что один пакет данных придется резать на датаграммы. Может, есть что-то менее трудоемкое.

Резать руками не обязательно. Датаграммы "умеют сами себя резать"

Что бы сераилизация не тормозила не используйте сериалайзер, используйте JsonWriter
Re[2]: Стриминг на многих клиентов
От: Mystic Artifact  
Дата: 13.03.20 21:03
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Резать руками не обязательно. Датаграммы "умеют сами себя резать"

Так можно и до TCP дойти.

VC>Что бы сераилизация не тормозила не используйте сериалайзер, используйте JsonWriter

Это шутка? Кто такой JsonWriter? Их нынче штуки 3 приличных. С чего ты вообще взял что он нужен, этот JSON? По моим *личным* наблюдениям при нагрузке любая вменяемая JSON сериализация стремиться к 50%, и это как раз плохо, потому что ее доля должна стремиться к 0.

UPD: Наблюдаемые мной цифры не значат, что она (json сериализация) тормозная или еще чего. Скорее это говорит о характере нагрузки и/или удачи сэмплера. Тем не менее, совет хоть и правильный по замыслу, но в реальности, он звучит как: что бы сериализатор не тормозил, используйте сериализатор, который тормозит. Это извините, дурость.
Отредактировано 13.03.2020 21:13 Mystic Artifact . Предыдущая версия . Еще …
Отредактировано 13.03.2020 21:09 Mystic Artifact . Предыдущая версия .
Re: Стриминг на многих клиентов
От: kov_serg Россия  
Дата: 14.03.20 00:08
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Есть сервер, который должен стримить для всех подключенных к нему клиентов бинарные данные.

F>Потери допустимы — это что-то типа рил тайм графиков, если выпадет несколько кадров то ничего страшного.
F>Работает внутри одного сегмента сети.
F>Количество клиентов может увеличиться как и поток данных.
Используйте multicast
Re: Стриминг на многих клиентов
От: Ночной Смотрящий Россия  
Дата: 14.03.20 13:06
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?
F>Я пока рассматриваю передачу данных по UDP

Говоришь что тормозит сериализация, но заменить хочешь сетевой протокол? Зачем? У SignalR есть бинарный сериализатор. Нет — можешь protobuf попробовать. Если нужен текстовый формат — есть System.Text.Json, реализованный без перевыделения памяти.
Но вообще при профилировании надо не сколько что времени занимает, а сколько что тратит ресурсы, и прежде всего тот ресурс в который все упирается.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Стриминг на многих клиентов
От: Flem1234  
Дата: 14.03.20 17:59
Оценка:
Здравствуйте, Danchik, Вы писали:

D>SignalR это перебор. Тоже нужно подобное, присматриваюсь к

D>ZeroMQ
D>Akka.NET — https://getakka.net/articles/clustering/distributed-publish-subscribe.html

Спасибо!
ZeroMQ выглядит привлекательно.
Re[2]: Стриминг на многих клиентов
От: Flem1234  
Дата: 14.03.20 18:17
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Flem1234, Вы писали:


F>>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?
F>>Я пока рассматриваю передачу данных по UDP

НС>Говоришь что тормозит сериализация, но заменить хочешь сетевой протокол? Зачем? У SignalR есть бинарный сериализатор. Нет — можешь protobuf попробовать. Если нужен текстовый формат — есть System.Text.Json, реализованный без перевыделения памяти.


Если вы про MessagePack, то я его и использую. Не думаю, что протобуф даст значительное ускорение, и то и то бинарные форматы.
Половина тормозов в сериализаторе, половина в других компонентах SignalR. Вот и думаю, на что заменить. А так как мультикаст и отсутствие надежности навевают мысли о UDP, рассматриваю его.

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

Я назвал цифры со студийного diagnostic tool.
Re[3]: Стриминг на многих клиентов
От: Ночной Смотрящий Россия  
Дата: 14.03.20 20:23
Оценка:
Здравствуйте, Flem1234, Вы писали:

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

F>Я назвал цифры со студийного diagnostic tool.

Цифры чего? Общего времени выполнения метода, или сколько он процессора съел? Что является критерием производительности для твоей системы — latency или throughput? В какой ресурс упирается — CPU, mem, net? Нет никакой абстрактной производительности, вне контекста советы будут пальцем в небо.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Стриминг на многих клиентов
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 15.03.20 05:00
Оценка:
Здравствуйте, Flem1234, Вы писали
F>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?
F>Я пока рассматриваю передачу данных по UDP, только дополнительная работа в том, что один пакет данных придется резать на датаграммы. Может, есть что-то менее трудоемкое.
Кэшируй сериализованный пакет. Время сериализации упадёт на много порядков.
Respectfully,
Alexander Fedin.
Re[2]: Стриминг на многих клиентов
От: Mr.Delphist  
Дата: 16.03.20 08:13
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Используйте multicast


Сильно зависит от топологии сети. Многие внешние маршрутизаторы настроены на дроп мультикастов, так что для интра-сетей обычно мультикаст хорош, а вот внешние сетки — увы.
Возможно, будет полезно попробовать эппловский HLS или аналогичный.
Re[3]: Стриминг на многих клиентов
От: Danchik Украина  
Дата: 16.03.20 08:30
Оценка: 1 (1)
Здравствуйте, Flem1234, Вы писали:

F>Здравствуйте, Ночной Смотрящий, Вы писали:


НС>>Здравствуйте, Flem1234, Вы писали:


F>>>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>>>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?
F>>>Я пока рассматриваю передачу данных по UDP

НС>>Говоришь что тормозит сериализация, но заменить хочешь сетевой протокол? Зачем? У SignalR есть бинарный сериализатор. Нет — можешь protobuf попробовать. Если нужен текстовый формат — есть System.Text.Json, реализованный без перевыделения памяти.


F>Если вы про MessagePack, то я его и использую. Не думаю, что протобуф даст значительное ускорение, и то и то бинарные форматы.


Выбрось MessagePack и возьми Protobuf или Bond.
Re[4]: Стриминг на многих клиентов
От: Flem1234  
Дата: 16.03.20 12:15
Оценка:
Здравствуйте, Danchik, Вы писали:

F>>Если вы про MessagePack, то я его и использую. Не думаю, что протобуф даст значительное ускорение, и то и то бинарные форматы.


D>Выбрось MessagePack и возьми Protobuf или Bond.


А чем они лучше?
Re[5]: Стриминг на многих клиентов
От: Danchik Украина  
Дата: 16.03.20 16:47
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Здравствуйте, Danchik, Вы писали:


F>>>Если вы про MessagePack, то я его и использую. Не думаю, что протобуф даст значительное ускорение, и то и то бинарные форматы.


D>>Выбрось MessagePack и возьми Protobuf или Bond.


F>А чем они лучше?


Сериализация компактней, на глазок, раза в два.
Re: Стриминг на многих клиентов
От: Michael  
Дата: 16.03.20 17:31
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Есть сервер, который должен стримить для всех подключенных к нему клиентов бинарные данные.

F>Потери допустимы — это что-то типа рил тайм графиков, если выпадет несколько кадров то ничего страшного.
F>Работает внутри одного сегмента сети.
F>Количество клиентов может увеличиться как и поток данных.

F>Сервер на .net core.

F>Пока что сделано на SignalR, лишь бы запустить первую версию.
F>По результатам профилирования половину времени занимает отправка, из которого еще примерно половина — сериализация.

F>На что бы вы посоветовали заменить технологию стриминга рил тайм графиков?

F>Я пока рассматриваю передачу данных по UDP, только дополнительная работа в том, что один пакет данных придется резать на датаграммы. Может, есть что-то менее трудоемкое.

можно посмотреть на протокол SRT (на базе UDP). он сейчас раскручивается в теме live-стриминга,
но на самом деле он универсальный протокол, в репе лежат примеры передачи файлов.
в нём в частности можно указать период в течении которого система будет пытаться переслать пакет.
также есть режим "без потерь" это фактически имитация tcp.
вменяемая статистика (можно знать сколько пакетов потеряно и т.п.), если надо — шифрование.
https://github.com/Haivision/srt
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.