Al momento ho due microservizi. Li chiameremo A
e B
.
Il database sotto microservizio A
ha la seguente tabella:
A
|-- users
Il database sotto microservizio B
ha la seguente tabella:
B
|-- trackers
I requisiti indicano che users
e trackers
hanno una relazione molti-a-molti.
Non sono sicuro di come gestirlo correttamente all'interno di un'architettura di microservizi.
Potrei vedere che funziona in tre modi:
- Una tabella
user_trackers
viene aggiunta a microserviceA
. Questo agisce simile a una tabella di join contenente "chiavi esterne" ausers
etrackers
. - Una tabella
owners
viene aggiunta a microserviceB
. Questo tavolo funziona in modo simile a una tabella di unione polimorfica. Ciò consentirebbe a qualsiasi servizio di creare un associazione con un tracker. Questo può sembrare un po 'come questo: %codice% - Mantieni i record per
B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
eusers
in ogni microservizio. Tienili sincronizzati con una sorta di sistema pubsub.
In origine avrei optato per l'opzione 2 perché mi piaceva che conservasse i limiti delle transazioni. Posso creare un tracker e associarlo a qualcosa di atomico. Tuttavia, sembra fuori portata per microservice trackers
. Perché il microservizio B
dovrebbe preoccuparsi che il microservizio B
voglia creare un'associazione?
Mi sembra che ci sia probabilmente un buon schema qui di cui non sono a conoscenza. Qualcuna delle opzioni che ho presentato ha senso? C'è un'altra opzione che potrebbe avere più senso?