Почему я должен использовать WSGI?
Некоторое время с помощью mod_python я читал все больше статей о том, насколько хорош WSGI, не понимая почему.
Так почему я должен переключиться на него? Каковы преимущества? Трудно ли это, и стоит ли ему кривая обучения?
Ответы
Ответ 1
mod_wsgi vs. mod_python:
- mod_wsgi немного быстрее (внутри там больше C, меньше Python)
Процессы
- mod_wsgi могут быть изолированы от Apache, что улучшает безопасность/стабильность при использовании более низкой памяти [1]
- mod_python предоставляет вам доступ к некоторым внутренним компонентам Apache
WSGI в целом:
- много многоразового промежуточного ПО (аутентификация/авторизация, сеанс, кеширование, фильтрация)
- простота развертывания на веб-серверах, не относящихся к Apache, либо через встроенную поддержку WSGI, либо в режиме "плагин"
[1] - по сравнению с предпродачей Apache, которая поддерживает отдельный интерпретатор Python в каждом процессе
Ответ 2
Для разработки сложных веб-приложений на Python вы, вероятно, будете использовать более полную инфраструктуру веб-разработки, такую как DJango, Zope, Turbogears и т.д. Как разработчик приложений, вам не нужно беспокоиться о WSGI. Все, что вам нужно знать, это то, что эти фреймворки поддерживают WSGI. WSGI позволяет разделить код веб-сервера и веб-приложения, и системный администратор может изменить веб-сервер, если веб-приложение совместимо с WSGI. Если вы развиваетесь в одной из этих фреймворков, вы все равно будете удовлетворять этому условию.
Если вы разработчик веб-фреймворка (который разрабатывает сам DJango или Zope), вам нужно понять WSGI более подробно.
Ответ 3
В большинстве инфраструктур Python реализовано wsgi. Существует mod_wsgi для apache и модуль SCGI/FastCGI/AJP + Flup для других. Таким образом, вы можете использовать все преимущества отдельного процесса Python, не привязавшись к одному веб-серверу.
Ответ 4
Вам не нужно много переучивать, так как разница с перспективой разработчика - это всего лишь небольшая оболочка и некоторая конфигурация сервера.
С точки зрения развертывания разница заключается в том, что ваш код python живет в отдельном процессе из веб-браузера, что означает
a) Процесс python может работать как другой пользователь, чем веб-сервер. Это может быть ценным для обеспечения безопасности при правильном использовании.
b) Процессы веб-сервера не должны содержать время выполнения python. Это может стать большим стимулом для производительности, если на сервере запущено множество "других" запросов (статических файлов и т.д.) И некоторых тяжелых запросов на питон.
Ответ 5
WSGI - это стандартный API, который позволяет вам выбрать веб-сервер, а также поставить перед ним WSGI-конвейер, такой как Repoze.
См. http://repoze.org/
Ответ 6
Так почему я должен переключиться на него? Каковы преимущества?
Обычно, если у вас есть веб-сервер, например NGINX или Apache, вам необходимо включить модули (хотя конфигурация модулей в обоих случаях различна).
WSGI - это стандарт, описанный на PEP 3333, и в основном обеспечивает стандартный интерфейс между веб-приложениями, написанными на Python и Webservers.
Это означает, что WSGI обеспечивает переносимость вашего веб-приложения Python на многих разных веб-серверах без каких-либо дополнительных конфигураций на вашем NGINX, Apache и т.д.
Кроме того, сервер WSGI может предоставить вам множество функций с большей гибкостью по сравнению с веб-сервером. Gunicorn, предоставляет множество функций, таких как:
- Число рабочих потоков для обработки запросов
- Максимальное количество одновременных клиентов.
- Максимальное количество ожидающих соединений.
- Ограничить допустимый размер поля заголовка HTTP-запроса.
- Максимальное количество запросов, которые рабочий обрабатывает перед перезагрузкой.
Здесь - полный документ о вариантах, поддерживаемых Gunicorn.
Является ли это трудным, и стоит ли ему кривая обучения?
В качестве системного администратора вам не нужно понимать каждую деталь о стандарте, но, как разработчик программного обеспечения, вам может понадобиться понять немного больше, чем просто делать pip install gunicorn
и т.д.
Ссылки