Поиск по сайту:

Сравнение веб-серверов для веб-приложений на основе Python


Введение

В этой статье мы поговорим о трех основных вещах: Python, веб-серверах и, что наиболее важно, о мелочах между ними.

Шутки в сторону, эта довольно длинная статья может показаться страшной для тех, кто ищет быстрые советы или ответы. К сожалению, в отличие от большинства вещей в мире Python, когда дело доходит до выбора стека производственного сервера для развертывания вашего приложения, не существует одного — и желательно только одного — очевидного способа сделать это.

Однако это не должно вас пугать. После прочтения этой статьи вы будете хорошо знать, как работают различные веб-серверы, и справитесь с задачей взаимодействия с веб-приложениями на основе Python. Измерив свои потребности и требования, вы сможете решить, какой сервер использовать.

Интерфейс шлюза веб-сервера Python v1.0 (WSGI)

Понимание проблем

Сегодня существует постоянно растущее число веб-серверов (или модулей для серверов), специально разработанных (или адаптированных) для взаимозаменяемой работы с веб-приложениями Python. Однако так было не всегда. В старые добрые времена у разработчиков не было возможности легко переключать веб-серверы по своему желанию, и каждое переключение имело свою цену из-за зависимостей и ограничений. Выбирая структуру для построения, вы также должны были решить, не всегда добровольно или сознательно, сервер(ы), которые вы могли бы использовать для обслуживания приложения. Это произошло из-за отсутствия общепризнанной спецификации интерфейса: точки соприкосновения, которую приложения (фреймворки) и веб-серверы могли бы адаптировать и использовать для связи, обеспечивая при необходимости взаимозаменяемость компонентов, возможно, с нулевым изменение кода.

Рождение стандарта

В начале этого века были предприняты усилия, чтобы окончательно решить проблему, представив сообществу Предложение по улучшению Python (PEP) 333.

Из PEP (Предложение по улучшению Python) 333:

This document specifies a proposed standard
interface between web servers and Python web
applications or frameworks, to promote web
application portability across a variety of
web servers.

Как поясняется в PEP, этот новый стандарт предназначался (и есть) для обеспечения переносимости между [веб-серверами] и [веб-приложениями Python] (и между ними). Мощные функции стандарта и его широкое распространение по сравнению с теми, что были раньше, ведут к сегодняшнему дню: миру, в котором существует множество (возможно, слишком много) веб-серверов, готовых выполнять работу за вас.

Сравнение

В этом сравнении веб-серверов для веб-приложений на основе Python мы поговорим о некоторых доступных вариантах и о том, что отличает их. Цель здесь состоит в том, чтобы читатель получил более четкое представление и помог сопоставить серверы с пользовательскими потребностями приложений, чтобы найти тот самый. Из-за огромного количества вариантов (каждый день появляется все больше!), мы будем фильтровать наш путь и говорить о тех, которые являются «особенными» по-разному: популярность, надежность или выполнение чего-то другого (или лучшего) по сравнению с остальные.

Примечание. Я хотел бы посоветовать вам, читатель, опасаться предвзятых и вводящих в заблуждение тестов, которые, как правило, не отражают условия реальной производственной среды. К сожалению, эти [статьи] на самом деле мало что значат, когда дело доходит до выбора веб-сервера для производства, который также вряд ли будет причиной узкого места. Поэтому вам рекомендуется оценить и понять свои собственные потребности, а затем попробовать разные варианты, воздерживаясь от спекулятивных цифр, чтобы избежать сценариев реальных бедствий в будущем.

Веб-серверы (в алфавитном порядке)

WSGI-сервер CherryPy

Что это такое?

CherryPy на самом деле является веб-фреймворком. Тем не менее, он полностью автономен — это означает, что он может работать сам по себе, в том числе в производственных сценариях, без необходимости в дополнительном программном обеспечении. Это достигается благодаря собственному веб-серверу, совместимому с WSGI, HTTP/1.1. Проект CherryPy описывает его как «высокоскоростной, готовый к производству универсальный HTTP-сервер с пулом потоков». Поскольку это сервер WSGI, его также можно использовать для обслуживания любого другого приложения WSGI Python, не привязываясь к CherryPy. каркас разработки приложений.

Почему вы должны рассмотреть возможность его использования?

  • Он компактен и прост.
  • Он может обслуживать любые веб-приложения Python, работающие на WSGI.
  • Он может обрабатывать статические файлы и может использоваться только для обслуживания файлов и папок.
  • Он объединен в пул потоков.
  • Поставляется с поддержкой SSL.
  • Это легко адаптируемая и простая в использовании альтернатива чистому Python, надежная и надежная.

Гуникорн

Что это такое?

Gunicorn — это автономный веб-сервер, который предлагает довольно много функций и значительно прост в эксплуатации. Он использует модель pre-fork — это означает, что центральному главному процессу (Gunicorn) поручено управлять инициированными рабочими процессами (различных типов), которые затем обрабатывают и обрабатывают запросы напрямую. И все это можно настроить и адаптировать под свои нужды и разнообразные производственные сценарии.

Почему вы должны рассмотреть возможность его использования?

  • Он поддерживает WSGI и может использоваться с любым WSGI-приложением и инфраструктурой Python.
  • Его также можно использовать в качестве замены Paster (например, Pyramid), Django's Development Server, web2py и т. д.
  • Предлагает выбор различных типов/конфигураций рабочих процессов и автоматическое управление рабочими процессами.
  • HTTP/1.0 и HTTP/1.1 (Keep-Alive) поддерживаются синхронными и асинхронными рабочими процессами.
  • Поставляется с поддержкой SSL
  • Расширяется с помощью крючков.
  • Он прозрачен и имеет четкую архитектуру.
  • Поддерживает Python версий 2.6, 2.7, 3, 3.2, 3.3.

Tornado (HTTP-сервер через wsgi.WSGIContainer)

Что это такое?

Tornado — это среда разработки приложений и сетевая библиотека, предназначенная для обработки асинхронных операций, позволяющая серверам поддерживать множество открытых соединений. Он также поставляется с сервером WSGI, который могут использовать другие приложения WSGI Python (и фреймворки).

Почему вы должны рассмотреть возможность его использования?

  • Если вы строите на топовой платформе Tornado; или
  • Вашему приложению требуется асинхронная функциональность.

Хотя в этих обстоятельствах вы можете выбрать сервер WSGI Tornado для своего проекта, вы также можете использовать Gunicorn с воркерами Tornado [асинхронными].

Скрученная паутина

Что это такое?

Twisted Web — это веб-сервер, который поставляется с сетевой библиотекой Twisted. В то время как Twisted сам по себе является «сетевым механизмом, управляемым событиями», сервер Twisted Web работает на WSGI и может поддерживать другие веб-приложения Python.

Почему вы должны рассмотреть возможность его использования?

  • Это простой в использовании, стабильный и зрелый продукт.
  • Он будет запускать приложения WSGI Python.
  • Он может работать как платформа веб-сервера Python, что позволяет программировать его с помощью языка для пользовательских целей обслуживания HTTP.
  • Он предлагает возможность простого и быстрого создания прототипов с помощью скриптов Python (.rpy), которые выполняются по HTTP-запросам.
  • Он поставляется с прокси-сервером и обратным прокси-сервером.
  • Он поддерживает виртуальные хосты.
  • Он может даже обслуживать Perl, PHP и т. д. с помощью API-интерфейса twisted.web.twcgi.

uWSGI

Что это такое?

Несмотря на очень запутанные соглашения об именах, uWSGI сам по себе представляет собой обширный проект со многими компонентами, целью которого является предоставление полного [программного] стека для создания хостинговых услуг. Один из этих компонентов, сервер uWSGI, запускает приложения Python WSGI. Он может использовать различные протоколы, в том числе собственный проводной протокол uwsgi, почти идентичный SCGI. Чтобы удовлетворить (понятное) требование использовать автономные HTTP-серверы перед серверами приложений, веб-серверы NGINX и Cherokee имеют модульную структуру для поддержки протокола uWSGI (самый эффективный) uwsgi для прямого контроля над его процессы.

Почему вы должны рассмотреть возможность его использования?

  • uWSGI поставляется с адаптером WSGI и полностью поддерживает приложения Python, работающие на WSGI.
  • Он связан с libpython. Он загружает код приложения при запуске и действует как интерпретатор Python. Он анализирует входящие запросы и вызывает вызываемый объект Python.
  • Он поставляется с прямой поддержкой популярного веб-сервера NGINX (наряду с Cherokee* и lighttpd).
  • Он написан на C.
  • Его различные компоненты могут делать гораздо больше, чем запуск приложения, что может быть удобно для расширения.
  • В настоящее время (по состоянию на конец 2013 г.) он активно развивается и имеет быстрые циклы выпуска.
  • Он имеет различные механизмы для запуска приложений (асинхронные и синхронные).
  • Это может привести к меньшему объему используемой памяти.

WSGI-сервер официантки

Что это такое?

Waitress — это сервер WSGI на чистом Python. На первый взгляд может показаться, что он не сильно отличается от многих других; однако его философия развития отличает его от остальных. Его цель — облегчить нагрузку на производство (и разработку), вызванную веб-серверами для разработчиков веб-приложений Python. Официантка достигает этого, нейтрализуя проблемы, вызванные различиями между платформой (например, Unix и Windows), интерпретатором (CPython и PyPy) и Python (версия 2 и 3).

Почему вы должны рассмотреть возможность его использования?

  • Это очень компактное решение на чистом Python.
  • Он поддерживает HTTP/1.0 и HTTP/1.1 (Keep-Alive).
  • Он готов к развертыванию в рабочей среде и поддерживает широкий спектр платформ.
  • В отличие от CherryPy, по своей природе он не зависит от фреймворка.
  • Он работает в Windows и Unix, а также в интерпретаторе CPython и PyPy (только для Unix).
  • Он поддерживает версии 2 и 3 Python.

Модули для автономных серверов

mod_python с адаптером WSGI (Apache) (встраивание Python)

Что это такое?

Проще говоря, mod_python — это модуль Apache, который встраивает Python в сам сервер. Хотя это не рекомендуется по разным причинам (проект мертв и устарел, и только совсем недавно он намеревался продолжить разработку первоначальным автором), его можно использовать для запуска приложений WSGI на Apache через оболочки.

Почему вы должны рассмотреть возможность его использования?

Вы можете захотеть запрограммировать и расширить Apache с помощью Python по определенной причине.

mod_wsgi (Apache) (встраивание Python)

Что это такое?

Будучи модулем, совместимым с WSGI, mod_wsgi позволяет запускать приложения Python WSGI на HTTP-сервере Apache. Это достигается двумя способами: первый похож на то, как работает mod_python, встраивая код и выполняя его в дочернем процессе. Другой метод предлагает режим работы на основе демона, при котором приложение WSGI имеет собственный отдельный процесс, автоматически управляемый mod_wsgi.

Почему вы должны рассмотреть возможность его использования?

  • Имеющийся опыт работы с Apache может означать стабильную производственную среду для ваших операций, когда дело доходит до запуска Python. Уже одно это может спасти положение, и оно того стоит.
  • Если вы зависите от Apache или хотите воспользоваться его стабильными и многофункциональными модулями расширения, это то, что вам нужно.
  • Он может запускать приложения под разными системными пользователями для дополнительной безопасности.
  • Это проверенное и надежное программное обеспечение.
  • Всемирная паутина содержит тонны информации и вопросов и ответов, связанных с ней, что может сэкономить вам много времени, когда вы столкнетесь с реальной производственной проблемой.
  • И он поставляется со всеми другими функциями, которые предлагает Apache.

Прислал: О.С. Тезер