Olá pessoal,
Estou projetando uma arquitetura de micro-serviços para uma solução que irá abranger vários módulos que poderão trabalhar separadamente ou podem ser plugáveis de acordo com a aquisição.
O meu problema de definição arquitetural/infra de dados está no seguinte ponto: apenas como exemplo(não é a solução real), vamos considerar que fosse uma solução completa para gerenciamento de reservas com seguintes módulos:
Módulo Reserva Hotel
Módulo Reserva de Entretenimento(eventos diversos: teatro, shows musicais etc)
Módulo Reserva Veículo
Módulo Venda de passagem aérea
Cada módulo teria seu próprio domínio: integrações, regras e base de dados do seu domínio, o problema que estou tentando resolver nessa modelagem de serviços/armazenamento é como separar as partes comum num barramento de serviços e reutilizá-lo para todos módulos mas sem criar um modelo de dados único, exemplo:
em todos estes módulos eu terei uma base de usuários(haverá outros pontos comuns), qual melhor abordagem pra eu ter um armazenamento de dados de usuários únicos mas independente aos modelos de cada módulo de serviços?
Pensei nas seguintes opções:
1 - Ter um barramento de serviços para gerenciar usuários numa base de dados comum e cada módulo teria uma referência à FK do usuário no seu schema diretamente pelo banco de dados.
Utilizando essa abordagem https://www.akadia.com/services/ora_references_constraint.html
Mas qual o impacto de por exemplo realizar JOIN entre schemas? Pode inviabilizar?
2 - Ter um barramento de serviços para gerenciar usuários numa base de dados comum e seria replicado os dados via serviços para cada módulo, cada um destes teria sua própria base de usuários.
Problema seria várias bases de usuários dentro da mesma solução.
Cada módulo tem seus próprios serviços e modelos de dados, não quero criar um único modelo de armazenamento para todos os módulos. Não é um sistema grande com várias partes, é uma solução com vários sistemas independentes mas plugáveis entre si.
A primeira opção me parece melhor, mas não estou confortável pensando numa arquitetura moderna.
O que sugerem sobre essa arquitetura, uma solução NoSQL seria mais adequada?
Qualquer dica é bem vinda.