Термин · Глоссарий 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.2
Подробнее →
Модуль обмена C3D Converter

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

Разработка ПО
Модуль обмена C3D Converter отвечает за чтение и запись 3D-моделей в файлах нейтральных форматов и в собственн...
Цена по запросу
Подробнее →
JaCarta АРМ УЦ

JaCarta АРМ УЦ

Разработка ПО
ПО JaCarta АРМ УЦ - приложение, позволяющее генерировать ключевые пары с использованием встроенных криптографи...
Цена по запросу
★ 4.7
Подробнее →
АВ

Автограмма

Разработка ПО
Автограмма — визуальная среда разработки встраиваемых систем управления (No-Code/IDE) для промышленной автомат...
Цена по запросу
Подробнее →

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

Разделы каталога Цифрового маркетплейса, в которые входят решения, использующие «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-систем, где история изменений не имеет бизнес-ценности. Паттерн оправдан при требованиях к аудиту, сложной доменной логике и необходимости временных запросов.