Skip to content

Что такое Event Sourcing

Коротко:

Event Sourcing — pattern, где current state derived из sequence immutable events, хранящихся в event log. Вместо UPDATE user SET balance = 100, пишем BalanceCredited {amount: 100}. Преимущества: full audit trail, time-travel queries, rebuild of state. Минусы: сложная схема migrations, eventual consistency, "upcasting" старых events при schema evolution.

Ниже: подробности, пример, смежные термины, FAQ.

Подробности

  • Append-only log: events immutable, порядок matters
  • Event store: EventStore DB, Kafka, Postgres tables
  • Snapshots: для performance — периодический dump state
  • Projections: read models, built from event stream
  • Upcasters: преобразуют old event versions в new

Пример

// Events append
EventStore.append('order-123', [
  OrderCreated { customerId, items }
  OrderConfirmed { timestamp }
  OrderShipped { trackingNumber }
])
// Rebuild state by replaying events
state = fold(events, initialState, applyEvent)

Смежные термины

Больше по теме

Часто задаваемые вопросы

Event Sourcing только для CQRS?

Нет, но часто их combine. ES даёт write-side, CQRS разделяет read и write models.

Как deal с schema changes?

Upcasters: at read time, old event versions transformed до new schema. Или versioned event types (OrderCreated_V1, V2).

Storage size — проблема?

Events накапливаются линейно. Для long-lived streams — snapshots каждые N events. Или archival старых events в cold storage.