52 lines
2.4 KiB
Markdown
52 lines
2.4 KiB
Markdown
---
|
||
title: "Event Sourcing"
|
||
type: concept
|
||
tags: [architecture, data-modeling, patterns]
|
||
sources: [project-state-management]
|
||
last_updated: 2026-04-27
|
||
---
|
||
|
||
## Definition
|
||
|
||
事件溯源(Event Sourcing)是一种软件架构模式——不直接存储数据的当前状态,而是将所有状态变更作为**不可变事件序列**持久化,通过重放事件来重建任意时间点的状态。源自 Martin Fowler 的经典模式。
|
||
|
||
## Core Principles
|
||
|
||
1. **唯一真实来源(Single Source of Truth)**:事件日志是唯一真实来源,当前状态由事件推导得出,而非直接存储
|
||
2. **不可变性(Immutability)**:事件一旦写入,永不修改或删除,只能追加新事件
|
||
3. **全历史可追溯(Audit Trail)**:天然具备完整审计日志,可回溯任何历史变更的"为什么"
|
||
4. **时间旅行调试**:任意时刻的状态可精确重建,便于复现 BUG 和分析决策上下文
|
||
|
||
## Event Sourcing vs Traditional State Storage
|
||
|
||
| 维度 | 传统状态存储 | 事件溯源 |
|
||
|------|------------|---------|
|
||
| 存储内容 | 当前状态快照 | 状态变更事件序列 |
|
||
| 历史保留 | 通常不保留或有限保留 | 完整保留(无上限)|
|
||
| 变更原因 | 通常不记录 | 完整记录每次变更的原因 |
|
||
| 回滚能力 | 依赖备份 | 通过反向事件补偿天然支持 |
|
||
| 审计合规 | 需额外构建 | 内置,无需额外开发 |
|
||
|
||
## Key Event Types
|
||
|
||
- **Progress**:任务向前推进的里程碑事件
|
||
- **Blocker**:阻塞/障碍事件,通常触发状态 → "blocked"
|
||
- **Decision**:关键决策事件,记录决策理由和背景
|
||
- **Pivot**:转向/重大调整事件,记录原因和备选方案
|
||
- **Completion**:完成事件,触发状态 → "completed"
|
||
|
||
## Applications in Project Management
|
||
|
||
[[Project State Management]] 是事件溯源在个人/团队项目管理中的具体应用:
|
||
|
||
- 用自然语言对话替代手动拖拽看板卡片
|
||
- 每句话("完成了X"/"被Y阻塞")作为独立事件持久化
|
||
- 当前状态由事件序列自动推导,无需手动维护
|
||
- 查询"项目为什么这样"等同于"重放这个项目的所有事件"
|
||
|
||
## Connections
|
||
|
||
- [[Project State Management]] ← uses ← **Event Sourcing**
|
||
- [[Centralized Logging]] ← related_to ← **Event Sourcing**(集中日志可视为事件溯源的一种实现)
|
||
- [[Kanban]] ← alternative_to ← **Event Sourcing**(冲突:可视化协作 vs 自动追踪+上下文保留)
|