Como organizar milhões de arquivos estáticos para servir eficientemente pela web?

4

Eu gostaria de criar um serviço para servir centenas de milhares de arquivos menores (de 5kb a 500kb, principalmente em torno de 10-100kb). Pense nisso como uma espécie de gravatar.com que serve essas pequenas fotos de avatar em URLs como link

Eu quero usar uma URL descritiva sem IDs ou hashes, por exemplo, como link Não há nomes de arquivos duplicados.

Qual seria a maneira mais eficiente de servir e organizar os arquivos com pouca sobrecarga?

Basta colocar tudo em um diretório e deixar o nginx atender os arquivos que ficarão lentos depois de uma certa quantidade de arquivos, dependendo do sistema de arquivos.

Uma ideia é salvar os arquivos em uma estrutura de diretórios simples com base nos primeiros caracteres do nome do arquivo, para que o exemplo seja exibido em T / h / Este-é-meu-arquivo.ext com uma regra de reconfiguração simples em a configuração do nginx. Isso resultaria em uma distribuição muito desigual nos diferentes diretórios. Usando valores de digamos que um md5 hash do nome do arquivo resultaria em uma boa distribuição, mas exigiria mais poder de computação ...

Eu acho que isso soa como um caso de uso perfeito para um armazenamento de valor chave, mas não é possível com apenas o sistema de arquivos e o nginx para mantê-lo simples?

    
por user168080 13.11.2013 / 22:47

1 resposta

1

Hash os nomes dos arquivos.

O documento de instruções set_md5

# You can do this:
# I didn't test this. 
location /hashed/([0-9a-f]{2})([0-9a-f]*)/(.*) {
  try_files /$1/$2/$3;
}
set_md5 $digest $request_uri;
location / {
  rewrite .* /hashed/$digest/$request_uri;
}
    
por 09.12.2014 / 20:29