Response Time, saiba que você pode estar utilizando essa métrica de forma errada — Tiago Tartari

Tiago Tartari
3 min readAug 24, 2020

Qual é o response time do seu serviço? Você saberia responder? E se eu te perguntar de outra forma? Por exemplo, quantas requisições foram respondidas em 30 ms? Você saberia responder?

Se você tem a resposta para a primeira pergunta e não tem para a segunda, saiba você pode estar utilizando a métrica de response time de forma errada.

Nesse post quero dar uma sugestão da melhor forma para olharmos o indicador de response time.

Quando olhamos para média do response time, olhamos uma métrica suja, pois facilmente a média pode ser puxada pelo o maior valor.

Veja o exemplo abaixo, a média dos últimos 30 minutos são de 846 milissegundos.

O ideal é trabalharmos com percentis

Trabalhar com percentis nos ajuda criarmos grupos de response time que visa minimizar as discrepancias da média com um resultado mais acertivo. Trazendo para um cenário real, vamos imagina que temos um SLO, Service Level Objective, onde 90% dos meus usuários precisam ter uma resposta de até 940 milissegundos em uma determinada API.

Como identificar através do percentile os clientes que atingiram esse SLO?

Primeiro passo é definir percentil

Em estatística descritiva, os percentis são medidas que dividem a amostra (por ordem crescente dos dados) em 100 partes, cada uma com uma percentagem de dados aproximadamente igual. Você encontra a explicação dessa medida no Wikipedia.

Entendido o conceito do percentil, para mostrar em nosso caso, vamos ordenar todos os resultados de response time e com isso vamos pegar 99%, 75%, 50% e 25% dos resultados.

Temos a seguinte tabela.

Vejam que 25% das requisições tiveram até 13 milissegundos, 75% das requisições estão em até 933 milissegundos ficando fora do nosso SLO, Service Layer Objective, e 90% das requisições devem atender em até 940 milissegundos.

Se olharmos do ponto de vista da média, 846 milissegundos, nós sempre estariamos abaixo do SLO, Service Layer Objective, que é de 940 milissegundos, ou seja, uma visão muito distorcida da realidade do serviço.

Dashboards de percentis com o Grafana

Utilizando o Prometheus com o Grafana você tem resultados excepcionais.

Para utilizar no grafana você deve utilizar adicionar em queries as métricas de:

99%

histogram_quantile(0.99, rate(http_request_duration_seconds_bucket{code="200",method="GET",controller="Home",action="Index"}[$__interval]))

75%

histogram_quantile(0.75, rate(http_request_duration_seconds_bucket{code="200",method="GET",controller="Home",action="Index"}[$__interval]))

50%

histogram_quantile(0.50, rate(http_request_duration_seconds_bucket{code="200",method="GET",controller="Home",action="Index"}[$__interval]))

25%

histogram_quantile(0.25, rate(http_request_duration_seconds_bucket{code="200",method="GET",controller="Home",action="Index"}[$__interval]))

O gráfico final ficou assim.

Originally published at https://www.tiagotartari.net on August 24, 2020.

--

--

Tiago Tartari

Microsoft MVP, programador por mais de 18 anos onde 10 deles atuando como arquiteto de soluções para e-commerce, palestrante técnico, apaixonado por performance