Supongamos que tenemos una aplicación Spring Boot que utiliza la arquitectura de microservicios. Cada uno de los servicios tiene sus propios modelos de dominio, pero cada servicio debe hacer referencia a un objeto de dominio de Usuario. ¿Cuál sería el mejor enfoque sobre cómo resolver este problema? ¿Sería mejor para cada servicio tener un ID de usuario y luego, cuando sea necesario, solicitar al servicio del usuario los detalles del usuario, o sería mejor tener una biblioteca de dominio compartida para todos los microservicios?
spring
microservices
usuario1176999
fuente
fuente
Respuestas:
Si eligió los microservicios para beneficiarse de la escalabilidad, el acoplamiento flojo y la fácil modificación independiente de cada servicio, debe atenerse a él en la mayor medida posible.
Arquitectura general
Creo que el mejor enfoque sería:
Lectura adicional:
Código compartido
Ahora, si está de acuerdo con la solución anterior, tenemos un microservicio de usuario (modelo de dominio encapsulado para el usuario) y todos los demás servicios son consumidores del mismo microservicio. La pregunta es entonces saber si quieres:
No tomaré una posición clara al respecto, ya que hay guerras de opinión opinadas sobre este tema de código compartido, y no creo que esté en condiciones de tomar una posición objetiva. Aquí ya hay algunas lecturas adicionales:
Mi propia opinión al respecto es que NO DEBE COMPARTIR el código entre el usuario-proveedor y los usuarios-consumidores, a fin de evitar un acoplamiento estrecho. Sin embargo, PODRÍAS COMPARTIR el código de consumo del usuario entre los consumidores si tienes una sólida administración de versiones. Este enfoque tendría algunas ventajas:
fuente
Evitaría una biblioteca compartida si es posible. Pregúntese qué propiedades de un usuario necesita cada servicio? A menudo, hay un dominio central donde vivirá la mayor parte del comportamiento que rodea a un usuario, y los dominios de soporte a menudo solo necesitan un ID de usuario.
Si su servicio necesita otros detalles sobre un usuario, eche un vistazo a algunas sugerencias aquí sobre cómo manejar tales situaciones
fuente