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

 Вступление

Данная статья посвящена трем важным в разработке приложений понятиям: Python, а также веб-серверам и наиболее важным их отличиям.

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

Тем не менее, это не так страшно. Данная статья подробно описывает различные веб-серверы, их функции и обработку приложений на основе Python. Это поможет принять решение, какой из серверов больше отвечает требованиям того или иного проекта.

Python Web Server Gateway Interface v1.0 (WSGI)

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

Появление стандарта

В начале этого века были приложены все усилия, чтобы, наконец, представить публике Python Enhancement Proposal (PEP) 333.

Из PEP (Python Enhancement Proposal) 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.

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

Сравнение

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

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

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

CherryPy WSGI-сервер

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

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

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

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

Gunicorn

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

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

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

  • Он поддерживает WSGI и может быть использован с любым приложением и фреймворком Python на основе WSGI.
  • Это также полноценная замена Paster (например, Pyramid), сервера разработки Django, web2py, и так далее.
  • Предлагает широкий выбор различных типов «исполнителей»/конфигураций и автоматическое управление рабочими процессами.
  • Поддерживает HTTP/1.0 и HTTP/1.1 с помощью синхронных и асинхронных исполнителей.
  • Поставляется с поддержкой SSL
    Расширяется с помощью специальных точек входа.
    Интуитивно понятен, имеет четкую архитектуру.

Tornado (HTTP-сервер)

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

Tornado – это фреймворк для разработки приложений и сетевая библиотека, созданная для обработки асинхронных операций, что позволяет таким серверам поддерживать большое множество открытых соединений. Поставляется с сервером WSGI, который могут использовать для запуска другие приложения и фреймворки WSGI Python.

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

  • Необходим при работе с фреймворком Tornado;
  • Удобен для приложений, которым нужен асинхронный режим работы.

Хотя, в таких случаях можно также использовать Gunicorn с асинхронными исполнителями Tornado.

Twisted Web

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

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

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

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

uWSGI

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

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

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

  • Поставляется с адаптером WSGI и полностью поддерживает приложения Python на WSGI.
  • Связан с libpython. Он загружает код приложения при запуске и действует как интерпретатор Python, а также анализирует входящие запросы и вызывает Python.
  • Поставляется с прямой поддержкой популярного веб-сервера NGINX (а также Cherokee и Lighttpd).
  • Написан на языке C.
  • Различные компоненты могут сделать гораздо больше, чем просто запуск приложения, что может быть полезно для расширения функций.
  • В настоящее время (по состоянию на конец 2013 года), uWSGI активно развивается, регулярно появляются новые версии.
  • Имеет различные механизмы для запуска приложений (асинхронного и синхронного).
  • Невысокое потребление памяти при запуске.

Waitress WSGI-сервер

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

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

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

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

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

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

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

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

Возможно, у разработчика есть определенные причины для программирования и расширения Apache с помощью Python.

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

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

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

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

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

Добавить комментарий