2010-09-19 5 views
5

Il mio sito basato su django si trova dietro un loadbalancer basato su Apache. C'è anche un server che gestisce le richieste di file statici, ma è semplice.Esecuzione del sito django in ambiente multiserver - come gestire le sessioni?

Ciò che mi dà fastidio è come gestire un utente che può essere lanciato su uno qualsiasi dei server delle applicazioni dal sistema di bilanciamento del carico? Condividono tutti lo stesso cluster DB (è intelligente? O dovrei separarlo anche qui?), Quindi l'unica cosa di cui mi devo preoccupare è la sessione.

In questo momento le sessioni vengono archiviate in memoria, per prestazioni. Preferirei tenerli lì, quindi quello che dovrei fare è assicurarmi che lo stesso utente colpisca sempre lo stesso app-server.

Mi sono venute in mente alcune semplici soluzioni.

1) renderlo basato su IP. Diciamo, numeri IP dispari hanno colpito il server A e anche i numeri hanno raggiunto lo B. Ma cosa succede se un utente è dietro un proxy o ha IP che cambia spesso?

2) Quando una richiesta raggiunge il server di bilanciamento del carico, potrei provare a controllarlo per i cookie e vedere quale server dovrebbe gestirlo. È possibile/ha senso?

3) Conosco le soluzioni J2EE, utilizzando mod_proxy_ajp, gestisco questo tipo di situazioni, anche se non ho idea di cosa succede dietro le quinte. Potrebbe qualcosa da lì essere usato per Django?

O forse c'è un altro modo per raggruppare Django per quello?

+2

Se si potesse facilitare indietro sulla necessità di sessioni di cache diretti in RAM, una soluzione che non avrebbe bisogno di un il servizio di bilanciamento del carico con sessione permanente dovrebbe utilizzare sessioni supportate da database (possibili sessioni cache_db) e fornire al server/pool DB una montagna di RAM per mantenere le prestazioni elevate. Non veloce come le sessioni in memoria, ma meno affievolito con i bilanciatori del carico ... –

risposta

Problemi correlati