Um clipe GIF da dança de Rachel em "Friends" cresceu para centenas de gigabytes, derrubando os backups do Discourse
Resumo
Discourse é uma plataforma popular para discussões online, com mais de 22 000 comunidades.
Recentemente, durante a cópia de segurança do site, surgiu um problema crítico: um arquivo GIF (1,6 MB) foi copiado pelos usuários 246 173 vezes, excedendo o limite de links físicos no sistema de arquivos ext4 e fazendo o tamanho da cópia crescer para 377 GB.
Abaixo está uma análise detalhada da situação, causas e soluções.
1. O que aconteceu?
Elemento Dados Plataforma Discourse Número de comunidades>22 000 Arquivo‑problema GIF “Rachel de Friends”, tamanho 1,6 MB Número de cópias 246 173 (links físicos) Limite ext4~65 000 links por inode Tamanho final da cópia 377 GB
Por que isso aconteceu?
Discourse permite inserir emojis e arquivos GIF em qualquer mensagem.
Ao mover um arquivo de um contexto para outro (por exemplo, de uma conversa privada para um post público), o sistema cria uma nova cópia com um hash SHA‑1 aleatório. Isso significa que, mesmo que o conteúdo seja idêntico, o Discourse o trata como um novo objeto.
Assim, um GIF pode aparecer em dezenas de milhares de mensagens e conversas privadas – cada vez gerando um arquivo separado. No final, 246 173 cópias excederam o limite ext4, e o sistema começou a criar novos arquivos em vez de links físicos, resultando na “perda” de 181 000 backups.
2. Primeira solução – coleta por hash
Discourse tentou resolver o problema agrupando uploads pelo SHA‑1:
1. Durante a cópia de segurança, todos os arquivos eram agrupados por hash igual.
2. Apenas a primeira cópia de cada grupo era carregada.
3. Para as demais, criavam-se links físicos.
Parecia elegante – mas não considerava a limitação do ext4 sobre o número de links. Assim que o limite foi atingido, o sistema automaticamente criava novos arquivos em vez de links, e o tamanho da cópia aumentou drasticamente.
3. Nova solução – “troca” ao encontrar erro EMLINK
Discourse desenvolveu uma estratégia mais flexível:
1. Cria-se um link físico para o arquivo normalmente.
2. Se o sistema de arquivos retorna erro EMLINK (limite de links excedido), a próxima cópia torna‑se o arquivo “principal”.
3. A partir daí, novos links são criados novamente para essa nova versão principal.
Assim, em cada ultrapassagem do limite ocorre uma troca para um novo arquivo “pai”, e o sistema continua funcionando sem erros. Essa solução é compatível com qualquer sistema de arquivos e não requer configuração adicional.
4. Conclusões
- Um GIF popular (dança da Rachel de Friends) causou o aumento do backup para 377 GB.
- O limite ext4 de ~65 000 links físicos foi um fator crítico.
- A primeira solução baseada em hash não levou em conta as limitações de arquivos, resultando na perda de dados.
- A nova estratégia de “troca” ao encontrar erro EMLINK permite gerenciar corretamente um grande número de cópias e manter a eficiência do backup.
> *“Agora sabemos que Jennifer Aniston pode fazer testes de estresse na infraestrutura,”* — ironicamente observou o Discourse em seu blog.
Comentários (0)
Compartilhe sua opinião — por favor, seja educado e mantenha-se no tema.
Faça login para comentar