Назад | Перейти на главную страницу

Что лучше для обслуживания сайта django с помощью nginx + apache или nginx + tornado?

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

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

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

Мне нужен твой совет. Спасибо.

Django находится поверх интерфейса WSGI, и этот интерфейс по определению является блокирующим. Таким образом, вы не используете в своем веб-приложении какие-либо асинхронные механизмы, поэтому преимущества, которые вы получаете от использования асинхронного веб-сервера, значительно уменьшаются. Любые преимущества будут больше связаны с тем, что альтернативный сервер будет легким, не несущим столько накладных расходов и не будет иметь ничего общего с тем фактом, что используется async. Чтобы получить максимальную отдачу от асинхронного сервера, вам нужно отказаться от 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.

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

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

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