Obecnie mam dwie mikrousługi. Zadzwonimy do nich A
i B
.
Baza danych w ramach mikrousługi A
zawiera następującą tabelę:
A
|-- users
Baza danych w ramach mikrousługi B
zawiera następującą tabelę:
B
|-- trackers
Wymagania mówią o tym users
i trackers
mają relację wiele do wielu.
Nie jestem pewien, jak właściwie sobie z tym poradzić w architekturze mikrousług.
Widziałem, jak działa to na jeden z trzech sposobów:
user_trackers
Tabeli dodaje microserviceA
. Działa to podobnie do tabeli łączenia zawierającej „klucze obce” dousers
itrackers
.owners
Tabeli dodaje microserviceB
. Ta tabela działa podobnie do polimorficznej tabeli łączenia. Umożliwiłoby to dowolnej usłudze utworzenie powiązania z modułem śledzącym. Może to wyglądać mniej więcej tak:B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
- Przechowuje dokumentację
users
itrackers
na każdym microservice. Synchronizuj je z jakimś systemem pubsub.
Pierwotnie zamierzałem wybrać opcję 2, ponieważ podobało mi się, że zachowała granice transakcji. Mogę stworzyć moduł śledzący i powiązać go z czymś atomowo. Wydaje się jednak, że nie jest to możliwe w przypadku mikrousług B
. Dlaczego mikrousługa powinna B
przejmować się tym, że mikrousługa A
chce utworzyć powiązanie?
Wydaje mi się, że prawdopodobnie jest tutaj dobry wzór, którego nie jestem świadomy. Czy którakolwiek z przedstawionych opcji ma sens? Czy istnieje inna opcja, która może mieć większy sens?