Java

Cómo deshacerse de sesiones pegajosas en Java | Couchbase Spring Session

Sesiones pegajosas se refiere a la necesidad de redirigir las peticiones de un determinado usuario al mismo servidor en el que se encuentra su sesión. Se considera un antipatrón, ya que en caso de fallo de un servidor, todos los usuarios conectados a él perderán sus sesiones.

La asociación entre el usuario y el servidor suele configurarse a través del equilibrador de carga, y estrategias sencillas de equilibrio de carga como Redondo-robin a menudo no son suficientes para asegurar una distribución uniforme de las peticiones, ya que los usuarios pesados podrían acabar todos en el mismo nodo. Hay muchas maneras de evitar las sticky sessions, pero si tu aplicación almacena los datos del usuario en la HTTPSession, las opciones sin requerir una refactorización sustancial son un poco limitadas.

Una solución rápida a este problema es almacenar la sesión en la base de datos en lugar de utilizar la memoria del servidor. En este escenario, no importa qué nodo reciba la petición, cargará la sesión del usuario directamente desde el almacén de datos. Este enfoque es más simple que las soluciones específicas de contenedor, y también le permiten consultar las sesiones como cualquier otra cosa en su base de datos.

Couchbase encaja particularmente bien en este escenario: utiliza el motor interno de clave-valor y también aprovecha la capa de caché interna para mantener en memoria las sesiones utilizadas recientemente. En la práctica, esto significa que se trata de una solución que funcionará bien incluso a escala. Por eso añadimos el soporte de la comunidad Sesión de primavera:

Sesión Couchbase Spring hace que sea trivial soportar sesiones agrupadas almacenándolas en la base de datos y desde el punto de vista del desarrollador es totalmente transparente. Todo lo que tienes que hacer es añadir la siguiente dependencia:

y luego, en su clase principal, añada la clase @EnableCouchbaseHttpSession anotación:

y ya está!. Spring guardará automáticamente la HTTPSession en el Couchbase a partir de ahora:

Por defecto, la sesión se almacenará en la base de datos en un documento con un tipo igual a "sesiones“:

Pero puede cambiar el nombre del atributo de tipo, el valor de tipo y el tiempo que debe durar la sesión:

 

Consulta de la sesión del usuario

Tenga en cuenta que todos los datos de la sesión se almacenan de forma binaria en un atributo llamado _attr:

Spring no sabe qué tipos de objetos hay en la sesión, por lo que no hay una forma sencilla de convertirla a un formato legible por humanos. Puede superar esta limitación estableciendo el atributo keepStringAsLiteral como verdadero en el EnableCouchbaseHttpSession anotación:

keepStringAsLiteral dirá Sesión Couchbase Spring para almacenar todos los atributos String de la sesión como propiedades de nivel superior dentro del documento. Por ejemplo, en lugar de añadir una instancia directamente a la sesión, podríamos convertir el objeto a un formato de cadena codificado en JSON utilizando la función de Jackson ObjectMapper:

Y luego, cuando necesites leer el carro de sesión, conviértelo de nuevo en un objeto:

Esto añadirá un pequeño esfuerzo extra cuando necesite añadir/eliminar/actualizar datos de la sesión, pero por otro lado, podrá consultar sesiones. Este es el aspecto que tendrá el documento en la base de datos:

Tenga en cuenta que todavía tenemos el _att para los objetos que no son cadenas. Sin embargo, ahora también tenemos un atributo llamado llave, que es exactamente el objeto que añadimos a la sesión en el ejemplo anterior.

Ahora, si quieres consultar tu sesión, N1QL tiene una función llamada DECODE_JSONque puede convertir una cadena codificada en JSON en un objeto:

Nota: En un entorno de producción, se recomienda crear un índice con el objeto descodificado en lugar de descodificarlo en el momento de la consulta.

Si desea obtener más información sobre Couchbase Spring Session, consulte lo siguiente tutorial

Si tiene alguna pregunta, no dude en ponerse en contacto conmigo en @deniswrosa

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Author

Posted by Denis Rosa, Defensor del Desarrollador, Couchbase

Denis Rosa es un Developer Advocate para Couchbase y vive en Munich - Alemania. Tiene una sólida experiencia como ingeniero de software y habla con fluidez Java, Python, Scala y Javascript. A Denis le gusta escribir sobre búsqueda, Big Data, AI, Microservicios y todo lo que pueda ayudar a los desarrolladores a hacer una aplicación hermosa, más rápida, estable y escalable.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.