Virus no laboratório
Essa história é lá da primeira metade dos anos 2000, na época eu trabalhava em uma empresa que criava hardware para telefonia.
Era bem interessante, tive acesso a algumas maquinas NEC legais e escrevi alguns códigos bem interessantes.
Foi nessa época que eu escrevi um gravador para VoIP capturando diretamente os pacotes SIP da rede, menos de 100 linhas de código C, mas isso é história para outro dia.
Um dia um cliente ligou reclamando que o sistema dele estava muito lento, era um cliente grande, um laboratório farmacêutico aqui de São Paulo.
O sistema desse cliente era mais ou menos assim, ele recebia muitos documentos via FAX, solicitações, resultados de exames, documentos de pacientes.
O próprio sistema já fazia uma pré classificação e inseria alguns dados no banco de dados, na época era o MySQL (não por minha escolha) os documentos em si eram armazenados em HDs que eram compartilhados com a rede e podiam ser acessados pelas máquinas dos atendentes.
Dessa forma o sistema do laboratório conseguia localizar documentos e atender a médicos e pacientes.
O pessoal que conhecia melhor esse sistema conversou entre eles e chegaram a conclusão que a lentidão devia ser por causa do banco de dados e a solução foi comprar uma máquina nova e otimizar o banco.
Em alguns dias a nova maquina estava na minha mesa, um DELL lindo medindo apenas 1u, não lembro das especificações, mas era uma máquina caríssima para a época.
Passei uns dois dias me divertindo configurando e ajustando a máquina para o máximo de desempenho. Nenhum aspecto foi deixado ao acaso, a ponto de ajustar os caches do banco exatamente para o hardware, sistema de arquivos otimizado, nenhum processo rodando além dos absolutamente necessários e assim por diante.
A maquina saiu da minha mesa e eu tinha certeza que havia feito o melhor trabalho possível e pelos meus testes não teria como esbarrarmos em desempenho de banco de dados outra vez tão cedo.
Alguns dias depois o cliente reclamou novamente, o sistema continuava lento, então conversamos e conseguimos que deixassem mandar alguém lá para mensurar as partes do sistema e descobrir o que estava havendo.
Claro que esse alguém era eu.
Logo que cheguei, comecei a observar a rede e o trafego estava bastante alto mesmo fora do horário de pico, pelo protocolo quem estava sobrecarregado era o sistema de compartilhamento de arquivos e diretórios do Windows.
Então, fiz o mais básico, dei uma olhada nos arquivos em si, o sistema de FAX gerava milhares de arquivos por dia que eram separados em uma estrutura de diretórios por data e hora, ficando fácil saber o que havia chego em cada momento sem falar nos nomes de arquivos que eram padronizados.
E nesse oceano de arquivos um deles me chamou a atenção, um doc com o nome fora do padrão além do fato de ser um doc e não um arquivo de imagens gerado pelo sistema de FAX.
Foi só abrir o arquivo para ver que era um daqueles vírus de macro VBA que infectavam documentos do Word bem comuns na época.
O que esse vírus fazia era repetidamente vasculhar todos os diretórios compartilhados tentando encontrar a lixeira do Windows para limpar, no código-fonte tinha até um comentário dizendo para não se preocupar, que o vírus era inofensivo (como se isso fosse possível).
Com milhares de arquivos e diretórios sendo vasculhados pelo vírus, a rede ficou lenta.
Então, coletei as evidências e fiz um belo relatório e meu chefe ficou bem contente de além de resolver o problema do cliente também poder cobrar as horas por eu ir lá. Depois do sistema limpo tudo retornou ao normal, agora com um banco de dados super otimizado.
Caso você esteja curioso para ver como esse tipo de vírus era, é só fazer uma pesquisa rápida no GitHub, você encontrará vários repositórios com código-fonte de muitos vírus lá.
Com essa experiência, ficou claro que antes de partir para soluções complexas ou investimentos desnecessários, é fundamental mensurar e analisar o sistema com cuidado.
Muitas vezes, o que aparenta ser uma falha em um componente específico, como o banco de dados, pode ser, na verdade, um sintoma de outro problema, no caso, um vírus que sobrecarregava a rede.
Essa situação reforça a importância de manter os sistemas simples, dessa forma fica muito mais simples analisar o que esta havendo.