Получить доступ

Когда Event Sourcing и полный CQRS применять не стоит, и что делать вместо этого?

SeniorCQRS и Event Sourcing
Ещё спрашивают так:
  • Когда не стоит применять Event Sourcing?
  • Как внедрять CQRS постепенно?
Коротко

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

  • Цена: версионирование событий навсегда, отставание проекций, тяжёлая отладка расхождений, удаление персональных данных
  • Оправдано, где история — бизнес-требование: деньги, учёт, аудит, сложные процессы
  • Путь: простой CQRS в приложении → отдельная модель чтения → event sourcing для одного контекста

А ещё Аудит-таблица часто закрывает потребность в истории без event sourcing

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Вопрос про инженерную зрелость: ответ «зависит» не годится, нужны конкретные условия и цена.

Когда не стоит:

  • CRUD-домен — данные в основном создаются и редактируются формами без сложных правил: справочники, профили, контент. Журнал событий добавит сложность без выгоды;
  • нужна немедленная согласованность чтения после записи во многих сценариях — асинхронные проекции будут постоянно мешать;
  • команда без опыта эксплуатации асинхронных конвейеров, брокеров, перестроения проекций;
  • сильные требования к удалению данных без готовности к крипто-шреддингу.

Цена, о которой забывают: версионирование событий — постоянная работа; проекции отстают и иногда расходятся с журналом, отладка таких расхождений тяжела; запросы по текущему состоянию требуют проекций; миграции превращаются в апкастинг.

Когда оправдано: история и аудит — бизнес-требование (финансы, учёт, страхование), нужно восстановление состояния на момент, сложные процессы с множеством реакций на события.

Как вводить: сначала простой CQRS внутри приложения; если нужно — отдельная модель чтения через outbox или CDC; event sourcing — только для отдельного ограниченного контекста, где он окупается, а не для всей системы. Часто историю закрывает обычная аудит-таблица или журнал изменений.

Что хотят услышать

  • Конкретные условия, когда не применять.
  • Конкретная цена, а не общие слова о сложности.
  • Где оправдано.
  • Постепенный и точечный путь внедрения, альтернативы.

Частые ошибки

  • Применять event sourcing ко всей системе сразу.
  • Не называть цену версионирования.

Что спросят дальше

  • Как бы вы выбрали первый контекст для event sourcing?
  • Чем аудит-таблица отличается от event sourcing?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем