Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Relacionamento entre entidades de diferentes bancos de dados de diferentes serviços

Olá, tudo bem?

Durante os estudos sobre microsserviços, surgiu uma dúvida. Ao determinar que cada serviço tenha sua própria base de dados, como lidar com a seguinte situação: suponha que a base de dados do serviço A tenha uma tabela de Clientes, responsável por toda a lógica de autenticação, cadastro de contas e demais funcionalidades relacionadas, enquanto o serviço B possui uma tabela de Pedidos ou um Carrinho de Compras de um e-commerce. Teoricamente, essas duas tabelas deveriam se relacionar, já que um pedido pertence a um cliente, por meio de alguma referência, como uma chave estrangeira (considerando bancos de dados relacionais).

Como seria estabelecido esse relacionamento no contexto de microsserviços, considerando que os dois serviços possuem bases de dados distintas?

Obrigado pela atenção!

1 resposta
solução!

Boa tarde, Lucas! Tudo bem com você?

Ótima pergunta. Quando cada serviço tem seu próprio banco de dados, não podemos usar chaves estrangeiras da mesma forma que em uma aplicação monolítica. Em vez disso, precisamos adotar outras estratégias para lidar com o relacionamento entre dados de diferentes serviços. Uma abordagem comum é o uso de identificadores únicos através de APIs, como IDs de cliente, que podem ser usados para referenciar dados entre serviços. Por exemplo, o serviço de Pedidos poderia armazenar o ID do cliente para cada pedido, sem precisar de uma chave estrangeira direta no banco de dados. Vamos a um exemplo prático para ilustrar melhor:

Serviço A (Clientes):

Este serviço gerencia os dados de clientes. Ele cria e armazena o ID de cada cliente.

const cliente = {
  id: 1,
  nome: 'Lucas Fernandes',
  email: 'lucas@email.com'
};

console.log(cliente);

Serviço B (Pedidos):

Quando um pedido é criado, o ID do cliente é enviado para vincular o pedido ao cliente, mas o relacionamento fica implícito.

// Exemplo de criação de pedido associado a um cliente
const pedido = {
  id: 101,
  clienteId: 1, // ID do cliente vindo do Serviço A
  itens: ['produto1', 'produto2'],
  total: 150.00
};

console.log(pedido);

Neste modelo, o Serviço B armazena apenas o clienteId como referência, mas as informações completas sobre o cliente continuam no Serviço A. Se o Serviço B precisar de detalhes sobre o cliente, ele pode fazer uma chamada para a API do Serviço A.

Outra estratégia é o uso de eventos e filas de mensagens. Quando um cliente é criado ou atualizado no serviço A, um evento pode ser publicado em um sistema de mensagens (como RabbitMQ ou Kafka), e o serviço B pode consumir esse evento para atualizar ou criar registros relacionados em sua própria base de dados.

Ícone de sugestão Para saber mais:

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado