digital-garden/dev/architecture/Event Sourcing.md

44 lines
4.1 KiB
Markdown
Raw Normal View History

2024-12-03 22:19:18 +03:00
---
aliases:
tags:
- maturity/🌱
date: 2024-12-02
---
Event Sourcing — это [[архитектурный паттерн]], при котором состояние системы не сохраняется напрямую, а восстанавливается путем воспроизведения последовательности событий. Каждое событие отражает изменение в системе и сохраняется в неизменяемом журнале событий (event log).
**Принципы:**
- **Неизменяемость событий**. Каждое событие записывается единожды и не подлежит изменению.
- **Воспроизведение событий**. Текущее состояние объекта вычисляется путем последовательного применения событий, начиная с исходного состояния.
- **Хранилище событий**. Все события хранятся в базе данных, которая может быть оптимизирована для их последовательной записи.
**Преимущества:**
- **Аудит и прозрачность**. Хранилище событий предоставляет полный лог изменений, что упрощает аудит и диагностику.
- **Производительность и масштабирование**. Увеличение производительности за счет использования хранилища событий и построения проекций для чтения.
- **Восстановление состояния**. Легкость восстановления системы после сбоя путем проигрывания всех событий.
- **Возможности для анализа**. Хранилище событий может использоваться для ретроспективного анализа данных.
**Ограничения:**
- **Усложнение системы**. Требуется дополнительная логика для обработки событий, создания проекций и управления хранилищем событий.
- **Версионирование событий**. Необходимость в управлении версиями событий при изменении их структуры.
- **Увеличение объема данных**. Хранение всех событий может привести к быстрому росту объема данных.
- **Задержка восстановления состояния**. При большом числе событий восстановление состояния может занимать много времени.
**Применение:**
1. **Финансовые системы**. Для учета транзакций и обеспечения полного логирования операций.
2. **E-commerce**. Хранение всех изменений корзины пользователя или заказов.
3. **IoT**. Сохранение событий от датчиков для анализа в реальном времени или ретроспективы.
4. Паттерн [[../../../../knowledge/dev/архитектура/паттерн/CQRS|CQRS]]. Часто используется совместно с Event Sourcing для разделения операций чтения и записи.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
**Родитель**:: [[Архитектурный паттерн]]
**Источник**::
**Создана**:: [[2024-12-02]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->