Compartilhar via


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ê simulará a carga para um exemplo de aplicativo Web Node.js e, em seguida, usará o painel do teste de carga para analisar as métricas do lado do cliente e do servidor.

O aplicativo de exemplo é composto por uma API Web do Node.js que interage com um banco de dados NoSQL. Você implantará a API Web em aplicativos Web do Serviço de Aplicativo do Azure e usará o Azure Cosmos DB como o banco de dados.

Neste tutorial, você aprenderá como:

  • Implantar o aplicativo de exemplo.
  • Criar e executar um teste de carga.
  • Adicionar componentes do aplicativo do Azure ao teste de carga.
  • Identificar gargalos de desempenho usando o painel de teste de carga.

Pré-requisitos

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

Verificação de Pré-requisitos

Antes de começar, valide seu ambiente:

Implantar o aplicativo de exemplo

Neste tutorial, você vai gerar uma carga em um aplicativo Web de exemplo implantado no Serviço de Aplicativo do Azure. Use os comandos da CLI do Azure, os comandos do Git e os comandos do PowerShell para implantar o aplicativo de exemplo na 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 de um componente Web de 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. Acesse 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
    

    Dica

    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:

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

    Importante

    Use apenas letras minúsculas e números no nome do aplicativo Web. Não use espaços nem caracteres especiais.

  5. Depois de concluir a implantação, acesse o aplicativo de exemplo em execução abrindo https://<yourappname>.azurewebsites.net em uma janela do navegador.

Agora que o aplicativo de exemplo está implantado e em execução, você poderá criar um recurso do Teste de Carga do Azure e um teste de carga.

Criar um teste de carga

Neste tutorial, você vai criar um teste de carga com a CLI do Azure carregando um script de teste JMeter (arquivo jmx). 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 descritas no Início Rápido: Criar um teste de carga com um script JMeter.

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

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

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

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. Crie um grupo de recursos para o recurso do 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 para texto <load-testing-resource-group-name> pelo nome do grupo de recursos.

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

    Substitua o espaço reservado para texto <load-testing-resource-name> pelo nome do recurso do teste de 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 no aplicativo de exemplo com o comando az load test create.

    Substitua o espaço reservado para texto <web-app-hostname> pelo nome do host do Serviço de Aplicativo do aplicativo de exemplo. Esse valor está no formato myapp.azurewebsites.net. Não inclua a parte https:// da 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
    

    Esse comando usa o arquivo de configuração do teste de carga Sampleapp.yaml, que referencia o script de teste JMeter SampleApp.jmx. Use um parâmetro de linha de comando para transmitir o nome do host do aplicativo de exemplo para o teste de carga.

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

Adicionar componentes do aplicativo do Azure para monitorar o aplicativo

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

Neste tutorial, você vai adicionar os componentes do Azure ao aplicativo de exemplo implantado no Azure, como o Serviço de Aplicativo, a conta do Cosmos DB e outros.

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

  1. No portal do Azure, acesse seu recurso de teste de carga do Azure.

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

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

    Captura de tela que mostra a lista de testes de carga no portal do Azure, destacando como selecionar um teste na lista e o botão Editar para modificar a configuração do teste de carga.

  4. Acesse a guia Monitoramento e selecione Adicionar/Modificar.

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

    Captura de tela que mostra como adicionar componentes de aplicativo a um teste de carga no portal do Azure.

    Dica

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

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

Você adicionou com sucesso os componentes do aplicativo do Azure para o aplicativo de exemplo ao teste de carga para habilitar o monitoramento de métricas do lado do servidor durante a execução do teste de carga.

Executar o teste de carga

Agora você poderá executar o teste de carga para simular a carga no aplicativo de exemplo implantado na sua assinatura do Azure. Neste tutorial, você executará o teste de carga no portal do Azure. Como alternativa, você pode configurar o 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, acesse seu recurso de teste de carga do Azure.

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

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

  4. Selecione Executar e depois Executar novamente para iniciar o teste de carga.

    Opcionalmente, você poderá inserir uma descrição da execução de teste.

    Captura de tela que mostra como iniciar um teste de carga no portal do Azure.

    Quando você executa um teste de carga, o Teste de Carga do Azure implanta o script de teste JMeter e todos os arquivos extras nas instâncias do mecanismo de teste e, em seguida, inicia o teste de carga.

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

    Se o painel não for exibido, você poderá selecionar Atualizar e escolher a execução de teste na lista.

    O painel do 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 grafos no painel são atualizados automaticamente.

    Captura de tela que mostra os grafos de métricas do lado do cliente no painel do teste de carga no portal do Azure.

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

    Dica

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

Aguarde até que o teste de carga seja totalmente concluído antes de seguir para a próxima seção.

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

Nesta seção, você analisará 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, analise as métricas do lado do cliente. Você observará que o 90º percentil da métrica Tempo de resposta para as solicitações de API add e get é maior do que para a API lasttimestamp.

    Captura de tela que mostra as métricas do lado do cliente.

    Você pode ver um padrão semelhante para Erros, em que a API lasttimestamp tem menos erros do que as outras.

    Captura de tela que mostra o gráfico de erros.

    Os resultados das APIs add e get são semelhantes, enquanto a API lasttimestamp se comporta de maneira diferente. A causa pode estar relacionada ao banco de dados, porque as APIs add e get envolvem acesso ao banco de dados.

  2. Para investigar esse gargalo mais detalhadamente, role para baixo até a seção do painel Métricas do lado do servidor.

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

    Captura de tela que mostra as métricas do Plano do Serviço de Aplicativo do Azure.

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

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

    Captura de tela que mostra as métricas do Azure Cosmos DB.

    Note que a métrica Consumo de RU Normalizado mostra que o banco de dados estava sendo executado rapidamente, com utilização de recursos de 100%. O alto uso de recursos pode causar erros de limitação do banco de dados. Ele também pode aumentar os tempos de resposta para as APIs web add e get.

    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. É possível resolver o problema de desempenho aumentando a taxa de transferência provisionada do banco de dados.

Aumentar a taxa de transferência do banco de dados

Nesta seção, você alocará mais recursos ao banco de dados para resolver o gargalo de desempenho.

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

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

  2. Selecione a guia Data Explorer.

    Captura de tela que mostra a guia Data Explorer.

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

    Captura de tela que mostra as configurações de escala atualizadas do Azure Cosmos DB.

  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 foram aprimorados:

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

    Captura de tela que mostra as seleções para a execução do teste de carga.

    Você poderá ver uma nova entrada de execução de teste com uma coluna de status que percorre os estados Em provisionamento, Em 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 de Erros nas métricas do lado do cliente.

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

    Captura de tela que mostra as métricas do lado do cliente do Azure Cosmos DB, após a atualização das configurações de escala.

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

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

  • O tempo de resposta das APIs add e get foi aprimorado.
  • O consumo de RU normalizado permanece bem abaixo do limite.

Como resultado, o desempenho geral do seu aplicativo foi aprimorado.

Limpar os recursos

Importante

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

Se você não pretende usar nenhum dos recursos criados, exclua-os para não gerar custos. Se você implantou o aplicativo de exemplo em um grupo de recursos diferente, talvez queira repetir as etapas a seguir.

Para excluir recursos usando o portal do Azure:

  1. Clique no botão de menu no canto superior esquerdo e selecione Grupos de recursos.

  2. Selecione o grupo de recursos que você criou por meio da lista.

  3. Selecione Excluir grupo de recursos. Captura de tela das seleções para excluir um grupo de recursos no portal do Azure.

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

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

az group delete --name <yourresourcegroup>

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