GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing klen.github.io — Измерение производительности популярных python web-фреймворков — klen.github.io Содержание: На праздниках решил протестировать популярные python фреймворки для web на производительность. В отличии от других тестов не стал сосредотачиваться на деплойменте, тестируя разнообразные связки uwsgi/gunicorn/chaussette/waitress/nginx и тд. Но на тестировании именно самих платформ. В частности меня интересовала «плата за асинхронность» — насколько набирающие популярность асинхронные фреймворки превосходят/уступают синхронным WSGI-решениям. Участники тестированияNote Описания взяты с оригиналов
Методика тестированияТесты прогонялись на Amazon EC2 t2.medium сервере. Для создания нагрузки использовалась утилита WRK запущенная на том же сервере с параметрами: wrk -d30s -t12 -c400 [URL] Все приложения (кроме Tornado) запускались при помощи Gunicorn (2 процесса на каждое). Для синхронных WSGI библиотек использовался Meinheld worker. Приложение на Tornado запускало 2 процесса, используя средства самого фреймворка. Все тесты производились с использованием Python 3.4. Каждое приложение тестировалось по трем основным сценариям:
Первый сценарий это своеобразный «Hello World!» лишь несколько усложненный процессом кодирования в JSON, что практически не влияет на результаты. Показывает именно быстродействие в плане обработке HTTP-запросов. Второй сценарий несколько синтетический, тк его результаты весьма предсказуемы. Тем неменее он должен показывать насколько хорошо платформа справляется с длительными операциями ожидания во время обработки запроса. Третий сценарий предпалагается как комплексный тест и имитирует реальную жизнь, а именно использование базы данных, ORM, движка шаблонов. В качестве базы данных использовался Postgresql с дефолтными настройками. Исходники приложений можно найти на Github. Результаты
В первом простом тесте с хорошим отрывом победили синхронные фреймворки. Не считая Django, но в оправдание последнего, можно сказать, что по-умолчанию этот фреймворк делает множество работы (middlewares by default). Асинхронные фреймворки делят места аутсайдеров и неожиданно для меня на последнем месте оказался Tornado. Очень хорошие результаты у Falcon и Bottle.
Для понимания результатов следующего теста необходимо пояснить, что приложения обращались к nginx настроенному на ответ с задержкой 100ms. Из-за этого результаты синхронных фреймворков очень близки, практически вся их работа после определенного момента сводилась к ожиданию. Опять неожиданные результаты от Tornado, я предполагал, что он будет близок к Aiohttp и Muffin. Но тем неменее Tornado в 10 раз эффективнее в этом кейсе чем ближайший синхронный фреймворк.
И последний тест. Результаты Aiohttp можно игнорировать тк к сожалению более двух третей запросов вернули 502 ошибки. На первом месте неожиданно, но приятно, оказался мой фреймворк Muffin достаточно быстро обрабатывающий этот тест. Django значительно проигрывает, лишь подтверждая медлительность стандартного движка шаблонов и ORM. ВыводыЯ предлагаю читателю сделать их самостоятельно. Данное тестирование производилось мой чтобы понять выгоду использования синхронных/асинхронных библиотек и показатели производительности популярных решений. В дальнейшем планирую проводить данные измерения регулярно. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |