Sistemas de Arquivos Distribuídos: Networking File System (NFS) e Andrews File System (AFS)



1. Introdução

Como o sistema de arquivos distribuído é a camada de abstração que recebe a maior quantidade de dados sobre o ambiente como um todo dentre todas as outras camadas (sejam físicas ou lógicas), ela acaba reunindo valiosas informações que podem ajudar a montar estratégias de distribuição de carga para melhor desempenho sob alta demanda.
Devido às vantagens de se usar sistemas de arquivos mais velozes e confiáveis, vários projetos foram iniciados e muitos produtos foram lançados. Infelizmente nem todas as soluções foram desenvolvidas para fornecerem todas as qualidades desejáveis em um sistema de arquivos. Assim, surge a necessidade de mostrar que já existem soluções viáveis, quais os problemas que elas podem resolver, usos mais comuns e serviços que elas disponibilizam.
O artigo está organizado da seguinte forma: a seção 2 apresenta uma abordagem geral sobre os Sistemas de Arquivos Distribuídos, descrevendo seus vários conceitos e representações. Na seção 3, são relacionados as implementações, características e utilização que os Network File System (NFS) possuem. Já na seção 4, são relacionados as implementações, características e utilização que os Andrew File System (AFS) possuem. Na seção 5, é mostrada uma tabela de comparação entre o NFS e o AFS. As conclusões são apresentadas na seção 6.

2. Sistema de Arquivos Distribuídos

Esses sistemas são responsáveis por: organização, armazenamento, recuperação, nomeação, compartilhamento, proteção, autorização e tipo de acesso aos arquivos . Fornecendo:
• Conjunto de operações para programador (API, desconhecimento dos detalhes)
• Chamadas do sistema relacionadas: open, close, read, write, dup, lseek, chmod, umask.
• Estrutura de Dados (i-node): armazena timestamp de criação, de alteração, de acesso, tamanho, proprietário e lista de acesso rwx (ready-write exclusive) para Ugo.
• Define-se sintaxe para os arquivos (caracteres inválidos, extensão, etc.).

2.1. Diretório
Tipo especial de arquivo que fornece mapeamento entre nome textual e identificador interno. Pode-se incluir nome de outros diretórios (atualmente conhecido como pastas). Possui a hierarquia de estrutura em árvore, formando os pathnames cujo diretório raiz global é representado por “/”.
As árvores dispõem das seguintes operações com diretório: criar, remover, nomear, renomear e mover. Havendo também a possibilidade de criar vínculos (software, hardware e links) com outros diretórios.

2.2. Sistema de Arquivos Distribuído:
O principal objetivo do DFS (Distributed File System) é proporcionar facilidade ao compartilhamento de informação (impacto global em sistemas distribuídos – SDs)
Esses tipos de serviços devem oferecer facilidades semelhantes aos sistemas convencionais com nível comparável de desempenho.
Possuem dois componentes distintos para lidar com arquivos ou diretórios.
• Sistema de Arquivo: operação em arquivos individuais (leitura, escrita, concatenação, remoção)
• Serviço de Diretório: criação e gerência de diretórios, manipulação de arquivos em diretórios.
Existem dois modelos de Projeto do Serviço de Arquivos: upload/download (apenas leitura e escrita) e acesso remoto.
• Upload/Download: simplicidade, o cliente precisa dispor do mesmo espaço do servidor, causando overhead em alterações mínimas.
• Acesso Remoto: amplo número de operações, requer pouco espaço nos clientes por isso tornou-se um modelo consagrado
O Projeto do Serviço de Arquivos deve suportar parcial ou completamente os requisitos de transparência.

2.3. Nomeação e Transparência
A nomeação é um mapeamento entre objetos lógicos e físicos. Por exemplo, usuários lidam com objetos lógicos de dados representados por nomes de arquivos, enquanto que o sistema manipula blocos físicos de dados, armazenados em trilhas de discos. Geralmente, um usuário faz referência a um arquivo por meio de um nome textual. Este mapeamento é um identificador numérico de baixo nível que, por sua vez, é mapeado em blocos de disco. Esse mapeamento em vários níveis fornece aos usuários uma abstração de um arquivo que oculta os detalhes de como e onde no disco o arquivo está de fato armazenado.
Em um DFS transparente, uma nova dimensão é adicionada à abstração: a de ocultar o local na rede onde o arquivo se encontra. Em um sistema de arquivos convencional, o intervalo de mapeamento de nomeação é um endereço em um disco. Esse intervalo é aumentado para incluir a máquina específica em cujo disco o arquivo está armazenado. Também existe a possibilidade de replicação de arquivos. Dado um nome de arquivo, o mapeamento retorna um conjunto das posições das réplicas desse arquivo. Nessa abstração, as existências de várias cópias e suas posições ficam ocultas.

2.4. Estruturas de Nomeação
Existem duas noções correlatadas no contexto de mapeamento de nomes em um DFS que precisam ser diferenciadas:
• Transparência de posição: o nome de um arquivo não revela qualquer indício da posição do arquivo no armazenamento físico.
• Independência de posição: o nome de um arquivo não precisa ser alterado quando muda da posição do arquivo no armazenamento físico.
As duas definições são relativas ao nível de nomeação discutida anteriormente, já que os arquivos têm nomes diferentes em níveis diferentes (ou seja, nomes textuais no nível de usuário e identificadores numéricos no nível do sistema).
Um esquema de nomeação independente de posição é um mapeamento dinâmico, já que pode mapear o mesmo nome de arquivo em posições diferentes em dois momentos diferentes.
Na prática, a maioria dos DFS atuais fornece um mapeamento estático e transparente em posição para os nomes no nível de usuário. Esses sistemas, no entanto, não fornecem suporte à migração de arquivos; ou seja, alterar a posição de um arquivo automaticamente é impossível. Portanto, a noção de independência de posição é irrelevante para esses sistemas. Os arquivos são associados de forma permanente a um conjunto específico de blocos de disco. Apenas o Andrew File System e alguns sistemas de arquivos experimentais suportam a independência de posição e a mobilidade de arquivos.

2.5. Semântica do Compartilhamento de Arquivos
Quando dois ou mais usuários compartilham o mesmo arquivo, é necessário definir a semântica de leitura e escrita precisamente. Se o sistema possui um único processador, ele é forçado a uma ordenação em todas as operações e sempre retorna o valor mais recente (chama-se semântica UNIX).

2.5.1. Semântica UNIX em Sistemas Distribruídos
Em um sistema distribuído a semântica UNIX pode ser atingida facilmente se existe um único servidor de arquivos e os clientes não guardam arquivos em cache.
Todas as leituras e escritas vão diretamente para o servidor os quais processam todas elas de maneira estritamente seqüencial. Esta abordagem garante a semântica UNIX. Na prática, entretanto, não é interessante ter todas as chamadas para um único servidor. Esse gargalo é às vezes resolvido com caching dos arquivos mais utilizados: se um cliente modifica localmente um arquivo na cache e pouco tempo depois um outro cliente lê do servidor, o segundo cliente obterá um arquivo obsoleto.
Uma maneira de solucionar é propagar todas as trocas aos arquivos de cache imediatamente.

2.5.2. Semântica de Seção
Uma solução alternativa é deixar a semântica do compartilhamento de arquivos mais flexível. Ao invés de requerer que um read veja todos os efeitos dos writes anteriores, podem instalar uma nova regra: “trocas a um arquivo aberto são inicialmente visíveis somente ao processo que modificou o arquivo”.
• Problema 1: o que acontece se dois ou mais clientes estão com o mesmo arquivo na cache e o modificando ao mesmo tempo? O resulto final depende de quem fecha por último.
• Problema 2: no Unix, está associado com cada arquivo aberto um ponteiro que indica a posição corrente no arquivo. read pega o dado começando na posição dada e o write deposita o dado na mesma. Este ponteiro é compartilhado por todos os processos que abrem o arquivo e por todos os filhos.
Com a semântica de seção se um filho roda em uma máquina diferente, esse compartilhamento não é atingido. Por exemplo: run > out
Onde run é um script que executa dois programas, a e b, um depois do outro. Se ambos os programas produzem saída, é esperado que a saída produzida por b irá diretamente seguir a saída de a seguida por out. O seu funcionamento ocorre da seguinte forma: quando b é iniciado, recebe o ponteiro de arquivo de a, o qual é compartilhado pelo shell e pelos dois processos.
Desta maneira, o primeiro byte que b escreve segue diretamente o último byte escrito por a... O que acontece quando dois processos tentam substituir o mesmo arquivo ao mesmo tempo? A semântica de seção escolhe um deles para executar primeiro.

2.6. Utilização de Cache:
Existem quatro locais em dois grupos para armazenamento de dados: memória ou disco do servidor e memória ou disco do cliente. Utilizando apenas disco do servidor: poderá ocorrer de desempenho. Assim o cache aperfeiçoa este acesso mantendo os arquivos mais acessados na memória do servidor sendo assim precisa de algoritmo para escolher o que manter.
O uso de cache no servidor implementa a transparência, porém ainda há problema de acesso a rede. Sempre é necessário atualizar o cache sempre que houver um Put-Block pois gera um problema de coerência do cache onde dirty flag indica desatualização da cache; blocos na cache devem ter timestamp para quando memória estiver cheia o LRU (Least Recent Used) entra em ação e descarta dados antigos.
Entre a cache na memória do servidor ou no disco do cliente, normalmente prefere-se no servidor. O uso de cache no cliente necessita de alta complexidade. Sendo assim necessário mecanismos de evitar atraso devido acesso a rede. Existem três opções: dentro do processo de usuário (mais simples), no kernel ou em separado num processo gerenciador de cache.
Um problema comum em uso de cache no cliente é a inconsistência da cache. Ocorre quando dois clientes lêem simultaneamente um arquivo e o modificam. Utilizam o algoritmo write-through: quando a entrada na cache é modificada, o novo valor (mantido na cache) é imediatamente enviado ao servidor.

2.7. Os Primeiros SADs
Grande parte dos trabalhos em sistemas de arquivos distribuídos se iniciou no final dos anos80. Porém, o primeiro SAD que se tem notícia usava a ARPANET, rede construída pelo Departamento de Defesa dos Estados Unidos em 1969, e entrou em funcionamento em 1973.
Ele disponibilizava um repositório de dados para computadores que não possuíam capacidade de armazenamento adequada. Era chamado de Datacomputer, e usava um serviço parecido com o FTP atual. Depois dele, veio o Interim File Server (IFS), criado por pesquisadores do Xerox Palo Alto Research Center (PARC). Ele já organizava os arquivos privados e compartilhados em uma árvore de diretórios. Um sistema subsequente foi o Woodstock File Server (WFS), criado também pelo PARC, que permitia enviar aos clientes somente páginas dos arquivos, ao invés de enviar o arquivo completo, possibilitando trabalhar assim com máquinas sem discos locais.
Em 1977, o PARC criou o Xerox Distributed File System, destinado a oferecer uma base para a implementação de sistemas administradores de banco de dados. Ele já implementava transações atômicas envolvendo vários arquivos e servidores, usando um protocolo de duas fases, e o acesso a pequenos trechos de arquivos. Depois dele vieram o LOCUS (1980) que já implementava transparência de localização, replica ção e transações atômicas aninhadas; o SWALLOW (início dos anos 80) do MIT, que usava uma técnica de controle de acesso concorrente baseado em timestamps; o Acorn File Server (início dos anos 80), desenvolvido para implantação de uma rede de microcomputadores em escolas a um custo muito baixo; e o VICE (1984), ancestral do AFS e do CODA.

3. Implementação: Network File System (NFS)

Desenvolvido pela Sun Microsystems (1985), sendo o primeiro serviço de arquivos projetado como produto com suporte a estações diskless (sem disco rígidos, quando eram caros). Alcançando seu sucesso técnico e comercial em 1989 (RFC1094) suas interfaces foram disponibilizadas em domínio público (openess).
Atualmente existe NFS para qualquer variação de UNIX. Os módulos do NFS (cliente e servidor) fazem parte do kernel o qual utiliza o VFS (Virtual File System) para diferenciar chamadas locais de remotas.
Um dos objetivos do NFS é o suporte a sistemas heterogêneos, onde clientes e servidores possam rodar sistemas operacionais diferentes. O NFS resolve essa meta definindo dos protocolos cliente-servidor.

3.1. Características:
• Transparência de Acesso: Os programas clientes não se preocupam com a distribuição dos arquivos. Um único conjunto de operações acessa arquivos locais e remotos assim programas devem atuar local e remotamente sem modificação
• Transparência de Localização: Servidor exporta (compartilha) o sistema de arquivo para onde o cliente escolheu o ponto de montagem e visualiza como se fosse local. Espaço de nomes global pode ser estabelecido criando realocação de grupo de arquivos sem modificação do nome da pasta.
• Transparência de Falha: Uso de servidores stateless , onde falha no cliente não o afeta, podendo ser reinicializado com recuperação de contexto de cada cliente. Possui vários comandos idempotentes: os clientes podem repetir requisição até obter resposta (read e write), requisições duplicadas não resultam em atualizações inválidas.
• Transparência de Desempenho: Tem como objetivo trabalhar satisfatoriamente na variação de carga, onde o cliente e o Servidor empregam cache para melhorar desempenho.
• Transparência de Migração: O serviço de montagem (mount) roda em cada nó e fornece interface via RPC para montagem e desmontagem
– Utilizado no boot das máquinas
– Não é totalmente resolvida pelo NFS: mudança da localização do FS requer atualização de tabelas locais
– Automontagem (automounter) permite distribuição de carga por servidores de arquivos somente leitura (read-only)

• Transparência de Replicação: O sistema não fornece esse tipo de replicação
- Fornecido apenas por Serviço separado: Yellow Pages service, Network Information System (NIS) com o modelo de replicação mestre-escravo (master-slave), mudanças pouco freqüentes que não precisam ocorrer simultaneamente

• Transparência de Concorrência: O sistema não fornece esse tipo de transparência, dispõe apenas do lock rudimentar do Unix.

• Escalabilidade: O sistema não fornece uma escalabilidade, ou seja, ela é limitada, projetada para suportar de 5 a 10 Clientes, onde o gargalo passa a ser o desempenho do Servidor o qual utiliza UDP (User Datagram Protocol) para transporte (default) e o portmap para serviço de registro para programas que utilizam RPC.

3.1.Conclusões
O NFS não possuía controle de estado de acesso aos seus arquivos por parte dos clientes, o que tornava a reabilitação após uma queda do servidor muito mais rápida. Na versão 4 essa tarefa se tornou mais complexa, pois o NFS passou a ter controle de estado dos arquivos que estão sendo acessados. Assim, a impossibilidade de se controlar a consistência dos arquivos que estão nos caches dos clientes, o controle de bloqueios através de sistemas terceiros, etc, passou a não existir mais e foram todos encapsulados no mesmo protocolo, simplificando assim o seu uso e manutenção.
O controle da segurança no acesso aos arquivos era muito simplificada e frágil, permitindo com que clientes não confiáveis pudessem acessar arquivos de maneira desonesta. Isso foi resolvido na versão 4 do protocolo, onde mecanismos avançados de segurança e autenticação foram incorporados. Outro grande problema que existia era que as operações entre cliente e servidor consumiam muitos recursos da rede (devido á interface RPC/XDR). Dessa forma, associado á política de uso de cache, o NFSv3 não é muito recomendado para aplicações que necessitam de acesso contínuo a arquivos. A versão 4 resolve esse problema pois é possível agora enviar múltiplos pedidos ao servidor através da mesma chamada RPC, além da política de uso do cache ter melhorado por causa do controle de estado no acesso aos arquivos.
Uma excelente característica sua é a transparência que o sistema de arquivos dá para o usuário final, que nem sequer percebe estar lidando com arquivos remotos, ainda mais na versão 4 onde os controles de bloqueios e estado existem, o que torna o acesso aos arquivos mais transparentes ainda, dando a impressão de estarem no sistema de arquivos local. Além disso, o fato de ter sua especificação aberta para que qualquer um possa implementar seu servidor ou cliente permitiu que ele se tornasse o sistema de arquivos distribuído mais utilizado no mundo.

4. Implementação: Andrew File System (AFS)

AFS é um produto de sistemas de arquivos distribuídos que oferece uma arquitetura do cliente-servidor de arquivos compartilhados, fornecendo independência de posição, escalabilidade, segurança e potencial transparecia de migração de dados.
Um sistema usando AFS é organizado em células, que são compostas de máquinas clientes e servidores. As máquinas servidoras executam diversos programas servidores, onde cada um deles cuida de um serviço diferente, como serviço de cache, serviço de arquivos, segurança, localização de arquivos, dentre outros. Uma célula é um agrupamento de administração independente, onde um administrador de uma célula não necessita conhecer ou compartilhar da configuração de outras células.

4.1. Características:
• O Volume : Embora possam variar em tamanho, em geral são menores que uma partição. Seu tamanho reduzido facilita sua movimentação entre partições e até entre servidores (a fim de aumentar a ciência do sistema e também para manter a carga balanceada entre os servidores). Cada volume corresponde logicamente a um diretório na árvore de arquivos. Assim pode-se manter um volume para cada diretório raiz de um usuário.
• Desempenho e Cache: Nas máquinas clientes são mantidos caches dos arquivos em utilização, visando melhora na desempenho do sistema. Recursos de rede são economizados quando um cliente obtém um arquivo diretamente do seu cache, sem necessidade de obtê-lo remotamente. O sistema mantém um mecanismo de callback para garantir que os caches dos clientes estejam atualizados em caso de alterações feitas por outros clientes.
• Segurança: Um mecanismo de autenticação mútua garante aos servidores que eles apenas disponibilizam os arquivos aos clientes autorizados, e garante aos clientes que ele estão obtendo os arquivos também dos servidores corretos. O sistema também mantém lista de controle de acessos mantido pelos usuários que permitem uma configuração mais precisa do controle de acesso.
• Transparência de Localização: Os arquivos disponíveis em um sistema AFS fazem parte de um espaço de nomes único e global. É completamente transparente aos clientes a localização física de um arquivo. Os clientes acessam os arquivos como se eles estivessem efetivamente em seu computador local. Além disto, o espaço de nomes é uniforme entre os diversos clientes.
- Todos os seus arquivos e diretórios serão contidos em uma hierarquia em seu diretório home (ju33). O nome do caminho para seu diretório home é longo e pode ser incómodo digitar. O atalho para seu diretório home é o til “~”, onde ~ = /afs/andrew.cmu.edu/usr#/userID e userID = ju33.

4.2. Conclusões
O AFS é um sistema de arquivos distribuídos que evoluiu muito desde sua primeira versão. Pensando sempre em escalabilidade, transparência de localização e segurança, ele foi implementado usando-se conceitos simples, mas que são de extrema importância para se atingir tais objetivos. Ele oferece um serviço altamente escalável e seguro, através da adoção de semântica de sessão no acesso concorrente a arquivos, na utilização de grandes caches no disco local do cliente e no uso de listas de controle de acesso, juntamente com o protocolo de autenticação mútua Kerberos.
Por causa do cache e da iniciativa de não se compartilhar arquivos temporários, os clientes necessitam obrigatoriamente de disco local.
O espaço de nomes, para a parte remota dos arquivos, é mantida e organizada pelos servidores através de um banco de dados de localização. A replicação dos arquivos do AFS é muito simples, permitindo apenas manter replicação dos dados só para leitura ou realizar cópias de segurança.

4.3. Coda File System
É uma evolução do AFS, onde um sistema de arquivo distribuído permite operações desconectadas, e a replicação do servidor e cache se dá pelo cliente.

5. Comparação: AFS versus NFS

Neste capítulo visualizaremos uma análise comparativa detalhada das características mais importantes dos sistemas AFS e NFS, conforme demonstrado na abaixo.

- Arquitetura:
AFS: Servidores de arquivos e clientes formam a célula de uma unidade administrativa lógica; Administração por coleções de arquivos chamados volumes; Comum espaço globalmente conhecido, onde é visto por todas as máquinas; Posição automática dos arquivos via processos do sistema e por base de dados de posição de volume; Usuários de máquinas stateful
NFS: Cada servidor de arquivo tem controle independentemente; Administração por arquivos individuais; Espaço conhecido nem sempre visto consistentemente por todas as máquinas; Pontos de montagem que seguem a posição física de arquivos ajustada por administradores e por usuários; Usuários de máquinas em parte são stateless.

- Desempenho:
AFS: Cache de disco robusta, reduz chamada do servidor de arquivo e a carga de rede; Chamada aos servidores garante consistência de cache. Semânticas open-to-close. Atributos armazenados por horas; As Replicas espalham a carga entre servidores mais acessados. Nenhuma replicação para redução de carga; Desempenho excelente em configurações da grande área; Escalabilidade, mantêm o desempenho em qualquer tamanho de instalação.

NFS: Memória de cache com buffers pequenos; Cache baseada em tempo o qual pode sofrer inconsistências. Tempo de armazenados de atributos entre 3 e 30 segundos; Nenhuma replicação para redução de carga; Ineficiência em configurações da grande área; Melhor em instalações de pequeno e médio porte.

- Avaliabilidade:
AFS: Replicação do volume de somente leitura. Switchover automático para réplica disponível; Os arquivos se mantém disponíveis aos usuários durante o reconfiguração. Os nomes dos arquivo se mantém os mesmos.

NFS: Nenhuma replicação padrão de dados; Os usuários perdem o acesso às arquivos durante o reconfiguração. Os movimentos do arquivo requerem mudanças do ponto de montagem para ajustar nomes do arquivo.

- Gerência:
AFS: Gerências de tarefas podem ser executadas de qualquer máquina; Cotas de disco baseados em volumes; facilidade para que o usuário verifique o status; Nenhum downtime do sistema com Sistema de Backup AFS; Os clones de Backup podem ser usados frequentemente para usuário controlar recuperações.

NFS: A gerência de tarefas requererem freqüentemente o telnet às máquinas designadas; Cotas de disco baseados no ID de usuário, dificuldade para que o usuário verifique o status; O backup padrão do UNIX requer o downtime do sistema; Todas as recuperações requerem o assistente do administrador.

- Segurança:
AFS: Possui autenticação da versão 4 do Kerberos; Lista de controle para o ajuste fino de acesso aos diretórios. UNIX Mode Bits para o proprietário; Grupos definidos pelo usuário; Autenticação mútua por processos de sistemas e banco de dados. Sempre necessário o uso de RPC seguro.

NFS: Usuário IDs não encriptados, usuários verdadeiros e hosts. Pode ser kerberized; Controle de acesso com UNIX Mode Bits padrão em arquivos e em diretórios; Grupos definidos pelo administrador do sistema; Permite o uso de RPC seguro.
Autor: Elias Lopes


Artigos Relacionados


Sistemas Operacionais Dos Servidores De Hospedagem

5 Vantagens De Se Ter Um Storage Em Sua Empresa

O Que São Subdomínios?

Como Recuperar Dados De Um Hd Externo

Tabela De Processos Em Sistemas Operacionais

Softwares Para Backup Garantem Segurança E Agilidade

Importância Dos Arquivos Na Construção Da História: O Caso De Cabo Verde