2010-09-19 4 views
5

Moja strona z django znajduje się za loadbalancerem opartym na Apache. Istnieje również serwer obsługujący żądania plików statycznych, ale to proste.Uruchamianie witryny django w środowisku multiserver - jak obsługiwać sesje?

Co przeszkadza mi w obsłudze użytkownika, który może zostać rzucony na jeden z serwerów aplikacji przez moduł równoważenia obciążenia? Wszystkie one mają tę samą klastrę DB (czy jest to inteligentne? Czy też powinienem ją również tutaj rozdzielić?), Więc jedyną rzeczą, którą muszę się zająć, jest sesja.

W tej chwili sesje są przechowywane w pamięci, w celu wykonania. Wolę je tam przechowywać, więc muszę się upewnić, że ten sam użytkownik zawsze trafi na ten sam serwer aplikacji.

Przyszło mi do głowy kilka prostych rozwiązań.

1) na podstawie IP. Powiedzmy, że nieparzyste numery IP uderzyły w serwer A, a nawet numery uderzyły w B. Ale co, jeśli użytkownik znajduje się za proxy lub ma często zmieniające się IP?

2) Kiedy żądanie trafi na serwer równoważenia obciążenia, mógłbym spróbować sprawdzić pliki cookie i zobaczyć, który serwer powinien to obsłużyć. Czy to jest możliwe/ma sens?

3) Wiem, że rozwiązania J2EE, używając mod_proxy_ajp, obsługują takie sytuacje, chociaż nie mam pojęcia, co dzieje się za kulisami. Czy coś może być użyte w Django?

A może jest jakiś inny sposób na klasteryzację Django?

+2

Jeśli można ułatwić powrót na wymóg sesji bezpośrednich w pamięci podręcznej RAM, jedno rozwiązanie, które nie potrzebują load-session load balancer byłoby używać sesji opartych na bazach danych (możliwe sesje cached_db) i dać serwerowi DB/puli górę RAM, aby utrzymać wydajność. Nie tak szybko, jak sesje w pamięci, ale mniej zajmują się równoważeniem obciążenia ... –

Odpowiedz

Powiązane problemy