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:
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:
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 do Google Cloud, a linha de comando do gcloud ou um arquivo .yaml ao criar um novo serviço ou implantar uma nova revisão:
Console
No console do Google Cloud, acesse o Cloud Run:
Clique em Implantar contêiner e selecione Serviço para configurar um novo serviço. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.
Ao configurar um novo serviço, preencha a página inicial de configurações de serviço e clique em Contêineres, volumes, redes e segurança para expandir essa página.
Clique na guia Rede.
- Clique na caixa de texto Afinidade da sessão.
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
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
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.
- "BOOL" pelo valor "
Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
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
No console do Google Cloud, acesse o Cloud Run:
Clique no serviço de seu interesse para abrir a página Detalhes do serviço.
Clique na guia Revisões.
No painel de detalhes à direita, a configuração de afinidade da sessão é listada na guia Rede.
gcloud
Use o comando a seguir:
gcloud run services describe SERVICE
Localize a configuração de afinidade da sessão na configuração retornada.