Запуск сайта django в многосерверной среде - как обрабатывать сеансы?

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

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

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

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

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

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

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

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

7
задан kender 19 September 2010 в 17:21
поделиться