Magma es un sistema de archivos distribuido basado en una tabla hash distribuida , escrito en C , compatible con los núcleos de Linux y BSD que utilizan FUSE .
Terminología y principios básicos
Magma enlaza varios hosts interconectados por una red TCP/IP para formar un espacio de almacenamiento común llamado anillo de lava . Cada host (o nodo) se denomina volcán . Cada volcán aloja una porción de un espacio de claves común, delimitado por dos claves SHA1 . Cada volcán también se encarga de replicar el espacio de claves del nodo anterior para garantizar la redundancia de datos . Cada clave puede representar uno o más objetos dentro del espacio de almacenamiento. Estos objetos se denominan llamaradas .
Magma puede almacenar una variedad de objetos: archivos, directorios, enlaces simbólicos, dispositivos de bloques y caracteres, y tuberías FIFO. Cada objeto está vinculado a un flare y viceversa. Un flare de cualquiera de los seis tipos mencionados anteriormente se describe mediante algunas propiedades básicas comunes a todos los flares, como una ruta y una clave hash. Pero cada uno de los seis tipos también tiene sus propias propiedades específicas. Por ejemplo, los flares de directorio tendrán información específica que no se aplica a los enlaces simbólicos. Un flare con solo información genérica se llama uncast, mientras que un flare completo se llama cast .
Una llamarada sin procesar no contiene suficiente información para operar con datos, pero sí la suficiente para ser movida como una especie de contenedor opaco entre nodos volcánicos. Para facilitar su movimiento, cada tipo de llamarada, incluyendo los directorios, se ha reimplementado como un conjunto de dos archivos: el primero contiene la información de la llamarada (metadatos) y el segundo, su contenido. El movimiento de llamaradas a través del anillo de lava se denomina balanceo de carga y se realiza para aprovechar las desigualdades de carga entre los nodos con el fin de proporcionar el mejor rendimiento.
Sistema de antorcha
El motor interno de Magma se llama sistema de llamaradas y está implementado como una pila de capas.
La función `magma_mkdir()` puede utilizarse como ejemplo de recorrido de capas. En este párrafo, se asumirá que se creará un directorio llamado `/example` . `magma_mkdir()` forma parte de la capa de la API pública . Se utiliza para crear un nuevo directorio, al igual que su equivalente estándar de Libc, `mkdir()`.
La función magma_mkdir() primero enruta la solicitud para decidir si se puede gestionar localmente o si requerirá operaciones de red. Para realizar el enrutamiento, la ruta /example se traduce en la clave hash SHA1 correspondiente 81f762fd59d88768b06b8e9de56aef8a95962045 . Si el enrutamiento determina la necesidad de contactar con otro nodo Vulcano, la solicitud no saldrá de esta capa. La capa de red Lava reenviará la solicitud al nodo propietario de la clave, continuando el flujo de operaciones en el nodo remoto. El enrutamiento constituye la mitad de la función de la capa de red Lava , que también incluye la monitorización de la red y la creación, actualización y eliminación de nodos Vulcano.
Ya sea una solicitud local o remota, el último paso lo realiza la capa Flare . Se buscará en la caché el objeto Flare correspondiente a la clave 81f762fd59d88768b06b8e9de56aef8a95962045 . Si no se encuentra, se creará y se cargará desde el disco, si ya existe. Al objeto Flare resultante se le aplican primero comprobaciones de permisos. Si se concede el permiso para operar, se cumple la solicitud inicial: en este ejemplo, Flare se convierte a directorio si aún no lo era y se guarda en el disco.
Enrutamiento
Dado que cada nodo Vulcano dispone de la topología completa de la red, el enrutamiento se reduce a comparar las claves de las bengalas con el espacio de claves de los nodos y encontrar el nodo que las contiene. La topología de la red también se guarda en el directorio distribuido /.dht/ dentro del sistema de archivos Magma. Los nodos Vulcano pueden comprobar periódicamente su información comparándola con el contenido del directorio /.dht/ para detectar cualquier cambio. Los nodos también guardan periódicamente su propia información en el directorio /.dht/ .
Balanceo de carga
Cada nodo Vulcano tiene ciertos parámetros declarados al arrancar, como el ancho de banda y el almacenamiento disponible. Un hilo independiente llamado balanceador se dedica a distribuir las claves para evitar la sobrecarga o la subcarga de los nodos. Cada nodo tiene un valor de carga dinámico asociado, que se calcula mediante la fórmula:
dóndees la carga de clave de nodo calculada en escala logarítmica;es el ancho de banda del nodo yes el ancho de banda promedio;es almacenamiento de nodo yes almacenamiento promedio
Distribución de software Magma
Magma se distribuye en forma de un servidor llamado magmad y un cliente llamado mount.magma .
Servidor Magma
El servidor Magma, magmad, gestiona la intercomunicación entre los nodos DHT y los clientes Magma. El sistema Flare proporciona un bucle de eventos de red que acepta las conexiones entrantes. Se aceptan tres tipos de conexión.
- Se utiliza una conexión de protocolo Flare para operar con flares: abrir archivos y directorios, leer y escribir, obtener información e intercambiar flares durante las operaciones de balanceo. El protocolo Flare es un protocolo binario.
- Se utiliza una conexión de protocolo internodo para intercambiar información DHT y para unir nuevos nodos. El protocolo internodo es un protocolo binario.
- Se utiliza una conexión de protocolo de consola para que los administradores puedan consultar la red Lava, realizar operaciones sencillas como listar el contenido de los directorios y mostrar el contenido de los archivos, y finalmente emitir algunos comandos administrativos a los nodos (un ejemplo de comando administrativo es apagar el sistema). El protocolo de consola es un protocolo basado en texto accesible a través de Telnet .
Cliente de Magma
El cliente Magma magma.mount se basa en FUSE y es compatible con los núcleos Linux y BSD. El cliente Magma utiliza una conexión mediante el protocolo Flare para contactar y operar con un servidor Magma cercano. La topología de red y la ubicación del Flare son totalmente transparentes para los clientes. El cliente simplemente consulta a un servidor como si toda la información estuviera disponible únicamente en ese host.
Se prevé incorporar una capa criptográfica al cliente Magma, que permitirá cifrar únicamente el contenido de los archivos. La implementación de la criptografía en el lado del cliente se debe a la escalabilidad (la capacidad de procesamiento aumentará al mismo ritmo que las solicitudes de procesamiento) y a la privacidad de las claves criptográficas (las claves o contraseñas nunca llegarán al servidor).
Interfaz NFS alternativa
Como alternativa al cliente Magma, que solo es compatible con los núcleos de Linux y BSD, el servidor Magma planea ofrecer una interfaz NFS para otros sistemas Unix. Dado que NFS es un estándar establecido, no se pueden añadir nuevas funcionalidades. Por ejemplo, la capa criptográfica no estará disponible para los clientes que monten recursos compartidos de Magma a través de NFS.
Enlaces externos
- - Sitio web de MagmaFS.
- Sistemas de archivos de espacio de usuario
- Almacenamiento de datos distribuido
- Sistemas de archivos de red