Mejores prácticas para almacenar cantidades realmente grandes de imágenes cargadas por usuarios

Mejores prácticas para almacenar cantidades realmente grandes de imágenes cargadas por usuarios

Actualmente tenemos un sitio web con tecnología Django que permite a los usuarios cargar muchas imágenes. Todo lo cual se almacena en nuestro servidor en un único disco duro. El problema es que poco a poco alcanzamos la capacidad máxima de los discos duros disponibles, por lo que el escalado vertical ya no es una opción.

Hasta donde yo sé, Amazon S3/CloudFront no tiene ese límite; sin embargo, para sitios con mucho tráfico, estos servicios son mucho más caros que nuestro propio rack de servidores. ¿Existe alguna práctica recomendada para dividir las cargas en varios discos en nuestro propio entorno?

Respuesta1

Esto es malo: en un entorno de servidor donde el contenido de los datos es importante, al menos debería usar RAID para mitigar el riesgo significativo de falla del disco, y RAID también es una respuesta a su problema de almacenamiento. Puede utilizar una matriz RAID para aumentar la capacidad de su almacenamiento. (RAID se utiliza para tomar varios discos para proporcionar un único disco virtual, con diferentes características de rendimiento y redundancia)

También hay otras tecnologías que realmente necesita conocer y utilizar: no ha especificado su sistema operativo, pero con suerte es una variante de Linux, en cuyo caso debería buscar LVM, que maneja la administración de discos y, entre otras cosas, tiene la capacidad de fusionar varios discos en un solo disco virtual, por debajo del nivel del sistema operativo.

Por supuesto, también puedes mirar cosas como SANS, que normalmente toman varios discos y pueden fusionarlos en un único disco duro externo grande.

Respuesta2

Suponiendo que desee evitar los servicios basados ​​en la nube, el enfoque tradicional de las grandes empresas es adquirir hardware o software que pueda fusionar muchos discos separados en un único sistema de archivos lógico. Hay muchas formas posibles de hacer esto. Voy a enumerar algunos:

  • El uso de sistemas de archivos distribuidos como glusterfs le permitirá tener múltiples servidores, cada uno con su propia CPU, RAM y almacenamiento, y tener un único sistema de archivos lógico compartido entre todos ellos.

  • También puede llevar este concepto distribuido un paso más allá y agrupar todo el sistema, desde la sopa hasta la nuez, de modo que parezca que está ejecutando una computadora lógica, cuando en realidad se trata de una serie de computadoras en red estrechamente unidas por la cadera (preferiblemente a través de algunas redes de muy alta velocidad).

  • Puede ahorrar en la compra de placas base, chasis, CPU, RAM, etc. adquiriendo un "servidor de almacenamiento", que es un servidor de nivel empresarial moderadamente potente que se conecta a muchos discos duros, ya sea instalado directamente en el chasis o conectado. a través de canal de fibra o SAS a un bastidor de almacenamiento externo, que a veces contiene discos duros con un número de 60 a incluso más. En estas configuraciones, los discos duros generalmente se unen en un dispositivo lógico mediante un controlador RAID de hardware o una placa posterior. Por supuesto, este método eventualmente alcanzará un máximo. capacidad si tiene todos los discos que pueda caber en un solo bastidor con la densidad máxima de discos, en cuyo caso podría ampliar teniendo una capa de sistema de archivos o un clúster de capa de sistema de estos servidores de almacenamiento.

Dependiendo del tamaño exacto de almacenamiento que espera necesitar en los próximos Naños (donde N es la cantidad de años que está dispuesto a planificar con anticipación), algunas de estas soluciones serán más costosas o más difíciles de administrar que otras.

En el ejemplo extremo de necesitar muchos miles de terabytes de almacenamiento redundante, en la escala de lo que Amazon S3 ofrece a sus clientes intermedios, es necesario tener algún tipo de sistema de clúster, generalmente con infraestructura centralizada para administrarlo. En estos casos, una conexión en red muy rápida entre nodos es fundamental para mantener un buen rendimiento. Definitivamente busque Ethernet 10G como mínimo.

A juzgar por el hecho de que dijiste que actualmente estás ejecutandoun solo disco duroSin embargo, la forma más económica de escalar desde aquí sin exagerar la escala sería comprar un servidor 2U o 3U que pueda contener de 4 a 8 discos duros y colocar un montón de discos allí en RAID. RAID10, RAID5 y RAID6 son configuraciones bastante comunes para esta cantidad de discos, pero si opta por RAID5/RAID6, asegúrese de utilizar un controlador RAID de hardware para evitar una carga indebida de la CPU.

Probablemente pueda ampliar hasta aproximadamente 16 TB de almacenamiento utilizable (con redundancia) usando este método y los discos disponibles actualmente, pero tenga en cuenta que los discos de mayor capacidad también tienden a ser más lentos, con menor rendimiento y mayores tiempos de respuesta, razón por la cual muy Los sitios con mucho tráfico tienden a utilizar discos con menor capacidad... lo que por supuesto significa que necesitarás másdepara lograr la misma capacidad utilizable. :/

información relacionada