¿Qué son las sticky sessions en un balanceador de carga?
Las sticky session o sesiones persistentes son conexiones generadas por un balanceador de carga el cual crea una conexión entre una red y un usuario para que todas las peticiones del usuario se dirijan hacia un mismo servidor.
Las sesiones persistentes garantizan que la conexión entre el cliente y un servidor no se pierda, aun y cuando existan más servidores que pueden contestar la petición durante un tiempo determinado.
Con las sticky sessions, un balanceador de carga de red asigna un atributo de identificación a un usuario. Esto se puede lograr generando una cookie o rastreando sus datos IP. Entonces, de acuerdo con el ID de seguimiento, un balanceador de carga puede empezar a enrutar todas las peticiones de este usuario a un servidor específico durante la duración de la sesión.
¿Cuándo se usan las sticky sessions?
Las sesiones persistentes o sticky sessions se utilizan cuando un cliente quiere mantener su conexión con el servidor a través de múltiples peticiones. Esto se hace comúnmente en protocolos cliente-servidor, como HTTP, pero también puede ser útil en otras situaciones, como:
- Cuando hay datos o servicios personalizados, como carritos de la compra, banca o navegación personalizada. A veces es difícil gestionar la coherencia o la disponibilidad de los datos en todos los servidores. Las sesiones persistentes ayudan a mantener la continuidad y las experiencias personalizadas para los usuarios a lo largo de sus interacciones.
- Cuando se desea que distintos servidores gestionen diferentes partes de la aplicación sin tener que preocuparse de mantener esos servidores sincronizados entre sí. Esto puede ser útil si tienes una aplicación que consta de múltiples servicios que no siempre están conectados entre sí, pero aun así necesitan compartir información entre ellos.
- El ejemplo más común es cuando requieres la autenticación del usuario durante toda la duración de la navegación o conexión con los datos del servidor.
Ventajas de las sticky sessions
La principal ventaja de las sticky sessions es que garantizan que la conexión entre el cliente y la red no se pierda como resultado del enrutamiento de las peticiones a diferentes servidores. Las sticky sessions también ayudan a reducir la latencia, ya que hay menos saltos entre el cliente y la red de los que habría de otro modo.
Desventajas de las sticky sessions
Las sesiones fijas no están exentas de problemas. Para empezar, las sticky sessions pueden complicar el mantenimiento del servidor y los procesos de failover. Si un servidor backend falla, los usuarios asociados a las sticky sessions de ese servidor perderán la conexión y sus sesiones se interrumpirán. La implementación de mecanismos de conmutación por error que gestionen las sticky sessions requiere una cuidadosa planificación y sincronización entre servidores.
Las sticky sessions pueden provocar distribuciones desiguales de la carga entre los servidores. Este comportamiento se acentúa al utilizar persistencia de sesiones por IP ya que en el caso de los proveedores de Internet (ISPs) o de grandes corporativos, el tráfico saliente puede generar muchas peticiones desde una única dirección IP.
En el caso de la persistencia de sesión basada en IP, la dirección del usuario puede cambiar, lo que provoca la perdida de la conexión del usuario al servidor.
Uno de los mayores riesgos potenciales en el uso de sesiones persistentes es el ataque distribuido de denegación de servicio (DDoS). Con DDoS, un atacante intenta causar una interrupción abrumando un servidor con tráfico de usuarios. Dado que las sticky sessions dirigen las peticiones procedentes del mismo cliente al mismo servidor -en lugar de distribuir las peticiones entre varios servidores- es más fácil para el atacante saturar ese servidor objetivo.
Tipos de Sticky Session o Sesiones Persistentes
Podemos catalogar los tipos de sesión por el método de seguimiento y por el mecanismo para definir la duración de la sesión.
Los métodos mas utilizados para el seguimiento son las cookies y la dirección IP, mientras que la duración de la sesión pude ser por tiempo fijo o por un tiempo definido por la aplicación.
La persistencia de sesión basada en la duración implica que el balanceador de carga (balanceador de carga) emite una cookie que define un periodo de tiempo específico para la persistencia de cada sesión. Cada vez que el balanceador de carga recibe una solicitud de cliente, comprueba si esta cookie está presente. Una vez transcurrido el tiempo especificado y caducada la cookie, la sesión deja de ser persistente.
La persistencia de sesión controlada por la aplicación significa que la aplicación genera una cookie que determina la duración de la adherencia de la sesión. El balanceador de carga todavía emite su propia cookie de sesión sobre ella, pero ahora sigue la duración de la cookie de la aplicación. Esto hace que las sesiones persistentes sean más eficientes, asegurando que los usuarios nunca sean enrutados a un servidor después de que su cookie de sesión local ya haya expirado. Sin embargo, es más complejo de implementar porque requiere una integración adicional entre el balanceador de carga y la aplicación.