¿Las rejillas son lo suficientemente rápidas y fiables para la producción?


Desarrollo un nuevo sitio web y quiero usar GridFS como almacenamiento para todas las cargas de los usuarios, porque ofrece muchas ventajas en comparación con un almacenamiento de sistema de archivos normal.

Los puntos de referencia con cuadrículas servidas por nginx indican que no es tan rápido como un sistema de archivos normal servido por nginx.

Parámetro de referencia con nginx

¿Hay alguien por ahí, que ya usa GridFS en un entorno de producción, o lo usaría para un nuevo proyecto?

Author: Railsmechanic, 2010-08-05

5 answers

Uso gridfs en el trabajo en uno de nuestros servidores que es parte de un sitio web de comparación de precios con estadísticas de tráfico honorables (alrededor de 25k visitantes por día). El servidor no tiene mucha ram, 2gigs, e incluso la cpu no es realmente rápida (Core 2 duo 1.8 Ghz), pero el servidor tiene mucho espacio de almacenamiento : 10Tb (sata) en la configuración raid 0. El trabajo que está haciendo el servidor es muy simple:

Cada producto en nuestro comparador de precios tiene una imagen (hay alrededor de 10 millones de productos de acuerdo con nuestra base de datos de productos), y el trabajo de los servidores es descargar la imagen, redimensionarla, almacenarla en cuadrículas y entregarla al navegador de los visitantes... si no está presente en la red... o... entréguelo al navegador de visitantes si ya está almacenado en la cuadrícula. Por lo tanto, esto podría llamarse como un 'esquema cdn tradicional'.

Hemos almacenado y procesado 4 millones de imágenes en este servidor desde que está en funcionamiento. Las cosas de redimensionar y almacenar se realizan mediante un simple script php... pero seguro, un script python, o algo como Java podría ser más rápido.

Tamaño actual de los datos : 11.23 g

Tamaño de almacenamiento actual: 12.5 g

Índices: 5

Tamaño del índice: 849.65 m

Acerca de la confiabilidad : Esto es muy confiable. El servidor no carga, el tamaño del índice está bien, las consultas son rápidas

Acerca de la velocidad : Por supuesto, no es tan rápido como el almacenamiento de archivos locales, tal vez un 10% más lento, pero lo suficientemente rápido como para ser utilizado en tiempo real incluso cuando la imagen necesita ser procesada, que en nuestro caso, es muy dependiente de php. Los tiempos de mantenimiento y desarrollo también se han reducido: se hizo tan simple eliminar una sola o varias imágenes : simplemente consulte la base de datos con un simple comando de eliminación. Otra cosa interesante : cuando reiniciamos nuestro antiguo servidor, con almacenamiento local de archivos (por lo que millones de archivos en miles de carpetas), a veces se cuelga durante horas porque el sistema estaba realizando una comprobación de integridad de archivos (esto realmente tomó horas...). Ya no tenemos este problema con gridfs, nuestras imágenes ahora se almacenan en grandes mongodb chunks (archivos de 2gb)

So... en mi mente... Sí, gridfs es lo suficientemente rápido y confiable como para ser utilizado para la producción.

 111
Author: Manu Eidenberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-09 15:01:10

Como se mencionó, puede que no sea tan rápido como un sistema de archivos ordinario, pero entonces le da ventajas man sobre sistemas de archivos ordinarios que creo que vale la pena renunciar a un poco de velocidad para.

En última instancia, con el sharding, puede llegar a un punto donde el almacenamiento de GridFS realmente se convierte en la opción más rápida en comparación con un sistema de archivos ordinario y un solo nodo.

 12
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-31 11:27:15

El módulo nginx-gridfs de Mdirolf es genial y bastante fácil de configurar. Lo estamos usando en producción en paint.ly para servir a todas las pinturas y no ha habido problemas hasta ahora.

 5
Author: schallis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-26 00:02:58

Heads-up en reparaciones para DBs más grandes, sin embargo, un nuevo sistema que estamos desarrollando, mongo no salió limpiamente, y la reparación de las cuadrículas de 7 TB parece que tomará 130 horas.

Debido a esto, creo que voy a mirar el cambio a OpenStack Swift o Ceph. Aún así, hasta entonces era bueno. Y el módulo nginx-gridfs es dulce.

 5
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 23:00:36

No recomiendo usar gridfs a menos que sepa lo que está haciendo. GridFS es solo una capa de abstracción que divide los archivos en trozos y almacena los archivos en dos colecciones. Más archivos - más sobrecarga. Si espera que los archivos sean bastante del mismo tamaño, no excediendo los 32M o más, está en el camino correcto. No intente almacenar archivos grandes en cuadrículas. ¿Por qué?

  1. Los controladores en diferentes idiomas pueden leer todo el archivo.(por ejemplo, trozos) al leer la pequeña parte del archivo.
  2. Modificando el archivo puede afectar a todos los trozos y aumentar la carga de la base de datos Si su sistema de archivos está creciendo, tendrá que decidir dividir las cuadrículas. ¡Ten cuidado! ¡La consistencia no está garantizada cuando se inicializa el sharding!

Si piensa en leer el proyecto cargado, considere cargar los archivos en documentos directamente (si tiene un tamaño de 16 m o menos) o elija otro clusterfs y vincule el nombre de archivo/inodo a su lógica.

Espero que esto ayude.

 2
Author: Vitaly Greck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-03 18:33:47