Управление данными в CQRS и микросервисах - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в микросервисной архитектуре, я много узнал об ее основах, CQRS и источниках событий, следуя этой документации http://microservices.io, но у меня есть некоторые вопросы, которые мне до сих пор неясны:

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

  2. Если выесть разные базы данных, то, как вы должны присоединиться к таблице. И если мы будем использовать одну и ту же базу данных, наши микросервисы не будут тесно связаны, и это разрушит всю цель использования этой архитектуры

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

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

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

Если у вас разные базы данныхтогда как вы должны присоединиться к столу.

Вы должны НЕ присоединиться к столам. Вместо этого вы копируете данные - переводя из представления, которое имеет смысл для записи, в представление, которое имеет смысл для чтения.

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

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

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

Другой способ выразить ту же идею: вы должны иметь возможность изменять «свою» схему без необходимости координировать свои действия с кем-либо еще.

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

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

0 голосов
/ 07 ноября 2019

Разделение ответственности по запросам команд (CQRS) - это шаблон, в котором вы отделяете модели для обновления от модели для чтения ваших данных. Это означает, что читающая сторона вашего микросервиса будет высокоспециализированной и независимой.

Итак, говоря о стороне чтения, вы можете иметь столько баз данных, сколько захотите, обычно у вас есть специализированная и оптимизированная база данных в соответствии с типом данных и запросами, которые вам нужно выполнить. Например, вы можете использовать Elastsearch для быстрого поиска или Neo4J для структуры графа.

Эти базы данных обновляются публикуемым вами микросервисом Events, поэтому вы не объединяете таблицы между различными базами данных, они независимы.

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

...