Usar a escala automática para aplicações altamente escaláveis

Este tutorial explica como usar o dimensionamento automático para ajustar automaticamente o número de instâncias de VMs que estão a alojar a sua aplicação, permitindo que a aplicação se adapte a quantidades variáveis de tráfego.

Para usar o dimensionamento automático, aloje a sua aplicação num grupo de instâncias gerido. Um grupo de instâncias geridas é um conjunto de instâncias que estão a executar a mesma aplicação e que podem ser geridas como uma única entidade. Quando um grupo de instâncias geridas tem a escala automática ativada, o número de VMs no grupo de instâncias aumenta (escala horizontal) ou diminui (escala vertical) automaticamente de acordo com o valor de destino que especificar para a sua política de escala automática.

Este tutorial inclui passos detalhados para lançar uma aplicação Web num grupo de instâncias gerido, configurar o dimensionamento automático, configurar o acesso à rede e observar o dimensionamento automático simulando picos e quedas de carga. Consoante a sua experiência com estas funcionalidades, este tutorial demora cerca de 20 minutos a concluir.

Objetivos

  • Inicie uma aplicação Web de demonstração num grupo de instâncias gerido.
  • Observe os efeitos da escala automática simulando picos e quedas de tráfego.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

Arquitetura de aplicações

A aplicação inclui os seguintes componentes do Compute Engine:

Iniciar a aplicação Web

Este tutorial usa uma aplicação Web armazenada no GitHub. Se quiser saber mais sobre como a aplicação foi implementada, consulte o repositório GoogleCloudPlatform/python-docs-samples no GitHub.

Inicie a aplicação Web em todas as VMs num grupo de instâncias gerido incluindo um script de arranque num modelo de instância. Para permitir o tráfego HTTP para a aplicação Web, crie uma regra de firewall.

Crie uma regra de firewall

Crie uma regra de firewall para permitir tráfego HTTP para a aplicação Web:

  1. Na Google Cloud consola, aceda à página Firewalls.

    Aceda a Firewalls

  2. Clique em Criar regra de firewall.

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

  4. Defina Rede como default.

  5. Defina Segmentações para selecionar Specified target tags.

  6. Em Etiquetas de destino, introduza http-server.

  7. Defina o Filtro de origem como IPv4 ranges.

  8. Em Intervalos de IPv4 de origem, introduza 0.0.0.0/0

    Para permitir o acesso a todas as moradas IP.

  9. Em Protocolos e portas, selecione Protocolos e portas especificados. Em seguida, selecione TCP e introduza 80 para permitir o acesso ao tráfego HTTP.

  10. Clique em Criar.

Crie um modelo de instância

Crie um modelo de instância que inicie a aplicação Web de demonstração no arranque:

  1. Na Google Cloud consola, aceda à página Modelos de instâncias.

    Aceda a Modelos de instâncias

  2. Clique em Criar modelo de instância.

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

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

  5. Em Firewall, selecione a caixa de verificação Permitir tráfego HTTP. Isto aplica a etiqueta de rede http-server a cada instância criada a partir deste modelo.

  6. Expanda a secção Opções avançadas para ver as definições avançadas.

  7. Expanda a secção Gestão.

  8. Na secção Automatização, introduza o seguinte script de arranque:

    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
    

    Este script faz com que cada MV execute a aplicação Web durante o arranque.

  9. Clique em Criar.

Crie um grupo de instâncias geridas

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

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

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

  3. Selecione Novo grupo de instâncias gerido (sem estado)."

  4. Em Nome, introduza autoscaling-web-app-group.

  5. Para Modelo de instância, selecione autoscaling-web-app-template.

  6. Em Localização, selecione Várias zonas.

  7. Para Região, selecione us-central1.

  8. Para Zonas, selecione as seguintes zonas na lista pendente:

    • us-central1-b
    • us-central1-c
    • us-central1-f
  9. Configure o escalamento automático para o grupo de instâncias:

    1. Para o Modo de dimensionamento automático, selecione Ativado: adicionar e remover instâncias do grupo.
    2. Defina o Número mínimo de instâncias como 3.

    3. Defina o número máximo de instâncias como 6.

    4. Defina o Período de inicialização para 120 segundos.

    5. Em Métricas de dimensionamento automático, selecione Utilização da CPU como o tipo de métrica. Para saber mais sobre as métricas de dimensionamento automático, consulte o artigo Política de dimensionamento automático.

    6. Defina a utilização da CPU alvo como 60.

    7. Clique em Concluído.

  10. Em Reparação automática, selecione Sem verificação de estado na lista pendente Verificação de estado.

  11. Clique em Criar. Esta ação redireciona para a página Grupos de instâncias.

  12. Para verificar se as suas instâncias estão em execução:

    1. Na página Grupos de instâncias na Google Cloud consola, clique em autoscaling-web-app-group para ver as instâncias nesse grupo.
    2. Em IP externo, clique num endereço IP para associar essa instância. É aberto um novo separador do navegador que apresenta a aplicação Web de demonstração:

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

      Quando terminar, feche o separador do navegador da aplicação Web de demonstração.

Observar a escala automática

Para mais informações sobre os comportamentos de dimensionamento automático, consulte o artigo Compreender as decisões de dimensionamento automático.

Monitorize a escala automática

O grupo de instâncias que criou usa uma política de escalabilidade automática baseada na utilização da CPU. Isto significa que o dimensionamento automático aumenta ou diminui o grupo conforme necessário para manter a utilização da CPU alvo de 60%.

Para monitorizar o tamanho e a utilização da CPU do seu grupo de instâncias, use os gráficos de escalamento automático na Google Cloud consola:

  1. Na página Grupos de instâncias do grupo de instânciasautoscaling-web-app-group, clique no separador Monitorização.
  2. Pode monitorizar o dimensionamento automático a partir do gráfico Tamanho do grupo. O gráfico apresenta Instâncias, que representa o número de instâncias de VMs no grupo ao longo do tempo.
  3. Opcional: para monitorizar a capacidade com escala automática em comparação com a utilização, consulte o gráfico Utilização do escalador automático (CPU). O gráfico apresenta a Utilização, que é a utilização total da CPU das instâncias de VM no grupo, e a Capacidade, que é a utilização da CPU alvo cumulativa do grupo (utilização da CPU alvo multiplicada pelo número de instâncias de VM).

    A criação de uma escala automática tenta fazer com que a capacidade corresponda à utilização alterando o número de instâncias, quando possível.

Mantenha esta janela aberta.

Simule o aumento de nós

O aumento da escala ocorre quando a utilização média da CPU do grupo de instâncias é significativamente superior ao valor de destino. Durante o aumento da escala, o escalador 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 alvo ou até que o tamanho do grupo de instâncias seja igual ao número máximo de instâncias, que foi definido como 6.

Para acionar o aumento da escala, aumente a utilização da CPU das suas instâncias:

  1. Na Google Cloud consola, abra o Cloud Shell.

    Abra o Cloud Shell

    O Cloud Shell é aberto na parte inferior da Google Cloud consola. A sessão pode demorar alguns segundos a ser inicializada.

  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 do seu projeto atual, que é apresentado em cada nova linha no Cloud Shell:

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. Execute o seguinte script bash. Este script faz com que as instâncias da aplicação Web de demonstração tenham uma carga aumentada, o que aumenta a utilização da CPU. Após alguns minutos, a utilização da CPU vai ultrapassar o valor alvo, o que vai levar o dimensionamento automático a aumentar 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 o separador Monitorização na Google Cloud consola.

    Após alguns minutos, o separador Monitorização apresenta um aumento da Utilização da CPU, o que aciona o dimensionamento automático para aumentar a Capacidade, aumentando o número de Instâncias.

    Também pode reparar que agora são apresentadas 6 instâncias no separador Vista geral.

Mantenha ambas as janelas abertas.

Simule a redução horizontal

A redução ocorre quando a utilização média da CPU do grupo de instâncias é significativamente inferior ao valor alvo. Durante a redução, o escalador automático diminui gradualmente o tamanho do grupo de instâncias até a utilização da CPU aumentar para a utilização da CPU alvo ou até o tamanho do grupo de instâncias ser igual ao número mínimo de instâncias, que foi definido como 3.

Para acionar a redução da escala, diminua a utilização da CPU das suas instâncias:

  1. Execute o seguinte script bash. Este script faz com que as instâncias da aplicação Web de demonstração tenham uma carga reduzida, o que diminui a utilização da CPU. Após alguns minutos, a utilização da CPU fica abaixo do valor alvo, o que leva o escalador automático a diminuir 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 o separador Monitorização na Google Cloud consola.

    Após alguns minutos, o separador Monitorização apresenta uma diminuição da utilização da CPU. Após o período de estabilização, que verifica se a carga é consistentemente inferior, o ajuste automático de escala diminui a capacidade diminuindo o número de instâncias.

    Também pode reparar que apenas são apresentadas 3 instâncias no separador Vista geral.

Feche ambas as janelas quando terminar.

Limpar

Depois de concluir o tutorial, pode limpar os recursos que criou para que deixem de usar a quota e incorrer em custos. As secções seguintes descrevem como eliminar ou desativar estes recursos.

Se criou um projeto separado para este tutorial, elimine o projeto completo. Caso contrário, se o projeto tiver recursos que quer manter, elimine apenas os recursos criados neste tutorial.

Eliminar o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Eliminar recursos específicos

Eliminar o grupo de instâncias

  1. In the Google Cloud console, go to the Instance groups page.

    Go to Instance groups

  2. Select the checkbox for your autoscaling-web-app-group instance group.
  3. To delete the instance group, click Delete.

Eliminar o modelo de instância

  1. Na Google Cloud consola, aceda à página Modelos de instâncias.

    Aceda a Modelos de instâncias

  2. Clique na caixa de verificação junto a autoscaling-web-app-template.

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

Eliminar a regra de firewall

  1. Na Google Cloud consola, aceda à página Regras de firewall.

    Aceda às regras de firewall

  2. Clique na caixa de verificação junto à regra de firewall denominada default-allow-http.

  3. Clique em Eliminar. Na nova janela, clique em Eliminar para confirmar a eliminação.

O que se segue?