Site icon 8HOST.COM

Сравнение веб-серверов приложений на основе 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.

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

Gunicorn

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

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

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

Tornado (HTTP-сервер)

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

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

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

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

Twisted Web

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

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

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

uWSGI

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

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

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

Waitress WSGI-сервер

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

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

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