Planejamento básico para testes de carga - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Planejamento básico para testes de carga

Para determinar a ferramenta e a configuração corretas para o teste de carga, deixe claro por que você está executando o teste. As seguintes perguntas devem ser respondidas com o tipo certo de teste:

  • Quanta carga minha aplicação pode comportar?

  • Minha aplicação pode lidar com a carga X?

  • A minha aplicação pode aumentar ou reduzir a escala verticalmente?

  • O comportamento da minha aplicação se degrada com o tempo com uma quantidade X de carga?

  • Minha aplicação está funcionando? (Este não é um teste de carga típico, mas é possível usar ferramentas de teste de carga para determinar se a aplicação está funcionando conforme o esperado.)

Determinar a complexidade do teste

A complexidade do teste é determinada pelo nível de abrangência de sua avaliação. Ferramentas básicas, como Hey ou ab, podem executar solicitações em um único URI de aplicação. Essas ferramentas são as mais eficientes, mas testam apenas um aspecto da aplicação. Em alguns casos, isso pode ser suficiente. Por exemplo, se quiser testar a escalabilidade, basta fazer chamadas em um endpoint para infligir carga na dimensão que deseja testar. Por exemplo, a carga da CPU pode ser uma carga útil enorme ou um cálculo intensivo que gera carga sobre a CPU. Se seu sistema for distribuído, talvez queira invocar um endpoint que inicie um processo complexo e distribuído.

Em outros casos, talvez você precise do teste para realizar um comportamento complexo. Por exemplo, você precisa fazer login antes de iniciar um processo ou está testando um processo de pedido que inclui a seleção de um item e a realização da compra. Isso pode ser entendido como um cenário. Os cenários de teste exigem ferramentas de teste de carga mais complexas nas quais você pode moldar a workload para corresponder às situações da vida real. Isso produzirá resultados que você poderá usar para fazer afirmações sobre a performance que os usuários finais terão.

Testes complexos induzem mais carga no sistema de geração de carga. Para executar testes de carga, é necessário considerar não apenas a ferramenta, mas também o sistema que executa a ferramenta, sendo a CPU e a largura de banda da rede os aspectos mais importantes. Um sistema de computador de teste de carga mal projetado pode produzir resultados errados. Por exemplo, uma única máquina não será suficiente para criar carga para um destino com boa performance. Nesse caso, é necessário configurar um teste de carga distribuído. Por outro lado, uma ferramenta com boa performance pode criar mais carga com um único servidor. Isso será abordado com mais profundidade na discussão da configuração do teste.

Medição e configuração

A representatividade do ambiente de teste deve ser considerada. Se você administra um grande site de compras, com milhares de servidores, pode ser difícil testar a produção sem afetar os usuários finais ou criar um ambiente de teste que replique o tamanho do site. Além disso, criar tráfego suficiente para estressar o sistema com essa escala também requer uma configuração sofisticada de teste de carga. Por esse motivo, os testes de carga geralmente são executados em configurações menores e comparáveis que você pode usar para traçar suposições sobre o ambiente de produção. Testes que estabelecem linhas de base ou requisitos funcionais podem ser executados em ambientes de produção.

É uma boa prática documentar ambientes de teste para testes subsequentes para que haja uma especificação bem definida que mostre quais resultados esperar para qual tamanho do ambiente-alvo.

Considere todos os elementos da infraestrutura afetados pelo teste de carga. Embora o teste geralmente examine a CPU e a memória dos hosts, há outros efeitos colaterais que devem ser considerados.

Um efeito colateral típico é que a largura de banda da rede para comunicação entre seus serviços pode atingir os limites. Para serviços conectados pela Internet ou para sistemas distribuídos, a comunicação geralmente é baseada em uma rede. Usar um teste de carga que cria estresse na aplicação também criará estresse na infraestrutura de rede subjacente.

Modelagem de carga e testes incrementais

Para testes diferentes, é possível modelar a quantidade de carga produzida ao longo do teste. Uma maneira básica de fazer isso é criar uma progressão incremental que aumentará gradualmente a carga ao longo do tempo. Isso criará pontos de dados distintos para cada etapa, o que permite chegar a conclusões mais detalhadas com uma única execução de teste. Para encontrar um limite que seja relevante para sua aplicação, é uma boa prática iniciar o teste com uma carga abaixo do uso normal em que uma performance maior é esperada. Ao aumentar gradualmente a carga, você verá o limite em que a performance da aplicação está se degradando. Os resultados mostrarão se o comportamento esperado ainda é válido e se a aplicação se comporta conforme o esperado em situações de falha. Por exemplo, ao testar acima do limite, é possível esperar que a aplicação distribua a carga.

Usando ferramentas complexas, é possível definir um padrão como configuração para seu teste. Isso definirá quanta carga será produzida por um período e como ela aumentará ou diminuirá.

A maioria das ferramentas básicas são ferramentas de linha de comando que exigem que você mesmo crie o script de uma solução. Ao escrever seus próprios scripts, certifique-se de não sobrescrever acidentalmente as métricas que deseja manter. Os arquivos de saída devem ter novos sufixos para cada iteração para que os resultados da iteração anterior não sejam sobrescritos.