Как правильно подойти к решению задачи о математическом моделировании клиент-серверного приложения, направленного на передачу потоковых данных?
Имеется клиент-серверное приложение (используется UDP протокол), позволяющее пользователям (имеются в виду групповые конференции от двух или более человек) в реальном времени общаться между собой по средством передачи текстовых и голосовых сообщений.
Для передачи голосовых сообщений используется запись с микрофона пользователя, которая, разбиваясь на пакеты по 50 миллисекунд кодируется одним из кодеков (например, G.711) транслируется всем пользователям, находящимся онлайн.
В рамках институтского проекта появилась необходимость построить математическую модель данной сети с целью проверить масштабируемость решения. то есть посмотреть, как рост одновременного числа участников будет отражаться на отзывчивости сервера.
Казалось бы, что задача довольно тривиальна, но в процессе поиска информации по данному вопросу в интернете пришел к выводу, что я, скорее всего, копаю не в той области, в которой нужно.
Быть может, кто-то знает книги или статьи в которых данная задача освещается?
Армянское Радио: если я правильно понимаю вопрос, то да, использую. На сколько мне известно, lidgren (а на сервере используется именно эта библиотека в связке с C#) это умеет.
Вам необходимо сделать следующее:
1. Собрать статистику данных из реального канала с аналогичными соединениями.
2. Выделить из статистики отдельные параметры (порты, адреса, задержки, значения других критических полей).
3. По каждому параметру попытаться выявить его закон распределения (либо же построить марковскую цепь, если совсем закон никакой не берется, либо же взять за основу гистограмму частот и с ней работать).
4. Сделать генератор событий для каждого отдельно взятого параметра (см. п.2) и на основе этих генераторов уже формировать реальные "модельные пакеты"
Гиблое дело. Алгоритмы в такой сети достаточно сложные, чтобы их можно было моделировать математически. Поставленную задачу (определение границ масштабируемости) куда проще решать нагрузочным тестированием в лаборатории.
Проще. но будут ли результаты показательными? Таким же образом я могу провести это исследование и в домашних условиях, добавив большое количество пользователей.
Александр: результаты будут всяко показательнее, чем на "модели", не учитывающей половину факторов.
В домашних условия вы, вероятно, не найдете сервера с достаточно стабильной загрузкой, хорошего канала до пользователей и кучи нужного сетевого оборудования.
И если второе и третье можно виртуализировать, то недостаток мощности так не спрячешь. Все же системы по-разному масштабируются на разных масштабах.
Строить граф и считать на нем максимальный поток. При этом, такие компоненты как коммутаторы, тоже нужно вводить как ребра и задавать на этих ребрах пропускную способность.
Если применяется multicast, вся нагрузка размазывается по коммутаторам, поэтому вопрос о масштабируемости сервера можно и закрыть
А почему вы считаете, что абстракция потока в сетях хорошо отражает происходящее в протоколах RTP/RTCP? Откуда вообще взять такую вещь, как пропускную способность коммутатора?
mayorovp: Нет необходимости строить модель, которая полностью совпадает с реальной работой протоколов для того, чтобы дать консервативную оценку возможностей масштабирования.
Пропускную способность коммутатора можно смоделировать на основании объема исходящего/входящего трафика и того факта что при исчерпании внутреннего буфера коммутатор начнет отбрасывать пакеты.
И обычно эта величина имеется в даташите.