Слайд 2НетСтрим (http://netstream.ru/)
Содержание
Обзор существующих решений.
Разработка своего решения (pyFMS): выбор архитектуры, основные проблемы и
пути их решения.
Борьба за качество: ретрансляция.
Полученные количественные характеристики.
Слайд 3НетСтрим (http://netstream.ru/)
Общая схема RTMP
RTMP:
симметричный;
проприетарный;
закрытый.
Возможности:
удаленный вызов процедур (RPC);
управление пропускной способностью;
работа с аудио-видео потоками
(просмотр и запись).
Клиент (Flash)
Сервер RTMP
RTMP
Слайд 4НетСтрим (http://netstream.ru/)
Существующие решения
Коммерческие:
Adobe Flash Media Server (FMS);
Wowza Media Server Pro.
Свободное ПО:
Red5 (http://osflash.org/red5/);
Milenia
Grafter (http://milgra.com/);
…
Слайд 5НетСтрим (http://netstream.ru/)
Архитектура сетевого сервера
Много процессов.
Много нитей.
Один поток (асинхронный ввод-вывод).
Комбинированный: асинхронный в/в +
много нитей/процессов.
Слайд 6НетСтрим (http://netstream.ru/)
Концепция нашего решения
Простота:
не будем реализовывать ничего лишнего;
простая архитектура - один поток
выполнения.
Python:
нам хорошо знаком;
Twisted Framework;
готовые модули: pyAMF.
Слайд 7НетСтрим (http://netstream.ru/)
Twisted Framework
Концепция отложенного выполнения (Deferred).
Переносимый асинхронный ввод-вывод (reactor).
Реализация большого числа базовых
протоколов (HTTP, DNS, Telnet, и т.п.)
Слайд 8НетСтрим (http://netstream.ru/)
Архитектура pyFMS
Слайд 9НетСтрим (http://netstream.ru/)
Схема вещания
API
Клиент
pyFMS
Сайт (API)
Сбор и
анализ
статистики
Слайд 10НетСтрим (http://netstream.ru/)
Эффективность реализации
Python – интерпретируемый ЯП
прозрачная сложность операций;
легкое расширение с помощью модулей
на С.
Для увеличения производительности в два раза достаточно было:
переписать 5% кода на Python;
написать один модуль на C (около 1000 строк кода).
Слайд 11НетСтрим (http://netstream.ru/)
Ретрансляция
Вещание на 10 000 клиентов? Легко!
pyFMS 1
pyFMS 2
pyFMS 3
pyFMS 4
Источник вещания
Ретрансляторы
Клиенты
Слайд 12НетСтрим (http://netstream.ru/)
Количественные характеристики
На один процесс (одно ядро
процессора):
10 тыс. соединений без потока
вещания;
Вещание: в среднем 100 Мбит/с, пик 140 Мбит/с; примерно соответствует 700-900 человек, которые смотрят вещание.
Ретрансляция позволяет наращивать мощность практически неограниченно.