Tutorial: Executar um teste de carga para identificar gargalos de desempenho em um aplicativo Web

Neste tutorial, você aprenderá a identificar gargalos de desempenho em um aplicativo Web usando o Teste de Carga do Azure. Você simula a carga para um aplicativo Web .js nó de exemplo e, em seguida, usa o painel de teste de carga para analisar métricas do lado do cliente e do lado do servidor.

O aplicativo de exemplo consiste em uma API Web Node.js, que interage com um banco de dados NoSQL. Você implanta a API Web nos aplicativos Web do Serviço de Aplicativo do Azure e usa o Azure Cosmos DB como o banco de dados.

Neste tutorial, irá aprender a:

  • Implante o aplicativo de exemplo.
  • Crie e execute um teste de carga.
  • Adicione componentes do aplicativo do Azure ao teste de carga.
  • Identifique gargalos de desempenho usando o painel de teste de carga.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
  • A CLI do Azure instalada no seu computador local.
  • Azure CLI versão 2.2.0 ou posterior. Execute az --version para localizar a versão instalada no seu computador. Se você precisar instalar ou atualizar a CLI do Azure, consulte Como instalar a CLI do Azure.
  • Visual Studio Code. Se não o tiver, transfira-o e instale-o.
  • Git. Se não o tiver, transfira-o e instale-o.

Verificação de pré-requisitos

Antes de começar, valide seu ambiente:

  • Entre no portal do Azure e verifique se sua assinatura está ativa.

  • Verifique sua versão da CLI do Azure em um terminal ou janela de comando executando az --version. Para obter a versão mais recente, consulte as notas de versão mais recentes.

    Se não tiver a versão mais recente, atualize a instalação seguindo o guia de instalação do seu sistema operativo ou plataforma.

Implementar o exemplo de aplicação

Neste tutorial, você está gerando carga em um aplicativo Web de exemplo que implanta no Serviço de Aplicativo do Azure. Use os comandos da CLI do Azure, os comandos Git e os comandos do PowerShell para implantar o aplicativo de exemplo em sua assinatura do Azure.

  1. Abra o Windows PowerShell, entre no Azure e defina a assinatura:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. Clone o repositório de origem do aplicativo de exemplo:

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

    O aplicativo de exemplo é um aplicativo Node.js que consiste em um componente Web do Serviço de Aplicativo do Azure e um banco de dados do Azure Cosmos DB. O repositório inclui um script do PowerShell que implanta o aplicativo de exemplo em sua assinatura do Azure. Ele também tem um script Apache JMeter que você usará em etapas posteriores.

  3. Vá para o diretório do aplicativo Node.js e implante o aplicativo de exemplo usando este script do PowerShell:

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

    Gorjeta

    Você pode instalar o PowerShell no Linux/WSL ou macOS.

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

  4. No prompt, forneça:

    • O seu ID de subscrição do Azure.
    • Um nome exclusivo para seu aplicativo Web.
    • Um local. Por padrão, o local é eastus. Você pode obter códigos de região executando o comando Get-AzLocation .

    Importante

    Para o nome do seu aplicativo Web, use apenas letras minúsculas e números. Não use espaços ou caracteres especiais.

  5. Após a conclusão da implantação, vá para o aplicativo de exemplo em execução abrindo https://<yourappname>.azurewebsites.net em uma janela do navegador.

Agora que você tem o aplicativo de exemplo implantado e em execução, você pode criar um recurso de teste de carga do Azure e um teste de carga.

Criar um teste de carga

Neste tutorial, você está criando um teste de carga com a CLI do Azure carregando um script de teste JMeter (jmx arquivo). O repositório de aplicativos de exemplo já contém um arquivo de configuração de teste de carga e um script de teste JMeter.

Para criar um teste de carga usando o portal do Azure, siga as etapas em Guia de início rápido: criar um teste de carga com um script JMeter.

Siga estas etapas para criar um recurso de teste de carga do Azure e um teste de carga usando a CLI do Azure:

  1. Abra uma janela do terminal e insira o seguinte comando para entrar na sua assinatura do Azure.

    az login
    
  2. Vá para o diretório de aplicativo de exemplo.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. Crie um grupo de recursos para o recurso de teste de carga do Azure.

    Opcionalmente, você também pode reutilizar o grupo de recursos do aplicativo de exemplo implantado anteriormente.

    Substitua o espaço reservado de texto pelo nome do grupo de <load-testing-resource-group-name> recursos.

    resourceGroup="<load-testing-resource-group-name>"
    location="East US"
    
    az group create --name $resourceGroup --location $location
    
  4. Crie um recurso de teste de carga do Azure com o az load create comando.

    Substitua o espaço reservado de texto pelo nome do recurso de teste de <load-testing-resource-name> carga.

    # This script requires the following Azure CLI extensions:
    # - load
    
    loadTestResource="<load-testing-resource-name>"
    
    az load create --name $loadTestResource --resource-group $resourceGroup --location $location
    
  5. Crie um teste de carga para simular a carga em relação ao seu aplicativo de exemplo com o az load test create comando.

    Substitua o espaço reservado de texto pelo nome de <web-app-hostname> host do Serviço de Aplicativo do aplicativo de exemplo. Este valor é da forma myapp.azurewebsites.net. Não inclua a https:// parte do URL.

    testId="sample-app-test"
    webappHostname="<web-app-hostname>"
    
    az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
    

    Este comando usa o arquivo de configuração de teste de carga, que faz referência ao script de Sampleapp.yamlSampleApp.jmx teste JMeter. Você usa um parâmetro de linha de comando para passar o nome do host do aplicativo de exemplo para o teste de carga.

Agora você tem um recurso de teste de carga do Azure e um teste de carga para gerar carga no aplicativo Web de exemplo em sua assinatura do Azure.

Adicionar componentes do aplicativo do Azure para monitorar o aplicativo

O Teste de Carga do Azure permite monitorar métricas de recursos para os componentes do Azure do seu aplicativo. Ao analisar essas métricas do lado do servidor, você pode identificar problemas de desempenho e estabilidade em seu aplicativo diretamente do painel de Teste de Carga do Azure.

Neste tutorial, você adiciona os componentes do Azure para o aplicativo de exemplo implantado no Azure, como o serviço de aplicativo, a conta do Cosmos DB e muito mais.

Para adicionar os componentes do aplicativo do Azure para o aplicativo de exemplo ao seu teste de carga:

  1. No portal do Azure, vá para seu recurso de teste de carga do Azure.

  2. No painel esquerdo, selecione Testes para exibir a lista de testes de carga

  3. Marque a caixa de seleção ao lado do teste de carga e selecione Editar.

    Screenshot that shows the list of load tests in the Azure portal, highlighting how to select a test from the list and the Edit button to modify the load test configuration.

  4. Vá para a guia Monitoramento e selecione Adicionar/Modificar.

  5. Marque as caixas de seleção do aplicativo de exemplo implantado anteriormente e selecione Aplicar.

    Screenshot that shows how to add app components to a load test in the Azure portal.

    Gorjeta

    Você pode usar o filtro de grupo de recursos para exibir apenas os recursos do Azure no grupo de recursos de aplicativo de exemplo.

  6. Selecione Aplicar para salvar as alterações na configuração de teste de carga.

Você adicionou com êxito os componentes do aplicativo do Azure para o aplicativo de exemplo ao seu teste de carga para habilitar o monitoramento de métricas do lado do servidor enquanto o teste de carga está em execução.

Executar o teste de carga

Agora você pode executar o teste de carga para simular a carga em relação ao aplicativo de exemplo implantado em sua assinatura do Azure. Neste tutorial, você executa o teste de carga de dentro do portal do Azure. Como alternativa, você pode configurar seu fluxo de trabalho de CI/CD para executar o teste de carga.

Para executar o teste de carga no portal do Azure:

  1. No portal do Azure, vá para seu recurso de teste de carga do Azure.

  2. No painel esquerdo, selecione Testes para exibir a lista de testes de carga

  3. Selecione o teste de carga na lista para exibir os detalhes do teste e a lista de execuções de teste.

  4. Selecione Executar e, em seguida, Executar novamente para iniciar o teste de carga.

    Opcionalmente, você pode inserir uma descrição de execução de teste.

    Screenshot that shows how to start a load test in the Azure portal.

    Quando você executa um teste de carga, o Teste de Carga do Azure implanta o script de teste JMeter e quaisquer arquivos extras na(s) instância(s) do mecanismo de teste e, em seguida, inicia o teste de carga.

  5. Quando o teste de carga for iniciado, você verá o painel de teste de carga.

    Se o painel não aparecer, você poderá selecionar Atualizar em e, em seguida, selecionar a execução de teste na lista.

    O painel de teste de carga apresenta os detalhes da execução de teste, como as métricas do lado do cliente e as métricas do aplicativo do lado do servidor. Os gráficos no painel são atualizados automaticamente.

    Screenshot that shows the client-side metrics graphs in the load test dashboard in the Azure portal.

    Você pode aplicar vários filtros ou agregar os resultados a percentis diferentes para personalizar os gráficos.

    Gorjeta

    Você pode interromper um teste de carga a qualquer momento no portal do Azure selecionando Parar.

Aguarde até que o teste de carga termine completamente antes de prosseguir para a próxima seção.

Use métricas do lado do servidor para identificar gargalos de desempenho

Nesta seção, você analisa os resultados do teste de carga para identificar gargalos de desempenho no aplicativo. Examine as métricas do lado do cliente e do lado do servidor para determinar a causa raiz do problema.

  1. Primeiro, observe as métricas do lado do cliente. Você percebe que o percentil 90 para a métrica de tempo de resposta para as add solicitações e get API é maior do que para a lasttimestamp API.

    Screenshot that shows the client-side metrics.

    Você 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 são semelhantes, enquanto a lasttimestamp API se comporta de forma diferente. A causa pode estar relacionada ao banco de dados, porque as APIs e get envolvem o acesso ao add banco de dados.

  2. Para investigar esse gargalo com mais detalhes, role para baixo até a seção Painel de métricas do lado do servidor.

    As métricas do lado do servidor mostram informações detalhadas sobre seus componentes de aplicativo do Azure: plano do Serviço de Aplicativo do Azure, aplicativo Web do Serviço de Aplicativo do Azure e Azure Cosmos DB.

    Screenshot that shows the Azure App Service plan metrics.

    Nas métricas do plano do Serviço de Aplicativo do Azure, você pode ver que as métricas de Porcentagem de CPU e Porcentagem de Memória estão dentro de um intervalo aceitável.

  3. Agora, veja as métricas do lado do servidor do Azure Cosmos DB.

    Screenshot that shows Azure Cosmos DB metrics.

    Observe que a métrica Consumo de RU normalizado mostra que o banco de dados estava sendo executado rapidamente com 100% de utilização de recursos. O alto uso de recursos pode causar erros de limitação do banco de dados. Também pode aumentar os tempos de resposta para as add APIs da Web e get da Web.

    Você também pode ver que a métrica Taxa de Transferência Provisionada para a instância do Azure Cosmos DB tem uma taxa de transferência máxima de 400 RUs. Aumentar a taxa de transferência provisionada do banco de dados pode resolver o problema de desempenho.

Aumentar a taxa de transferência do banco de dados

Nesta seção, você aloca mais recursos ao banco de dados para resolver o afunilamento de desempenho.

Para o Azure Cosmos DB, aumente a configuração da escala RU do banco de dados:

  1. Vá para o recurso do Azure Cosmos DB que você provisionou como parte da implantação de aplicativo de exemplo.

  2. Selecione a guia Data Explorer .

    Screenshot that shows Data Explorer tab.

  3. Selecione Dimensionar & Configurações e atualize o valor da taxa de transferência para 1200.

    Screenshot that shows the updated Azure Cosmos DB scale settings.

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

Validar as melhorias de desempenho

Agora que você aumentou a taxa de transferência do banco de dados, execute novamente o teste de carga e verifique se os resultados de desempenho melhoraram:

  1. No painel de execução de teste, selecione Executar novamente e, em seguida, selecione Executar novamente no painel de teste Executar novamente.

    Screenshot that shows selections for running the load test.

    Você pode ver uma nova entrada de execução de teste com uma coluna de status que percorre os estados Provisionamento, Execução e Concluído . A qualquer momento, selecione a execução de teste para monitorar como o teste de carga está progredindo.

  2. Após a conclusão do teste de carga, verifique os resultados de Tempo de resposta e os resultados de Erros das métricas do lado do cliente.

  3. Verifique as métricas do lado do servidor do Azure Cosmos DB e verifique se o desempenho melhorou.

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

    O valor de Consumo de RU Normalizado do Azure Cosmos DB está agora bem abaixo de 100%.

Agora que você atualizou as configurações de escala do banco de dados, você pode ver que:

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

Como resultado, o desempenho geral do seu aplicativo melhorou.

Clean up resources (Limpar recursos)

Importante

Você pode reutilizar o recurso de Teste de Carga do Azure que criou para outros tutoriais e artigos de instruções do Teste de Carga do Azure.

Se você não planeja usar nenhum dos recursos que criou, exclua-os para não incorrer em mais cobranças. Se você implantou o aplicativo de exemplo em um grupo de recursos diferente, convém repetir as etapas a seguir.

Para excluir recursos usando 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 você criou.

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

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

Para excluir recursos usando a CLI do Azure, digite o seguinte comando:

az group delete --name <yourresourcegroup>

Lembre-se, excluir o grupo de recursos exclui todos os recursos dentro dele.