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 nesse grupo automaticamente aumenta (escalonamento vertical) ou diminui de acordo com o valor de destino especificado na sua 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, há componentes faturáveis do Google Cloud, entre eles:

  • Compute Engine

Use a calculadora de preços para gerar uma estimativa de custos baseada na projeção de uso. 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.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu 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. Acesse a página Firewalls no Console do Cloud.
    Acessar a página "Firewalls"
  2. Clique em Criar regra de firewall.
  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. Acesse a página Modelos de instância no Console do Cloud.
    Acessar a página "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 n1-standard-1.
  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-get update && sudo apt-get install git gunicorn3 python3-pip -y
    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. Acesse a página Grupos de instâncias no Console do Cloud.
    Acessar a página "Grupos 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 Ativado.
    2. Defina a Política de escalonamento automático como Uso da CPU. Para saber mais sobre outras políticas de escalonamento automático, consulte Política de escalonamento automático e utilização de destino.

    3. Defina o Uso da CPU de destino como 60%.

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

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

    6. Defina o Período de espera como 120 segundos.

  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 da Web de demonstração:

      Captura de tela do 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 Como compreender as decisões do autoescalador.

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 da 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. Para monitorar a utilização da CPU e o escalonamento automático, selecione Tamanho autoajustado no menu suspenso à esquerda e cpu no menu suspenso à direita.

    Dois gráficos serão exibidos:

    • O gráfico superior exibe o Tamanho, que é o número de instâncias no grupo de instâncias.
    • O gráfico inferior exibe a Utilização, que é a utilização média de CPU do grupo de instâncias, e a Capacidade, que é a utilização de destino cumulativa de CPU do grupo de instâncias.

    O escalonamento automático tenta fazer a Capacidade corresponder à Utilização alterando o Tamanho quando possível.

Mantenha essa janela aberta.

Simular escalonamento vertical (escalonamento horizontal)

O escalonamento vertical ocorre quando a utilização média da CPU do grupo de instâncias é significativamente maior que o valor de destino. Durante esse processo, o autoescalador aumenta gradualmente o tamanho do grupo de instâncias até que a utilização da CPU diminua para o valor de utilização de destino 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 vertical, aumente a utilização da CPU para suas instâncias:

  1. Abra um terminal usando o Cloud Shell no Console do Cloud.

    Abrir 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 ao elevar o Tamanho do grupo de instâncias:

    O monitor mostra que a utilização da CPU aumentou. Logo depois, o tamanho do grupo aumenta de três para seis instâncias.

    Observe que agora há seis instâncias listadas na guia Membros.

Mantenha as duas janelas abertas.

Simular redução vertical (redução horizontal)

A redução vertical ocorre quando a utilização média da CPU do grupo de instâncias é significativamente menor que o valor de destino. Durante esse processo, o autoescalador diminui gradualmente o tamanho do grupo de instâncias até a utilização da CPU aumentar para a utilização de destino ou até o tamanho do grupo de instâncias ser igual ao Número mínimo de instâncias, definido como 3.

Para acionar a redução vertical, diminua a utilização de CPU para 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 diminuirá a Capacidade reduzindo o Tamanho do grupo de instâncias:

    O monitor mostra que a utilização da CPU diminuiu. Cerca de 10 minutos depois, o tamanho do grupo diminui de seis para três instâncias.

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

Feche as duas janelas quando terminar.

Como fazer a limpeza

Depois de concluir este tutorial, limpe os recursos criados no GCP para que não consumam sua cota e você não seja cobrado por eles no futuro. Veja como excluir e desativar esses recursos nas seções a seguir.

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 GCP, acesse a página Gerenciar recursos.

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

    Acesse a página Grupos de instâncias

  2. Clique na caixa de seleção de seu grupo de instâncias autoscaling-web-app-group.
  3. Clique em Excluir para excluir o grupo de instâncias.

Como excluir o modelo de instância

  1. Acesse a página Modelos de instância no Console do Cloud.

    Acessar a página "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 janela nova, clique em Excluir para confirmar a remoção.

Como excluir a regra de firewall

  1. Acesse a página Regras de firewall no Console do Cloud.

    Acessar a página "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 janela nova, clique em Excluir para confirmar a remoção.

A seguir