Event SourcingEvent SourcingPatrón de arquitectura en el que los cambios en el estado de una aplicación se almacenan como una secuencia inmutable de eventos de dominio ordenados en el tiempo. En lugar de guardar únicamente el estado actual en una base de datos tradicional, el sistema puede reconstruir cualquier estado pasado o presente recalculando la lista completa o instantánea (snapshot) de dichos eventos. is a fundamental architectural pattern that transforms how systems manage data persistence. Instead of only storing the current state of an entityEntidad (Entity)El núcleo inamovible de la lógica de negocio en la Arquitectura Limpia. Una Entidad encapsula las reglas y datos empresariales más fundamentales y generales (las reglas de negocio críticas). Pueden ser objetos con métodos o un conjunto de estructuras de datos y funciones, y son completamente ajenas a cualquier cambio externo, como modificaciones en la base de datos, en el sistema de vistas o en el framework de desarrollo. using SQL UPDATE statements, the system records every change as a chronological and immutable sequence of domain events.
This approach mimics the natural functioning of bank ledgers: the current balance of an account is not stored in isolation, but is calculated by adding and subtracting all registered historical transactions.
1. The Event Store Concept
In an Event SourcingEvent SourcingPatrón de arquitectura en el que los cambios en el estado de una aplicación se almacenan como una secuencia inmutable de eventos de dominio ordenados en el tiempo. En lugar de guardar únicamente el estado actual en una base de datos tradicional, el sistema puede reconstruir cualquier estado pasado o presente recalculando la lista completa o instantánea (snapshot) de dichos eventos. architecture, the central persistence component is the Event Store.
An Event Store is an append-only database. Stored events are never modified or deleted; they represent facts from the past that definitively occurred in the business domain (OrderCreated, PaymentReceived, ItemShipped).
2. State Reconstruction and Snapshots
To determine the current state of an entityEntidad (Entity)El núcleo inamovible de la lógica de negocio en la Arquitectura Limpia. Una Entidad encapsula las reglas y datos empresariales más fundamentales y generales (las reglas de negocio críticas). Pueden ser objetos con métodos o un conjunto de estructuras de datos y funciones, y son completamente ajenas a cualquier cambio externo, como modificaciones en la base de datos, en el sistema de vistas o en el framework de desarrollo. or aggregate, the system reads all events associated with its unique identifier from the Event Store and applies them sequentially in memory.
The Performance Challenge: Snapshots
When an aggregate accumulates thousands of events over the years, recalculating its entire state from the first event would be inefficient. To solve this, the pattern uses Snapshots:
- Every certain number of events (e.g., every 100 events), the system saves a snapshot of the current state of the aggregate.
- To reconstruct the aggregate, the system retrieves the last available snapshot and only processes the events that occurred after that snapshot.
3. Key Benefits of Event Sourcing
- Auditing and Immutable History: Allows knowing not only what the current state of the system is, but exactly how, when, and why that state was reached.
- Time Travel (Time Travel Debugging): Makes it possible to reproduce the state of the system at any point in the past to audit failures or analyze usage patterns.
- Natural Integration with CQRS: The sequence of events from the Event Store directly feeds the read model projectors in CQRSCQRS (Command Query Responsibility Segregation)Segregación de Responsabilidad de Comandos y Consultas. Es un patrón de arquitectura que separa explícitamente las operaciones de modificación de estado (Comandos, como crear o actualizar datos) de las operaciones de lectura (Consultas). Esta separación permite optimizar y escalar de forma independiente los modelos de datos de lectura y escritura, mejorando el rendimiento y la seguridad en sistemas complejos. architectures.
- Decoupling in Microservices: The generated events serve as the source of truth for asynchronous communication between Microservices.
4. Considerations and Integration with Clean Architecture
Although Event SourcingEvent SourcingPatrón de arquitectura en el que los cambios en el estado de una aplicación se almacenan como una secuencia inmutable de eventos de dominio ordenados en el tiempo. En lugar de guardar únicamente el estado actual en una base de datos tradicional, el sistema puede reconstruir cualquier estado pasado o presente recalculando la lista completa o instantánea (snapshot) de dichos eventos. offers outstanding advantages in traceability and scalability, it introduces challenges such as event schema evolution (event versioning) and infrastructural complexity.
In Clean Architecture, the Event Store acts as an implementation detail of the infrastructure layer, keeping the aggregate's business rules pure and isolated in the domain layer.