Defina a afinidade de sessão para serviços

Esta página mostra como ativar a afinidade de sessão para a revisão do serviço do Cloud Run.

Como funciona a afinidade de sessão

Por predefinição, a afinidade de sessão não está ativada, pelo que os pedidos do mesmo cliente podem ser processados por instâncias diferentes, conforme mostrado aqui: imagem

Se ativar a afinidade de sessão, o Cloud Run encaminha pedidos sequenciais para um determinado cliente para a mesma instância de revisão. O Cloud Run usa um cookie de afinidade de sessão com um TTL de 30 dias e inspeciona o respetivo valor para identificar vários pedidos do mesmo cliente e direciona todos estes pedidos para a mesma instância, conforme mostrado aqui: imagem

Principais comportamentos a ter em atenção

Conforme mostrado no diagrama acima, com a afinidade de sessão ativada, um cliente vai aceder à mesma instância. No entanto, tenha em atenção que a instância pode receber pedidos de diferentes clientes. A afinidade de sessão não significa que a instância esteja dedicada apenas a um cliente.

Devido ao comportamento de dimensionamento automático do Cloud Run, a afinidade de sessão é uma afinidade de melhor esforço. Se a instância for terminada por qualquer motivo ou atingir a concorrência máxima de pedidos ou a utilização máxima da CPU, a afinidade de sessão é interrompida e os pedidos adicionais são encaminhados para uma instância diferente.

Embora possa colocar em cache os dados da sessão do cliente na memória das instâncias, não pode assumir que um cliente se vai sempre voltar a ligar à mesma instância, mesmo quando a afinidade de sessão está ativada.

A afinidade de sessão do Cloud Load Balancing e a afinidade de sessão do Cloud Run são duas implementações separadas e independentes da afinidade de sessão. Pode ativar a afinidade de sessão do Cloud Run num serviço do Cloud Run, mesmo que esteja atrás de um balanceador de carga. No entanto, não deve ativar a afinidade de sessão do Cloud Load Balancing num grupo de pontos finais de rede sem servidor, uma vez que não é suportada.

Afinidade de sessão e divisão de tráfego

Ativa ou desativa a afinidade de sessão ao nível da revisão. Se ativar a afinidade de sessão numa revisão do Cloud Run e também usar a divisão de tráfego, a afinidade de sessão tem precedência sobre qualquer divisão de tráfego. Em casos extremos, se um único cliente que usa a afinidade de sessão for responsável pela grande maioria de todos os pedidos, todos esses pedidos podem ser encaminhados para uma determinada revisão, independentemente da configuração de divisão de tráfego.

Se ativar a divisão de tráfego para revisões em que algumas têm a afinidade de sessão ativada e outras não, o resultado é que os pedidos são gradualmente transferidos para revisões que têm a afinidade de sessão ativada, mesmo que não altere explicitamente a configuração da divisão de tráfego. O motivo é que todos os pedidos que não tenham um cookie de afinidade de sessão anexado estão sujeitos a uma divisão aleatória, em que alguns acabam por ser atribuídos a uma revisão com afinidade de sessão e, posteriormente, esses pedidos permanecem com essa revisão específica.

Quando atualiza a configuração da divisão de tráfego para um serviço do Cloud Run, os pedidos subsequentes com cookies de afinidade de sessão anexados podem ser atribuídos a uma revisão diferente. O Cloud Run minimiza o número de clientes que são redirecionados para uma nova revisão.

Por exemplo, se um serviço estiver a dividir o tráfego a 90%/10% e a divisão de tráfego for atualizada para 80%/20%, 10% do tráfego é redirecionado para a revisão que está agora a publicar 20% do tráfego.

Defina a afinidade de sessão

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode definir a afinidade de sessão através da Google Cloud consola, da linha de comandos gcloud ou de um ficheiro .yaml quando cria um novo serviço ou implementa uma nova revisão:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Rede.

    imagem

    • Clique na caixa de texto Afinidade da sessão.
  5. Clique em Criar ou Implementar.

gcloud

Para especificar a afinidade de sessão, use o seguinte comando:

gcloud run services update SERVICE --session-affinity

Substituir

  • SERVICE com o nome do serviço que está a atualizar.

Para remover a afinidade de sessão, use o comando

gcloud run services update SERVICE --no-session-affinity

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Adicione a anotação run.googleapis.com/sessionAffinity::

    spec:
     template:
       metadata:
         annotations:
           run.googleapis.com/sessionAffinity: 'BOOL'

    Substituir

    • "BOOL" com o valor "true" para definir a afinidade de sessão ou "false" para remover a afinidade de sessão.
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-aff"
  location = "REGION"
  deletion_protection = false
  ingress = "INGRESS_TRAFFIC_ALL"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    session_affinity = BOOL
  }
}

Substituir:

  • REGION com a região Google Cloud . Por exemplo, europe-west1.
  • BOOL com o valor true para definir a afinidade da sessão, ou false para remover a afinidade da sessão.

Veja as definições de afinidade de sessão

Para ver as definições de afinidade de sessão atuais do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

  3. Clique no separador Revisões.

  4. No painel de detalhes à direita, a definição de afinidade de sessão é apresentada no separador Rede.

gcloud

  1. Use o seguinte comando:

    gcloud run services describe SERVICE
  2. Localize a definição de afinidade de sessão na configuração devolvida.