Actualmente tengo dos microservicios. Los llamaremos A
y B
.
La base de datos bajo microservicio A
tiene la siguiente tabla:
A
|-- users
La base de datos bajo microservicio B
tiene la siguiente tabla:
B
|-- trackers
Los requisitos establecen eso users
y trackers
tienen una relación de muchos a muchos.
No estoy seguro de cómo manejar esto adecuadamente dentro de una arquitectura de microservicios.
Pude ver esto funcionando de tres maneras:
- Se
user_trackers
agrega una tabla al microservicioA
. Esto actúa de forma similar a una tabla de combinación que contiene "claves foráneas" parausers
ytrackers
. - Se
owners
agrega una tabla al microservicioB
. Esta tabla actúa de forma similar a una tabla de unión polimórfica. Esto permitiría a cualquier servicio crear una asociación con un rastreador. Esto puede verse más o menos así:B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
- Mantenga registros para
users
ytrackers
en cada microservicio. Manténgalos sincronizados con algún tipo de sistema pubsub.
Originalmente iba a ir con la opción 2 porque me gustaba que conservara los límites de las transacciones. Puedo crear un rastreador y asociarlo con algo atómicamente. Sin embargo, parece estar fuera del alcance del microservicio B
. ¿Por qué el microservicio debería B
preocuparse de que el microservicio A
quiera crear una asociación?
Siento que probablemente hay un buen patrón aquí del que no estoy al tanto. ¿Alguna de las opciones que expuse tiene sentido? ¿Hay alguna otra opción que tenga más sentido?