- PVSM.RU - https://www.pvsm.ru -
Данная статья является переводом статьи Кевина Голдберга «A Performance Analysis of Python WSGI Servers: Part 2» dzone.com/articles/a-performance-analysis-of-python-wsgi-servers-part [1] с небольшими дополнениями от переводчика.
В первой части [2] этой серии Вы познакомились с WSGI и с шестью наиболее популярными по мнению автора WSGI-серверами. В этой части Вам будет показан результат анализа производительности этих серверов. С этой целью была создана специальная тестовая песочница.
Из-за нехватки времени исследование было ограничено шестью WSGI-серверами. Весь код с инструкциями по запуску для этого проекта размещен на GitHub [3]. Возможно со временем проект будет расширяться и будут представлены анализы производительности для других WSGI-серверов. Но пока речь пойдёт о шести серверах:
Чтобы сделать тест максимально объективным, был создан Docker [11]-контейнер для изоляции тестируемого сервера от остальной части системы. Также использование Docker-контейнера гарантировало, что каждый запуск начинается с чистого листа.
Все исходные показатели производительности были включены в репозиторий проекта [14], а также предоставлен сводный CSV-файл [15]. Также для визуализации были созданы графики в среде Google-doc [16].
На этом графике показано среднее количество одновременных запросов; Чем выше число, тем лучше.
ПОБЕДИТЕЛЬ: Bjoern
По количеству постоянных запросов Bjoern является очевидным победителем. Однако, учитывая, что цифры намного выше, чем у конкурентов, мы немного скептически настроены. Мы не уверены в том, что Bjoern действительно настолько ошеломляюще быстрый. Сначала мы тестировали серверы по алфавиту, и мы думали, что Bjoern получил несправедливое преимущество. Однако даже после запуска серверов в произвольном порядке сервера и повторного тестирования результат остался прежним.
Мы были разочарованы слабыми результатами uWSGI. Мы ожидали, что он окажется в лидерах. Во время тестирования мы заметили, что логи uWSGI печатает на экране, и первоначально мы объяснили отсутствие производительности дополнительной работой, которую выполнял сервер. Тем не менее, даже после добавленной опции «--disable-logging», uWSGI по-прежнему является самым медленным сервером.
Как упоминалось в руководстве uWSGI, оно обычно сопрягается с прокси-сервером, таким как Nginx. Однако мы не уверены, что это может объяснить такую большую разницу.
Задержка — это количество времени, прошедшего между запросом и его ответом. Более низкие цифры — лучше.
ПОБЕДИТЕЛЬ: CherryPy
Эта метрика показывает требования к памяти и «легкость» каждого сервера. Более низкие цифры — лучше.
ПОБЕДИТЕЛИ: Bjoern и Meinheld
Ошибка возникает, когда сервер падает, прерывается или истекает время запроса. Чем ниже, тем лучше.
Для каждого сервера мы рассчитали отношение общее отношение количества запросов к числу ошибок:
ПОБЕДИТЕЛЬ: CherryPy
Высокое использование ЦПУ не является хорошим или плохим, если сервер работает хорошо. Однако, это даёт некоторые интересные сведения о работе сервера. Поскольку использовались два ядра ЦПУ, максимальное возможное использование составляет 200 процентов.
ПОБЕДИТЕЛЬ: Нет, поскольку это скорее наблюдение в поведении, чем сравнение в производительности.
Подведем итог! Вот некоторые общие идеи, которые можно почерпнуть из результатов каждого сервера:
Автор: Степан Филатов
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/296518
Ссылки в тексте:
[1] dzone.com/articles/a-performance-analysis-of-python-wsgi-servers-part: https://dzone.com/articles/a-performance-analysis-of-python-wsgi-servers-part
[2] первой части: https://habr.com/post/426957/
[3] размещен на GitHub: https://github.com/omedhabib/WSGI_Benchmarks
[4] небольшое приложение: https://gist.github.com/omedhabib/c3c8ff74ec3993740e80d7235251e73a
[5] небольшой скрипт: https://gist.github.com/omedhabib/1c6bd85bd83cc065c41f8a428865963f
[6] этой команды: https://gist.github.com/omedhabib/8de8a5a7739726a0ab142a0f85295135
[7] документации Gunicorn: http://docs.gunicorn.org/en/stable/settings.html#workers
[8] своё приложение: https://gist.github.com/omedhabib/d638e213af0f843580e5ca7724005ac6
[9] этой команды: https://gist.github.com/omedhabib/8f0e6f7d0103780d3f6f0f73108a86b2
[10] создали двух worker-ов: https://gist.github.com/omedhabib/0e61685d14cd019622c02817034f26e3
[11] Docker: https://habr.com/post/309556/
[12] wrk: https://github.com/wg/wrk
[13] GitHub: https://github.com/omedhabib/WSGI_Benchmarks/blob/master/benchmark.sh
[14] были включены в репозиторий проекта: https://github.com/omedhabib/WSGI_Benchmarks/tree/master/round1
[15] CSV-файл: https://github.com/omedhabib/WSGI_Benchmarks/blob/master/results.csv
[16] Google-doc: https://docs.google.com/spreadsheets/d/1HVNNOIbZZOmFs9BHM9PmB9Ngf3hpPqMeiBYjJTWs3xY/pubhtml
[17] GIL Python: https://habr.com/post/84629/
[18] Источник: https://habr.com/post/427217/?utm_source=habrahabr&utm_medium=rss&utm_campaign=427217
Нажмите здесь для печати.