Запуск сайта django в многосерверной среде - как обрабатывать сессии? - PullRequest
7 голосов
/ 19 сентября 2010

Мой сайт на django работает за балансировщиком нагрузки на основе Apache.Также есть сервер, обрабатывающий статические запросы файлов, но это просто.

Что меня беспокоит, так это то, как обрабатывать пользователя, который может быть переброшен на любой из серверов приложений балансировщиком нагрузки?Все они совместно используют один и тот же DB-кластер (это умный? Или я должен разделить его и здесь?), Так что единственное, что мне нужно, это сеанс.

Сейчас сеансы хранятся в памяти,для исполнения.Я бы предпочел оставить их там, поэтому мне нужно убедиться, что один и тот же пользователь всегда будет работать с одним и тем же сервером приложений.

Мне пришло в голову несколько простых решений.

1) сделать его основанным на IP.Допустим, нечетные IP-адреса попадают на сервер A, а четные номера - B.Но что, если пользователь находится за прокси-сервером или его IP-адрес часто меняется?

2) Когда запрос попадает на сервер балансировки нагрузки, я могу попытаться проверить его на наличие файлов cookie и посмотреть, какой сервер должен обработать это.Это возможно / имеет смысл?

3) Я знаю, что решения J2EE, использующие mod_proxy_ajp, справляются с подобными ситуациями, хотя я понятия не имел, что происходит за кулисами.Может ли что-то оттуда быть использовано для Джанго?

Или, может быть, для этого есть другой способ кластеризации Django?

1 Ответ

6 голосов
/ 20 сентября 2010

Вы можете настроить кластер memcached и настроить свой django для использования его для хранения сессии: http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-cached-sessions

...