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