miércoles, 5 de enero de 2011

Sistemas de Archivos Distribuidos

Antecedentes

Un sistema distribuido es una colección de máquinas acopladas conectadas entre sí por una red de comunicaciones (Tanto macrocomputadora como una estación simple de trabajo). Dentro de una máquina en un sistema distribuido, el resto de las máquinas y sus respectivos recursos son remotos, mientras que sus propios recursos son locales.

  • Servicio: Entidad de Software que se ejecuta en una o más máquinas y ejecuta un tipo de función específico a favor de clientes que no conoce a priori.
  • Servidor: Software de servicio que se ejecuta en una sola máquina.
  • Cliente: Proceso que puede invocar un servicio empleando un conjunto de operaciones que constituyen su interfaz de cliente.

Nombres y Transparencia

Los nombres establecen una correspondencia entre objetos lógicos y físicos, por lo regular, un usuario se refiere a un archivo con un nombre textual, el cual se transforma en un identificador numérico de más bajo nivel que a su vez se corresponde con bloques de disco. Esta correspondencia proporciona a los usuarios una abstracción de un archivo que oculta los detalles de cómo y en qué parte del disco está almacenado realmente. Un sistema de archivos distribuido transparente añada una nueva dimensión a la abstracción, el de ocultar en qué lugar de la red se encuentra el archivo.

  • Estructuras de Nombres: Los archivos tienen diferentes nombres en los diferentes niveles.
    • Transparencia de ubicación: El nombre de un archivo no da indicio alguno de la posición física de almacenamiento.
    • Independencia de ubicación: No es necesario modificar el nombre de un archivo si la posición física de almacenamiento cambia.

Algunos aspectos a considerar para distinguir estos dos conceptos: separar los datos de su ubicación, la transparencia de ubicación estática proporciona a los usuarios una forma cómoda de compartir archivos, la independencia de la ubicación separa la jerarquía de nombres de la jerarquía de dispositivos de almacenamiento, una vez lograda la separación de nombre y ubicación, varios clientes pueden acceder a archivos que residen en sistemas servidores remotos.

  • Esquemas de Nombres: Hay tres tipos:
    • Sencillo: Los archivos se nombran con alguna combinación del nombre de su anfitrión y su nombre local, lo que garantiza un nombre único en el nivel del sistema, las unidades componentes permanecen aisladas, aunque se proporcionan mecanismos para poder hacer referencia a un archivo remoto.
    • NFS: El segundo enfoque cuenta con un mecanismo para ligar directorios remotos a directorios locales y así dar la apariencia de un árbol de directorios coherente. Inicialmente solo había acceso a directorios remotos previamente montados, con la función automont, los montajes se efectúan por demanda en base a una tabla de puntos de montaje y nombres de estructura de archivos. Existe integración de componentes, aunque limitada y no uniforme, ya que cada máquina puede conectar diferentes directorios remotos a su árbol. La estructura resulta ser un boque de árboles Unix con subárboles compartidos.
    • El tercer enfoque logra la integración total de los sistemas de archivos componentes, una sola estructura de nombres global abarca todos los archivos del sistema.
  • Técnicas de Implementación: Se requiere un mecanismo para transformar un nombre de archivo en la posición correspondiente, para mejorar la disponibilidad de la información de transformación se usan métodos como la replicación, caché local o ambas.

Acceso a Archivos Remotos

En los sistemas de archivos convencionales el motivo de uso de Caché es el reducir las entradas y salidas del disco con el objetivo de mejorar el desempeño, en un Sistema de Archivos Distribuido, la meta es reducir el tamaño del tráfico de red así como las entradas y salidas del disco.

  • Uso de Caché Básico: Si los datos necesarios para satisfacer la solicitud no se encuentran ya en caché, entonces se lleva una copia de dichos datos desde el servidor al sistema del cliente. Los accesos se efectúan en la copia que se encuentra en la caché. Los archivos se siguen identificando con una copia que reside en la máquina del servidor, pero en este lugar, las copias o partes del archivo están dispersas en diferentes cachés. El tamaño del bloque en caché tiene una importancia en el uso por bloques.
  • Ubicación de Caché: Si los datos que se encuentran en caché se mantienen en disco, siguen estando ahí durante la recuperación, por lo que ya no es necesario traerlos nuevamente. Las cachés del disco tienen por lo tanto una ventaja muy clara sobre las cachés de memoria principal. Las cachés en memoria principal permiten estaciones de trabajo sin disco, acceso más rápido a datos, la tendencia actual es sobre memorias con mayor capacidad y menor costo. Las cachés de servidores estarán en memoria principal independientemente de donde se encuentren ubicadas las de usuarios, si en la máquina de un usuario también se usa caché de memoria principal, se puede crear un solo mecanismo de uso de caché para que sea utilizado tanto por el servidor como por el usuario.
  • Política de Actualización de Caché: La política más sencilla es la de escribir datos en el disco tan pronto como sean colocados en cualquier caché, su ventaja es la confiabilidad ya que se pierde poca información cuando falla el sistema de un cliente, la política de escritura demorada retrasamos las actualizaciones en la copia maestra, una consiste en vaciar un bloque cuando está a punto de ser expulsado de la caché de un cliente, otra variante consiste en escribir datos de regreso al servidor cuando se cierra el archivo
  • Consistencia
    • Estrategia iniciada por el cliente; El cliente inicia una verificación de validez en la que se pone en contacto con el servidor y verifica si los datos locales son consistentes con su copia maestra.
    • Estrategia iniciada por el servidor: El servidor registra por cada cliente las partes de los archivos que colocan en caché, esto con el objetivo de que pueda reaccionar cuando detecte una inconsistencia potencial, este ocurre cuando un archivo es colocado en caché por dos clientes diferentes en modo de conflicto.
  • Uso de Caché y Servicios Remotos; Una comparación de estos términos tiene que ver con un incremento potencial en el desempeño y una disminución en la simplicidad, tanto de los cachés como de los servicios remotos.
    • Ventajas: Un número considerable de accesos remotos se puede manejar eficientemente por la caché local cuando se hace uso de estas, el trabajo total adicional de la red en la transmisión de grandes porciones de datos es menor que cuando se transmiten series de respuestas a solicitudes específicas.
    • Desventajas: Problema de consistencia, debido a que en los patrones de acceso que exhiben escrituras poco frecuentes. El uso de caché es superior, para el uso de caché sea eficiente se requiere que se realice en máquinas con discos locales o grandes memorias principales. En el uso de cachés, debido a que los datos se transfieren en masa entre el servidor y el cliente y no en respuesta a las necesidades específicas de una operación sobre archivos, la interfaz inferior entre máquinas es diferente de la interfaz de usuario superior.

Servicios Con Estado

Conservan la información de estado de los clientes entre las solicitudes. Esto es lo que ocurre en los sistemas centralizados.

Ventajas:

· Es posible la cerradura de archivos

· Mensajes de solicitud más cortos

· Mejor desempeño

· Es posible la lectura adelantada

Servicios Sin Estado

Cuando un cliente envía una solicitud a un servidor, éste la lleva a cabo, envía la respuesta y elimina de sus tablas internas toda la información correspondiente a dicha solicitud. El servidor no guarda la información relativa a los clientes entre las solicitudes.

Ventajas:

· No existe límite para el número de archivos abiertos

· Tolerancia de fallas

· No se desperdicia el espacio del servidor en tablas

· No necesita llamadas open/close

· No hay problemas si un cliente falla

Replicación de Archivos

Esta técnica mejora la disponibilidad y el desempeño, ya que la selección de una réplica cercana para atender una solicitud de acceso, reduce el tiempo de servicio. La replicación de archivos se basa en la técnica de realizar varias copias de los archivos y colocarlas en varios servidores de archivos independientes. Al tener varias copias de un archivo, si un servidor deja de funcionar no perdemos la disponibilidad a ese archivo, ya que podremos acceder a otra copia suya disponible en otro servidor.

El problema asociado con las réplicas es su actualización, ya que cualquier cambio de un archivo debe verse reflejado en todas sus réplicas, por lo que si modificamos un archivo deberemos modificar todas y cada una de sus réplicas para mantener todos los sistemas de archivos actualizados.

UNIX United

El proyecto UNIX United de la Universidad de Newcastle, Inglaterra, es uno de los primeros intentos por aumentar la escala del sistema de archivos UNIX de modo que sea distribuido, sin modificar el modo de UNIX. En UNIX existe un conjunto de sistemas interconectados, que se llama sistemas componentes o constituyentes.

Panorama general:

Puede ser posible que cualquier cantidad de sistemas de UNIX se unan, para formar archivos UNIX United. Las estructuras de nombres de los sistemas (para archivos, dispositivos, directorios y órdenes) se reúnen en una sola estructura de nombres dentro de la que cada sistema componente es, en la práctica, solo en directorio. La unidad componente es un árbol de directorios UNIX completo que pertenece a cierta maquina.

Se asignan nombres a las raíces de las unidades componentes con el fin de hacerlas accesibles y distinguibles externamente. Se sigue haciendo referencia a la raíz propia de un sistema de archivos como “/”, y sigue fungiendo como punto de partida de todos los nombres de camino que comienza con “/”.

Los usuarios son conscientes del límite superior de su unidad componente actual, ya que deben usar las sintaxis “../” Siempre que desean ascender más allá de su máquina actual. Por tanto, UNIX United no ofrece transparencia de ubicación completa. Cada sistema componente tiene su propio conjunto de usuarios nombrados y su propio administrador (supe usuario).

La Newcastle Conection

Es una capa de software (En el nivel de usuario) incorporada en cada uno de los sistemas componentes. Esta capa de conexión separa el núcleo de UNIX, por un lado, y los programas en el nivel de usuario, por el otro lado la capa intercepta todas las llamadas al sistema que tienen que ver con archivos y separa las que es necesario redirigir a sistemas remotos.

Los accesos de archivos remotos en sí corren por cuenta de un conjunto de procesos servidores de archivos del sistema objetivo. La conexión inicial se establece con la ayuda de un proceso engendrador que tiene un nombre fijo estándar para que cualquier proceso extremo pueda llamarlo. Este proceso engendrador realiza las verificaciones de derechos de acceso remoto según un par de identificación máquina-usuario; además, convierte esta identificación en un nombre local válido.

El Network File System de SUN

El Network File System (NFS, sistema de archivos de red) es tanto una implementación como una especificación de un sistema de software para acceder a archivos remotos a través de redes de área local (O incluso de área extensa). NFS es parte de ONC+, que la mayor parte de los proveedores de UNIX está apoyando. La implementación forma parte del sistema operativo Solaris, que es una versión modificada de UNIX SVR4 que se ejecuta en estaciones de trabajo SUN y otro hardware.

NFS usa el protocolo de datagramas no confiable (UDP/IP) y Ethernet (u otro sistema de red). La especificación y la implementación se entrelazarán en nuestra descripción de NFS.

Panorama general:

NFS trata un conjunto de estaciones de trabajo interconectadas como un conjunto de máquinas independientes. La meta es permitir cierto grado de comportamiento entre estos sistemas de archivos (por solicitud explicita) de manera transparente. El comportamiento se basa en la relación servidor-cliente. Una máquina puede ser, y a menudo lo es, tanto un cliente como un servidor. Se permite el comportamiento entre cualquier par de maquinas, no solo con maquinas servidoras dedicadas. Para asegurar la independencia de las maquinas, el compartimiento de un sistema de archivos remoto sólo afecta la maquina del cliente y ninguna otra.

Con objeto de poder acceder a un directorio remoto de manera transparente desde una maquina específica, digamos, desde M, un cliente de esa máquina necesita realizar primero un operación montaje. La semántica de la operación es que un directorio remoto se monta en un directorio de un sistema de archivos local. Una vez finalizada la operación de montaje, el directorio montado semeja un subárbol integral del sistema de archivos local, y constituye al subárbol que desciende del directorio local. Este último se convierte en el nombre de la raíz del directorio recién montado.

Al montar un sistema de archivos remoto, el cliente no obtiene acceso a otros sistemas de archivos por casualidad se montaron sobre el sistema de archivos anterior. El mecanismo de montaje no exhibe la propiedad de transitividad.

Uno de los objetivos del diseño de NFS fue operar en un entorno heterogéneo de maquinas, sistemas operativos y arquitecturas de red diferentes. Las especificaciones de NFS son independientes de estos medios y por ello alienta otras implementaciones. La especificación NFS distingue entre los servicios provistos por un mecanismo de montaje y los servicios reales de acceso a archivos remoto. Por consiguiente, se especifican dos protocolos distintos para estos servicios; un protocolo de montaje y un protocolo para acceso a archivos remotos llamado protocolo NFS.

El protocolo de montaje:

Sirve para establecer la conexión lógica inicial entre un servidor y un cliente. En la implementación de SUN, cada máquina tiene un proceso servidor, fuera del núcleo, que desempeña las funciones del protocolo.

Una operación de montaje incluye el nombre del directorio remoto que se va a montar y el nombre de la maquina servidora en la que almacenará. La solicitud de montaje se transforma en la RPC correspondiente y se remite al servidor de montaje que se ejecuta en la maquina servidora especifica.

El servidor también mantiene una lista de las maquinas cliente y los correspondientes directorios que actualmente están montados. Esta lista se usa principalmente para fines administrativos.

El protocolo NFS:

El protocolo NFS proporciona un conjunto de llamadas a procedimientos remotos para efectuar operaciones con archivos remotos. Los procedimientos apoyan las operaciones siguientes:

· Buscar un archivo en directorio.

· Leer un conjunto de entradas de directorio

· Manipular enlaces y directorios

· Acceder a atributos de archivo

· Leer y escribir archivos

Una característica predominante de los servidores de NFS es que no tienen estado: no mantienen información acerca de sus clientes de un acceso siguiente. No existen paralelos con la tabla de archivos abiertos ni las estructuras de archivos de UNIX en el lado del servidor.

Cada solicitud tiene que incluir un juego completo de argumentos, incluido un identificador de archivo único y una distancia absoluta dentro del archivo único y una distancia absoluta dentro del archivo, para las operaciones apropiadas.

La arquitectura de NFS:

Consta de tres capas principales, la primera capa es la interfaz con el sistema de archivos UNIX, basada en las llamadas open, read, write, close, y en descriptores de archivos. La segunda capa es el virtual File System (VFS, sistema de archivos Virtual), y tiene dos funciones importantes:

  • Separa las operaciones genéricas de sistema de archivos de su implementación al definir una interfaz VFS limpia. Varias implementaciones de la interfaz VFS puede coexistir en la misma máquina, lo que permite un acceso transparente a diferentes tipos de sistemas de archivos montados localmente
  • El VFS se basa en una estructura de presentación de archivos llamada v-nodo que contiene un designador numérico para un archivo que es único en toda la red. El núcleo mantiene una estructura de v-nodo para cada nodo activo (archivo o directorio).

Traducción de nombres de camino:

La traducción de los nombres de camino se efectúa dividiendo el camino en nombres de componentes e invocando la búsqueda de NFS individualmente para cada par de nombre de componente y v-nodo de directorio. Una vez que se cruzan punto de montaje, cada búsqueda de componente genera una RCP individual para el servidor.

NFS permite montar un sistema de archivos remoto encima de otro que ya está montado (montaje en cascada). Sin embargo un servidor no puede fungir como intermediario entre un cliente y otro servidor. En vez de ello, un cliente debe establecer una conexión servidor-cliente directa con el segundo servidor montando directamente el directorio deseado. Cuando un cliente tiene un montaje en cascada, puede intervenir más de un servidor en el recorrido de un nombre de camino.

Operaciones remotas:

Existe una correspondencia casi uno a uno entre las llamadas al sistema normales de UNIX para operaciones con archivos y las RPC del protocolo NFS. Así, una operación con un archivo remoto se puede traducir directamente a la RPC correspondiente.

NFS se adhiere al paradigma de servicio remoto, pero en la práctica se emplean técnicas de buffers y cachés para mejorar el desempeño. No existe una correspondencia directa entre una operación remota y una RPC; más bien, las RPC traen bloques de archivo y atributos de archivo que se colocan en cachés locales. Las operaciones remotas futuras usan los datos en caché, sujetas a las restricciones de consistencia.

Andrew

Entorno de computación distribuída que se ha estado desarrollando desde 1983. Su nombre proviene de Andrew Carnegie y Andrew Mellon. Tiene varios beneficios, particularmente en áreas de seguridad y escalabilidad. Usa Kerberos como mecanismo de autenticación, e implementa listas de control de acceso en directorios para usuarios y grupos. El caching a nivel de cliente mejora el rendimiento del sistema, y permite el acceso limitado al sistema de archivos en el caso de caída del servidor o un fallo de red.

Espacio de nombres compartido:

Una característica importante de AFS es el volumen, un árbol de archivos y subdirectorios. Los volúmenes los crean los administradores y los enlazan con una ruta específica en una celda AFS. Una vez ha sido creado, los usuarios del sistema de archivos pueden crear directorios y archivos de manera normal sin tener en cuenta donde se encuentra físicamente el volumen. Un volumen puede tener una cuota asignada para limitar la cantidad de espacio consumido. Según las necesidades, los administradores pueden mover ese volumen a otro servidor y otra localización en disco sin la necesidad de notificar a los usuarios de dicho cambio; esta operación puede realizarse mientras se están usando los archivos dentro del volumen.

El espacio de nombres de archivos en una estación de trabajo Andrew es particionado en dos espacios:

  • Espacio de nombre compartido (Idéntico en todas las estaciones)
  • Local (Único para cada estación, solo contiene archivos temporales necesarios para la inicialización de la estación y enlaces simbólicos a los archivos que se encuentran en el espacio de nombres compartido).

Aspectos adicionales:

  • Movilidad de los clientes: Pueden acceder a cualquier archivo del espacio de nombres compartido desde cualquier estación de trabajo.
  • Seguridad: Mensajes cifrados en la comunicación cliente servidor, la información acerca de los clientes y grupos se guarda en una base de datos de protección que se replica en cada servidor.
  • Protección: Proporciona listas de acceso para proteger directorios y los bits normales de UNIX para proteger archivos.
  • Heterogeneidad: Integración de estaciones de trabajo y sistemas operativos diferentes.

Sprite

Utilidades permitían a dispositivos remotos ser mapeados en el espacio de la computadora local, permitiendo impresiones en red y otras tareas similares. Muchos archivos Unix clave estaban basados en la red. Asimismo, todas las máquinas en la red compartían el directorio root. Otras utilidades Unix comunes (Como finger) fueron re escritas para hacerlas trabajar en red, escuchando a toda la gente conectada a través de la red. Esto hizo que una red Sprite trabajara como si fuera un gran sistema simple de tiempo compartido o una imagen de un sistema simple. Otra adición clave en esta tecnología fue la migración de procesos, los cuales permitían a los programas ser movidos entre ordenadores en cualquier instante.

El trabajo en los inicios de Sprite terminó alrededor de 1987, pero fue mejorado durante el siguiente año. A principios de 1990, Sprite era usado como la base para el desarrollo del primer sistema de archivos log-estructurado (LFS), que incrementaba de forma dramática el desempeño de la escritura de archivos, a costa de un decremento en el desempeño de la lectura. Estos sistemas permiten una mucho más simple recuperación de errores, lo cual se convirtió en el principal enfoque del proyecto durante ese período. Se continuó hasta 1994 (Sprite no era un sistema microkernel, y sufrió los mismos problemas que otros sistemas Unix en términos de complejidad de desarrollo, convirtiéndose cada vez más difícil de desarrollas mientras más funcionalidad era añadida).

Locus

Pretende construir un Sistema Operativo Distribuido con todas las de la ley, presenta a los clientes y aplicaciones una sola jerarquía de nombres con estructura de árbol, la cual cubre todos los objetos de todas las máquinas del sistema. Los nombres son totalmente transparentes, un archivo Locus puede corresponder a un conjunto de copias distribuidas en diferentes sitios. La estructura de nombres lógica disfraza los detalles tanto de ubicación como de replicación ante la vista de clientes y las aplicaciones. A fin de permitir una rápida y un acceso confiable a todo el sistema de archivos del clúster Locus utiliza la replicación, los datos de los archivos pueden ser almacenados en más de un nodo y el locus mantendría las diferentes copias hasta la fecha.