Configure o número máximo de instâncias (1.ª geração)

Pode controlar o comportamento de escalabilidade da sua função definindo um número máximo de instâncias de funções do Cloud Run. A definição de um máximo de instâncias controla os custos e impede que os recursos a jusante sejam sobrecarregados com tráfego.

As funções do Cloud Run são dimensionadas através da criação de novas instâncias da sua função. Cada uma destas instâncias só pode processar um pedido de cada vez, pelo que os picos grandes no volume de pedidos podem resultar na criação de muitas instâncias.

O escalamento automático é vantajoso na maioria das vezes, mas, em alguns casos, pode querer limitar o número total de instâncias que podem existir em qualquer momento. Por exemplo, a sua função pode interagir com uma base de dados que só consegue processar um determinado número de ligações abertas.

Definir e limpar limites máximos de instâncias

Pode definir um número máximo de instâncias para uma função durante a implementação. Cada função tem a sua própria definição de instâncias máximas. As funções são dimensionadas independentemente umas das outras.

Definir limites máximos de instâncias

Pode definir um limite máximo de instâncias através da CLI do Google Cloud ou da Google Cloud consola. Se não especificar um limite, as funções do Cloud Run definem um valor predefinido de 3000.

Para definir um limite máximo de instâncias:

Consola

  1. Aceda à página Vista geral das funções do Cloud Run.

  2. Clique em Criar função.

  3. Preencha os campos obrigatórios para a sua função.

  4. Expanda a secção Tempo de execução, compilação... no final da página e clique no separador Tempo de execução.

  5. No campo Número máximo de instâncias na secção Ajuste de escala automático, introduza um valor ou use o predefinido.

gcloud

Para definir um limite máximo de instâncias, execute o comando deploy com a flag --max-instances:

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

Substitua o seguinte:

  • FUNCTION_NAME: o nome da função.

  • MAX_INSTANCE_LIMIT: o número a definir como o limite máximo de instâncias, por exemplo, 3000.

Limpar limites máximos de instâncias

Pode limpar um limite máximo de instâncias para uma função através da gcloudferramenta de linha de comandos ou da Google Cloud consola.

Consola

Para limpar um limite máximo de instâncias para uma função:

  1. Aceda à página Vista geral das funções do Cloud Run.

  2. Clique numa função existente para aceder à respetiva página de detalhes. Pode ver o limite máximo atual de instâncias da função no separador Detalhes.

  3. Clique em Edit.

  4. Expanda a secção Tempo de execução, compilação... no final da página e clique no separador Tempo de execução.

  5. No campo Número máximo de instâncias na secção Ajuste automático de escala, introduza 0.

gcloud

Para limpar um limite de instâncias máximo para uma função, execute o comando deploy com a flag --clear-max-instances:

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances

Limites e práticas recomendadas

Esta secção fornece diretrizes para usar o número máximo de instâncias.

Escolha um valor máximo da instância

O valor ideal para a definição de instâncias máximas depende das características da sua função, incluindo o tempo que uma invocação demora a executar, a frequência de invocação média e máxima esperada, e a tolerância da sua aplicação para falhas de invocação. Uma boa regra geral é começar com um valor de instâncias máximas de 3 e, em seguida, monitorizar as falhas de invocação e ajustar o valor de instâncias máximas para cima, conforme necessário.

Proteja-se contra aumentos excessivos

Quando não é especificado um limite máximo de instâncias, as funções do Cloud Run dão prioridade ao aumento da escala para satisfazer a procura em vez de limitar o débito. Isto significa que o número de instâncias simultâneas que a sua função pode ter é efetivamente ilimitado, a menos que tenha configurado esse limite.

Recomendamos que atribua um limite de --max-instances a todas as funções que enviam pedidos a serviços a jusante com restrições de débito ou que não sejam escaláveis. Um limite máximo de instâncias melhora a estabilidade geral do sistema e ajuda a proteger contra níveis de pedidos anormalmente elevados.

Processamento de pedidos quando todas as instâncias estão ocupadas

Em circunstâncias normais, a sua função é dimensionada através da criação de novas instâncias para processar a carga de tráfego recebida. No entanto, quando define um limite máximo de instâncias, pode deparar-se com um cenário em que existem instâncias insuficientes para satisfazer a carga de tráfego recebido.

Nesse cenário, as funções do Cloud Run tentam publicar um novo pedido de entrada durante um período máximo de 30 segundos:

  • Se uma instância terminar de processar o respetivo pedido durante este período, pode começar a processar o novo pedido de entrada.
  • Se nenhuma instância ficar disponível, o pedido falha.

Os pedidos enviados para funções HTTP sobrecarregadas falham com um código de resposta de

  • 429 Too Many Requests se for configurado um valor de instâncias máximo ou
  • 500 Internal Server Error se não for configurado nenhum valor de instâncias máximas

Os eventos destinados a funções acionadas por eventos são guardados automaticamente até haver capacidade disponível.

Limites máximos de instâncias que excedem a capacidade de escalabilidade das funções do Cloud Run

Quando especifica um limite máximo de instâncias, está a especificar um limite superior. A definição de um limite elevado não significa que a sua função seja dimensionada até ao número de instâncias especificado. Significa apenas que o número de instâncias que coexistem em qualquer momento não deve exceder o limite.

Além disso, definir um limite máximo de instâncias pode afetar as estratégias de escalabilidade que as funções do Cloud Run usam para satisfazer a sua procura de tráfego. Em geral, as funções do Cloud Run dão prioridade ao cumprimento do limite especificado em vez de aumentar a escala e potencialmente exceder o limite.

Como lidar com picos de tráfego

Em alguns casos, como picos de tráfego rápidos, as funções do Cloud Run podem, durante um curto período, criar mais instâncias do que o limite máximo de instâncias especificado. Se a sua função não conseguir tolerar este comportamento temporário, recomendamos que tenha em conta uma margem de segurança e defina um valor de instâncias máximo inferior ao que a sua função consegue tolerar.

Implementações

Quando implementa uma nova versão da sua função, o Cloud Run Functions migra o tráfego da versão anterior para a nova. Uma vez que os limites máximos de instâncias são definidos para cada versão da sua função de forma independente, pode exceder temporariamente o limite especificado durante o período após a implementação.

Por exemplo, uma função pode ter um limite máximo de instâncias de 5. Em circunstâncias normais, a função é dimensionada até 5 instâncias à medida que processa pedidos. Quando é implementada uma nova versão da função, esta tem o seu próprio limite de instâncias máximo de 5.

Os pedidos que já estão a ser processados pela versão anterior da função não são interrompidos quando é implementada uma nova versão da função. Em alternativa, estes pedidos vão continuar a progredir. Os novos pedidos recebidos serão processados pela versão da função recentemente implementada.

Assim, a função no exemplo anterior pode ter até 10 instâncias no total (5 para cada versão da função) durante o período após a implementação da nova versão. O tempo necessário para que as instâncias da função anterior terminem depende do tempo necessário para que essas instâncias terminem de processar quaisquer pedidos ativos. Este é um fator adicional a ter em conta quando seleciona um limite máximo de instâncias adequado.

Limpar limites máximos de instâncias

Definir o número máximo de instâncias de uma função como 0 limpa o limite de instâncias máximo existente da função, mas não pausa a função.