Что такое Event Sourcing
Event sourcing — это архитектурный паттерн, в котором состояние системы хранится как неизменяемая последовательность событий вместо одного текущего снимка. Вместо того чтобы обновлять запись на месте, каждое изменение добавляется как новое событие в журнал событий.
Например, вместо того чтобы хранить финальный баланс счёта, ты хранишь:
AccountCreated → MoneyDeposited → MoneyWithdrawn
Текущее состояние получается путём воспроизведения всех событий с самого начала.
Ключевые преимущества
- Полный журнал аудита — каждое изменение состояния фиксируется навсегда, что бесценно для соответствия нормам и отладки
- Запросы по истории — ты можешь восстановить состояние системы в любой момент времени, воспроизведя события до этой точки
- Естественно сочетается с CQRS — event sourcing хорошо работает с Command Query Responsibility Segregation, позволяя моделям чтения и записи масштабироваться независимо
- Надёжная интеграция на основе событий — другие сервисы могут подписаться на журнал событий и реагировать асинхронно
Основные сложности
- Эволюция схемы событий — когда бизнес-логика меняется, старые форматы событий всё равно должны обрабатываться корректно, что требует тщательно продуманной стратегии версионирования
- Рост хранилища — постоянно растущий журнал событий может влететь в копеечку; снимки состояния обычно используются, чтобы не воспроизводить тысячи событий при каждом чтении
- Сложность запросов — получить текущее состояние напрямую непросто; нужно поддерживать отдельную модель чтения или проекцию
- Высокий порог входа — паттерн вносит значительную архитектурную сложность по сравнению с традиционными CRUD-подходами
Когда это использовать
Event sourcing лучше всего подходит для областей, где аудируемость, история изменений и event-driven коммуникация являются критическими требованиями — например, в финансовых системах, управлении заказами или совместных приложениях.