| Resumo: | Existem duas arquitecturas básicas para a replicação de bases de dados. Na arquitectura chamada shared-storage as réplicas partilham um sistema de armazenamento, pelo que é necessário algum tipo de coordenação entre as réplicas para o acesso aos dados armazenados. Na outra arquitectura, chamada shared-nothing, cada réplica acede apenas ao seu armazenamento particular (que até pode ser um disco local), pelo que a necessidade de coordenação é menor. O projecto ReD (Resilient Databases) propõe uma nova arquitectura híbrida para as bases de dados replicadas. Todas as réplicas têm uma cópia local da base de dados e apenas uma escreve no sistema de armazenamento partilhado, ou seja, apenas uma réplica é considerada escritora. Para conseguir tal facto, mesmo na presença de falhas e de novas réplicas, esta arquitectura contém uma camada de coordenação. Neste projecto fazemos uma análise de vários serviços de coordenação existentes e procuramos uma comparaçãoo entre eles para uma melhor compreensão das opções disponíveis, com o objectivo de escolher qual o mais indicado para ser usado na implementação da camada de coordenação da arquitectura do ReD. Após esse estudo, desenvolvemos e concretizámos um algoritmo de eleição de líder que utiliza o serviço de coordenação ZooKeeper para a implementação dessa camada de coordenação. Na segunda fase do projecto, apresentamos uma proposta tolerante a faltas bizantinas para essa mesma camada. Neste caso, foi também desenvolvido e concretizado um algoritmo de eleição de líder, mas utilizando o serviço de coordenação DepSpace. No entanto, devido a algumas limitações deste serviço, foi necessário o desenvolvimento de uma nova versão com funcionalidades que permitissem essa concretização. Com o estudo dos serviços de coordenação e com as implementações destes algoritmos, mostramos que é possível reduzir o esforço no desenvolvimento de sistemas distribuídos complexos, pois os programadores podem concentrar-se no desenvolvimento do serviço em si. |