Configurar o máximo de instâncias

É possível controlar o comportamento de escalonamento da função definindo um número máximo de instâncias do Cloud Functions. A definição do número máximo de instâncias controla o custo e impede que os recursos downstream sejam sobrecarregados com o tráfego.

O Cloud Functions escalona criando novas instâncias da função. Cada uma dessas instâncias pode processar apenas uma solicitação por vez. Portanto, grandes picos no volume de solicitações podem resultar na criação de várias instâncias.

O escalonamento automático é benéfico na maioria das vezes, mas em alguns casos talvez você queira limitar o número total de instâncias que podem existir em um determinado momento. Por exemplo, a função pode interagir com um banco de dados que processa apenas um determinado número de conexões abertas.

O Cloud Functions (2ª geração) oferece simultaneidade como um mecanismo de escalonamento extra. Uma função configurada para simultaneidade pode executar várias solicitações simultaneamente em uma única instância. É possível configurar uma função para usar a simultaneidade e várias instâncias a fim de otimizar o desempenho. Para saber como configurar a simultaneidade, consulte Simultaneidade do Cloud Functions.

Como definir e limpar limites máximos de instâncias

É possível definir um número máximo de instâncias para uma função durante a implantação. Cada função tem a própria configuração de instâncias máximas. e elas são dimensionadas independentemente umas das outras.

Como definir limites máximos de instâncias

É possível definir um limite máximo de instâncias usando a CLI do Google Cloud ou o console do Google Cloud. Se você não especificar um limite, o Cloud Functions definirá um padrão:

  • 3.000 para funções do Cloud Functions (1ª geração)
  • 100 para funções do Cloud Functions (2ª geração)

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

Console

  1. Acesse a página Visão geral do Cloud Functions.

  2. Clique em Criar função.

  3. Preencha os campos obrigatórios da função.

  4. Expanda a seção Ambiente de execução, compilação... no final da página e clique na guia Ambiente de execução.

  5. No campo Número máximo de instâncias da seção Escalonamento automático, insira um valor ou use o padrão.

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:

  • FUNCTION_NAME: o nome da função.

  • MAX_INSTANCE_LIMIT: o número a ser definido como o limite máximo de instâncias. Por exemplo, 3.000.

Como limpar limites máximos de instâncias

É possível limpar um limite máximo de instâncias para uma função do Cloud Functions (1ª geração) usando a ferramenta de linha de comando gcloud ou o console do Google Cloud. As funções do Cloud Functions (2ª geração) exigem um limite máximo definido de instâncias.

Console

Para limpar um limite máximo de instâncias para uma função do Cloud Functions (1ª geração):

  1. Acesse a página Visão geral do Cloud Functions.

  2. Clique em uma função existente para acessar a página de detalhes. O limite atual de instâncias máximas da função aparece na guia Detalhes.

  3. Clique em Editar.

  4. Expanda a seção Ambiente de execução, compilação... no final da página e clique na guia Ambiente de execução.

  5. No campo Número máximo de instâncias na seção Escalonamento automático, insira 0.

gcloud

Para limpar um limite máximo de instâncias para uma função do Cloud Functions (1ª geração), execute o comando deploy com a flag --clear-max-instances:

gcloud functions deploy FUNCTION_NAME --clear-max-instances

Limites e práticas recomendadas

Nesta seção, fornecemos diretrizes para o uso do número máximo de instâncias.

Escolher um valor máximo de instância

O valor ideal para a configuração do número máximo de instâncias depende das características da função, incluindo quanto tempo uma invocação leva para ser executada, a frequência de invocação média e de pico esperada e a tolerância do aplicativo a falhas de invocação. Uma boa regra prática é começar com um valor máximo de instâncias de três, monitorar falhas de invocação e aumentar esse valor, conforme necessário.

Proteja-se contra escalonamentos verticais excessivos

Quando nenhum limite máximo de instâncias é especificado, o Cloud Functions (1ª geração) favorece o escalonamento vertical para atender à demanda em vez da limitação da capacidade de processamento. Isso significa que o número de instâncias simultâneas que a função pode ter é efetivamente ilimitado, a menos que você tenha configurado um limite. O Cloud Functions (2ª geração) não dá suporte a funções sem um limite máximo de instâncias

Recomendamos atribuir um limite de --max-instances a todas as funções que enviam solicitações a serviços downstream que não podem ser escalonados ou a serviços limitados pela capacidade. Um limite máximo de instâncias melhora a estabilidade geral do sistema e ajuda a proteger contra níveis de solicitação anormalmente altos.

Solicitar tratamento quando todas as instâncias estiverem ocupadas

Em circunstâncias normais, a função é escalonada criando novas instâncias para lidar com a carga de tráfego de entrada. No entanto, quando um limite máximo de instâncias estiver definido, será possível encontrar um cenário em que haja instâncias insuficientes para atender a carga de tráfego de entrada.

Nesse cenário, o Cloud Functions tenta exibir a uma nova solicitação de entrada por até 30 segundos:

  • Se uma instância concluir o processamento da solicitação durante esse período, ela poderá começar a processar a nova solicitação de entrada.
  • Se nenhuma instância se tornar disponível, a solicitação falhará.

As solicitações enviadas para funções HTTP sobrecarregadas falham com um código de resposta

  • 429 Too Many Requests quando um valor máximo de instâncias está configurado ou com
  • 500 Internal Server Error quando nenhum valor máximo de instâncias está configurado (somente funções de 1ª geração)

Os eventos destinados a funções baseadas em eventos serão salvos automaticamente até que a capacidade esteja disponível.

Limites máximos de instâncias que excedem a capacidade de escalonamento do Cloud Functions

Ao especificar um limite máximo de instâncias, você está especificando um limite superior. Definir um limite alto não significa que sua função será escalonada até o número especificado de instâncias. Isso significa apenas que o número de instâncias que coexistem a 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 escalonamento que o Cloud Functions usa para atender à demanda de tráfego. Em geral, o Cloud Functions prioriza o limite especificado em vez de escalonar verticalmente e potencialmente exceder o limite.

Como lidar com picos de tráfego

Em alguns casos, como surtos de tráfego acelerado, o Cloud Functions pode criar, por um curto período, mais instâncias do que o limite máximo especificado de instâncias. Se a função não aceitar esse comportamento temporário, convém incluir uma margem de segurança e definir um valor de instâncias máximas mais baixo do que a função pode tolerar.

Implantações

Quando você implanta uma nova versão da função, o Cloud Functions migra o tráfego da versão antiga para a nova. Como os limites máximos de instâncias são definidos para cada versão da função de forma independente, é possível exceder temporariamente o limite especificado durante o período após a implantação.

Por exemplo, uma função pode ter um limite máximo de 5 instâncias. Em circunstâncias normais, a função é escalonada até 5 instâncias para lidar com as requisições. Quando uma nova versão da função é implantada, a nova versão possui seu próprio limite máximo de 5 instâncias.

As solicitações que já estão sendo gerenciadas pela versão anterior da função não são interrompidas quando uma nova versão da função é implantada. Em vez disso, essas solicitações continuarão a progredir. Novas solicitações de entrada serão tratadas pela versão recém-implantada da função.

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 implantação da nova versão. A quantidade de tempo necessária para que as instâncias da função anterior terminem depende do tempo necessário para que essas instâncias concluam o processamento de qualquer solicitação ativa. Esse é um fator adicional a ser levado em conta ao selecionar um limite de instâncias máximas apropriado.

Como limpar limites máximos de instâncias

Definir o número máximo de instâncias para uma função do Cloud Functions (1ª geração) como 0 limpa o limite máximo atual de instâncias da função, mas não pausa a função.