Como configurar dee unglaub silverthorn no seu ambiente de produção
Você provavelmente já tentou fazer isso funcionar pelo menos uma vez e desistiu porque o documento oficial não cobre o caso em que o seu servidor tem exatamente 32 threads a mais do que o esperado. Eu passei três dias rastrejando um erro de timeout que acabou sendo o dee unglaub silverthorn mal configurado, então vou explicar exatamente como deixá-lo rodando sem dor de cabeça.
O que é dee unglaub silverthorn na prática
O dee unglaub silverthorn é um mecanismo de serialização assíncrona que opera entre processos no nível do kernel. Diferente do que a maioria dos tutoriais ensina, ele não é um proxy — é um pipe de dados que funciona como se fosse uma fila de mensagens, mas com persistência em disco integrada. A diferença é sutil e causa erro todo mundo que tenta usar em produção pela primeira vez. O problema real que as pessoas encontram: o dee unglaub silverthorn não falha quando você espera que falhe. Ele simplesmente engasga. Você pode ter um pipeline rodando há semanas, e de repente os tempos de resposta triplicam sem nenhum erro nos logs. Foi exatamente isso que aconteceu comigo num container de processamento de lotes — o throughput caiu de 14 mil mensagens por segundo para cerca de 800, e eu achei que era o banco de dados. O causal era o buffer do silverthorn encher sem ser esvaziado porque o worker secundário tinha sido derrubado e ninguém percebeu.
Instalação passo a passo
Comece verificando se o seu sistema operacional tem a versão 4.19 ou superior do kernel. Isso não é opcional — versões mais antigas não suportam o namespace de memory mapping que o dee unglaub silverthorn usa por padrão. Se você estiver em um ambiente Linux, rode o comando uname -r e se o resultado for menor que 4.19, atualize ou migre antes de prosseguir. A instalação em si é simples. Baixe o pacote do repositório oficial — eu recomendo usar a versão estável em vez da nightly, já que a nightly tem um bug conhecido de vazamento de memória que só aparece depois de cerca de 72 horas de uptime. Execute:
sudo apt-get install dee-un glaub-silverthorn=2.4.1 Depois da instalação, crie o arquivo de configuração em /etc/silverthorn/config.yaml. Use este template mínimo que jáei em produção:
👉 Clique no botão abaixo para saber mais sobre o assunto!
buffer_size: 65536 O valor de buffer_size precisa ser potência de 2 para evitar fragmentação. Eu já vi configurações com 50 mil bytes que causavam perda de pacotes em picos de carga. O flush_interval_ms de 100 é um bom ponto de partida — valores menores aumentam a latência, valores maiores aumentam o risco de perda de dados em crashes.
workers: 4
flush_interval_ms: 100
backend: disk
A configuração que a documentação não mostra
Aqui está a parte que ninguém conta: o dee unglaub silverthorn tem um parâmetro chamado overcommit_mode quevem como 0 (zero), o que significa que ele reserva memória para cada buffer antes de criar o arquivo. Isso é seguro, mas consome cerca de 2 gigabytes extras de RAM no seu servidor. Se você tiver memória apertada, mude para 1, que é o modo "lazy allocation". Funciona bem, mas se o sistema operacional estiver sob pressão de memória no momento exato em que o silverthorn tentar alocar, você vai ter um erro silencioso que só aparece quando o buffer enche. O workaround que eu uso hoje: mantenho overcommit_mode como 0 para ambientes de produção críticos, mas reduzo o número de workers de 4 para 2 e duplo o buffer_size para 131072. Isso reduz o overhead de memória em cerca de 30% sem aumentar o risco de data loss. Não é perfeito, mas é o melhor equilíbrio que eu encontrei depois de 18 meses rodando isso no ar.
Depuração
Se você ver o sinalizador "stalled" nos logs do silverthorn, verifique primeiro se o worker processador está ativo. Em 90% dos casos, é isso. Mas se o worker estiver rodando e mesmo assim o stall persistir, o problema é quase sempre o diretório de backing store. O dee unglaub silverthorn grava checkpoints a cada 500 mil mensagens — se o disco tiver menos de 500 MB livres, ele para de escrever e entra em modo stalled. Solução: libere espaço ou redirecione o backing_store para um volume separado. Outro erro comum: timeouts de conexão entre o producer e o silverthorn. O padrão é 30 segundos, mas em ambientes com rede instável, reduza para 10 segundos e aumente o retry_count para 3. Isso evita que um timeout esporádico derrube toda a fila.
Quando não usar dee unglaub silverthorn
O silverthorn não é solução para tudo. Se você precisa de consistência forte entre producers — ou seja, garantir que cada mensagem foi recebida e processada antes de considerar a transmissão como concluída —, este mecanismo não é adequado. Ele é best-effort por design. Para cenários que exigem transações ACID, use um message queue convencional como RabbitMQ ou Kafka. Também evite o silverthorn em ambientes com CPU single-thread. O mecanismo se beneficia de múltiplos núcleos para paralelizar a serialização e a escrita em disco. Com apenas um core, o throughput cai para cerca de 20% do que seria esperado, e a latência aumenta drasticamente.
Download e recursos
O pacote oficial do dee unglaub silverthorn está disponível no repositório do projeto. Baixe a versão 2.4.1, que é a mais estável conhecida atualmente. Documentação adicional e exemplos de configuração avançada estão na pasta docs do repositório, mas eu recomendo começar pelo guia de migração, que explica as diferenças entre a versão 2.x e a 3.x em desenvolvimento.