Eventual Consistency — Real World Patterns
Eventual Consistency — Real World Patterns
Eventual consistency means that replicas or services converge to the same state over time. It is a pragmatic tradeoff that enables high availability and scalability but requires careful design to avoid user-visible anomalies.
Where Eventual Consistency Appears
- Multi-region databases with asynchronous replication.
- Microservices that communicate via events.
- CQRS systems with separate read and write models.
Core Patterns
1. Outbox Pattern
Write domain changes and integration events in the same transaction, then publish the events asynchronously. This prevents lost updates and ensures reliable propagation.
2. Saga with Compensations
Sagas allow a chain of local transactions with compensating actions to reconcile failures.
3. Read Model Projections
Materialize a query-friendly read model from event streams. This is a common way to provide low-latency reads while preserving eventual consistency.
Spring Boot Example with Outbox
1
2
3
4
5
6
@Entity
public class Order {
@Id
private String id;
private String status;
}
1
2
3
4
5
6
7
@Entity
public class OutboxEvent {
@Id
private String id;
private String aggregateId;
private String payload;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Service
public class OrderService {
private final OrderRepository orderRepository;
private final OutboxRepository outboxRepository;
public OrderService(OrderRepository orderRepository, OutboxRepository outboxRepository) {
this.orderRepository = orderRepository;
this.outboxRepository = outboxRepository;
}
@Transactional
public void confirmOrder(String orderId) {
Order order = orderRepository.findById(orderId).orElseThrow();
order.setStatus("CONFIRMED");
orderRepository.save(order);
outboxRepository.save(OutboxEvent.from(order));
}
}
Managing User Expectations
- Provide status fields like
PENDING,CONFIRMED,FAILED. - Use notifications or webhooks to signal final state.
- Offer read-your-writes within a session when possible.
Monitoring Consistency Lag
Track lag metrics:
- Event processing delay.
- Read model staleness.
- Replication lag in multi-region stores.
Summary
Eventual consistency is not a single technique but a collection of patterns that trade immediacy for resilience. Outbox, sagas, and projection-based read models make eventual consistency practical and observable.