2010-09-19 6 views
5

Mi sitio django-powered se sienta detrás de un loadbalancer basado en Apache. También hay un servidor que maneja solicitudes de archivos estáticos, pero eso es simple.Ejecutando el sitio django en un entorno multiservidor: ¿cómo manejar las sesiones?

Lo que me molesta es cómo manejar a un usuario que puede ser lanzado a cualquiera de los servidores de aplicaciones por el equilibrador de carga? Todos comparten el mismo grupo de bases de datos (¿es inteligente? ¿O debería separarlo aquí también?), Así que lo único que me tiene que importar es la sesión.

En este momento las sesiones se almacenan en la memoria, para el rendimiento. Preferiría mantenerlos allí, así que lo que tendría que hacer es asegurarme de que el mismo usuario siempre acierte el mismo servidor de aplicaciones.

Algunas soluciones simples vinieron a mi mente.

1) hacen que esté basado en IP. Digamos, los números impares de IP golpean el servidor A e incluso los números llegan al B. Pero, ¿qué pasa si un usuario está detrás de un proxy o tiene una IP que cambia a menudo?

2) Cuando una solicitud llega al servidor de balanceo de carga, podría intentar verificar las cookies y ver qué servidor debe manejar eso. ¿Es posible/tiene sentido?

3) Sé que las soluciones J2EE, usando mod_proxy_ajp, manejan ese tipo de situaciones, aunque no tengo idea de lo que ocurre detrás de las escenas allí. ¿Podría usarse algo de Django?

¿O tal vez hay alguna otra forma de agrupar a Django para eso?

+2

Si pudiera facilidad de nuevo en la necesidad de sesiones de caché directos en la memoria RAM, una solución que no sería necesario un el equilibrador de carga de sesión pegajosa sería usar sesiones respaldadas por la base de datos (posibles sesiones de cached_db) y dar al servidor/grupo de bases de datos una montaña de RAM para mantener el rendimiento. No tan rápido como las sesiones en la memoria, pero menos faffing con balanceadores de carga ... –

Respuesta

Cuestiones relacionadas