J'ai actuellement deux microservices. Nous les appellerons A
et B
.
La base de données sous microservice A
a le tableau suivant:
A
|-- users
La base de données sous microservice B
a le tableau suivant:
B
|-- trackers
Les exigences le stipulent users
et trackers
ont une relation plusieurs-à-plusieurs.
Je ne sais pas comment gérer correctement cela dans une architecture de microservices.
Je pouvais voir cela fonctionner de trois manières:
- Une
user_trackers
table est ajoutée au microserviceA
. Cela agit de manière similaire à une table de jointure contenant des "clés étrangères" versusers
ettrackers
. - Une
owners
table est ajoutée au microserviceB
. Cette table agit de manière similaire à une table de jointure polymorphe. Cela permettrait à n'importe quel service de créer une association avec un tracker. Cela peut ressembler à ceci:B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
- Gardez des enregistrements pour
users
ettrackers
dans chaque microservice. Gardez-les synchronisés avec une sorte de système de pubsub.
J'allais à l'origine choisir l'option 2 parce que j'aimais le fait qu'elle préservait les limites des transactions. Je peux créer un tracker et l'associer à quelque chose atomiquement. Cependant, il semble hors de portée du microservice B
. Pourquoi le microservice devrait-il B
veiller à ce que le microservice A
veuille créer une association?
J'ai l'impression qu'il y a probablement ici un bon schéma que je ne connais pas. Est-ce que l'une des options que j'ai présentées est logique? Y a-t-il une autre option qui pourrait avoir plus de sens?