Prática recomendada para armazenar grandes quantidades de imagens carregadas pelo usuário

1

Atualmente, temos um site com Django que permite que os usuários façam upload de muitas imagens. Todos os quais são armazenados em nosso servidor em um único disco rígido. O problema é: lentamente atingimos a capacidade máxima de discos rígidos disponíveis, assim, o escalonamento 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?

    
por Simon Steinberger 06.12.2013 / 23:16

2 respostas

2

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

Há 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 estar olhando para o LVM que lida com gerenciamento de disco e, entre outras coisas , tem a capacidade de mesclar vários discos em um único disco virtual - abaixo do nível do SO.

Naturalmente, você também pode ver coisas como SANS, que geralmente usam vários discos e podem mesclá-los em um único disco rígido externo grande.

    
por 06.12.2013 / 23:46
3

Supondo que você queira evitar serviços baseados em nuvem, a abordagem tradicional de grande empresa é 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 além e agrupar todo o sistema, sopa em porcas, de modo que pareça que você está executando um computador lógico, quando na verdade é uma série de computadores em rede no quadril (de preferência através de redes de muito alta velocidade).

  • Você pode economizar na compra de placas-mãe, chassii, CPUs, RAM, etc., adquirindo um "servidor de armazenamento", que é um servidor corporativo moderadamente poderoso que está conectado a vários discos rígidos - instalado diretamente. no rack, ou conectado via fibre channel ou SAS a um rack de armazenamento externo, às vezes contendo discos rígidos de 60 a até mais. Nessas configurações, os discos rígidos são geralmente unidos em um dispositivo lógico usando um controlador RAID de hardware ou um backplane. Claro, este método acabará por atingir um máximo. capacidade, se você tiver todos os discos que você pode caber em um único rack na densidade máxima do disco, caso em que você pode escalar tendo um cluster de camada de sistema ou camada de sistema desses servidores de armazenamento.

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

No exemplo extremo de precisar de muitos milhares de terabytes de armazenamento redundante, na escala do que o Amazon S3 oferece aos seus clientes de downstream, você praticamente precisa ter algum tipo de sistema de cluster, geralmente com infraestrutura centralizada para gerenciá-lo. Nesses casos, uma rede inter-node muito rápida é essencial para manter um bom desempenho. Definitivamente, olhe para o 10G ethernet no mínimo.

A julgar pelo fato de que você disse que atualmente está rodando em um único disco rígido , a maneira mais econômica de escalar a partir daqui sem aumentar sua escala fora de proporção seria compre um servidor 2U ou 3U que consiga armazenar 4 a 8 discos rígidos e coloque um monte de discos no RAID. RAID10, RAID5 e RAID6 são configurações bastante comuns para esse número de discos, mas se você for com RAID5 / RAID6, certifique-se de usar um controlador RAID de hardware para evitar a carga indevida da CPU.

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

    
por 06.12.2013 / 23:48