2012-05-08 8 views
135

Quiero saber la diferencia entre las sesiones adhesivas y las no adhesivas. Lo que entendí después de leer de Internet:Sesiones adhesivas y no adhesivas

Adherido: solo objeto de sesión único estará allí.

no pegajosa sesión: objeto de sesión para cada nodo de servidor

Respuesta

411

Cuando su sitio web es servido por solamente 1 web server, para cada par, un objeto de sesión se crea y se mantiene en la memoria del servidor web. Todas las solicitudes del cliente van a este servidor web y actualiza este objeto de sesión. Si es necesario almacenar algunos datos en el objeto de sesión durante el período de interacción, se almacenan en este objeto de sesión y permanecen allí mientras exista la sesión.

Sin embargo, si su sitio web es servido por multiple web servers que se encuentra detrás de load balancer, el equilibrador de carga decide a qué servidor web real (físico) debe dirigirse cada solicitud. Por ejemplo, si hay 3 servidores web A, B y C detrás del equilibrador de carga, es posible que www.mywebsite.com/index.jsp se publique desde el servidor A, www.mywebsite.com/login.jsp se sirve desde el servidor B y www.mywebsite.com/accoutdetails.php se sirven desde el servidor C.

Ahora, si las solicitudes se sirven desde (físicamente) 3 servidores diferentes, cada servidor ha creado un objeto de sesión para usted y porque estas sesiones los objetos se sientan en 3 casilleros independientes, no hay forma directa de que uno sepa qué hay en el objeto de sesión del otro. Para sincronizar estas sesiones de servidor, puede que tenga que escribir/leer los datos de la sesión en una capa que es común a todos, como una base de datos. Ahora, escribir y leer datos a/desde un DB para este caso de uso puede no ser una buena idea. Ahora, aquí viene el rol de pegada a la sesión. Si el load balancer recibe instrucciones para utilizar sesiones adhesivas, todas sus interacciones se realizarán con the same physical server, aunque haya otros servidores presentes. Por lo tanto, su objeto de sesión será el mismo durante toda su interacción con este sitio web.

En resumen, en el caso de las Sesiones autoadhesivas, todas sus solicitudes se dirigirán al mismo servidor web físico, mientras que en el caso de un dispositivo de carga no adhesivo, puede elegir cualquier servidor web para atender sus solicitudes.

A modo de ejemplo, se puede leer sobre elástico equilibrador de carga de Amazon y sesiones pegajosa aquí: http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html

+0

@ TJ- ¿Qué pasará si un nodo no está disponible? – gstackoverflow

+8

En la mayoría de los casos, la sesión se perderá. En el caso de [AWS ESB] (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html) _Si una instancia falla o se vuelve no saludable, el equilibrador de carga detiene la solicitud de enrutamiento a esa instancia, en su lugar elige una nueva instancia saludable basada en el algoritmo de equilibrio de carga existente. El equilibrador de carga trata la sesión como ahora "pegada" a la nueva instancia sana y continúa enrutando las solicitudes a esa instancia, incluso si la instancia fallida regresa._ –

+1

¿De acuerdo con qué información LoadBalancer hace que una sesión HTTP permanezca fija? Especialmente en conexiones HTTPS, este tema se vuelve interesante. ¿Alimenta al LB con la clave privada de los servidores web, de modo que puede romper la conexión SSL y buscar la sesión HTTP? ¿O el LB simplemente hace uso de la dirección IP del cliente? En este caso, ¿qué pasa con el servidor proxy donde varios clientes usan la misma dirección IP? ¿O peor aún, clientes móviles, donde la dirección IP cambia con frecuencia? ¿O hay incluso una mejor técnica para eso? Gracias – g000ze

32

que he hecho una respuesta con algunos detalles más aquí: https://stackoverflow.com/a/11045462/592477

O puede leer ahí ==>

Cuando utiliza el balanceo de carga, significa que tiene varias instancias de tomcat y necesita dividir las cargas.

  • Si está utilizando la replicación sesión sin sesión pegajosa: Imagine que tiene sólo un usuario utilizando su aplicación web, y tiene 3 instancias Tomcat. Este usuario envía varias solicitudes a su aplicación, luego el loadbalancer enviará algunas de estas solicitudes a la primera instancia de tomcat , y enviará alguna otra de estas solicitudes a la segunda instancia de , y otra a la tercera.
  • Si está utilizando una sesión fija sin replicación: Imagine que solo tiene un usuario que usa su aplicación web y tiene 3 instancias de tomcat . Este usuario envía varias solicitudes a su aplicación, luego el loadbalancer enviará la primera solicitud de usuario a una de las tres instancias de tomcat , y todas las demás solicitudes enviadas por este usuario durante su sesión se enviarán al mismo tomcat ejemplo. Durante estas solicitudes, si apaga o reinicia esta instancia de tomcat (instancia de tomcat que se utiliza), el loadbalancer envía las solicitudes restantes a otra instancia de tomcat que todavía está ejecutándose , PERO como usted no usa la replicación de sesión, instancia tomcat que recibe las solicitudes restantes no tiene una copia de la sesión del usuario, entonces para este tomcat el usuario comienza una sesión: el usuario pierde su sesión y se desconecta de la aplicación web aunque la aplicación web aún se está ejecutando .
  • Si está utilizando una sesión fija con la replicación de la sesión: Imagine que solo tiene un usuario que usa su aplicación web y tiene 3 instancias de tomcat . Este usuario envía varias solicitudes a su aplicación, luego el loadbalancer enviará la primera solicitud de usuario a una de las tres instancias de tomcat , y todas las demás solicitudes enviadas por este usuario durante su sesión se enviarán al mismo tomcat ejemplo. Durante estas solicitudes, si apaga o reinicia esta instancia de tomcat (instancia de tomcat que se utiliza) el loadbalancer envía las solicitudes restantes a otra instancia de tomcat que todavía está ejecutándose, al usar la replicación de sesiones, la instancia tomcat que recibe las solicitudes restantes tiene una copia de la sesión de usuario luego el usuario mantiene su sesión: el usuario continúa navegando en su aplicación web sin ser desconectado, el cierre de la instancia tomcat no afecta la navegación del usuario.
Cuestiones relacionadas