Resumo
Pond: the OceanStore Prototype
Sergio R. Loest, PPGIA - PUCPR – Curitiba, PR – Brazil, [email protected]
O OceanStore é um sistema de arquivos cooperativo que foi projetado para fornecer alta
durabilidade e disponibilidade aos seus usuários através de um sistema com duas camadas. A
camada superior consiste de hosts potentes e bem conectados que serializam as mudanças e
armazenam os resultados. A camada inferior consiste de hosts com menor capacidade de
processamento, incluindo as estações de trabalho dos usuários que fornecem principalmente
recursos para armazenamento ao sistema.
A unidade de armazenamento do OceanStore é o objeto de dados. A interface para o objeto
recebeu os seguintes requisitos: a informação de ser acessível universalmente; o sistema deve
balancear a tensão entre privacidade e compartilhamento de informação; um modelo de consistência
de fácil entendimento e uso; privacidade e integridade.
Foram levadas em consideração duas hipóteses: a infra-estrutura não é confiável com exceto
em grupos e a infra-estrutura está constantemente mudando, devido a isto o sistema deve ser no
mínimo auto-organizado e se auto-reparar e, além disso, idealmente ele deve ser auto-ajustável.
Para atender tal nível de adaptabilidade requer redundância e tolerância à faltas e algoritmos
dinâmicos para utilizar esta redundância eficientemente.
O desafio do OceanStore é projetar um sistema que fornece uma interface de
armazenamento expressiva aos usuários enquanto garante uma alta durabilidade sobre uma base não
confiável e altamente mutável. O Pond que é um protótipo do OceanStore foi construído sobre uma
infra-estrutura de localização e roteamento auto-organizada, ele automaticamente aloca novas
réplicas de objetos de dados baseado em padrões de uso, utiliza algoritmos tolerantes a faltas para
serviços críticos e garante a durabilidade dos dados armazenados com o uso de erasure codes.
Modelo de Dados
O modelo de dados do Pond suporta a semântica ACID (atomicidade, consistência,
isolamento e durabilidade). Quanto à organização da área de armazenamento, um objeto de dados é
análogo a um arquivo em sistema de arquivos tradicional. Esses objetos são seqüências ordenadas
de versões somente de leitura e cada versão é guardada para sempre. Para proporcionar um suporte
seguro e eficiente para o versionamento, cada versão de um objeto é armazenada em uma estrutura
de dados similar a uma árvore B, na qual a referência de cada filho é um hash seguro do conteúdo
do bloco para o qual ele aponta conforme a Figura 1. Os dados dos usuários são armazenados nestes
blocos.
No OceanStore os updates (operação que adiciona uma nova versão ao cabeçário da corrente
de versões de um ou mais objetos) são aplicados de forma atômica e são representados como uma
lista de ações potenciais sendo que cada ação é guardada por um predicado.
Figura 1: Um objeto de dados
Arquitetura do sistema
O OceanStore é construído pela interação de recursos. Os recursos são virtuais e são
chamados Globally Unique Identifier (GUID) e contém o estado necessário para fornecer algum
serviço. Para o caso de caches ou blocos de armazenamento este estado são os próprios dados. A
virtualização é possível graças a um sistema de localização de objetos e roteamento chamado
Tapestry. Tanto os hosts como os recursos são identificados por GUIDs. Um host se une ao Tapestry
através do fornecimento do seu GUID, depois de identificado outros hosts podem enviar mensagens
para ele. Os hosts publicam os GUID dos seus recursos no Tapestry e os outros hosts podem rotear
mensagens para estes recursos.
A replicação de BGUIDs não traz problemas de consistência devido a forma como estes
objetos (BGUIDs) são nomeados. Para limitar o tráfego para verificação de consistência o
OceanStore utiliza a replicação do tipo primary-copy. Esta implementação de réplica primária foi
feita em um pequeno conjunto de servidores cooperativos chamados de anel interno para evitar que
uma máquina única tenha o controle dos dados do usuário. O anel interno utiliza um protocolo
tolerante à faltas bizantinas para concordar com todos as atualizações dos objetos e para assiná-los
digitalmente.
Os erasure-codes também são utilizados no OceanStore pois armazenam os dados de forma
mais eficiente em relação à replicação de dados. Mas para evitar os custos do erasure-code em
objetos que são lidos com freqüência o sistema também utiliza o caching.
Como pode ser visto na Figura 2 o caminho que uma atualização de um objeto faz passa
pelo Tapestry até a réplica primária. Após esta atualização ser serializada e executada pela réplica
primária, esta é passada para a árvore de disseminação para as réplicas secundárias que estão
mantendo um cache do objeto. Simultaneamente as réplicas primárias codificam os novos dados em
erasure-code e enviam os fragmentos a outros servidores para garantir o armazenamento de longo
termo.
Figura 2: O caminho de uma atualizacão
O Protótipo - Pond
O Pond foi construído em JAVA sobre o Staged Event-Driven Architeture. A Figura 3 mostra
os estágios principais do Pond e suas interconexões. Os estágios da esquerda são necessários aos
servidores e os da direita são geralmente necessários aos clientes.
Figura 3: Arquitetura de SW do Pond
Conclusões
Ao contrário do que se achava inicialmente a latência do processo de acordo bizantino
distribuído não afetou o sistema de forma proibitiva, já o processo de threshould signatures
consumiu processamento de uma ordem de magnitude maior que o de chaves públicas de
assinaturas.
O OceanStore através do seu protótipo, Pond, mostrou várias soluções muito interessantes
como o uso do anel interno com o protocolo de acordo bizantino para obtenção de uma réplica
primária de cada objeto, ou o uso de chaves públicas de criptografia, threshould signatures
juntamente com o Tapestry forneceu a habilidade de mudar dinamicamente os hosts em resposta a
falhas e os erasure-code como solução para melhor utilizar o espaço de armazenamento.
Bibliografia:
S. Rhea, P. Eaton, D. Geels, H. Weatherspoon, B. Zhao, and J. Kubiatowicz. Pond: The oceanstore
prototype. In Proc. of USENIX File and Storage Technologies FAST, 2003.
http://citeseer.ist.psu.edu/rhea03pond.html
Download

Resumo do artigo Pond: the OceanStore Prototype