Como escalonar com base na utilização da CPU ou na capacidade de serviço do balanceamento de carga

A forma mais simples de escalonamento automático é fazê-lo com base na utilização da CPU de um grupo de instâncias de máquina virtual (VM, na sigla em inglês). Outra opção é o escalonamento com base na capacidade de serviço de balanceamento de carga HTTP(S) de um grupo de instâncias.

Neste documento, você tem a descrição dessas duas opções.

Antes de começar

Escalonamento baseado na utilização da CPU

É possível fazer escalonamento automático com base na utilização média da CPU de um grupo de instâncias gerenciadas (MIG, na sigla em inglês). Com essa política, o uso da CPU das instâncias do grupo é coletado no autoescalador e fica possível determinar se o escalonamento é necessário. Você define a meta de uso da CPU que será mantida pelo autoescalador, e ele trabalha para manter esse nível.

O escalonador automático avalia a meta do nível de utilização da CPU como uma fração do uso médio de todas as vCPUs ao longo do tempo no grupo de instâncias. Se o uso médio de todas as vCPUs exceder a utilização desejada, o escalonador automático adicionará instâncias de VM. Por outro lado, se esse uso médio for menor do que a utilização desejada, o autoescalador removerá instâncias. Por exemplo, uma meta de utilização configurada como 0,75 instrui o escalonador automático a manter um uso médio de 75% entre todas as vCPUs no grupo de instâncias.

Ativar o escalonamento automático com base na utilização da CPU

Console


  1. Acesse a página Grupos de instâncias (em inglês).
  2. Se existir um grupo de instâncias, selecione-o e clique em Editar grupo. Se você não tem um grupo de instâncias, clique em Criar grupo de instâncias.
  3. Em Escalonamento automático, selecione Ativado.
  4. Em Escalonamento automático baseado em, selecione uso de CPU.
  5. Informe a utilização de CPU de destino que você quer. Esse valor é tratado como uma porcentagem. Por exemplo, para ter 60% de utilização da CPU, insira 60.
  6. Insira o número máximo de instâncias que você quer para esse grupo. Defina também o número mínimo de instâncias e o período de espera. O período de espera é o número de segundos que o autoescalador precisa aguardar depois que a máquina virtual é iniciada para começar a coletar informações dela. Isso determina o tempo que a máquina virtual leva para inicializar, em que os dados coletados não são confiáveis para o escalonamento automático. O período de espera padrão é de 60 segundos.
  7. Salve as alterações.

gcloud


Use o subcomando set-autoscaling para ativar o escalonamento automático de um grupo de instâncias gerenciadas. Por exemplo, o comando a seguir cria um autoescalador com meta de uso da CPU de 75%. Com o parâmetro --target-cpu-utilization, também é necessário o parâmetro --max-num-replicas para criar um autoescalador:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --max-num-replicas 20 \
    --target-cpu-utilization 0.75 \
    --cool-down-period 90

Opcionalmente, é possível usar a sinalização --cool-down-period, que informa ao autoescalador quantos segundos esperar após uma nova instância ser iniciada antes de considerar os dados da nova instância. Esse período de espera conta o tempo que a instância pode levar para ser inicializada, em que os dados de utilização coletados não são confiáveis para escalonamento automático. Depois que o período de espera for aprovado, o autoescalador começa a incluir os dados de utilização da instância para determinar se o grupo precisa ser dimensionado. O período de espera padrão é de 60 segundos.

Para verificar se o escalonamento automático está ativado, use o subcomando instance-groups managed describe, que descreve o grupo de instâncias gerenciadas correspondente e fornece informações sobre os recursos de escalonamento automático desse grupo de instâncias:

gcloud compute instance-groups managed describe example-managed-instance-group

Para uma lista de sinalizações e comandos gcloud disponíveis, consulte a referência de .

API


Observação: o escalonamento automático é um recurso de grupos de instâncias gerenciadas, mas ele é um recurso de API separado. Lembre-se disso quando você criar solicitações de API para o escalonamento automático.

Na API, faça uma solicitação POST ao método autoscalers.insert:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers/

O corpo da solicitação precisa conter os campos name, target e autoscalingPolicy. autoscalingPolicy precisa definir cpuUtilization e maxNumReplicas.

Opcionalmente, é possível usar o campo coolDownPeriodSec, que informa ao autoescalador quantos segundos esperar após uma nova instância ser iniciada antes de considerar os dados da nova instância. Esse período de espera conta o tempo que a instância pode levar para ser inicializada, em que os dados de utilização coletados não são confiáveis para escalonamento automático. Depois que o período de espera for aprovado, o autoescalador começa a incluir os dados de utilização da instância para determinar se o grupo precisa ser dimensionado. O período de espera padrão é de 60 segundos.

{
 "name": "example-autoscaler",
 "target": "https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 10,
    "cpuUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

Para mais informações sobre como ativar o escalonamento automático com base na utilização da CPU, faça o tutorial Como usar o escalonamento automático para aplicativos altamente escalonáveis.

Como o escalonador automático lida com a utilização intensa da CPU

Durante períodos de intensa utilização da CPU, se ela estiver próxima a 100%, o escalonador automático presumirá que o grupo já está muito sobrecarregado. Nesses casos, ele aumenta o número de máquinas virtuais em até 50%.

Escalonamento baseado na capacidade de serviço de balanceamento de carga HTTP(S)

No Compute Engine, você tem o suporte para o balanceamento de carga dentro dos grupos de instâncias. Para usar o escalonamento automático com o balanceamento de carga, defina um autoescalador que faz esse escalonamento com base na carga das instâncias.

Um balanceador de carga HTTP(S) distribui a carga entre os back-ends que pertencem aos serviços de back-end dele. Quando os back-ends são grupos de instâncias, o balanceador de carga HTTP(S) oferece dois modos de balanceamento: utilização e taxa. Com a utilização, é possível especificar uma meta máxima para o uso médio de back-end das instâncias em cada grupo. Com a taxa, é possível especificar uma meta máxima para solicitações por segundo por instância ou por grupo. Não é possível definir uma taxa máxima por grupo para grupos de instâncias gerenciadas regionais.

O modo de balanceamento e a meta máxima especificados definem as condições que o Google Cloud segue para determinar se uma VM de back-end atingiu a capacidade máxima. O Google Cloud tenta enviar tráfego para VMs íntegras que ainda têm capacidade sobrando. Se todas as VMs tiverem atingido a capacidade máxima, a meta máxima de utilização ou taxa terá sido excedida.

Quando você anexa um escalonador automático a um balanceador de carga HTTP(S), ele faz o escalonamento do grupo de instâncias gerenciadas para manter uma fração da capacidade de serviço de balanceamento de carga.

Por exemplo, imagine que a capacidade de serviço de balanceamento de carga de um grupo de instâncias gerenciado seja definido como 100 RPS por instância. Se você criar um autoescalador com a política de balanceamento de carga HTTP(S) e configurá-lo para manter um nível de utilização de 0,8 ou 80%, o autoescalador adicionará ou removerá instâncias do grupo de instâncias gerenciadas para manter 80% da capacidade de serviço ou 80 RPS por instância.

O diagrama a seguir mostra como o autoescalador interage com um grupo de instâncias gerenciadas e um serviço de back-end:

As relações entre o autoescalador, os grupos de instâncias gerenciadas e os serviços de back-end de balanceamento de carga.
A capacidade de serviço do grupo de instâncias gerenciadas, definida no serviço de back-end, é monitorada no autoescalador, e o escalonamento é feito com base na meta de utilização. Neste exemplo, a capacidade de serviço é medida com o valor maxRatePerInstance.

Configurações de balanceamento de carga aplicáveis

É possível definir uma das três opções de capacidade de serviço de balanceamento de carga. Ao criar o back-end pela primeira vez, é possível escolher uma meta máxima de utilização de back-end, solicitações por segundo por instância ou solicitações por segundo de todo o grupo. O escalonamento automático funciona apenas com utilização máxima de back-end e quantidade máxima de solicitações por segundo/instância. O motivo disso é que o valor dessas configurações pode ser controlado ao adicionar ou remover instâncias. Por exemplo, se você configurar um back-end para processar 10 solicitações por segundo por instância e o escalonador automático estiver configurado para manter 80% dessa taxa, o escalonador poderá adicionar ou remover instâncias quando a quantidade de solicitações por segundo por instância é alterada.

O escalonamento automático não funciona com a quantidade máxima de solicitações por grupo porque essa configuração independe do número de instâncias no grupo de instâncias. No balanceador de carga, a quantidade máxima de solicitações por grupo é enviada continuamente para o grupo de instâncias, independentemente de quantas instâncias existem nesse grupo.

Por exemplo, se você definir o back-end para processar no máximo 100 solicitações por grupo por segundo, o balanceador de carga enviará 100 solicitações por segundo para o grupo, independentemente de o grupo ter duas ou 100 instâncias. Como esse valor não pode ser ajustado, o escalonamento automático não funciona com configurações de balanceamento de carga que usam o número máximo de solicitações por segundo por grupo.

Ativar o escalonamento automático baseado na capacidade de serviço de balanceamento de carga

Console


  1. Acesse a página Grupos de instâncias no Console do Google Cloud.

    Acessar a página Grupos de instâncias (em inglês)

  2. Se houver um grupo de instâncias, selecione-o e clique em Editar grupo. Se você não tem um grupo de instâncias, clique em Criar grupo de instâncias.
  3. Em Escalonamento automático, selecione Ativado.
  4. Em Escalonamento automático baseado em, selecione Utilização de balanceamento de carga HTTP.
  5. Insira a Meta de utilização de balanceamento de carga. Esse valor é tratado como uma porcentagem. Por exemplo, para 60% de utilização do balanceamento de carga HTTP, insira 60.
  6. Insira o número máximo de instâncias que você quer para esse grupo. Defina também o número mínimo de instâncias e o período de resfriamento. O período de espera é o número de segundos que o autoescalador precisa aguardar depois que a máquina virtual é iniciada para começar a coletar informações dela. Isso determina o tempo que a instância pode levar para inicializar, em que os dados coletados não são confiáveis para o escalonamento automático. O período de espera padrão é de 60 segundos.
  7. Salve as alterações.

gcloud


Para ativar um autoescalador responsável pelo escalonamento com base na capacidade de serviço, use o subcomando set-autoscaling. Por exemplo, o comando a seguir cria um autoescalador que dimensiona o grupo de instâncias gerenciadas de destino para que 60% da capacidade de serviço seja mantido. Com o parâmetro --target-load-balancing-utilization, também é necessário o parâmetro --max-num-replicas para criar um autoescalador:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --max-num-replicas 20 \
    --target-load-balancing-utilization 0.6 \
    --cool-down-period 90

Opcionalmente, é possível usar a sinalização --cool-down-period, que informa ao autoescalador quantos segundos esperar após uma nova instância ser iniciada antes de considerar os dados da nova instância. Esse período de espera conta o tempo que a instância pode levar para ser inicializada, em que os dados de utilização coletados não são confiáveis para escalonamento automático. Depois que o período de espera for aprovado, o autoescalador começa a incluir os dados de utilização da instância para determinar se o grupo precisa ser dimensionado. O período de espera padrão é de 60 segundos.

É possível verificar se o autoescalador foi criado usando o subcomando describe:

gcloud compute instance-groups managed describe example-managed-instance-group

Para uma lista de sinalizações e comandos gcloud disponíveis, consulte a referência de .

API


Observação: o escalonamento automático é um recurso de grupos de instâncias gerenciadas, mas ele é um recurso de API separado. Lembre-se disso quando você criar solicitações de API para o escalonamento automático.

Na API, faça uma solicitação POST ao método autoscalers.insert:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers/

O corpo da solicitação precisa conter os campos name, target e autoscalingPolicy. autoscalingPolicy precisa definir loadBalancingUtilization.

Opcionalmente, é possível usar o campo coolDownPeriodSec, que informa ao autoescalador quantos segundos esperar após uma nova instância ser iniciada antes de considerar os dados da nova instância. Esse período de espera conta o tempo que a instância pode levar para ser inicializada, em que os dados de utilização coletados não são confiáveis para escalonamento automático. Depois que o período de espera for aprovado, o autoescalador começa a incluir os dados de utilização da instância para determinar se o grupo precisa ser dimensionado. O período de espera padrão é de 60 segundos.

{

 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 20,
    "loadBalancingUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

Para mais informações sobre como ativar o escalonamento automático com base na capacidade de disponibilização do balanceamento de carga, conclua o tutorial Como fazer o escalonamento automático global de um serviço da Web no Compute Engine.

Escalonamento baseado em balanceamento de carga de rede

Para a carga ser distribuída com um balanceador de carga de rede, são usados protocolos de nível mais baixo como TCP e UDP. Com o balanceamento de carga de rede, distribua tráfegos não baseados em HTTP(S), como o SMTP.

É possível escalonar automaticamente um grupo de instâncias gerenciadas contido em um pool de destino de um balanceador de carga de rede por meio de métricas personalizadas ou de utilização de back-end. Para mais informações, consulte Como escalonar com base na utilização de back-end ou Como escalonar com base nas métricas do Stackdriver Monitoring.