No final do ano passado, a Tailscale enfrentou uma série de instabilidades em seu serviço, que se estenderam para o início do novo ano. Essas falhas frequentes foram atribuídas a um único bug no SQLite, cujo rastreamento levou meses de investigações detalhadas.
Ao chegarmos ao verão, a equipe da Tailscale se mostrou confiante de que havia identificado e corrigido o bug. "Sabemos que nossos clientes esperam que a Tailscale seja um serviço confiável, e por vários meses não atendemos a essa expectativa. Pedimos desculpas e queremos explicar o que ocorreu", afirmaram em um post no blog.
O controle da Tailscale opera como um único ponto público, mas internamente é dividido em servidores de coordenação. Cada rede, ou tailnet, vive em um único shard interno de cada vez, mas pode migrar entre eles de forma transparente. O banco de dados SQLite armazena informações sobre as redes, acessado exclusivamente por um único processo Go, seguindo o design que o SQLite prevê.
Desde 2022, o SQLite foi escolhido como o banco de dados primário da Tailscale, sendo considerado uma tecnologia confiável e amplamente utilizada. Em agosto do ano passado, entretanto, um erro em um pipeline de dados indicou a corrupção de um dos bancos de dados. Após uma série de verificações, a equipe confirmou a corrupção, um evento raro, mas não inédito.
Entre outubro e dezembro, a Tailscale enfrentou 19 instâncias separadas de corrupção de banco de dados em um período de seis meses, levando à necessidade de uma resposta rápida e eficaz. Durante esses incidentes, o processo de controle teve que ser interrompido, causando dores de cabeça para os usuários, já que suas redes ficaram sem acesso ao console de administração e à API da Tailscale.
"A corrupção de banco de dados é uma preocupação natural, pois pode levar à perda de dados", explicaram. Contudo, garantiram que os dados de configuração e metadados das redes estavam seguros, e que apenas algumas alterações não persistiram durante os casos iniciais de corrupção.
A busca pela causa raiz do problema foi complexa e envolveu uma série de tentativas sem sucesso. Os engenheiros da Tailscale revisaram o código, mas não encontraram falhas evidentes. A situação levou a equipe a buscar ajuda dos desenvolvedores do SQLite, que ofereceram suporte profissional e acesso à sua expertise.
Após meses de colaboração, a equipe finalmente identificou o que chamaram de "bug de reset do WAL", que havia permanecido oculto por 16 anos. "Esse bug foi uma verdadeira ameaça à nossa confiabilidade", disseram os engenheiros. O problema ocorria quando uma escrita ocorria em um momento específico durante o processo de checkpoint, resultando em dados que nunca eram gravados no banco de dados.
Com a correção implementada na versão 3.52.0 do SQLite, a Tailscale realizou uma implantação cuidadosa. Contudo, inesperadamente, o monitoramento de backups indicou corrupção em 13 bancos de dados, que, na verdade, estavam intactos, mas apresentavam um erro em relação a índices de expressão. A equipe rapidamente ajustou a precisão dos timestamps para resolver o problema.
"Esta investigação nos lembrou que usar tecnologia comum de forma não padrão pode ser arriscado", refletiram. Apesar das frustrações enfrentadas, a equipe agora se sente mais forte e preparada para qualquer eventualidade futura. Desde então, houve uma calmaria nas operações, e a Tailscale está otimista de que os problemas de banco de dados sejam coisa do passado.
Confira os últimos vídeos publicados no canal