martes, 27 de enero de 2009

Sistemas de Archivos Distribuidos

Un sistema de archivos distribuido o sistema de archivos de red es un sistema de archivos de computadoras que sirve para compartir archivos, impresoras y otros recursos como un almacenamiento persistente en una red de computadoras. El primer sistema de este tipo fue desarrollado en la década de 1970, y en 1985 Sun Microsystems creó el sistema de archivos de red NFS el cual fue ampliamente utilizado como sistema de archivos distribuido. Otros sistemas notables utilizados fueron el sistema de archivos Andrew (AFS) y el sistema Server Message Block SMB, también conocido como CIFS.

Diseño de los Sistemas Archivos Distribuidos

Por lo general un sistema distribuidos de archivos tiene dos componentes razonablemente distintos: el verdadero servicio de archivos y el servicio de directorios. El primero se encarga de las operaciones en los archivos individuales, como la lectura escritura y adición, mientras que el segundo se encarga de crear y administrar directorios, añadir y eliminar archivos de los directorios, etc.
La interfaz del servicio de archivos
Un aspecto importante del modelo de archivo es si éstos se pueden modificar después de su creación. Existen algunos sistemas distribuidos que permiten únicamente las operaciones de archivos CREATE Y READ. Una vez creado un archivo no se puede modificar. Se dice que tal archivo es inmutable. Estos archivos facilitan el ocultamiento y duplicación de archivos, puesto que esto elimina todos los problemas asociados con la actualización de todas las copias de un archivo cada vez que éste se modifique.
La protección en los sistemas distribuidos utiliza la misma técnica de los procesos con un procesador: posibilidades y listas para control de acceso. En el caso de las posibilidades cada usuario tiene cierto boleto llamado posibilidad, para cada objeto al que tiene acceso. La posibilidad determina los tipos de accesos permitidos ( por ejemplo se permite la lectura pero no la escritura ).
Todos los esquemas de lista para el control de acceso asocian a cada archivo una lista implícita o explícita de los usuarios que pueden tener acceso a los archivos y la forma de dicho acceso. El esquema de UNIX es una lista para control de acceso simplificada, con los bits que controlan la lectura, escritura y ejecución de cada archivo, en forma independiente para el propietario, grupo del propietario y todas las demás personas.
Los servicios de archivos se pueden dividir en dos tipos, según si soportan un modelo carga /descarga o un modelo de acceso remoto. En el modelo carga/descarga el servicio de archivo sólo proporciona la lectura de un archivo y la escritura del mismo. En la lectura transfiere todo un archivo de uno de los servidores de archivos al cliente solicitante. La escritura transfiere todo un archivo en sentido contrario del cliente al servidor. Los archivos se pueden almacenar en memoria o en disco local, como sea necesario.
La ventaja del modelo carga/descarga es la sencillez del concepto. Los programas de aplicación buscan los archivos que necesitan y después lo utilizan de manera local. Los archivos modificados o nuevos se escriben de regreso al terminar el programa.
Además, la transferencia de archivos completos es muy eficiente. Sin embargo el cliente debe disponer de un espacio suficiente de almacenamiento para todos los archivos necesarios. Otra desventaja es que si sólo se necesita una pequeña fracción de un archivo, el traslado del archivo completo es un desperdicio.
El otro tipo de servicios de archivos el de acceso remoto, en este modelo se proporcionan un gran número de operaciones para abrir y cerrar archivos, leer y escribir parte de archivo, moverse a través de un archivo, examinar y modificar los atributos de archivos, etc. Mientras en el modelo carga/descarga el servicio de archivos sólo proporciona el almacenamiento físico y la transferencia, en este caso el sistema de archivos se ejecuta en los servidores y no en los clientes. Su ventaja es que no necesita mucho espacio por parte de los clientes, a la vez que elimina la necesidad de transferir archivo completos cuando sólo se necesita un parte de ellos.





La interfaz del servidor de directorios


Proporciona la operaciones para crear y eliminar directorios, nombrar o cambiar el nombre de archivo y mover esto de un directorio a otro.
El servicio de directorios define un alfabeto y una sintaxis para formar los nombres de archivos( y directorio ). Lo usual es que los nombres de archivos tengan de uno hasta un cierto numero de letras, números y ciertos caracteres especiales. Algunos sistemas dividen los nombres de archivo en dos partes, a menudo separada por un punto. La segunda parte del nombre llamada la extensión de archivo identifica el tipo de este. Otros sistemas utilizan un atributo explícito para este fin, en vez de utilizar una extensión dentro del nombre.
Todos los sistemas distribuido permiten que los directorios contengan subdirectorios, para que los usuarios puedan agrupar los archivos relacionados entres si. De acuerdo con esto se dispone para la creación y eliminación de directorios, asi como para introducir, eliminar y buscar archivos en ellos. Por lo general, cada subdirectorio contiene todos los archivos de un proyecto, como un programa o un documento de gran tamaño. Cundo se despliega el (sub)directorio solo se muestra los archivos relevantes, los archivos no relacionados estan en otros (sub)directorios y no agrandan la lista. Los subdirectorios pueden contener sus propios subdirectorios y asi sucesivamente. Lo que conduce a un árbol de directorios, el cual se conoce como sistema jerárquico de archivo.
En ciertos sistemas es posible crear enlace o apuntadores a un directorio arbitrario. Estos se pueden colocar en cualquier directorio, lo que permite construir no solo arboles, sino gráficas arbitrarias de directorios que son mas poderosas. La distinción entre arboles y gráficas es de particular importancia en un sistema distribuido.
El directorio D tiene un enlace con el directorio B. El problema aparece cuando se elimina el enlace de A a B. En una jerarquía de estructura de árbol solo se puede eliminar un enlace con un directorio si el directorio al cual se apunta es vacío. En una gráfica se permite la eliminación de un enlace mientras existan al menos otros enlaces. Mediante un contador de referencias que aparece en la esquina superior derecha de cada directorio se puede determinar si el enlace por eliminar es el ultimo.
Después de eliminar el enlace de A a B, el contador de referencia de B se reduce de 2 a 1. Sin embargo ahora no es posible llegar a B desde la raíz del sistema de archivo A. Los tres directorios B, D y E y todos sus archivos se convierten en huérfanos.
Si todo esta en una máquina, es posible, aunque costoso, descubrir los directorios huérfanos, puesto que toda la información esta en un lugar. Se puede detener toda la actividad de los archivos y recorrer la gráfica desde la raíz, para señalar todos los directorios alcanzables. En un sistema distribuido existen varias máquinas y no se puede detener toda la actividad.
Un aspecto fundamental en el diseño de cualquier sistema distribuido de archivos es si todas las máquinas (y procesos) deben tener con exactitud la misma visión de la jerarquía de los directorios.


Nombre de dos niveles


La mayoría de los sistemas distribuidos utilizan cierta forma de nombres con dos niveles. Los archivos tienen nombres simbólicos, como prog.c, para uso de las personas, pero también pueden tener nombres binarios internos, para uso del propio sistema. Lo que los directorios hacen en realidad es proporcionar una asociación entre estos dos nombres. Para las personas y los programas, es conveniente utilizar nombres simbólicos, pero para el uso dentro del propio sistema, estos nombres son muy grandes y difíciles. Cuando un usuario abre un archivo o hace referencia a un nombre simbólico, el sistema busca de inmediato en el directorio apropiado para obtener el nombre binario, el cual utilizará para localizar en realidad al archivo.
Los nombres binarios varían mucho de un sistema a otro. En ciertos sistemas el nombre binario puede ser sólo un número de un nodo-i , en Unix.
En un esquema general para los nombres es que el nombre binario indique el servidor y un archivo especifico en ese servidor. Este método permite que un directorio en un servidor tenga un archivo en un servidor distinto. Otra alternativa es utilizar un enlace simbólico. Un enlace simbólico es entrada de directorio asociada a una cadena (servidor, nombre de archivo) la cual se puede buscar en el directorio correspondiente para encontrar el nombre binario. El propio enlace simbólico es sólo el nombre de una ruta de acceso.
Otra idea es utilizar las posibilidades como los nombres binarios. En este método la búsqueda de un nombre en ASCII produce una posibilidad, la cual puede tomar una de varias formas, estos nombres pueden contener un número físico o lógico de una máquina o la dirección en la red del servidor apropiado y del archivo específico necesario. Se puede utilizar una dirección física para enviar un mensaje al servidor sin mayor interpretación. Una dirección lógica se puede localizar mediante una transmisión o mediante una búsqueda en un servidor de nombres.
Otra posibilidad es buscar un nombre en ASCII y obtener no uno sino varios nombres binarios. Por lo general estos representan al archivo original y todos sus respaldos. Este método proporciona cierto grado de tolerancia de fallas por medio de la redundancia.


Semántica de los Archivos compartidos .

Si dos o más usuarios comparten el mismo archivo, es necesario definir con precisión la semántica de la lectura y escritura para evitar problemas.
Existe cuatros maneras de compartir archivos :


  1. Semántica de UNIX: Establece que si una operación READ sigue después de una operación WRITE, READ regresa el valor recién escrito de manera análoga, cuando dos WRITE se realizan en serie y después se ejecuta un READ, el valor que se lee es de la última escritura. Este modelo es fácil de comprender y tiene una implantación directa.
    La semántica de UNIX se puede lograr fácilmente en un sistema distribuido mientras exista un servidor de archivos y los clientes no oculten los archivos Cada operación en un archivo es visible a todos los procesos de manera instantánea.
    En un sistema distribuido mientras sólo exista un servidor de archivos y los clientes no oculten los archivos. Todas las instrucciones READ y WRITE pasan en forma directa al servidor de archivos, que lo procesa en forma secuencial.
    Los retrasos en la red pueden hacer que un READ ejecutado después de un WRITE llegue primero al servidor y obtenga primero el servidor. Este problema se puede resolver si se permite a los clientes que mantengan copias locales de los archivos de uso frecuente en sus cachés particulares, pero si un cliente modifica de forma local un archivo en caché y si poco después otro cliente lee el archivo del servidor obtendría un archivo obsoleto.
    Para salir de esta dificultad se debería enviar de inmediato todas las modificaciones de los archivos en caché al servidor. Aunque esto es sencillo desde el punto de vista conceptual el método es ineficiente. Otra solución consiste en que los cambios a un archivo abierto solo pueden ser vistos en un principio por el proceso (o tal vez la máquina) que modificó el archivo. Los cambios serán visibles a los demás procesos (o máquinas) solo cuando se cierre el archivo. Este método es de uso común y se conoce como semántica de sesión.

  2. Semántica de sesión: Al usar este método puede ocurrir que dos o más clientes ocultan y modifican el mismo archivo en forma simultanea. Una solución consiste que al cerrar cada archivo su valor se envíe de regreso al servidor, de modo que el resultado final dependerá del que lo cierre más rápido.
    La dificultad con el uso de cachés y la semántica de sesión es que viola otro aspecto de la semántica de UNIX además del hecho de que no todos los READ
    regresen el valor de escritura más reciente. En UNIX, a cada archivo abierto se le
    asocia un apuntador que indica la posición actual en el archivo. Una instrucción
    READ toma los datos a partir de esa posición y WRITE deposita los datos ahí.
    Este apuntador es compartido por los procesos que abrieron el archivo.
    Ningún cambio es visible a otros procesos hasta que el archivo se cierra.

  3. Archivos inmutables: En este método las únicas operaciones que se permiten son CREATE y READ. Es posible crear un archivo por completo nuevo e introducirlo en el sistema de directorios, con el nombre de un archivo ya existente, el cual se vuelve inaccesible. Aunque es imposible modificar el archivo es posible reemplazarlo por un archivo nuevo. Aunque los archivos no se puedan modificar los directorios sí.
    Un problema mas molesto consiste en que hacer si un archivo se reemplaza
    mientras otro esta ocupado leyéndolo. Una solución consiste en que el lector
    utilice el archivo anterior, aunque este ya no exista en directorio alguno de esta
    forma se permite que un proceso con un archivo abierto continua utilizándolo, aún cuando este haya sido eliminado de todos los directorios. otra solución consiste en detectar la modificación del archivo y hacer que fallen los intentos posteriores por leerlos. No existe actualizaciones; es más fácil de compartir y replicar.

  4. Transacciones: Para tener acceso a un archivo o grupo de archivos, un proceso ejecuta en primer lugar cierto tipo de primitiva BEGINTRANSACTION para señalar que lo que sigue debe ejecutarse de manera indivisible. Después vienen las llamadas al sistema para leer o escribir en uno más archivos. Al terminar el trabajo, se ejecuta una primitiva en TRANSACTION, esto garantiza que todas las llamadas contenidas dentro de la transacción se levaran a cabo en orden, sin interferencia de otras transacciones concurrentes. Si dos o más transacciones se realizan al mismo tiempo, el sistema garantiza que el resultado final es el mismo que si se ejecutasen en cierto orden secuencial. Todos los cambios tienen la propiedad del todo o nada.

Implantacion de un Sistema Distribuido de Archivos:


Uso de Archivos

Existen dos formas de medir el grado de utilización de cada uso que se le puede dar a un archivo. Estas formas son:

* Mediciones Estáticas: Son mediciones que se le realiza al estado de un sistema en un instante de tiempo. Este tipo de mediciones permite observar la distribución de tamaños de los archivos, la distribución de tipos de archivos y la cantidad de espacio que ocupan los archivos de varios tamaños y tipos.

* Mediciones Dinámicas: Este tipo de mediciones se encarga de registrar todas las operaciones en una bitácora para un análisis posterior y así obtener información con respecto a la frecuencia con que se realizan ciertas operaciones, número de archivos abiertos y la cantidad de archivos compartidos.

Estructura del Sistema

La estructura del sistema es la forma en la que esta organizada internamente los archivos y directorios. En la estructura de un sistema es importante determinar los servidores y los clientes para el servicio de archivos y directorios, sin embargo, el servidor de archivos y el de directorios son solamente programas del usuario, de esta manera se puede configurar el sistema para que ejecute o no el software de cliente o servidor en la misma máquina, como se desee.

Es importante considerar el aspecto estructural de los servidores de archivos y directorios, en cuanto a que deben o no contener los estados de los clientes. Es decir, existen dos tipos de pensamiento con respecto a este tema:

* Servidores sin Estado (“stateless”): Consiste en que 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 guarda información del cliente entre solicitudes, por lo tanto no se desperdicia el espacio del servidor en tablas.
- Cada solicitud debe ser autocontenida.
- No existe límite para el número de archivos abiertos.

* Servidores con Estado: Conservan la información de estado de los clientes entre las solicitudes. Esto es lo que ocurre en los sistemas centralizados.
Ventajas:- Mensajes de solicitud son más cortos.
- Mejor desempeño debido a que las tablas pueden estar en la memoria principal o la caché.- Es posible la lectura adelantada.
- Puede manejar el bloqueo de archivos.

Ocultamiento

En un sistema cliente - servidor, en el que cada uno cuenta con su memoria principal y un disco, pueden almacenarse los archivos o partes de ellos en cuatro lugares diferentes: el disco del servidor, la memoria principal del servidor, el disco del cliente o la memoria principal del cliente.


Cuatro lugares para guardar archivos o partes de ellos

Dependiendo del lugar donde se guarde los archivos se pueden presentar ciertas ventajas y desventajas respecto a la velocidad de transferencia. Por lo menos si el archivo es guardado en el disco puede que este tenga suficiente espacio y se necesite solo una copia del archivo para ser guardado, pero su desempeño sería bajo en la transferencia de archivos. Aun así, se puede lograr un mejor desempeño ocultando los archivos en la memoria principal del servidor. Como la memoria principal siempre es de menor capacidad que el disco, entonces debe implementarse un algoritmo para decidir qué archivos o partes de ellos permanecerán en el caché del servidor.

En este algoritmo se tienen los siguientes problemas:
- Requiere determinar el tamaño de la unidad que administra el caché ya que puede administrar archivos completos o bloques del disco.
- Se necesita un algoritmo de reemplazo cuando el caché esté lleno (LRU).

Réplica

Los sistemas de archivos distribuidos usan servidores independientes los cuales disponen de varias copias de archivos para proporcionar la réplica de los mismos. Este servicio de réplica se brinda por las siguientes razones:
- Existe mayor confiabilidad ya que disponen de respaldos independientes de cada archivo. - Si un servidor falla igual se puede tener acceso al archivo esto no debe ocasionar que el sistema se detenga.
- Desempeño: Repartir la carga de trabajo entre varios servidores.

Existen tres formas de realizar la réplica:

* Réplica explícita:
Se da cuando un proceso crea un archivo en un servidor específico y adicionalmente puede crear copias en otros servidores.
* Réplica retrasada: el cliente crea el archivo en un servidor, y luego el mismo servidor crea automáticamente réplicas del archivo en otros servidores.
* Réplica de archivos mediante un grupo: En este caso, se tiene un servidor primario, y los demás servidores son secundarios. En donde la actualización llega al servidor primario, éste realiza los cambios en forma local y luego envía órdenes a los servidores secundarios para que realicen las mismas modificaciones. Las lecturas se pueden ejecutar desde cualquier servidor.

Tendencias en los Sistemas Distribuidos de Archivos

Los cambios tecnológicos de los últimos años pueden traer también cambios muy importantes en los sistemas de archivos distribuidos. Además con el rápido avance que se da en las redes de comunicaciones y su incremento en el ancho de banda la creación de paquetes que ofrecen la compartición de archivos es común de encontrarse en el mercado. En la industria, el esquema más solicitado es aquel que permite acceder a los grandes volúmenes de información de los grandes servidores desde las computadores personales o convencionales y desde otros servidores. Es por eso que la principal solución que adoptada por las pequeñas empresas es contar con Novell Netware en un servidor 486 o superior y acceder a los archivos desde máquinas similares.Entre los sistemas de archivos distribuidos más populares que existen en la actualidad, tenemos los que nos proporciona Netware, tales como:

  • Remote Filke Sharing (RFS en UNIX)

  • Network File System (de Sun Microsystems)

  • Andrew File System (AFS)
Es probable que los cambios en el hardware tengan un efecto muy importante en los futuros sistemas distribuidos de archivos. También es probable el impacto del cambio en las expectativas del usuario. Veremos a continuación algunos aspectos en los que podrían presentarse cambios en un futuro no muy lejano, teniendo en cuenta que los cambios tecnológicos se producen día a día y en desmesurado avance.



Consideraciones Respecto del Hardware



El abaratamiento de la memoria principal permitirá disponer de servidores con memorias cada vez mayores.
  • Se podría alojar directamente en memoria el sistema de archivos logrando mayor sencillez y desempeño.

  • Se debería prever la obtención de respaldos continuos o por incrementos ante la posibilidad del corte en el suministro eléctrico.

  • El respaldo podría hacerse en discos ópticos regrabables que tengan una asociación uno a uno con la memoria:
    El byte “k” de la memoria correspondería al byte “k” del disco.

La disponibilidad de redes de fibra óptica de alta velocidad permitiría esquemas tales como:

  • Un servidor de archivos en la memoria principal del servidor con respaldo en el disco óptico.
  • Eliminación del disco del servidor y del caché del cliente.

  • Se simplificaría significativamente el software.


La posible construcción de interfaces de red especializadas que permitan resolver por hardware problemas difíciles de soportar por software:

  • Cada interfaz de red tendría un mapa de bits con un bit por cada archivo en el caché.
  • Se podrían habilitar cerraduras por archivo.
  • Para modificar un archivo un procesador activaría el bit correspondiente en la interfaz.


Escalabilidad


El concepto de escalabilidad propone que cualquier computador individual ha de ser capaz de trabajar independientemente como un sistema de archivos distribuido, pero también debe poder hacerlo conectado a muchas otras máquinas.



Los sistemas distribuidos de archivos que operan bien para cientos de máquinas podrían fallar en algún aspecto trabajando con miles o decenas de miles de máquinas. Generalmente los algoritmos centralizados no se escalan bien ya que el servidor centralizado podría convertirse en un cuello de botella; por ello se podría separar el sistema en unidades más pequeñas relativamente independientes entre sí.

Las transmisiones también son un área problemática:

  • Si cada máquina transmite una vez por segundo:
    - Con “n” máquinas habría “n” transmisiones y “n 2 ” interrupciones por segundo.
    - Si “n” crece esto se puede convertir en un problema.

En general los recursos y algoritmos no deben ser lineales con respecto al número de usuarios.



Redes en un Area Amplia



La mayor parte del trabajo que se realiza actualmente en los sistemas distribuidos se basa en los sistemas alojados en redes LAN. pero cada vez será mayor la necesidad de conectarlos entre sí cubriendo grandes áreas (nacionales, regionales, continentales, etc.). La tendencia en el futuro es que veremos conectados entres sí muchos sistemas distribuidos LAN con el fin de formar sistemas distribuidos transparentes a través de todo el mundo.

Los sistemas de archivos deberán soportar estas necesidades teniendo presente la heterogeneidad de los equipos, códigos de representación (ASCII, EBCDIC, etc.), formatos, etc. Deberá atenderse a los cambios de tendencia en los requerimientos de las aplicaciones. Un problema adicional e inherente en los sistemas distribuidos masivos es el ancho de banda de la red, que puede resultar insuficiente para el desempeño esperado.


Tolerancia de Fallos
En la actualidad, la mayor parte de los sistemas de cómputo no presentan tolerancia a fallas. Es común escuchar en las agencias bancarias la frase: "No hay sistema", por lo que tomamos este hecho como algo absolutamente normal. Salvo algunos sistemas especializados como los que se utilizan para el control de tráfico aéreo, otros sistemas no presentan este comportamiento que debería ser el óptimo.

La difusión de los sistemas distribuidos incrementa la demanda de sistemas que esencialmente nunca fallen.Los sistemas tolerantes a fallos requerirán cada vez más una considerable redundancia en hardware, comunicaciones, software, datos, etc.

La réplica de archivos sería un requisito esencial. También debería contemplarse la posibilidad de que los sistemas funcionen aún con la carencia de parte de los datos. Los tiempos de fallo aceptables por los usuarios serán cada vez menores.

Usuarios Móviles



Este hecho presenta la inconveniencia de que muchos usuarios no estarán conectados todo el tiempo al sistema, es decir, solo lo estarán algún tiempo y luego no aparecerán, es decir, Los usuarios de equipos móviles (laptop, notebook, etc.) están gran parte del tiempo desconectados del sistema de archivos de su organización:


  • Requieren una solución, que podría usar ocultamiento:


- Cuando está conectado el usuario carga al equipo móvil los archivos que cree necesitará después.
- Los utiliza mientras está desconectado.
- Al reconectarse, los archivos en el caché deben fusionarse con los existentes en el árbol de directorios, logrando la sincronización.
- La conexión para la sincronización puede ser problemática si se utiliza un enlace de ancho de banda reducido.


Lo deseable sería un sistema distribuido totalmente transparente para su uso simultáneo por parte de millones de usuarios móviles que frecuentemente se desconecten.