Compreendendo as decisões do escalonador automático


O escalonamento automático adiciona automaticamente VMs (aumenta a escala horizontal) ou remove VMs (aumenta a escala 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 tamanho recomendado do grupo para o número de instâncias de máquina virtual (VM) necessárias para atender à 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 definidas na política de escalonamento automático.

Se a sua política de escalonamento automático incluir controles de redução , o tamanho recomendado será ainda mais limitado pelos controles de redução.

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

A resposta do MIG ao tamanho recomendado do autoescalador depende de como você configura o mode do autoescalador:

  • ON . O MIG define o tamanho desejado para o tamanho recomendado e, em seguida, o Compute Engine amplia automaticamente o MIG para atingir o tamanho desejado.
  • ONLY_SCALE_OUT . O tamanho alvo do MIG só pode ser aumentado em resposta a um aumento no tamanho recomendado.
  • OFF . O tamanho do destino não é afetado pelo tamanho recomendado. No entanto, o tamanho recomendado ainda é calculado.

Se a configuração do autoescalador for excluída, nenhum tamanho recomendado será calculado.

Lacunas entre as métricas de utilização desejadas e reais

Ao usar uma política de escalonamento automático com sinais baseados em métricas , você poderá perceber que, para grupos de instâncias menores, a utilização real do grupo de instâncias e a utilização desejada podem parecer distantes. Isso ocorre porque um escalonador automático sempre age de forma conservadora, arredondando para cima ou para baixo ao interpretar os dados de utilização e determinar quantas instâncias adicionar ou remover. Isso evita que o escalonador automático adicione um número insuficiente de recursos ou remova muitos recursos.

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

Da mesma forma, se o escalonador automático determinar que a remoção de 1,5 instâncias de VM aumentaria sua utilização muito perto de 0,7, ele removerá apenas uma instância.

Para grupos maiores com mais instâncias de VM, a utilização é dividida em um número maior de instâncias, e adicionar ou remover instâncias de VM causa menos lacuna entre a utilização real e a utilização desejada.

Se você usar o escalonamento automático baseado em agendamento com outro sinal de escalonamento automático, um agendamento ativo poderá exigir mais VMs do que suas necessidades de utilização. Nessas situações, a utilização real é inferior à utilização desejada porque a programação de escalonamento automático determina o tamanho recomendado do grupo de instâncias.

Atrasos na expansão

Ao configurar o escalonamento automático, você especifica um período de inicialização que reflete o tempo que leva para suas VMs inicializarem. O escalonador automático só recomenda a expansão se a utilização média de instâncias que não estão sendo inicializadas for maior que a utilização desejada.

Se você definir um valor de período de inicialização que seja significativamente maior do que o tempo que uma instância leva para inicializar, seu escalonador automático poderá ignorar dados de utilização legítimos e poderá subestimar o tamanho necessário do seu grupo.

Atrasos na expansão

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

Observar o uso durante o período de estabilização ajuda o autoescalador:

  • Certifique-se de que as informações de uso coletadas do grupo de instâncias estejam estáveis.
  • Evite o comportamento em que um escalonador automático adiciona ou remove continuamente instâncias em uma taxa excessiva.
  • Remova instâncias com segurança determinando que o tamanho menor do grupo é suficiente para suportar a carga de pico do período de estabilização.
  • Se a sua aplicação demorar mais de 10 minutos a inicializar num novo VM, então o grupo utiliza o período de inicialização como período de estabilização. Isto garante que a decisão do autoescalador de eliminar a VM tem em conta quanto tempo demora a recuperar a capacidade de serviço.

O período de estabilização pode parecer um atraso no dimensionamento, mas na verdade é um recurso integrado do 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, a instância conclua seu período de inicialização ou seja executada por pelo menos 10 minutos antes de ser elegível para exclusão.

Os períodos de inicialização para novas instâncias são ignorados ao decidir se deve ser dimensionado em um grupo.

Drenagem de conexão causando atrasos

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

Controles de ampliação

Ao configurar os controles de redução do escalonador automático , você controla a velocidade de redução. O escalonador automático nunca aumenta mais rápido do que a taxa configurada:

Autoescalador com e sem controles de redução.

  1. Quando a carga diminui, o autoescalador mantém o tamanho do grupo em um nível necessário para atender ao pico de carga observado no ( período de estabilização ). Isso funciona da mesma forma com e sem controles de redução vertical.
  2. Um escalonador automático sem controles de redução mantém apenas as instâncias necessárias para lidar com a carga observada recentemente. Após o período de estabilização, o autoescalador remove todas as instâncias desnecessárias em uma única etapa. Com uma queda repentina na carga, isso pode levar a uma redução drástica do tamanho do grupo de instâncias.
  3. Um escalonador automático com controles de redução 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 de instâncias.
  4. Com um novo pico de carga, o autoescalador adiciona novas instâncias para lidar com a carga. Porém, devido ao longo tempo de inicialização, as novas VMs não estão prontas para atender a carga. Com controles de expansão, a capacidade anterior foi mantida, permitindo que as VMs existentes atendessem ao pico.

Você controla a taxa de redução configurando a redução máxima permitida do escalonador automático dentro de 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 (a partir do tamanho de pico do grupo) dentro do intervalo de tempo final especificado. Use esse parâmetro para restringir o quanto seu grupo pode ser dimensionado para que você ainda possa atender a um provável pico de carga 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á um declínio temporário e durante o qual você não deseja que o tamanho do seu grupo ultrapasse a redução máxima permitida. Use este parâmetro para definir a janela de tempo em que o escalonador automático procurará o tamanho de pico suficiente para atender à carga histórica. O escalonador automático não será redimensionado abaixo da redução máxima permitida subtraída do tamanho do pico observado na janela de tempo final. Com uma janela de tempo de rastreamento mais longa, o escalonador automático considera mais picos de carga históricos, o que torna o escalonamento mais conservador e estável.

Quando você define controles de redução, o escalonador automático restringe as operações de redução à redução máxima permitida do tamanho do 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 final.
  2. Usa a redução máxima permitida para calcular o tamanho de redução restrito (tamanho de pico: maxScaledInReplicas )
  3. Define o tamanho recomendado do grupo para o tamanho de redução restrito. Por exemplo, se um escalonador automático redimensionar um grupo de instâncias para 20 VMs, mas as restrições de redução só permitirem uma redução para 40 VMs, o tamanho recomendado será definido como 40 VMs.

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

Autoescalador com controles de redução.

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

  1. Quando a carga diminui, o escalonador automático remove 20 VMs, que é a redução máxima permitida configurada nos controles de redução vertical.
  2. À medida que a carga aumenta e diminui, o escalonador automático monitora constantemente a janela de tempo final dos últimos 30 minutos para obter o tamanho do pico suficiente para atender à carga histórica. Este tamanho de pico é usado como base para controles de redução para limitar a taxa de redução. Se, nos últimos 30 minutos, o tamanho do pico for de 70 VMs e a redução máxima permitida for definida para 20 VMs, o autoescalador poderá escalar 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 a remover instâncias de VM, mas limita a taxa a no máximo 20 VMs em relação ao tamanho máximo do grupo de instâncias medido nos últimos 30 minutos.

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

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

Você pode configurar controles de expansão para escalonamento automático de MIGs zonais e regionais. A configuração é a mesma para ambos os casos. Os controles de redução vertical funcionam para qualquer tamanho de grupo.

Controles de redução versus estabilização do escalonador automático

Configurar controles de redução não significa desligar 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 aos picos de carga, observados durante o período de estabilização. Os controles de redução oferecem um mecanismo adicional para controlar a taxa na qual um grupo de instâncias é redimensionado.

Escalonador automático integrado:
Período de estabilização
Controles de ampliação:
Janela de tempo final
Configurável? Não, não configurável Sim, configurável
O que é monitorado? Monitora o pico de carga nos 10 minutos anteriores ou no período de inicialização, o que for mais longo. Monitora o tamanho máximo 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 ao pico de carga observado 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 em mais instâncias de VM do que sua carga de trabalho pode tolerar ao lidar com picos de carga em um intervalo de tempo especificado.

Controles de ampliação com modo autoescalador

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

Configurando o autoescalador pela primeira vez

Quando você tem um MIG sem escalonamento automático e configura o escalonamento automático do zero, o escalonador automático usa o tamanho atual do MIG como ponto de partida. Antes de aumentar, o autoescalador usa o período de estabilização e, em seguida, usa controles de redução para restringir a taxa de redução:

Configurando o escalonador automático pela primeira vez.

Alterando o modo do 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 autoescalador persiste e o autoescalador continua a realizar cálculos em segundo plano enquanto o autoescalador está desativado ou restrito. O escalonador automático leva em consideração os controles de redução em seus cálculos em segundo plano no modo desativado ou restrito. Todas as atividades de escalonamento automático serão retomadas usando os cálculos mais recentes quando você ativar o escalonamento automático novamente ou quando a restrição for suspensa:

Retomando o autoescalador incluindo controles de redução.

  1. O escalonador automático ativado se comporta normalmente (neste caso, com controles de redução).
  2. Quando você desativa o escalonador automático, ele ainda calcula o tamanho recomendado do grupo de instâncias com base na carga. Os cálculos do escalonador automático ainda consideram controles de redução. No entanto, o autoescalador não aplica cálculos de tamanho quando o autoescalador está DESLIGADO. O tamanho do grupo de instâncias permanece constante até que o escalonador automático seja ativado novamente.
  3. Quando você liga o autoescalador novamente, ele aplica imediatamente o tamanho calculado anteriormente. Isso permite um dimensionamento mais rápido para o tamanho correto. A reativação do escalonador automático pode causar uma escala abrupta (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.

Escalonamento automático preditivo

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

Preparando-se para interromper instâncias

Quando o escalonador automático é dimensionado, ele determina o número de instâncias de VM a serem excluídas. O escalonador automático prioriza instâncias de VM a serem 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 ou agendadas para mudanças disruptivas — por exemplo, atualização, reinicialização ou substituição.
  • VMs que ainda não foram atualizadas para a versão pretendida do modelo de instância.
  • VMs que têm o sinal de escalonamento automático mais baixo. Por exemplo, se configurar o seu MIG para escalar com base na utilização da CPU, e o grupo precisar de escalar, o autoescalador tentará remover os VMs que têm a menor utilização da CPU.

Antes de uma instância ser interrompida, você pode querer garantir que essas instâncias executem determinadas tarefas, como fechar quaisquer conexões existentes, encerrar normalmente quaisquer aplicativos ou servidores de aplicativos, fazer upload de logs e assim por diante. Você pode instruir sua instância a executar essas tarefas usando um script de encerramento . Um script de encerramento é executado, com base no melhor esforço , no breve período entre o momento em que a solicitação de interrupção é feita 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 qualquer tarefa fornecida no script.

Isso é especialmente útil se você estiver usando balanceamento de carga com seu grupo gerenciado de instâncias. Se sua instância não estiver íntegra, poderá levar algum tempo para que o balanceador de carga reconheça que a instância não está íntegra, fazendo com que o balanceador de carga continue enviando novas solicitações para a instância. Com um script de encerramento, a instância pode relatar que não está íntegra durante o encerramento, para que o balanceador de carga possa parar de enviar tráfego para a instância. Para obter mais informações sobre verificações de integridade de balanceamento de carga, consulte visão geral das verificações de integridade .

Para obter mais informações sobre scripts de desligamento, consulte Scripts de desligamento .

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

Monitorando gráficos e registros de escalonamento automático

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

Você pode acessar os gráficos e registros no console do Google Cloud.

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

    Vá para grupos de instâncias

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

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

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

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

Um painel Logs está disponível na parte inferior da página, onde você pode encontrar uma lista de logs de eventos do seu grupo de instâncias gerenciadas. 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 qualquer gráfico, você pode ampliar um evento específico e analisar os gráficos e registros dentro do intervalo de tempo selecionado.

Monitorando o escalonamento automático preditivo

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

Se o escalonamento automático estiver ativado, você poderá ver como as previsões do escalonador automático determinam o tamanho do seu grupo de instâncias. Se o escalonamento automático não estiver ativado, você ainda poderá 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 este gráfico.

  • A linha azul indica o número de instâncias no grupo gerenciado de instâncias.
  • 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 quantidade de capacidade disponível e suas instâncias de VM provavelmente estão subutilizadas.
    • Se a linha verde estiver acima da linha azul, significa que há pouca ou nenhuma capacidade restante e você deverá adicionar mais instâncias ao grupo de instâncias.
  • As linhas vermelhas horizontais tracejadas indicam o número mínimo e máximo de instâncias permitidas no seu grupo de instâncias.

Visualizando mensagens de status

Quando o escalonador automático enfrenta um problema de dimensionamento, ele retorna um aviso ou mensagem de erro. Você pode revisar essas mensagens de status de duas maneiras.

Visualize mensagens de status na página Grupos de instâncias

Você pode visualizar 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 .

    Vá para grupos de instâncias

  2. Procure grupos de instâncias que tenham o ícone de cuidado antes de seus nomes.

    Por exemplo:

    Mensagens de status na página de grupos de instâncias.

  3. Mantenha o ponteiro sobre um ícone de status para obter detalhes da mensagem de status.

Visualize mensagens de status na página Visão geral do grupo de instâncias

Você pode ir diretamente para 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 .

    Vá para grupos de instâncias

  2. Clique no grupo de instâncias para o qual você deseja visualizar mensagens de status.
  3. Na página do grupo de instâncias, visualize a mensagem de status abaixo do nome do grupo de instâncias.

Mensagens de status comumente retornadas

Quando o escalonador automático enfrenta um problema de dimensionamento, ele retorna um aviso ou mensagem de erro. Aqui estão algumas mensagens comumente retornadas e o que elas significam.

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 de instâncias têm um estado diferente de RUNNING . Se isso for intencional, você pode ignorar esta mensagem. Se isso não for intencional, solucione o problema do grupo de instâncias.
The number of instances has reached the maxNumReplicas. The autoscaler cannot add more instances.
Ao criar o escalonador automático, você indicou o número máximo de instâncias que o grupo de instâncias pode ter. No momento, o escalonador automático está tentando expandir o grupo de instâncias para atender à demanda, mas atingiu maxNumReplicas . Para obter informações sobre como atualizar maxNumReplicas para um número maior, consulte Atualizando 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 escalonamento automático usando uma métrica do Cloud Monitoring, mas a métrica fornecida não existe, não possui os rótulos necessários ou não está acessível ao agente de serviço do Compute Engine .

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

Você pode obter informações sobre sua cota disponível na página Cota no 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 em carga usando a configuração maxRate , mas o escalonador automático não oferece suporte a 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.

O grupo de instâncias está com balanceamento de carga, mas não tem consultas recebidas. O serviço pode estar passando por um período de ociosidade e, nesse caso, não há com o que se preocupar. Contudo, esta mensagem também pode ser causada por configuração incorreta; por exemplo, um grupo de instâncias com escalonamento automático pode ser o destino de mais de um balanceador de carga, o que não é compatível. Para obter uma lista completa de diretrizes, consulte Restrições e diretrizes na documentação de balanceamento de carga.