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