Skip to content

Latest commit

 

History

History
93 lines (50 loc) · 8.79 KB

File metadata and controls

93 lines (50 loc) · 8.79 KB

Источники событий (Event Sourcing)

Шаблон источник событий подразумевает использование событий в качестве инструмента моделирования бизнес-логики.

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

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

Архитектура, основанная на источниках событий

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

Хранилище событий - это база данных, которая не используется для хранения модели данных. а лишь для хранения событий.

Свойства хранилища событий

  1. Содержит объекты-собития, содержащие любую информацию, полезную для восстановления состояния объекты, к которому относится событие
  2. Должно быть в состоянии возвращать поток событий, связанных с данным ключом
  3. Допускает только добавление и не должно поддерживать обновления и удаления событий.

Событие - простой набор свойств.

Воспроизведение событий

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

Воспроизведение событий - восстановление состояние системы с помощью прочтения прошлых сообщений.

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

Решением данной проблемы выступают снимки данных

Снимки данных

Снимок данных - это сохранение состояния модели в некоторый момент времени.

Снимок данных - это операция сохранения некоторого сосотояния модели после выполнения N операций или хранение в кеше устаревших данных

Итог по теории

События способствуют задачно-ориентированному подходу к реализации систем.

Иногда при проектировании системы трудно создать единственнуб полноценную модель событий и эффективнее провести разделение между командами и запросами.

Источники событий - это подход, основанный на идее, что состояние приложения сохраняется как поток событий.

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

Реализация источников событий

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

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

Данный шаблон появился как решение проблемы подхода CRUD, в частности, в связи с тем, что в CRUD довольно сложно отслеживать историю изменений.

Когда следует применять источники событий

Оптимальные сценарии

  1. Когда бизнес требует фиксации намерений и целей операций над данными

    • Например, если нужно вывести на экран действия пользователя в системе - заказы, связанные с поездками, которые были совершены, отменены или изменены.
  2. Когда нужно выполнить работу на основе зарегистрированных событий

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

Неоптимальные сценарии

  1. Если для написания работоспособной системы достаточно операций CRUD.
  2. Если в системе не обязательны откаты и восстановления.

Постоянное хранение событий

Хранилище событий - это обычное постоянное хранилище, в котором сохраняется информация о событиях.

Событие - это по факту DTO, т.е. простой набор свойств.

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

Обычно для решения этой проблемы используются документо-ориентированные базы даных, например, RavenDB или MEventStore.

Резюме

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

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

Воспроизведение состояния сущностей реализуется двумя способами:

  1. Восстановление состояния сущности посредством последовательного выполнения всех событий, произошедших с ней.
  2. Регистрация события и снимки основных сущностей с определённой переодичностью.