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