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 a versão prévia do Teste de Carga do Azure. Você criará um teste de carga para um aplicativo Node.js de exemplo.
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.
Saiba mais sobre os principais conceitos para o Teste de Carga do Azure.
Neste tutorial, você aprenderá como:
- Implantar o aplicativo de exemplo.
- Criar e executar um teste de carga.
- Identificar gargalos de desempenho no aplicativo.
- Remover um gargalo.
- Executar novamente o teste de carga para verificar as melhorias de desempenho.
Importante
O Teste de Carga do Azure está em versão prévia. Para os termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral, confira os Termos de Uso Complementares para Versões Prévias do Microsoft Azure.
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.
- CLI do Azure, versão 2.2.0 ou posterior. Execute
az --version
para localizar a versão que está instalada em seu 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.
Implantar o aplicativo de exemplo
Antes de poder fazer o teste de carga no aplicativo de exemplo, você precisa implantá-lo e executá-lo. Use comandos da CLI do Azure, do Git e do PowerShell para fazer isso.
Abra o Windows PowerShell, entre no Azure e defina a assinatura:
az login az account set --subscription <your-Azure-Subscription-ID>
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.
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
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.
Depois de concluir a implantação, acesse o aplicativo de exemplo em execução abrindo
https://<yourappname>.azurewebsites.net
em uma janela do navegador.Para ver os componentes do aplicativo, entre no portal do Azure e acesse o grupo de recursos criado.
Agora que o aplicativo está implantado e em execução, você pode executar o primeiro teste de carga nele.
Configurar e criar o teste de carga
Nesta seção, você criará um teste de carga usando um script de teste Apache JMeter de exemplo.
O repositório de origem do aplicativo de exemplo inclui um script Apache JMeter chamado SampleApp.jmx. Esse script executa três chamadas à API ao aplicativo Web em cada iteração de teste:
add
: executa uma operação de inserção de dados no Azure Cosmos DB para o número de visitantes no aplicativo Web.get
: executa uma operação GET do Azure Cosmos DB para recuperar a contagem.lasttimestamp
: atualiza o carimbo de data/hora desde que o último usuário entrou no site.
Observação
O script Apache JMeter de exemplo requer dois plug-ins: Custom Thread Groups
e Throughput Shaping Timer
. Para abrir o script na instância local do Apache JMeter, você precisa instalar os dois plug-ins. Para isso, você pode usar o Gerenciador de plug-ins do Apache JMeter.
Criar o recurso de Teste de Carga do Azure
O Teste de Carga é um recurso de nível superior para suas atividades de teste de carga. Esse recurso fornece um local centralizado para exibir e gerenciar testes de carga, resultados de teste e artefatos relacionados.
Se você já tem um recurso de Teste de Carga, ignore esta seção e prossiga para Criar um teste de carga.
Se você ainda não tem um recurso de Teste de Carga, crie um agora:
Entre no portal do Microsoft Azure usando as credenciais de assinatura do Azure.
Clique no botão de menu no canto superior esquerdo do portal e selecione + Criar um recurso.
Use a barra de pesquisa para localizar Teste de Carga do Azure.
Selecione Teste de carga do Azure.
No painel Teste de Carga do Azure, selecione Criar.
Forneça as informações a seguir para configurar seu novo recurso do Teste de Carga do Azure:
Campo Descrição Assinatura Selecione a assinatura do Azure que deseja usar para esse recurso de Teste de Carga do Azure. Grupo de recursos Selecione um grupo de recursos existente. Ou selecione Criar e insira um nome exclusivo para o novo grupo de recursos. Nome Insira um nome exclusivo para identificar o recurso de Teste de Carga do Azure.
O nome não pode conter caracteres especiais, como \/""[]:|<>+=;,?*@& nem espaços em branco. O nome não pode começar com um sublinhado (_) e não pode terminar com um ponto (.) ou um traço (-). O comprimento deve ser entre 1 e 64 caracteres.Localidade Selecione um local geográfico para hospedar o recurso de Teste de Carga do Azure.
Esse local também determina onde os mecanismos de teste são hospedados e de onde as solicitações do cliente JMeter originam.Observação
Você também pode configurar mais detalhes na guia Marcas. As marcas são pares nome/valor que permitem categorizar recursos e exibir a cobrança consolidada por meio da aplicação da mesma marca a vários recursos e grupos de recursos.
Depois de concluir a configuração do recurso, clique em Examinar + Criar.
Examine todas as definições e selecione Criar para iniciar a implantação do recurso de Teste de Carga do Azure.
Quando o processo for finalizado, será exibida uma mensagem de êxito da implantação.
Para exibir o novo recurso, selecione Ir para o recurso.
Opcionalmente, gerencie o acesso ao recurso do Teste de Carga do Azure.
O Teste de Carga do Azure usa o RBAC (controle de acesso baseado em função) para gerenciar permissões para seu recurso. Se você encontrar essa mensagem, sua conta não terá as permissões necessárias para gerenciar testes.
Criar um teste de carga
Para criar um teste de carga no recurso de Teste de Carga do aplicativo de exemplo:
Acesse o recurso Teste de Carga e selecione Criar novo teste na barra de comandos.
Na guia Básico, insira o Nome do teste e as informações de Descrição do teste. Como opção, você pode selecionar a caixa Executar teste após a criação para iniciar o teste de carga automaticamente depois de criá-lo.
Na guia Plano de teste, selecione o método de teste Script do JMeter e o script de teste SampleApp.jmx do diretório do aplicativo de exemplo clonado. Depois, selecione Carregar para carregar o arquivo no Azure e configurar o teste de carga.
Como opção, você pode selecionar e carregar arquivos de configuração adicionais do Apache JMeter ou outros arquivos referenciados no arquivo JMX. Por exemplo, se o script de teste usar conjuntos de dados CSV, você poderá carregar os arquivos .csv correspondentes.
Na guia Parâmetros, adicione uma nova variável de ambiente. Insira webapp no Nome e no Valor. Substitua o texto do espaço reservado
<yourappname>
pelo nome do aplicativo de exemplo recém-implantado. Não inclua o prefixohttps://
.O script de teste do Apache JMeter usa a variável de ambiente para recuperar a URL do aplicativo Web. Em seguida, o script invocará as três APIs no aplicativo Web.
Na guia Carga, configure os detalhes a seguir. Para este tutorial, você pode usar o valor padrão.
Configuração Valor Descrição Instâncias de mecanismo 1 O número de mecanismos de teste paralelos que executam o script Apache JMeter. Na guia Monitoramento, especifique os componentes do aplicativo que deseja monitorar com as métricas de recurso. Selecione Adicionar/modificar para gerenciar a lista de componentes de aplicativos.
Selecione Examinar + criar, examine todas as configurações e selecione Criar.
Observação
Você pode atualizar a configuração de teste a qualquer momento, por exemplo, para carregar um arquivo JMX diferente. Escolha o teste na lista de testes e, em seguida, selecione Editar.
Executar o teste de carga no portal do Azure
Nesta seção, você usará o portal do Azure para iniciar manualmente o teste de carga criado anteriormente. Caso tenha marcado a caixa Executar teste após a criação, o teste já estará em execução.
Selecione Testes para exibir a lista de testes e escolha aquele que você criou.
Dica
Você pode usar a caixa de pesquisa e o filtro Intervalo de tempo para limitar o número de testes.
Na página que mostra os detalhes do teste, selecione Executarou Executar teste.
Selecione Executar na página de resumo da execução para iniciar o teste de carga. Você verá a lista de execuções de teste.
O Teste de Carga do Azure começa a monitorar e exibir as métricas do servidor do aplicativo no painel.
Você pode ver a transmissão das métricas do lado do cliente enquanto o teste está em execução. Por padrão, os resultados são atualizados automaticamente a cada cinco segundos.
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.
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.
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 e
get
é maior do que para a APIlasttimestamp
.Você pode ver um padrão semelhante para Erros, em que a API tem menos erros do que as outras.
Os resultados das APIs
add
eget
são semelhantes, enquanto a APIlasttimestamp
se comporta de maneira diferente. A causa pode estar relacionada ao banco de dados, porque as APIsadd
eget
envolvem acesso ao banco de dados.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.
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.
Agora, analise métricas do lado do servidor 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 ter causado erros de limitação do banco de dados. Isso também pode ter aumentado os tempos de resposta para as APIs Web
add
eget
.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:
Vá para o recurso do Azure Cosmos DB que você provisionou como parte da implantação do aplicativo de exemplo.
Selecione a guia Data Explorer.
Selecione Escala Configurações e atualize o valor da taxa de transferência para 1200.
Selecione Salvar para confirmar as alterações.
Validar as melhorias de desempenho
Agora que aumentou a taxa de transferência do banco de dados, execute novamente o teste de carga e verificará se os resultados do desempenho melhoraram:
Retorne à página que mostra os detalhes da execução de teste e selecione Executar novamente. Depois selecione Executar na página de resumo da execução.
Você verá uma nova entrada de execução de teste com uma coluna status que percorre em ciclos os estados de Provisionando, Executando e Concluído. A qualquer momento, selecione a execução de teste para monitorar como o teste de carga está progredindo.
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.
Verifique as métricas do lado do servidor para o Azure Cosmos DB e verifique se o desempenho melhorou.
O Consumo de RU Normalizado do Azure Cosmos DB agora está bem abaixo de 100%.
Agora que você alterou as configurações de escala do banco de dados, verá que:
- O tempo de resposta das APIs
add
eget
melhorou. - O consumo de RU normalizado permanece bem abaixo do limite.
Como resultado, o desempenho geral do 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:
Clique no botão de menu no canto superior esquerdo e selecione Grupos de recursos.
Selecione o grupo de recursos que você criou por meio da lista.
Selecione Excluir grupo de recursos.
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.
Próximas etapas
Avance para o próximo tutorial para saber como configurar um fluxo de trabalho de teste de regressão automatizado usando o Azure Pipelines ou o GitHub Actions.