Como usar o escalonamento automático para aplicativos altamente escalonáveis

Veja neste tutorial como usar o escalonamento automático para ajustar automaticamente o número de instâncias de VM que hospedam seu aplicativo, permitindo que ele se adapte a quantidades variáveis de tráfego.

Para usar o escalonamento automático, hospede seu aplicativo em um grupo de instâncias gerenciadas. Um grupo de instâncias gerenciadas é uma coleção de instâncias que executam o mesmo aplicativo e podem ser gerenciadas como uma única entidade. Quando um grupo de instâncias gerenciadas tem o escalonamento automático ativado, o número de VMs no grupo aumenta (escalonamento horizontal) ou diminui automaticamente (escalonamento vertical) de acordo com o valor máximo especificado para a política de escalonamento automático.

Este tutorial inclui etapas detalhadas para lançar um aplicativo da Web em um grupo de instâncias gerenciadas, configurar o escalonamento automático e o acesso à rede e observar o escalonamento automático simulando picos e quedas de carga. Dependendo da sua experiência com esses recursos, a conclusão deste tutorial leva cerca de 20 minutos.

Objetivos

  • Lançar um aplicativo de demonstração da Web em um grupo de instâncias gerenciadas.
  • Observar os efeitos do escalonamento automático simulando picos e quedas de tráfego.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  5. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

Arquitetura do aplicativo

O aplicativo inclui os seguintes componentes do Compute Engine:

Como lançar o aplicativo da Web

Neste tutorial, é usado um aplicativo da Web armazenado no GitHub. Se você quiser saber mais sobre como o aplicativo foi implementado, consulte o repositório do Google Cloud no GitHub (em inglês).

Inclua um script de inicialização em um modelo de instância para lançar o aplicativo da Web em todas as VMs em um grupo de instâncias gerenciadas. Para permitir o tráfego HTTP para o aplicativo da Web, crie uma regra de firewall.

Criar uma regra de firewall

Crie uma regra de firewall que permita o tráfego HTTP para o aplicativo da Web:

  1. No Console do Google Cloud, acesse a página Firewalls.

    Acessar Firewalls

  2. Clique em Create firewall rule.

  3. Em Nome, insira default-allow-http.

  4. Defina Rede como default.

  5. Defina Destinos para selecionar Specified target tags.

  6. Em Tags de destino, insira http-server.

  7. Defina Filtro de origem como IP ranges.

  8. Em Intervalos de IP de origem, insira 0.0.0.0/0.

    para permitir o acesso a todos os endereços IP.

  9. Em Portas e protocolos, selecione Protocolos e portas especificados. Em seguida, selecione tcp e insira 80 para permitir acesso ao tráfego HTTP.

  10. Clique em Criar.

Criar um modelo de instância

Crie um modelo de instância que lance o aplicativo de demonstração da Web na inicialização:

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

    Acesse "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Em Nome, insira autoscaling-web-app-template.

  4. Em Configuração da máquina, defina Tipo de máquina como e2-standard-2.

  5. Em Disco de inicialização, defina Imagem como Debian GNU/Linux 9 (extensão).

  6. Em Firewall, marque a caixa de seleção Permitir tráfego HTTP. Isso aplica a tag de rede http-server a cada instância criada com base nesse modelo.

  7. Clique em Gerenciamento, segurança, discos, rede, locatário único para exibir as configurações avançadas. Serão exibidas várias guias.

  8. Na guia Gerenciamento, localize Automação e insira o seguinte script de inicialização:

    sudo apt update && sudo apt -y install git gunicorn3 python3-pip
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/compute/managed-instances/demo
    sudo pip3 install -r requirements.txt
    sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
    

    Com esse script, todas as instâncias executam o aplicativo da Web durante a inicialização.

  9. Clique em Criar.

Criar um grupo de instâncias gerenciadas

Crie um grupo de instâncias regional para começar a executar o aplicativo da Web:

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

    Acesse grupo de instâncias

  2. Clique em Criar grupo de instâncias para criar um novo grupo.

  3. Em Nome, insira autoscaling-web-app-group.

  4. Em Local, selecione Várias zonas.

  5. Em Região, selecione us-central1.

  6. Clique no menu suspenso Configurar zonas para exibir Zonas. Selecione as seguintes zonas:

    • us-central1-b
    • us-central1-c
    • us-central1-f
  7. Em Modelo de instância, selecione autoscaling-web-app-template.

  8. Configure o escalonamento automático para o grupo de instâncias:

    1. Em Escalonamento automático, selecione Escalonamento automático.
    2. Defina a Política de escalonamento automático para usar a utilização da CPU como uma métrica. Para saber mais sobre a política de escalonamento automático, consulte este link.
    3. Defina a Utilização da CPU de destino para 60%.
    4. Defina o Período de espera como 120 segundos.

    5. Defina o Número mínimo de instâncias como 3.

    6. Defina Número máximo de instâncias como 6.

  9. Em Verificação de integridade, selecione Nenhuma verificação de integridade.

  10. Clique em Criar. Você será redirecionado para a página Grupos de instâncias.

  11. Para verificar se as instâncias estão em execução, realize as ações a seguir:

    1. Na página Grupos de instâncias no Console do Cloud, clique em autoscaling-web-app-group para ver as instâncias desse grupo.
    2. Em IP externo, clique em um endereço IP para conectar essa instância. Uma nova guia do navegador será aberta, exibindo o aplicativo de demonstração da Web:

      Aplicativo de demonstração da Web, que lista informações sobre a instância e tem botões de ação.

      Quando terminar, feche a guia do navegador com o aplicativo de demonstração da Web.

Como observar o escalonamento automático

Para mais informações sobre comportamentos de escalonamento automático, consulte Noções básicas sobre decisões de escalonamento automático.

Monitorar o escalonamento automático

O grupo de instâncias que você criou usa uma Política de escalonamento automático com base no Uso da CPU. Isso significa que o autoescalador aumenta ou diminui o grupo conforme necessário para manter a utilização de destino da CPU em 60%.

Para monitorar o tamanho e a utilização média de CPU do seu grupo de instâncias, use os gráficos de escalonamento automático no Console do GCP:

  1. Na página Grupos de instâncias de autoscaling-web-app-group, clique na guia Monitoramento.
  2. É possível monitorar o escalonamento automático no gráfico Tamanho do grupo. O gráfico exibe Instâncias, que representam o número de instâncias de VM no grupo ao longo do tempo.
  3. Opcional: para monitorar a capacidade de escalonamento automático em comparação com a utilização, consulte o gráfico de Utilização do escalonador automático (CPU). O gráfico exibe a Utilização, que é o uso total de CPU das instâncias de VM no grupo, e a Capacidade, que é a utilização cumulativa da CPU de destino do grupo (utilização da CPU de destino multiplicada pelo número de instâncias de VM).

    O escalonamento automático tenta fazer a Capacidade corresponder à Utilização alterando o número de Instâncias, quando possível.

Mantenha esta janela aberta.

Simular escalonamento horizontal

O escalonamento horizontal ocorre quando a utilização média da CPU do grupo de instâncias é significativamente maior do que o valor de destino. Durante o escalonamento horizontal, o escalonador automático aumenta gradualmente o tamanho do grupo de instâncias até que a utilização da CPU diminua para o valor de utilização da CPU desejado ou até que o tamanho do grupo de instâncias seja igual ao Número máximo de instâncias, definido como 6.

Para acionar o escalonamento horizontal, aumente a utilização da CPU nas suas instâncias:

  1. No Console do Google Cloud, abra o Cloud Shell.

    Abra o Cloud Shell

    O Cloud Shell será aberto na parte inferior do Console do Cloud. A inicialização da sessão pode levar alguns segundos.

  2. Crie uma variável bash local para o ID do projeto:

    export PROJECT_ID=[PROJECT_ID]
    

    em que PROJECT_ID é o ID do projeto atual, que é exibido em cada nova linha no Cloud Shell:

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. Execute o script bash a seguir. Esse script faz com que as instâncias de aplicativos de demonstração da Web tenham uma carga aumentada, o que aumenta a utilização de CPU. Após alguns minutos, a utilização da CPU ultrapassará o valor de destino, fazendo com que o escalonamento automático aumente o tamanho do grupo de instâncias.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating high load for instance $NAME"
      curl -q -s "http://$IP/startLoad" >/dev/null --retry 2
    done
    
  4. Abra a guia Monitoramento no Console do Cloud.

    Após alguns minutos, a guia Monitoramento exibe que a Utilização da CPU aumentou. Isso aciona o escalonamento automático, que aumenta a Capacidade aumentando o número de instâncias.

    Observe que agora há seis instâncias listadas na guia Visão geral.

Mantenha as duas janelas abertas.

Simular escalonamento vertical

O escalonamento vertical ocorre quando a utilização média da CPU do grupo de instâncias é significativamente menor do que o valor de destino. Durante o escalonamento vertical, o escalonador automático diminui gradualmente o tamanho do grupo de instâncias até que a utilização da CPU aumente para a utilização de CPU desejada ou até que o tamanho do grupo de instâncias seja igual ao Número mínimo de instâncias, definido como 3.

Para acionar o escalonamento vertical, diminua a utilização da CPU nas suas instâncias:

  1. Execute o script bash a seguir. Esse script faz com que as instâncias de aplicativos de demonstração da Web tenham uma carga reduzida, o que diminui a utilização de CPU. Após alguns minutos, a utilização da CPU ficará abaixo do valor de destino, fazendo com que o escalonador automático diminua o tamanho do grupo de instâncias.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating low load for instance $NAME"
      curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2
    done
    
  2. Abra a guia Monitoramento no Console do Cloud.

    Após alguns minutos, a guia Monitoramento mostra que a Utilização da CPU diminuiu. Após um período de estabilização de dez minutos, que verifica se a carga é consistentemente menor, o escalonamento automático diminui a Capacidade reduzindo o número de Instâncias

    Observe que apenas três instâncias estão listadas na guia Visão geral.

Feche as duas janelas quando terminar.

Limpeza

Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.

Se você tiver criado um projeto separado para este tutorial, exclua o projeto inteiro. Se o projeto tiver recursos que você quer manter, exclua apenas os recursos criados neste tutorial.

Como excluir o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Como excluir recursos específicos

Como excluir o grupo de instâncias

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

    Acesse grupo de instâncias

  2. Selecione a caixa de seleção de seu grupo de instâncias autoscaling-web-app-group.
  3. Para excluir o grupo de instâncias, clique em Excluir.

Como excluir o modelo de instância

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

    Acesse "Modelos de instância"

  2. Clique na caixa de seleção ao lado de autoscaling-web-app-template.

  3. Clique em Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a remoção.

Como excluir a regra de firewall

  1. No Google Cloud Console, acesse a página Regras de firewall.

    Acessar as regras de firewall

  2. Clique na caixa de seleção ao lado da regra de firewall denominada default-allow-http.

  3. Clique em Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a remoção.

A seguir