stamatios
← Voltar ao feed
Lupa com propulsor de foguete corre por linhas de log, Nitro acelera busca em traces de agentes
Dev & Engenharia · Agentes

Nitro dobra velocidade de busca em traces de agentes em produção

resumo de ~3 min

Por que o Nitro foi criado

A Braintrust construiu o Brainstore, seu sistema de armazenamento e consulta de traces, sobre object storage para garantir durabilidade, baixo custo e separação entre armazenamento e computação. Com o uso crescente de agentes como Codex e Claude Code para investigar falhas de outros agentes, o padrão de consultas mudou: um agente pode disparar centenas de buscas simultâneas sobre milhares de traces, pressionando CPU e memória compartilhadas.

Limites do modelo síncrono

O Brainstore usa o Tantivy para indexação, otimizado para leitura de arquivos locais via memory-mapped files. Com object storage, cada leitura fora do cache local exige uma requisição de rede. Localizar uma posting list podia exigir quatro etapas dependentes (tamanho do rodapé, rodapé, dicionário, posting list), cada uma com um round trip de rede. No modelo síncrono, workers alternam entre computar e esperar storage; aumentar workers para sobrepor leituras também aumenta o trabalho de CPU pronto para rodar, facilitando o excesso de subscrição de recursos.

O que o Nitro muda

O Nitro é o novo motor de execução assíncrona do Brainstore. Ele mantém o formato de armazenamento do Tantivy, mas separa o agendamento de leituras e de computação, com limites de concorrência distintos: uma consulta aguardando o object store não ocupa um worker de computação.

Além do agendamento, houve otimizações de requisições:

  • Leitura agressiva antecipada: em vez de ler 8 bytes do fim do arquivo, depois o rodapé e depois o bloco de termos, o sistema lê uma quantidade fixa do fim do arquivo em uma requisição, reduzindo o número de acessos.
  • Coalescência de leituras vizinhas: leituras pequenas e adjacentes são combinadas em menos requisições.
  • Shingle search e verificação de subfrases: para frases raras feitas de palavras comuns, o Nitro primeiro verifica posições das subfrases menos comuns, eliminando candidatos antes de checar a frase completa. Exemplo: em "I just got off a long phone call", bastam três das oito palavras para filtrar a maioria dos candidatos.

Resultados em produção

Em um teste A/B de três dias com mais de 1 milhão de consultas (mais de 10.000 buscas full-text), metade roteada ao Nitro: full-text search ficou mais de 2× mais rápida em média, e outras consultas 15% mais rápidas.

Em benchmarks separados com formas de consultas lentas sobre três dias de dados reais (índice de 300 GB, máquina de 32 vCPUs, 128 GiB RAM, ARM64, NVMe de 1,9 TB), consultas a frio melhoraram entre 1,73× e 4,38×. Uma busca full-text com muitas correspondências caiu de 11,831 s para 4,371 s; uma frase sem correspondências caiu de 35,209 s para 8,046 s.

Comparação com outros sistemas

Em um workload sintético de 4 milhões de spans com 40 GB de texto FineWeb, todos armazenados no S3 na mesma máquina, o Brainstore com Nitro superou dois fornecedores de referência (Vendor A e Vendor B) na maioria das buscas de frase. Uma frase sem correspondências levou 698 ms contra 36.223 ms do Vendor A (51,9× mais lento) e 2.253 ms do Vendor B. Em agregações de dashboard, o Vendor A foi 1,66× mais rápido que o Nitro - a empresa reconhece agregações como área de melhoria. Em uma consulta, a busca nativa do Vendor B retornou 1.302 correspondências extras incorretas, detectadas pela verificação de frase exata do benchmark. Os autores ressaltam que três execuções a frio são poucas para estabelecer diferenças pequenas.

Conclusão

A Braintrust posiciona o Brainstore como feito para o volume de dados que agentes geram e o Nitro para o volume que eles vão consultar: um agente investigando uma falha deve poder seguir o evidências entre buscas sem passar a maior parte do tempo esperando o banco.