# Andrew File System

El Andrew File System (Sistema de archivos Andrew), o AFS es un sistema de archivos distribuido a través de la red que fue desarrollado como parte del proyecto Andrew por la Universidad Carnegie Mellon. Su nombre proviene de Andrew Carnegie y Andrew Mellon. Es utilizado fundamentalmente en entornos de computación distribuida.
El Andrew File System (Sistema de archivos Andrew), o AFS es un sistema de archivos distribuido a través de la red que fue desarrollado como parte del proyecto Andrew por la Universidad Carnegie Mellon. Su nombre proviene de Andrew Carnegie y Andrew Mellon. Es utilizado fundamentalmente en entornos de computación distribuida. AFS (Andrew File System) es un sistema de archivos distribuido que permite almacenar y compartir datos entre múltiples computadoras y sistemas operativos. Fue desarrollado en la Universidad Carnegie Mellon y luego fue comercializado por Transarc Corporation, que posteriormente fue adquirida por IBM.
Los sistemas de archivos AFS se utilizan para administrar grandes cantidades de datos que deben compartirse entre varias máquinas y ubicaciones. AFS proporciona características como escalabilidad, tolerancia a fallas y seguridad que son cruciales para administrar datos a gran escala.
Los sistemas de archivos AFS suelen constar de un conjunto de servidores de archivos, que almacenan los datos, y un conjunto de máquinas cliente, que acceden a los datos. Los servidores de archivos están organizados en celdas, que son agrupaciones lógicas de servidores que comparten un conjunto común de políticas y controles administrativos.
Una de las características clave de AFS es su capacidad para replicar datos en varios servidores, lo que garantiza que los datos estén siempre disponibles, incluso si uno o más servidores fallan. AFS también proporciona funciones de seguridad integradas, como la autenticación y el cifrado, para proteger los datos del acceso no autorizado.

## Listas de control de acceso (ACL)

Las listas de control de acceso (ACL) definen qué usuarios y grupos pueden acceder a los directorios y archivos contenidos en la lista y de qué manera, una ACL puede guardar hasta 20 entradas, cada entrada contiene un usuario o grupo y un conjunto de permisos. Un grupo puede incluir usuarios y máquinas, cada usuario que pertenezca a un grupo hereda todos los permisos concedidos al grupo en la ACL.

## Permisos

* Permiso ‘l’ (lookup): este permiso funciona como un portero a los directorios y archivos, es necesario contar con éste permiso para poder hacer uso de cualquier otro permiso y es necesario para ingresar en cualquier subdirectorio del directorio.
* Permiso ‘i’ (insert). Este permiso habilita a un usuario agregar nuevos archivos en el directorio, por creación o copia, además de crear nuevos subdirectorios.
* Permiso ‘d’ (delete): Este permiso habilita a un usuario a eliminar archivos y subdirectorios del directorio o moverlos a otros directorios (si se tienen los permisos en este).
* Permiso ‘a’ (administer): Este permiso habilita a un usuario a cambiar la ACL del directorio.
* Permiso ‘r’ (read): este permiso habilita al usuario a leer el contenido de los archivos en el directorio y usar el comando ls -1.
* Permiso ‘w’ (write): este permiso habilita al usuario a modificar el contenido de archivos en el directorio y usar el comando chmod para modificar los permisos de UNIX.
* Permiso ‘k’ (lock): este permiso habilita al usuario a ejecutar programas que hagan llamadas al sistema para bloquear archivos en el directorio.

## Ventajas

* Mayor disponibilidad: La interrupción en una o más máquinas del sistema AFS no implica que un archivo no se encuentre disponible. Archivos populares, como archivos binarios, se almacenan en muchas máquinas, permitiendo acceder a ellos sin importar si se produce una interrupción en alguna máquina. En su lugar, las solicitudes de los usuarios para el programa se enrutan a máquinas accesibles. En un sistema de archivos centralizado no distribuido, la pérdida o interrupción de la máquina donde se almacenan los archivos implica la no disponibilidad de estos.
* Mayor eficiencia: En un sistema de archivos distribuido, la carga de trabajo se distribuye entre muchas máquinas, a diferencia de un sistema de archivos convencional, donde la carga de trabajo la absorbe un único servidor.

## Características

* AFS tiene varios beneficios sobre los sistemas de archivos en red tradicionales, en particular en áreas de seguridad y escalabilidad. Es frecuente que los despliegues de AFS en empresas lleguen a tener más de 25.000 clientes. AFS usa Kerberos como mecanismo de autenticación, e implementa listas de control de acceso en directorios para usuarios y grupos. Cada cliente mantiene una caché en el sistema de archivos local para aumentar la velocidad de acceso a los archivos. Esto también permite el acceso limitado al sistema de archivos en el caso de caída del servidor o un fallo de red.
* AFS utiliza el modelo de baja consistencia. En AFS los archivos son cacheados bajo demanda en las estaciones locales, las cuales son lo suficientemente grandes como para almacenar un gran número de archivos.
* La estrategia en la que se basa la utilización de estas cachés se fundamenta en un uso normal de archivos. Donde por norma general un usuario suele tratar con archivos pequeños, de acceso secuencial y en modo lectura.
* De igual modo hay que resaltar que las bases de datos son el único tipo de archivo que debido a su concurrencia y continua actualización por parte de los usuarios se excluyen del diseño de AFS.
* Las funciones que contiene el sistema se distribuyen en diversos servidores para agregar reedundancia y tolerancia a fallos.
* Los datos que se guardan se pueden mover a través de los servidores de forma transparente al usuario, siempre y cuando estos estén activos.
* Mientras el sistema esté activo, los servidores que componen al sistema pueden ser conectados o desconectados.
* Es fácil que el sistema se pueda adaptar a diversas personas por su flexibilidad.
* El sistema presenta algunos medios para controlar el acceso a los documentos.
* Es posible duplicar los archivos almacenados para generar mayor redundancia.
* Puede utilizar la autenticación Kerberos para identificar a los usuarios y otorgar acceso a los archivos.
* La autenticación de los usuarios siempre es un proceso encriptado.
* Es posible que el contenido de los archivos se encripte si así se desea.

## Funcionamiento básico

* Cuando un usuario en un equipo cliente realiza una llamada open para la obtención de un archivo compartido y no hay una copia actual de dicho archivo en la caché local, el servidor que contiene el archivo lo busca y le envía una copia del mismo.
* La copia se almacena en el sistema local de la máquina cliente para posteriormente abrirse y devolver un descriptor a la aplicación del cliente.
* Se realizan las operaciones de lectura, escritura y/u otras operaciones posteriores en el archivo, las cuales se aplicarán a la copia local.
* Cuando el proceso en el cliente emite una llamada close, si la copia local ha sido actualizada sus contenidos se envían de vuelta al servidor. El servidor por su parte actualiza el archivo y las marcas de tiempo y mantiene la copia en el disco local del cliente por si se realiza una nueva solicitud del archivo.

## Arquitectura

La arquitectura de AFS está implementada como dos componentes software, Vice y Venus, y la red que las comunica.
* Vice: servicio software que se ejecuta como un proceso Unix a nivel de usuario en la parte del servidor.
* Venus: proceso de usuario que actúa en la parte del cliente.

## Volumen de archivos

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 de AFS pueden mover ese volumen a otro servidor y otra localización en disco sin la necesidad de notificar a los usuarios de dicho cambio; de hecho esta operación puede realizarse mientras se están usando los archivos dentro del volumen.
Los volúmenes pueden ser replicados para copias de respaldo de sólo lectura. Cuando se accede a archivos en un volumen de sólo lectura, un sistema cliente obtendrá datos de una copia de sólo lectura particular. Si en algún punto esa copia deja de estar disponible, el cliente buscará otra de las copias restantes. De nuevo, los usuarios de esos datos se despreocupan sobre la localización física de esta copia; los administradores pueden crear y recolocar tales copias según las necesidades. La suite de comandos AFS garantiza que todos los volúmenes de sólo lectura contienen copias iguales del volumen original de lectura-escritura en el momento que se creó la copia de sólo lectura.
El espacio de nombres de archivos en una estación de trabajo Andrew es particionada en dos espacios: el espacio de nombre compartido y el local. El espacio de nombres compartido es idéntico en todas las estaciones y se encuentra bajo el directorio “/cmu”. Por otra parte, el espacio local es único para cada estación. 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.

## Sistema de llamadas

El sistema de llamadas se fundamenta en el uso de llamadas del tipo "callback" y "callback promise" entre Venus y Vice para la transferencia de archivos entre el servidor y los clientes.
Cuando Vice proporciona una copia de un archivo a Venus también le proporciona una callback promise, la cual es un token emitido por el servidor Vice que almacena el archivo y garantiza que notificará al proceso Venus cuando cualquier otro cliente modifique el archivo.
Las variables callback promise son almacenadas junto con los archivos en la caché del equipo cliente y tienen dos estados: válido o cancelado. Cuando un servidor realiza una solicitud para actualizar un archivo, notifica a todos los procesos Venus que actualmente tienen callback promises mediante el envío de una llamada callback para que establezcan su token (callback promise) a estado cancelado. Por otra parte si Vice sirve el archivo a Venus el estado de callback promise sería valido.
Cada vez que Venus realiza un open de un archivo en el cliente busca si dicho archivo se encuentra en caché y en caso afirmativo verificar su token. Si el valor del token es cancelado se debe obtener una nueva copia del archivo. Pero si el token es válido, entonces la copia en caché se puede abrir y usar sin hacer referencia a Vice.
Si un cliente falla, se reinicia o sufre un apagado Venus puede retener tantos archivos de caché como admita el disco local, pero no puede saber si los valores de las callback promise siguen siendo válidos. De modo, que antes de acceder a cada uno de los archivos que contiene en caché debe validar con cada servidor que contiene dicho archivo la marca de tiempo de modificación de cada uno de ellos. De esta forma se puede saber que si la marca de tiempo es la actual debe restablecer el valor del token a válido. Si por el contrario la marca de tiempo es inferior, implica que el archivo está desactualizado y el servidor responderá con el valor del token a cancelado.

## Implementaciones

Hay tres grandes implementaciones de AFS: Transarc (IBM), OpenAFS y Arla, aunque Transarc ya no tiene soporte y está desatendido. AFS (versión dos) también es el predecesor del sistema de archivos Coda.
Existe una cuarta implementación en el código fuente de Linux desde la versión 2.6.10. Enviada por Red Hat, es una implementación muy sencilla que todavía se encuentra en las primeras fases de desarrollo y por tanto incompleta a fecha de enero de 2013.

## AFS vs Sistema de archivos convencional

Un sistema de archivos distribuido de tipo AFS tiene dos ventajas principales sobre un sistema de archivos centralizado convencional:
* Mayor disponibilidad: La interrupción en una o más máquinas del sistema AFS no implica que un archivo no se encuentre disponible. Archivos populares, como archivos binarios, se almacenan en muchas máquinas, permitiendo acceder a ellos sin importar si se produce una interrupción en alguna máquina. En su lugar, las solicitudes de los usuarios para el programa se enrutan a máquinas accesibles. En un sistema de archivos centralizado no distribuido, la pérdida o interrupción de la máquina donde se almacenan los archivos implica la no disponibilidad de estos.
* Mayor eficiencia: En un sistema de archivos distribuido, la carga de trabajo se distribuye entre muchas máquinas, a diferencia de un sistema de archivos convencional, donde la carga de trabajo la absorbe un único servidor.

## AFS vs NFS

AFS difiere notablemente de NFS en su diseño e implementación, principalmente a la identificación de la escalabilidad como el objetivo de diseño más importante. AFS está diseñado para funcionar bien con un mayor número de usuario activos que otros sistemas de archivos distribuidos. La estrategia clave para lograr la escalabilidad es el almacenamiento en caché de archivos completos en nodos de clientes.