Лучше ли обслуживать сайт django, используя nginx + apache или nginx + tornado?

У меня есть сайт django, интенсивно использующий ajax, в настоящее время работающий на apache mod_wsgi с nginx в качестве обратного прокси-сервера.

Теперь лучше сохранить текущие настройки или лучше запустить мой сайт django на торнадо с nginx в качестве обратного прокси-сервера и балансировщика нагрузки?

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

Мне нужен твой совет. Благодарю.

3 ответа

Решение

Django находится поверх интерфейса WSGI, и этот интерфейс по определению блокируется. Поэтому, если вы не используете какие-либо асинхронные механизмы в своем веб-приложении, то преимущества, которые вы получаете от использования асинхронного веб-сервера, значительно уменьшаются. Любые преимущества будут в большей степени связаны с тем, что альтернативный сервер будет легковесным и не будет иметь слишком много накладных расходов, и не будет иметь ничего общего с фактом использования асинхронного. Чтобы получить максимальную отдачу от асинхронного сервера, вам нужно отключить Django и записать в асинхронные API-интерфейсы конкретного асинхронного сервера, который вы используете.

Следует также подчеркнуть, что первоначальные тесты, выпущенные для Tornado по сравнению с Django поверх Apache/mod_wsgi, были ошибочными. Они утверждали, что Торнадо был в 4 раза быстрее. Это может быть справедливо для простого асинхронного веб-приложения, написанного для API-интерфейсов Tornado, по сравнению с приложением Django hello world, но если сравнить его с базовой программой WSGI hello world, производительность не так уж велика. Таким образом, производительность Django, работающего поверх Tornado с адаптером WSGI, не сильно отличается от Django поверх Apache/mod_wsgi, и когда я тестировал их на MacOS X, Tornado на самом деле немного медленнее.

Если вы по-прежнему считаете, что использование более легкого сервера принесет вам некоторые преимущества или может оказаться более простым в управлении, я бы предложил использовать Gunicorn вместо Tornado.

Мы используем nginx как балансировщик нагрузки и uWSGI как быстрый WSGI-сервер. Пока проблем нет

Отличным решением для обслуживания Django (или других приложений WSGI) является Nginx + Gunicorn. Пока что эта установка работает очень хорошо, и программное обеспечение Gunicorn является недавним и очень хорошо воспринято сообществом Python и Django. Тебе стоит попробовать это.

В настоящее время я использую Supervisord для управления процессами Gunicorn, но возможны и другие решения.

Другие вопросы по тегам