Термин · Глоссарий B2B-ПО

Event Sourcing (Event Sourcing)

Event Sourcing – паттерн хранения состояния системы в виде последовательности неизменяемых событий вместо текущего состояния объектов. Текущее состояние восстанавливается путём воспроизведения (replay) всей истории событий.

Буква «E» В категориях: 4 Платформ: 6+
Реклама

Введение

Event Sourcing – архитектурный паттерн, описанный Мартином Фаулером, при котором все изменения состояния приложения сохраняются как последовательность событий в append-only хранилище (Event Store). Текущее состояние объекта не хранится явно, а вычисляется путём воспроизведения (replay) всех событий с начала истории.

Пример: вместо хранения текущего баланса счёта хранятся события «Пополнение на 1000₽», «Списание 350₽», «Пополнение 500₽» – и баланс вычисляется как их сумма.

История и контекст

Идея хранения истории изменений существует давно – бухгалтерские книги работают по тому же принципу. Мартин Фаулер формализовал паттерн в 2005 году в своей статье на martinfowler.com. Грег Янг развил его в связке с CQRS и DDD, а также создал EventStore – специализированную Event Sourcing базу данных. Apache Kafka как append-only distributed log стал популярным Event Store для высоконагруженных систем.

Как это работает

Жизненный цикл в Event Sourcing:

  1. Приходит команда (например, «Создать заказ»);
  2. Агрегат обрабатывает команду и производит события (OrderCreated, ItemAdded);
  3. События сохраняются в Event Store в хронологическом порядке;
  4. Для восстановления состояния агрегата его события загружаются и воспроизводятся.

Для ускорения загрузки длинных историй используются снимки состояния (snapshots) – периодически сохраняемое текущее состояние, после которого проигрываются только последующие события.

Event Store

Event Store – специализированное хранилище событий. Требования: append-only (события не изменяются), организация по потокам (streams), поддержка версионирования и оптимистичная блокировка для предотвращения конфликтов.

Где применяется

  • Финтех и банкинг – полный аудит всех транзакций с возможностью восстановления состояния на любой момент;
  • Системы заказов и инвентаря в e-commerce;
  • Юридически значимые системы, требующие неизменяемого лога изменений;
  • Сложные доменные модели с DDD, где история изменений имеет бизнес-ценность;
  • Системы аудита и compliance.

Преимущества и ограничения

Преимущества: полный аудит всех изменений; возможность восстановить состояние на любой момент времени (temporal query); отладка через replay; естественная интеграция с CQRS для построения проекций; decoupling производителя от потребителей.

Ограничения: значительное усложнение архитектуры; управление версиями схем событий (event schema evolution); долгий replay при большой истории; eventual consistency; необходимость специальных инструментов. Не подходит для простых CRUD-систем.

Связь с другими понятиями

Event Sourcing практически всегда применяется совместно с CQRS: события на write side используются для построения read-моделей. Domain-Driven Design определяет Aggregate как единицу консистентности, производящую события. Event-driven Architecture использует те же события для асинхронной интеграции сервисов. Apache Kafka может использоваться как Event Store для высоконагруженных потоковых систем.

Реклама

Понятия из глоссария Цифрового маркетплейса, которые часто встречаются вместе с термином «Event Sourcing».

Платформы класса «Event Sourcing»

Решения из каталога Цифрового маркетплейса, относящиеся к этому классу ПО. Ссылки ведут на полные профили платформ с тарифами, обзорами и кейсами внедрения.

Онколинк

Онколинк

МИС
ООО "МИРАМЕДИКС"
Платформа для управления онкологическими пациентами и координации медицинского обслуживания. Входит в Единый р...
Цена по запросу
Подробнее →
MO

Moon

Автоматизированное тестирование
ООО "АЕРОКУБ"
Moon - platforma avtomatizirovannogo testirovaniya veb-prilozheniy v nastol'nykh i mobil'nykh brauzerakh po pr...
Цена по запросу
★ 4.0
Подробнее →
Модуль обмена C3D Converter

Модуль обмена C3D Converter

Среды разработки (IDE)
ООО "СЗД ЛАБС"
Модуль обмена C3D Converter отвечает за чтение и запись 3D-моделей в файлах нейтральных форматов и в собственн...
Цена по запросу
Подробнее →
ПE

Платформа Eludia

Low-code платформы
ООО "ФАСТЕК"
Eludia.pm - открытая MVC-платформы для быстрой разработки информационных Intranet-систем.
Цена по запросу
Подробнее →
EtherSensor

EtherSensor

Среды разработки (IDE)
ООО "МИКРООЛАП ТЕКНОЛОДЖИС"
Программная платформа для анализа сетевого трафика
Цена по запросу
★ 4.1
Подробнее →

Категории каталога

Разделы каталога Цифрового маркетплейса, в которые входят решения, использующие «Event Sourcing».

Где применяется

Отрасли, в которых «Event Sourcing» используется на практике. Откройте отраслевой раздел Цифрового маркетплейса, чтобы увидеть подходящие решения, кейсы и новости.

Частые вопросы про Event Sourcing

Зачем хранить события вместо текущего состояния?

Это даёт полный аудит, возможность восстановить состояние на любой момент времени, отлаживать поведение через replay и строить новые проекции данных ретроспективно – без потери информации.

Что такое Event Store?

Специализированное append-only хранилище событий, организованных в потоки (streams). Примеры: EventStoreDB, Apache Kafka (как лог), PostgreSQL с таблицей событий.

Как Event Sourcing связан с CQRS?

Write side хранит состояние как события, read side строит денормализованные проекции, воспроизводя эти события. Это позволяет иметь множество независимых read-моделей из одного источника истины.

Что такое snapshot в Event Sourcing?

Периодически сохраняемый снимок текущего состояния агрегата. Позволяет не воспроизводить всю историю событий при загрузке – загружается последний снимок и только последующие события.

Можно ли изменить событие после записи?

Нет – события неизменяемы (immutable). При ошибке создаётся компенсирующее событие. Это гарантирует целостность аудит-лога, но требует особого подхода к исправлению ошибок.

Когда Event Sourcing избыточен?

Для простых CRUD-систем, где история изменений не имеет бизнес-ценности. Паттерн оправдан при требованиях к аудиту, сложной доменной логике и необходимости временных запросов.