Чтение модельных и реляционных данных в CQRS - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь ознакомиться с CQRS и архитектурой микросервисов. Я понимаю, что CQRS состоит из отделения моделей чтения от моделей домена, и у вас есть определенный сервис с базой данных для каждой модели чтения для оптимизации стороны запроса.

Но как человек, привыкший только к монолитной архитектуре, я не понимаю, как вы справляетесь с реляционными данными, если они живут в разных сервисах;скажем, например, у меня есть микросервис пользователей и микросервис постов с их моделями чтения, как я должен запрашивать посты у каждого пользователя, который их опубликовал, как я могу управлять связанными данными между разными микросервисами?

1 Ответ

1 голос
/ 11 ноября 2019

У меня есть микросервис пользователей и микросервис постов с их моделями чтения, как я должен запрашивать посты у каждого пользователя, который их опубликовал, как я могу управлять связанными данными между разными микросервисами?

Вы копируете данные из долговременного хранилища службы, которой он принадлежит, в какое-то обычное место, где можно построить и обновить желаемое представление.

Простая реализация сантехники может состоять в том, чтобы иметь таймерэто срабатывает по какому-то расписанию, и каждый раз, когда запускается таймер, вы извлекаете обновленную информацию в свое представление, применяя любые преобразования, которые вам могут понадобиться.

Существует некоторая задержка, поскольку для изменения, вносимого службой, требуется время. распространяться на представления, но это часть того, на что вы подписались, когда решили, что пользователи и сообщения должны обслуживаться отдельно.

Допустим, у меня есть представление с сообщениями и необходимыми данными пользователя. ,Если пользователь обновляет свою информацию, значит ли это, что мне придется обновлять данные каждого поста, опубликованного этим пользователем?

«Это зависит». Например, вы можете копировать данные в реляционную базу данных: если ваши представления описываются отношениями, то при обновлении пользователя обязательно обновятся базовые данные для всех представлений;любое представление представления, созданное после обновления базы данных, будет содержать новые данные.

С другой стороны, если вы используете хранилище документов, то вам, вероятно, потребуется либо обновить все аффинные документы, либооформить эти документы с помощью ссылки на пользовательский документ. Это может быть понятнее, если вы подумаете о различных способах объединения информации в Интернете.

...