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 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 Microsoft Pré-Visualizações Azure.
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.
- Versão Azure CLI 2.2.0 ou posterior. Corra
az --version
para encontrar a versão que está instalada no seu computador. Se precisar de instalar ou atualizar o Azure CLI, consulte como instalar o Azure CLI. - Visual Studio Code. Se não o tiver, faça o download e instale-o.
- Git. Se não o tiver, faça o download e instale-o.
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.
Abra Windows PowerShell, inscreva-se no Azure e descreva a subscrição:
az login az account set --subscription <your-Azure-Subscription-ID>
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.
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
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.
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.Para ver os componentes da aplicação, inscreva-se no portal do Azure e vá ao grupo de recursos que criou.
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ções 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:
Inscreva-se no portal do Azure utilizando as credenciais para a sua subscrição Azure.
Selecione o botão de menu no canto superior esquerdo do portal e, em seguida, selecione + Crie um recurso.
Utilize a barra de pesquisa para encontrar o Azure Load Testing.
Selecione testes de carga Azure.
No painel de testes de carga Azure , selecione Criar.
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.
Depois de terminar de configurar o recurso, selecione Review + Create.
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.
Para visualizar o novo recurso, selecione Ir para o recurso.
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.
Criar um teste de carga
Para criar um teste de carga no recurso de teste de carga para a aplicação da amostra:
Vá ao recurso de teste de carga e selecione Criar um novo teste na barra de comando.
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.
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.
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.
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 ohttps://
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.
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. 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.
Selecione 'Rever + criar', rever todas as definições e selecione Criar.
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.
Selecione Testes para visualizar a lista de testes e, em seguida, selecione o teste que criou.
Dica
Pode utilizar a caixa de pesquisa e o filtro de intervalo de tempo para limitar o número de testes.
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.
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.
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.
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 eget
API é maior do que é para alasttimestamp
API.Pode ver um padrão semelhante para Erros, onde a
lasttimestamp
API tem menos erros do que as outras APIs.Os resultados das
add
APIs eget
apis são semelhantes, enquanto alasttimestamp
API se comporta de forma diferente. A causa pode estar relacionada com base de dados, porque tanto as APIs como as APIs envolvem oadd
get
acesso à base de dados.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.
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.
Agora, olhe para as métricas do servidor Azure Cosmos DB.
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 eget
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:
Vá ao recurso DB da Azure Cosmos que aprovisionou como parte da implementação da aplicação da amostra.
Selecione o separador Data Explorer.
Selecione Definições de Escala &e atualize o valor de produção para 1200.
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:
No painel de controlo, selecione Rerun e, em seguida, selecione Rerun no painel de teste de Rerun .
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.
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.
Verifique as métricas do lado do servidor para a Azure Cosmos DB e certifique-se de que o desempenho melhorou.
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 asadd
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:
Selecione o botão de menu no canto superior esquerdo e, em seguida, selecione grupos de recursos.
Na lista, selecione o grupo de recursos que criou.
Selecione Eliminar grupo de recursos.
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.