Mecanismo de trabajo FastDFS y análisis de ventajas y desventajas

1. Introducción a FastDFS

FastDFS es un sistema de archivos distribuido liviano de código abierto, primero escrito en ali, escrito por Yu Qing, un arquitecto de Easy Road Vehicles. Se implementa en lenguaje C puro y es compatible con sistemas Linux como Linux, FreeBSD y AIX. FastDFS está hecho a medida para aplicaciones de Internet, persigue un alto rendimiento y una gran escalabilidad, y es más adecuado para servicios de almacenamiento de archivos distribuidos a nivel de aplicación. Solo puede acceder y acceder a archivos a través de una API patentada, no es compatible con el modo de interfaz POSIX y es menos versátil.

En términos de soporte de idiomas, actualmente se proporcionan API para C, java, php y .NET.

Ahora se usa en jd, taobao, 58, uc, 51cto.

2. Usos de FastDFS

1) FastDFS resuelve principalmente los problemas de almacenamiento de archivos de gran capacidad y alto acceso concurrente, y logra el equilibrio de carga durante el acceso a archivos.

2) FastDFS implementa RAID de software, que puede almacenarse utilizando discos duros IDE económicos y admite la expansión en línea de servidores de almacenamiento.

3) FastDFS es especialmente adecuado para sitios web grandes y medianos para almacenar archivos de recursos (como imágenes, documentos, audio, video, etc.).

3. Mecanismo de trabajo de FastDFS

1. Diagrama de arquitectura de clúster

Inserte la descripción de la imagen aquí

FastDFS arquitectura de cluster por el servidor de seguimiento (servidor tracker), servidor de almacenamiento (servidor de almacenamiento) y clientes (cliente) de tres partes.

servidor rastreador : principalmente realiza trabajos de programación, desempeña un papel de equilibrio de carga durante el acceso, registra la información de estado del grupo y el servidor de almacenamiento en el clúster en la memoria, es el centro que conecta el cliente y el servidor de almacenamiento, porque la información relevante está en la memoria, el servidor rastreador El rendimiento es muy alto (requiere muy poca carga), y 3 en un clúster más grande (como cientos de grupos) es suficiente.

Servidor de almacenamiento : los archivos y los atributos de archivo (como los metadatos) se almacenan en el servidor.Los servicios de almacenamiento incluyen almacenamiento de archivos, sincronización de archivos, interfaz de acceso a archivos y gestión de metadatos de archivos por valor clave.

Interpretación de la arquitectura FastDFS

  • Dos roles, servidor de seguimiento y servidor de almacenamiento, no necesitan almacenar información de índice de archivo.
  • Todos los servidores son de igual a igual y no existe una relación maestro-esclavo.
  • Los servidores de almacenamiento están agrupados y los archivos en los servidores de almacenamiento en el mismo grupo son idénticos (RAID 1).
  • En el clúster de almacenamiento, el grupo (o volumen) y el grupo no son independientes entre sí. El almacenamiento informa activamente el estado al rastreador. La capacidad acumulativa de todos los grupos es la capacidad de archivo de todo el sistema de almacenamiento. Un grupo puede constar de una o más unidades. El servidor de almacenamiento consta de los mismos archivos en todos los servidores de almacenamiento individuales en un grupo. Varios servidores de almacenamiento en un grupo desempeñan el papel de copia de seguridad redundante y equilibrio de carga. Al agregar servidores en el grupo, los existentes se sincronizan. El sistema completa automáticamente el archivo. Después de que se completa la sincronización, el sistema cambia automáticamente el servidor recién agregado para proporcionar servicios en línea. Cuando el espacio de almacenamiento es insuficiente o está a punto de agotarse, el grupo puede agregarse dinámicamente. Se configuran como un nuevo grupo, que amplía la capacidad del sistema de almacenamiento.
  • Para ampliar la capacidad de todo el clúster FastDFS, simplemente agregue un grupo al almacenamiento.

2. Mecanismo de carga y descarga

2.1 Mecanismo de carga

Inserte la descripción de la imagen aquí

1. Seleccione el servidor rastreador

Cuando hay más de un servidor rastreador en el clúster, debido a que los rastreadores son completamente iguales, el cliente puede elegir un rastreador al cargar archivos.
Seleccione el grupo almacenado
Cuando el rastreador recibe la solicitud de carga del archivo, asignará un grupo al archivo que puede almacenar el archivo. Se admiten las siguientes reglas para seleccionar un grupo:

  • 1. Round Robin, encuestas entre todos los grupos.
  • 2. Grupo especificado, especifique un grupo determinado
  • 3. Balance de carga, más prioridad de grupo de almacenamiento

2. Seleccione el servidor de almacenamiento

Cuando se selecciona el grupo, el rastreador seleccionará un servidor de almacenamiento en el grupo para el cliente, admitiendo las siguientes reglas para seleccionar el almacenamiento:

  • 1. Round robin, encuesta entre todos los almacenamientos en el grupo
  • 2. Primer servidor ordenado por ip, ordenar por ip
  • 3. Primer servidor ordenado por prioridad, ordenado por prioridad (la prioridad se configura en el almacenamiento)

3. Elija la ruta de almacenamiento

Cuando se asigna el servidor de almacenamiento, el cliente enviará una solicitud de escritura de archivo al almacenamiento, y el almacenamiento asignará un directorio de almacenamiento de datos para el archivo, que admite las siguientes reglas:

  • 1. Round robin, sondeo entre múltiples directorios de almacenamiento
  • 2. Prioridad con el mayor espacio de almacenamiento restante

4. Genere el nombre del archivo

Después de seleccionar el directorio de almacenamiento, el almacenamiento generará un nombre de archivo para el archivo, que es generado por la dirección IP del servidor de almacenamiento, el tiempo de creación del archivo, el tamaño del archivo, el código de verificación del archivo y un número aleatorio.

Elija dos niveles de directorios. Hay dos niveles de subdirectorios de 256 * 256 en cada directorio de almacenamiento. El almacenamiento se dividirá dos veces según el nombre del archivo, se dirigirá a uno de los subdirectorios y luego almacenará los archivos en el subdirectorio.

5. Generar índice de archivo

Cuando el archivo se almacena en un subdirectorio, se considera que el archivo se almacena correctamente y, a continuación, se genera un índice de archivo, Fileid, para el archivo. Fileid se compone de grupo, directorio de almacenamiento, subdirectorio de dos niveles, nombre de archivo, nombre de sufijo de archivo (especificado por el cliente, utilizado principalmente para distinguir los tipos de archivo).

2.2 Mecanismo de descarga

Inserte la descripción de la imagen aquí

El cliente trae la información del nombre del archivo y solicita al servicio de Rastreador que obtenga la dirección IP y el puerto del servidor de almacenamiento. El cliente luego solicita descargar el archivo en función de la dirección IP y el número de puerto devueltos. El servidor de almacenamiento devuelve el archivo al cliente después de recibir la solicitud.

3. Análisis de índice de archivos

Ejemplo de índice de archivo:

group1 / M00 / 00 / 0C / wKjRbExx2K0AAAAAAAANiSQUgyg37275.h

"Grupo1" es el nombre del grupo, "/ M00 / 00 / 0C /" es el disco y el directorio, y "wKjRbExx2K0AAAAAAAANiSQUgyg37275.h" es el nombre del archivo y el sufijo.

El nombre del archivo se genera a partir de la ip del servidor de almacenamiento de origen, la marca de tiempo cuando se creó, el tamaño del archivo, el código de verificación del archivo y un número aleatorio después del cálculo de hash. Finalmente, está codificado por texto basado en base64 y convertido en caracteres imprimibles.

4. Mecanismo de sincronización de archivos

El servidor de almacenamiento utiliza archivos binlog para registrar operaciones de actualización, como la carga y eliminación de archivos. binlog no registra el contenido del archivo, solo información de metadatos, como los nombres de los archivos.

En el servidor de almacenamiento, un hilo dedicado sincroniza archivos de acuerdo con binlog. Para evitar la influencia mutua en la mayor medida posible y en aras de la simplicidad del sistema, el servidor de almacenamiento iniciará un subproceso para cada servidor del grupo, excepto para sincronizar archivos. La sincronización de archivos adopta el método de sincronización incremental y el sistema registra la posición sincronizada (desplazamiento del archivo binlog) en el archivo de identificación. Formato del nombre del archivo de identificación: {dest storage IP} _ {port} .mark

La sincronización de archivos solo se realiza entre servidores de almacenamiento en el mismo grupo, utilizando el método push, es decir, el servidor de origen se sincroniza con el servidor de destino. Solo los datos de origen deben sincronizarse, y los datos de respaldo no necesitan sincronizarse nuevamente, de lo contrario se formará un bucle.

Cuando se agrega un nuevo servidor de almacenamiento, un servidor de almacenamiento existente sincroniza todos los datos existentes (incluidos los datos de origen y de respaldo) con el servidor recién agregado.

Después de que el cliente carga un archivo en un servidor de almacenamiento, la carga del archivo se completa. El servidor de almacenamiento sincroniza este archivo con otros servidores de almacenamiento en el mismo grupo de acuerdo con los registros de carga en el binlog. Este método de sincronización de archivos es asíncrono, y el método asíncrono provoca el problema del retraso de sincronización de archivos. Después de cargar un nuevo archivo, no se puede encontrar el archivo al acceder al archivo en un servidor de almacenamiento que no se ha sincronizado.

Cuatro, pros y contras análisis

1. Ventajas

  1. El sistema no necesita ser compatible con POSIX (sistema operativo portátil), lo que reduce la complejidad del sistema y la eficiencia del procesamiento es mayor
  2. Admite mecanismos de expansión en línea para mejorar la escalabilidad del sistema
  3. Implementó RAID suave, mejoró la capacidad de procesamiento concurrente del sistema y la capacidad de recuperación de tolerancia a fallas de datos
  4. Admite archivos maestro-esclavo, admite extensiones personalizadas
  5. Admite múltiples rastreadores en espera para mejorar la disponibilidad del sistema
  6. Admite la extensión Nginx y Apache, descarga http disponible

¿Qué es un archivo maestro-esclavo?

主从文件是指文件ID有关联的文件,一个主文件可以对应多个从文件。
主文件ID = 主文件名 + 主文件扩展名
从文件ID = 主文件名 + 从文件后缀名 + 从文件扩展名
使用主从文件的一个典型例子:以图片为例,主文件为原始图片,从文件为该图片的一张或多张缩略图。
FastDFS中的主从文件只是在文件ID上有联系。FastDFS server端没有记录主从文件对应关系,因此删除主文件,FastDFS不会自动删除从文件。
删除主文件后,从文件的级联删除,需要由应用端来实现。
主文件及其从文件均存放到同一个group中。
主从文件的生成顺序:
1)先上传主文件(如原文件),得到主文件ID
2)然后上传从文件(如缩略图),指定主文件ID和从文件后缀名(当然还可以同时指定从文件扩展名),得到从文件ID

2. Desventajas

  1. No admite reanudar el punto de interrupción, será una pesadilla para archivos grandes (FastDFS no es adecuado para el almacenamiento de archivos grandes)
  2. No es compatible con el acceso a la interfaz universal POSIX, baja versatilidad
  3. El mecanismo de sincronización no admite la verificación de la corrección de archivos, lo que reduce la disponibilidad del sistema. Existe un gran retraso para la sincronización de archivos en la red pública, lo que requiere la aplicación de estrategias apropiadas de tolerancia a fallas
  4. Descargar a través de API, hay un único punto de cuello de botella de rendimiento

5. Problemas reales y soluciones actuales

1. Demora de sincronización de archivos

El método de sincronización de archivos es asíncrono. Después de cargar un nuevo archivo, no se puede encontrar el archivo en el servidor de almacenamiento que no se ha sincronizado en el pasado.

Solución:

Cabe señalar que el servidor de almacenamiento incluido en un grupo no está establecido por el archivo de configuración, sino que lo obtiene el servidor rastreador. El cliente y el servidor de almacenamiento se conectan activamente al servidor rastreador. El servidor de almacenamiento informa activamente su información de estado al servidor rastreador, incluido el espacio en disco restante, el estado de sincronización de archivos, los tiempos de carga y descarga de archivos y otra información estadística. El servidor de almacenamiento se conectará a todos los servidores de seguimiento en el clúster y les informará su estado. El servidor de almacenamiento inicia un subproceso separado para completar la conexión y el informe de temporización a un servidor rastreador. Además, cada servidor de almacenamiento informará periódicamente al servidor rastreador la marca de tiempo del archivo que sincroniza con otros servidores de almacenamiento en el mismo grupo. Cuando el servidor rastreador recibe un informe de sincronización de archivos de un servidor de almacenamiento, encontrará secuencialmente el valor mínimo de la marca de tiempo del archivo al que se sincroniza cada servidor de almacenamiento en el grupo y lo registrará en la memoria como un atributo de almacenamiento. De acuerdo con la situación anterior, FastDFS proporciona las siguientes soluciones simples:

1. Al igual que con la actualización del archivo, se prefiere que el servidor de almacenamiento de origen descargue el archivo. Esto se puede establecer en el archivo de configuración del servidor rastreador, y el nombre del parámetro correspondiente es download_server.

2. El método de selección del servidor de almacenamiento es round-robin. Cuando el cliente le pregunta al servidor rastreador qué servidores de almacenamiento pueden descargar el archivo especificado, el servidor rastreador devuelve un servidor de almacenamiento que cumple con una de las siguientes cuatro condiciones:

  • El servidor de almacenamiento de origen en el que se carga el archivo, y el archivo se carga directamente en el servidor;
  • Marca de tiempo de creación de archivo <marca de tiempo de archivo a la que se sincroniza el servidor de almacenamiento, lo que significa que el archivo actual se ha sincronizado;
  • Marca de tiempo de creación de archivo = marca de tiempo de archivo con el que se sincroniza el servidor de almacenamiento y (marca de tiempo de creación de archivo de tiempo actual)> el tiempo máximo requerido para que se complete una sincronización de archivos (como 5 minutos);
  • (Marca de tiempo de creación de archivo de tiempo actual)> Umbral de retraso de sincronización de archivos, por ejemplo, si establecemos el umbral en 1 día, significa que la sincronización de archivos definitivamente se puede completar en un día.

2. Seguridad de datos

  • Una copia es exitosa : dentro del intervalo de tiempo desde el momento en que el almacenamiento de origen termina de escribir el archivo hasta que se sincroniza con otro almacenamiento en el grupo, una vez que falla el almacenamiento de origen, puede causar la pérdida de datos del usuario, que generalmente es inaceptable para el sistema de almacenamiento De
  • Falta de mecanismo de recuperación automática : cuando falla un disco de almacenamiento, solo puede intercambiar el disco y luego restaurar manualmente los datos; debido a la copia de seguridad de la máquina, parece imposible tener un mecanismo de recuperación automática, a menos que haya un disco de repuesto en caliente preparado previamente, falta El mecanismo de recuperación automatizado aumentará la operación del sistema y el trabajo de mantenimiento.
  • Baja eficiencia de recuperación de datos : al recuperar datos, solo se puede leer de otros almacenamientos en el grupo. Al mismo tiempo, debido a la baja eficiencia de acceso de los archivos pequeños, la eficiencia de la recuperación basada en archivos también es baja. La baja eficiencia de recuperación significa datos Permanezca en un estado inseguro por más tiempo.
  • Falta de soporte de recuperación ante desastres en salas múltiples : actualmente, para realizar la recuperación ante desastres en salas múltiples, solo se pueden usar herramientas adicionales para sincronizar los datos con el clúster de respaldo, y no existe un mecanismo automatizado.

3. Utilización del espacio de almacenamiento

La cantidad de archivos almacenados en una sola máquina está limitada por la cantidad de inodos

Cada archivo corresponde a un archivo en el sistema de archivos local de almacenamiento. En promedio, cada archivo tendrá un desperdicio de espacio de almacenamiento de block_size / 2.

El almacenamiento combinado de archivos puede resolver eficazmente los dos problemas anteriores, pero debido a que el almacenamiento combinado no tiene un mecanismo de recuperación de espacio, no se puede garantizar que el espacio para eliminar archivos se reutilice, y también existe un problema de pérdida de espacio.

4. Equilibrio de carga

El mecanismo de grupo en sí se puede usar para el equilibrio de carga, pero este es solo un mecanismo de equilibrio de carga estático, que necesita conocer de antemano las características de acceso de la aplicación; al mismo tiempo, el mecanismo de grupo también hace que sea imposible migrar datos entre grupos para un equilibrio de carga dinámico.

6. Referencias

Introducción de FastDFS [https://www.cnblogs.com/shenxm/p/8459292.html]

Explicación detallada del sistema de archivos distribuido FastDFS [https://www.cnblogs.com/ityouknow/p/8240976.html]

Características de FastDFS y resolución de problemas [https://www.cnblogs.com/jym-sunshine/p/6397705.html]

Discusión del problema de sincronización FastDFS [https://www.cnblogs.com/snake-hand/p/3161528.html]

Publicó 40 artículos originales · 25 alabanzas · 100,000+ vistas

Supongo que te gusta

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