PodHeitor FD: o cliente Bacula que, em Rust, ficou mais rápido em todos os cenários que testamos

PodHeitor FD: o cliente Bacula que, em Rust, ficou mais rápido em todos os cenários que testamos

Sexta à noite eu fechei o último commit do PodHeitor FD — o cliente Bacula (File Daemon) que escrevi do zero em Rust, byte-for-byte compatível com o protocolo de fio do Bacula Community 15.0.3. Sábado e domingo foram inteiros dedicados a uma coisa só: medir. Não medir de qualquer jeito — medir do jeito certo, seguindo a metodologia de dez passos do Raj Jain (The Art of Computer Systems Performance Analysis, 1991), que é a referência canônica para esse tipo de comparação.

A pergunta que eu queria responder era simples: “o cliente que reescrevi é, de fato, mais rápido que o bacula-fd oficial — e em quais cenários?”

A resposta, eu agora posso afirmar com números: sim, em todos os nove cenários medidos.

Como rodou o experimento

Montei uma matriz de 9 células — três cargas de trabalho (Manyfiles, Media, Mixed) cruzadas com três níveis de backup (Full, Differential, Incremental). Cada célula rodou 10 réplicas (180 jobs no total), todos disparados pelo Bacula Director e Storage Daemon originais, sem modificação — ou seja: a fidelidade de protocolo está preservada, o que muda é só o cliente.

O bacula-fd 15.0.3 da Community foi a baseline. O PodHeitor FD foi o desafiante.

O que os dados mostraram

Mediana de tempo de backup por celula — PodHeitor FD vs bacula-fd 15.0.3
Mediana de tempo de backup por célula, 10 réplicas. Menor é melhor. Anotações mostram a redução percentual do PodHeitor FD em relação ao bacula-fd 15.0.3.
  • 9 vitórias em 9 células, todas por mediana
  • Pior caso: −5,3% (Manyfiles/Differential) — empate técnico, ainda assim a favor do PodHeitor FD
  • Melhor caso: −66,7% (Mixed/Incremental) — o cenário mais comum em rotinas horárias
  • Média geométrica de ganho ≈ −21%
Throughput sustentado por celula — PodHeitor FD vs bacula-fd 15.0.3
Throughput sustentado por célula. Maior é melhor. O salto mais expressivo está em Mixed/Incremental: 3× mais bytes úteis por segundo de janela.

O que isso significa para quem opera Bacula

Os ganhos pesados caíram exatamente onde o operador roda mais frequentemente: Incrementais e Diferenciais. Tradução em vocabulário de SLA:

  • Uma janela de RPO horário em dados mistos (laptops, servidores de aplicação) que antes consumia ~3 segundos de FD por cliente, agora consome ~1 segundo. Cabem 3× mais clientes no mesmo Director, ou a mesma frota com cadência tripla.
  • Em ambientes Manyfiles (árvores de configuração, repositórios de código), o Incremental ficou 35% mais rápido — o que comprime a janela noturna do mesmo fator e libera tempo para verificação de integridade ou migração de mídia.

Por que ainda não está pronto

Honestamente: está ótimo, mas dá para melhorar. A análise de cauda (P90) mostrou que em alguns cenários Media e Mixed o PodHeitor FD tem cauda um pouco mais pesada que o bacula-fd. A próxima iteração de engenharia já tem essa mira no alvo, e a mesma matriz Raj-Jain vai ser o teste de regressão.

A análise de restore (lado do RTO) ainda não está medida — é o próximo experimento agendado, e vai sair em um whitepaper de continuação.

Por que reescrever em Rust importa

Rust é um diferencial concreto, não modismo. O cliente FD roda com privilégios elevados em toda máquina protegida — esse é exatamente o tipo de processo onde memory-safety nativa, ausência de garbage collector e estabilidade de longo prazo deixam de ser detalhe acadêmico e viram redução de risco operacional auditável. Trabalhos recentes sobre Rust-for-Linux confirmam o que o RustBelt já tinha provado formalmente: a disciplina de tipos do Rust elimina, por construção, classes inteiras de bugs que historicamente afligiram daemons C/C++ longevos.

Whitepaper técnico completo

Se você quer ver a metodologia em detalhe (matriz Raj-Jain, statistical setup, threats to validity, e os números célula a célula), publiquei o paper inteiro:

📄 Baixar whitepaper técnico (PDF) — inclui tabela de medianas/médias/P90 das 9 células, gráficos completos (boxplots, RPO shrink factor) e a discussão honesta sobre tail behavior e limitações.


🚀 PodHeitor FD em trial — sem custo, com acompanhamento

Se você opera Bacula em produção e quer ver, no seu próprio ambiente, se esses números se sustentam — abri slots de trial guiado do PodHeitor FD para um conjunto pequeno de empresas.

O que está incluso no trial:

  • Binário do PodHeitor FD (RPM/DEB) compatível com Bacula Community 15.x e Bacula Enterprise
  • Configuração assistida em UMA das suas máquinas em produção (call de 1h)
  • 30 dias de uso ilimitado, com instrumentação igual à do whitepaper
  • Comparação A/B com seu bacula-fd atual, no SEU workload
  • Relatório executivo no fim com os deltas medidos no seu ambiente

O que peço em troca:

  • Permissão de citar o nome da sua empresa (anonimizável) em uma futura republicação dos números
  • Feedback honesto sobre o que faltou ou quebrou

Como participar:


Sobre o autor. Heitor Faria é consultor Bacula desde 2009, mantém o canal técnico @podheitor e desenvolve a suíte PodHeitor de 21 plugins comerciais sobre Bacula. Doutor em Engenharia Elétrica (UnB) com tese em desduplicação de dados, autor de Bacula: Backup e Recuperação de Dados de Forma Segura (Novatec) e instrutor há 10+ anos.

Disponível em: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe um comentário