rollfuse
← Voltar ao blog

Rollback Automático por Latência p95: setup e armadilhas

Latência p95, o valor abaixo do qual 95% das requisições terminam, é a métrica de latência padrão por trás da maioria dos setups de rollback automático, e ela merece esse posto. Captura degradação ampla sem reagir à requisição lenta isolada que todo serviço tem de vez em quando. É exatamente por isso que é o ponto de partida certo, e exatamente por isso que é insuficiente sozinha pra alguns serviços; mais sobre isso abaixo.

Configurando

Um guardrail de latência p95 precisa de uma definição de métrica cujo valor representa esse percentil. Ele é calculado antes (no seu APM, no próprio histograma do load balancer, ou um script que tira percentil de uma amostra bruta) e empurrado ou puxado pro rollfuse, mais um guardrail referenciando ela:

POST /v1/rollouts/{rollout_id}/guardrails
{
  "metric_definition_id": "<p95-latencia-ms>",
  "comparison_operator": "gt",
  "threshold": 500,
  "evaluation_window_seconds": 300
}

O limite deveria ser configurado contra o p95 histórico do próprio serviço, com margem, não um número arbitrário de "abaixo de 500ms está bom" tirado de uma lista genérica de boas práticas. Um serviço cujo p95 normal é 480ms e outro cujo p95 normal é 80ms precisam de limites bem diferentes mesmo que os dois "pareçam bem" hoje.

O ponto cego que só o p95 tem

p95 é uma métrica de mediana-da-cauda: te conta sobre a metade pior da metade superior da sua distribuição, mas uma cauda de 1% de verdade, as requisições que realmente batem numa dependência lenta, um cache frio, uma tempestade de retry, pode ficar inteiramente fora dele. Num serviço com grafo de dependências homogêneo, essa é uma troca aceitável. Num serviço onde a cauda especificamente representa risco desproporcional (um gateway de pagamento fazendo retry contra um emissor lento, por exemplo), um guardrail só de p95 pode continuar verde durante toda a duração de uma regressão que um guardrail de p99 teria pego em minutos.

A correção não é substituir p95 por p99. É carregar os dois, como dois guardrails separados no mesmo rollout, cada um referenciando sua própria definição de métrica. Qualquer um dos dois violando aborta o rollout de forma independente; nenhum precisa esperar o outro concordar.

O que "automático" compra especificamente aqui

Regressões de latência geralmente são graduais, não um penhasco. Esse é exatamente o formato que um humano encarando um painel é pior em pegar em tempo real, e exatamente o formato que uma avaliação programada contra um limite fixo pega de forma confiável. O guardrail não se entedia, não se distrai, e não espera alguém perceber a linha subindo aos poucos antes de agir.