• Nenhum resultado encontrado

Armazenamento distribuído de dados em redes peer-to-peer

Diversos sistemas de armazenamento distribuído de dados para redes peer-to-peer foram propostos recentemente [17,23,35,59,75,91,108]. A principal motivação para utilização das redes peer-to-peer são suas características desejáveis, como auto-organização, descentralização e escalabilidade. A maioria dos sistemas utilizam tabelas de espalhamento distribuídas para organizar os dados armazenados, mas alguns sistemas como o OceanStore [75] utilizam outras estruturas de dados, como as árvores de Plaxton [99]. Nesta seção, descreveremos alguns destes principais sistemas de armazenamento distribuído.

5.2.1 CFS

O Cooperative File System (CFS) [35] é um sistema de arquivos imutáveis baseado em uma tabela de espalhamento distribuída (DHT) implementada pelo Chord. O CFS permite o armazenamento e a re- cuperação de arquivos distribuídos de modo eficiente, robusto e tolerante a falhas. O seu funcionamento se baseia no armazenamento de blocos de dados em máquinas geograficamente distribuídas. A determi- nação do local de armazenamento dos blocos é feito através da DHT, onde o identificador dos blocos é gerado utilizando uma função de espalhamento segura, como a SHA-1, sobre o conteúdo do bloco. O acesso ao sistema de arquivos é feito por um cliente, que implementa a funcionalidade de um sistema de arquivos, e utiliza o CFS para armazenar os blocos deste sistema de arquivos.

Quebrar o arquivo em diversos fragmentos tem suas vantagens, já que isto automaticamente resulta em um balanceamento de carga, uma vez que fragmentos do arquivo serão recuperados a partir de várias máquinas diferentes. Por outro lado, o armazenamento e recuperação de um arquivo envolve a busca pelas máquina responsáveis por armazenar cada um dos blocos que constituem o arquivo, aumentando o tempo de resposta para localizar e recuperar arquivos.

Para permitir tolerância a falhas, os blocos armazenados são replicados em diversas máquinas. Esta replicação também melhora o tempo de resposta do sistema, já que os blocos podem ser recuperados das máquinas mais próximas ou com conexões mais rápidas. Finalmente, o balanceamento de carga em máquinas heterogêneas é feito utilizando o conceito de servidores virtuais, onde o administrador de uma máquina pode manualmente determinar o número de servidores virtuais inicializados de acordo com a capacidade da máquina.

5.2 Armazenamento distribuído de dados em redes peer-to-peer 75

5.2.2 PAST

O PAST [108], assim como o CFS, é um sistema para armazenamento distribuído de arquivos imu- táveis baseado em uma rede peer-to-peer. Mas o PAST se baseia no Pastry, ao invés do Chord, para implementar a funcionalidade de tabela de espalhamento distribuída. Outra diferença com o CFS é que o PAST armazena arquivos completos nos nós ao invés de blocos destes arquivos.

Para melhorar a disponibilidade dos arquivos, são armazenadas k réplicas dos arquivos. Quando um nó recebe uma requisição de armazenamento, ele escolhe outros k − 1 nós de seu conjunto de vizinhos para armazenar réplicas do arquivo. Quando um nó não possui espaço de armazenamento disponível para armazenar uma réplica de um arquivo, este repassa a requisição de armazenamento para outro nó de sua vizinhança. Deste modo, o mecanismo de balanceamento de carga do PAST não considera explicitamente a heterogeneidade dos nós.

5.2.3 OceanStore

O OceanStore [75] permite a criação de um sistema de escala global para o armazenamento persis- tente para dados mutáveis. Cada arquivo (ou objeto) armazenado possui um identificador global único (GUID). Para prover tolerância a falhas, dados são armazenados utilizando replicação.

A localização dos objetos é feita utilizando uma versão modificada dos filtros de Bloom [19]. Estes filtros permitem realizar testes de inclusão de um membro em um conjunto, com a lista de membros armazenada de forma bastante compacta. Em compensação, existe uma pequena possibilidade de o teste de inclusão retornar falsos positivos. No caso do OceanStore, cada nó guarda uma lista de filtros de Bloom, contendo a lista de objetos armazenados no próprio nó e em nós vizinhos. Caso o sistema não consiga localizar o objeto utilizando filtros de Bloom, o sistema utiliza uma segunda estrutura de dados, denominada árvores de Plaxton [99]. Nesta estrutura de dados, cada nó recebe um identificador aleatório e estes identificadores são utilizados para construir múltiplas árvores, cada uma contendo um nó diferente como sua raiz. A partir destas árvores, é possível localizar o nó responsável por um determinado identificador em (log n) passos, onde n é o número de nós do sistema.

A modificação de dados armazenados na presença de diversas réplicas é realizada utilizando atuali-

zações, que são estruturas de dados contendo as modificações a serem realizadas nos objetos. Quando

diversas modificações precisam ser aplicadas em um único objeto em uma determinada ordem, um pro- tocolo de consenso Bizantino é executado entre os participantes, de modo a escolher em qual ordem aplicar as modificações. No momento em que uma aplicação deseja armazenar um arquivo de forma permanente, o arquivo é codificado em fragmentos redundantes utilizando códigos de rasura (erasure

codes) [85, 96, 101]. Estes fragmentos são então distribuídos em centenas de servidores, garantindo sua

durabilidade. Arquivos armazenados de forma permanente não podem ser modificados.

Finalmente, mecanismos de introspecção são utilizados para aglomerar arquivos relacionados e ge- renciar as réplicas de arquivos. A partir deste mecanismo, o sistema automaticamente se otimiza para

permitir uma melhora no desempenho da recuperação de arquivos e na disponibilidade dos dados.

5.2.4 Outros sistemas de armazenamento peer-to-peer

Existem diversos outros sistemas de armazenamento distribuído de dados. Descreveremos breve- mente alguns destes sistemas nesta seção.

Glacier [59] permite o armazenamento estável e distribuído de dados mesmo na presença de gran- des falhas correlacionadas. Para tal, o sistema utiliza códigos de “rasura” para codificar o arquivo em fragmentos redundantes e armazená-los de modo distribuído. Glacier possui mecanismos para gerenciar os fragmentos armazenados, incluindo sua recuperação em caso de falhas e saídas de nós. Arquivos armazenados recebem leases [71] com duração limitada e que precisam ser renovados pelo dono do ar- quivo. Um mecanismo de coleta de lixo periodicamente elimina os fragmentos de arquivos com leases vencidos.

Total Recall [17] é um sistema de armazenamento peer-to-peer baseado em componentes do CFS cujo foco é no gerenciamento automático da disponibilidade dos dados armazenados. Para tal, o sistema se baseia na predição de disponibilidade das máquinas e no gerenciamento do grau de redundância dos arquivos armazenados.

Kosha [23] utiliza uma rede peer-to-peer para armazenar dados de modo distribuído, utilizando a semântica de sistema de arquivos do Network File System (NFS). O objetivo é adicionar ao NFS as vantagens dos sistemas peer-to-peer como auto-organização, replicação de dados, transparência de loca- lização e escalabilidade. A sua implementação é baseada no Pastry e utiliza replicação de arquivos para garantir a disponibilidade dos dados.

Ivy [91] é um sistema de arquivos peer-to-peer que permite a leitura e escrita de arquivos. O sistema é totalmente baseado em registros (logs), que são armazenados no sistema peer-to-peer utilizando uma tabela de espalhamento distribuída. O sistema mantém um registro por usuário, que modificam seus arquivos escrevendo neste registro.