Como compreender as decisões do escalonador automático

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 escalonador automático para um MIG, o escalonador automático monitora constantemente o grupo e define o recommendedSize do grupo como o número de instâncias de máquina virtual (VM) necessárias para atender à carga de pico nos últimos 10 minutos. Estes últimos 10 minutos são chamados de período de estabilização.

Se você definir uma política de escalonamento automático com controles de redução horizontal, o recommendedSize será restringido pelos controles de redução horizontal.

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

  • ON: o MIG define targetSize como o tamanho recomendado e o grupo é escalonado automaticamente para atingir o 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.

Diferenças entre a utilização de destino e a utilização real

Durante o processo de escalonamento automático, observe que, para grupos de instâncias menores, a utilização real e de destino do grupo parece muito diferente. Isso ocorre porque o autoescalador 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 autoescalador 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.

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 espera que reflete o tempo necessário para a inicialização das VMs. O escalonador automático ignora os dados de uso das VMs durante esse período de resfriamento.

Se você definir um valor de período de espera 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 redução horizontal, o escalonador automático calcula o tamanho alvo recomendado do grupo com base na carga de pico dos últimos 10 minutos. Esses últimos 10 minutos são chamados de período de estabilização.

Observar os últimos 10 minutos de utilizaçã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 dos últimos 10 minutos.

Esse período de estabilidade de 10 minutos pode aparecer como um atraso no escalonamento horizontal, mas na verdade é um recurso integrado de escalonamento automático. O atraso também garante que, se uma nova instância for adicionada ao grupo de instâncias gerenciadas, ela ficará em execução por pelo menos 10 minutos antes de estar qualificada para ser escalonada horizontalmente.

Os períodos de resfriamento para novas instâncias são ignorados ao decidir se o escalonamento é feito 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 o carregamento diminui, o escalonador automático mantém o tamanho do grupo em um nível necessário para veicular a carga de pico observada nos últimos 10 minutos (período de estabilidade). 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 atender à carga de pico, observada durante o período de estabilização dos 10 minutos finais. Os controles de redução 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 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 exibir a carga de pico observada durante os últimos 10 minutos. 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 do escalonamento horizontal.

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 precisam ser encerradas, seleciona as instâncias de VM que têm baixa utilização e as remove do grupo de instâncias. 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, consulte Como lidar com instâncias não íntegras na documentação de balanceamento de carga.

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 ver gráficos de escalonamento automático para utilização

Se você tiver um grupo de instâncias gerenciadas que é escalonado automaticamente, o Compute Engine fornecerá um gráfico de escalonamento automático que rastreia a utilização total e o número de instâncias escalonadas automaticamente a qualquer momento. Para acessar esse gráfico no Console do Google Cloud, faça o seguinte:

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

    Acessar a página "Grupos de instâncias"

  2. Clique no nome de um grupo de instâncias gerenciadas com escalonamento automático que você quer visualizar. O grupo precisa usar escalonamento automático com base na utilização da CPU, porque outras métricas de escalonamento automático ainda não são compatíveis.
  3. Na página de detalhes do grupo de instâncias gerenciadas, selecione a guia Monitoramento, se ainda não estiver selecionada.

    Guia

  4. Verifique se Tamanho escalonado automaticamente está selecionado na lista suspensa.

Os gráficos rastreiam o número de instâncias em relação ao uso da CPU. Use as informações a seguir para entender esses gráficos.

  • A linha azul no gráfico superior indica o número de instâncias no grupo de instâncias gerenciadas.
  • A linha azul no gráfico inferior mostra a utilização total da CPU do grupo.
  • A linha verde no gráfico inferior mostra a capacidade disponível restante do grupo de instâncias gerenciadas.
    • Se a linha verde estiver acima 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 abaixo da linha azul, há pouca ou nenhuma capacidade restante e é necessário adicionar mais instâncias ao grupo.
  • Se a capacidade diminuir, provavelmente isso quer dizer que o tamanho do grupo de instâncias foi reduzido e a linha azul do gráfico superior também cairá. Igualmente, se a capacidade aumentar, o tamanho do grupo de instâncias provavelmente também aumentou.

Por exemplo, o gráfico a seguir captura um grupo de instâncias gerenciadas escalonado automaticamente que atinge a capacidade. Como resultado, o escalador automático adiciona mais instâncias de VM ao grupo para aumentar a capacidade dele.

Quando a utilização exceder a capacidade, o escalonador automático adicionará instâncias.
              Quando a utilização cair por 10 minutos, o
              escalonador automático removerá as instâncias.
Gráfico de escalonamento automático

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 Platform, acesse a página Grupos de instâncias.

    Acessar a página "Grupos de instâncias"

  2. Procure qualquer grupo de instâncias que tenha o ícone de cuidado (!). Por exemplo:

    Mensagens de status na página

  3. Passe o cursor sobre um ícone de status para mais detalhes da mensagem de status.

Visualizar mensagens de status na página de detalhes do grupo de instâncias

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

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

    Acessar a página "Grupos de instâncias"

  2. Clique no grupo de instâncias que você quer visualizar as mensagens de status.
  3. Na página de detalhes, visualize a mensagem de status na guia Membros. Por exemplo:

    Mensagens de status na página de detalhes 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 escalonador automático.
The monitoring metric that was specified does not exist or does not have the required labels. Check the metric.
Você está fazendo o escalonamento automático usando uma métrica do Cloud Monitoring, mas a métrica fornecida não existe ou não tem os rótulos necessários. Dependendo se a métrica for padrão ou personalizada, serão necessários rótulos diferentes. Consulte a documentação Como escalonar com base em uma métrica do Monitoring para mais informações.
Quota for some resources is exceeded. Increase the quota or delete resources to free up more quota.
Acesse as informações sobre sua cota disponível na página de cotas do Console do Google Cloud Platform.
Autoscaling does not work with an HTTP/S load balancer configured for maxRate.
A carga do grupo de instâncias está sendo balanceada 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.