Um clipe GIF da dança de Rachel em "Friends" cresceu para centenas de gigabytes, derrubando os backups do Discourse

Um clipe GIF da dança de Rachel em "Friends" cresceu para centenas de gigabytes, derrubando os backups do Discourse

2 hardware

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.

Ainda não há comentários. Deixe um comentário e compartilhe sua opinião!

Para deixar um comentário, faça login.

Faça login para comentar