Appearance
Day 21 - 事件溯源(Event Sourcing)
📖 今日目标
- 理解事件溯源(Event Sourcing)的概念
- 掌握事件溯源的优缺点
- 学习事件溯源的实现方式
核心概念
什么是事件溯源?
事件溯源(Event Sourcing) 是通过存储一系列领域事件来记录聚合状态,而不是直接存储当前状态。
传统模式:保存当前状态
事件溯源:保存导致状态的事件序列关键要点
1. 事件溯源的优势
- 完整审计:所有状态变更都有记录
- 时间旅行:可以重建任意时间点的状态
- 更好的并发:基于事件而非直接修改
- 易于调试:重放事件重现问题
2. 实现示例
java
// 存储事件而非状态
public class Order {
private List<OrderEvent> events = new ArrayList<>();
public void place() {
events.add(new OrderPlacedEvent(...));
}
public OrderState getState() {
return OrderState.replay(events);
}
}3. 事件存储
java
public interface EventStore {
void append(String aggregateId, DomainEvent event);
List<DomainEvent> getEvents(String aggregateId);
}面试考点
问题:事件溯源的缺点是什么?
答案:
- 复杂性:需要处理事件版本升级
- 查询困难:需要重建状态才能查询
- 存储量大:事件不断累积
- 最终一致性:实时状态需要额外处理
适用场景:需要审计、高并发、复杂业务场景。
实践思考
🎯 思考题:
在订单系统中使用事件溯源,列出需要存储的关键事件。
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-20 | 战略设计 + 战术 + 架构 | ✅ |
| 21 | 事件溯源(Event Sourcing) | ✅ |
| 22 | 消息队列与DDD | ⬜ |
| ... | ... | ... |
| 30 | 复习与总结 | ⬜ |
