Sessões fixas para seu Application Load Balancer - Elastic Load Balancing

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Sessões fixas para seu Application Load Balancer

Por padrão, um Application Load Balancer roteia cada solicitação de forma independente para um destino registrado com base no algoritmo de balanceamento de carga escolhido. No entanto, você pode usar o recurso de sessão persistente (também conhecido como afinidade de sessão) para permitir que o balanceador de carga associe a sessão de um usuário a um destino específico. Isso garante que todas as solicitações do usuário durante a sessão sejam enviadas para o mesmo destino. Esse recurso é útil para servidores que mantêm informações de estado para fornecer uma experiência contínua aos clientes. Para usar sessões fixas, o cliente deve oferecer suporte a cookies.

Os Application Load Balancers oferecem suporte a cookies baseados em duração e cookies baseados em aplicativos. As sessões fixas são habilitadas no nível do grupo-alvo. Você pode usar uma combinação de aderência baseada em duração, aderência baseada em aplicativos e ausência de aderência em seus grupos-alvo.

A chave para gerenciar sessões fixas é determinar por quanto tempo seu balanceador de carga deve encaminhar consistentemente a solicitação do usuário para o mesmo destino. Se sua aplicação tiver seu próprio cookie de sessão, você pode usar a persistência baseada no aplicativo, e o cookie de sessão do balanceador de carga segue a duração especificada pelo cookie de sessão do aplicativo. Se sua aplicação não tiver seu próprio cookie de sessão, você pode usar a persistência com base na duração para gerar um cookie de sessão do balanceador de carga com uma duração que você especificar.

O conteúdo dos cookies gerados pelo balanceador de carga é criptografado usando uma chave rotativa. Você não pode descriptografar nem modificar os cookies gerados pelo balanceador de carga.

Para os dois tipos de aderência, o Application Load Balancer redefine a expiração dos cookies gerados após cada solicitação. Se um cookie expirar, a sessão não ficará mais fixa e o cliente deverá remover o cookie de sua loja de cookies.

Requisitos

  • Um load balancer HTTP/HTTPS.

  • Pelo menos uma instância íntegra em cada Zona de disponibilidade.

Considerações

  • Para cookies baseados em aplicativos, os nomes dos cookies precisam ser especificados individualmente para cada grupo-alvo. No entanto, para cookies baseados em duração,AWSALB é o único nome usado em todos os grupos-alvo.

  • Se você estiver usando várias camadas de Application Load Balancers, você pode ativar sessões fixas em todas as camadas com cookies baseados em aplicativos. No entanto, com cookies baseados em duração, você pode ativar sessões fixas somente em uma camada, porqueAWSALB é o único nome disponível.

  • A aderência baseada em aplicativos não funciona com grupos-alvo ponderados.

  • Se você tiver uma ação avançada com vários grupos-alvo e as sessões fixas estiverem habilitadas para um ou mais grupos-alvo, você deverá ativar a aderência no nível do grupo-alvo.

  • WebSocket as conexões são inerentemente pegajosas. Se o cliente solicitar um upgrade de conexão para WebSockets, o destino que retorna um código de status HTTP 101 para aceitar a atualização da conexão é o destino usado na WebSockets conexão. Depois que a WebSockets atualização for concluída, a aderência baseada em cookies não será usada.

  • Os Application Load Balancers usam oExpires atributo no cabeçalho do cookie em vez doMax-Age atributo.

  • Os Application Load Balancers não são compatíveis com valores de cookie que são codificar em URL.

Persistência com base na duração

A aderência baseada na duração encaminha as solicitações para o mesmo alvo em um grupo-alvo usando um cookie gerado pelo balanceador de carga (AWSALB). O cookie é usado para mapear a sessão para o destino. Se sua aplicação não tiver seu próprio cookie de sessão, você pode especificar sua própria duração de persistência e gerenciar por quanto tempo o balanceador de carga deve rotear consistentemente a solicitação do usuário para o mesmo destino.

Quando um balanceador de carga recebe pela primeira vez uma solicitação de um cliente, ele encaminha a solicitação para um destino (com base no algoritmo escolhido) e gera um cookie chamadoAWSALB. Ele codifica informações sobre o alvo selecionado, criptografa o cookie e inclui o cookie na resposta ao cliente. O cookie gerado pelo balanceador de carga tem sua própria expiração de 7 dias, que não é configurável.

Em solicitações subsequentes, o cliente deve incluir oAWSALB cookie. Quando o balanceador de carga recebe uma solicitação de um cliente que contém o cookie, ele a detecta e encaminha a solicitação para o mesmo destino. Se o cookie estiver presente, mas não puder ser decodificado, ou se ele se referir a um destino que foi cancelado ou não está íntegro, o load balancer selecionará um novo destino e atualizará o cookie com informações sobre o novo destino.

Com solicitações de Cross-Origin Resource Sharing (CORS), alguns navegadoresSameSite=None; Secure precisam habilitar a persistência. Nesse caso, o balanceador de carga gera um segundo cookie de persistênciaAWSALBCORS, que inclui as mesmas informações que o cookie de persistência original, além desteSameSite atributo. Os clientes recebem ambos os cookies.

Para ativar a aderência com base na duração usando o console

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Grupos de destino.

  3. Escolha o nome do grupo de destino para abrir sua página de detalhes.

  4. Na guia Detalhes do grupo, na seção Atributos, escolha Editar.

  5. Na página Editar atributos, faça o seguinte:

    1. Selecione Stickiness.

    2. Em Tipo de aderência, selecione Cookie gerado pelo balanceador de carga.

    3. Em Duração da perdurabilidade, especifique um valor entre um segundo e sete dias.

    4. Escolha Save changes (Salvar alterações).

Para ativar a aderência com base na duração usando oAWS CLI

Use o modify-target-group-attributescomando com osstickiness.lb_cookie.duration_seconds atributosstickiness.enabled e.

Use o comando a seguir para habilitar a persistência com base na duração.

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

Sua saída deve ser similar ao exemplo a seguir.

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

Adesivo baseado em aplicativos

A aderência baseada em aplicativos oferece a flexibilidade de definir seus próprios critérios de aderência ao cliente-alvo. Quando você ativa a aderência baseada em aplicativos, o balanceador de carga encaminha a primeira solicitação para um alvo dentro do grupo-alvo com base no algoritmo escolhido. Espera-se que o alvo defina um cookie de aplicativo personalizado que corresponda ao cookie configurado no balanceador de carga para permitir a aderência. Esse cookie personalizado pode incluir qualquer um dos atributos de cookie exigidos pelo aplicativo.

Quando o Application Load Balancer recebe o cookie de aplicativo personalizado do alvo, ele gera automaticamente um novo cookie de aplicativo criptografado para capturar informações de aderência. Esse cookie de aplicativo gerado pelo balanceador de carga captura informações de aderência de cada grupo-alvo que tem a aderência baseada em aplicativos ativada.

O cookie de aplicativo gerado pelo balanceador de carga não copia os atributos do cookie personalizado definido pelo alvo. Ele tem sua própria expiração de 7 dias, que não é configurável. Na resposta ao cliente, o Application Load Balancer valida apenas o nome com o qual o cookie personalizado foi configurado no nível do grupo de destino e não o valor ou o atributo de expiração do cookie personalizado. Desde que o nome corresponda, o balanceador de carga envia os cookies, o cookie personalizado definido pelo alvo e o cookie do aplicativo gerado pelo balanceador de carga, na resposta ao cliente.

Em solicitações subsequentes, os clientes precisam devolver os dois cookies para manter a aderência. O balanceador de carga decodifica o cookie do aplicativo e verifica se a duração configurada da aderência ainda é válida. Em seguida, ele usa as informações no cookie para enviar a solicitação ao mesmo destino dentro do grupo de destino para manter a persistência. O balanceador de carga também envia o cookie de aplicativo personalizado para o destino sem inspecioná-lo ou modificá-lo. Nas respostas subsequentes, a expiração do cookie do aplicativo gerado pelo balanceador de carga e a duração da aderência configurada no balanceador de carga são redefinidas. Para manter a aderência entre o cliente e o alvo, a expiração do cookie e a duração da aderência não devem expirar.

Se um alvo falhar ou ficar inseguro, o balanceador de carga interrompe o roteamento das solicitações para esse alvo e escolhe um novo alvo saudável com base no algoritmo de balanceamento de carga escolhido. O balanceador de carga trata a sessão como se estivesse “presa” à nova meta íntegra e continua roteando as solicitações para a nova meta íntegra, mesmo que a meta que falhou volte.

Com solicitações de compartilhamento de recursos de origem cruzada (CORS), para permitir a aderência, o balanceador de carga adiciona osSameSite=None; Secure atributos ao cookie do aplicativo gerado pelo balanceador de carga somente se a versão do agente de usuário for Chromium80 ou superior.

Como a maioria dos navegadores limita os cookies ao tamanho de 4K, o balanceador de carga fragmenta cookies de aplicativos maiores que 4K em vários cookies. Os Application Load Balancers suportam cookies de até 16K e, portanto, podem criar até 4 fragmentos que são enviados ao cliente. O nome do cookie do aplicativo que o cliente vê começa com “AWSALBAPP-” e inclui um número de fragmento. Por exemplo, se o tamanho do cookie for de 0 a 4K, o cliente verá AWSALBAPP -0. Se o tamanho do cookie for de 4 a 8k, o cliente verá AWSALBAPP -0 e AWSALBAPP -1, e assim por diante.

Para ativar a aderência baseada em aplicativos usando o console

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Grupos de destino.

  3. Escolha o nome do grupo de destino para abrir sua página de detalhes.

  4. Na guia Detalhes do grupo, na seção Atributos, escolha Editar.

  5. Na página Editar atributos, faça o seguinte:

    1. Selecione Stickiness.

    2. Em Tipo de aderência, selecione Cookie baseado em aplicativo.

    3. Em Duração da perdurabilidade, especifique um valor entre um segundo e sete dias.

    4. Em Nome do cookie do aplicativo, insira um nome para o cookie baseado no aplicativo.

      Não useAWSALBAWSALBAPP, ouAWSALBTG para o nome do cookie; eles são reservados para uso pelo balanceador de carga.

    5. Escolha Save changes (Salvar alterações).

Para ativar a aderência baseada em aplicativos usando oAWS CLI

Use o modify-target-group-attributescomando com os seguintes atributos:

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

Use o comando a seguir para habilitar a persistência com base no aplicativo.

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

Sua saída deve ser similar ao exemplo a seguir.

{ "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" }, ... ] }

Rebalanceamento manual

Ao aumentar a escala, se o número de alvos aumentar consideravelmente, há potencial para uma distribuição desigual da carga devido à aderência. Nesse cenário, você pode reequilibrar a carga em seus alvos usando as duas opções a seguir:

  • Defina uma expiração para o cookie gerado pelo aplicativo que é anterior à data e hora atuais. Isso evitará que os clientes enviem o cookie para o Application Load Balancer, que reiniciará o processo de estabelecimento da aderência.

  • Defina uma duração muito curta na configuração de aderência baseada em aplicativos do balanceador de carga, por exemplo, 1 segundo. Isso força o Application Load Balancer a restabelecer a aderência mesmo que o cookie definido pelo alvo não tenha expirado.