Definir a afinidade da sessão para serviços

Nesta página, mostramos como ativar a afinidade de sessão para sua revisão de serviço do Cloud Run.

Como a afinidade da sessão funciona

Por padrão, a afinidade de sessão não está ativada. Portanto, as solicitações do mesmo cliente podem ser processadas por instâncias diferentes, conforme mostrado aqui: imagem

Se você ativar a afinidade de sessão, o Cloud Run encaminhará solicitações sequenciais de um determinado cliente para a mesma instância de contêiner de revisão. O Cloud Run usa um cookie de afinidade de sessão com um TTL de 30 dias e inspeciona o valor para identificar várias solicitações do mesmo cliente e direciona todas essas solicitações para a mesma instância, conforme mostrado aqui: imagem

Principais comportamentos importantes

Conforme mostrado no diagrama acima, com a afinidade de sessão ativada, um cliente alcançará a mesma instância. No entanto, a instância do contêiner pode receber solicitações de clientes diferentes. A afinidade da sessão não significa que a instância está dedicada apenas a um cliente.

Devido ao comportamento de escalonamento automático do Cloud Run, a afinidade da sessão é de melhor esforço. Se a instância for encerrada por qualquer motivo ou atingir a simultaneidade de solicitação máxima ou a utilização de CPU máxima, a afinidade da sessão será interrompida e as outras solicitações serão roteadas para uma instância diferente.

É possível armazenar em cache os dados da sessão do cliente na memória de instâncias, mas não é possível presumir que um cliente sempre se reconectará à mesma instância, mesmo quando a afinidade da sessão está ativada.

A afinidade da sessão do Cloud Load Balancing e a afinidade da sessão do Cloud Run são duas implementações separadas e independentes. É possível ativar a afinidade da sessão do Cloud Run em um serviço do Cloud Run, mesmo que ela esteja por trás de um balanceador de carga. No entanto, não ative a afinidade da sessão do Cloud Load Balancing em um grupo de endpoints de rede sem servidor, porque ele não é compatível.

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

A afinidade da sessão é ativada ou desativada no nível de revisão. Se você ativar a afinidade da sessão em uma revisão do Cloud Run e também usar a divisão de tráfego, a afinidade da sessão terá precedência sobre qualquer divisão de tráfego. Em casos extremos, se um único cliente que usa a afinidade da sessão for responsável pela grande maioria de todas as solicitações, todas elas poderão ser roteadas para uma determinada revisão, independentemente da configuração de divisão de tráfego.

Ao ativar a divisão de tráfego para revisões em que algumas têm a afinidade da sessão ativada e outras não, isso resulta na movimentação gradual das solicitações para revisões com a afinidade da sessão ativada, mesmo que você não tenha alterado explicitamente a configuração de divisão de tráfego. O motivo para isso é que todas as solicitações que não têm um cookie de afinidade de sessão anexado estão sujeitas a uma divisão aleatória, em que algumas serão atribuídas a uma revisão com afinidade de sessão e, consequentemente, permanecerão com essa revisão específica.

Ao atualizar a configuração de divisão de tráfego de um serviço do Cloud Run, as solicitações subsequentes com cookies de afinidade da sessão anexados podem ser atribuídas 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 dividindo o tráfego em 90%/10% e essa divisão for atualizada para 80%/20%, 10% do tráfego será redirecionado para a revisão que está servindo 20% do tráfego.

Definir afinidade da sessão

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

É possível definir a afinidade da sessão usando o console Google Cloud , a linha de comando gcloud ou um arquivo .yaml ao criar um novo serviço ou implantar uma nova revisão:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Selecione Serviços no menu e clique em Implantar contêiner para configurar um novo serviço. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.

  3. Ao configurar um novo serviço, preencha a página inicial de configurações de serviço e clique em Contêineres, volumes, Rede e segurança para expandir essa página.

  4. Clique na guia Rede.

    imagem

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

gcloud

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

gcloud run services update SERVICE --session-affinity

Substituir

  • SERVICE pelo nome do serviço que você está atualizando.

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

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

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço, faça o download da configuração YAML correspondente:

    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" pelo 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 usando o seguinte comando:

    gcloud run services replace service.yaml

Terraform

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

Adicione o seguinte a um recurso google_cloud_run_v2_service na 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
  }
}

Substitua:

  • 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 afinidade da sessão.

Ver configurações de afinidade da sessão

Para visualizar as configurações atuais de afinidade da sessão para seu serviço do Cloud Run:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço de seu interesse para abrir a página Detalhes do serviço.

  3. Clique na guia Revisões.

  4. No painel de detalhes à direita, a configuração de afinidade da sessão é listada na guia Rede.

gcloud

  1. Use o comando a seguir:

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