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

        Андрей Смирнов /   /
Тенденции
●   Минимальная задержка при обновлении
●   Минимальное время ожидания начала
    просмотра контента
●   Усложне...
Решения
●   Передача данных
    ●   AJAX
●   Постоянные соединения
    ●   HTTP Keep-Alive, BOSH, Comet, XMPP
●   Стриминг...
Сервер
●   Постоянные соединения
●   Много соединений (проблема C10k)
●   Относительно мало работы по каждому
    соединен...
Серверная архитектура
●   Процессы
●   Нити
●   Асинхронный ввод-вывод
    ●   memcached, nginx, haproxy, ...
Асинхронный ввод-вывод
●   Один поток (процесс)
●   Механизм опроса сокетов:
    ●   select(), poll(), epoll(), kqueue(), ...
Twisted Framework
●   Python
●   Ядро: async I/O
●   Deferred — асинхронная модель
    программирования
●   Реализация про...
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
    ●   Доп. протоко...
Qik Push Engine
●   Быстрое read-only API
    ●   Независимое от основной БД key-value хранилище
●   Обработка и распредел...
Qik Push Engine
                                    DB
                             es
                        updat
   HT...
Qik Push Engine
●   Факты:
    ●   1 экземпляр: 100 (250) запросов/с (CPU 2GHz)
    ●   Кластер 12 серверов: 1200 запросов...
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....
Контакты
●   Андрей Смирнов
    ●   Руководитель web-разработки Qik
●   me@smira.ru, smira@qik.com
●   http://www.smira.ru/
Upcoming SlideShare
Loading in...5
×

Twisted Framework - сетевые приложения в Python

6,397

Published on

HighLoad++-2009 talk

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

No Downloads
Views
Total Views
6,397
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Twisted Framework - сетевые приложения в Python

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

    Clipping is a handy way to collect important slides you want to go back to later.

×