Alternativas para consistência eventual em um sistema no padrão CQRS
Autor(a) principal: | |
---|---|
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 |