Как правильно связать простые микросервисы с общими данными?
Пытаюсь понять как лучше.. Имея простые данные типа Пользователи, Контакты, Сообщения - разделить их на три микросервиса
1. Пользователи - список по ID плюс данные каждого и поиск
2. Контакты - список ID + ID собеседника для каждого пользователя, свойства контакта, фильтры
3. Сообщения - список ID + ID собеседника, текст сообщения, статус, поиск
В списке контактов должна быть информация о собеседнике из Пользователи и желательно начало текста сообщения как превью из Сообщения
А в Сообщениях информация о собеседнике(Пользователи) и статус Контакта
---
Как правильно взаимодействовать с ними? Дублировать данные в Контакты как некоторую инфу о контакте(имя, возраст, город) и часть сообщения? Или делать по три запроса на один список контактов...
Данные запрашивает фронтенд по REST и весь Вью там
На мой взгляд, не совсем верно выделять микросервисы "Пользователи", "Контакты", "Сообщения". Вас тянет парадигма ООП (сущности, существительные). А микросервисы про бизнес-задачи (глаголы).
Сравните:
Пользователи, Контакты, Сообщения
и
Авторизация, Обмен сообщениями.
Соответственно "Авторизация" имеет свою БД со списком всех зашедших пользователей и все (!) инструменты (фильтры, поиски и т.п.) для работы с ними.
Аналогично "Обмен сообщениями" имеет свою базу данных со всеми сообщениями и все (!) инструменты по работе и пересылке сообщений.
Над ними может быть (а может и не быть) объединяющий микросервис "Объединить" (Gateway).
Таки я полностью согласен)) Просто у меня ещё есть "глагол" Контактировать(контакты) до того, как пользователи смогут писать друг другу сообщения. Как в тиндере "пары", как в ВК "друзья" и тп.. Как вы и говорите, появляется новый независимый микросервис, который заботится о том, чтобы знать
* Кого как зовут, кому сколько лет, кто где живет
* Как давно "познакомились", какой действующий статус
То есть. Загружая список контактов, сервис должен знать Имена, а не только ID`s. А имена же есть ещё и в результатах поиска, и в анкете каждого пользователя... Да и в переписке было бы не плохо показать имя собеседника. При использовании сущностей мы просто делаем JOIN данных. А у микросервиса(в идеале) собственная БД
собирать на бекенде с трех запросов один или на фронте, это уж как большое нравится.
В этом прелесть мискросервисов.
Дублировать никуда ничего не надо.
И конечно надо учесть что будет если один из сервисов ложится.