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

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

description

HighLoad++-2009 talk

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

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

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

на Python

Андрей Смирнов / /

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

● Минимальная задержка при обновлении● Минимальное время ожидания начала

просмотра контента● Усложнение клиентской части

Тенденции

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

Решения● Передача данных

● AJAX

● Постоянные соединения● HTTP Keep-Alive, BOSH, Comet, XMPP

● Стриминговые протоколы● RTMP, HTTP streaming

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

Сервер● Постоянные соединения● Много соединений (проблема C10k)● Относительно мало работы по каждому

соединению (CPU time/connection lifetime)

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

Серверная архитектура● Процессы● Нити● Асинхронный ввод-вывод

● memcached, nginx, haproxy, ...

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

Асинхронный ввод-вывод● Один поток (процесс)● Механизм опроса сокетов:

● select(), poll(), epoll(), kqueue(), IOCP

● Неблокирующийся ввод-вывод

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

Twisted Framework● Python● Ядро: async I/O● Deferred — асинхронная модель

программирования● Реализация протоколов:

● DNS, HTTP, IMAP, memcached, AMQP, …

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

Deferred● Отложенный результат● Результаты и ошибки● Вложенность● Closure

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

Deferred

D

errback

callback callback2callbackcallback

errback2

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

Deferred● statements

● catch

● finally

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

pyFMS● RTMP-сервер● Трудозатраты: 2+2 чел/мес● Факты: 1000+ соединений, 70 (250)

Мбит/с на процесс

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

pyFMS● Оптимизация:

● 2 дня, Python, ≈ 30% улучшения● 3 дня, Python → C, ≈ 50% улучшения

● Uptime - месяцы

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

pyFMS● Плюсы:

● Скорость разработки, переносимость● Оптимизированный код и event loop● Доп. протоколы: memcached

● Минусы:● Однопоточность

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

Qik Push Engine● Быстрое read-only API

● Независимое от основной БД key-value хранилище

● Обработка и распределение изменений по подпискам (pubsub)● AMQP-сервер в качестве шины обмена

сообщениями и хранилища событий

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

Qik Push

Engine

Qik Push

Engine

Qik Push Engine

Qik Push

Engine

HTTP (JSON/RPC,

REST)

DB

updates

memcacheDB

RabbitMQ

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

Qik Push Engine● Факты:

● 1 экземпляр: 100 (250) запросов/с (CPU 2GHz)● Кластер 12 серверов: 1200 запросов/с (3

физических), uptime - месяцы

● Плюсы:● Наличие готовых протоколов (AMQP, memcached)● Тестируемость

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

Twisted и нити● Python — GIL: нити не имеют смысла?● Модель worker, ThreadPool● Когда разумно использовать нити?

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

Разработка Twisted● Unit-testы● Политика code-review● Ветка в svn на каждое изменение

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

Twisted-проекты:● Apple Calendar Server● Air Canada (система бронирования)● FluidDB● Launchpad● Buildbot

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

Аналоги Twisted● Perl::POE● Ruby::EventMachine● C++::asio

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

Ссылки● http://twistedmatrix.com/● http://planet.twistedmatrix.com/● https://launchpad.net/tx/● http://divmod.org/trac

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

Контакты● Андрей Смирнов

● Руководитель web-разработки Qik

[email protected], [email protected]● http://www.smira.ru/