Alternativas para consistência eventual em um sistema no padrão CQRS

Detalhes bibliográficos
Autor(a) principal: Ribeiro, Eduardo Renani
Data de Publicação: 2024
Tipo de documento: Trabalho de conclusão de curso
Idioma: por
Título da fonte: Repositório Institucional da UFRGS
Texto Completo: http://hdl.handle.net/10183/273008
Resumo: Em sistemas distribuídos, cada vez mais vemos a necessidade de separar fisicamente domínios de negócio diferentes. Porém, sob a perspectiva do usuário final, essa divisão de domínios muitas vezes não existe e os dados passam a ter valor quando associados — tanto em um ambiente transacional quanto analítico. Neste trabalho, partimos de um cenário em que existem vários domínios fisicamente segregados em microsserviços, respeitando o padrão de um banco de dados por serviço. Porém, o produto final para o usuário é um sistema que associa entidades desses múltiplos serviços numa visão única, em forma de listagem e com comandos de escrita sob estes dados. Uma vez que temos os dados separados fisicamente, mas necessitamos mostrá-los juntos em tempo próximo do real, emergem duas opções de padrão descritos na literatura: API compositon (na qual associamos as diversas entidades em memória, a partir de uma aplicação central) e CQRS (na qual segregamos as responsabilidades de escrita e leitura em dois bancos de dados). Nosso objetivo é concentrar esforços em viabilizar a segunda opção (CQRS), avaliando as diferentes abordagens de implementação tendo em vista as limitações impostas pelo nosso caso de uso. Após isso, Apresentamos uma proposta de solução simplificada em relação as abordagens avaliadas, mas com resultados satisfatórios no que tange a garantir consistência eventual sem abrir mão de manutenibilidade. Por último, avaliamos a aplicabilidade dessa solução em um ambiente real e sua viabilidade como uma "porta de entrada"para equipes de desenvolvimento de sistemas experimentar a arquitetura CQRS.
id UFRGS-2_7197c910f1e83cf2c7c7962b9da750bd
oai_identifier_str oai:www.lume.ufrgs.br:10183/273008
network_acronym_str UFRGS-2
network_name_str Repositório Institucional da UFRGS
repository_id_str
spelling Ribeiro, Eduardo RenaniGalante, Renata de Matos2024-03-07T05:02:10Z2024http://hdl.handle.net/10183/273008001197923Em sistemas distribuídos, cada vez mais vemos a necessidade de separar fisicamente domínios de negócio diferentes. Porém, sob a perspectiva do usuário final, essa divisão de domínios muitas vezes não existe e os dados passam a ter valor quando associados — tanto em um ambiente transacional quanto analítico. Neste trabalho, partimos de um cenário em que existem vários domínios fisicamente segregados em microsserviços, respeitando o padrão de um banco de dados por serviço. Porém, o produto final para o usuário é um sistema que associa entidades desses múltiplos serviços numa visão única, em forma de listagem e com comandos de escrita sob estes dados. Uma vez que temos os dados separados fisicamente, mas necessitamos mostrá-los juntos em tempo próximo do real, emergem duas opções de padrão descritos na literatura: API compositon (na qual associamos as diversas entidades em memória, a partir de uma aplicação central) e CQRS (na qual segregamos as responsabilidades de escrita e leitura em dois bancos de dados). Nosso objetivo é concentrar esforços em viabilizar a segunda opção (CQRS), avaliando as diferentes abordagens de implementação tendo em vista as limitações impostas pelo nosso caso de uso. Após isso, Apresentamos uma proposta de solução simplificada em relação as abordagens avaliadas, mas com resultados satisfatórios no que tange a garantir consistência eventual sem abrir mão de manutenibilidade. Por último, avaliamos a aplicabilidade dessa solução em um ambiente real e sua viabilidade como uma "porta de entrada"para equipes de desenvolvimento de sistemas experimentar a arquitetura CQRS.In distributed systems, we increasingly see the need to physically separate different business domains. However, from the end-user’s perspective, this domain division often does not exist, and data becomes valuable when associated — both in a transactional and analytical environment. In this work, we start from a scenario where there are several physically segregated domains in microservices, following the pattern of one database per service. However, the final product for the user is a system that associates entities from these multiple services into a single view, in the form of a listing and with writing commands on these data. Once we have the data physically separated, but need to show them together in near real-time, two pattern options described in the literature emerge: API composition (in which we associate the various entities in memory, from a central application) and CQRS (in which we segregate writing and reading responsibilities into two databases). Our goal is to focus efforts on enabling the second option (CQRS), evaluating different implementation approaches in view of the limitations imposed by our use case. After that, we present a simplified solution proposal compared to the evaluated approaches, but with satisfactory results in terms of ensuring eventual consistency without sacrificing maintainability. Lastly, we discuss its applicability in a real-world environment, being viable as an "entry point" for system development teams to experiment with the CQRS architecture.application/pdfporBanco de dadosEngenharia de softwareSistemas distribuídosMicroservicesCQRSEventual consistencyDebeziumkafkaCDCAlternativas para consistência eventual em um sistema no padrão CQRSAlternatives for eventual consistency in a CQRS pattern system info:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/bachelorThesisUniversidade Federal do Rio Grande do SulInstituto de InformáticaPorto Alegre, BR-RS2024Ciência da Computação: Ênfase em Engenharia da Computação: Bachareladograduaçãoinfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFRGSinstname:Universidade Federal do Rio Grande do Sul (UFRGS)instacron:UFRGSTEXT001197923.pdf.txt001197923.pdf.txtExtracted Texttext/plain66737http://www.lume.ufrgs.br/bitstream/10183/273008/2/001197923.pdf.txt27add0c118db42fdddbf9f9f6e2c7577MD52ORIGINAL001197923.pdfTexto completoapplication/pdf1526285http://www.lume.ufrgs.br/bitstream/10183/273008/1/001197923.pdf9f2b433862337d86cadb96f8f8a6d756MD5110183/2730082024-03-08 05:00:52.131876oai:www.lume.ufrgs.br:10183/273008Repositório de PublicaçõesPUBhttps://lume.ufrgs.br/oai/requestopendoar:2024-03-08T08:00:52Repositório Institucional da UFRGS - Universidade Federal do Rio Grande do Sul (UFRGS)false
dc.title.pt_BR.fl_str_mv Alternativas para consistência eventual em um sistema no padrão CQRS
dc.title.alternative.en.fl_str_mv Alternatives for eventual consistency in a CQRS pattern system
title Alternativas para consistência eventual em um sistema no padrão CQRS
spellingShingle Alternativas para consistência eventual em um sistema no padrão CQRS
Ribeiro, Eduardo Renani
Banco de dados
Engenharia de software
Sistemas distribuídos
Microservices
CQRS
Eventual consistency
Debezium
kafka
CDC
title_short Alternativas para consistência eventual em um sistema no padrão CQRS
title_full Alternativas para consistência eventual em um sistema no padrão CQRS
title_fullStr Alternativas para consistência eventual em um sistema no padrão CQRS
title_full_unstemmed Alternativas para consistência eventual em um sistema no padrão CQRS
title_sort Alternativas para consistência eventual em um sistema no padrão CQRS
author Ribeiro, Eduardo Renani
author_facet Ribeiro, Eduardo Renani
author_role author
dc.contributor.author.fl_str_mv Ribeiro, Eduardo Renani
dc.contributor.advisor1.fl_str_mv Galante, Renata de Matos
contributor_str_mv Galante, Renata de Matos
dc.subject.por.fl_str_mv Banco de dados
Engenharia de software
Sistemas distribuídos
topic Banco de dados
Engenharia de software
Sistemas distribuídos
Microservices
CQRS
Eventual consistency
Debezium
kafka
CDC
dc.subject.eng.fl_str_mv Microservices
CQRS
Eventual consistency
Debezium
kafka
CDC
description Em sistemas distribuídos, cada vez mais vemos a necessidade de separar fisicamente domínios de negócio diferentes. Porém, sob a perspectiva do usuário final, essa divisão de domínios muitas vezes não existe e os dados passam a ter valor quando associados — tanto em um ambiente transacional quanto analítico. Neste trabalho, partimos de um cenário em que existem vários domínios fisicamente segregados em microsserviços, respeitando o padrão de um banco de dados por serviço. Porém, o produto final para o usuário é um sistema que associa entidades desses múltiplos serviços numa visão única, em forma de listagem e com comandos de escrita sob estes dados. Uma vez que temos os dados separados fisicamente, mas necessitamos mostrá-los juntos em tempo próximo do real, emergem duas opções de padrão descritos na literatura: API compositon (na qual associamos as diversas entidades em memória, a partir de uma aplicação central) e CQRS (na qual segregamos as responsabilidades de escrita e leitura em dois bancos de dados). Nosso objetivo é concentrar esforços em viabilizar a segunda opção (CQRS), avaliando as diferentes abordagens de implementação tendo em vista as limitações impostas pelo nosso caso de uso. Após isso, Apresentamos uma proposta de solução simplificada em relação as abordagens avaliadas, mas com resultados satisfatórios no que tange a garantir consistência eventual sem abrir mão de manutenibilidade. Por último, avaliamos a aplicabilidade dessa solução em um ambiente real e sua viabilidade como uma "porta de entrada"para equipes de desenvolvimento de sistemas experimentar a arquitetura CQRS.
publishDate 2024
dc.date.accessioned.fl_str_mv 2024-03-07T05:02:10Z
dc.date.issued.fl_str_mv 2024
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/bachelorThesis
format bachelorThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv http://hdl.handle.net/10183/273008
dc.identifier.nrb.pt_BR.fl_str_mv 001197923
url http://hdl.handle.net/10183/273008
identifier_str_mv 001197923
dc.language.iso.fl_str_mv por
language por
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.source.none.fl_str_mv reponame:Repositório Institucional da UFRGS
instname:Universidade Federal do Rio Grande do Sul (UFRGS)
instacron:UFRGS
instname_str Universidade Federal do Rio Grande do Sul (UFRGS)
instacron_str UFRGS
institution UFRGS
reponame_str Repositório Institucional da UFRGS
collection Repositório Institucional da UFRGS
bitstream.url.fl_str_mv http://www.lume.ufrgs.br/bitstream/10183/273008/2/001197923.pdf.txt
http://www.lume.ufrgs.br/bitstream/10183/273008/1/001197923.pdf
bitstream.checksum.fl_str_mv 27add0c118db42fdddbf9f9f6e2c7577
9f2b433862337d86cadb96f8f8a6d756
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
repository.name.fl_str_mv Repositório Institucional da UFRGS - Universidade Federal do Rio Grande do Sul (UFRGS)
repository.mail.fl_str_mv
_version_ 1801224677572476928