Desenvolvimento de Sistemas
Distribuídos
Aula 03 – Sistema de Arquivos Distribuídos
Prof. Gustavo Callou gcallou@gmail.com
Agenda
Sistema de Arquivos Distribuídos Introdução
Requisitos do sistema de arquivos distribuídos Arquitetura do serviço de arquivos
Estudos de caso
Sun NFS
Introdução
O compartilhamento de informações armazenadas talvez seja o aspecto mais importante dos recursos distribuídos.
Os requisitos de compartilhamento dentro de redes locais e intranets levam à necessidade de um serviço que suporte o armazenamento persistente dos dados e programas.
Descreveremos os sistemas de arquivos distribuídos “básicos”
Sem replicação, garantias de largura de banda e temporização
Introdução
Os sistemas de arquivos foram originalmente desenvolvidos como um recurso do sistema operacional.
Depois, eles adquiriram características como
controle de acesso e mecanismos de proteção de arquivos.
Úteis para compartilhamento de dados e programas Um serviço de arquivos permite que os programas armazenem e acessem arquivos remotos exatamente
Sharing
Persis-tence Distributedcache/replicasConsistencymaintenanceExample
Main memory RAM
File system UNIX file system
Distributed file system Sun NFS
Web Web server
Distributed shared memory Ivy (DSM, Ch. 18)
Remote objects (RMI/ORB) CORBA
Persistent object store 1 CORBA Persistent
Object Service
Peer-to-peer storage system OceanStore (Ch. 10)
1 1 1
2
Types of consistency:
1: strict one-copy. 3: slightly weaker guarantees. 2: considerably weaker guarantees.
Sistemas de Armazenamento e suas
Propriedades
Requisitos do sistema de arquivos distribuído (1)
Transparência – deve suportar muitos dos
requisitos de transparência dos sistemas distribuídos: Transparência de acesso
Transparências de localização Transparência de mobilidade Transparência de desempenho
Requisitos do sistema de arquivos distribuído (2)
Atualizações concorrentes de arquivos – As
alterações feitas em um arquivo por um único cliente não devem interferir na operação de outros clientes que estejam acessando o mesmo arquivo
Problema do controle da concorrência
Serviços de arquivos atuais utilizam travamento (lock) em nível de arquivo ou em nível de registro.
Requisitos do sistema de arquivos distribuído (3)
Replicação de arquivos – um arquivo pode ser
representado por várias cópias de seu conteúdo em diferentes locais.
Melhora a escalabilidade do serviço Melhora a tolerância a falhas
A maioria suporta caches locais que é uma forma limitada de replicação
Requisitos do sistema de arquivos distribuído (4)
Heterogeneidade da plataforma – As interfaces de
serviço devem ser definidas de modo que o software cliente e servidor possa ser implementado para
diferentes plataformas.
Requisitos do sistema de arquivos distribuído (5)
Tolerância a falhas – o serviço deve continuar
diante das falhas de clientes e servidores
Semânticas de invocação (no max 1 vez, ao menos 1 vez)
Operações idempotentes (pedidos duplicados não resultam em atualizações inválidas)
Servidores sem estado (stateless – sem necessidade de recuperar estado anterior ao ocorrer uma
falha/desligamento)
Requisitos do sistema de arquivos distribuído (6)
Consistência – Os sistemas de arquivos
convencionais oferecem semântica de atualização de
cópia única (one-copy).
Os processos concorrentes percebem apenas uma cópia do conteúdo do arquivo
Atrasos inevitáveis na propagação de modificações
Requisitos do sistema de arquivos distribuído (7)
Segurança – praticamente todos os sistemas de
arquivos fornecem mecanismos de controle de acesso baseados no uso de listas de controle de acesso.
Em serviço de arquivos distribuídos, há
necessidade de autenticar as requisições dos
clientes
Requisitos do sistema de arquivos distribuído (8)
Eficiência – deve ser tão eficiente quanto um
sistema de arquivo convencional Desempenho e confiabilidade Instalação e operação adequada
Arquitetura do serviço de arquivos distribuídos
A estruturação do serviço de arquivo distribuído é feita em três componentes:
Um serviço de arquivo plano Um serviço de diretório
Um módulo cliente
Os serviços exportam uma interface para uso dos programas clientes
O módulo cliente fornece uma única interface de programação (operações semelhantes àquelas
Client computer Server computer Application program Application program Client module
Flat file service Directory service
Arquitetura do serviço de arquivos
distribuídos
Serviço de arquivos plano
Se preocupa com a implementação de operações sobre o conteúdo dos arquivos.
São usados idenficadores exclusivos de arquivo (UFIDs – Unique File IDentifiers) para fazer
referências a arquivos em todas as requisições de operações.
As UFIDs são longas seqüências de bits gerada pelo serviço de arquivos plano e que é retornada para o
Serviço de diretório
Fornece um mapeamento entre nomes textuais de arquivos e seus UFIDs.
Os clientes podem obter um UFID de um arquivo citando seu nome textual para o serviço de diretório
O serviço de diretório fornece as funções
necessárias para gerar diretórios, adicionar novos nomes de arquivos a eles e para obter suas UFIDs.
Ele é um cliente do serviço de arquivos plano
Módulo cliente
Integra e estende as operações do serviço de arquivos plano e do serviço de diretório sob uma interface de programação de aplicativo única.
O módulo cliente também contém informações sobre locais de rede dos processos servidor de arquivos
plano e servidor de diretório.
Pode implementar uma cache de blocos de arquivo recentemente usados no cliente.
Operações do serviço de arquivos plano
Read(FileId, i, n) -> Data
- gera BadPosition Se de um arquivo, começando no elemento i, e a retorna em1 ≤ i ≤ Length(File): lê uma seqüência de até n elementos
data. Gera uma exceção se o valor i é inválido.
Write(FileId, i, Data)
-gera BadPosition Se um arquivo, começando no elemento i, ampliando o arquivo,1 ≤ i ≤ Length(File)+1: grava uma seqüência de Data em
se necessário. Gera uma exceção se o valor i é inválido.
Operações do serviço de arquivos plano
Create() -> FileId Cria um novo arquivo de tamanho 0 e gera um UFID para ele.
Delete(FileId) Remove o arquivo
GetAttributes(FileId) -> Attr Retorna os atributos do arquivo
Comparação com o UNIX (1)
O serviço de arquivos plano não tem as operações
open e close – o acesso é através da UFID
apropriada.
As funções Read e Write incluem um parâmetro
especificando um ponto de partida dentro do arquivo para cada transferência.
No UNIX, cada operação read ou write começa na posição corrente do ponteiro de leitura e escrita.
Operação seek para posicionamento explícito.
Comparação com o UNIX (2)
A interface do serviço de arquivos distribuídos
diferem da interface do sistema de arquivos UNIX por motivos de tolerância a falhas:
Operações que podem ser repetidas – operações idempotentes com semântica pelo menos uma vez.
Servidores sem estado (stateless) – um servidor sem estado pode ser reiniciado após uma falha e retomar a operação sem necessidade de restaurar qualquer estado. As operações de arquivo do UNIX não são
idempotentes, nem consistentes, com o requisito de uma implementação sem estado.
Controle de acesso
Nas implementações distribuídas, as verificações de direitos de acesso podem ser feitas de duas maneiras:
É feita uma verificação de acesso quando um nome de arquivo é convertido em um UFID e os resultados são codificados na forma de uma capacidade, a qual é
retornada para o cliente.
Uma identidade de usuário é enviada com cada
requisição de cliente e as verificações de acesso são realizadas pelo servidor para cada operação de arquivo. Os dois métodos permitem implementação de
servidor sem estado e são usados em sistema de arquivos distribuídos atuais.
Operações do serviço de diretório
Lookup(Dir, Name) -> FileId - gera NotFound
Localiza o nome textual no diretório e retorna o UFID relevante. Se Name não estiver no diretório, gera uma exceção.
AddName(Dir, Name, FileId) - gera NameDuplicate
|Se Name não estiver no diretório, adiciona (Name, File) no diretório e atualiza o registro de atributos do arquivo. Se Name já estiver no diretório, gera uma exceção.
Operações do serviço de diretório
UnName(Dir, Name) Se Name estiver no diretório, a entrada contendo Name
é removida do diretório.
Se Name não estiver no diretório, gera uma exceção.
GetNames(Dir, Pattern) -> NameSeqRetorna todos os nomes textuais presentes no
diretório que correspondam à expressão regular Pattern.
Sistema de arquivos hierárquico
Um sistema de atribuição de nomes de arquivos
como o do UNIX pode ser implementado pelo módulo cliente através dos serviços de arquivos planos e de diretório.
A raiz da árvore é um diretório com um UFID conhecido.
Pode ser fornecida uma função que obtenha o UFID de um arquivo a partir de seu nome de caminho.
Grupos de arquivos
Um grupo de arquivos é um conjunto de arquivos localizado em determinado servidor.
Semelhante a um sistema de arquivo tradicional de sistemas operacionais.
Foram introduzidos para mover conjuntos de arquivos armazenados em mídia removível entre computadores.
A representação de UFIDs inclui um componente identificador de grupo de arquivos.
Os identificadores de grupo devem ser únicos em todo um sistema distribuído.
Sun NFS
O NFS foi o primeiro serviço de arquivo projetado como um produto.
As definições das principais interfaces foram colocadas em domínio público.
O NFS fornece acesso transparente a arquivos remotos para programas clientes executando em UNIX e outros sistemas operacionais
O NFS possui um alto nível de suporte para
Sistema de Arquivos Local e Remoto
acessível ao Cliente do NFS
Prof. Gustavo Callou 29
jim ann jane joe users students usr vmunix Client Server 2 . . . nfs Remote mount staff
big jon bob people Server 1 export (root) Remote mount . . . x (root) (root)
Note: The file system mounted at /usr/students in the client is actually the sub-tree located at /export/people in Server 1; the file system mounted at /usr/staff in the client is actually the sub-tree located at /nfs/users in Server 2.
Outros sistemas de arquivos distribuídos
Andrew File System (AFS)– Focado em sistemas de grande escala
– Existem versões comerciais e é de domínio público
– Base do sistema de arquivos DCE/DSF no DCE
(Distributed Computing Environment)
Coda File System
– Descendente do AFS
– Maior tolerância a falhas
Server Message Block (SMB) / Common Internet File System (CIFS)
Resumo
Requisitos do sistema de arquivos distribuídos Arquitetura do serviço de arquivos
Estudos de caso