Explicación detallada de GFS sobre el sistema de archivos de Google
? GFS trata las fallas de la máquina como algo normal y puede manejar bien las fallas del sistema. Los sistemas GFS generalmente se implementan en cientos o incluso miles de servidores baratos. Un número considerable de servidores baratos implementarán clientes GFS para acceder a los servicios GFS, por lo que se producen fallas en las aplicaciones, errores del sistema operativo, fallas de conexión, fallas de red e incluso fallas de energía de las máquinas. Posibles problemas. Fallos frecuentes. El sistema GFS puede admitir el monitoreo del sistema, la detección de fallas, la tolerancia a fallas y la recuperación automática, lo que brinda una confiabilidad muy alta. En segundo lugar, los archivos en el sistema GFS son generalmente archivos grandes y las operaciones con archivos en la mayoría de los escenarios implican agregarlos en lugar de sobrescribirlos. Una vez que se escribe el archivo, la mayoría de las operaciones leen el archivo y lo leen secuencialmente.
? GFS proporciona interfaces de sistema de archivos no estándar (como POSIX), que admiten la creación, eliminación, apertura, cierre, lectura y escritura. Además, GFS admite operaciones de instantáneas y anexaciones de registros. Snapshot puede crear una copia de un archivo o árbol de directorios a un costo muy bajo. Record append puede admitir que varios clientes agreguen datos al mismo archivo al mismo tiempo, al tiempo que garantiza la atomicidad de la operación de adición de cada cliente.
? Master registra los metadatos del sistema de archivos, incluido el espacio de nombres, la información de control de permisos, el mapeo de archivos a bloques y la distribución de bloques. El Maestro también es responsable de la gestión del arrendamiento de fragmentos, la recolección de basura de fragmentos inútiles, la migración de fragmentos, etc. El maestro se comunica regularmente con el servidor de fragmentos, envía instrucciones al servidor de fragmentos y recopila el estado del servidor de fragmentos. El cliente GFS se comunica (lee y escribe datos) con el sistema GFS a través de la API GFS. El cliente solicita al maestro que obtenga metadatos, y la lectura y escritura real de datos consiste en interactuar directamente con el servidor de fragmentos. Ni el cliente ni el servidor de fragmentos almacenan en caché los datos del archivo. Debido a que la mayoría de las aplicaciones leen archivos grandes basándose en flujos API y hay demasiados datos de archivos en el sistema, no tiene sentido que el cliente almacene en caché los datos de los archivos. El caché del búfer de Linux del servidor de fragmentos y los datos a los que se accede con frecuencia se almacenan en caché, y el servidor de fragmentos no almacena en caché los datos de los archivos.
? Un maestro de un solo punto simplifica enormemente el diseño del sistema porque el maestro conoce toda la metainformación y puede realizar estrategias de replicación y asignación de ubicación de bloques más complejas. Sin embargo, al leer y escribir datos, se debe reducir la participación del maestro para evitar que el maestro de un solo punto sea llamado un cuello de botella del sistema. El cliente no leerá ni escribirá datos de archivos a través del maestro, pero enviará una solicitud al maestro para consultar la distribución de ubicación de los fragmentos. Luego, el cliente almacenará en caché la información de distribución de los fragmentos y luego leerá y escribirá datos directamente en el servidor de fragmentos. El proceso de lectura general es el siguiente:
1. El cliente calcula el índice de bloque del archivo a leer en función del nombre del archivo, el desplazamiento de bytes y el tamaño del bloque.
2. El cliente consulta al host la distribución de bloques a través del nombre del archivo y el índice del bloque.
3. Controlador de bloques de respuesta del servidor maestro y distribución de réplicas.
4. El cliente almacena en caché la metainformación del bloque y la clave consta del nombre del archivo y el índice del bloque.
5. El cliente encuentra el servidor de fragmentos más cercano a partir de la información de distribución de fragmentos y envía una solicitud de consulta. Las solicitudes de consulta incluyen controladores de bloques y rangos de bytes. Las consultas posteriores para el mismo bloque no necesitan consultar nuevamente al servidor maestro para obtener metainformación porque el cliente ya almacena en caché la metainformación.
? El tamaño del fragmento es un parámetro clave del sistema GFS y generalmente se establece en 64 MB, que es mucho mayor que el tamaño del bloque del sistema de archivos. Una copia de cada fragmento se almacena como un archivo de Linux en la misma máquina que el servidor de fragmentos. Lo que hicimos fue establecer el tamaño del bloque en 64 MB, considerando principalmente los siguientes puntos:
1. Puede reducir la cantidad de veces que el cliente accede al host para consultar metainformación y reducir la presión de acceso. el anfitrión. Debido a que el tamaño del fragmento está diseñado para ser relativamente grande, al acceder secuencialmente a archivos muy grandes, el número de fragmentos es pequeño y el cliente almacena en caché la metainformación del fragmento, por lo que se reducirá el número de accesos al maestro.
Incluso el cliente puede almacenar en caché la metainformación de fragmentos de todos los archivos. Incluso si los archivos se leen aleatoriamente, el lado principal no se convertirá en un cuello de botella para el rendimiento del sistema.
2. Puede reducir la sobrecarga de la red, mantener la conexión TCP entre el cliente y el servidor de fragmentos y realizar más operaciones de fragmentos.
3. Puede reducir la cantidad de datos de metadatos que deben registrarse en la memoria del host y reducir la huella de memoria del host.
? La desventaja del tamaño grande es que los archivos pequeños contienen pocos bloques, incluso uno solo. En este caso, cuando varios clientes consultan archivos pequeños con alta concurrencia, los fragmentos correspondientes se convierten en puntos calientes. De hecho, esta situación rara vez ocurre en los sistemas GFS porque la mayoría de las operaciones del cliente son lecturas secuenciales de archivos grandes. Sin embargo, considere el siguiente escenario: implementamos el binario de un servicio en un sistema GFS y luego cientos de servidores consultan el binario e inician el servicio simultáneamente. En este punto, el servidor de fragmentos donde se encuentra la copia del archivo binario se convertirá inmediatamente en un cuello de botella de consulta. Por supuesto, el problema en este escenario se puede resolver aumentando el número de réplicas y distribuyendo el tiempo de consulta del servidor.
? Master almacena principalmente tres tipos de metadatos: espacios de nombres de archivos y bloques, información de mapeo de archivos a bloques y distribución de réplicas de bloques. Todos los metadatos se almacenan en la memoria del servidor principal. Los dos primeros tipos de metainformación se pueden almacenar de forma persistente, con registros de operaciones almacenados en el disco local del host y registros de respaldo almacenados en la máquina remota. El Maestro no almacena persistentemente la información de distribución de copias del fragmento, sino que obtiene la información del fragmento en el servidor de fragmentos interactuando con el servidor de fragmentos.
4.1 Estructura de datos de la memoria
? La metainformación está en la memoria y todas las operaciones principales son muy rápidas. Además, el maestro puede escanear de manera eficiente y periódica todos los metadatos en segundo plano para recolectar basura, reparar copias, equilibrar, etc. Los metadatos se registran en la memoria, por lo que el sistema GFS prestará más atención a la cantidad de fragmentos y la memoria disponible del maestro. Pero en escenarios reales, esto no es un problema. Los metadatos de cada bloque de 64 MB tienen menos de 64 bytes y la mayoría de los bloques se almacenan a plena capacidad, excepto que el espacio en el último bloque del archivo no está completamente ocupado. Debido a que el espacio de nombres del archivo se almacena con compresión de prefijo, la metainformación de un solo archivo tiene menos de 64 bytes. Si necesita ampliar la escala del sistema, simplemente puede aumentar la memoria del control principal. En comparación con la alta confiabilidad, el alto rendimiento y la simplicidad del sistema, agregar memoria es lo menos costoso.
4.2 Distribución de fragmentos
? En lugar de almacenar persistentemente la información de distribución de réplicas del fragmento, consultamos al servidor de fragmentos su información de fragmento cuando se inicia el servidor maestro y luego actualizamos continuamente la información de distribución de réplicas del servidor maestro mediante latidos para que sea coherente con los datos del servidor de fragmentos. Al principio, GFS intentó almacenar permanentemente información de distribución de fragmentos en el servidor maestro. Más tarde, descubrió que era más sencillo comenzar a extraer información de fragmentos a través del servidor maestro y luego sincronizarla mediante latidos. Porque cuando el servidor de fragmentos se une, sale, cambia de nombre y se reinicia con frecuencia, será muy difícil mantener la exactitud de los Chunkmetadatos del maestro. Desde otra perspectiva, solo la información de bloque reportada por el servidor de fragmentos en el clúster es la distribución de bloques más realista, porque el nodo maestro no necesita mantener un estado de distribución de bloques por sí mismo y solo necesita obedecer el informe de estado del servidor de fragmentos.
4.3 Registro de operaciones
? Este registro registra el historial de cambios de datos del clúster GFS. El registro de operaciones es muy importante para GFS porque no solo es un registro persistente de metadatos, sino que también registra el orden cronológico de las operaciones concurrentes. Debido a que los registros de operaciones son tan importantes, deben almacenarse de manera confiable. El cliente no puede ver los cambios de datos hasta que persistan los cambios de metadatos. Cuando el cliente modifica datos, los registros de operación deben guardarse en varias máquinas remotas. Solo cuando los registros de operación se guardan permanentemente de forma local y remota los cambios de datos del cliente pueden tener éxito.
? Puede recuperar un sistema de archivos reproduciendo el registro de operaciones. Para reducir el tiempo de reproducción cuando se inicia el sistema, es necesario reducir la cantidad de registros de reproducción. El servidor maestro puede almacenar periódicamente puntos de control de metadatos.
Cuando el servidor maestro se reinicia, puede cargar los metadatos desde el punto de control y luego reproducir algunos de los registros después del punto de control.
1. El cliente consulta al servidor principal la distribución del servidor de fragmentos y otras réplicas donde se encuentra el servidor principal de un fragmento. Si no hay flor principal, la flor principal elegirá una como flor principal del bloque floral.
2. El maestro responde al cliente con la información de distribución de la copia maestra y otras copias. El cliente almacena en caché los metadatos devueltos.
3. El cliente envía todas las copias de los datos. Los clientes pueden ejecutar en cualquier orden. Cada fragmentserser registra datos en el LRUbuffer en la memoria.
4. Después de que todas las copias devuelvan con éxito los datos recibidos, el cliente enviará una solicitud de escritura al nodo principal. El Primario adjuntará un número de secuencia a cada solicitud de cambio de datos y los cambios de datos se ejecutarán en el orden del número de secuencia.
5. El servidor maestro sincroniza los cambios de datos con otros servidores de réplica, y los servidores de réplica también realizan cambios de datos según el número de secuencia.
6. El servidor maestro completa la operación de datos después de recibir respuestas de otras réplicas.
7.primary devuelve resultados del cliente. Todos los errores que ocurran durante este período serán informados al cliente.
? Los clústeres GFS suelen tener cientos de servidores fragmentados repartidos en varios bastidores. El servidor fragmentado también recibirá solicitudes de consulta de cientos de clientes en este bastidor u otros bastidores. El tráfico del servidor en diferentes racks se puede reenviar a través de uno o más conmutadores. El objetivo principal de la estrategia de selección de distribución de copias fragmentadas es mejorar la confiabilidad y disponibilidad de los datos tanto como sea posible y, al mismo tiempo, aprovechar al máximo el ancho de banda de la red. Por lo tanto, no basta con implementar réplicas en todas las máquinas. GFS implementa réplicas en los racks, lo que garantiza que, si un rack se daña o se desconecta, al menos una copia de los bloques de datos esté disponible.
? Se crearán copias de bloques en las siguientes situaciones: creación de bloques, corrección de copias, reequilibrio. Cuando el maestro crea un fragmento, selecciona un servidor de fragmentos para almacenar una copia del fragmento. Se consideran principalmente los siguientes puntos:
1. La utilización del disco del servidor de fragmentos donde se encuentra la nueva copia es inferior al promedio del sistema.
2. Limitar el número de fragmentos creados por cada servidor de fragmentos en el período reciente.
3. Todas las copias de cada bloque no pueden estar en un mismo rack.
? El número de réplicas de un fragmento es inferior a un número determinado. Sí, el Maestro hará una copia. Esto puede suceder cuando el servidor de fragmentos no funciona, o el servidor de fragmentos informa que su copia está dañada, o el disco de la máquina donde se encuentra el servidor de fragmentos está dañado, etc. Cada tarea de copia en bloque tiene una prioridad y se pone en cola para su ejecución en orden descendente en el subhost. El Maestro también escaneará periódicamente la distribución de las réplicas actuales. Una vez que se encuentre un desequilibrio en el uso del disco o la carga de la máquina, se iniciará una operación de equilibrio de carga. Ya sea que se trate de creación de fragmentos, replicación de fragmentos o equilibrio de carga, la estrategia para seleccionar la ubicación de las réplicas de fragmentos es la misma. La velocidad de reparación y equilibrio de las réplicas debe ser limitada; de lo contrario, los servicios normales de lectura y escritura del sistema se verán afectados. .
? El éxito de Google demuestra que un único diseñador principal puede funcionar. Esto no sólo simplifica el sistema sino que también permite una gran coherencia. Teniendo en cuenta el rendimiento, GFS propone un modelo de coherencia de "al menos agregar registros de forma atómica". Las modificaciones de cada fragmento se otorgan al servidor de fragmentos mediante arrendamiento, lo que reduce la carga en el maestro y reduce la latencia al replicar múltiples copias a través de canalizaciones. Master mantiene una gran cantidad de metadatos y necesita diseñar una estructura de datos eficiente, garantizar que ocupe menos memoria y admitir operaciones de instantáneas. B-tree admite COW para satisfacer las necesidades, pero la implementación es realmente complicada.