O blog da AWS
Garanta o desempenho ideal da aplicação com o Distributed Load Testing na AWS
Por Ajay Swamy, Senior Product Lead na AWS e
George Lenz, Solution Developer na AWS
Como uma empresa que utiliza soluções modernas, seus clientes esperam 100% de disponibilidade de suas aplicações críticas, tanto web quanto mobile. Eventos imprevisíveis como o COVID-19 fizeram com que compromissos se tornassem virtuais. Isso fez com que as aplicações mobile e web se tornassem ainda mais críticas.
Distributed Load Testing na AWS (DLT) te ajuda a automatizar os testes de performance das suas aplicações em escala. Dessa forma, é possível identificar gargalos antes de lançar sua aplicação. A solução suporta testes agendados e concorrentes, e lida com um grande número de usuários simultâneos que podem gerar muitos requests por segundo. Também é fornecido relatório em tempo real. Com o DLT, você consegue simular milhares de usuários se conectando a sua aplicação para que você consiga entender melhor o perfil de performance da mesma.
Empresas que testam a performance do seu website conseguem obter grandes benefícios com a solução. Elas conseguem utilizar testes padrões, como simples requests GET, ou utilizar scripts JMETER para criar testes customizados. DLT utiliza um template do AWS CloudFormation para fazer o deploy da aplicação em minutos. A solução utiliza Taurus, um framework de teste de carga open-source para automatizar os testes.
DLT fornece um console web intuitivo onde você pode criar e atualizar testes, ou agendar testes futuros. Como parte dos parâmetros de testes, você consegue definir o número de tarefas lançadas e o número de usuários simultâneos acessando o endpoint por tarefa. Também é possível definir o intervalo de incrementos e o tempo ativo de execução concorrente. Você pode escolher criar um simples teste em um endpoint HTTP, ou pode utilizar um script JMeter customizado. Quando o teste é criado, você consegue submeter seu job para rodar os testes.
Arquitetura DLT
Implementar esta solução com os parâmetros padrões constrói o seguinte ambiente na Nuvem AWS:
O DLT utiliza os seguintes serviços da AWS:
- Amazon API Gateway para gerenciar APIs
- AWS Lambda para gerenciar os microsserviços com a lógica de negócio
- Amazon Simple Storage Service (Amazon S3) para fazer o host do site estático, armazenar cenários de teste e armazenar os resultados dos testes de carga
- Amazon DynamoDB para armazenar cenários de teste e resultados dos testes correspondentes
- Amazon Elastic Container Registry para armazenar a imagem Docker com o framework de teste de carga Taurus
- Amazon Elastic Container Service com tarefas AWS Fargate para rodar os testes de carga
- AWS CodePipeline e AWS CodeBuild para recuperar e construir a imagem do Taurus
- AWS Amplify para gerenciar a interface de usuário web usada na solução
- Amazon Cognito para autenticar e gerenciar usuários
- Amazon CloudWatch Events para gerenciar testes agendados e mostrar resultados de testes
- AWS Secrets Manager (opcional) para utilizar as credenciais do Docker Hub para superar os limites de taxa do Docker Hub.
Execução e monitoramento de testes com DLT
Depois de iniciar o job, a requisição é enviada ao Amazon API Gateway. Isso invoca funções do AWS Lambda que gerenciam e armazenam dados de teste no Amazon S3 e no Amazon DynamoDB. As funções do AWS Lambda também iniciam a máquina de estado no AWS Step Functions, que então inicia a implantação de tasks do AWS Fargate. As tasks recuperam um arquivo contendo uma imagem Docker no Amazon S3 e criam uma imagem no Amazon ECR contendo o software Taurus. Cada task executa o teste com base nos parâmetros configurados no job e no cenário de teste.
O DLT permite que todos os testes iniciem simultaneamente. O endpoint de teste recebe tráfego ao mesmo tempo, o que simula cenários do mundo real.
A solução também apresenta uma funcionalidade de agendamento por meio de uma regra do Amazon CloudWatch Events (aka Amazon EventBridge) que pode executar testes diários, semanais, quinzenais ou mensais. A solução DLT também permite que você visualize como os testes estão progredindo em tempo real, por meio de um dashboard do Amazon CloudWatch. Este dashboard mostra o tempo médio de resposta, o número de usuários simultâneos, o número de solicitações bem-sucedidas e as solicitações com falha. Conforme os testes individuais são concluídos, os resultados são armazenados no Amazon S3. Quando o job é finalizado, os resultados agregados são calculados e armazenados em uma tabela do Amazon DynamoDB. Os resultados serão então visualizados no console web da solução.
Conclusão
Quer você represente uma empresa privada que fornece telemedicina ou um serviço do setor público, como um tribunal virtual, você precisa estar confiante de que sua aplicação possa escalar para atender o aumento da demanda de usuários. O teste de carga distribuída, conhecido como Distributed Load Testing (DLT) na AWS permite automatizar o teste da aplicação, entender como ele será executado em escala e corrigir gargalos antes de fazer o seu lançamento. Comece a usar o Distributed Load Testing na AWS.
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre os autores
Ajay Swamy é Senior Product Lead no time AWS Solutions. Ele é responsável por gerenciar um portfólio de soluções do AWS Solutions que oferecem soluções rápidas, fáceis de implementar e baseadas na nuvem para atender a cenários complexos e desafios técnicos e de negócios. Ele está atualmente em NYC.
George Lenz é um Solution Developer no time AWS Solutions. Ele tem contribuído para as atualizações do Distributed Load Testing no portfólio da AWS. Atualmente, ele está baseado em Nova York.
Sobre os tradutores
Bruno Lopes é Sênior Technical Trainer no time da AWS LATAM. Trabalha com soluções de TI há mais de 12 anos, tendo em seu portfólio inúmeras experiências em workloads Microsoft, ambientes híbridos e capacitação técnica de clientes. Como Trainer, já está há mais de 6 anos dedicando seus dias a ensinar tecnologias de ponta aos clientes da América Latina.
Marina Medeiros é Technical Trainer no time da AWS LATAM. Está há mais de um ano como Trainer, ensinando serviços AWS a diversos clientes. Possui mais de 5 anos na área de TI, com experiências em testes de aplicação e automação de ambiente.