Estou achando difícil evitar a duplicação de dados ou um banco de dados compartilhado, mesmo para o design mais simples de microsserviços, o que me faz pensar que estou perdendo alguma coisa. Aqui está um exemplo básico do problema que estou enfrentando. Supondo que alguém esteja usando um aplicativo da Web para gerenciar um inventário, eles precisariam de dois serviços; uma para o inventário que gerencia os itens e a quantidade em estoque e um serviço de usuários que gerenciaria os dados dos usuários. Se desejarmos uma auditoria de quem estocou o banco de dados, podemos adicionar o ID do usuário ao banco de dados do serviço de inventário como o último estoque por valor.
Usando o aplicativo, podemos ver todos os itens que estão acabando e uma lista de quem os estocou da última vez, para que possamos pedir que eles os reponham novamente. Usando a arquitetura descrita acima, uma solicitação seria feita ao serviço de inventário para recuperar os detalhes do item de todos os itens em que a quantidade é menor que 5. Isso retornaria uma lista incluindo os IDs do usuário. Em seguida, uma solicitação separada seria feita ao serviço do usuário para obter o nome do usuário e os detalhes de contato da lista de IDs do usuário obtidos no serviço de inventário.
Isso parece muito ineficiente e não são necessários muitos serviços antes de fazermos várias solicitações para diferentes APIs de serviços, que, por sua vez, fazem várias consultas ao banco de dados. Uma alternativa é replicar os detalhes dos usuários nos dados do inventário. Quando um usuário altera seus detalhes de contato, precisamos replicar a alteração através de todos os outros serviços. Mas isso não parece se encaixar na idéia de contexto limitado dos microsserviços. Também poderíamos usar um único banco de dados e compartilhá-lo entre diferentes serviços e ter todos os problemas de um banco de dados de integração .
Qual é a melhor / correta maneira de implementar isso?