Сервер 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/)