Я создал приложение django / python, работающее на apache с wsgi и размещенное на одном экземпляре Amazon AWS EC2.
Это настраиваемое клиентское приложение, поэтому трафик низкий, но одна часть моего приложения генерирует отчеты, для которых требуется больше лошадиных сил, поэтому я хотел бы добавить входящий веб-сервер, который просматривает мои запросы и отправляет их одному из двух серверы приложений.
Я предполагаю, что это не совсем балансировка нагрузки, потому что я хочу обрабатывать запросы на создание документов, отличные от других запросов. Итак, я представляю себе apache на одной машине и django на другой ...
Но как люди это делают?
У меня возникли проблемы с поиском документации по этому поводу - есть ли что-то конкретное, что я мог бы искать?
К вашему сведению: Не рекомендуется, начиная с версии 1.7: поддержка FastCGI устарела и будет удалена в Django 1.9.
Я делаю такую же маршрутизацию с помощью nginx и запуска django с помощью gunicorn.
Nginx просто действует как обратный прокси-сервер и может маршрутизировать ваши запросы множеством разных способов.
Задайте определение и назовите свои вышестоящие серверы приложений:
upstream main_site { server localhost:8000;}
upstream reports { server 172.16.12.35:8000;}
И затем маршрутизируйте запросы соответственно
location /reports {
proxy_read_timeout 1900; #because these requests can take a while
proxy_pass http://reports;
}
location / {
proxy_pass http://main_site;
}
На самом деле я сделал это с двумя одинаковыми экземплярами приложения в одном и том же блоке, когда я был привязан к БД, но у сервера приложений было много сока, так что длительные отчеты не содержали бы потоки сервера приложений.
Даже если вы все еще запускаете приложение из apache / wsgi, nginx предлагает большую гибкость. Проверить это.
По-видимому, то, что я ищу, - это FastCGI, в котором есть такая возможность. Нашел ответ на Глава 21: Развертывание Django книги django, где говорится:
FastCGI - это эффективный способ разрешить внешнему приложению обслуживать страницы на веб-сервере. Веб-сервер делегирует входящие веб-запросы (через сокет) FastCGI, который выполняет код и передает ответ обратно веб-серверу, который, в свою очередь, передает его обратно в веб-браузер клиента.
Документы также объясняют Как использовать Django с FastCGI, SCGI или AJP. Похоже, я могу легко изменить путь запроса и направить его в разные экземпляры.