Files
nexus/wiki/concepts/EventSourcing.md
2026-04-27 12:03:03 +08:00

52 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 自动追踪+上下文保留)