SlideShare a Scribd company logo
gevent для эмуляции нагрузки
АЛЕКСАНДР КОЛЕСЕНЬ
ПРОБЛЕМА

• server-side на python: REST JSON API
• nginx, apache2+mod_wsgi в prefork
• MySQL/InnoDB
• bottle.py
• chef+fabric
• nagios+NewRelic
• Jenkins CI
ПРОБЛЕМА

Выдержит ли slashdot-эффект?
ЗАДАЧА

• тестирование производительности
• эмуляция “Интернета”
• на AWS/EC2
• как можно более дешевле
ЗАДАЧА

• раз в сутки стартуем perftest-кластер из Jenkins
• разворачиваем окружение, chef
• заливаем последний билд, fabric
• тестируем производительность
• снимаем и публикуем метрики
• убиваем кластер чтобы не тратить деньги
РЕШЕНИЕ: вариант

• ab, siege?
• не очень удобно
• хотелось бы запускать из Python
РЕШЕНИЕ: вариант

• нужен tool на Python
• у нас есть функциональные тесты
• хотелось бы использовать их для perftest
• NetworkIO-bound workload
• нужен Async-tool
• Twisted, Tornado?
РЕШЕНИЕ: gevent!

• cooperative-сокеты в green-тредах
• запускаем N green-тредов с func-tests
• без! доработки в callback-стиле
• получаем MAX утилизацию сети с MIN CPU,MEM
ДЕТАЛИ: gevent

• green-треды
• cooperative-сокеты
• monkey-patching
• работает поверх libev (epoll, kqueue)
ПРИМЕР: gevent

from gevent import monkey; monkey.patch_all()
def fetch_url(url):
while True:
data = urllib2.urlopen(url).read()

def main(urls):
gs = [gevent.spawn(fetch_url, url) for url in urls]
gevent.joinall(gs)

if __name__ == ’__main__’:
print main(["http://google.com/"]*1024)
РЕЗУЛЬТАТ

• 5K req/s с одного t1.micro за пару центов в час
• тестирование производительности каждый день
• автоматизировано через Jenkins, chef, fabric
• используем стандартные функциональные тесты
СПАСИБО ЗА ВНИМАНИЕ. ВОПРОСЫ

gevent
http://www.gevent.org
http://twit.tv/show/floss-weekly/238
http://www.youtube.com/watch?v=FITsetDUKJ0

Александр Колесень
mailto:alexander.kolesen@gmail.com
https://twitter.com/imm0use
https://plus.google.com/107935551373006842102/

More Related Content

PPTX
Triggermesh - FaaS платформа на Kubernetes
PDF
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
PDF
"Посмотрим на Акку-Джаву" Дмитрий Мантула
PDF
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
PDF
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
PPTX
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
PDF
Платформа для поставки счастья в команду QA
PDF
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
Triggermesh - FaaS платформа на Kubernetes
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
"Посмотрим на Акку-Джаву" Дмитрий Мантула
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Платформа для поставки счастья в команду QA
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?

What's hot (19)

PDF
My talk on Docker from Moscow Django Meetup #25
PDF
Ansible in the enterprise
PDF
PDF
Скоростное тестирование Rails / Александр Балашов (Evrone)
PDF
Мы делили апельсин
PDF
Михаил Боднарчук "Docker для PHP разработчиков"
PPTX
Введение в Akka
PDF
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
PPTX
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
PDF
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
PDF
My talk on Salt and Ansible from DevConf 2014
PDF
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
PPTX
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
PDF
Артём Ерошенко «Рецепт приготовления облачных тестингов»
PDF
Devconf-2015 Тестируем инфраструктуру как код
PDF
Workflows в Express 42
PDF
Using Ansible
PDF
Vagrant: плагины и гастрономический фестиваль
My talk on Docker from Moscow Django Meetup #25
Ansible in the enterprise
Скоростное тестирование Rails / Александр Балашов (Evrone)
Мы делили апельсин
Михаил Боднарчук "Docker для PHP разработчиков"
Введение в Akka
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
Docker & Puppet: как их скрестить и надо ли вам это?
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
My talk on Salt and Ansible from DevConf 2014
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Devconf-2015 Тестируем инфраструктуру как код
Workflows в Express 42
Using Ansible
Vagrant: плагины и гастрономический фестиваль
Ad

More from Python Meetup (20)

PPTX
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
PDF
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
PPTX
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
PDF
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
PDF
Python&Printer / Андрей Пучко / penta.by
PDF
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
PPTX
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
PDF
Про асинхронность / Максим Щепелин / Web Developer Wargaming
PPTX
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
PPTX
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
PPTX
Wargaming: тыл - фронту!
PDF
Язык программирования GO
PPTX
Максим Щепелин. "Unittesting. Как?"
PDF
Redis. Как мы боролись со сложностью
PDF
Обзор фреймворка Twisted
PPTX
Обзор способов написания конкурентных программ в питоне
PDF
PDF
Очередной скучный доклад про логгирование
PDF
Python для анализа данных
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Python&Printer / Андрей Пучко / penta.by
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
Про асинхронность / Максим Щепелин / Web Developer Wargaming
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Wargaming: тыл - фронту!
Язык программирования GO
Максим Щепелин. "Unittesting. Как?"
Redis. Как мы боролись со сложностью
Обзор фреймворка Twisted
Обзор способов написания конкурентных программ в питоне
Очередной скучный доклад про логгирование
Python для анализа данных
Ad

Использование gevent для эмуляции высокой нагрузки

  • 1. gevent для эмуляции нагрузки АЛЕКСАНДР КОЛЕСЕНЬ
  • 2. ПРОБЛЕМА • server-side на python: REST JSON API • nginx, apache2+mod_wsgi в prefork • MySQL/InnoDB • bottle.py • chef+fabric • nagios+NewRelic • Jenkins CI
  • 4. ЗАДАЧА • тестирование производительности • эмуляция “Интернета” • на AWS/EC2 • как можно более дешевле
  • 5. ЗАДАЧА • раз в сутки стартуем perftest-кластер из Jenkins • разворачиваем окружение, chef • заливаем последний билд, fabric • тестируем производительность • снимаем и публикуем метрики • убиваем кластер чтобы не тратить деньги
  • 6. РЕШЕНИЕ: вариант • ab, siege? • не очень удобно • хотелось бы запускать из Python
  • 7. РЕШЕНИЕ: вариант • нужен tool на Python • у нас есть функциональные тесты • хотелось бы использовать их для perftest • NetworkIO-bound workload • нужен Async-tool • Twisted, Tornado?
  • 8. РЕШЕНИЕ: gevent! • cooperative-сокеты в green-тредах • запускаем N green-тредов с func-tests • без! доработки в callback-стиле • получаем MAX утилизацию сети с MIN CPU,MEM
  • 9. ДЕТАЛИ: gevent • green-треды • cooperative-сокеты • monkey-patching • работает поверх libev (epoll, kqueue)
  • 10. ПРИМЕР: gevent from gevent import monkey; monkey.patch_all() def fetch_url(url): while True: data = urllib2.urlopen(url).read() def main(urls): gs = [gevent.spawn(fetch_url, url) for url in urls] gevent.joinall(gs) if __name__ == ’__main__’: print main(["http://google.com/"]*1024)
  • 11. РЕЗУЛЬТАТ • 5K req/s с одного t1.micro за пару центов в час • тестирование производительности каждый день • автоматизировано через Jenkins, chef, fabric • используем стандартные функциональные тесты
  • 12. СПАСИБО ЗА ВНИМАНИЕ. ВОПРОСЫ gevent http://www.gevent.org http://twit.tv/show/floss-weekly/238 http://www.youtube.com/watch?v=FITsetDUKJ0 Александр Колесень mailto:alexander.kolesen@gmail.com https://twitter.com/imm0use https://plus.google.com/107935551373006842102/