--- title: "Event Sourcing" type: concept tags: [architecture, data-modeling, patterns] last_updated: 2026-04-22 --- ## 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 自动追踪+上下文保留)