Al momento ho due microservizi. Li chiameremo A
e B
.
Il database in microservice A
ha la seguente tabella:
A
|-- users
Il database in microservice B
ha la seguente tabella:
B
|-- trackers
I requisiti lo affermano users
e trackers
hanno una relazione molti-a-molti.
Non sono sicuro di come gestirlo correttamente all'interno di un'architettura di microservizi.
Ho potuto vedere questo lavoro in tre modi:
- Una
user_trackers
tabella viene aggiunta a microservizioA
. Funziona in modo simile a una tabella di join contenente "chiavi esterne" ausers
etrackers
. - Una
owners
tabella viene aggiunta a microservizioB
. Questa tabella si comporta in modo simile a una tabella di join polimorfica. Ciò consentirebbe a qualsiasi servizio di creare un'associazione con un tracker. Questo potrebbe apparire un po 'così:B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
- Conservare i record per
users
etrackers
in ciascun microservizio. Tienili sincronizzati con una sorta di sistema pubsub.
Inizialmente avrei optato per l'opzione 2 perché mi piaceva che preservasse i confini delle transazioni. Posso creare un tracker e associarlo atomicamente a qualcosa. Tuttavia, sembra fuori dal campo di applicazione del microservizio B
. Perché il microservizio dovrebbe B
preoccuparsi che il microservizio A
voglia creare un'associazione?
Sento che probabilmente c'è un buon modello qui di cui non sono a conoscenza. Alcune delle opzioni che ho presentato hanno un senso? C'è un'altra opzione che potrebbe avere più senso?