Event Sourcing и CQRS
хранить не текущее состояние, а историю изменений; и разделять чтение и запись.
Почему это важно: Event sourcing решает аудит, time travel, восстановление состояния. CQRS — разные требования к чтению и записи.
Главная идея
Состояние — это свёртка всех событий. Команды меняют состояние через события, запросы читают из проекций.
Как это выглядит на практике
- Каждое изменение записывается как событие в event store.
- Текущее состояние — это применение всех событий по порядку.
- Для чтения создаются проекции — оптимизированные представления данных.
- При новой бизнес-задаче можно построить новую проекцию из истории.
Что происходит под капотом
- Event store: append-only хранилище событий (EventStoreDB, Kafka).
- Projection: материализованное представление, обновляемое по событиям.
- CQRS: Command Query Responsibility Segregation — модель записи и чтения разделены.
- Snapshots: периодическое сохранение состояния, чтобы не пересчитывать с нуля.
Типичные ошибки и заблуждения
- Ошибка: event sourcing нужен везде. Это сложный подход с серьёзным overhead.
- Ошибка: CQRS = event sourcing. CQRS можно применять и без событий.
- Ошибка: проекции легко строить заново. На больших объёмах это часы или дни.
- Ошибка: event sourcing решает любые проблемы с данными. На самом деле он добавляет свои.
Ключевые выводы
- Event sourcing хранит историю, а не текущее состояние.
- CQRS разделяет модели чтения и записи.
- Проекции позволяют оптимизировать чтение под задачу.
- Подход даёт мощь, но требует дисциплины.
Термины урока
Связь с работой backend-разработчика
Event sourcing и CQRS — продвинутые паттерны, которые решают конкретные задачи (аудит, аналитика, сложные домены), но усложняют систему.
Мини-разбор реальной ситуации
Финтех-стартап выбрал event sourcing для биллинга — это дало полную аудиторскую историю и возможность реконструировать любое состояние счёта на любую дату.
Что запомнить
- События — источник истины.
- CQRS ≠ event sourcing.
- Используйте, когда выгода превышает сложность.
Итог
Event sourcing и CQRS — мощные инструменты для специфических задач, не для каждого CRUD-приложения.
Комментарии к уроку
Войдите, чтобы оставить комментарий.
Пока нет комментариев — будьте первым.