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:
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:
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
Na Google Cloud consola, aceda ao Cloud Run:
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.
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.
Clique no separador Rede.
- Clique na caixa de texto Afinidade da sessão.
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
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
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.
- "BOOL" com o valor "
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 recursogoogle_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, oufalse
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
Na Google Cloud consola, aceda ao Cloud Run:
Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.
Clique no separador Revisões.
No painel de detalhes à direita, a definição de afinidade de sessão é apresentada no separador Rede.
gcloud
Use o seguinte comando:
gcloud run services describe SERVICE
Localize a definição de afinidade de sessão na configuração devolvida.