Actualmente tengo dos microservicios. Los llamaremos Ay B.
La base de datos bajo microservicio Atiene la siguiente tabla:
A
|-- users
La base de datos bajo microservicio Btiene la siguiente tabla:
B
|-- trackers
Los requisitos establecen eso usersy trackerstienen 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_trackersagrega una tabla al microservicioA. Esto actúa de forma similar a una tabla de combinación que contiene "claves foráneas" parausersytrackers. - Se
ownersagrega 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
usersytrackersen 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 Bpreocuparse de que el microservicio Aquiera 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?