Como compreender as decisões do autoescalador


O escalonamento automático adiciona VMs (escalonamento horizontal) ou remove VMs (redução horizontal) do seu grupo de instâncias gerenciadas (MIG). Este documento explica como um escalonador automático determina quando dimensionar seus MIGs.

Quando você configura um autoescalador para um MIG, ele monitora constantemente o grupo e define o tamanho recomendado para o número de instâncias de máquina virtual (VM) necessárias para exibir a carga de pico durante o período de estabilização.

O tamanho recomendado é limitado pelo número mínimo e máximo de instâncias que você definiu na política de escalonamento automático.

Se a política de escalonamento automático incluir controles de escalonamento, o tamanho recomendado será ainda mais restrito pelos controles de escalonamento.

Se você ativar o escalonamento automático preditivo, o autoescalador usará padrões históricos de utilização da CPU para prever a carga futura e definirá o tamanho recomendado do grupo com base na previsão.

A resposta do MIG ao tamanho recomendado pelo escalonador automático depende de como o mode desse escalonador foi configurado:

  • ON O MIG define o tamanho de destino para o tamanho recomendado e, em seguida, o Compute Engine faz o escalonamento automático do MIG para atender ao tamanho de destino.
  • ONLY_SCALE_OUT: o tamanho de destino do MIG só pode ser aumentado em resposta a um aumento do tamanho recomendado.
  • OFF: o tamanho de destino não é afetado pelo tamanho recomendado. No entanto, o tamanho recomendado ainda é calculado.

Se a configuração do escalonador automático for excluída, o tamanho recomendado não será calculado.

Lacunas entre métricas de utilização desejada e real

Ao usar uma política de escalonamento automático com sinais baseados em métricas, é possível notar que, para grupos de instâncias menores, a utilização real e de destino do grupo de instância parece muito diferente. Isso ocorre porque o escalonador automático sempre atuará de maneira conservadora arredondando para mais ou para menos ao interpretar os dados de utilização e determinará quantas instâncias serão adicionadas ou removidas. Isso impede que o escalonador automático adicione um número insuficiente de recursos ou remova recursos demais.

Por exemplo, se você definir um destino de utilização de 0,7 e o aplicativo exceder o destino de utilização, o escalonador automático poderá determinar que a adição de 1,5 instância de máquina virtual (VM) reduzirá a utilização para perto de 0,7. Como não é possível adicionar 1,5 instância de VM, o escalonador automático arredonda para cima e adiciona duas instâncias. Isso pode reduzir a utilização média da CPU a um valor abaixo de 0,7, mas garante que o app tenha recursos suficientes para permiti-la.

Igualmente, se o escalonador automático determinar que a remoção de 1,5 instância de VM aumentará a utilização para perto de 0,7, ele removerá apenas uma instância.

Para grupos maiores com mais instâncias de VM, a utilização é dividida por um número maior de instâncias, e a adição ou remoção de instâncias de VM provoca uma lacuna entre a utilização real e a de destino.

Se você usar o escalonamento automático baseado em programação com outro sinal de escalonamento automático, talvez uma programação ativa exija mais VMs do que seja necessário para sua utilização. Nessas situações, sua utilização real é menor que a utilização de destino porque a programação de escalonamento automático determina o tamanho recomendado do grupo de instâncias.

MIGs regionais e distribuições desiguais de VM

Se uma região tiver um número não balanceado de instâncias entre zonas, seja devido à recuperação de uma falha zonal ou devido a uma carga de trabalho distribuída de maneira desigual, o escalonamento automático manterá mais instâncias em execução em zonas que têm uma utilização real maior que a média. O Compute Engine adota essa medida para garantir alta disponibilidade em toda a região, bem como em todas as zonas, individualmente, mesmo que algumas delas tenham uma carga mais pesada.

Atrasos no escalonamento horizontal

Ao configurar o escalonamento automático, você especifica um período de inicialização que reflete o tempo necessário para as VMs serem inicializadas. O escalonador automático só recomenda fazer o escalonamento horizontal se a utilização média de instâncias que não estão inicializando for maior que a utilização de destino.

Se você definir um valor de período de inicialização significativamente maior que o tempo que uma instância leva para ser inicializada, é possível que o escalonador automático ignore dados de uso legítimos e subestime o tamanho exigido pelo grupo.

Atrasos na redução horizontal

Para fins de escalonamento vertical, o escalonador automático calcula o tamanho recomendado do grupo com base na carga de pico nos últimos 10 minutos ou no período de inicialização definido, o que for mais longo. Essa duração é chamada de período de estabilização.

Observar o uso durante o período de estabilização ajuda o escalonador automático a:

  • garantir que as informações de utilização coletadas do grupo de instâncias sejam estáveis;
  • evitar que o escalonador automático adicione ou remova instâncias continuamente a uma taxa excessiva;
  • remover com segurança as instâncias, determinando que o tamanho do grupo menor é suficiente para dar conta da carga de pico doperíodo de estabilização.
  • Se o aplicativo levar mais de 10 minutos para ser inicializado em uma nova VM, o grupo usará o período de inicialização como o período de estabilização. Isso garante que a decisão de excluir a VM do escalonador automático leve em consideração o tempo necessário para recuperar a capacidade de exibição.

O período de estabilização pode parecer um atraso no escalonamento vertical, mas, na verdade, é um recurso integrado de escalonamento automático. O período de estabilização também garante que, se uma nova instância for adicionada ao grupo de instâncias gerenciadas, ela concluirá o período de inicialização ou será executada por pelo menos 10 minutos antes de se qualificar para ser excluída.

Os períodos de inicialização de novas instâncias são ignorados durante a decisão de escalonamento em um grupo.

Diminuição da conexão que causa atrasos

Se o grupo fizer parte de um serviço de back-end que tenha ativado a diminuição da conexão, poderá levar até 60 segundos após a duração da diminuição da conexão antes que a instância de VM seja removida ou excluída.

Controles de redução horizontal

Ao configurar os controles de escalonamento automático do escalonador automático, você controla a velocidade do escalonamento. O escalonador automático nunca é escalonado mais rapidamente do que a taxa configurada:

escalonador automático com e sem controles de escalonamento horizontal.

  1. Quando a carga diminui, o escalonador automático mantém o tamanho do grupo em um nível necessário para atender à carga de pico observada no (período de estabilização). Isso funciona da mesma forma com e sem controles de redução horizontal.
  2. Um escalonador automático sem controles de redução horizontal mantém apenas instâncias suficientes para processar a carga observada recentemente. Após o período de estabilidade, o escalonador automático remove todas as instâncias desnecessárias em uma etapa. Com uma queda repentina na carga, isso pode levar a uma redução significativa do tamanho do grupo de instâncias.
  3. Um escalonador automático com controles de escalonamento limita quantas instâncias de VM podem ser removidas em um período de tempo configurado (aqui 10 VMs em 20 minutos). Isso diminui a taxa de redução da instância.
  4. Com um novo pico de carga, o escalonador automático adiciona novas instâncias para lidar com a carga. No entanto, devido a um longo tempo de inicialização, as novas VMs não estão prontas para atender à carga. Com controles de redução horizontal, a capacidade anterior era mantida, permitindo que as VMs existentes atendessem ao pico.

Você controla a taxa de redução horizontal configurando a redução máxima permitida do escalonador automático em uma janela de tempo final, especificamente:

  • Redução máxima permitida (maxScaledInReplicas: número ou % de instâncias de VM). O número de instâncias que sua carga de trabalho pode perder (do tamanho máximo do grupo) dentro da janela de tempo final especificada. Use esse parâmetro para restringir o tamanho do seu grupo para que você possa veicular um pico de carga provável até que mais instâncias comecem a ser veiculadas. Quanto menor a redução máxima permitida, mais lenta será a taxa de escala.
  • Janela de tempo final (timeWindowSec: segundos). Tempo durante o qual um pico de carga provavelmente seguirá uma queda temporária e durante o qual você não quer que o tamanho do grupo seja escalonado além da redução máxima permitida. Use esse parâmetro para definir a janela de tempo em que o escalonador automático procurará o tamanho de pico suficiente para veicular a carga histórica. O escalonador automático não será redimensionado abaixo da redução máxima permitida subtraída do tamanho de pico observado na janela de tempo à direita. Com uma janela de tempo mais longa, o escalonador automático considera uma carga de pico mais histórica, o que torna o escalonamento mais conservador e estável.

Quando você define controles de escalonamento automático, o escalonador automático restringe as operações de escalonamento automático à redução máxima permitida do tamanho de pico observado na janela de tempo final. O escalonador automático usa as seguintes etapas:

  1. Monitora continuamente o tamanho do pico histórico observado na janela de tempo à direita.
  2. Usa a redução máxima permitida para calcular o tamanho restrito em escala (tamanho máximo: maxScaledInReplicas)
  3. Define o tamanho recomendado do grupo para o tamanho restrito em escala. Por exemplo, se um escalonador automático redimensionar um grupo de instâncias para 20 VMs, mas as restrições de escalonamento permitirem apenas uma escala em 40 VMs, o tamanho recomendado será definido como 40 VMs.

Com controles de redução horizontal, o escalonador automático monitora continuamente o tamanho máximo de um grupo de instâncias na janela de tempo final configurada para identificar o tamanho suficiente para disponibilizar a carga histórica. O escalonador automático não é dimensionado além da redução máxima permitida medida a partir do tamanho de pico observado:

escalonador automático com controles de redução horizontal.

Por exemplo, no diagrama acima, os controles de redução horizontal são configurados para uma redução máxima permitida de 20 VMs em uma janela de tempo final de 30 minutos:

  1. Quando o carregamento diminui, o escalonador automático remove 20 VMs, que é a redução máxima permitida configurada em controles de redução horizontal.
  2. À medida que a carga sobe e desce, o escalonador automático monitora constantemente os últimos 30 minutos da janela de tempo final para o tamanho de pico suficiente para exibir a carga histórica. Esse tamanho de pico é usado como base para controles de redução horizontal para limitar a taxa de redução horizontal. Se, nos últimos 30 minutos, o tamanho máximo for 70 VMs e a redução máxima permitida for definida como 20 VMs, o escalonador automático poderá escalonar para 50 VMs. Se o tamanho atual for 65 VMs, o escalonador automático poderá remover apenas 15 VMs.
  3. À medida que a carga diminui, o escalonador automático continua removendo instâncias de VM, mas limita a taxa a, no máximo, 20 VMs do tamanho do grupo de instâncias de pico medido nos últimos 30 minutos.

A redução máxima permitida no tamanho do grupo pode acontecer de uma só vez. Portanto, configure a redução máxima permitida para que o aplicativo possa perder tantas instâncias de uma só vez. Use o parâmetro de redução máxima permitida para indicar a redução na capacidade de veiculação que seu aplicativo pode tolerar.

Ao limitar o número de instâncias de VM que o escalonamento automático pode remover e aumentar a janela de tempo final observada, os aplicativos com picos de carga e tempos de inicialização longos terão uma disponibilidade aprimorada. Em particular, o tamanho do grupo de instâncias não diminui de forma abrupta em resposta a uma queda significativa na carga e diminui gradualmente ao longo do tempo. Se os picos de carga logo após a ocorrência de uma escala, o número restante de VMs ainda poderá ser capaz de incorporar o pico dentro da sua tolerância. Além disso, menos VMs precisam ser iniciadas para atender ao pico.

É possível configurar controles de redução horizontal para escalonamento automático de MIGs zonais e regionais. A configuração é a mesma nos dois casos. Os controles de redução horizontal funcionam para qualquer tamanho de grupo.

Controles de redução horizontal em comparação com a estabilização do escalonador automático

Configurar controles de redução horizontal não significa desativar o mecanismo de estabilização integrado do escalonador automático. O escalonador automático sempre mantém o tamanho do grupo de instâncias em um nível necessário para veicular a carga de pico, observada durante o período de estabilização. Os controles de redução de escalonamento horizontal oferecem um mecanismo adicional para controlar a taxa em que um grupo de instâncias é redimensionado.

Escalonador automático integrado:
período de estabilização
Controles de redução horizontal:
janela de tempo final
Configurável? Não, não configurável Sim, configurável
O que é monitorado? Monitora a carga de pico nos últimos 10 minutos ou no período de inicialização, o que for mais longo. Monitora o tamanho do pico do grupo de instâncias no período anterior definido pela janela de tempo final
Como isso ajuda? Garante que o tamanho do grupo de instâncias permaneça suficiente para atender à carga de pico observada durante os últimos 10 minutos ou o período de inicialização, o que for mais longo. Garante que o tamanho do grupo de instâncias não seja reduzido por mais instâncias de VM do que sua carga de trabalho pode tolerar ao lidar com picos de carga em uma janela de tempo especificada.

Controles de redução horizontal com o modo escalonador automático

Há dois cenários semelhantes, mas ligeiramente diferentes, quando o MIG não é escalonado automaticamente e você quer ativar o escalonamento automático. Isso depende de você estar configurando o escalonamento automático pela primeira vez ou se o escalonamento automático está configurado, mas temporariamente restrito ou desativado.

Como configurar o escalonador automático pela primeira vez

Quando você tem um MIG não escalonado automaticamente e configura o escalonamento automático do zero, o escalonador automático usa o tamanho atual do MIG como ponto de partida. Antes de escalonar, o escalonador automático usa o período de estabilidade e usa controles de redução horizontal para restringir a taxa de redução horizontal:

Configurar o escalonador automático pela primeira vez.

Como alterar o modo escalonador automático

Com o modo de escalonamento automático, você pode desativar ou restringir temporariamente as atividades de escalonamento automático. A configuração do escalonador automático persiste e o escalonador automático continua fazendo cálculos em segundo plano enquanto o escalonador automático está desativado ou restrito. O escalonador automático considera os controles de redução horizontal nos cálculos em segundo plano no modo desativado ou restrito. Todas as atividades de escalonamento automático são retomadas usando os cálculos mais recentes quando você ativa o escalonamento automático novamente ou quando remove a restrição:

Como retomar o escalonador automático incluindo controles de redução horizontal.

  1. O escalonador automático ATIVADO se comporta normalmente (com controles de redução horizontal nesse caso).
  2. Quando você desativa o escalonador automático, ele ainda calcula o tamanho do grupo de instâncias recomendado com base na carga. Os cálculos do escalonador automático ainda consideram os controles de redução horizontal. No entanto, o escalonador automático não aplica cálculos de tamanho quando o escalonador automático está DESATIVADO. O tamanho do grupo de instâncias permanece constante até que o escalonador automático esteja ATIVADO novamente.
  3. Quando você ativa o escalonador automático novamente, ele aplica imediatamente o tamanho calculado anteriormente. Isso permite um escalonamento mais rápido para o tamanho correto. Reativar o escalonador automático pode causar uma escala abrupta em (aqui de 80 a 40 instâncias de VM). Isso é seguro porque os cálculos em segundo plano já consideram os controles de redução horizontal.

Escalonamento automático preditivo

Para saber mais sobre o escalonamento automático preditivo, incluindo como ele funciona, consulte Escalonamento com base em previsões.

Como se preparar para interromper as instâncias

Quando o escalonador automático reduz o escalonamento horizontal, ele determina o número de instâncias de VM que devem ser excluídas. O escalonador automático prioriza as instâncias de VMs que devem ser excluídas com base em vários fatores, incluindo os seguintes:

  • VMs que não estão em execução por algum motivo.
  • VMs que estão passando por mudanças ou estão programadas para elas, por exemplo, atualizar, reiniciar ou substituir.
  • VMs que ainda não foram atualizadas para a versão pretendida do modelo de instância.
  • VMs que têm o menor sinal de escalonamento automático. Por exemplo, se você configurar o MIG para escalonar com base na utilização da CPU e o grupo precisar escalonar horizontalmente, o escalonador automático tentará remover as VMs que têm a menor utilização da CPU.

Antes do interrompimento das instâncias, convém verificar se elas executam determinadas tarefas, como fechar todas as conexões atuais, encerrar normalmente aplicativos ou servidores de apps, fazer upload de registros e assim por diante. Instrua a instância a executar essas tarefas usando um script de desligamento. Um script de desligamento é executado com base no melhor esforço, no breve período entre a criação da solicitação de interrupção e o momento em que a instância é realmente interrompida. Durante esse período, o Compute Engine tenta executar o script de desligamento para realizar quaisquer tarefas especificadas nele.

Isso é útil principalmente se você usa balanceamento de carga com o grupo de instâncias gerenciadas. Se a instância deixar de ser íntegra, poderá levar algum tempo para o balanceador de carga reconhecê-la como não íntegra, fazendo com que ele continue enviando novas solicitações à instância. Com o script de desligamento, a instância relata que não está íntegra durante seu desligamento para que o balanceador de carga interrompa o envio de tráfego a ela. Para mais informações sobre as verificações de integridade do balanceamento de carga, consulte a visão geral das verificações de integridade.

Veja mais informações em Scripts de desligamento.

Para mais informações sobre o encerramento de instâncias, leia a documentação sobre como interromper ou como excluir uma instância.

Como monitorar gráficos e registros de escalonamento automático

O Compute Engine fornece vários gráficos e registros que permitem monitorar o comportamento do grupo gerenciado de instâncias a qualquer momento.

É possível acessar os gráficos e os registros no console do Google Cloud.

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Clique no nome do grupo gerenciado de instâncias que você quer visualizar.
  3. Na página do grupo gerenciado de instâncias, selecione a guia Monitoramento.

Os gráficos de monitoramento exibirá a evolução das seguintes métricas:

  • Tamanho do grupo
  • Uso do escalonador automático
  • Utilização da CPU
  • E/S do disco (bytes)
  • E/S do disco (operações)
  • Bytes da rede
  • Pacotes da rede

Uma dica ao lado do título de cada gráfico fornece mais detalhes contextuais sobre a métrica exibida.

Um painel de Registros está disponível na parte inferior da página, onde é possível encontrar uma lista de logs de eventos do grupo gerenciado de instâncias. Para visualizar os registros, clique na seta de expansão.

Todos os gráficos e registros estão vinculados a um único período que você pode personalizar com o seletor de intervalo de tempo. Ao clicar e arrastar em qualquer gráfico, você pode aumentar o zoom em um evento específico e analisar os gráficos e os registros no período selecionado.

Como monitorar o escalonamento automático preditivo

O Compute Engine fornece um gráfico para monitorar as previsões do escalonador automático. Para visualizá-lo, clique no título Tamanho do grupo no primeiro gráfico e selecione Escalonamento automático preditivo.

Se o escalonamento automático estiver ativado, veja como as previsões do escalonador automático determinam o tamanho do grupo de instâncias. Se o escalonamento automático não estiver ativado, ainda será possível ver as previsões do escalonador automático e usá-las para informar suas decisões sobre o tamanho do grupo.

Use as informações a seguir para entender esse gráfico.

  • A linha azul indica o número de instâncias no grupo de instâncias gerenciadas.
  • A linha verde mostra o número de instâncias previstas pelo escalonador automático.
    • Se a linha verde estiver abaixo da linha azul, há uma grande capacidade disponível e suas instâncias de VM provavelmente estão sendo subutilizadas.
    • Se a linha verde estiver acima da linha azul, há pouca ou nenhuma capacidade restante e é necessário adicionar mais instâncias ao grupo de instâncias.
  • As linhas horizontais de traços vermelhos indicam o número mínimo e máximo de instâncias permitidas no grupo.

Como visualizar mensagens de status

Quando o escalonador automático tem algum problema de escalonamento, ele retorna um aviso ou uma mensagem de erro. É possível consultar essas mensagens de status de uma das duas maneiras.

Visualizar mensagens de status na página "Grupos de instâncias"

É possível ver as mensagens de status diretamente na página Grupos de instâncias no Console do Google Cloud:

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Procure grupos de instâncias que tenham o ícone de cuidado no início dos nomes.

    Por exemplo:

    Mensagens de status na página "Grupos de instâncias".

  3. Mantenha o ponteiro do mouse sobre um ícone de status para ver detalhes da mensagem de status.

Visualizar mensagens de status na página de visão geral do grupo de instâncias

Acesse diretamente a página de visão geral de um grupo de instâncias específico para visualizar mensagens de status relevantes.

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Clique no grupo de instâncias que você quer visualizar as mensagens de status.
  3. Na página do grupo de instâncias, veja a mensagem de status abaixo do nome do grupo de instâncias.

Mensagens de status comumente retornadas

Quando o escalonador automático tem algum problema de escalonamento, ele retorna um aviso ou uma mensagem de erro. Veja a seguir algumas mensagens comumente retornadas e seus significados.

All instances in the instance group are unhealthy (not in RUNNING state). If this is an error, check the instances.
Todas as instâncias no grupo têm estado diferente de RUNNING. Se for intencional, ignore esta mensagem. Se isso não for intencional, resolva o problema do grupo de instâncias.
The number of instances has reached the maxNumReplicas. The autoscaler cannot add more instances.
Quando você criou o escalonador automático, indicou o número máximo de instâncias que o grupo pode ter. No momento, o escalonador automático está tentando escalonar horizontalmente o grupo de instâncias para atender à demanda, mas atingiu o maxNumReplicas. Para informações sobre como atualizar maxNumReplicas para um número maior, consulte Como atualizar um autoescalador.
The monitoring metric that was specified does not exist or does not have the required labels. Check the metric.

O escalonamento automático está sendo realizado usando uma métrica do Cloud Monitoring, mas a métrica fornecida não existe, não tem os rótulos necessários ou não está acessível para o agente de serviço do Compute Engine.

Quota for some resources is exceeded. Increase the quota or delete resources to free up more quota.

É possível acessar as informações sobre sua cota disponível na página de cotas do console do Google Cloud.

Autoscaling does not work with an HTTP/S load balancer configured for maxRate.

O grupo de instâncias está sendo balanceado usando a configuração maxRate, mas o escalonador automático não é compatível com esse modo. Altere a configuração ou desative o escalonamento automático. Para saber mais sobre maxRate, leia as Restrições e diretrizes na documentação de balanceamento de carga.

The autoscaler is configured to scale based on a load balancing signal but the instance group has not received any queries from the load balancer. Check that the load balancing configuration is working.

A carga do grupo de instâncias está sendo balanceada, mas o grupo não tem consultas de entrada. O serviço pode estar passando por um período de ociosidade e, nesse caso, não há nada com que se preocupar. No entanto, essa mensagem também pode ser causada por uma configuração incorreta. Por exemplo, um grupo de instâncias escalonadas automaticamente pode ser o destino de mais de um balanceador de carga, o que não é aceito. Para ver uma lista completa de diretrizes, consulte Restrições e diretrizes na documentação do balanceamento de carga.