Sistemas de Archivos Distribuidos


El sistema de archivos es un elemento esencial de un sistema distribuido Su tarea fundamental es almacenar los programas y datos y tenerlos disponibles cuando sean necesarios. Nos centraremos en analizar los aspectos que los diferencían de los sistemas de archivos centralizados.

Es importante distinguir entre los conceptos de servicio de archivos y servidor de archivos.

El servicio de archivos especifica la interfaz del sistema de archivos con los clientes. Describe las primitivas disponibles, los parámetros que utilizan y las acciones que llevan a cabo.

Un servidor de archivos es un proceso que se ejecuta en alguna máquina y ayuda a implantar el servicio de archivos. Un sistema puede tener uno o varios servidores de archivos, pero los clientes no deben conocer el número de servidores de archivos, su posición o función. Todo lo que saben es que, al solicitar un servicio, éste se lleva a cabo de alguna manera.
 

Diseño


Generalmente un sistema de archivos distribuidos (DFS) tiene dos componentes: el servicio de archivos y el servicio de directorios.
 

Interfaz del servicio de archivos


Un archivo es una secuencia de bytes con algún significado especial para el usuario.

Un archivo puede tener atributos, que son partes de información relativas a él, pero que no son parte del archivo propiamente dicho (propietario, tamaño, fecha de creación, permisos de acceso, etc.). Generalmente el servicio de archivos proporciona primitivas para leer y escribir alguno de los atributos.

En algunos sistemas de archivos se maneja el concepto de inmutabilidad, que consiste en que un archivo sólo puede ser creado y leído, pero no modificado. Esto facilita el soporte del ocultamiento y la replicación de archivos, puesto que se eliminan los problemas de actualización de copias remotas.

Los servicios de archivos se pueden dividir en dos tipos, según si soportan un modelo de carga/descarga o un  modelo de acceso remoto.
 

En el modelo de carga/descarga, el servicio de archivos proporciona dos operaciones principales: lectura de archivo y escritura del mismo. La lectura transfiere todo el archivo de los servidores de archivos al cliente solicitante. La escritura transfiere todo el archivo del cliente de regreso al servidor. El modelo conceptual es el traslado de archivos completos en alguna de las direcciones. La interfaz es sencilla, y la transferencia completa de archivos es muy eficiente.

El modelo de acceso remoto se proporciona un gran número de operaciones para abrir y cerrar archivos, leer y escribir partes de archivos, moverse a través de un archivo (lseek), etc. Aquí el sistema de archivos se ejecuta en los servidores y nunca se trasladan los archivos a los clientes. Su ventaja es que no necesita mucho espacio en los clientes y la cantidad de información transferida es mínima.



Interfaz del servicio de directorios


El servicio de directorios proporciona las operaciones para crear, eliminar directorios, nombrar o cambiar archivos dentro de directorios, y mover archivos de un directorio a otro. Los directorios pueden contener subdirectorios y éstos también pueden contener subdirectorios, lo que se conoce como sistema jerárquico de archivos o árbol de directorios.

En ciertos sistemas es posible crear enlaces o apuntadores a un directorio arbitrario desde cualquier directorio, con lo que se pueden crear grafos arbitrarios, que son más poderosos que los árboles. La distinción entre árboles y grafos es de particular importancia en sistemas distribuidos.
 
 

Ejemplo de árbol de directorios y grafo de directorios





En la gráfica anterior se muestra en ejemplo de cómo se pueden tener directorios que abarquen más de un servidor de archivos.

Cada servidor tiene una estructura de directorios local que se enlaza con la estructura de otro servidor. Es posible que cada servidor vea globalmente una estructura distinta y este es un problema si se desea que los clientes vean una referencia a los archivos del tipo //servidor/ruta, ya que debe reconocerse que el directorio raíz está en alguno de los servidores en particular, y la estructura de directorios que éste ve es la que verán todos los clientes.

Uno de los principales problemas de este tipo de estructura es que no se tiene una transparencia referencial o de nombres, ya que es necesario conocer el nombre del servidor para poder alcanzar un archivo, lo que impide que el servidor pueda migrarse dinámicamente.

Generalmente se puede atacar este problema con tres formas diferentes de nombrar los archivos y directorios:
 

  1. Nombre de máquina + ruta de acceso [p.e.: //Servidor1/archivos/datos/textos/x1.txt - Windows]

  2. Montaje de sistemas de archivos remotos en la jerarquía local de archivos [p.e.: NFS]

  3. Un espacio de nombres que tenga la misma apariencia en todas las máquinas


Los dos primeros son fáciles de implantar en sistemas centralizados que se convierten en distribuidos. El tercero es la manera ideal en que se comporta un sistema distribuido
 
 

Semántica de archivos compartidos


Uno de los principales problemas al manejar archivos en forma distribuida se refiere a cómo se reflejan los eventos de lectura y escritura en un archivo a todos los clientes (semántica de la lectura y escritura). Podemos considerar cuatro formas básicas de compartir archivos en un sistema distribuido:
 
 
 

Semántica de UNIX  Cada operación en un archivo es visible a todos los procesos de manera instantánea
Semántica de sesión  Ningún cambio es visible a otros procesos hasta que el archivo se cierra
Archivos inmutables  No existen actualizaciones; es más fácil compartir y replicar
Transacciones atómicas  Todos los cambios tienen la propiedad de todo o nada

 
 

Ocultamiento


Para facilitar el desempeño en el acceso a los archivos distribuidos pueden utilizarse técnicas que permitan ocultar los retrasos normales en la transferencia de archivos entre las diferentes máquinas. Este ocultamiento se logra con el uso de cachés en sus diferentes formas.

Existen cuatro lugares donde se pueden almacenar archivos o partes de archivos: El disco del servidor, la memoria principal del servidor, el disco del cliente o la memoria principal del cliente:
 
 

Características de cada opción:
 

Disco del servidor No hace falta mover los archivos. Pobre desempeño
Memoria del servidor Mejor desempeño. Poco espacio. Lentitud en transferencia
Disco del cliente Mejor desempeño que los anteriores. Requiere algoritmos de control de versiones. Malo si hay muchas actualizaciones remotas.
 
Memoria del cliente El mejor desempeño. Poca memoria. Requiere algoritmos de control de cache.