Sesiones pegajosas para el Application Load Balancer - Elastic Load Balancing

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Sesiones pegajosas para el Application Load Balancer

De forma predeterminada, un Application Load Balancer enruta cada solicitud de forma independiente a un destino registrado basado en el algoritmo de equilibrio de carga elegido. Sin embargo, puede utilizar la característica de sesión sticky (también denominada afinidad de sesión) para habilitar que el balanceador de carga vincule una sesión del usuario a un destino específico. Con ello se garantiza que todas las solicitudes de ese usuario durante la sesión se envían al mismo destino. Esta característica es útil para los servidores que mantienen información de estado a fin de proporcionar una experiencia de continuidad a los clientes. Para utilizar las sesiones sticky, el cliente debe admitir las cookies.

Los equilibradores de carga de aplicaciones admiten cookies basadas en la duración y cookies basadas en aplicaciones. La clave para administrar sesiones sticky consiste en determinar durante cuánto tiempo debe direccionar el balanceador de carga la solicitud del usuario al mismo destino. Las sesiones sticky se habilitan para grupos de destino. Puede utilizar una combinación de adherencia basada en la duración, adherencia basada en la aplicación y no adherencia en todos los grupos de destino.

El contenido de las cookies generadas por el balanceador de carga se cifra mediante una clave rotativa. Las cookies generadas por el balanceador de carga no se pueden descifrar ni modificar.

Para ambos tipos de adherencia, el Application Load Balancer restablece la caducidad de las cookies que genera después de cada solicitud. Si una cookie ha vencido, la sesión ya no es sticky y el cliente debe quitar la cookie de su almacén de cookies.

Requirements

  • Un balanceador de carga HTTP/HTTPS.

  • Al menos una instancia en buen estado en cada zona de disponibilidad.

Considerations

  • Para las cookies basadas en aplicaciones, los nombres de las cookies deben especificarse individualmente para cada grupo de destino. Sin embargo, para las cookies basadas en la duración,AWSALBes el único nombre utilizado en todos los grupos de destino.

  • Si está utilizando varias capas de Balanceadores de carga de aplicaciones, puede habilitar sesiones sticky en todas las capas con cookies basadas en aplicaciones. Sin embargo, con las cookies basadas en la duración, puede habilitar las sesiones adhesivas solo en una capa, ya queAWSALBes el único nombre disponible.

  • La adherencia basada en aplicaciones no funciona con grupos objetivo ponderados.

  • Si tiene unAcción futuraSi tiene varios grupos de destino y las sesiones sticky se habilitan para uno o más de ellos, debe habilitar la persistencia en el nivel de grupo de destino.

  • Las conexiones de WebSocket son sticky de forma inherente. Si el cliente solicita una actualización de la conexión a WebSockets, el destino que devuelve un código de estado HTTP 101 para aceptar la actualización de la conexión es el destino que se usa en la conexión de WebSockets. Una vez que se ha completado la actualización de WebSockets, la persistencia basada en cookies no se utiliza.

  • Los balanceadores de carga de aplicaciones utilizan elExpiresEn el encabezado de la cookie en lugar delMax-AgeAtributo.

  • Los balanceadores de carga de aplicaciones no admiten valores de cookies codificados como URL.

Pegajosidad basada en la duración

La persistencia basada en la duración direcciona las solicitudes al mismo destino en un grupo de destino mediante una cookie generada por el balanceador de carga (AWSALB). La cookie se utiliza para asignar la sesión al destino. Si la aplicación no tiene su propia cookie de sesión, puede especificar su propia duración de persistencia y administrar durante cuánto tiempo deberá direccionar el balanceador de carga la solicitud del usuario hacia el mismo destino.

Cuando un balanceador de carga recibe por primera vez una solicitud de un cliente, direcciona la solicitud a un destino (basado en el algoritmo elegido) y genera una cookie denominadaAWSALB. Codifica información sobre el destino seleccionado, cifra la cookie e incluye la cookie en la respuesta al cliente. La cookie generada por el equilibrador de carga tiene su propia caducidad de 7 días que no es configurable.

En las solicitudes posteriores, el cliente debe incluir elAWSALBGalleta. Cuando el balanceador de carga recibe una solicitud de un cliente que incluye la cookie, la detecta y direcciona la solicitud al mismo destino. Si la cookie está presente pero no se puede decodificar, o si hace referencia a un destino que cuyo registro se ha anulado o no está en buen estado, el balanceador de carga selecciona un nuevo destino y actualiza la cookie con información sobre el nuevo destino.

Con solicitudes de intercambio de recursos entre orígenes (CORS), algunos navegadores requierenSameSite=None; Securepara habilitar la pegajosidad. En este caso, el equilibrador de carga genera una segunda cookie de pegajosidad,AWSALBCORS, que incluye la misma información que la cookie de persistencia original, además de laSameSiteAtributo. Los clientes reciben ambas cookies.

Para habilitar las sesiones sticky basadas en duración desde la consola

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, enEquilibrio de carga, elijaGrupos de destino.

  3. Elija el nombre del grupo de destino para abrir su página de detalles.

  4. En la páginaDetalles del grupo, en la pestañaAtributosEn la sección, elija.Editar.

  5. En la página Edit attributes, lleve a cabo alguna de las siguientes operaciones:

    1. SelectStickiness ess.

    2. ParaTipo de adherencia, seleccioneBalanceador de carga generado por cookie.

    3. Para Stickiness duration, especifique un valor comprendido entre 1 segundo y 7 días.

    4. Elija Save changes.

Para habilitar las sticky basadas en duración desde laAWS CLI

Utilice el comando modify-target-group-attributes con los atributos stickiness.enabled y stickiness.lb_cookie.duration_seconds.

Utilice el siguiente comando para habilitar las sticky basadas en duración.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.lb_cookie.duration_seconds,Value=time-in-seconds

El resultado debería ser similar al del siguiente ejemplo.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.lb_cookie.duration_seconds", "Value": "86500" }, ... ] }

Adhesivo basado en aplicaciones

La adherencia basada en aplicaciones le brinda la flexibilidad de establecer sus propios criterios para la adherencia del destino del cliente. Cuando habilita la adherencia basada en aplicaciones, el equilibrador de carga enruta la primera solicitud a un destino dentro del grupo de destino según el algoritmo elegido. Se espera que el destino establezca una cookie de aplicación personalizada que coincida con la cookie configurada en el equilibrador de carga para habilitar la adherencia. Esta cookie personalizada puede incluir cualquiera de los atributos de cookie requeridos por la aplicación.

Cuando el Application Load Balancer recibe la cookie de aplicación personalizada del destino, genera automáticamente una nueva cookie de aplicación cifrada para capturar información de adherencia. Esta cookie de aplicación generada por el equilibrador de carga captura información de adherencia para cada grupo de destino que tiene habilitada la adherencia basada en aplicaciones.

La cookie de aplicación generada por el equilibrador de carga no copia los atributos de la cookie personalizada establecida por el destino. Tiene su propia caducidad de 7 días que no es configurable. En la respuesta al cliente, el Application Load Balancer solo valida el nombre con el que se configuró la cookie personalizada en el nivel del grupo de destino y no el valor o el atributo de caducidad de la cookie personalizada. Siempre que el nombre coincida, el equilibrador de carga envía ambas cookies, la cookie personalizada establecida por el destino y la cookie de aplicación generada por el equilibrador de carga, en la respuesta al cliente.

En las solicitudes posteriores, los clientes tienen que devolver ambas cookies para mantener la adherencia. El equilibrador de carga descifra la cookie de la aplicación y comprueba si la duración de la adherencia configurada sigue siendo válida. A continuación, utiliza la información de la cookie para enviar la solicitud al mismo destino dentro del grupo de destino para mantener la persistencia. El equilibrador de carga también proxis la cookie de aplicación personalizada al destino sin inspeccionarla ni modificarla. En las respuestas posteriores, se restablece la caducidad de la cookie de aplicación generada por el equilibrador de carga y la duración de la adherencia configurada en el equilibrador de carga. Para mantener la adherencia entre el cliente y el destino, la caducidad de la cookie y la duración de la pegajosidad no deben transcurrir.

Si un destino falla o esta pasa a encontrarse en mal estado, el balanceador de carga deja de direccionar las solicitudes a ese destino y elige un destino en buen estado basándose en el algoritmo de balanceo de carga elegido. El balanceador de carga trata la sesión como si estuviera «pegada» al nuevo destino en buen estado y continúa direccionando las solicitudes hacia el nuevo destino en buen estado aunque el destino que tuvo el error vuelva a estar en buen estado.

Con solicitudes de intercambio de recursos entre orígenes (CORS), para habilitar la persistencia, el balanceador de carga agrega laSameSite=None; Securea la cookie de aplicación generada por el equilibrador de carga solo si la versión del agente de usuario es Chromium80 o superior.

Dado que la mayoría de los navegadores limitan las cookies a 4 KB de tamaño, el balanceador de carga fragmenta cookies de aplicación superiores a 4 KB en varias cookies. Los balanceadores de carga de aplicaciones admiten cookies de hasta 16K de tamaño y, por lo tanto, pueden crear hasta 4 fragmentos que envía al cliente. El nombre de la cookie de aplicación que ve el cliente comienza con «AWSALBAPP-» e incluye un número de fragmento. Por ejemplo, si el tamaño de la cookie es 0-4K, el cliente ve AWSALBAPP-0. Si el tamaño de la cookie es 4-8k, el cliente ve AWSALBAPP-0 y AWSALBAPP-1, y así sucesivamente.

Para habilitar las aplicaciones sticky basadas en la consola

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, enEquilibrio de carga, elijaGrupos de destino.

  3. Elija el nombre del grupo de destino para abrir su página de detalles.

  4. En la páginaDetalles del grupo, en la pestañaAtributosEn la sección, elija.Editar.

  5. En la página Edit attributes, lleve a cabo alguna de las siguientes operaciones:

    1. SelectStickiness ess.

    2. ParaTipo de adherencia, seleccioneCookie basada en aplicaciones.

    3. Para Stickiness duration, especifique un valor comprendido entre 1 segundo y 7 días.

    4. ParaNombre de cookie de la aplicación, escriba un nombre para la cookie basada en la aplicación.

      No utilizarAWSALB,AWSALBAPP, o bienAWSALBTGPara el nombre de la cookie; están reservados para el uso del balanceador de carga.

    5. Elija Save changes.

Para habilitar las aplicaciones sticky basadas en laAWS CLI

Usarmodify-target-group-attributesCon los atributos siguientes:

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

Utilice el siguiente comando para habilitar la persistencia basada en la aplicación.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.type,Value=app_cookie Key=stickiness.app_cookie.cookie_name Value=my-cookie-name Key=stickiness.app_cookie.duration_seconds Value=time-in-seconds

El resultado debería ser similar al del siguiente ejemplo.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.app_cookie.cookie_name", "Value": "MyCookie" }, { "Key": "stickiness.type", "Value": "app_cookie" }, { "Key": "stickiness.app_cookie.duration_seconds", "Value": "86500" }, ... ] }

Reequilibrado manual

Al escalar, si el número de objetivos aumenta considerablemente, existe la posibilidad de una distribución desigual de la carga debido a la adherencia. En este escenario, puede volver a equilibrar la carga de los destinos mediante las dos opciones siguientes:

  • Establezca una caducidad en la cookie generada por la aplicación que sea anterior a la fecha y hora actuales. Esto evitará que los clientes envíen la cookie al Application Load Balancer, que reiniciará el proceso de establecimiento de la adherencia.

  • Establezca una duración muy corta en la configuración de adherencia basada en aplicaciones del equilibrador de carga, por ejemplo, 1 segundo. Esto obliga al Application Load Balancer a restablecer la adherencia incluso si la cookie establecida por el destino no ha caducado.