Понимание CQRS и EventSourcing - PullRequest
       50

Понимание CQRS и EventSourcing

1 голос
/ 24 сентября 2019

Я прочитал несколько блогов и посмотрел видео о полезности CQRS и ES.Я остаюсь в замешательстве с реализацией.

CQRS: когда используется отдельная таблица, одна для «Запись, обновление и удаление» и другая для операции чтения.Итак, как данные синхронизируются из таблицы записи в таблицу чтения.Требуется ли нам использовать задание cron для синхронизации данных для чтения таблицы только из таблицы записи или любых других доступных опций?

Источник события: мы храним только все неизменяемые последовательные операции, так как запись для каждого обновления, произошедшего после создания водно хранилище.Или мы также храним изменчивую запись? Я имею в виду, что та же самая запись обновляется в другом хранилище

. И, пожалуйста, объясните СУБД, NoSQL и Messaging, которые будут использоваться, и где они вписываются в нее

1 Ответ

0 голосов
/ 24 сентября 2019

при использовании отдельной таблицы, одна для «Запись, обновление и удаление» и другая для операции чтения.Итак, как данные синхронизируются из таблицы записи в таблицу чтения.

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

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

СобытиеSourcing

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

Но «поток» является официальной копией событий.Также могут быть неавторизованные копии (например, события, опубликованные в шине сообщений).Все они, как правило, являются неизменяемыми.

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

СУБД

Для многих видов запросов, особенно тех, которые охватывают несколько потоков событий, возможность описатьжелаемые результаты с точки зрения отношений значительно облегчают задачу программирования.Таким образом, общая схема состоит в том, чтобы иметь асинхронный процесс, который считывает информацию из потоков событий и обновляет СУБД.Обычно получаемое преимущество состоит в том, что вы получаете запросы с малой задержкой (но данные, возвращаемые этими запросами, могут быть устаревшими). ​​

СУБД также может быть использована в качестве основы проектирования самого хранилища событий / хранилища сообщений.События обычно записываются в виде данных BLOB-объектов, а интересные метаданные представляются в виде дополнительных столбцов.Хранилище сообщений, используемое Eventide-Project, основано на postgresql.

NoSQL

Опять же, потенциально может использоваться как кэш читаемых представлений или как хранилище сообщенийв зависимости от ваших потребностей.Хранилище событий может быть примером хранилища сообщений NoSQL.

Обмен сообщениями

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

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

В источнике событий авторитетное представление состояния - это последовательность событий - ваша надежная копия этой последовательности событий - этоКнига истины.

Что касается того, куда они идут?Ну, это будет зависеть от вашей архитектуры и выбора хранилища.Вы можете сами управлять файлами на диске, вы можете записывать их в свою собственную СУБД;вы можете использовать СУБД, разработанную кем-то другим, вы можете использовать хранилище документов NoSQL, вы можете использовать выделенное хранилище сообщений.

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

...