
Tenemos 3 carpetas en una máquina Ubuntu 14.04, cada una de las cuales contiene 250.000 imágenes con un tamaño de 2 KB-30 KB en cada carpeta, y esperamos crecer hasta 1 millón de archivos por directorio.
Mientras intentamos escalar la aplicación a varios servidores, buscamos en Glusterfs un almacenamiento compartido. Como los archivos de 250K no son un problema en ext4, parece ser problemático para glusterfs. Al intentar copiar los archivos, la máquina se bloquea por completo.
Estoy buscando particionar los archivos en directorios en 2 niveles:
mkdir -p {000..255}/{000..255}
/000/000/filename
/001/000/filename
/001/001/filename
...
¿Suena esto como una buena manera factible? Toda la estructura contendrá millones de archivos más adelante. ¿Permitiría esto que glusterfs sea confiable en producción con un buen rendimiento y aloje millones de archivos?
Respuesta1
Usar GlusterFS para almacenar y acceder a muchísimos archivos muy pequeños es una dificultad que enfrentan muchas implementaciones, y parece que ya está en un buen camino para resolver el problema: dividir los archivos en directorios separados.
Podrías implementar una solución como esa. Simplemente cree un montón de directorios, elija un límite para la cantidad de archivos que pueden caber en cada directorio y espere no quedarse sin lugares para colocar archivos. En su ejemplo, está creando más de 65.000 directorios, por lo que no es probable que eso sea un problema en el corto plazo.
Otra opción es crear directorios según la fecha en que se crea un archivo. Por ejemplo, si el archivo cust_logo_xad.png
se creó hoy, se almacenaría aquí:
/gluster/files/2015/08/24/cust_logo_xad.png
Si aloja datos para diferentes entidades (clientes, departamentos, etc.), puede separar los archivos según la propiedad, asignando a la entidad una identificación única de algún tipo. Por ejemplo:
/gluster/files/ry/ry7eg4k/cust_logo_xad.png
Más allá de eso, sería una buena idea echar un vistazo aDocumentación de GlusterFS para ajustar el clúster de almacenamiento para alojar archivos pequeños. Como mínimo asegúrese de que:
- Los sistemas de archivos en los servidores de almacenamiento GlusterFS tienen suficientes inodos libres disponibles (
mkfs
opción) - Las unidades de los servidores de almacenamiento GlusterFS pueden manejar muchos IOP.
- Utiliza un sistema de archivos apropiado para la tarea (ya sea ext4 o xfs)
- Su aplicación/personal no intenta escanear directorios con muchos archivos pequeños con frecuencia.
Si puede (y si aún no lo ha hecho), es una buena idea crear una base de datos que actúe como índice de los archivos, en lugar de tener que escanear (p. ej. ls
) o buscar (p. ej find
.) archivos todo el tiempo.