Medindo o desempenho de aplicações Web - Parte 1

Naquela típica conversa de almoço, certa vez, um colega disse que com uma pequena ajuda do Google poderia facilmente listar os estereótipos mais populares sobre uma nação, bastando pra isso digitar: "por que os [nacionalidade X] são tão...", e rir com os resultados.

image002

image003

Depois de algumas risadas eu pensei: qual seria o consenso da opinião pública sobre os maiores sites da internet. Adaptando um pouco a ideia anterior podemos ter algumas respostas interessantes:

image004

image005

image006

Pra minha surpresa os resultados indicaram que boa parte das pessoas está perguntando sobre o mesmo tema: o desempenho dos sites.

Isso significa que hoje em dia, tão importante quanto o conteúdo, é a velocidade com que esse conteúdo é entregue.

"Inconscientemente, você não gosta de esperar", diz Arvind Jain, engenheiro líder nos projetos que tratam de velocidade na Google. "Para nós, cada milissegundo importa muito".

Google e outras empresas de tecnologia estão em uma nova busca pela velocidade, fazendo o rápido ir mais rápido. A razão para isso, é que os smartphones, tablets e dispositivos portáteis estão criando frustrantes engarrafamentos digitais, com pessoas a todo momento realizando download de mapas, vídeos, notícias ou redes sociais, milhares de requisições a diversos serviços e a exigência pela resposta rápida faz com que a competição agora passe a ser de quem é o mais rápido e certamente quem for mais rápido será o mais visitado.

A comparação é simples, Imagine que existe um supermercado ao lado da sua casa, e outro do outro lado da cidade, obviamente, você irá mais frequentemente ao que você demora menos tempo para ter o conteúdo que deseja. Ou seja, as pessoas tendem a visitar os sites que demonstram ser mais rápidos que os concorrentes. E isso gera a pergunta: “o quão mais rápido eu preciso ser que meu concorrente?”.

"Duzentos e cinquenta milissegundos mais rápido, é o número mágico para obter vantagem competitiva na Web", diz Harry Shum, cientista da computação e especialista em velocidade da Microsoft.

250 milissegundos (1/4 de um segundo, ou uma piscada de olho - literalmente) é considerado o número a ser mais rápido que seu concorrente.

Em 2009, um estudo realizado pela Forrester Research descobriu que compradores on-line têm muito dinheiro e pouca paciência. Esperam o carregamento das páginas em dois segundos ou menos. Entre três e quatro segundos temos um cliente insatisfeito (e clientes insatisfeitos tendem a não realizar muitas compras). Em 5 segundos ou mais, eles tendem a simplesmente abandonar o site.

image007

Apenas três anos antes, um estudo semelhante da Forrester encontrou a média das expectativas para os tempos de carregamento de página sendo de quatro segundos ou menos, ou seja, cada vez mais o cliente que está gastando dinheiro na web deseja ser atendido rapidamente.

Tempo é Dinheiro

Em pesquisas realizadas pela Amazon, 100 milissegundos a mais no tempo carregamento de uma página, resulta em uma perda de 1% nas vendas (Fonte). Nesse caso, uma loja virtual que passa a demorar 1 segundo a mais para carregar a página perderia quanto em dinheiro?

100 milissegundos = -1% de vendas.

1 Segundo = 1.000 milissegundos.

1 Segundo = pode significar até - 10% de vendas.

Imagine a reação de CIO de uma loja virtual ao saber que ele perde 10% de potenciais vendas a cada segundo que o site dele fica mais lento?

A pergunta de ouro

Nesse ponto, entramos em um paradoxo, toda empresa web deseja que seu site tenha um volume cada vez maior de visitantes, no entanto quanto maior o numero de visitantes, maior o tempo de resposta do servidor, logo, maior lentidão. Então chagamos a conclusão que quanto mais usuários, mais o site ficará lento.

image008

Tendo esse principio em mente, como saber quando o site está se tornando lento o suficiente para perder usuários, e quais os exatos motivos para isso ter acontecido? Simples: realize testes de desempenho na sua aplicação.

O teste de desempenho consiste em avaliar a capacidade, robustez e disponibilidade de uma aplicação, conforme a quantidade de conexões simultâneas, avaliando seu desempenho principalmente em alta carga de trabalho e considerando seu comportamento em circunstâncias normais. Em particular, o objetivo de tais experiências pode ser o de garantir que o software não apresente problemas ou indisponibilidade em condições de insuficiência dos recursos computacionais (como memória, processamento ou espaço em disco), quando trabalhando em alta concorrência ou sofrendo algum ataque de negação de serviço.

Alguns Benefícios de realizar testes de desempenho na aplicação:

- Verificar a qualidade do sistema desenvolvido.

- Testar a capacidade da infraestrutura contratada.

- Saber a quantidade de acessos simultâneos suportados.

- Identificar o ponto de exaustão da sua aplicação.

Existem algumas técnicas para se avaliar o desempenho de uma aplicação web, os três principais são: Teste de Carga, Teste de Stress e Teste de não regressão de Performance.

Teste de Carga

O Teste de Carga é aquele onde o volume de gerado pela ferramenta de geração de carga é crescente no decorrer do tempo. O objetivo é avaliar o comportamento da aplicação de acordo com o crescimento do volume de usuários (requisições), logo encontrando o limite de capacidade da aplicação e identificando qual o limitante (codificação, hardware, tempo de resposta excessivo).

Teste de Stress

Em um teste de stress, além de uma grande carga disparada contra a aplicação, alguns cenários de crash da aplicação são testados, com o objetivo também de determinar a capacidade de recuperação e estabilidade do sistema. Um exemplo é a retirada de um nó do cluster de servidores de aplicação ou uma eventual indisponibilidade do banco de dados.

Teste de não regressão de Performance

Assegura que uma modificação do sistema não impacte na redução de desempenho.

Como funciona o Teste de carga?

image009

De acordo com a Wikipédia: Teste de carga é usado para verificar o limite de dados processados pelo software até que ele não consiga mais processa-lo. Também é conhecido como teste de Volume.

Usado para validar e avaliar a aceitabilidade dos limites operacionais de um sistema de acordo com cargas de trabalho variáveis, ao passo que o sistema em teste permanece constante. Em geral, as medições são tomadas com base na taxa de transferência de dados da carga de trabalho e no tempo de resposta da transação alinhado_._

O principio do teste de carga é determinar o comportamento da aplicação Web através de condições normais e altos picos de carga. À medida que se incrementa gradualmente a carga do normal até o pico, deve se notar qual o comportamento do hardware e do tempo de resposta da aplicação.

Como saber qual o limite da aplicação?

image010

A avaliação deve ser feita sobre quatro aspectos, e quando um deles aparecer, você terá localizado seu ponto de quebra da aplicação:

  • Indisponibilidade
  • Alto tempo de resposta
  • Inconsistência dos dados
  • Problemas de Concorrência

Observando a figura abaixo, temos um simples exemplo de relatório de execução, onde podemos constatar os resultados de um teste que durou 18 minutos, tendo um limite de 1.300 usuários simultâneos, com um Rampup (taxa de carga) de 100 usuários por minuto.

image011

Ou seja, imagine que a sua loja virtual fez uma mega promoção, onde 100 novos usuários chegam ao site por minuto. Nesse cenário, o quanto sua aplicação aguentaria? Com quantos usuários e quanto tempo ela irá demorar para cair ou o tempo de resposta se tornar insatisfatório aos usuários?

Analisando o gráfico gerado neste teste, podemos afirmar que até os 8 minutos, ou aproximadamente 800 usuários simultâneos, a aplicação se comportou de forma estável, porém depois disso tivemos uma alta latência e um alto tempo de resposta e assim identificamos o nosso ponto limite de stress do website.

(No próximo artigo, veremos como um teste de carga deve ser planejado e executado e como isso poderá nos ajudar a descobrir o quão performática nossa aplicação pode ser).