Comparación y selección del sistema de archivos distribuido.

1. Sistema de archivos distribuido

Sistema de archivos distribuido ( Sistema de archivos distribuido) se refiere a los recursos de almacenamiento físico administrados por el sistema de archivos que no están necesariamente conectados directamente al nodo local, sino que están conectados al nodo a través de la red informática. El diseño del sistema de archivos distribuido se basa en el modelo cliente / servidor. Una red típica puede incluir múltiples servidores para que accedan múltiples usuarios. Además, la función punto a punto permite que algunos sistemas desempeñen el doble papel de cliente y servidor. Por ejemplo, un usuario puede "publicar" un directorio al que pueden acceder otros clientes. Una vez que accede, el directorio aparece para el cliente como si fuera una unidad local.

Juzgar si un sistema de archivos distribuido es excelente depende de los siguientes tres factores:

  1. El método de almacenamiento de datos , por ejemplo, hay 10 millones de archivos de datos, puede almacenar todos los archivos de datos en un nodo, y cada nodo almacena 10 / N millones de archivos de datos en los otros N nodos como copia de seguridad; Almacenamiento, cada nodo almacena 1000 / N millones de archivos de datos. No importa qué método de almacenamiento se adopte, el propósito es garantizar que el almacenamiento de datos sea seguro y fácil de obtener.
  2. La velocidad de lectura de datos incluye responder a la solicitud del usuario de leer el archivo de datos, ubicar el nodo donde se encuentra el archivo de datos, el tiempo para leer el archivo de datos en el disco duro real, el tiempo de transmisión de datos entre diferentes nodos y el tiempo de procesamiento de algunos procesadores. Varios factores determinan la experiencia del usuario del sistema de archivos distribuido. Es decir, la velocidad de lectura de datos en el sistema de archivos distribuido no puede ser muy diferente de la velocidad de lectura de datos en el sistema de archivos local, de lo contrario, se tarda 2 segundos en abrir un archivo en el sistema de archivos local, y varios factores en el sistema de archivos distribuido Lleva más de 10 segundos afectar la experiencia del usuario.
  3. El mecanismo de seguridad de datos , debido a que los datos se encuentran dispersos en cada nodo, debe adoptar redundancia, respaldo, duplicación y otros métodos para garantizar que el nodo pueda recuperar datos en caso de falla del nodo, para garantizar la seguridad de los datos.

2. Introducción del sistema de archivos distribuido convencional

Los sistemas de archivos distribuidos principales actuales son: GFS, HDFS, Ceph, Lustre, MogileFS, MooseFS, FastDFS, TFS, GridFS, etc.

1. GFS (Sistema de archivos de Google)

El sistema de archivos distribuidos basado en Linux patentado de Google desarrollado para satisfacer las necesidades de la compañía. Aunque Google anunció algunos detalles técnicos del sistema, Google no lanzó la parte de software del sistema como software de código abierto.

2. HDFS (Sistema de archivos distribuidos de Hadoop)

Hadoop implementa un sistema de archivos distribuido, denominado HDFS. Hadoop es una biblioteca de búsqueda de texto ampliamente utilizada desarrollada por el fundador de Apache Lucene, Doug Cutting. Se originó en Apache Nutch, que es un motor de búsqueda web de código abierto y es parte del proyecto Luene. La arquitectura Aapche Hadoop es una aplicación de código abierto del algoritmo MapReduce y una piedra angular importante del imperio de Google.

Enlace de referencia:

http://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

3. Ceph

Es un sistema de archivos distribuido desarrollado por Sage Weil en la Universidad de California, Santa Cruz, mientras estudiaba para un doctorado. Y completó su tesis con Ceph.
Dado que ceph usa el sistema de archivos btrfs, el sistema de archivos btrfs requiere Linux 2.6.34 y superior para admitirlo. Ceph aún no es lo suficientemente maduro, el btrfs en el que se basa no es maduro, y su sitio web oficial establece claramente que ceph no debe usarse en un entorno de producción.

Enlace de referencia:

https://github.com/ceph/ceph

https://ceph.com

4. Lustre

Luster es un sistema de archivos de clúster a gran escala, seguro y confiable con alta disponibilidad, desarrollado y mantenido por SUN. El objetivo principal del proyecto es desarrollar un sistema de archivos de clúster de próxima generación que pueda admitir más de 10,000 nodos y contar los sistemas de almacenamiento de datos PB. En la actualidad, Lustre se ha utilizado en algunos campos, como los productos HP SFS.

Enlace de referencia:

http://lustre.org/

5. MooseFS

Es compatible con FUSE, es relativamente liviano, tiene un único punto de dependencia del servidor maestro y está escrito en perl. El rendimiento es relativamente pobre y más personas lo usan en China.

Enlace de referencia:

https://moosefs.com

https://sourceforge.net/projects/moosefs/?source=directory

https://www.cnblogs.com/hjc4025/p/9956988.html

6. MogileFS

Es un producto desarrollado por la empresa de desarrollo de memcahed, danga perl. Actualmente, mogielFS se utiliza en China para sitios de alojamiento de imágenes como yupoo. MogileFS es un conjunto de componentes eficientes de copia de seguridad automática de archivos, desarrollado por Six Apart, y ampliamente utilizado en sitios web 2.0 incluyendo LiveJournal.

Enlace de referencia:

https://github.com/mogilefs

7. FastDFS

Es un sistema de archivos distribuido de código abierto similar a Google FS, desarrollado en lenguaje C puro. FastDFS es un sistema de archivos distribuido liviano de código abierto. Maneja archivos. Las funciones incluyen: almacenamiento de archivos, sincronización de archivos, acceso a archivos (carga de archivos, descarga de archivos), etc., que resuelve los problemas de almacenamiento de gran capacidad y equilibrio de carga. Especialmente adecuado para servicios en línea que utilizan documentos como portadores, como sitios web de álbumes de fotos, sitios web de videos, etc.

Enlace de referencia:

https://github.com/happyfish100/fastdfs

https://www.cnblogs.com/shenxm/p/8459292.html

8. GlusterFS

El sistema de archivos de expansión horizontal distribuida de código abierto puede asignar rápidamente el almacenamiento de acuerdo con las necesidades de almacenamiento, contiene funciones de conmutación por error automáticas y descarta la idea de un servidor de metadatos centralizado. Un sistema de archivos de red escalable adecuado para tareas intensivas en datos, que ofrece escalabilidad, alto rendimiento y alta disponibilidad. Gluster fue adquirido por Red Hat el 7 de octubre de 2011.

Enlace de referencia:

http://www.gluster.org

https://blog.csdn.net/liuaigui/article/details/6284551

9. TFS (Sistema de archivos Taobao)

TFS es un sistema de archivos distribuidos orientado a Internet, altamente escalable, altamente disponible y de alto rendimiento, principalmente para datos no estructurados masivos. Está construido en un clúster de máquina Linux común y puede proporcionar alta confiabilidad y alta concurrencia para el mundo exterior. Acceso al almacenamiento. TFS proporciona una gran cantidad de almacenamiento de archivos pequeños para Taobao, por lo general, el tamaño del archivo no supera 1M, lo que satisface la demanda de Taobao para el almacenamiento de archivos pequeños, y es ampliamente utilizado en diversas aplicaciones de Taobao. Utiliza la arquitectura HA y la expansión sin problemas, lo que garantiza la disponibilidad y la escalabilidad de todo el sistema de archivos. Al mismo tiempo, la estructura de organización de datos planos puede asignar el nombre del archivo a la dirección física del archivo, simplificando el proceso de acceso al archivo y proporcionando a TFS un buen rendimiento de lectura y escritura en cierta medida.

Enlace de referencia:

http://code.taobao.org/p/tfs/src/

10. GridFS

MongoDB es una conocida base de datos NoSql. GridFS es una función incorporada de MongoDB. Proporciona un conjunto de API de operación de archivos para usar MongoDB para almacenar archivos. El principio básico de GridFS es almacenar archivos en dos colecciones, una para guardar el índice de archivos, Uno guarda el contenido del archivo, el contenido del archivo se divide en varios bloques de acuerdo con un determinado tamaño y cada bloque se almacena en un documento. Este método no solo proporciona almacenamiento de archivos, sino que también proporciona algunos atributos adicionales relacionados con el archivo (como el valor MD5, el nombre del archivo, etc.) Almacenamiento. Los archivos en GridFS se almacenarán en bloques de 4 MB.

Enlace de referencia:

https://docs.mongodb.com/manual/core/gridfs

En tercer lugar, la comparación de los sistemas de archivos distribuidos.

1. Comparación exhaustiva

Sistema de archivos Desarrollador Lenguaje de desarrollo Acuerdo de código abierto Facilidad de uso Escena aplicable Caracteristicas Desventajas
GFS                  Google                              No es de código abierto                                                
HDFS apache Java apache Instalación simple y documentación oficial profesional. Almacenar archivos muy grandes Gran cantidad de datos de lectura y escritura, alto rendimiento; escriba una vez, lea muchas veces, lea y escriba secuencialmente Difícil de cumplir con el acceso a datos de baja latencia a nivel de milisegundos; no es compatible con varios usuarios que escriben el mismo archivo simultáneamente; no es adecuado para una gran cantidad de archivos pequeños
Ceph Sage Weil, Universidad de California, Santa Cruz C ++ LGPL Instalación simple y documentación oficial profesional. Clúster único de archivos grandes, medianos y pequeños. Distribuido, sin punto único de dependencia, escrito en C, buen rendimiento Basado en btrfs inmaduros, no es lo suficientemente maduro y estable por sí mismo, no se recomienda su uso en entornos de producción.
Lustre DOM C GPL Complejo y muy dependiente del núcleo, el núcleo necesita ser recompilado Leer y escribir archivos grandes Productos de nivel empresarial, muy grandes, muy dependientes del kernel y ext3
MooseFS Core Sp. zoo C GPL v3 Instalación simple, muchos documentos oficiales y una interfaz web para administrar y monitorear Leer y escribir una gran cantidad de archivos pequeños Ligero, escrito en perl, más personas lo usan en China Hay un único punto de dependencia del servidor maestro, el rendimiento es relativamente pobre
MogileFS Danga Interactive Perl GPL Se utiliza principalmente en el campo web para manejar imágenes pequeñas masivas Sistema de metarchivos de tipo clave-valor; eficiencia mucho mayor que mooseFS No es compatible con FUSE
FastDFS Desarrollador nacional Yu Qing C GPL v3 Instalación simple y comunidad relativamente activa. Archivos pequeños y medianos para un solo clúster El sistema no necesita admitir POSIX, lo que reduce la complejidad del sistema y mejora la eficiencia del procesamiento; implementa RAID suave, mejora la capacidad de procesamiento concurrente del sistema y la capacidad de recuperación de tolerancia a fallas de datos; admite archivos maestro-esclavo, admite extensiones personalizadas; Mejora la disponibilidad del sistema No admite reanudar el punto de interrupción, no es adecuado para el almacenamiento de archivos grandes; no admite POSIX, baja versatilidad; sincronización de archivos en la red pública, hay un gran retraso, la necesidad de aplicar la estrategia de tolerancia a fallos correspondiente; el mecanismo de sincronización no admite la corrección de archivos Verificación; descarga a través de API, hay un único punto de cuello de botella de rendimiento
GlusterFS INVESTIGACIÓN Z C GPL v3 Instalación simple y documentación oficial profesional. Adecuado para archivos grandes, todavía hay mucho espacio para la optimización del rendimiento de archivos pequeños Sin servidor de metadatos, arquitectura de pila (los módulos de funciones básicas se pueden apilar en combinación para lograr funciones potentes), con capacidad de escalamiento lineal; más grande que mooseFS Como no hay un servidor de metadatos, aumenta la carga en el cliente, que ocupa una cantidad considerable de CPU y memoria; pero al atravesar el directorio de archivos, es más complicado e ineficiente, y es necesario buscar en todos los nodos de almacenamiento, y no se recomienda utilizar una ruta más profunda
TFS Alibaba C ++ LPG V2 Instalación compleja y pocos documentos oficiales. Pequeños archivos en grupos Diseñado para archivos pequeños, el rendimiento de IO aleatorio es relativamente alto; implementa RAID suave, mejora la capacidad de procesamiento concurrente del sistema y la capacidad de recuperación tolerante a fallas de datos; admite intercambio en caliente maestro-esclavo, mejora la disponibilidad del sistema; admite implementación de clúster maestro-esclavo y clústeres esclavos Proporcionar función de lectura / espera No es adecuado para el almacenamiento de archivos grandes; no es compatible con POSIX y tiene poca versatilidad; no es compatible con la estructura de directorios personalizada y el control de permisos de archivos; descarga a través de API, hay un único punto de cuello de botella de rendimiento; pocos documentos oficiales, alto costo de aprendizaje
GridFS MongoDB C++ 安装简单 通常用来处理大文件(超过16M) 可以访问部分文件,而不用向内存中加载全部文件,从而保持高性能;文件和元数据自动同步

2. 特性对比

文件系统 数据存储方式 集群节点通讯协议 专用元数据存储点 在线扩容 冗余备份 单点故障 跨集群同步 FUSE挂载 访问接口
HDFS              文件 私有协议(TCP) 占用MDS 支持 存在 不支持 支持 不支持POSIX
Ceph 对象/文件/块 私有协议(TCP) 占用MDS 支持 支持 存在 不支持 支持 POSIX
Lustre 对象 私有协议(TCP)/ RDAM(远程直接访问内存) 双MDS 支持 不支持 存在 未知 支持 POSIX/MPI
MooseFS 私有协议(TCP) 占用MFS 支持 支持 存在 不支持 支持 POSIX
MogileFS 文件 HTTP 占用DB 支持 不支持 存在 不支持 不支持 不支持POSIX
FastDFS 文件/块 私有协议(TCP) 支持 支持 不存在 部分支持 不支持 不支持POSIX
GlusterFS 文件/块 私有协议(TCP)/RDAM(远程直接访问内存) 支持 支持 不存在 支持 支持 POSIX
TFS 文件 私有协议(TCP) 占用NS 支持 支持 存在 支持 未知 不支持POSIX

什么是POSIX?

POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),也就是Unix下应用程序共同遵循的一种规范。支持POSIX的应用程序意味着在各个Unix系统间提供了跨平台运行的支持。

四、选型参考

1. 按特性分类

适合做通用文件系统的有:Ceph,Lustre,MooseFS,GlusterFS;

适合做小文件存储的文件系统有:Ceph,MooseFS,MogileFS,FastDFS,TFS;

适合做大文件存储的文件系统有:HDFS,Ceph,Lustre,GlusterFS,GridFS;

轻量级文件系统有:MooseFS,FastDFS;

简单易用,用户数量活跃的文件系统有:MooseFS,MogileFS,FastDFS,GlusterFS;

支持FUSE挂载的文件系统有:HDFS,Ceph,Lustre,MooseFS,GlusterFS。

2. 初步筛选

考虑到GFS不开源,学习成本高,且相关特性资料不全面的情况下,暂时先不考虑使用GFS;

Ceph目前不够成熟稳定,很少有使用在生产环境的案例,暂时排除;

Lustre对内核依赖程度过重,且不易安装使用,暂时排除;

TFS安装复杂,且官方文档少,不利于以后的学习使用,暂时先排除;

经初步筛选剩下的文件系统有:HDFS、MooseFS、MogileFS、FastDFS、GlusterFS、GridFS。

3. 根据需求分析进一步筛选

需求

  • 需要搭建一部管理原始凭证的文件系统,原始凭证的文件类型主要是小图片,写操作量少,读操作量大,且对安全性要求较高。
  • 随着系统在使用过程中数据量逐步庞大,图片的量会变得繁多,对图片读取速率要求尽可能高但不追求极致(无需到毫秒级)。
  • 文件系统需要有较完善的冗余备份与容错机制,功能尽量精简耐用,安装配置应简单且适合于国产环境部署。

分析

  1. 根据需求,首选需要选择适合海量小图片存储的文件系统,适合的文件系统有:MooseFS,MogileFS,FastDFS。

  2. 其次需要支持冗余备份,适合的文件系统有:MooseFS、FastDFS、GlusterFS。

  3. 符合条件1,2且功能精简的文件系统有:FastDFS。

  4. 符合条件1,2且功能全面的文件系统有:MooseFS。

总结

MooseFS功能较为全面,支持在线扩容、冗余备份、FUSE挂载和POSIX访问接口,不支持跨集群同步,存在单点故障,性能相对较差。

FastDFS功能精简,支持在线扩容、冗余备份,部分支持跨集群同步,不支持FUSE挂载和POSIX访问接口,不存在单点故障,性能较好。

提供的建议选型参考为FastDFS或MooseFS,可根据需求的细化进一步分析选取。

备注:此选型参考提供的是分布式文件系统的选型建议,根据系统需求也可选择NFS等其他更合适的文件系统类型;此选型参考仅局限于分析范围内的文件系统,仍然有其他类型的文件系统可能是更好的选择;此选型参考中没有确切的性能测试数据作为对比,无法提供性能方面的精确比较。

五、参考文献

开源分布式存储系统的对比 [http://my.525.life/article?id=1510739742054]

分布式文件系统MFS、Ceph、GlusterFS、Lustre的对比 [https://www.cnblogs.com/zhiguo/p/3334993.html]

使用 FUSE 开发自己的文件系统 [https://www.ibm.com/developerworks/cn/linux/l-fuse]

发布了40 篇原创文章 · 获赞 25 · 访问量 10万+

Supongo que te gusta

Origin blog.csdn.net/yym373872996/article/details/105650908
Recomendado
Clasificación