Esta página descreve o comportamento de escalonamento automático padrão do Cloud Run. Para uma opção de escalonamento alternativa 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 recebidas, eventos ou uso da CPU. Também é possível ajustar esse comportamento de escalonamento by 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ância. É possível alterar 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 as seguintes métricas periodicamente para determinar o número de instâncias necessárias para atender ao tráfego:
Utilização de CPU e simultaneidade: o Cloud Run ajusta a contagem de instâncias para manter a média de CPU e simultaneidade dentro dos limites de destino.
Limites de instância: o Cloud Run limita o número de instâncias entre os limites máximo e mínimo configurados.
Comportamento de escalonamento automático horizontal do serviço
O Cloud Run tem dois mecanismos de escalonamento automático, o escalonamento baseado em métricas e o escalonamento 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 com base em métricas ajusta automaticamente o número de instâncias com base no uso médio da CPU e nos drivers de escalonamento de simultaneidade média de solicitações para fornecer capacidade de exibição estável para o serviço do Cloud Run.
O escalonador automático 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 1 minuto e dividindo esse valor pelo número de CPUs por instância. Esse resultado é dividido pela meta de CPU. A equação a seguir define esse cálculo:
\[ \text{Instances} = \dfrac{\left( \frac{\text{Average CPU usage per second over the past minute}}{\text{Number of CPUs per instance}} \right)}{\text{CPU target}} \]
- 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 minuto e 10 minutos e dividindo esse valor pela simultaneidade máxima. Esse resultado é dividido pela meta de simultaneidade de solicitações. A equação a seguir define esse cálculo:
\[ \text{Instances} = \dfrac{\left( \frac{\max(\text{average concurrent requests over 1 minute, 10 minutes})}{\text{Maximum concurrency}} \right)}{\text{Concurrency target}} \]
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 oferece suporte ao escalonamento com base no uso de memória.
Por padrão, o escalonamento com base em métricas define um limite de 60% para metas de uso da CPU e simultaneidade de solicitações. É possível ativar os controles de escalonamento (visualização) para especificar metas personalizadas de CPU ou simultaneidade.
Quando o Cloud Run é escalonado com base no uso da CPU, ele considera o uso médio da CPU em todas as CPUs alocadas a uma instância. Se o aplicativo for de linha única, mas implantado em uma instância de várias CPUs, isso poderá levar a uma leitura de uso médio baixo, o que pode afetar a forma como as decisões de escalonamento baseadas na CPU são tomadas. Para mais detalhes sobre como otimizar a configuração da CPU para a arquitetura do aplicativo, consulte Configurar limites de CPU e Definir o número 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.
Embora o Cloud Run tenha como meta 60% de uso para revisões, em contagens de instâncias mais baixas, o escalonador automático pode esperar mais tempo para escalonar.
É possível ativar os controles de escalonamento (visualização) 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 às metas configuradas, mesmo para serviços com um número baixo de instâncias. Se o serviço for diferente das configurações de destino personalizadas em mais de 10% do limite de tolerância, o Cloud Run recomendará o número necessário de instâncias para que o driver de escalonamento que aciona o escalonamento fique 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 no uso.
Quando o uso médio da CPU ou as solicitações ativas médias diminuem, o algoritmo de escalonamento reduz o número recomendado de instâncias. O balanceador de carga de solicitações do Cloud Run considera essas recomendações roteando preferencialmente as solicitações recebidas para as instâncias recomendadas. Isso mantém as instâncias recomendadas mais ocupadas e permite que outras instâncias fiquem inativas. 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 mais baixa na seguinte ordem:
- O Cloud Run encerra um grupo de instâncias quando o uso delas em um período de 1 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.
Se o serviço realizar outras tarefas mesmo quando não estiver processando solicitações, como executar linhas de execução em segundo plano ou processar tarefas assíncronas, defina o mínimo de instâncias como pelo menos 1 para garantir que a CPU permaneça alocada para o processamento em segundo plano.
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 a mudanças na latência da revisão. Esse escalonamento tenta garantir que cada solicitação recebida seja roteada para uma instância em um curto período. O escalonamento sob demanda é o único driver para escalonar do zero. No entanto, ao escalonar de N instâncias, o escalonamento baseado em métricas ou sob demanda processa o tráfego, dependendo de qual for acionado primeiro.
Como o escalonamento sob demanda responde em tempo real a mudanças repentinas de tráfego, o Cloud Run gerencia a compensação 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 para abrir em uma instância atual). Para cada solicitação, o sistema determina se o enfileiramento para uma instância futura ou uma instância atual é mais rápido (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 de inicialização a frio previsto (o que for maior) antes que o sistema acione uma nova instância sob demanda.
Ajuste de simultaneidade adaptável (ACT)
O Cloud Run usa o ajuste de simultaneidade adaptável (ACT, na sigla em inglês) para evitar que a limitação da CPU cause alta latência de solicitação. Essa abordagem mede o uso da CPU para cada instância em um determinado número de solicitações e ajusta o valor máximo de solicitações simultâneas da instância de forma dinâmica para manter o uso da CPU abaixo de 90%. O ACT ajusta a simultaneidade com base nos seguintes cenários:
Sempre que o uso da CPU no último segundo exceder 90%, o ACT reduzirá o número máximo de solicitações simultâneas da instância em 1.
Se a instância atingir o limite máximo de solicitações simultâneas e o uso da CPU permanecer abaixo de 70% por 1 segundo, o ACT aumentará o número máximo de solicitações simultâneas da instância em 1.
Se as métricas de escalonamento mostrarem que a simultaneidade nunca atinge o máximo configurado, isso pode ocorrer porque o ACT reduziu dinamicamente o máximo real para proteger a performance da instância.
O Cloud Run calcula os valores do ACT para cada implantação. Essas métricas não são mantidas entre implantações. Se o ACT reduzir a simultaneidade abaixo do nível preferencial, 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 baseado em instância e escalonamento automático
Se você configurar o faturamento baseado em instância para o serviço do Cloud Run, estará ciente do escalonamento para e de zero do seu modelo.
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 seu próprio limite. Defina e monitore esse limite para determinar o comportamento de escalonamento e os custos associados ao 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 inativa pode manter os recursos, como conexões de banco de dados abertas. Observe que a configuração de faturamento padrão é o faturamento baseado em solicitações , a menos que você configure explicitamente o serviço para ter o faturamento baseado em instância.
Para manter as instâncias ociosas permanentemente disponíveis, use a
min-instance configuração. 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.