Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

pyFMS

3,693 views

Published on

Published in: Technology
  • Be the first to comment

pyFMS

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

×