У меня сейчас два микросервиса. Мы им позвоним 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
в каждом microservice. Держите их в синхронизации с какой-то системой pubsub.
Изначально я собирался пойти с вариантом 2, потому что мне понравилось, что он сохранил границы транзакций. Я могу создать трекер и связать его с чем-то атомарно. Тем не менее, это кажется вне сферы применения микросервиса B
. Почему микросервис должен B
заботиться о том, что микросервис A
хочет создать ассоциацию?
Я чувствую, что здесь, вероятно, есть хороший образец, о котором я не знаю. Имеет ли смысл какой-либо из предложенных мной вариантов? Есть ли другой вариант, который может иметь больше смысла?