Fundamentos de Payara Server Parte 5 - Configurando Sesiones Persistentes para Payara Server con Servidor Web Apache
Originally published on 01 Nov 2017
Last updated on 15 Feb 2018
Este artículo continúa nuestra serie de blogs de introducción para configurar un cluster con Payara Server, continuando desde nuestro último articulo donde configuramos un balanceador de carga para nuestro cluster.
See here for the original version in English language.
Creando un cluster con nuestras instancias de Payara Server y balanceando el tráfico entre ellos con el servidor web Apache mantenemos los beneficios de tener nuestra aplicación accesible desde una URL y ganar la capacidad de recuperación y prospectos de expansión al tener nuestra aplicación desplegada a través de múltiples instancias.
Sin embargo, una aplicación distribuida en varias instancias puede provocar problemas con las sesiones de usuario. Previamente, cuando está alojada en una única instancia, una sesión se considera confiable y poco probable que cambie durante el transcurso de las actividades de navegación del usuario. Ahora, sin embargo, tenemos sesiones siendo creadas al navegar a cada página ya que nuestro balanceador de carga distribuye diligentemente el tráfico entre todas nuestras instancias. Lo que queremos es una forma de que el tráfico se comporte de manera homogenea a medida que los usuarios acceden a nuestra aplicación, pero que permita que cada usuario permanezca en un mismo "huesped" durante toda su sesión, para que sus carritos de compras no se vacíen cada vez que refresquen una página por ejemplo. La sesión está almacenada dentro de una cookie, la cual es esencialmente una manera de trabajar con la naturaleza sin estado del protocolo HTTP. Necesitaremos añadir esta cookie con la ruta de la JVM (una manera de distinguir a que instancia está ligada cada sesión de usuario).
Afortunadamente, existe un módulo del servidor web Apache que hace exactamente esto. En este articulo, vamos a ver como configurar sesiones persistentes utilizando la cookie JSESSIONID y las rutas de las JVM y demostrarlas en acción con la aplicación clusterjsp.
Requisitos
Si has estado siguiendo esta serie, estamos construyendo sobre el blog anterior donde configuramos el balanceo de carga para nuestro cluster.
- Una máquina Ubuntu 16.04 con:
- JDK8
- Servidor Web Apache
- Payara Server
- 1x servidor administrador de dominio (DAS)
- 1x Instancia local "local-instance"
- Una máquina Ubuntu 16.04 con:
- JDK8
- OpenSSH
- Payara Server
- 1x Instancia local "second-Ubuntu-host-instance", controlada remotamente por el DAS
Desplegando la aplicación de prueba
Continuaremos utilizando la aplicación clusterjsp para demostrar nuestras sesiones persistentes. La aplicación clusterjsp es una página simple JSP que muestra algunos datos útiles sobre ha sido servida la página web, al igual que darnos el JSESIONID que será útil para identificar nuestras sesiones persistentes. Mientras puedes ver la cookie impresa en la página clusterjsp, la ruta que agregamos sólo se mostrará dentro de la consola de desarrollador de tu navegador.
Al igual que antes, desplegaremos la aplicación desde la vista de Aplicaciones de ambas instancias, dejando los valores por defecto intactos por ahora.
En el navegador Chrome puedes ver las cookies en la Consola de Desarrollador (pulsando F12) bajo Aplicación → Almacenamiento → Cookies:
En Firefox quizas necesites habilitar específicamente la pestaña Almacenamiento dentro de la Consola de Desarrollador (pulsando F12) para visualizar las cookies:
Si navegas a la página clusterjsp, verás que actualmente sólo existen dos cookies, JSESIONID y JSESSIONIDVERSION (la cual podemos ignorar sin problema), no hay otros valores asociados con nuestra sesión, y cuando actualizamos la página recibiremos a una nueva sesión, probablemente asignado desde una nueva instancia.
Configurando sesiones persistentes
Será necesario modificar 2 lugares para tener configuradas nuestras sesiones persistentes. Primero, en el servidor web Apache, necesitaremos modificar nuestro balanceador de carga para tomar en cuenta nuestro deseo de permanecer en el mismo servidor especificando un identificador de ruta que mapea a nuestras instancias de Payara Server. Segundo, necesitaremos modificar nuestras instancias de Payara Server para que contengan este identificador de ruta de forma que el tráfico desde el servidor Web Apache llegue a la instancia correcta. El resultado final consistirá en una cookie JSESSIONID y su ruta inicial, separados por un punto (por ejemplo cac78b5a876dc8ed02e65bd3fc79.local-instance)
Modificando la configuración del sitio web
Para configurar el Servidor web Apache con sesiones persistentes, necesitaremos modificar los elementos BalancerMember y ProxyPass. Para especificar la ruta( a la que Payara Server se refiere como el jvmRoute), necesitaremos un valor único para referirnos a cada una de nuestras instancias. Afortunadamente, ya que el nombre de la instancia tiene que ser único, podemos utilizarlo. Toma el nombre de cada una de tus instancias de Payara Server (en mi caso, "local-instance" y "second-Ubuntu-host-instance") y añade la ruta(route=<Nombre de la Instancia>) al final de cada declaracion BalancerMember. También necesitarás añadir stickysession=JSESSIONID a la línea ProxyPass para definir que cookie será utilizada para almacenar el dato de la ruta:
<Proxy "balancer://payara/">
BalancerMember "http://<Local-Instance-IP>:<Local-Instance-Port>/" route=<Instance Name>
BalancerMember "http://<Remote-Instance-IP>:<Remote-Instance-Port>/" route=<Instance Name>
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / "balancer://payara/" stickysession=JSESSIONID
ProxyPassReverse / "balancer://payara/"
La configuración de tu sitio debería verse similar a la siguiente:
Guarda la configuración y reinicia el servidor web Apache para aplicar los cambios:
sudo service apache2 restart |
Modificando las instancias
Para configurar Payara Server para nuestras sesiones persistentes, sólo tendremos que añadir la ruta faltante (jvmRoute) la cual no es proporcionada por las instancias de Payara Server. Afortunadamente, para de Payara Server el nombre de instancia que utilizamos en la configuración del sitio es una variable de entorno (com.sun.aas.instancename) la cual podemos configurar en la configuración del cluster y será asignada dinámicamente para cada instancia (en lugar de tener que especificar -DjvmRoute=local-instance, por ejemplo). Para ir a la página de Configuración de la JVM, selecciona cluster-config del árbol de páginas y selecciona Configuración JVM de la lista. Para añadir una nueva variable jvmRoute, ve a la pestaña Opciones JVM y hacer clic en Añadir Opción JVM. En la caja de texto que aparece, introducir -DjvmRoute=${com.sun.aas.instanceName}. Esto añadirá una nueva variable JVM (`-D`) que configura la ruta correcta de cada instancia que referencie esta configuración:
Comprobando nuestros cambios
Con la ruta añadida a las opciones de la JVM, nuestras sesiones persistentes deben estar listas para funcionar.
Volviendo a nuestra aplicación clusterjsp, cuando actualizamos la página el servidor Web Apache continuará enviándonos por la misma ruta. Puedes ver la cookie completa abriendo de nuevo la pestaña Almacenamiento en la Consola de Desarrollador; como puedes ver nuestra JSESSIONID ha sido añadida con el sufijo .local-instance. Si borras las cookies y actualizas la página (simulando una desconexiön de la sesión por ejemplo), recibirás una nueva cookie y de nuevo estará ligada a una de las dos instancias:
Y con esto tenemos configuradas las sesiones persistentes en Payara Server, gracias a la ayuda del servidor Web Apache. Nuestro cluster de instancias de Payara Server ha crecido significativamente desde el principio ya que hemos agregado nuevas características y mejorado sus capacidades. Desde aquí tienes una sólida base para expandir las opciones de tus aplicaciones, hemos implementado un sistema escalable que, si bien aún puede mejorarse, es un gran comienzo para un entorno de producción confiable y de alta disponibilidad.
See here for the original version in English language.
Related Posts
Jakarta EE Media & Community Challenge - Winning Entries: Part 3
Published on 25 Nov 2024
by Chiara Civardi
0 Comments
The Jakarta EE Media and Community Challenge initiated by Payara celebrates the innovation and creativity that thrives within the Jakarta EE community. Designed as a platform to inspire, educate and showcase collaboration, the competition ...
Join us for the London Java Community Unconference 2024
Published on 21 Nov 2024
by Dominika Tasarz
0 Comments