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

1,287 views
1,218 views

Published on

HighLoad++-2009 talk

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

  • Be the first to like this

No Downloads
Views
Total views
1,287
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
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/

×