Tiago Tartari

Conteúdo

K6.io, Grafana e InfluxDb é a melhor stack para stress test

A stack, K6.io, Grafana e InfluxDb, nos possibilita ter uma ótima experiência quando o assunto é stress test. Os testes de estresse são fundamentais no desenvolvimento de software, permitindo avaliar o desempenho e a estabilidade de uma aplicação sob cargas intensas. Neste guia completo, você irá dominar os fundamentos básicos e avançados do stress testing, além de descobrir por que a combinação de K6.io, Grafana e InfluxDB é a melhor stack para realizar esses testes de forma eficiente e eficaz.

Fundamentos do stress test

O stress testing é uma prática fundamental no desenvolvimento de software, permitindo avaliar o comportamento e a capacidade de uma aplicação sob condições de carga intensa. O objetivo principal do stress testing é identificar os limites operacionais de uma aplicação, avaliando seu desempenho, estabilidade e escalabilidade. Por meio desse tipo de teste, é possível verificar se a aplicação pode lidar com condições de pico de carga, garantir a continuidade dos serviços e identificar falhas ou gargalos em sua infraestrutura.

Quais métricas de desempenho podemos medir com o stress test

Durante o stress testing, é importante coletar e analisar métricas de desempenho para avaliar o comportamento da aplicação. Alguns exemplos de métricas comumente utilizadas incluem:

  • Tempo de Resposta (Response Time): Mede o tempo necessário para a aplicação responder a uma requisição, indicando a eficiência do sistema.
  • Taxa de Erros (Error Rate): Indica a proporção de erros ocorridos durante o teste, permitindo identificar problemas de estabilidade ou falhas na aplicação.
  • Utilização de Recursos (Resource Utilization): Monitora o uso de recursos, como CPU, memória e largura de banda, para identificar possíveis gargalos de desempenho.

Estratégias para um bom stress test

Existem diferentes estratégias que podem ser utilizadas no stress testing, dependendo das necessidades específicas do projeto. Algumas estratégias comuns incluem:

  • Stress Test: Esse tipo de teste visa avaliar o comportamento da aplicação sob condições extremas de carga, expondo seus limites e identificando possíveis falhas. Por exemplo, um teste de estresse em um aplicativo de e-commerce pode simular um grande número de usuários simultâneos realizando compras e avaliar se o sistema é capaz de lidar com essa demanda.
  • Soak Test: Também conhecido como endurance test, o soak test é usado para avaliar a estabilidade da aplicação sob uma carga constante e prolongada. O objetivo é verificar se a aplicação é capaz de manter o desempenho e a disponibilidade ao longo do tempo, identificando possíveis vazamentos de memória ou outros problemas relacionados ao uso prolongado.
  • Load Test: O load test é realizado para avaliar o desempenho da aplicação sob uma carga específica, simulando o comportamento real dos usuários. Esse teste ajuda a identificar possíveis gargalos e otimizar o desempenho da aplicação. Por exemplo, um load test em um site de notícias pode simular o acesso simultâneo de milhares de usuários e avaliar o tempo de resposta e a estabilidade do sistema.
  • Smoke Test: O smoke test é um teste inicial rápido realizado para verificar se as funcionalidades básicas da aplicação estão funcionando corretamente. Geralmente, esse teste é executado após uma nova versão da aplicação ser implantada ou antes de um teste mais abrangente. Ele ajuda a identificar problemas graves e garantir que a aplicação esteja pronta para testes mais aprofundados.

Cinco benefícios quando adotamos stress test como prática

A realização de testes de stress traz diversos benefícios para a aplicação, incluindo:

  • Identificação de pontos fracos: O stress testing revela os pontos fracos da aplicação, como gargalos de desempenho, falhas de escalabilidade e limites de capacidade. Isso permite que você tome medidas corretivas para melhorar o desempenho e a estabilidade da aplicação.
  • Preparação para picos de tráfego: Ao submeter sua aplicação a cargas extremas, você estará preparado para lidar com picos de tráfego reais. Isso garante que sua aplicação seja capaz de suportar um aumento repentino no número de usuários, mantendo uma experiência satisfatória para todos.
  • Otimização de recursos: Ao identificar os gargalos de desempenho durante o stress testing, você pode otimizar o uso de recursos, como CPU, memória e armazenamento. Isso resulta em uma melhor utilização dos recursos disponíveis e um desempenho mais eficiente da aplicação.
  • Garantia da qualidade: O stress testing é uma parte essencial do processo de garantia de qualidade, permitindo que você valide a estabilidade e o desempenho da aplicação antes de colocá-la em produção. Isso ajuda a evitar falhas inesperadas e proporciona uma melhor experiência para os usuários.
  • Confiança do usuário: Ao realizar testes de estresse e garantir que sua aplicação seja capaz de lidar com altas cargas de trabalho, você transmite confiança aos usuários. Isso resulta em uma reputação positiva e usuários satisfeitos, aumentando a fidelidade e o engajamento com a sua aplicação.

Empresas demoram até duas horas para descobrir problemas em produção

Empresas demoram mais de duas horas para descobrir problemas em produção, segundo o report DoraDevops. Dessa forma, considerando que um software bem-feito deve atender aos atributos de qualidade, esse conjunto de ferramentas para stress test pode ajudar a compreender o comportamento do seu software. Além disso, ao adotar um stress test vamos colaborar para boa experiência do cliente.

Resiliência, escalabilidade, segurança e observabilidade são os atributos de qualidade mais comumente observados em um stress test. No entanto, é importante destacar que existem outros atributos igualmente relevantes que podem ser considerados nessa lista.

Além dos atributos mencionados, outros aspectos como desempenho, disponibilidade, confiabilidade e eficiência também desempenham um papel crucial na avaliação do comportamento de um sistema sob carga intensa. Cada atributo aborda uma dimensão específica da qualidade do software e contribui para uma experiência superior do usuário.

A resiliência, por exemplo, refere-se à capacidade do sistema de se recuperar rapidamente de falhas e continuar funcionando adequadamente. A escalabilidade diz respeito à habilidade de lidar com aumentos na demanda de maneira eficiente, mantendo o desempenho e a disponibilidade. A segurança envolve a proteção dos dados e a mitigação de possíveis vulnerabilidades. E a observabilidade permite a coleta e análise de métricas e logs para uma melhor compreensão do comportamento do sistema.

Cada atributo desempenha um papel fundamental na garantia de que o software esteja preparado para enfrentar os desafios do mundo real. Ao considerar esses atributos durante um stress test, é possível identificar oportunidades de melhoria, mitigar riscos e tomar decisões embasadas para otimizar o desempenho e a qualidade do sistema como um todo.

K6 é a stack perfeita para te ajudar nessa tarefa.

Como configurar o K6.io junto com Grafana e o InfluxDb?

Passo 1: Instalação do K6.io

  • Faça o download e instale o K6.io em sua máquina local. Você pode encontrar as instruções de instalação no site oficial do K6.io.

Passo 2: Configuração do InfluxDB

  • O serviço InfluxDB está definido no arquivo YAML com as seguintes configurações:
    • Imagem: influxdb:1.8
    • Portas: 8086:8086
    • Variável de ambiente: INFLUXDB_DB=k6
    • Reinicialização automática: always
    • Volume mapeado: ./influxdb:/var/lib/influxdb
    • Rede: grafana
    Para configurar o InfluxDB, você precisa:
    • Criar uma pasta chamada “influxdb” no mesmo diretório onde o arquivo YAML está localizado.
    • Executar o seguinte comando no terminal para iniciar o serviço InfluxDB: docker-compose up influxdb

Passo 3: Configuração do Grafana

  • O serviço Grafana está definido no arquivo YAML com as seguintes configurações:
    • Imagem: grafana/grafana:latest
    • Portas: 3000:3000
    • Variáveis de ambiente: TZ=America/Sao_Paulo, GF_AUTH_ANONYMOUS_ORG_ROLE=Admin, GF_AUTH_ANONYMOUS_ENABLED=true, GF_AUTH_BASIC_ENABLED=false
    • Volume mapeado: ./grafana/data:/var/lib/grafana
    • Rede: grafana
    Para configurar o Grafana, você precisa:
    • Criar uma pasta chamada “grafana” no mesmo diretório onde o arquivo YAML está localizado.
    • Executar o seguinte comando no terminal para iniciar o serviço Grafana: docker-compose up grafana

Passo 4: Configuração da Rede

  • A rede “grafana” é definida no arquivo YAML para conectar os serviços InfluxDB e Grafana. Essa rede permite a comunicação entre eles. Não é necessário realizar nenhuma configuração adicional para a rede.

Após realizar esses passos, o InfluxDB e o Grafana estarão configurados e prontos para serem utilizados com o K6.io. Você pode acessar o Grafana no navegador utilizando a URL: http://localhost:3000. As configurações de autenticação são definidas no arquivo YAML, permitindo acesso anônimo com papel de administrador.

Certifique-se de que o K6.io esteja configurado corretamente para se conectar ao InfluxDB e enviar os dados dos testes de desempenho. Com essa configuração, você poderá realizar testes de estresse e visualizar os resultados no Grafana, utilizando a poderosa stack formada por K6.io, Grafana e InfluxDB.

Configurando seu primeiro script com K6.io

O teste do K6.io descrito no código abaixo é um teste de carga progressiva com diferentes estágios de duração e alvos de usuários simultâneos.

O teste começa com um único usuário simulado durante 10 segundos, seguido por um período de 5 segundos sem atividade. Em seguida, o número de usuários simultâneos é dobrado durante 10 segundos e, novamente, há um período de 5 segundos de inatividade. Esse padrão continua com aumentos progressivos no número de usuários simultâneos em cada estágio, seguidos por períodos de inatividade.

Ao atingir o estágio final, com 10 vezes o número inicial de usuários simultâneos, ocorrem várias iterações de curta duração com a mesma carga máxima. Essas iterações representam um cenário de uso constante e são seguidas por períodos de inatividade cada vez menores.

Dentro da função de teste, há chamadas HTTP para diferentes URLs, simulando ações de navegação em um e-commerce, como acessar a página inicial, fazer uma busca por um produto, acessar a página do produto, adicionar o produto ao carrinho e realizar o checkout.

Após cada ação, há um intervalo de 5 segundos usando a função sleep(5) antes de realizar a próxima ação.

Esse teste de carga progressiva permite avaliar como o sistema se comporta sob diferentes níveis de carga, desde um único usuário até um número máximo de usuários simultâneos. Ele fornece informações sobre a capacidade de escalabilidade, desempenho e estabilidade do sistema em cenários realistas de uso.

O código fornecido é um comando para executar um teste utilizando o K6.io, com a saída sendo direcionada para o InfluxDB. Vamos analisar o comando em detalhes:

  • k6 run: É o comando principal para executar um teste usando o K6.io.
  • -o influxdb=http://localhost:8086/k6: É a opção para definir a saída do teste para o InfluxDB. O parâmetro influxdb= é usado para especificar o destino da saída, e http://localhost:8086/k6 é o endereço do servidor InfluxDB onde os resultados do teste serão enviados. O “k6” no final do URL é o nome do banco de dados onde os resultados serão armazenados.
  • .\script.js: É o caminho para o arquivo do script de teste, que será executado pelo K6.io. Nesse caso, o arquivo está localizado no diretório atual, representado por .\, e seu nome é script.js. É importante fornecer o caminho correto para o arquivo do script de teste.

No geral, o comando k6 run -o influxdb=http://localhost:8086/k6 .\script.js inicia a execução do teste especificado no arquivo script.js usando o K6.io e direciona a saída dos resultados para o InfluxDB hospedado localmente no endereço http://localhost:8086/k6. Os resultados serão armazenados no banco de dados k6 no InfluxDB para posterior análise e visualização.

Conclusão

O stress testing é uma etapa essencial para garantir o desempenho, a estabilidade e a escalabilidade da sua aplicação. Com a combinação da poderosa stack formada por K6.io, Grafana e InfluxDB, você terá as ferramentas necessárias para realizar testes de estresse eficientes e obter insights valiosos sobre o comportamento da sua aplicação sob cargas intensas. Ao adotar o stress testing, você estará preparado para entregar uma aplicação robusta, confiável e capaz de lidar com os desafios do mundo real.

Compartilhe:

Tiago Tartari

Tiago Tartari

Eu ajudo e capacito pessoas e organizações a transformar problemas complexos em soluções práticas usando a tecnologia para atingir resultados extraordinários.

Qual é o desafio
que você tem hoje?