Коллеги, здравствуйте!
Коллеги, есть один архитектурный вопрос, касающийся микросервисной архитектуры.
Все мы знаем, что микросервис должен обладать своей собственной базой данной, в которой хранит сущности.
Но тут возникает следующий вопрос, как же тогда обстоит дело с содержаниеим этих сущностей и нормализацией базы данных.
Поясню на примере. У нас есть микросервис отвечающий за клиентов. Их заведение, авторизацию и т.д. В его базе данных хранятся данные клиента: идентификатор (уникальный), ФИО, Пол, Дата рождения и т.д. В смежных таблицах или прямо в таблице клиента хранится номер телефона, Email и т.д.
Также есть микросервис диалогов между пользователями. Одним из требований к нему является выдача данных диалога в котором указаны ФИО, пол и телефон пользователя, который оставил конкретное сообщение. Этот микросервис обладает базой данных сообщений.
В чем собственно вопрос: нужно ли в таблице сообщений иметь кроме поля уникального идентификатора клиента, также поля ФИО, пол, телефон? Или же их нужно запрашивать у микросервиса отвечающего за клиента по уникальному идентификатору? При отображении диалогов таких запросов к микросервису клиентов будет множество.
Если же записывать их в таблицу диалогов микросервиса диалогов, у нас возникает избыточность данных, а также потенциальная несогласованность этих данных в случае если клиент изменит свои данные.
В формате сервисной архитектуры все понятно. У нас N-е кол-во сервисов и одна база данных и у нас есть возможность через JOIN запрашивать данные клиента из таблицы клиентов (или N-го кол-ва связанных таблиц).
А как правильно поступать в ситуации с микросервисами? Ведь вызов получения данных клиента по идентификатору из друго микросервиса достаточно дорог.