Dimensionamento baseado na CPU ou na capacidade de veiculação de balanceamento de carga

A forma mais simples de escalonamento automático é baseada no uso da CPU de um grupo de instâncias de máquina virtual. 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

Como fazer o escalonamento baseado no uso da CPU

Faça o escalonamento automático com base na média de uso da CPU de um grupo de instâncias gerenciadas. 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 autoescalador avalia a meta do nível de uso da CPU como uma fração do uso médio de todas as vCPUs ao longo do tempo no grupo de instâncias. Quando o uso médio do seu total de vCPU exceder a meta de utilização, o autoescalador adicionará máquinas virtuais. Por exemplo, uma meta de utilização configurada com 0,75 instrui o autoescalador a manter um uso médio de 75% entre todas as vCPUs no grupo de instâncias.

Ativar o escalonamento automático com base no uso da CPU

Console


  1. Acesse a página Grupos de instâncias.
  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. Insira a Meta de uso de CPU. Esse valor será tratado como uma porcentagem. Por exemplo, para ter 60% de uso 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 resfriamento. O período de resfriamento é 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 o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é de 60 segundos.
  7. Salve as alterações.

gcloud


Use o subcomando set-autoscaling para ativar o escalonamento automático em 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, o --max-num-replicas também é obrigatório quando um autoescalador é criado:

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

Como alternativa, use a sinalização --cool-down-period, que informa ao autoescalador quantos segundos precisam ser aguardados depois que uma nova instância foi iniciada e antes que a utilização comece a ser coletada. Terminado o período de resfriamento, as informações de uso da nova instância começam a ser coletadas pelo autoescalador, que determina se o grupo precisa de mais instâncias. Isso determina o tempo que a instância pode levar para inicializar, em que o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é de 60 segundos.

Verifique se o escalonamento automático foi ativado com êxito usando o subcomando instance-groups managed describe. Com ele, você tem a descrição do grupo de instâncias gerenciadas correspondente e as informações sobre qualquer recurso de escalonamento automático para esse grupo:

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

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

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 para o seguinte URL, substituindo myproject pelo seu código do projeto e us-central1-f pela zona desejada:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

O corpo da solicitação deve conter os campos name, target e autoscalingPolicy. Em autoscalingPolicy, os valores de cpuUtilization e maxNumReplicas precisam ser definidos.

Como alternativa, use o parâmetro coolDownPeriodSec, que informa ao autoescalador quantos segundos devem ser aguardados depois que uma nova instância foi iniciada e antes que a utilização comece a ser coletada. Terminado o período de resfriamento, as informações de uso da nova instância começam a ser coletadas pelo autoescalador, que determina se o grupo precisa de mais instâncias. Isso determina o tempo que a instância pode levar para inicializar, em que o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é de 60 segundos.

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

Como o autoescalador processa a utilização intensa da CPU

Durante os períodos de utilização intensa da CPU, quando a utilização atinge quase 100%, o excesso de carga do grupo é detectado no autoescalador. Nesses casos, o número de máquinas virtuais do autoescalador é aumentado em mais 50% ou um mínimo de 4 instâncias, o que for mais alto. Em geral, o uso da CPU dentro de um grupo de instâncias gerenciadas não excede 100%.

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 serviços de back-end que, por sua vez, distribuem o tráfego entre grupos de instâncias. No serviço de back-end, defina a capacidade de serviço de balanceamento de carga dos grupos de instâncias relacionados ao back-end como o uso máximo de CPU, quantidade máxima de solicitações por segundo (RPS, na sigla em inglês), ou quantidade máxima de solicitações por segundo do grupo. Quando um grupo de instâncias alcança a capacidade de serviço, o tráfego começa a ser enviado para outro grupo de instâncias no serviço de back-end.

O autoescalador anexado a um balanceador de carga HTTP(S) será responsável pelo escalonamento do grupo de instâncias gerenciadas, mantendo uma fração da capacidade de serviço do balanceamento de carga.

Por exemplo, imagine que a capacidade de serviço de balanceamento de carga de um grupo de instâncias gerenciadas seja definido como 100 RPS por instância. Quando você cria um autoescalador com a política de balanceamento de carga HTTP(S) e define uma meta de utilização de 0,8 ou 80% a ser mantida por ele, as instâncias do grupo de instâncias gerenciadas são adicionadas ou excluídas para que o nível de 80% da capacidade de serviço ou 80 RPS por instância seja mantido.

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

Diagrama com 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. Nesse exemplo, a capacidade de serviço é medida no valor maxRatePerInstance.

Configurações de balanceamento de carga aplicáveis

Quando você criar o back-end pela primeira vez, configure uma dessas três opções para a capacidade de serviço de balanceamento de carga: uso máximo de CPU, quantidade máxima de solicitações por segundo, por instância, ou quantidade máxima de solicitações por segundo do grupo inteiro. O escalonamento automático funciona apenas com o uso máximo de CPU e a quantidade máxima de solicitações por segundo/instância porque o valor dessas definições pode ser controlado pela inclusão ou exclusão de instâncias. Por exemplo, se você define um back-end para que ele processe 10 solicitações por segundo/instância e o autoescalador está configurado para manter 80% desta taxa, as instâncias são adicionadas ou excluídas no autoescalador quando a quantidade de solicitações por segundo/instância muda.

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, não importando a quantidade de instâncias nesse grupo.

Por exemplo, se você define o back-end para processar no máximo cem solicitações por grupo, por segundo, o balanceador de carga continua enviando cem solicitações por segundo para o grupo, não importando se o grupo tem duas ou cem instâncias. Como este valor não pode ser ajustado, o escalonamento automático não funciona com uma configuração de balanceamento de carga que use essa métrica.

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

Console


  1. Acesse o painel Grupos de instâncias no Console do Google Cloud Platform.
  2. Se existir um grupo de instâncias, selecione-o e clique em Editar grupo. Caso contrário, clique em Criar grupo de instâncias.
  3. Em Escalonamento automático, selecione Ativado.
  4. Em Escalonamento automático baseado em, selecione Uso de balanceamento de carga HTTP.
  5. Insira a Meta de uso de balanceamento de carga. Esse valor será tratado como uma porcentagem. Por exemplo, para 60% de uso 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 resfriamento é 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 o uso coletado não é confiável para o escalonamento automático. O período de resfriamento 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, o --max-num-replicas também é obrigatório quando o autoescalador é criado:

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

Como opção, use a sinalização --cool-down-period, que informa ao autoescalador quantos segundos aguardar após o início de uma nova máquina virtual antes de começar a coletar informações de uso dela. Isso determina o tempo que a máquina virtual pode levar para inicializar, durante o qual o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é de 60 segundos.

Verifique se o autoescalador foi criado usando o subcomando describe:

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

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

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 para o seguinte URL, substituindo myproject pelo seu código do projeto e us-central1-f pela zona desejada:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

O corpo da solicitação deve conter os campos name, target e autoscalingPolicy. Em autoscalingPolicy, o valor de loadBalancingUtilization precisa ser definido.

Como alternativa, use o parâmetro coolDownPeriodSec, que informa ao autoescalador quantos segundos devem ser aguardados depois que uma nova instância foi iniciada e antes que a utilização comece a ser coletada. Terminado o período de resfriamento, as informações de uso da nova instância começam a ser coletadas pelo autoescalador, que determina se o grupo precisa de mais instâncias. Isso determina o tempo que a instância pode levar para inicializar, em que o uso coletado não é confiável para o escalonamento automático. O período de resfriamento 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
  }
}

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.

Faça o escalonamento automático de um grupo de instâncias gerenciadas que seja parte do pool de destino de um balanceador de carga de rede com o uso da CPU ou métricas personalizadas. Para mais informações, consulte Como fazer o dimensionamento com base na utilização da CPU ou Como fazer o dimensionamento com base em métricas do Stackdriver Monitoring.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine