Pular para o conteúdo

Conceitos

Sampling strategies for observability

Intuição

Pense num fiscal de qualidade numa fábrica gigante: ele não abre cada caixa que sai da linha de produção para inspecionar, porque isso pararia a fábrica inteira — ele inspeciona uma amostra, mas quando escolhe examinar uma caixa, examina o produto inteiro por dentro, não só metade dele. Se um defeito de fabricação existe, ele vai aparecer de novo em muitas outras caixas, então não é preciso ver cada uma pra descobrir o problema.

Como funciona

O Dapper foi desenhado com três objetivos explícitos: transparência para a aplicação, implantação ubíqua em escala muito grande e baixíssimo overhead — e é justamente esse terceiro objetivo que torna inviável registrar cada pedido em detalhe, dado o custo de CPU, memória e rede que isso implicaria rodando continuamente em toda a frota do Google. A solução é amostrar: cedo no ciclo de vida do pedido, o sistema decide se aquele trace inteiro será mantido ou descartado, e essa decisão é tomada para a árvore completa, não span por span — ou o trace inteiro é gravado, com todos os seus spans, ou nenhum span dele é gravado, preservando a coerência da amostra e evitando árvores parciais e inúteis para diagnóstico. As primeiras versões do Dapper usavam uma taxa de amostragem fixa (uma fração pequena e constante dos pedidos); versões posteriores adotaram um esquema adaptativo, parametrizado por uma taxa desejada de traces amostrados por unidade de tempo em vez de uma probabilidade uniforme, o que evita amostrar demais em serviços de tráfego altíssimo e de menos em serviços de baixo tráfego. O argumento do artigo para justificar essa perda deliberada de completude é que, em sistemas da escala do Google, um padrão de execução problemático que ocorre uma vez tende a se repetir milhares de vezes, então não é necessário capturar cada ocorrência para detectá-lo.

Na prática

Esse trade-off — taxa fixa versus taxa adaptativa, e decisão all-or-nothing por trace inteiro em vez de por span — é o mesmo dilema que sistemas de observabilidade modernos como Jaeger, Zipkin e OpenTelemetry enfrentam ao escalar: em serviços de tráfego muito variável entre picos e vales, amostragem adaptativa por taxa-alvo captura eventos raros com mais consistência do que uma probabilidade fixa, ainda que hoje existam estratégias mais sofisticadas (como amostragem guiada por erro ou por latência) do que as descritas no Dapper original.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.