Qual é o melhor sistema de arquivos para gerenciar milhões de imagens?

4

Eu estou projetando um sistema capaz de trabalhar com 15 milhões (e crescendo) arquivos de imagem que variam de 100k a 10mb. Eu estou procurando algumas opiniões sobre o que pode ser o melhor sistema de arquivos para suportar os (um pouco) requisitos estranhos:

Informações adicionais / requisitos:

  • A estrutura de diretório é certa não-opcional [1], mas devido ao design dos aplicativos que puxam esses dados, ela é relativamente imutável.
  • Os dados devem ser otimizados para leitura, o que inclui, mas pode não estar limitado a: leituras aleatórias, leituras sequenciais, listas de diretórios (alguns diretórios podem ter 30.000 diretórios ou 1.000 imagens), etc.
  • Dados adicionais serão gravados na estrutura de arquivos (novos subdiretórios, arquivos adicionais em sub-diretórios existentes, etc) em uma base semi-regular, no entanto, o desempenho de gravação não é muito preocupante. Os dados serão gravados via SMB ou NFS.
  • Existe um número significativo de arquivos idênticos (a estimativa conservadora é de 20%), no entanto, devido ao design do aplicativo que puxa esses dados, não podemos excluir os nomes de arquivos duplicados. Idealmente, gostaríamos de algum tipo de desduplicação (poderíamos certamente link hard, mas não tenho certeza de como milhões de hard links seriam escalados)
  • Os SSDs serão a principal forma de armazenamento para este projeto (a menos que um argumento possa ser feito para spinners), portanto gostaríamos de limitar as gravações ao sistema sempre que possível.

O hardware que alocamos para este projeto é o seguinte:

Dell R720xd w/ 24x 2.5” bays
RAM: 128GB RAM (more can be allocated if needed)
CPU: 2x E5-2620 @ 2.20GHz
Storage:
    8x2TB SSDs local storage
    1x500GB SSD for OS
RAID: H310 (IT Mode)

Estávamos considerando inicialmente o ZFS, mas depois de algumas pesquisas adicionais:

  • O ZFS pode vasculhar os SSDs ao gravar atualizações de metadados.
  • O ZFS tem um alto requisito de RAM para deduplicação (5 GB de RAM por 1 TB de dados). Isso deve ser possível em nosso hardware atual, parece apenas muita sobrecarga.
  • RiserFS pode ser mais adequado para pesquisa aleatória em arquivos pequenos (não consigo encontrar o que se qualifica para um arquivo "pequeno").

Quaisquer opiniões sobre um sistema de arquivos ideal para este caso de uso, bem como quaisquer ajustes de hardware, serão muito apreciadas.

[1]

Exemplo de estrutura de diretório (nenhum dos diretórios ou nomes de arquivos são normalizados (sequenciais, etc) de qualquer forma)

+ root directory 1
    - sub directory 1
        - image 1
        - image 2
        - image 3
        - ...
        - image n (where n is between 1 and 1,000+)
    - sub directory 2
        - image 1
        - image 2
        - image 3
        - ...
        - image n
    ....
    - sub directory n (where n is between 1,000 and 30,000)
        - image 1
        - image 2
        - image 3
        - ...
        - image n
+ root directory 2
+ ...
+ root directory 15
    
por Josh 27.11.2018 / 01:25

1 resposta

3

Qualquer sistema de arquivos (incluindo XFS pouco extenso e pouco XFS) pode atender aos requisitos que você listou, que são basicamente a capacidade de armazenar muitos arquivos e desempenho razoável em uma ampla variedade de casos de uso. Meu conhecimento (e os detalhes interessantes nessa resposta) é principalmente sobre o ZFS, então vou me concentrar nisso.

As habilidades adicionais que você obteria do ZFS são:

  1. Dedup. Como você disse, isso não é super maravilhoso no ZFS porque tem um requisito pesado de RAM, mas funciona. Para obter algo semelhante em não-ZFS, você poderia fazer um hash em seus arquivos e usar os hashes como nomes de arquivos / nomes de diretório, ou manter um banco de dados de hash - > nome do arquivo para que você possa criar links físicos. (Em qualquer um desses casos, você precisa ter exatamente os mesmos arquivos, não apenas as imagens com a mesma aparência).
  2. compressão. A maioria das imagens já está compactada, o que pode não ser muito valioso, mas, se elas forem RAW em vez de JPEG, isso pode representar uma grande economia. Se não, isso não vai te comprar muito.
  3. Capacidade de tirar fotos / fazer backup. O ZFS tem ótimas ferramentas internas para isso. Você também pode fazer backup de não-ZFS, embora possa ser difícil obter um instantâneo consistente de seus dados. O LVM pode fazer um pouco disso, embora possivelmente não seja bem assim.
  4. O gerenciamento de volume faz parte do ZFS. Você pode escolher entre um conjunto de configurações RAID muito flexíveis para obter a configuração ideal de [redundância de dados, uso de espaço, desempenho] para seu aplicativo específico. Você pode obter um pouco disso com o LVM e outro software RAID, mas acredito que o ZFS tenha uma das soluções mais bem projetadas para gerenciamento de volume, combinada com um sistema bem projetado para detecção e recuperação de falhas.

Duas outras coisas que você mencionou:

  • Movimentando metadados. Eu não acho que o ZFS seria pior do que outros sistemas de arquivos: ele atualiza uma boa quantidade de metadados durante as gravações, mas copia na gravação e faz essas atualizações em lotes a cada 5-10 segundos, o que significa que grandes gravações contíguas estão acontecendo em vez de pequenas gravações no local que exigem que blocos NAND sejam apagados e reescritos várias vezes. Em um sistema de arquivos tradicional, você terminará de outra maneira porque fará atualizações no local, o que provavelmente é um pouco pior. De qualquer forma, os SSDs modernos têm muitos blocos extras internamente que eles reservam para prolongar a vida útil do disco na presença de desgaste - tempos de vida normais do disco são considerados comparáveis aos tempos de vida do disco. Eu não estou dizendo que isso não importa, eu só acho que você não deveria se fixar muito nesse aspecto, já que é bem menor.
  • Escalabilidade do link físico. Deve escalar tão bem ou melhor que os arquivos normais (no ZFS ou não). De qualquer forma, um link físico é apenas um ponteiro para o mesmo inode de outro arquivo, e você provavelmente obterá uma pequena eficiência de cache, pois ler esse arquivo de um dos links fará com que ele seja armazenado em cache por acessos através de outros links. também.
por 27.11.2018 / 10:32