Pesquisar este blog

domingo, 14 de setembro de 2014

Sistemas de Arquivos distribuídos

Sistema de arquivos distribuídos

Os sistemas de arquivos distribuídos não compartilham o acesso aos blocos de armazenamento dos hds das máquinas, eles usam um protocolo de rede para isso, que também são conhecidos como network file system (sistema de arquivos de rede).

Objetivos

Os sistemas de arquivos distribuídos foram desenvolvidos com o objetivo de serem transparentes aos sistemas clientes, ou seja eles foram desenvolvidos para serem usados como se fossem pastas locais da máquina, e não remotas.

Um sistema de arquivos distribuídos almeja ter transparência em vários aspectos e por trás dos panos ele é responsável por localizar, transportar e potencialmente prover as funcionalidades de transparência listadas abaixo:

  • Migração: Os arquivos podem se movimentar de um lugar ao outro, sem alterar as configurações dos clientes.
  • Falha: Os softwares clientes devem continuar funcionando, mesmo quando uma falha acontecer no servidor
  • Localização: Os nomes dos arquivos não devem indicar onde eles estão localizados.
  • Acesso: Os clientes não devem saber que estão acessando um sistema distribuído de arquivos, e os arquivos devem ser acessados como se fossem arquivos locais.
  • Escalabilidade: o sistema deve funcionar bem tanto em poucas máquinas (de um a 12 servidores), e quando escalar bem em sistemas grandes (milhares de máquinas)
  • Concorrência: todos os clientes devem ver ter a mesma visão dos arquivos do sistema, ou seja, se algum cliente alterar algum arquivo, todos os processos que estiverem acessando este sistema de arquivos também irá ver estas alterações de uma forma coerente.
  • Replicação: por motivos de escalabilidade e segurança, podemos querer replicar o sistema em várias máquinas, sem que os clientes saibam.
  • Heterogeneidade: o sistema de arquivos deve ser provido em múltiplos hardwares e sistemas operacionais.

Armazenamento em rede e Disco compartilhado

Nos sistemas de arquivos de disco compartilhado utilizam uma Storage Area Network (SAN, uma área de armazenamento na rede) que provê acesso direto ao disco pela rede. Tanto o controle de acesso, quanto a tradução dos dados lidos do sistema de armazenamento são realizados nos clientes.

O tipo mais comum deste tipo de sistema, são os sistemas de arquivos de disco distribuídos, que adicionam uma camada de controle de concorrência, que prove um sistema consistente de serialização, evitando dados corrompidos e perda de dados, mesmo quando muitos clientes tentam acessar o mesmo arquivo, ao mesmo tempo. É comum nestes sistemas, a implementação de um mecanismo de isolamento dos dados, para prevenir o corrompimento dos dados, quando um nó falha.

Vários tipos de arquitetura foram utilizadas na implementação dos sistemas de arquivo de disco distribuído. Alguns deles distribuem as informações dos arquivos para todos os nós, outros utilizam servidores de metadados centralizados. Nestes dois casos é possível acessar todos os arquivos de todos os servidores.

Classificação dos sistemas de arquivos distribuídos

Existem dois tipos de configuração de acesso possíveis em um sistema de arquivos distribuídos. O sistema de acesso local e o sistema de acesso remoto.

Acesso Local

Em um sistema de acesso local, configuramos o sistema distribuído na rede interna da empresa. As vantagens deste tipo de sistema são:
  • Podem ser configurados em várias linguagens diferentes
  • Acesso local, gera melhor performance de acesso
  • São administráveis e propiciam um melhor controle, já que a configuração é feita internamente.
  • Melhor segurança, já que os arquivos ficam armazenados internamente e isso possibilita um melhor controle de quem tem acesso aos arquivos, ou mesmo as salas onde estão os servidores. Além de controlar quais patches serão aplicados aos servidores.
Já nas desvantagens podemos citar:
  • Alto custo, com máquinas, softwares e equipe.
  • Necessidade de compra de máquinas
  • Maior custo de configuração de firewall, acessos, etc
  • Mais trabalho com os backups.

Acesso Remoto

Já um sistema com acesso remoto, onde os arquivos ficam armazenados na nuvem, os arquivos são enviados a um provedor da nuvem que será responsável por armazenar e fazer backup destes arquivos.

As vantagens deste sistema são:

  • Baixo custo, custam centavos por GB de armazenamento, por mês.
  • Backup automático
  • Administração fácil feita através de um website, muitas fontes de ajuda para resolver os problemas de configuração.
  • Não há necessidade de alocação de hardware/máquinas para armazenar estes arquivos.
  • Segurança, geralmente estes provedores possuem vários certificados de segurança de armazenamento e configuração que não são tão fáceis de obter, muito menos baratos. Neste tipo de sistema estes certificados já estão disponíveis.
Nas desvantagens podemos citar:
  • Privacidade dos dados, já que não temos controle de quem acessará os dados.
  • Uso de banda, pois os arquivos deverão ser enviados pela internet, e com isso consumirão banda de acesso a internet.
  • Performance mais baixa que dependerá da velocidade e estabilidade do seu acesso a internet.

Tipos de Sistemas de arquivos

Sistemas de arquivos são camadas de software responsáveis por armazenar os dados nos nossos dispositivos de hardware.

Os discos magnéticos eram distribuídos em trilhas, e dentro de cada trilha haviam bloos de dados. Existem uma série de validações de hardware que possibilitam a validação dos dados armazenados nestes sistemas.

Nos discos magnéticos, os dados que ficam mais próximos do centro, são acessados mais rapidamente, já que o sistema de leitura, descansa no centro dos hds. Por isso era preferível gravar os dados mais importantes nestas fileiras. Hoje isso mudou um pouco com os SSDs.

Inicialmente os sistemas de arquivos, reservavam um bloco, vamos assumir que de 32kb para cada arquivo. Isso foi feito para evitar ter que mover os dados toda vez que algo novo fosse acrescentado aquele arquivo. Porém isso fazia com que muit espaço, era disperdiçado, caso houvessem muitos arquivos pequenos. Um outro detalhe desta arquitetura é, quando um arquivo ultrapassava 32kb, um novo bloco deveria ser criado pra ele. Caso nenhum outro dado tivesse sido escrito no sistema, tudo certo, porém quando um outro bloco houvesse sido escrito, no hd, após aquele arquivo, isso fazia com que o arquivo ficasse fragmentado. A implicação disto é que o hd talvez precisasse ler diversas trilhas para ler um mesmo arquivo. Toda vez que um hd lia uma trilha, ele tinha que ler ela de forma completa, então se só um pedaço daquela trilha fosse usada, uma grande parte dos dados seria lida a toa. Colocar os arquivos em uma mesma sequência, garantia uma performance muito boa para este tipo de sistema de arquivos.

Os sistemas de arquivos podem ser divididos em três tipos, blocos, objetos ou arquivos.

Blocos

Nos sistemas de blocos, os dados são armazenados em blocos e ele foi feito em cima de uma abstração do que acontece nas camadas de hardware, cada bloco de dados é um bloco/trilha, do sistema de armazenamento de arquivos, fazendo com que fique muito fácil a conversão entre um e outro. Isso também torna estes sistemas bem rápidos.

Como os dados sempre são lidos um bloco por vez, ele casa muito bem com sistemas de backup, principalmente nas fitas magnéticas. Durante o processo de escrita, os dados são divididos em blocos, previamente especificados, e durante a leitura os dados são desempacotados.

Este tipo de sistema geralmente é interfaceado por um sistema de arquivos, ou um sistema de banco de dados, para interagir com o usuário.

Objetos

Nos sistemas de arquivos do tipo objetos, os dados são armazenados em forma de objeto, com isso, além dos dados, alguns metadados serão armazenados. Neste tipo de sistema, cada objeto possui um identificador global único, que identifica aquele objeto. 

Nestes sistemas o usuário não consegue alterar o tipo do sistema de arquivo, nem o tamanho da unidade de armazenamento.

Arquivos

Os sistemas do tipo arquivos são os mais conhecidos por nós, os dados são divididos em arquivos, seus caminhos e nomes identificam ele, sua extensão ou cabeçalho identificam o seu tipo e cada tipo de arquivo é armazenado com a sua formatação específica, por exemplo um arquivo texto é armazenado de acordo com a tabela ASCII ou UTF, já um arquivo de imagem é armazenado de acordo com a formatação daquele tipo de imagem.

Exemplos:

Abaixo serão explicados alguns tipos de sistema de arquivos distribuídos.

Gluster

O nome gluster vem de GNU + Cluster, e ele foi originalmente escrito por Anand Babu Periasamy, foi lançado como software de uma empresa chamada Gluster, a qual depois foi adquirida pela RedHat. Este sistema é baseado no GlusterFS, que é um sistema de arquivos de rede opensource, que pode ser instalado em máquinas comuns, com ele é possível escalar até Petabytes.

Existem imagens de máquinas configuradas com o gluster prontas para serem utilizadas em provedores cloud como o a Amazon e a Azure.

O GlusterFS é capaz de mapear diversos sistemas de armazenamento, em um único sistema global de nomes, que permite que os arquivos sejam disponibilizados para diversas máquinas como se fossem local. Ele se adéqua bem para sistemas que usam muitos dados (data intensive) e em provedores de sistemas stream.

Sua arquitetura é baseada em um software servidor, que será instalado nas máquinas que possuem os sistemas de armazenamento que serão compartilhados e armazenarão os arquivos, e softwares clientes, que são nativos ao linux e são usados para armazenar os dados.

Um arquivos deve ser copiado em diversas máquinas, para garantir acessibilidade, e ele também pode ser dividido em partes, afim de aumentar a performance, quando isso acontece ele poderá ser escrito e lido, em paralelo. Máquinas que possuem o cliente instalado, podem montar um sistema de arquivos localmente, seu acesso também pode ser realizado por sistemas NFS versão 3, que é um padrão comum de comunicação de arquivos pela rede.

Ceph

Ceph é um sistema de arquivos distribuídos, que implementa armazenamento do tipo objeto, em cluster de máquinas comuns. Este sistema replica os arquivos, de maneira a ficar tolerante a falhas sem precisar de uma especificação ou configuração de hardware. O ceph possui três interfaces de acesso, uma por blocos, outra por arquivos e uma outra por objetos. Com ele é possível escalar até exabytes, sua grande vantagem é não ter um ponto simples de falha. Este sistema foi inicialmente criado por Sage Weil na sua tese de doutorado.

O ambiente do Ceph é composto por 5 softwares, os monitores de cluster, os sistemas de armazenamento de objetos, os servidores de metadados, os gateways http e os admnistradores, cada um deles rodando independentemente, podendo ser numa mesma máquina.

Ele divide os arquivos em múltiplas máquinas, de uma maneira semelhante ao que faz o Raid0. Um outro ponto interessante é que ele possui um load balance adaptativo, que faz com que os arquivos mais utilizados, sejam compartilhados e divididos de maneira que os dados sejam acessados mais rapidamente.

Com o Ceph é possível montar o sistema de arquivos distribuídos localmente, e todo o seu ambiente cuida de como e quando partilhar e replicar os arquivos. Ele implementou um sistema de backend de armazenamento que faz com que a latência de leitura e escrita dos dados seja muito baixa.

Em 2014 a RedHat comprou a empresa que era responsável pela implementação e suporte do Ceph.

DFS Distributed File System

Este é um sistema que foi criado para compartilhar arquivos em máquinas que usam o sistema operacional windows. Este sistema possui dois componentes, o componente localizador e o componente de redundância. 

O localizador serve para encontrar onde estão localizados os arquivos, e o componente de redundância será responsável por copiar os arquivos em múltiplas localidades, para evitar problemas em falhas, ou quando houver grande acesso aos dados.

A partir da versão 2003 R2 do windows, houve uma melhora no sistema redundante, fazendo com que ele copiasse apenas as partes alteradas dos arquivos e com isso a performance do sistema melhorou bastante, assim como diminui a exigência do hardware de rede.

HDFS é um outro tipo de sistema de arquivos, mas ele já foi explicado aqui.

Nenhum comentário:

Postar um comentário