SlideShare a Scribd company logo
1 of 27
Приемы разработки
высоконагруженных приложений на
Twisted (Python)
Андрей Смирнов / /
Задача
● Постоянные соединения
● Много соединений
● "Легкие" запросы
● Низкое CPU time/wall time на один
запрос
Twisted Framework
● Python
● Ядро: async IO (select/poll)
● Deferred — асинхронная модель
программирования
● Реализация протоколов:
● DNS, HTTP, IMAP, memcached, AMQP, …
Сервер на Twisted
● Один процесс, одна нить
● Асинхронный ввод-вывод
(memcached, nginx, haproxy, …)
● В одном процессе обрабатывается
несколько запросов одновременно
Миф/правда №1
● Python не подходит для серверной
разработки
Python - медленный
● Примерно 10x медленнее C
● Но 90% времени выполнения
приходится на 10% кода
● Cython, Nukitka, Unladen Swallow, …
● Профайлинг — kcachegrind
Память в Python
● Подсчет ссылок
● Сборщик мусора для разрыва циклов
● Средства анализа — gc, heapy
● Оптимизация: __slots__, Cython, ...
Один поток/процесс
● Многоядерные процессоры
● Локальность, NUMA, привязка к
процессору
ссNUMA
CPU
Interconnection
CPU
Memory
CPU CPU
Memory
● CPU binding
● Node binding
● Local alloc
+10-15%
Архитектура сервиса
DB1
DB2
App1
App2
App3
Proxy
Добавим кэш
DB1
DB2
App1
App2
App3
Proxy
Cache
Cache
Cache
Когерентность кэшей
App1 Cache App2 Cache App3 Cache
Message bus
AMQP: шина сообщений
● Варианты доставки:
● fanout (один ко всем)
● origin (один к одному)
● RabbitMQ — брокер
● txAMQP — драйвер
● ZeroMQ
Локализация клиентов
App2
App3
Proxy
App1
Messagebus
IP
IP
IP
Key-value хранилища
● Memcached — встроенный
● memcached, MemcacheDB,
MemcacheQ, membase, ...
● txRedis
● txMongo
● ...
pickling
Хранение объектов
Object(id=199)
key1=v1
key2=v2
...
key-value
storage
Object_199 pickled
Object_378 pickled
Object _988 pickled
Сортированный список
user_199_posts
(id, date)
(197, 11:03)
(180, 10:45)
(111, 9:50)
(120, 9:01)
(98, 8:15)
(60, 7:05)
(42, 7:04)
(37, 7:01)
text="Nice shoes..."
author="john"
tags=['dev','schedule']
post_197 text="Nice shoes..."
author="john"
tags=['dev','schedule']
post_180
...
post_111
...
post_120
Нумерация экземпляров
origin
Memcached
origins[]
● "Свой" номер
● increment/add
● Список всех
экземпляров
● append/add
Статистика
origins
Agg
App1
App2
stats_1
stats_2
Memcached
● Twisted: manhole + telnet/ssh
● $ telnet localhost 2000
Обслуживание
C100k+
● Firewall в stateless mode
● twistd: reactor=epoll (kqueue)
● Минимизируем активность соединения
● Анализируем объем памяти на
соединение
Масштабирование
● Каждый новый клиент — какие ресурсы
потребляет?
● Какой процент ресурсов "сервера" и
остальных серверов (в т.ч.
разделяемых)?
Масштабирование
Ресурсы "своего" сервера
Другие
сервера
Разделяемые
ресурсы
Оптимизация
● Минимизация межсерверного
взаимодействия
● Агрегация сообщений
● Используем высокопроизводительные
компоненты
● memcached, MongoDB, RabbitMQ, cPickle, ...
Цифры
● JSON-RPC, "hello world"
● 890 req/s @ 0.022 sec
● 530 req/s @ 0.006 sec
Цифры
● Реальная система (кластер)
● JSON-RPC: 710 req/sec
● memcachedX: 11833 req/sec
● AMQP: 800 req/sec
● connections: 600K+ (670 reconnects/sec)
Контакты
● Андрей Смирнов
● Руководитель web-разработки Qik
● me@smira.ru, smira@qik.com
● http://www.smira.ru/, @smira

More Related Content

What's hot

Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
Andrey Smirnov
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Ontico
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Badoo Development
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
Andrey Smirnov
 

What's hot (20)

Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Применение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияПрименение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюдения
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
 
Make Async Great Again
Make Async Great AgainMake Async Great Again
Make Async Great Again
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
 

Viewers also liked

Обратная сторона облака
Обратная сторона облакаОбратная сторона облака
Обратная сторона облака
Anton Zhbankov
 

Viewers also liked (8)

Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Wi-Fi для чайников: основы технологии за 1 вебинар
Wi-Fi для чайников: основы технологии за 1 вебинарWi-Fi для чайников: основы технологии за 1 вебинар
Wi-Fi для чайников: основы технологии за 1 вебинар
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
 
Еще не используете Python? Тогда мы идем к вам
Еще не используете Python? Тогда мы идем к вамЕще не используете Python? Тогда мы идем к вам
Еще не используете Python? Тогда мы идем к вам
 
Обратная сторона облака
Обратная сторона облакаОбратная сторона облака
Обратная сторона облака
 
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Python для анализа данных
Python для анализа данныхPython для анализа данных
Python для анализа данных
 

Similar to Smirnov twisted-python

Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted Python
HighLoad2009
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
kuchinskaya
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
rit2011
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highload
rit2010
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ontico
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 

Similar to Smirnov twisted-python (20)

Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted Python
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложений
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
 
Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highload
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 

More from Andrey Smirnov

Remote Highload
Remote HighloadRemote Highload
Remote Highload
Andrey Smirnov
 
aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)
Andrey Smirnov
 

More from Andrey Smirnov (12)

Remote Highload
Remote HighloadRemote Highload
Remote Highload
 
Вебинар "Разработка высоконагруженных и надежных систем": Введение
Вебинар "Разработка высоконагруженных и надежных систем": ВведениеВебинар "Разработка высоконагруженных и надежных систем": Введение
Вебинар "Разработка высоконагруженных и надежных систем": Введение
 
Курс высокие нагрузки: сеть (отрывок)
Курс высокие нагрузки: сеть (отрывок)Курс высокие нагрузки: сеть (отрывок)
Курс высокие нагрузки: сеть (отрывок)
 
Курс высокие нагрузки: очереди (отрывок)
Курс высокие нагрузки:  очереди (отрывок)Курс высокие нагрузки:  очереди (отрывок)
Курс высокие нагрузки: очереди (отрывок)
 
aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)
 
Курс высокие нагрузки и надежность: отрывок
Курс высокие нагрузки и надежность: отрывокКурс высокие нагрузки и надежность: отрывок
Курс высокие нагрузки и надежность: отрывок
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
 
aptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетовaptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетов
 
Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)
 
pyFMS
pyFMSpyFMS
pyFMS
 
pyFMS
pyFMSpyFMS
pyFMS
 
PGDBObject
PGDBObjectPGDBObject
PGDBObject
 

Smirnov twisted-python