Me resulta difícil evitar la duplicación de datos o una base de datos compartida, incluso para el diseño de microservicios más simple, lo que me hace pensar que me falta algo. Aquí hay un ejemplo básico del problema que estoy enfrentando. Asumiendo que alguien está usando una aplicación web para administrar un inventario, necesitaría dos servicios; uno para el inventario que administra los artículos y la cantidad en stock y un servicio de usuarios que administraría los datos de los usuarios. Si queremos una auditoría de quién almacenó la base de datos, podríamos agregar el ID de usuario a la base de datos para el servicio de inventario como último inventario por valor.
Al usar la aplicación, es posible que queramos ver todos los artículos que se están agotando, y una lista de quién los almacenó la última vez para que podamos pedirles que lo repongan nuevamente. Utilizando la arquitectura descrita anteriormente, se realizaría una solicitud al servicio de inventario para recuperar los detalles del artículo de todos los artículos en los que la cantidad es inferior a 5. Esto devolvería una lista que incluye los ID de usuario. Luego, se realizaría una solicitud por separado al servicio de usuarios para obtener el nombre de usuario y los detalles de contacto para la lista de ID de usuario obtenida del servicio de inventario.
Esto parece terriblemente ineficiente y no se necesitan muchos más servicios antes de realizar múltiples solicitudes a diferentes API de servicios, que a su vez realizan múltiples consultas a la base de datos. Una alternativa es replicar los detalles de los usuarios en los datos del inventario. Cuando un usuario cambia sus datos de contacto, deberíamos replicar el cambio a través de todos los demás servicios. Pero esto no parece encajar con la idea de contexto acotado de los microservicios. También podríamos usar una sola base de datos y compartirla entre diferentes servicios, y tener todos los problemas de una base de datos de integración .
¿Cuál es la forma correcta / mejor de implementar esto?