Prática recomendada para armazenar grandes quantidades de imagens enviadas por usuários

Prática recomendada para armazenar grandes quantidades de imagens enviadas por usuários

Atualmente temos um site desenvolvido com Django que permite aos usuários fazer upload de muitas imagens. Todos eles são armazenados em nosso servidor em um único disco rígido. O problema é: lentamente atingimos a capacidade máxima dos discos rígidos disponíveis, portanto o dimensionamento vertical não é mais uma opção.

Até onde eu sei, o Amazon S3/CloudFront não tem esse limite, no entanto, para sites de alto tráfego, esses serviços são muito mais caros do que o nosso próprio rack de servidor. Existe uma prática recomendada para dividir os uploads em vários discos em nosso próprio ambiente?

Responder1

Isso é ruim - em um ambiente de servidor onde o conteúdo dos dados é importante, você deve pelo menos usar o RAID para mitigar o risco significativo de falha do disco - e o RAID também é uma resposta para o seu problema de armazenamento. Você pode usar uma matriz RAID para aumentar a capacidade do seu armazenamento. (RAID é usado para usar vários discos para fornecer um único disco virtual, com características de desempenho e redundância variadas)

Existem também outras tecnologias que você realmente precisa conhecer e usar - você não especificou seu sistema operacional, mas esperamos que seja uma variante do Linux - nesse caso, você deve procurar o LVM, que lida com o gerenciamento de disco e, entre outras coisas, tem o capacidade de mesclar vários discos em um único disco virtual - abaixo do nível do sistema operacional.

Claro, você também pode olhar para coisas como SANS, que normalmente usa vários discos e pode mesclá-los em um único disco rígido externo grande.

Responder2

Supondo que você queira evitar serviços baseados em nuvem, a abordagem tradicional das grandes empresas é adquirir hardware ou software que possa mesclar muitos discos separados em um único sistema de arquivos lógico. Existem muitas maneiras possíveis de fazer isso. Vou enumerar alguns:

  • O uso de sistemas de arquivos distribuídos, como o glusterfs, permitirá que você tenha vários servidores, cada um com sua própria CPU, RAM e armazenamento, e tenha um único sistema de arquivos lógico compartilhado entre todos eles.

  • Você também pode levar esse conceito distribuído um passo adiante e agrupar todo o sistema, do zero, para que pareça que você está executando um computador lógico, quando na verdade é uma série de computadores em rede estreitamente unidos pelo quadril (de preferência via algumas redes de altíssima velocidade).

  • Você pode economizar na compra de placas-mãe, chassis, CPUs, RAM, etc. adquirindo um "servidor de armazenamento", que é um servidor de nível empresarial moderadamente poderoso conectado a muitos discos rígidos - instalado diretamente no chassi ou conectado via Fibre Channel ou SAS para um rack de armazenamento externo, às vezes contendo discos rígidos com numeração de 60 até mais. Nessas configurações, os discos rígidos geralmente são unidos em um dispositivo lógico usando um controlador RAID de hardware ou backplane. Claro, este método acabará por atingir um máximo. capacidade se você tiver todos os discos, você pode caber em um único rack com a densidade máxima de disco; nesse caso, você pode aumentar a escala tendo um cluster de camada de sistema de arquivos ou de camada de sistema desses servidores de armazenamento.

Dependendo do tamanho exato do armazenamento que você espera precisar nos próximos Nanos (onde N é o número de anos que você deseja planejar com antecedência), algumas dessas soluções serão mais caras ou mais difíceis de administrar do que outras.

No exemplo extremo da necessidade de muitos milhares de terabytes de armazenamento redundante, na escala que o Amazon S3 fornece aos seus clientes downstream, é praticamente necessário ter algum tipo de sistema de cluster, geralmente com infraestrutura centralizada para gerenciá-lo. Nestes casos, uma rede entre nós muito rápida é fundamental para manter um bom desempenho. Definitivamente, procure uma Ethernet 10G, no mínimo.

A julgar pelo fato de você ter dito que está atualmente executandoum único disco rígidoNo entanto, a maneira mais econômica de aumentar a escala a partir daqui sem aumentar sua escala seria comprar um servidor 2U ou 3U que possa conter de 4 a 8 discos rígidos e colocar vários discos nele no RAID. RAID10, RAID5 e RAID6 são configurações bastante comuns para esse número de discos, mas se você optar por RAID5/RAID6, certifique-se de usar um controlador RAID de hardware para evitar carga indevida da CPU.

Você provavelmente pode escalar até cerca de 16 TB de armazenamento utilizável (com redundância) usando esse método e os discos disponíveis atualmente, mas esteja ciente de que os discos de maior capacidade também tendem a ser mais lentos, com menor rendimento e tempos de resposta mais altos, e é por isso que é muito sites de alto tráfego tendem a usar discos com capacidade menor... o que obviamente significa que você precisará de maisdepara que atinjam a mesma capacidade utilizável. :/

informação relacionada