Наразі у мене є дві мікросервіси. Ми їх подзвонимо A
і B
.
База даних в мікросервісі A
має таку таблицю:
A
|-- users
База даних в мікросервісі B
має таку таблицю:
B
|-- trackers
Вимоги держава, users
і trackers
є багато-до-багатьох.
Я не впевнений, як правильно впоратися з цим в архітектурі мікросервісів.
Я міг бачити це, працюючи одним із трьох способів:
user_trackers
Таблиця додається до microserviceA
. Це діє аналогічно таблиці приєднання, що містить "сторонні ключі" доusers
таtrackers
.owners
Таблиця додається до microserviceB
. Ця таблиця діє подібно до поліморфної таблиці приєднання. Це дозволить будь-якій службі створити асоціацію з трекером. Це може виглядати приблизно так:B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
- Зберігайте записи для кожної мікросервісу
users
таtrackers
в кожній з них. Утримуйте їх у синхронізації з якоюсь системою pubsub.
Я спочатку збирався перейти з варіантом 2, тому що мені сподобалось, що він зберігає межі транзакцій. Я можу створити трекер і пов’язати його з чимось атомним. Однак це виглядає поза сферою для мікросервісу B
. Чому мікросервіс повинен B
піклуватися про те, щоб мікросервіс A
створив асоціацію?
Я відчуваю, що тут, мабуть, хороший зразок, про який я не знаю. Чи має сенс якийсь із запропонованих мною варіантів? Чи є інший варіант, який може мати більше сенсу?