Um microsserviço de "Usuário" é uma boa idéia?


9

Eu sou novo em microsserviços e, pelo que entendi, o DDD diz que os microsserviços devem ser construídos em torno de domínios de negócios. Isso significa que bons microsserviços seriam como AppointmentScheduler e SendNotification no contexto de um sistema de reserva de reuniões.

Neste exemplo, esses dois microsserviços exigirão acesso aos dados do usuário para cumprir suas funções comerciais, e estou lutando com a melhor maneira de fornecê-los.

Para mim, um usuário parece um objeto que deveria existir como uma entidade dentro de um microsserviço , mas precisaria existir na maioria dos microsserviços, pois os dados do usuário são necessários em quase todos os lugares. Isso também introduz muita duplicação.

A outra opção é ter um microsserviço de usuário que forneça operações CRUD no banco de dados do usuário. Isso pode ser usado por outros microsserviços para acessar os dados do usuário, mas o problema que tenho com eles é que os serviços são agrupados firmemente até o ponto em que acabamos com um monólito distribuído, um pouco melhor do que um monólito em si.

Meu raciocínio parece válido? Como os outros estão lidando com o problema?


1
Um monólito distribuído não é realmente melhor que um monólito, geralmente ainda mais difícil de manter. É um termo usado para descrever uma falha na transição para uma arquitetura de microsserviço.
Milan Velebit

1
Você não está confuso com autenticação e dados do usuário?
user1428716

Acho que ajudaria você a listar quais dados de usuário esses serviços precisam. Para começar, quais informações do usuário um serviço de notificação exige?
JimmyJames 10/09/19

2
Assumir que você tem todas as respostas não o ajudará a obter nenhuma. O objetivo do exercício é fazer com que você perceba que provavelmente não precisa de dados do usuário em todos os serviços. Um microsserviço realmente limpo e reutilizável não precisará de 'dados do usuário'. Ele precisa de um destino para as notificações.
JimmyJames 10/09/19

2
@Umair Uma boa maneira de descobrir se você pode fazer isso ou aquilo com microsserviços é determinar por que você precisa de microsserviços em primeiro lugar. A menos que você esteja tentando resolver um problema específico no qual eles são a opção superior, o uso de microsserviços geralmente é uma péssima idéia que o morderá como um analisador raivoso e html-regex artesanal. Apenas dizendo'.
T. Sar

Respostas:


2

Se você realmente precisa do mesmo objeto / modelo / registro de usuário na maioria dos seus microsserviços, provavelmente não precisa de microsserviços separados OU eles devem ser independentes de objeto no que diz respeito ao conhecimento deles. Assim, cada microsserviço gerencia um subtipo de um modelo de usuário com os dados necessários para sua funcionalidade, com uma chave usada para distinguir esse usuário. Em um mundo ideal, dessa maneira, você pode executar as mutações necessárias e propagar as mudanças por todo o sistema por meio de um intermediário de eventos de algum tipo (supondo que você tenha uma arquitetura orientada a eventos); caso contrário, cada serviço deverá estar ciente de alguns (ou todos) outros serviços e o que eles devem fazer e que tipos de objetos eles esperam receber.

Lembre-se de que, em um ambiente de microsserviço verdadeiro, espera-se que cada microsserviço tenha seu próprio armazenamento de dados isolado do resto do sistema, fazendo backup da minha declaração inicial de que você deve despejar completamente o conceito de uma entidade Usuário .

Por exemplo, um microsserviço SendNotification receberia apenas um objeto com um identificador de websocket (que é passado por todos os serviços, chegando finalmente a este) e os dados que deveriam ser retornados ao usuário, e talvez apenas verifique se os campos necessários estão lá e envie a notificação para o canal apropriado pelo identificador do WS. Ele não precisa saber com quais tipos de objetos ele lida.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.