Tutorial: Realizar um teste de carga para identificar estrangulamentos de desempenho numa aplicação web

Neste tutorial, você vai aprender como identificar estrangulamentos de desempenho numa aplicação web usando a preview de teste de carga de Azure. Vai criar um teste de carga para uma amostra Node.js aplicação.

A aplicação da amostra consiste numa API web Node.js, que interage com uma base de dados NoSQL. Você irá implementar a API web para Serviço de Aplicações do Azure aplicações web e usar Azure Cosmos DB como base de dados.

Saiba mais sobre os conceitos-chave para o Azure Load Testing.

Neste tutorial, irá aprender a:

  • Implemente a aplicação de amostra.
  • Criar e executar um teste de carga.
  • Identifique os estrangulamentos de desempenho na aplicação.
  • Retire um estrangulamento.
  • Volte a fazer o teste de carga para verificar as melhorias de desempenho.

Importante

O Azure Load Testing está atualmente em pré-visualização. Para termos legais aplicáveis às funcionalidades do Azure que estejam em versão beta, em pré-visualização ou ainda não lançadas em disponibilidade geral, consulte os Termos Complementares de Utilização para visualizações Microsoft Azure.

Pré-requisitos

Implementar a aplicação da amostra

Antes de carregar a aplicação da amostra, tem de a implementar e funcionar. Use comandos Azure CLI, comandos Git e comandos PowerShell para que isso aconteça.

  1. Abra Windows PowerShell, inscreva-se no Azure e descreva a subscrição:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. Clone o repo de origem do pedido de amostra:

    git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
    

    A aplicação da amostra é uma aplicação Node.js que consiste num componente web Serviço de Aplicações do Azure e numa base de dados DB Azure Cosmos. O repo inclui um script PowerShell que implementa a aplicação da amostra para a sua subscrição Azure. Também tem um script Apache JMeter que você usará em etapas posteriores.

  3. Vá ao diretório da aplicação Node.js e implemente a aplicação da amostra utilizando este script PowerShell:

    cd nodejs-appsvc-cosmosdb-bottleneck
    .\deploymentscript.ps1
    

    Dica

    Pode instalar o PowerShell no Linux/WSL ou macOS.

    Depois de instalá-lo, pode executar o comando anterior como pwsh ./deploymentscript.ps1.

  4. A pedido, forneça:

    • O seu ID de subscrição do Azure.
    • Um nome único para a sua aplicação web.
    • Um local. Por predefinição, a localização é eastus. Pode obter códigos de região executando o comando Get-AzLocation .

    Importante

    Para o nome da sua aplicação web, utilize apenas letras e números minúsculos. Não use espaços ou caracteres especiais.

  5. Após o final da implementação, aceda à aplicação de amostra de execução abrindo-a https://<yourappname>.azurewebsites.net numa janela do navegador.

  6. Para ver os componentes da aplicação, inscreva-se no portal do Azure e vá ao grupo de recursos que criou.

    Screenshot that shows the list of Azure resource groups.

Agora que tem a aplicação implantada e em funcionamento, pode fazer o primeiro teste de carga contra ela.

Configure e crie o teste de carga

Nesta secção, irá criar um teste de carga utilizando uma amostra do script de teste Apache JMeter.

O repo de origem da aplicação da amostra inclui um script Apache JMeter chamado SampleApp.jmx. Este script faz três chamadas API para a aplicação web em cada iteração de teste:

  • add: Realiza uma operação de inserção de dados no Azure Cosmos DB para o número de visitantes na aplicação web.
  • get: Realiza uma operação GET da Azure Cosmos DB para recuperar a contagem.
  • lasttimestamp: Atualiza a hora desde que o último utilizador foi ao site.

Nota

A amostra do script Apache JMeter requer dois plugins: Custom Thread Groups e Throughput Shaping Timer. Para abrir o script na sua instância Apache JMeter local, precisa instalar ambos os plugins. Pode utilizar o Gestor de Plugins Apache JMeter para o fazer.

Criar o recurso Azure Load Testing

O recurso Load Testing é um recurso de alto nível para as suas atividades de teste de carga. Este recurso fornece um local centralizado para visualizar e gerir testes de carga, resultados de testes e artefactos relacionados.

Se já tiver um recurso de Teste de Carga, salte esta secção e continue a criar um teste de carga.

Se ainda não tiver um recurso de Teste de Carga, crie um agora:

  1. Inscreva-se no portal do Azure utilizando as credenciais para a sua subscrição Azure.

  2. Selecione o botão de menu no canto superior esquerdo do portal e, em seguida, selecione + Crie um recurso.

    Screenshot that shows the button for creating a resource.

  3. Utilize a barra de pesquisa para encontrar o Azure Load Testing.

  4. Selecione testes de carga Azure.

  5. No painel de testes de carga Azure , selecione Criar.

    Screenshot that shows the Azure Load Testing pane.

  6. Forneça as seguintes informações para configurar o seu novo recurso Azure Load Testing:

    Campo Descrição
    Subscrição Selecione a subscrição Azure que pretende utilizar para este recurso Azure Load Testing.
    Grupo de recursos Selecione um grupo de recursos existente. Ou selecione Criar novo e, em seguida, introduzir um nome único para o novo grupo de recursos.
    Nome Insira um nome único para identificar o seu recurso Azure Load Testing.
    O nome não pode conter caracteres especiais, tais como \/"""[]:|<>+=;,?*@&, ou whitespace. O nome não pode começar com um sublinhado (_), e não pode terminar com um período (.) ou um traço (-). O comprimento deve ser de 1 a 64 caracteres.
    Localização Selecione uma localização geográfica para hospedar o seu recurso Azure Load Testing.
    Esta localização também determina de onde os motores de teste estão hospedados e de onde provêm os pedidos do cliente JMeter.

    Nota

    Opcionalmente, pode configurar mais detalhes no separador Tags . As etiquetas são pares de nome/valor que lhe permitem categorizar recursos e visualizar a faturação consolidada aplicando a mesma etiqueta a múltiplos recursos e grupos de recursos.

  7. Depois de terminar de configurar o recurso, selecione Review + Create.

  8. Reveja todas as definições de configuração e selecione Criar para iniciar a implementação do recurso Azure Load Testing.

    Quando o processo estiver concluído, aparece uma mensagem de sucesso de implantação.

  9. Para visualizar o novo recurso, selecione Ir para o recurso.

    Screenshot that shows the deployment completion screen.

  10. Opcionalmente, gerencie o acesso ao seu recurso Azure Load Testing.

    O Azure Load Testing utiliza o controlo de acesso baseado em funções (RBAC) para gerir permissões para o seu recurso. Se encontrar esta mensagem, a sua conta não tem as permissões necessárias para gerir os testes.

    Screenshot that shows an error message in the Azure portal that you're not authorized to use the Azure Load Testing resource.

Criar um teste de carga

Para criar um teste de carga no recurso de teste de carga para a aplicação da amostra:

  1. Vá ao recurso de teste de carga e selecione Criar um novo teste na barra de comando.

    Screenshot that shows the button for creating a new test.

  2. No separador Básicos, insira o nome do teste e as informações de descrição do teste . Opcionalmente, pode selecionar o teste 'Executar' após a caixa de verificação da criação para iniciar automaticamente o teste de carga depois de o criar.

    Screenshot that shows the Basics tab for creating a test.

  3. No separador plano de teste , selecione o método de teste do script JMeter e, em seguida, selecione o script de teste SampleApp.jmx a partir do diretório de aplicações de amostra clonada. Em seguida, selecione Upload para carregar o ficheiro para Azure e configurar o teste de carga.

    Screenshot that shows the Test plan tab and how to upload an Apache JMeter script.

    Opcionalmente, pode selecionar e carregar ficheiros de configuração Apache JMeter adicionais ou outros ficheiros que sejam referenciados no ficheiro JMX. Por exemplo, se o seu script de teste utilizar conjuntos de dados CSV, pode carregar os ficheiros .csv correspondentes.

  4. No separador Parâmetros , adicione uma nova variável de ambiente. Introduza webapp para o nome e <yourappname>.azurewebsites.net para o valor. Substitua o texto <yourappname> do espaço reservado pelo nome da aplicação de amostra recém-implantada. Não inclua o https:// prefixo.

    O script de teste Apache JMeter utiliza a variável ambiente para recuperar o URL da aplicação web. O script invoca então as três APIs na aplicação web.

    Screenshot that shows the parameters tab to add environment variable.

  5. No separador Carregar , configuure os seguintes detalhes. Pode deixar o valor padrão para este tutorial.

    Definição Valor Descrição
    Instâncias do motor 1 O número de motores de teste paralelos que executam o script Apache JMeter.

    Screenshot that shows the Load tab for creating a test.

  6. No separador Monitor, especifique os componentes de aplicação que pretende monitorizar com as métricas de recursos. Selecione Adicionar/modificar para gerir a lista de componentes de aplicação.

    Screenshot that shows the Monitoring tab for creating a test.

    Screenshot that shows how to add Azure resources to monitor during the load test.

    Screenshot that shows the Monitoring tab with the list of Azure resources to monitor.

  7. Selecione 'Rever + criar', rever todas as definições e selecione Criar.

    Screenshot that shows the tab for reviewing and creating a test.

Nota

Pode atualizar a configuração do teste a qualquer momento, por exemplo, para carregar um ficheiro JMX diferente. Escolha o seu teste na lista de testes e, em seguida, selecione Editar.

Fazer o teste de carga no portal do Azure

Nesta secção, utilizará o portal do Azure para iniciar manualmente o teste de carga que criou anteriormente. Se verificou o teste Run após a caixa de verificação da criação , o teste já estará em execução.

  1. Selecione Testes para visualizar a lista de testes e, em seguida, selecione o teste que criou.

    Screenshot that shows the list of tests.

    Dica

    Pode utilizar a caixa de pesquisa e o filtro de intervalo de tempo para limitar o número de testes.

  2. Na página de detalhes do teste, selecione Teste de Execução ou Execução. Em seguida, selecione Executar o painel de confirmação do teste de execução para iniciar o teste de carga.

    Screenshot that shows selections for running a test.

    O Azure Load Testing começa a monitorizar e a exibir as métricas do servidor da aplicação no painel de instrumentos.

    Pode ver as métricas do lado do cliente em streaming enquanto o teste está em execução. Por predefinição, os resultados atualizam-se automaticamente a cada cinco segundos.

    Screenshot that shows the dashboard with test results.

    Pode aplicar vários filtros ou agregar os resultados a percentíltipos diferentes para personalizar as tabelas.

    Dica

    Pode parar um teste de carga a qualquer momento a partir do portal do Azure selecionando Stop.

Aguarde até que o teste de carga termine completamente antes de avançar para a secção seguinte.

Identificar estrangulamentos de desempenho

Nesta secção, irá analisar os resultados do teste de carga para identificar estrangulamentos de desempenho na aplicação. Examine as métricas do lado do cliente e do servidor para determinar a causa do problema.

  1. Primeiro, olhe para as métricas do lado do cliente. Você vai notar que o percentil 90 para a métrica do tempo de resposta para os add pedidos e get API é maior do que é para a lasttimestamp API.

    Screenshot that shows the client-side metrics.

    Pode ver um padrão semelhante para Erros, onde a lasttimestamp API tem menos erros do que as outras APIs.

    Screenshot that shows the error chart.

    Os resultados das add APIs e get apis são semelhantes, enquanto a lasttimestamp API se comporta de forma diferente. A causa pode estar relacionada com base de dados, porque tanto as APIs como as APIs envolvem o addget acesso à base de dados.

  2. Para investigar este estrangulamento com mais detalhes, desloque-se até à secção do painel de instrumentos do lado do Servidor .

    As métricas do lado do servidor mostram informações detalhadas sobre os seus componentes de aplicação Azure: Serviço de Aplicações do Azure plano, Serviço de Aplicações do Azure web app e Azure Cosmos DB.

    Screenshot that shows the Azure App Service plan metrics.

    Nas métricas do plano Serviço de Aplicações do Azure, pode ver-se que as métricas da Percentagem de CPU e da Percentagem de Memória estão dentro de um intervalo aceitável.

  3. Agora, olhe para as métricas do servidor Azure Cosmos DB.

    Screenshot that shows Azure Cosmos DB metrics.

    Note-se que a métrica de consumo de RU normalizada mostra que a base de dados estava rapidamente a funcionar a 100% de utilização de recursos. O uso elevado de recursos pode ter causado erros de estrangulamento na base de dados. Também pode ter aumentado os tempos de resposta para as add APIs e get web.

    Você também pode ver que a métrica de produção provisão para a instância DB Azure Cosmos tem uma produção máxima de 400 RUs. Aumentar o rendimento previsto da base de dados pode resolver o problema de desempenho.

Aumentar a produção da base de dados

Nesta secção, irá alocar mais recursos à base de dados, para resolver o estrangulamento de desempenho.

Para a Azure Cosmos DB, aumente a definição da escala RU da base de dados:

  1. Vá ao recurso DB da Azure Cosmos que aprovisionou como parte da implementação da aplicação da amostra.

  2. Selecione o separador Data Explorer.

    Screenshot that shows Data Explorer tab.

  3. Selecione Escala & Definições e atualize o valor de produção para 1200.

    Screenshot that shows the updated Azure Cosmos D B scale settings.

  4. Selecione Guardar para confirmar as alterações.

Validar as melhorias de desempenho

Agora que aumentou a produção da base de dados, recorda o teste de carga e verifique se os resultados melhoraram:

  1. No painel de controlo, selecione Rerun e, em seguida, selecione Rerun no painel de teste de Rerun .

    Screenshot that shows selections for running the load test.

    Você verá uma nova entrada de teste com uma coluna de estado que circula através dos estados de Provisionamento, Execução e Feito . A qualquer momento, selecione o teste para monitorizar como o teste de carga está a progredir.

  2. Após o acabamento do teste de carga, verifique os resultados do tempo de resposta e os resultados dos erros das métricas do lado do cliente.

  3. Verifique as métricas do lado do servidor para a Azure Cosmos DB e certifique-se de que o desempenho melhorou.

    Screenshot that shows the Azure Cosmos D B client-side metrics after update of the scale settings.

    O valor de consumo de RU normalizado Azure Cosmos está agora bem abaixo dos 100%.

Agora que alterou as definições de escala da base de dados, vê que:

  • O tempo de resposta para as APIs e get para as add APIs melhorou.
  • O consumo de RU normalizado permanece bem abaixo do limite.

Como resultado, o desempenho global da sua aplicação melhorou.

Limpar os recursos

Importante

Pode reutilizar o recurso Azure Load Testing que criou para outros tutoriais de Teste de Carga Azure e artigos de como fazer.

Se não planeia usar nenhum dos recursos que criou, elimine-os para que não incorre em mais acusações. Se implementou a aplicação da amostra num grupo de recursos diferente, é melhor repetir os seguintes passos.

Para eliminar recursos utilizando o portal do Azure:

  1. Selecione o botão de menu no canto superior esquerdo e, em seguida, selecione grupos de recursos.

  2. Na lista, selecione o grupo de recursos que criou.

  3. Selecione Eliminar grupo de recursos. Screenshot of the selections to delete a resource group in the Azure portal.

  4. Introduza o nome do grupo de recursos. Em seguida, selecione Eliminar.

Para eliminar recursos utilizando o CLI Azure, insira o seguinte comando:

az group delete --name <yourresourcegroup>

Lembre-se, a eliminação do grupo de recursos elimina todos os recursos dentro dele.

Passos seguintes

Avance para o próximo tutorial para aprender a configurar um fluxo de trabalho automatizado de testes de regressão utilizando Pipelines Azure ou GitHub Actions.