SISTEMA DE ARQUIVOS DISTRIBUÍDOS Sistemas Distribuídos 331 Arquivo: objeto que existe após criação, é imune a falhas temporárias e é persistente até que seja destruído Propósito de arquivos: armazenamento permanente de informações; compartilhamento de informações (sub)sistema de arquivos -> realiza gerência de arquivos organização, armazenamento, nomeação, compartilhamento, proteção permitem que programas usem conjunto de operações sobre a abstração de arquivos - livram programadores de detalhes como alocação de espaço e projeto do dispositivo secundário Sistemas Distribuídos 332 1
(sub)sistema de arquivos distribuídos -> provê funcionalidade análoga a sistemas de arquivos, mas em ambiente distribuído Provê adicionalmente: Compartilhamento de informações remotas Mobilidade do usuário Disponibilidade (réplicas) Possibilidade de trabalhar com estações sem disco Desvantagens: Mais complexo Segurança Componente importante em um sistema distribuído Sistemas Distribuídos 333 Sistema de arquivos distribuídos provê 3 tipos de serviços básicos: Serviço de armazenamento: trata da alocação e administração do espaço na memória secundária usada para armazenar os arquivos Sistema de arquivos verdadeiro, preocupa-se com as operações sobre arquivos individuais, implementa vários aspectos como: semântica de compartilhamento mecanismo de caching mecanismo de replicação controle de concorrência controle de acesso Serviço de nomes: provê o mapeamento entre um nome textual de um arquivo para uma referência para um arquivo, isto é, seu ID. Serviço de diretórios Sistemas Distribuídos 334 2
Características desejáveis: Transparências: de estrutura: sistema de arquivos distribuídos normalmente usa vários servidores de arquivos - esta estrutura deve ser transparente aos usuários de acesso: acesso a arquivos locais e remotos da mesma forma de nome: nome não indica local de replicação: a existência de múltiplas cópias de um arquivo não é conhecida pelo usuário Mobilidade do usuário Performance: deve ser comparável a sistema centralizado -> usuário não deve sentir a necessidade de fazer cópia local de um arquivo Simplicidade de uso: semântica deve ser de fácil compreensão. Idealmente, semântica deveria ser a mesma de um sistema tradicional Sistemas Distribuídos 335 Características desejáveis: Escalabilidade: suportar crescimento de: usuários, recursos Alta disponibilidade: continuar funcionamento mesmo na presença de falhas parciais. Sistema pode ter funcionalidade e/ou desempenho degradados, mas são proporcionais aos componentes falhos Gracefull Degradation (...décadence avec élégance) Alta confiabilidade: minimizar perdas de dados Integridade dos dados: coordenar apropriadamente acessos concorrentes de vários usuários Segurança: privacidade Heterogeneidade Sistemas Distribuídos 336 3
Modelos de Arquivos - Quanto à sua estrutura, arquivos podem ser: Estruturados: neste modelo, o arquivo é visto como uma seqüência de registros, podendo assim ser indexados ou não. Não estruturados: seqüência de dados não estruturados, onde o conteúdo do arquivo é simplesmente uma seqüência de bytes. Neste modelo, a interpretação dos dados é tarefa da aplicação. A maioria dos sistemas operacionais modernos usam o modelo não estruturado. No modelo não estruturado, diversas aplicações podem interpretar os dados da forma que melhor lhe convier. Sistemas Distribuídos 337 Modelos de arquivos - Quanto à sua modificabilidade, arquivos podem ser: Mutáveis: neste modelo, a escrita no arquivo re-escreve seu conteúdo anterior, isto é, um arquivo é representado como uma seqüência única de dados que é alterada a cada atualização. Não-mutáveis: neste modelo, um arquivo não pode ser modificado depois de ter sido criado, a não ser para ser apagado. Em geral um sistema de versões é utilizado para gerar novas cópias (alterações) do arquivo, ou seja cada arquivo é representado por uma seqüência de arquivos que mantém a história de modificações que o arquivo sofreu. Cada versão é também um arquivo não-mutável Sistemas Distribuídos 338 4
Modelos de acesso a arquivos Quanto ao acesso remoto modelo de serviço remoto: pedidos do cliente processados sempre no servidor, tráfego através da rede para cada pedido modelo de cache Quanto à unidade de transferência arquivo: Amoeba, CFS, AndrewFS(AFS-2) bloco: NFS, LOCUS, Sprite, Apollo Domain FS byte (intervalos do arquivo): Cambridge FS record: Research Storage System (RSS) Sistemas Distribuídos 339 Como cada arquivo pode ser acessado simultaneamente por diversos usuários, é importante definir quando uma modificação no arquivo feita por um usuário é vista por outro usuário Quanto à semântica de compartilhamento de arquivos, tem-se: Semântica Unix Semântica de Sessão Semântica de Arquivos Imutáveis Semântica baseada em Transações Sistemas Distribuídos 340 5
Quanto à semântica de compartilhamento de arquivos: Semântica Unix ordenação temporal absoluta das operações escritas em um arquivo aberto são imediatamente visíveis a usuários que também tenham este arquivo aberto de difícil implementação: SA Distribuídos oferecem semântica mais relaxada Sistemas Distribuídos 341 Quanto à semântica de compartilhamento de arquivos: Semântica de Sessão cliente abre arquivo, faz uma série de acessos, fecha arquivo sessão: conjunto de acessos desde o open até o close modificações durante a sessão visíveis somente pelo cliente que iniciou a sessão; no fechamento da sessão: modificações ficam visíveis para os próximos clientes que iniciarem sessões clientes que já tem sessões iniciadas não vêem as modificações! cada cliente mantém sua cópia do arquivo qual deve ser a imagem final do arquivo quando várias sessões sobre o mesmo arquivo são fechadas? Último - mas e se acontecem atrasos de rede? Qual é o último? semântica: a imagem final é de uma das sessões Sistemas Distribuídos 342 6
Quanto à semântica de compartilhamento de arquivos: Semântica de Arquivos Imutáveis problema de publicação de modificações para outros usuários desaparece administração de múltiplas versões Semântica baseada em Transações transação: conjunto de operações entre um begin- e um end-transaction modificações dentro de uma transação são feitas visíveis para outros clientes somente no end-transaction conteúdo final é como se transações fossem realizadas em série sobre o arquivo (serializadas) garante-se uma série possível Sistemas Distribuídos 343 Para melhorar a performance do sistema de arquivos, esquemas de file-caching são implementados pelo mesmo Em file-caching, uma cópia do arquivo, ou parte dele, é mantida mais próxima de quem o está usando, de forma que caso seja necessário seja mais rápido fazer um novo acesso ao arquivo. Considerações: localização da cache propagação da modificação validação da cache Sistemas Distribuídos 344 7
Localização da cache: memória principal do servidor diminui acesso a disco, fácil de implementar, transparente ao usuário, fácil de manter consistência acesso à rede toda vez que tiver que acessar dados disco do cliente diminui o acesso à rede, maior confiabilidade, maior capacidade de armazenamento - bom se trabalha com transferencia de arquivo não funciona em estações sem disco memória principal do cliente diminui o acesso à rede E diminui acesso a disco, permite estações sem disco ruim se cache muito grande for necessária Tannenbaum: entre cache na mem. Servidor ou disco do cliente a primeira é quase sempre mais rápida e simples de implementar Sistemas Distribuídos 345 Localização da cache Memória principal do cliente Disco do cliente (opcional) Memória principal do servidor rede Disco do servidor Sistemas Distribuídos 346 8
Cache na memória do cliente: abordagens cache dentro do processo Processo cache hit cache hit do usuário cache hit Gerente de cache No cache server espaço de usuário kernel kernel cache no kernel cache miss cache miss cache miss server server server Sistemas Distribuídos 347 Cache na memória do cliente: abordagens cache no processo biblioteca de funções implementa bom se processos individualmente usam mesmo arquivo cache no núcleo overhead de chavear para núcleo cache disponível para mais de um processo cache manager process mantém o (micro)kernel do sistema livre de código de serviço aumenta overhead - e se páginas do gerente de cache são jogadas para memória virtual (swap?) - necessidade de bloquear de maneira fixa Sistemas Distribuídos 348 9
Problema: quando os dados ficam na cache do cliente, estes podem estar replicados em diversos clientes. Como manter a consistência dos dados? Propagação das modificações: write-through: quando a cache é modificada, a modificação é enviada imediatamente para o servidor para atualizar a cópia principal bom para leituras, mas péssimo para escritas delayed-write: quando uma escrita é feita na cache, o cliente só atualiza a cache e marca a mesma como modificada; algum tempo após todas modificações são agrupadas e encaminhadas ao servidor quando dados são retirados da cache escritas periódicas quando o arquivo é fechado - bom para session semantics Sistemas Distribuídos 349 Um arquivo pode estar em diversas caches ao mesmo tempo. Quando os dados que estão nas caches devem ser atualizadas? esquemas de validação de cache: iniciada pelo cliente - cliente contata servidor para saber se sua chache está atual: verificar antes de cada acesso: anula vantagens de caching verificação periódica: semântica difusa - dados dependentes do tempo verificação na abertura: bom para session semantics Sistemas Distribuídos 350 10
esquemas de validação de cache: iniciada pelo servidor servidor mantém lista de clientes com arquivos abertos e o modo evitar conflitos (r,r ok) (r,w Nok) (w,w Nok ) nega abertura, enfilera pedido, dinamicamente muda modo de acesso ao arquivo para modo remoto e desabilita caches complexidade, servidores tem que ter estado Sistemas Distribuídos 351 Replicação de arquivos Um arquivo replicado é um arquivo que possui diversas cópias Cada cópia pode estar em um servidor diferente Vantagens: aumenta disponibilidade, aumenta confiabilidade, melhora tempo de resposta, reduz tráfego, melhora escalabilidade Tipos de replicação de arquivos: replicação explícita: programador controla réplicas replicação preguiçosa: transparente ao programador; sistema decide quando replicar e quantas réplicas são necessárias sistema gera réplicas em background, quando não há outras tarefas replicação usando grupo: réplicas geradas no mesmo momento Sistemas Distribuídos 352 11
servidor grupo S1 cliente S1 S1 1 mais tarde 2 agora C S2 C S2 C S2 mais tarde 3 S3 S3 S3 Explícita Preguiçosa Grupo Sistemas Distribuídos 353 SISTEMA DE ARQUIVOS DISTRIBUÍDOS Network File System - NFS Sistemas Distribuídos 354 12
(NFS) Network File System (NFS) Desenvolvido pela Sun Microsystem para ser utilizado em ambientes Unix Diversos outros fabricantes suportam o mesmo: Linux, Windows, Independente de hardware Três apectos importantes: Arquitetura Protocolos Implementação Sistemas Distribuídos 355 (NFS) Arquitetura do NFS Objetivo: ter um conjunto de clientes e servidores compartilhando o mesmo sistema de arquivos Clientes e servidores não precisam estar na mesma rede Cada máquina pode ser cliente e/ou servidor Cada servidor NFS exporta alguns de seus diretórios para clientes Se um diretório é exportado, então toda subárvore é exportada No Unix, a lista de diretórios que são exportados se encontra no arquivo /etc/exports (toda vez que o servidor é iniciado estes diretórios são export.) Clientes acessam estes diretórios através de um comando para montá-los, e.g. mount no Unix Quando o cliente monta um diretório remoto ele fará parte de sua estrutura de diretórios Sistemas Distribuídos 356 13
(NFS) Basicamente, um servidor exporta diretórios e clientes montam os mesmos em suas árvores de diretórios de maneira remota Se dois ou mais clientes montam a mesma estrutura (mesmo diretório remoto), os mesmos podem compartilhar arquivos Exemplo: um programa em uma máquina pode criar um arquivo dentro do diretório e outro programa em outra máquina pode ler este arquivo A simplicidade do NFS foi uma de suas melhores características Sistemas Distribuídos 357 (NFS) Protocolos NFS Como um dos objetivos é que os clientes ou servidores possam executar em máquinas/sistemas operacionais diferentes, é importante que o serviço (interface) seja bem definida. NFS possui dois protocolos básicos: um para o processo de montar diretórios remotos um para acesso a diretórios e arquivos Estes protocolos especificam como o servidor e o cliente irão conversar, não importando como eles são implementados. Sistemas Distribuídos 358 14
(NFS) Protocolos NFS - montar diretórios remotos Um cliente envia um caminho (path) para o servidor requisitando permissão para montá-lo na sua hierarquia de diretórios Se o caminho é válido, e o diretório está exported, então o servidor envia de volta um file handle para o cliente Este file handle contém informações a respeito do diretório dosco, i-nodo do diretório, etc. As solicitações seguintes utilizam este file handle Existe a possibilidade deste processo ser feito no boot: shell script /etc/rc automaticamente: automount Sistemas Distribuídos 359 (NFS) Protocolos NFS - acesso a arquivos e diretórios Clientes podem enviar mensagens para o servidor para manipular diretórios, ler e escrever arquivos, acessar atributos, A maioria dos comandos Unix é suportada pelo NFS, mas NÃO as operações de open e close O NFS é conhecido como sendo um servidor stateless, ou seja um servidor que não guarda informações sobre os arquivos que estão em uso Cada mensagem do cliente para o servidor contém todas as informações necessárias para ler ou escrever em um arquivo Vantagem: se o servidor pára de funcionar, os clientes não necessariamente vão perder informações Sistemas Distribuídos 360 15
(NFS) Implementação do NFS - estrutura de níveis cliente servidor Nível de chamada de sistema Nível de sistema de arquivos virtual (VFS) Sistema operacional local Disco local Cliente NFS Mensagem para o servidor Nível de sistema de arquivos virtual (VFS) Servidor NFS Mensagem do cliente Sistema operacional local Sistemas Distribuídos 361 Disco local rede (NFS) Implementação NFS - funcionamento O nível de chamada de sistema trata chamadas como open, close, read, Após verificar a chamada, a mesma é enviada para o VFS O VFS é responsável por conter uma entrada em uma tabela para cada arquivo aberto, similar a tabela de i-nodes do Unix. Estas entradas são chamadas de v-nodes O v-node indica se um arquivo é local ou remoto Sistemas Distribuídos 362 16
(NFS) Funcionamento - exemplo Abrir um arquivo remoto (open) quando o arquivo vai ser acessado verifica-se que o mesmo é um arquivo remoto, através do v-node do diretório onde o arquivo encontra-se o VFS pede então ao cliente NFS para abrir o arquivo o cliente NFS pede ao servidor NFS o file-handle do arquivo e cria um r- node relativo ao mesmo, e informa ao VFS que atualiza sua tabela de v- nodes Repare que nada fica armazenado no servidor Sistemas Distribuídos 363 (NFS) Melhorando performance: Read ahead ou caching Read ahead Transferências entre cliente e servidor são feitas em geral em blocos de 8K Quando o cliente recebeu o bloco que necessita, automaticamente o próximo bloco é requisitado Uma política análoga é feita para write; se write escreve menos de 8K, então dados são armazenados até que o bloco seja completado; ou quando o arquivo é fechado Sistemas Distribuídos 364 17
(NFS) Caching NFS associa um timer com cada cache Quando o timer expira, a cache é descartada (normalmente o timer é de 3 seg. para blocos de arquivos e 30 seg. para blocos de diretórios) Quando se tenta abrir um arquivo que está na cache uma mensagem é enviada para o servidor para saber se o arquivo foi modificado se foi, então atualiza dados Cada 30 seg. um timer expira, e se algo foi escrito na cache esta é enviada de volta para o servidor Sistemas Distribuídos 365 18