Презентация на РИТ-2008 (PowerPoint)

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