WSGI против uWSGi с Nginx
Может кто-нибудь объяснить, пожалуйста, плюсы / минусы при использовании WSGI VS uWSGI с Nginx.
В настоящее время я создаю производственный сервер для веб-сайта Django, который я подготовил, но не могу решить, следует ли мне использовать WSGI или uWSGI. Не могли бы вы подробно объяснить, что отличает каждую конфигурацию? Какая конфигурация должна масштабироваться лучше?
заранее спасибо
4 ответа
Ладно, ребята, эта путаница вызвана отсутствием подробностей из нескольких источников, именами этих протоколов и тем, чем на самом деле является WSGI.
Резюме:
- WSGI и uwsgi оба являются протоколами ARE, а не серверами. Он используется для связи с веб-серверами для балансировки нагрузки и особенно для использования дополнительных функций, которые не может обеспечить чистый HTTP. До сих пор Nginx и Cherokee реализовали этот протокол.
- uWSGI - это сервер, и один из реализуемых им протоколов - WSGI (не путайте протокол uwsgi с сервером uWSGI). WSGI - это спецификация Python. Существует несколько реализаций спецификации WSGI, и она предназначена для использования не только для серверов приложений / веб-серверов, но существует довольно много серверов приложений WSGI (например, CherryPy, который также имеет готовый к работе веб-сервер, совместимый с WSGI)., если вы не достаточно запутались уже!).
- Сравнение UWSGI с WSGI - это сравнение апельсинов с яблоками.
Обычно лучше всего запускать Python отдельно от вашего основного веб-сервера. Таким образом, веб-сервер может иметь множество крошечных потоков, которые очень быстро обслуживают статический контент, в то время как ваши отдельные процессы Python будут большими и тяжелыми, и каждый из них будет работать со своим собственным интерпретатором Python. Так просто WSGI
это плохо, потому что он переполняет каждый из ваших потоков nginx большим интерпретатором Python. С помощью flup
или же gunicorn
или же uWSGI
позади nginx
это намного лучше, потому что это освобождает nginx для простого обслуживания контента и позволяет вам выбирать, сколько крошечных легких потоков nginx запускать, независимо от того, какое количество тяжёлых потоков Python вы используете для обслуживания динамического контента. Люди, кажется, очень довольны gunicorn
на данный момент, но любой из этих трех вариантов должен работать нормально.
В дальнейшем это также освобождает вас от необходимости переносить Python на другой сервер, когда нагрузка начинает становиться серьезной.
Я считаю, что это прямо здесь http://flask.pocoo.org/docs/deploying/uwsgi/ является хорошим ответом, чтобы прояснить путаницу. Вопрос не глупый, он возникает у любого, кто видит два термина и не имеет предварительной информации о том, как все работает вне мира mod_PHP (например, ничего против php или людей)
Сайт хорошо объясняет в практическом плане, что нужно и в чем разница, а также хороший пример развертывания nginx.
Эта запись блога представляет собой очень подробное сравнение множества серверов Python WSGI с кратким изложением и некоторыми рекомендациями в конце.