Nesta página, descrevemos o comportamento de escalonamento automático padrão do Cloud Run. Para uma opção alternativa de escalonamento em que é possível configurar uma contagem de instâncias específica, consulte Escalonamento manual.
Por padrão, cada revisão do Cloud Run é escalonada automaticamente para o número de instâncias necessárias para processar solicitações, eventos ou utilização da CPU recebidos. Também é possível ajustar esse comportamento de escalonamento configurando metas personalizadas de CPU e utilização.
Por padrão, quando uma revisão não recebe nenhum tráfego, ela é escalonada para zero
instâncias. É possível mudar esse padrão para especificar que uma instância seja mantida inativa ou "morna" usando a configuração de instâncias mínimas. Se o serviço
estiver usando a CPU mesmo quando não estiver processando solicitações, defina o mínimo
de instâncias como 1.
O escalonador automático do Cloud Run avalia periodicamente as seguintes métricas para determinar o número de instâncias necessárias para atender ao tráfego:
Uso de CPU e simultaneidade: o Cloud Run ajusta as contagens de instâncias para manter a média de CPU e simultaneidade dentro dos limiares de destino.
Limites de instância: o Cloud Run limita o número de instâncias entre os limites máximo e mínimo que você configura.
Comportamento do escalonamento automático horizontal de serviços
O Cloud Run tem dois mecanismos de escalonamento automático: com base em métricas e sob demanda, para determinar o número de instâncias necessárias para atender ao tráfego.
Escalonamento com base em métricas
O escalonamento baseado em métricas ajusta automaticamente o número de instâncias com base na utilização média da CPU e nos drivers de escalonamento de simultaneidade média de solicitações para oferecer capacidade de veiculação estável ao seu serviço do Cloud Run.
O autoescalador determina um número recomendado de instâncias com base no número máximo de instâncias que ele calcula para cada um dos seguintes drivers de escalonamento de forma independente:
Uso da CPU: calcula o número de instâncias fazendo a média do uso da CPU por segundo em um período de um minuto e dividindo esse valor pelo número de CPUs por instância. Esse resultado é dividido ainda mais pela meta de CPU.
Simultaneidade de solicitações: calcula o número de instâncias fazendo a média da simultaneidade de solicitações por segundo em um período de 1 e 10 minutos e divide esse valor pela simultaneidade máxima. Esse resultado é dividido ainda mais pela meta de simultaneidade de solicitações.
Para cada revisão de serviço, é possível configurar o número de CPUs por instância e a simultaneidade máxima.
O Cloud Run não é compatível com o escalonamento com base no uso de memória.
Por padrão, o escalonamento baseado em métricas define um limite de 60% para metas de utilização da CPU e simultaneidade de solicitações. É possível ativar os controles de escalonamento (prévia) para especificar metas personalizadas de CPU ou simultaneidade.
Quando o Cloud Run faz o escalonamento com base na utilização da CPU, ele considera a utilização média da CPU em todas as CPUs alocadas para uma instância. Se o aplicativo for de um único encadeamento, mas implantado em uma instância de várias CPUs, isso poderá levar a uma leitura de utilização média baixa, afetando potencialmente as decisões de escalonamento baseadas em CPU. Para mais detalhes sobre como otimizar a configuração de CPU para a arquitetura do seu aplicativo, consulte Configurar limites de CPU e Definir o máximo de solicitações simultâneas por instância.
Escalonar verticalmente
O Cloud Run aumenta o número de instâncias com base no driver de escalonamento que exige mais instâncias. Para evitar a inicialização e a interrupção rápidas de instâncias durante pequenas mudanças no tráfego, o escalonador automático aguarda até que a utilização atinja aproximadamente 90% da capacidade antes de aumentar a contagem de instâncias.
Você pode ativar os controles de escalonamento (prévia) para mudar para um modelo de escalonamento automático de maior precisão, em que o escalonamento automático baseado em métricas do Cloud Run responde de perto aos destinos configurados, mesmo para serviços com um número baixo de instâncias. Se o serviço diferir das configurações de meta personalizadas em mais de 10%, o Cloud Run vai recomendar o número necessário de instâncias para reduzir o driver de escalonamento que aciona o escalonamento abaixo da meta.
Reduzir a escala vertical
O escalonamento automático do Cloud Run reduz o número de instâncias em execução quando elas não são mais necessárias para atender ao tráfego de entrada. O escalonamento com base em métricas ajusta continuamente o número de instâncias recomendadas com base na utilização.
Quando o uso médio da CPU ou o número médio de solicitações ativas diminui, o algoritmo de escalonamento reduz o número recomendado de instâncias. O balanceador de carga de solicitação do Cloud Run considera essas recomendações ao encaminhar preferencialmente as solicitações recebidas para as instâncias recomendadas primeiro. Isso mantém as instâncias recomendadas mais ocupadas e permite que outras fiquem ociosas. O Cloud Run reduz a contagem dessas instâncias não recomendadas, diminuindo a prioridade delas para que só recebam tráfego se todas as instâncias recomendadas estiverem ocupadas. Para manter a estabilidade, o Cloud Run encerra as instâncias com prioridade reduzida na seguinte ordem:
- O Cloud Run desliga um grupo de instâncias quando a utilização delas em uma janela de um minuto é inferior a 10%.
- Um segundo grupo de instâncias permanece em execução até que ocorra um tempo limite de inatividade de 15 minutos, garantindo que a capacidade esteja disponível em caso de um pico repentino de tráfego.
Escalonamento sob demanda
O Cloud Run usa o escalonamento sob demanda quando não consegue encontrar uma instância disponível para atender à solicitação recebida. O escalonamento sob demanda responde em tempo real a mudanças no tráfego de entrada em uma revisão do Cloud Run ou na latência da revisão. Esse escalonamento tenta garantir que todas as solicitações recebidas sejam roteadas para uma instância em um curto período de tempo e é o único fator de escalonamento de zero.
Como o escalonamento sob demanda responde em tempo real a mudanças repentinas no tráfego, o Cloud Run gerencia a troca entre a latência de inicialização a frio (o tempo para iniciar uma nova instância) e a latência da fila pendente (o tempo que uma solicitação espera por um slot em uma instância existente). Para cada solicitação, o sistema determina se é mais rápido enfileirar para uma instância futura ou uma instância atual (nessa ordem) antes de tentar iniciar uma nova instância por demanda. Uma solicitação permanece na fila pendente por no máximo 10 segundos ou 3,5 vezes o tempo previsto de inicialização a frio (o que for maior) antes que o sistema acione uma nova instância on demand.
Ajuste adaptativo de simultaneidade (ACT)
O Cloud Run usa o ajuste adaptativo de simultaneidade (ACT, na sigla em inglês) para evitar que a limitação da CPU cause alta latência de solicitação. Essa abordagem mede a utilização da CPU de cada instância em um determinado número de solicitações e ajusta dinamicamente o valor máximo de solicitações simultâneas da instância para manter a utilização da CPU abaixo de 90%. O ACT ajusta a simultaneidade com base nos seguintes cenários:
Cada vez que a utilização da CPU no último segundo excede 90%, o ACT reduz em 1 o número máximo de solicitações simultâneas da instância.
Se a instância atingir o limite máximo de solicitações simultâneas e o uso da CPU ficar abaixo de 70% por um segundo, o ACT aumentará em 1 o máximo de solicitações simultâneas para a instância.
Se as métricas de escalonamento mostrarem que a simultaneidade nunca atinge o máximo configurado, talvez seja porque o ACT reduziu dinamicamente o máximo real para proteger o desempenho da instância.
O Cloud Run calcula os valores de ACT para cada implantação. Essas métricas não são mantidas entre as implantações. Se o ACT reduzir a simultaneidade abaixo do nível preferido, aumente a CPU alocada por solicitação simultânea máxima. Tarefas em segundo plano que causam picos periódicos de CPU também podem interferir nessa abordagem de escalonamento. As métricas do ACT não são observáveis.
Faturamento e escalonamento automático baseados em instâncias
Se você configurar o faturamento com base em instâncias para seu serviço do Cloud Run, esteja ciente do escalonamento para e de zero.
Escalonamento do zero O escalonamento a partir do zero só pode ser acionado por uma solicitação. Portanto, um serviço que não está processando solicitações não pode ser escalonado do zero. Para essas cargas de trabalho, é possível definir o mínimo de instâncias como > 0 ou incluir uma "solicitação de ativação" no design para reiniciar o processamento após a redução da escala a zero.
Escalonamento para zero. Como nenhuma instância está com 0% de CPU, analisar todo o uso da CPU resultaria na não redução da escala a zero. Isso significa que a decisão de escalonar de um a zero só pode ser tomada ao verificar se a instância está processando uma solicitação.
Sobre o número máximo de instâncias para serviços
Em alguns casos, convém limitar o número total de instâncias que podem ser iniciadas, por motivos de controle de custos ou para melhor compatibilidade com outros recursos usados pelo serviço. Por exemplo, seu serviço do Cloud Run pode interagir com um banco de dados que só pode lidar com um determinado número de conexões abertas simultâneas.
Todos os serviços recebem um limite máximo de instâncias por padrão, mesmo que você não especifique um limite próprio. Defina e monitore esse limite para determinar o comportamento de escalonamento e os custos associados ao seu serviço. Para mais informações, consulte Limites máximos de instâncias.
É possível usar a configuração máxima para limitar o número total de instâncias que podem ser iniciadas em paralelo, conforme documentado em Como configurar um número máximo de instâncias.
Como exceder o máximo de instâncias
Em circunstâncias normais, a revisão é ampliada criando novas instâncias para sustentar a carga do tráfego de entrada. No entanto, quando você define um limite máximo de instâncias, em alguns cenários, não há instâncias suficientes para atender a essa carga de tráfego. Nesse caso, as solicitações recebidas são enfileiradas (pendentes) da seguinte maneira:
As solicitações ficarão pendentes por até 3,5 vezes o tempo médio de inicialização das instâncias de contêiner desse serviço ou 10 segundos, o que for maior.
Durante esse período, se uma instância concluir o processamento de solicitações, ela ficará disponível para processar as solicitações pendentes na fila.
Se nenhuma instância ficar disponível durante o período, a solicitação falhará com um
código de erro 429.
Garantias de escalonamento
O limite máximo de instâncias é um limite por revisão e significa que o número de instâncias dessa revisão não pode exceder o máximo.
Em circunstâncias normais, o Cloud Run pode ser escalonado horizontalmente para o limite máximo de instâncias muito rapidamente a fim de lidar com todas as solicitações ou eventos recebidos. No entanto, definir um limite alto não significa que a revisão poderá ser escalonada horizontalmente para o número especificado de instâncias em um determinado momento. Em circunstâncias excepcionais, o Cloud Run pode limitar o escalonamento para garantir um bom serviço a todos os clientes.
Máximo de instâncias excedido devido a picos de tráfego
Em alguns casos, como aumentos rápidos de tráfego ou manutenção do sistema, o Cloud Run pode, por um curto período, criar mais instâncias do que é especificado na configuração de máximo de instâncias. As novas instâncias podem ser iniciadas além do limite máximo da configuração de instâncias para substituir as atuais e fornecer um período de carência para que as solicitações em andamento terminem de ser processadas.
O limite máximo de instâncias pode ser excedido na operação normal algumas vezes por semana. O período de carência geralmente dura 15 minutos ou até o valor especificado na configuração de tempo limite de solicitação. Essas instâncias extras são destruídas após ficarem ociosas por 15 minutos.
Se muitas substituições forem necessárias, as atualizações geralmente serão distribuídas por vários minutos ou horas, mas cada uma terá uma instância em excesso apenas para o período de carência. As instâncias acima do valor máximo são normalmente menores do que o dobro do limite máximo de instâncias configuradas, mas podem ser muito maiores no caso de picos de tráfego repentinos e grandes.
Nos testes de carga, há mais instâncias que excedem a configuração máxima porque o sistema pode mudar onde os picos de tráfego forem atendidos para preservar a capacidade das cargas de trabalho existentes, que têm padrões de carga sustentados.
Se o serviço não puder tolerar esse comportamento temporário, considere uma margem de segurança e defina um valor máximo de instâncias mais baixo.
Divisão de tráfego
Como o limite máximo de instâncias é um limite para cada revisão, se o serviço dividir o tráfego em várias revisões, o número total de instâncias para o serviço poderá exceder o máximo de instâncias por revisão. Isso pode ser observado nas métricas Contagem de instâncias.
Implantações
Quando você implanta uma nova revisão para exibir 100% do tráfego, o Cloud Run inicia instâncias suficientes da nova revisão antes de direcionar o tráfego para ela. Isso reduz o impacto de novas implantações de revisão nas latências de solicitação, especialmente ao exibir altos níveis de tráfego. Como o limite máximo de instâncias é um limite para cada revisão, durante uma implantação, o número total de instâncias para o serviço pode exceder o máximo de instâncias por revisão. Isso pode ser observado nas métricas Contagem de instâncias.
Instâncias ociosas e como minimizar inicializações a frio
Para minimizar as inicializações a frio, o Cloud Run pode manter as instâncias inativas por um período após a conclusão do processamento de solicitações (até 15 minutos ou 10 minutos para GPUs).
Uma instância ociosa pode manter os recursos, como conexões de banco de dados abertas. A configuração de faturamento padrão é baseada em solicitações, a menos que você configure explicitamente o serviço para ter faturamento baseado em instâncias.
Para manter as instâncias ociosas permanentemente disponíveis, use a
configuração min-instance. Observe que o uso
desse recurso gerará custos mesmo quando o serviço não
estiver exibindo solicitações ativamente.
Escalonamento automático e solicitações pendentes
As solicitações ficarão pendentes por até 3,5 vezes o tempo médio de inicialização das instâncias de contêiner desse serviço ou 10 segundos, o que for maior.
Impacto do escalonamento automático em serviços de apoio
À medida que o número de instâncias aumenta automaticamente, o serviço do Cloud Run pode encontrar limites com os serviços de apoio. Por exemplo, o Cloud SQL tem um limite de cota da API. Verifique se esses serviços de backup têm cota suficiente e podem processar conexões de todas as instâncias do serviço do Cloud Run. Considere definir um número máximo de instâncias de contêiner para evitar sobrecarregar os serviços de apoio.
Escalonamento automático e Pub/Sub
O Google recomenda o uso de assinaturas de push para consumir mensagens de um tópico do Pub/Sub no Cloud Run. As mensagens enviadas são recebidas como solicitações HTTP pelo contêiner, acionando o mesmo comportamento de escalonamento automático.
Escalonamento automático e vários contêineres (arquivos secundários)
O Cloud Run considera a utilização da CPU das instâncias para o escalonamento automático, em que a utilização da CPU de uma instância é a porcentagem de CPU alocada em uso.
Observe que você aloca a CPU ao definir limites de CPU no nível do contêiner. Se você usar vários contêineres por instância, a alocação real de CPU para essa instância será a soma dos limites de CPU definidos em cada contêiner.
A seguir
- Para configurar metas de utilização personalizadas ou desativar drivers de escalonamento, consulte Configurar controles de escalonamento personalizados.
- Para saber mais sobre outras opções de escalonamento, consulte escalonamento manual.
- Para gerenciar o número máximo de instâncias dos serviços do Cloud Run, consulte Como configurar um número máximo de instâncias.
- Para gerenciar o número máximo de solicitações simultâneas processadas por cada instância, consulte Como configurar a simultaneidade.
- Para otimizar sua configuração de simultaneidade, consulte as dicas de desenvolvimento para ajustar a simultaneidade.
- Para especificar que uma instância inativa continue em execução para minimizar a latência ou inicializações a frio nas primeiras solicitações, consulte Como usar
min-instancepara ativar instâncias inativas.