SlideShare a Scribd company logo
Twisted Framework - фреймворк для
  написания сетевых приложений
            на Python

        Андрей Смирнов /   /
Тенденции
●   Минимальная задержка при обновлении
●   Минимальное время ожидания начала
    просмотра контента
●   Усложнение клиентской части
Решения
●   AJAX, BOSH/Comet и др.
●   Постоянные соединения
    ●   HTTP Keep-Alive
●   Стриминговые протоколы
    ●   RTMP
Сервер
●   Постоянные соединения
●   Много соединений (проблема C10k)
●   Относительно мало работы по каждому
    соединению (CPU time/connection
    lifetime)
Серверная архитектура
●   Процессы
●   Нити
●   Асинхронный ввод-вывод
    ●   memcached, nginx, haproxy, ...
Twisted Framework
●   Python
●   Ядро: async I/O
●   Deferred — асинхронная модель
    программирования
●   Реализация протоколов:
    ●   DNS, HTTP, IMAP, memcached, AMQP, …
Асинхронный ввод-вывод
●   Один поток (процесс)
●   Механизм опроса сокетов:
    ●   select(), poll(), epoll(), kqueue(), IOCP
●   Неблокирующийся ввод-вывод
Deferred
●   Отложенный результат
●   Результаты и ошибки
●   Вложенность
●   Closure
Deferred

       callback   callback2
  D
       errback    errback2
Deferred
●   statements


●   catch


●   finally
pyFMS
●   RTMP-сервер
●   Трудозатраты: 2+2 чел/мес
●   Факты: 1000+ соединений, 70 (250)
    Мбит/с на процесс
pyFMS
●   Оптимизация:
    ●   2 дня, Python, ≈ 30% улучшения
    ●   3 дня, Python → C, ≈ 50% улучшения
●   Uptime - месяцы
pyFMS
●   Плюсы:
    ●   Скорость разработки, переносимость
    ●   Оптимизированный код и event loop
    ●   Доп. протоколы: memcached
●   Минусы:
    ●   Однопоточность
Qik Push Engine
●   Быстрое read-only API
    ●   Независимое от основной БД key-value хранилище
●   Обработка и распределение изменений
    по подпискам (pubsub)
    ●   AMQP-сервер в качестве шины обмена
        сообщениями и хранилища событий
Qik Push Engine
                                    DB
                             es
                        updat
   HTTP
(JSON/RPC,
   REST)      Qik
               Qik
               Qik
             Push                 memcacheDB
              Push
              Push
             Engine
             Engine
              Engine


                       RabbitMQ
Qik Push Engine
●   Факты:
    ●   1 экземпляр: 100 (250) запросов/с (CPU 2GHz)
    ●   Кластер 12 серверов: 1200 запросов/с (3
        физических), uptime - месяцы
●   Плюсы:
    ●   Наличие готовых протоколов (AMQP, memcached)
    ●   Тестируемость
Twisted и нити
●   Python — GIL: нити не имеют смысла?
●   Модель worker, ThreadPool
●   Когда разумно использовать нити?
Разработка Twisted
●   Unit-testы
●   Политика code-review
●   Ветка в svn на каждое изменение
Twisted-проекты:
●   Apple Calendar Server
●   Air Canada (система бронирования)
●   FluidDB
●   Launchpad
●   Buildbot
Аналоги Twisted
●   Perl::POE
●   Ruby::EventMachine
●   C++::asio
Ссылки
●   http://twistedmatrix.com/
●   http://planet.twistedmatrix.com/
●   https://launchpad.net/tx/
●   http://divmod.org/trac
Контакты
●   Андрей Смирнов
    ●   Руководитель web-разработки Qik
●   me@smira.ru, smira@qik.com
●   http://www.smira.ru/

More Related Content

PDF
Twisted Framework - сетевые приложения в Python
PPTX
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
PDF
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
PDF
Анатомия веб сервиса (HighLoad-2014)
PPTX
Скорость с доставкой до пользователя
PPTX
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
PDF
Путь к Go на конкретном примере
PPT
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
Twisted Framework - сетевые приложения в Python
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Анатомия веб сервиса (HighLoad-2014)
Скорость с доставкой до пользователя
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Путь к Go на конкретном примере
Использование AMQP в основе архитектуры бэкенда для мобильного приложения

What's hot (18)

PDF
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
PPTX
Асинхронная обработка данных: RabbitMQ, Comet
PDF
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
PDF
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
ODP
Tuning Azure Service Bus (RU)
PDF
Консольные приложения на Go
PPTX
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
PDF
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
PDF
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
PDF
Борис Каплуновский, Aviasales.ru
PDF
Как обслужить миллиард пользователей и отдать терабит трафика
PDF
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
PDF
Web performance 101 [GDG nsk webdev meetup #3]
PDF
Юрий Насретдинов, Badoo
PDF
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
PPTX
Jinba - frontendconf.ru/2015
PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
PDF
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Асинхронная обработка данных: RabbitMQ, Comet
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Tuning Azure Service Bus (RU)
Консольные приложения на Go
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
Борис Каплуновский, Aviasales.ru
Как обслужить миллиард пользователей и отдать терабит трафика
DevConf-2015: Lightning Memory-Mapped Database (LMDB), ReOpen IT
Web performance 101 [GDG nsk webdev meetup #3]
Юрий Насретдинов, Badoo
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Jinba - frontendconf.ru/2015
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Ad

Similar to Smirnov Twisted Python (20)

PPTX
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
PPTX
gRPC в продакшне для мобильных приложений
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PDF
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
Vladimir V Perepelitsa Ae Highload
PPT
PPT
PPTX
мониторинг производительности приложения на PINBA
PDF
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
PPT
Сервер Flash-вещаний (RTMP) на Python или создание высоконагруженных сетевых ...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
 
PDF
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
PPS
Magento performance
ODP
Smirnov twisted-python
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
gRPC в продакшне для мобильных приложений
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Vladimir V Perepelitsa Ae Highload
мониторинг производительности приложения на PINBA
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Сервер Flash-вещаний (RTMP) на Python или создание высоконагруженных сетевых ...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Magento performance
Smirnov twisted-python
Ad

More from HighLoad2009 (20)

ODP
Krizhanovsky Vm
PPT
Eremkin Cboss Smsc Hl2009
PPTX
PPT
Kosmodemiansky
POTX
Scalaxy
PPT
Hl++2009 Ayakovlev Pochta
PPT
PPT
архитектура новой почты рамблера
PDF
Quick Wins
ODP
PPT
Hl2009 1c Bitrix
PDF
Php Daemon
PPTX
Dz Java Hi Load 0.4
PDF
Highload Perf Tuning
PPT
Hl2009 Pr V2
PPTX
Highload2009
PPTX
особенности использования Times Ten In Memory Database в высоконагруженной среде
PPT
бегун
PPT
Hl Nekoval
PPTX
High Load 2009 Dimaa Rus Ready
Krizhanovsky Vm
Eremkin Cboss Smsc Hl2009
Kosmodemiansky
Scalaxy
Hl++2009 Ayakovlev Pochta
архитектура новой почты рамблера
Quick Wins
Hl2009 1c Bitrix
Php Daemon
Dz Java Hi Load 0.4
Highload Perf Tuning
Hl2009 Pr V2
Highload2009
особенности использования Times Ten In Memory Database в высоконагруженной среде
бегун
Hl Nekoval
High Load 2009 Dimaa Rus Ready

Smirnov Twisted Python

  • 1. Twisted Framework - фреймворк для написания сетевых приложений на Python Андрей Смирнов / /
  • 2. Тенденции ● Минимальная задержка при обновлении ● Минимальное время ожидания начала просмотра контента ● Усложнение клиентской части
  • 3. Решения ● AJAX, BOSH/Comet и др. ● Постоянные соединения ● HTTP Keep-Alive ● Стриминговые протоколы ● RTMP
  • 4. Сервер ● Постоянные соединения ● Много соединений (проблема C10k) ● Относительно мало работы по каждому соединению (CPU time/connection lifetime)
  • 5. Серверная архитектура ● Процессы ● Нити ● Асинхронный ввод-вывод ● memcached, nginx, haproxy, ...
  • 6. Twisted Framework ● Python ● Ядро: async I/O ● Deferred — асинхронная модель программирования ● Реализация протоколов: ● DNS, HTTP, IMAP, memcached, AMQP, …
  • 7. Асинхронный ввод-вывод ● Один поток (процесс) ● Механизм опроса сокетов: ● select(), poll(), epoll(), kqueue(), IOCP ● Неблокирующийся ввод-вывод
  • 8. Deferred ● Отложенный результат ● Результаты и ошибки ● Вложенность ● Closure
  • 9. Deferred callback callback2 D errback errback2
  • 10. Deferred ● statements ● catch ● finally
  • 11. pyFMS ● RTMP-сервер ● Трудозатраты: 2+2 чел/мес ● Факты: 1000+ соединений, 70 (250) Мбит/с на процесс
  • 12. pyFMS ● Оптимизация: ● 2 дня, Python, ≈ 30% улучшения ● 3 дня, Python → C, ≈ 50% улучшения ● Uptime - месяцы
  • 13. pyFMS ● Плюсы: ● Скорость разработки, переносимость ● Оптимизированный код и event loop ● Доп. протоколы: memcached ● Минусы: ● Однопоточность
  • 14. Qik Push Engine ● Быстрое read-only API ● Независимое от основной БД key-value хранилище ● Обработка и распределение изменений по подпискам (pubsub) ● AMQP-сервер в качестве шины обмена сообщениями и хранилища событий
  • 15. Qik Push Engine DB es updat HTTP (JSON/RPC, REST) Qik Qik Qik Push memcacheDB Push Push Engine Engine Engine RabbitMQ
  • 16. Qik Push Engine ● Факты: ● 1 экземпляр: 100 (250) запросов/с (CPU 2GHz) ● Кластер 12 серверов: 1200 запросов/с (3 физических), uptime - месяцы ● Плюсы: ● Наличие готовых протоколов (AMQP, memcached) ● Тестируемость
  • 17. Twisted и нити ● Python — GIL: нити не имеют смысла? ● Модель worker, ThreadPool ● Когда разумно использовать нити?
  • 18. Разработка Twisted ● Unit-testы ● Политика code-review ● Ветка в svn на каждое изменение
  • 19. Twisted-проекты: ● Apple Calendar Server ● Air Canada (система бронирования) ● FluidDB ● Launchpad ● Buildbot
  • 20. Аналоги Twisted ● Perl::POE ● Ruby::EventMachine ● C++::asio
  • 21. Ссылки ● http://twistedmatrix.com/ ● http://planet.twistedmatrix.com/ ● https://launchpad.net/tx/ ● http://divmod.org/trac
  • 22. Контакты ● Андрей Смирнов ● Руководитель web-разработки Qik ● me@smira.ru, smira@qik.com ● http://www.smira.ru/