- Um bug de atualização automática no Screen Studio, app de gravação de tela para macOS, fez com que um arquivo de 250 MB fosse baixado repetidamente a cada 5 minutos
- Como resultado, em um mês foram gerados 2 PB (2.000.000 GB) de tráfego no Google Cloud, levando a uma conta surpresa de cerca de US$ 8.000
- A causa foi uma simples omissão no código: faltou a lógica para interromper as requisições repetidas após baixar a atualização
- Alguns usuários chegaram a sofrer prejuízos reais, como o cancelamento do serviço de internet, e a equipe de desenvolvimento assumiu total responsabilidade
- O caso reforça lições como configurar alertas de custo na nuvem, revisar código que possa gerar despesas e criar mecanismos de controle no servidor de atualização
Visão geral do incidente
- O Screen Studio é um app de gravação de tela para desktop no macOS com recurso de atualização automática
- O arquivo de atualização tem cerca de 250 MB, e o app verifica o servidor a cada 5 minutos
- Por causa do bug, mesmo após detectar a atualização, as requisições em intervalos de 5 minutos não eram interrompidas e o download continuava se repetindo
O início de um refactor trágico
- Antes, o pop-up de atualização atrapalhava durante gravações, causando um problema de UX
- Durante um refactor para melhorar isso, a equipe acabou removendo a lógica que parava o temporizador após a atualização
- Como resultado, o app passou a ter embutida uma lógica que baixava repetidamente o arquivo de atualização
O contexto assustador: execução em segundo plano
- Muitos usuários deixavam o app rodando em segundo plano por semanas
- Nesse estado, milhares de instâncias baixavam automaticamente 250 MB a cada 5 minutos
O desastre em números
- Download a cada 5 minutos = 288 vezes por dia
- Tráfego diário baixado por usuário = 72 GB
- Mantido por cerca de 30 dias, assumindo 1.000 usuários:
- 250 MB × 288 × 30 × 1.000 = cerca de 2 PB de tráfego
- Custo estimado gerado no Google Cloud: cerca de US$ 8.000
A sequência de erros
- Alertas de custo do Google Cloud não estavam configurados
- Como a conta mensal anterior ficava na faixa de US$ 300, a situação foi subestimada
- No fim, o problema só foi percebido quando as transações passaram a ser bloqueadas por estouro do limite do cartão de crédito
Impacto para os usuários
- Um usuário recebeu da ISP (provedora de internet) um aviso de cancelamento do contrato de serviço por causa desse tráfego
- Não havia fornecedor alternativo na região → grande transtorno no dia a dia
- A equipe reconheceu a responsabilidade e ofereceu compensação pelos custos; felizmente, a situação foi resolvida de forma amigável
- Ainda assim, a experiência de causar prejuízo aos usuários deixou uma reflexão profunda nos desenvolvedores
Resumo das lições
- Alertas de custo na nuvem são indispensáveis
- A lógica de atualização automática deve ser escrita com extremo cuidado
- Todo código com potencial de gerar custos deve passar por revisão especial
- Sinais de controle no servidor (ex.: flag de atualização forçada) devem fazer parte do design
- O uso da nuvem deve ser verificado regularmente
1 comentários
Opiniões do Hacker News
Para quem encontrar este tópico via busca na web no futuro: o screen.studio é um software de gravação de tela para macOS que verifica atualizações a cada 5 minutos. Porém, o bug descrito neste post fazia o download de um arquivo de atualização de 250 MB a cada 5 minutos
O Screen Studio é um gravador de tela para macOS. É um aplicativo desktop. Eles afirmam que precisam de atualização automática para facilitar a instalação da versão mais recente
É absurdo que o desenvolvedor de um app não essencial, como um gravador de tela, ache que precisa verificar atualizações a cada 5 minutos
Fico me perguntando se realmente é necessário verificar atualizações a cada 5 minutos. Uma vez na inicialização já basta, e mesmo se o usuário deixar o app aberto por dias, dá para verificar uma vez por dia ou até menos
Eu sempre sou rigoroso com code review. Uma vez, quando um gerente disse para deixar mais isso com o QA, respondi: "Todos nós podemos perder o emprego. Sempre podemos perder o emprego por causa de uma única linha de código ruim"
A questão da largura de banda desperdiçada desnecessariamente por milhares de usuários em seus planos de dados
Quando eu distribuía um aplicativo desktop para Mac:
Surpreende que "testes melhores" não tenham sido mencionados no resumo
Sou conservador quanto à adoção de bibliotecas de terceiros (porque cada biblioteca pode causar problemas no longo prazo), mas atualização de app vale a pena
Eu opero um serviço de proxy anticensura que usa arquivos Proxy Auto-Configuration (PAC)