Как соотносятся CQRS и Event Sourcing?
- Обязательно ли использовать CQRS вместе с Event Sourcing?
- Что такое Event Sourcing?
Это независимые решения, которые часто применяют вместе. CQRS — разделение моделей чтения и записи; event sourcing — хранение изменений как неизменяемого журнала событий вместо текущего состояния.
- CQRS можно сделать над обычными таблицами
- Event sourcing можно делать без отдельной модели чтения
- Вместе удобно: проекции событий естественно дают модели чтения
А ещё Похоже на журнал базы данных, только на уровне предметной области
Подробно
Event sourcing. Источник истины — последовательность событий агрегата: ЗаказСоздан, ПозицияДобавлена, ЗаказОплачен. Текущее состояние получается их последовательным применением. Плюсы: полная история и аудит «бесплатно», можно восстановить состояние на любой момент, можно строить новые представления по старым событиям. Минусы: версионирование событий, снапшоты, сложность запросов по текущему состоянию.
CQRS — разделение моделей записи и чтения.
Как связаны. В event sourcing запросы по текущему состоянию («все неоплаченные заказы за неделю») по журналу событий выполнять неудобно — поэтому строят проекции: потребители событий заполняют таблицы под запросы. Это и есть модели чтения CQRS. Поэтому они так часто вместе.
Но независимы:
- CQRS без event sourcing — модель записи в обычных таблицах, модель чтения наполняется через outbox или CDC;
- event sourcing без отдельной модели чтения — состояние агрегата восстанавливается по событиям при каждой команде, а запросов по многим агрегатам немного.
Сказать это первым на собеседовании — признак понимания.
Что хотят услышать
- Определения обоих понятий.
- Что они независимы, с примером каждого без другого.
- Почему их часто совмещают: проекции как модели чтения.
Частые ошибки
- Считать event sourcing обязательной частью CQRS.
- Путать event sourcing с публикацией событий интеграции.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗CQRS — это просто другое название Event Sourcing в мире DDD
- ✗Event Sourcing технически невозможно реализовать без отдельного CQRS
- ✗CQRS обязательно требует хранить события как источник истины, а без него теряет смысл
- ✓Это независимые решения, хотя вместе они хорошо стыкуются
Что спросят дальше
- Что такое проекция и почему её можно перестроить?
- Когда event sourcing не нужен?
Разбор темы
- CQRS и Event Sourcing
Разделение моделей чтения и записи, цена рассинхронизации, событие как источник истины, снапшоты и версионирование событий, и честный ответ на вопрос «когда это не нужно».
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.