CQRS Запись базы данных

В нашей компании мы разрабатываем систему на основе микросервиса и применяем шаблон CQRS. В CQRS мы разделяем Команды и Запросы, поэтому нам нужно разработать 2 микросервиса. В настоящее время мне поручено улучшить шаблон CQRS для сохранения событий в отдельной базе данных (источник событий). Я понимаю, что наличие отдельной базы данных событий очень важно, но нужна ли нам отдельная база данных записи? Каково реальное использование базы данных записи?

3 ответа

Решение

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

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

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

Цель базы данных записи - стать вашей книгой рекордов. База данных записи - это постоянное представление, которое вы используете для восстановления при перезапуске. Это точка синхронизации для всех записей.

Это "текущая Истина", как понимает ваша система.

В некотором смысле, это "реальные" данные, где модели чтения - это просто старые / кэшированные представления того, как выглядели реальные данные.

Это может помочь думать с точки зрения RDBMS. Когда трафик небольшой, мы можем обслуживать все входящие запросы из одной базы данных. По мере увеличения трафика мы хотим начать разгрузку части этого трафика. Поскольку мы хотим, чтобы постоянные данные были в согласованном состоянии, мы не можем разгрузить записи - если мы не хотим разрешать конфликты в точке записи. Но мы можем отбросить чтение на другие экземпляры, при условии, что мы готовы допустить некоторый конечный интервал времени между тем, когда происходит запись, и когда записанные данные доступны во всех системах.

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

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

Нет, вам не обязательно нужна отдельная база данных записи. Ядро сегрегации CQRS находится на уровне модели (кода). Переход к БД может быть полезным или вредным для вашего проекта, в зависимости от контекста.

Как и во многих ортогональных архитектурных решениях, связанных с использованием CQRS (Event Sourcing, Command Bus и т. Д.), Плюсы и минусы должны быть тщательно рассмотрены до принятия. Ниже некоторого количества одновременного доступа разделение баз данных чтения и записи может не стоить усилий.

Другие вопросы по тегам