Наразі у мене є дві мікросервіси. Ми їх подзвонимо 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створив асоціацію?
Я відчуваю, що тут, мабуть, хороший зразок, про який я не знаю. Чи має сенс якийсь із запропонованих мною варіантів? Чи є інший варіант, який може мати більше сенсу?