pyFMS

3,587 views
3,521 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,587
On SlideShare
0
From Embeds
0
Number of Embeds
1,047
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Добрый день! Меня зовут Андрей Смирнов, я работаю техническим директором компании NetStream. Я расскажу о нашем опыте по созданию сервера вещаний для Flash. Сегодня этот сервер работает в качестве движка вещаний на сайте Smotri.com.
  • 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>

    ×