Utilize este identificador para referenciar este registo: https://hdl.handle.net/1822/86806

TítuloAcordo distribuído para arquiteturas de microsserviços
Autor(es)Silva, João Pedro Oliveira da
Orientador(es)Pereira, José
Alonso, Ana Luísa Parreira Nunes
Palavras-chaveTolerância a faltas
Consenso
Raft
Microsserviços
Sistemas monolíticos
Spring boot
Middleware genérico
Modularidade
Fault tolerance
Consensus
Microservices
Monolithic systems
Generic middleware
Modularity
Data1-Abr-2022
Resumo(s)Alcançar o consenso distribuído é fundamental para que se consigam construir sistemas tolerantes a faltas, pois permite que uma coleção de processos opere como um grupo coerente que pode sobreviver a falhas de alguns dos seus membros. O algoritmo Raft resolve o problema de consenso e visa ser o mais compreensível possível, porém as atuais implementações deste algoritmo são dedicadas a casos de uso específicos. Consequentemente, quem desenvolve sistemas que tenham que contemplar componentes replicados vê-se obrigado a construir o seu próprio mecanismo de replicação, o que pode ser contraproducente e até ter certas implicações no código da aplicação. Paralelamente, as arquiteturas de microsserviços passaram a ser o novo normal, fazendo oposição à construção de sistemas monolíticos. Dada a sua natureza, este tipo de arquiteturas permite endereçar problemas que dizem respeito à resiliência e coerência dum dado serviço, existindo por isso uma oportunidade para cruzar algoritmos de consenso distribuído com microsserviços. Nesta dissertação propõe-se a construção de duas implementações de Raft num toolkit aplicacional típico de microsserviços, mais especificamente Spring Boot. Cada implementação deverá utilizar uma das diferentes stacks da framework, nomeadamente, a serviet stack ou a stack reativa. Ambas as implementações deverão ser modulares e genéricas o suficiente, para que possam ser simultaneamente configuráveis e aplicáveis a diferentes casos de uso. Para o efeito, começa-se por delinear as configurações em que o middleware poderá operar, assim como a arquitetura interna do mesmo, seguindo-se da fase de implementação, que detalha decisões tomadas ao longo da mesma. A fase de avaliação começa com a implementação, em ambas as stacks, de uma aplicação de armazenamento chave-valor que é configurada com diferentes parâmetros, para que finalmente possa ser comparada com o etcd que é um armazenamento chave-valor replicado. Desde logo, os resultados recolhidos fazem prever o desempenho de ambas as soluções de middleware construídas, que ficam aquém dos desempenhos alcançados por um cluster etcd, mas que dão garantias de viabilidade e extensibilidade, uma vez que as soluções são modulares para integrarem novas otimizações, e são genéricas e úteis para qualquer aplicação que necessite de assegurar garantias de coerência forte.
Achieving distributed consensus is fundamental to building fault-tolerant systems, as it allows a collection of processes to operate as a coherent group that can survive the failure of some of its members. The Raft algorithm solves the consensus problem and aims to be as understandable as possible, but current implementations of this algorithm are dedicated to specific use cases. Consequently, those developing systems that have to contemplate replicated components are forced to build their own replication mechanism, which can be counterproductive and even have certain implications for the application code. At the same time, microservices architectures became the new normal, opposing the construction of monolithic systems. Due to its nature, this type of architecture allows addressing problems that concern the resilience and coherence of a given service, therefore there is an opportunity to cross distributed consensus algorithms with microservices. This dissertation proposes the construction of two Raft implementations in a typical microservices application toolkit, more specifically Spring Boot. Each implementation must use one of the different framework stacks, namely, the servlet stack or the reactive stack. Both implementations should be modular and generic enough to be simultaneously configurable and applicable to different use cases. For this purpose, we begin by outlining the configurations in which the middleware will operate, as well as its internal architecture, followed by the implementation phase, which details decisions made throughout. The evaluation phase begins with the implementation, in both stacks, of a key-value storage application that is configured with different parameters, so that it can finally be compared with etcd which is a replicated key-value storage. From the outset, the results collected predict the performance of both middleware solutions, which fall short of the performance achieved by an etcd cluster, but which provide guarantees of viability and extensibility, since the solutions are modular to integrate new optimizations, and are generic and useful for any application that needs to ensure strong consistency guarantees.
TipoDissertação de mestrado
DescriçãoDissertação de mestrado integrado em Engenharia Informática
URIhttps://hdl.handle.net/1822/86806
AcessoAcesso aberto
Aparece nas coleções:BUM - Dissertações de Mestrado
DI - Dissertações de Mestrado

Ficheiros deste registo:
Ficheiro Descrição TamanhoFormato 
Joao Pedro Oliveira da Silva.pdfDissertação de Mestrado3,91 MBAdobe PDFVer/Abrir

Este trabalho está licenciado sob uma Licença Creative Commons Creative Commons

Partilhe no FacebookPartilhe no TwitterPartilhe no DeliciousPartilhe no LinkedInPartilhe no DiggAdicionar ao Google BookmarksPartilhe no MySpacePartilhe no Orkut
Exporte no formato BibTex mendeley Exporte no formato Endnote Adicione ao seu ORCID