Historia de los sistemas de archivos distribuidos

Completado

Como recapitulación, un sistema de archivos distribuido (DFS) es un sistema de archivos que tiene archivos distribuidos entre varios servidores de archivos. Es importante tener en cuenta que, en un sistema de archivos distribuido, el cliente ve un único espacio de nombres global que contiene todos los archivos de todos los servidores del sistema de archivos. Un DFS requiere administración de metadatos para que los clientes puedan encontrar los archivos y bloques de archivos necesarios en los servidores de archivos. Normalmente, se implementan en varios nodos de uso compartido de archivos y están pensados para su uso por parte de varios usuarios al mismo tiempo. Como con cualquier recurso compartido, se deben tener en cuenta varias consideraciones de diseño: rendimiento, coherencia, tolerancia a errores y disponibilidad son algunas de ellas.

Orígenes y evolución de los sistemas de archivos distribuidos

Los sistemas de archivos se han visto muy influenciados por el sistema de archivos UNIX y el sistema de archivos rápido (FFS) de BSD, que se usaban como sistemas de archivos locales. Recuerde que el principal propósito de estos sistemas de archivos es organizar los datos en el disco de una manera rápida y confiable.

Los sistemas de archivos en red, como NFS, surgieron después para permitir a los usuarios compartir archivos a través de una red. NFS usa una arquitectura cliente-servidor en la que un servidor puede compartir los datos que contiene con una serie de clientes. Es un protocolo simple que se sigue usando todavía para compartir archivos a través de una red. En NFS, los archivos no se pueden distribuir entre varios servidores de manera coordinada, sino que cada servidor puede compartir una serie de archivos. Tampoco hay ninguna vista global coherente del espacio de nombres. Los clientes pueden montar recursos compartidos NFS en cualquier ubicación del árbol de sistema de archivos local. Así, este método tiene una capacidad limitada de escalar a miles de clientes o servidores, y su uso se limita a redes de área local (LAN).

El sistema de archivos Andrew (AFS) es un ejemplo temprano de un verdadero sistema de archivos distribuido. AFS permite que los hosts cooperativos (clientes y servidores) compartan recursos del sistema de archivos tanto en redes de área local como de área extensa de una forma eficaz. AFS consta de celdas, una agrupación administrativa de servidores que presentan un único sistema de archivos cohesionado. Las celdas se pueden combinar para formar un solo espacio de nombres global. Cualquier cliente que accede a los datos de AFS, primero copia el archivo de forma local en el cliente. Los cambios en el archivo se realizan de forma local siempre que el archivo esté abierto. Cuando el archivo se cierra, el cliente de AFS sincroniza los cambios de nuevo con el servidor. Una evolución de AFS es CODA, que es un sistema de archivos distribuido que mejora a AFS, en particular con respecto al uso compartido de la semántica y la replicación. Tanto AFS como CODA son compatibles con POSIX, lo que significa que funcionan con las aplicaciones UNIX existentes sin ninguna modificación.

En 2003, Google reveló el diseño de su sistema de archivos distribuido, denominado GFS2, que se diseñó desde cero para proporcionar acceso eficaz y confiable a los datos mediante grandes clústeres de hardware estándar. GFS está diseñado para almacenar archivos muy grandes como fragmentos almacenados en varios servidores (normalmente de 64 MB), de manera replicada. Aunque GFS tiene una vista de cliente singular como AFS, la ubicación de los fragmentos de archivos se expone al usuario, lo que proporciona a los clientes la oportunidad de recuperar archivos de la réplica disponible más cercana. Pero GFS no es compatible con POSIX, lo que significa que las aplicaciones deben usar una API especial para trabajar con GFS. El sistema de archivos distribuido Hadoop (HDFS) es una variante de código abierto de GFS que vamos a examinar detalladamente en este módulo.

En 2006, se describió Ceph por primera vez en un trabajo de Weil et.al.1 Ceph está diseñado para ser un servicio de almacenamiento de objetos distribuido que se puede escalar a cientos de miles de equipos, a la vez que almacena petabytes de datos. Luego las aplicaciones se comunican con Ceph a través de diversas API, desde una API nativa que es similar a la forma en que funciona GFS, a una API de sistema de archivos compatible con POSIX denominada Ceph FS. Ceph también admite una abstracción de dispositivo de almacenamiento en bloque, lo que lo convierte en un sistema de archivos adecuado para almacenar imágenes de máquinas virtuales.

Desde entonces Google ha desarrollado GFS y lo ha convertido en un sistema llamado Colossus.3.


Referencias

  1. Weil, S. A., Brandt, S. A., Miller, E. L. y Maltzahn, C. (2006). Ceph: A scalable, high-performance distributed file system Actas del 7º simposio sobre diseño e implementación de sistemas operativos (OSDI) 307-320
  2. Sanjay Ghemawat, Howard Gobioff y Shun-Tak Leung (2003). The Google File Systems 19º simposio de ACM sobre principios de sistemas operativos
  3. McKusick, Kirk y Quinlan, Sean (marzo de 2010). GFS: Evolution on Fast-forward Comunicaciones de ACM