digital-garden/dev/architecture/Event Sourcing.md
Struchkov Mark 701b685334
All checks were successful
continuous-integration/drone/push Build is passing
Обновление
2024-12-03 22:19:18 +03:00

44 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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) -->