Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testes de carga com Gatling

Testes de carga com Gatling

Nesta apresentação você aprenderá os conceitos básicos de testes de carga, criação de cenários com o Gatling, gargalos comuns em aplicações Rails, interpretação de relatórios estatísticos e ferramentas para incluir testes de performance no pipeline CI/CD.

https://www.youtube.com/watch?v=Uuwf4x0eBKI

Avatar for Wagner Narde

Wagner Narde

May 11, 2019

More Decks by Wagner Narde

Other Decks in Programming

Transcript

  1. Quantos usuários simultâneos são necessários para derrubar a sua aplicação?

    "Meu sistema não cai. Eu uso auto-scaling™." - Desenvolvedor otimista "Se começar a ficar lento é só subir mais máquina" - Desenvolvedor simplista "Não é problema meu" - Desenvolvedor João-sem-braço "Não sei" - Desenvolvedor sincero
  2. Código Código != Código sob stress se comporta de maneira

    diferente do código sob pouca carga.
  3. Teste de carga é um tipo de teste funcional desenhado

    para validar ou encontrar os limites de performance de um sistema.
  4. Os 3 tipos de teste usam o mesmo princípio e

    as mesmas ferramentas. O que muda é a pergunta que você faz para seu teste.
  5. Qual é o tempo de resposta médio para 1000 usuários

    simultâneos? Quantos usuários simultâneos a infraestrutura atual consegue atender em até 2 segundos? Quantos usuários simultâneos são necessários para derrubar a aplicação?
  6. Cenário • Roteiro de teste ◦ Acesse a loja, busque

    um produto, adicione no carrinho, efetue o pagamento ◦ Repetido à exaustão • Infraestrutura ◦ Servidores de aplicação ▪ 2x servidores com 4GB de RAM e processador 2.5GHz ◦ Banco de dados ▪ 1x writer 8GB de RAM e processador 2.5GHz ▪ 2x reader 8GB de RAM e processador 2.5GHz
  7. Cenário • Testes de carga não devem ser feitos localmente,

    e sim em uma infraestrutura o mais próxima possível de produção. • Ao testar em uma infraestrutura reduzida, você corre o risco de não estressar algum componente vital, como load balancer, por exemplo. • É possível reduzir o escopo e a infraestrutura do teste de carga após isolar os gargalos.
  8. Variáveis • Quantidade de usuários simultâneos • Quantidade de vendas

    por segundo • Quantidade de produtos no catálogo
  9. • Tempo de resposta • Porcentagem de erros • Impacto

    nos recursos (CPU, memória, IO, bandwidth) Resultados
  10. A partir da análise dos resultados do teste de carga

    você encontra os limites atuais e pistas para melhorias.
  11. ~ ab -n 1000 -c 5 https://vindi.com.br/ ... Concurrency Level:

    5 Time taken for tests: 40.384 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 29409688 bytes HTML transferred: 28977000 bytes Requests per second: 24.76 [#/sec] (mean) Time per request: 201.919 [ms] (mean) Time per request: 40.384 [ms] (mean, across all concurrent requests) Transfer rate: 711.19 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 66 137 79.6 114 630 Processing: 23 63 59.4 48 644 Waiting: 11 38 40.5 30 432 Total: 93 199 102.5 165 840
  12. Desvio padrão é uma medida que expressa o grau de

    dispersão de um conjunto de dados. Mediana é o valor que separa a metade maior e a metade menor de uma amostra. Percentil é a medida utilizada para dividir uma amostra de valores, ordenados de forma crescente, em cem partes. Percentil 50 = Mediana
  13. Roteiro para o teste 1. Acesse a loja 2. Busque

    um produto 3. Adicione no carrinho 4. Efetue o pagamento ~ ab -n 1000 -c 5 https://vindi.com.br/
  14. Cenários complexos Grupos de URLs, gestão de sessão, relatórios avançados,

    etc • Gatling • JMeter • Locust • The Grinder • Artillery • k6 Cenários simples Uma única URL ou URLs aleatórias, sem o contexto de sessão • ab • siege • wrk
  15. Gatling • Cenários são descritos em código usando Scala •

    Relatórios amigáveis sem a necessidade de plugins extras • Gráficos com Highcharts • Documentação completa e atualizada
  16. ~ ./gatling.sh -sf . GatlingSimulation is the only simulation, executing

    it. Simulation simulations.GatlingSimulation started… ================================================================================ 2019-05-11 00:57:59 15s elapsed ---- Requests ------------------------------------------------------------------ > Global (OK=300 KO=0 ) > Cadastro de visitante / Home (OK=100 KO=0 ) > Cadastro de visitante / Recursos (OK=100 KO=0 ) > Cadastro de visitante / Quero conhecer (OK=100 KO=0 ) ---- Site Vindi ---------------------------------------------------------------- active: 100 / done: 35 ================================================================================ ... Reports generated in 1s. Please open the following file: /Users/wagnernarde/gatling/results/gatlingsimulation-20190511033645401/index.html
  17. Usuários simultâneos App CPU load Db CPU load Response time

    Percentil 99 100 0.2 0.1 208ms Exemplo 1 Hipótese: Limite insuficiente no connection pool do ActiveRecord 1000 0.2 0.1 2106ms
  18. Usuários simultâneos App CPU load % Erros Response time Percentil

    99 100 1.2 0% 210ms Exemplo 2 Hipótese: Número de processos do Puma/Unicorn incompatível com o número de cores do processador. 1000 8.5 90% 15800ms
  19. Depois de corrigir os gargalos, como garantir que a performance

    do sistema não vai retroceder futuramente?
  20. Resumo • Encontre a pergunta correta • Analise os relatórios

    junto com as métricas da infraestrutura • Entenda como a requisição trafega na sua infraestrutura • Identifique e resolva gargalos • Inclua requisitos de performance no CI