Na tarde de ontem (06/05/2010), a partir das 15:10h (horário de Brasília) os sites do Be on the Net começaram a se comportar de forma lenta e instável. Algum tempo depois, a situação piorou e todos os sites passaram a apresentar uma página de erro. Mais tarde, os sites começaram a alternar períodos em que ficavam fora do ar e depois voltavam por pouco tempo. Essa situação permaneceu até umas 23:50h, aproximadamente, quando os serviços voltaram a funcionar normalmente.
No total, foram quase nove horas de instabilidade no sistema. Até ontem, o máximo que ele tinha ficado fora foi por dez minutos, uma única vez. Em um ano e meio de Be on the Net, essa foi a primeira vez que passamos por um período tão longo de problema nos servidores. Então, explico a seguir toda a história por trás do que aconteceu e o que faremos para que não aconteça mais.
O que foi feito
Infelizmente, nas primeiras duas horas, nada foi feito. A Lei de Murphy diz: o que pode dar errado, não só dará errado, como o fará na pior hora possível. No caso de ontem, isso não poderia ser mais verdadeiro.
Passo a maior parte do meu dia trabalhando no Be on the Net, porém ontem, logo ontem, eu estava fora daqui. Fui a Curitiba para fazer uma palestra e voltar no mesmo dia. Quando o problema começou, eu estava no palco, no meio da palestra.
Se algum problema acontece nos nossos servidores, recebo uma notificação no celular praticamente na mesma hora. Ontem, enquanto eu estava no palco, inúmeras mensagens do sistema de monitoramento começaram a chegar no meu celular, que, por conta da palestra, estava em modo silencioso. Para piorar, assim que terminei a palestra, fui conduzido para outro local, onde comecei uma segunda palestra. E, assim, continuei sem saber o que estava acontecendo.
Às 17:15h eu tomei um táxi para o aeroporto e, finalmente, consegui um pouco de “sossego”. Foi quando olhei o celular e quase tive um ataque do coração. Imediatamente liguei para o Tapajós, com quem divido os afazeres técnicos do Be on the Net. Ele ainda não estava a par e, por azar, estava no trânsito, dirigindo. Então, tomei coragem e abri o notebook no táxi mesmo, torcendo para os meliantes de Curitiba serem menos atentos e numerosos que os cariocas.
Na viagem de táxi até o aeroporto eu me conectei aos servidores e comecei a me situar do que estava acontecendo. Alguns minutos depois, consegui fazer os sites funcionarem novamente. Santo 3G! Chegando ao aeroporto, fiz o check-in, comi algo correndo e me conectei de novo. O sistema continuava instável. Então, antes de embarcar, coloquei tudo funcionando novamente. Chegando em São Paulo, para fazer a conexão do voo, descubro que o sistema continuava “caindo”. Mas, nesse ponto, consegui começar a articular com o Tapajós, que continuou trabalhando no assunto enquanto eu voava para o Rio.
Durante o voo, fiz uma infinidade de anotações indicando pontos que deveria investigar assim que chegasse em casa. Foi um bom exercício, apesar de todo o estresse envolvido. Chegando ao Rio, a situação ainda não tinha melhorado. Mais tarde, em casa, já depois das onze da noite, tanto eu quanto o Tapajós começamos a entender o que estava acontecendo. E aí, finalmente consegui fazer um “curativo” no que estava errado e colocar os serviços em operação novamente.
Por que os sites saíram do ar
Nós projetamos o Be on the Net com inúmeros mecanismos de proteção, para que a interrupção dos serviços só ocorresse em casos muito extremos, onde houvesse inúmeras falhas ocorrendo ao mesmo tempo. Em uma escala bem menor, é semelhante à forma como se projetam aviões. Eles só caem quando um conjunto de fatores adversos, bem raros, estão presentes ao mesmo tempo.
Ontem isso foi justamente o que aconteceu com o Be on the Net. Algumas coisas aconteceram ao mesmo tempo, que nunca tinham acontecido antes, levando o sistema a “cair”. Algumas eram questões externas, mas outras, as mais relevantes, eram de nossa responsabilidade mesmo. Vou evitar entrar demais no lado técnico, para não tornar o texto obscuro para quem não é de tecnologia.
Uns seis meses após o início do Be on the Net, nós identificamos a oportunidade de adicionar ao sistema uma nova funcionalidade que poderia beneficiar bastante vários de nossos clientes. Então, trabalhamos para implementá-la o quanto antes. Na época, nós ainda estávamos muito envolvidos com inúmeras questões que ainda precisavam ser melhoradas, pois o sistema ainda era muito novo.
Tudo o que foi implementado antes do lançamento do Be on the Net contou com um cuidado quase obsessivo da nossa parte. Foram milhares e milhares de testes automatizados, verificando cada pequeno detalhe do sistema. Porém, essa nova funcionalidade não contou com o mesmo grau de atenção, infelizmente. Sim, nós fizemos testes, mas só o básico. Nós subestimamos a questão e erramos feio ao fazer isso.
Apesar disso, essa funcionalidade nunca nos deu nenhum problema, até fevereiro deste ano, quando ela começou a nos incomodar. No início, não foi nada muito sério. Mas, de lá para cá, ela vem nos causando problemas com frequência cada vez maior. É como se fosse uma ferida, que vai ficando mais séria a cada dia. Só ontem nós nos demos conta do tamanho do estrago que ela poderia causar. Falha nossa por não termos lidado com o problema mais cedo e com uma solução definitiva.
O que faremos para que não aconteça de novo?
O que eu consegui fazer ontem à noite foi um curativo bem simples e provisório. Ele não é suficiente para conter o problema em definitivo, portanto, ainda não estamos completamente a salvos de novos problemas. Era apenas o suficiente para que eu pudesse voltar a respirar, os sites voltassem a funcionar e tivéssemos espaço para fazer as correções definitivas.
O passo mais imediato a seguir consiste em reforçar o curativo tanto quanto possível. Isso é o que comecei a fazer hoje. Terminada essa etapa, partirei para o que mais importa.
Vamos reescrever completamente a funcionalidade que vem causando os problemas. Nós vamos eliminar o problema de uma vez por todas e, no processo, adicionar mais uma infinidade de mecanismos de proteção. Isso levará alguns dias e é por essa razão que a primeira etapa consistirá em reforçar o curativo atual.
Outras ações
Apesar de todo o estresse do dia de ontem, algumas coisas boas aconteceram. Fui forçado a pensar em muitas possíveis causas para o problema que estava acontecendo. Agora eu já sei que apenas uma delas foi a responsável. Mas, teoricamente, as demais questões que eu levantei poderiam acontecer algum dia, por mais improvável que seja. Em suma, eu tracei muitos cenários e anotei todos eles.
Assim que resolvermos de vez o problema com a funcionalidade que foi descrita, vamos iniciar um conjunto mais amplo de melhorias em toda a nossa infraestrutura, adicionando mais mecanismos de proteção, para que o sistema fique mais robusto e cada vez melhor. Nós lutaremos para que o acontecimento de ontem fique na história e não se repita mais.
Peço desculpas a todos os clientes do Be on the Net e usuários dos sites do Be on the Net pelo que aconteceu ontem. Estejam certos de que trabalharemos duro para que não aconteça de novo.
Como ainda estamos fazendo a correção definitiva, ainda é possível que passemos por momentos de instabilidade. Então, por favor, fiquem atentos e nos avisem caso percebam algum problema.
Vinícius Teles