外观主题
阅读语言

事件溯源 Event Sourcing —— 不存状态存事件,回放即状态

软件 本站软件 4小时前
https://yxp.hk/p/WoFPV1

📦 开源仓库:learn_event_sourcing · 纯 Python 标准库 · 学习演示项目

传统数据库总是存「当前状态」,改一次盖一次,历史就没了。事件溯源(Event Sourcing)反过来:只追加事件,从不 UPDATE;当前状态只是把事件从头回放一遍的产物。于是审计、时间旅行、重建任意历史时刻——全都免费获得。

核心思路

  命令:  创建订单  →  扣余额  →  扣库存
              │           │          │
              ▼           ▼          ▼
  事件日志:OrderCreated  BalanceDeducted  StockDeducted (只追加)
              │           │          │
              └───────────┴──────────┘
                          ▼
              当前状态 = 回放全部事件
  • 永远不 UPDATE,只 APPEND
  • 状态是派生出来的——随时可以重放日志重建
  • 读模型(如按用户的订单汇总)= 回放全部事件流聚合成任何你想要的形状

为什么值得学

  • 审计 / 时间旅行:每个变更都是事件,任何时刻都能精确重建
  • 不丢更新:事件是不可变事实,没有「盖写」这回事
  • 读模型灵活:同一份日志可以回放出 N 种视图
  • 天然配对 outbox / 事件总线:日志里的事件顺路就能发布下游

演示场景

  1. 生命周期即事件:创建订单、扣余额、扣库存,状态由回放得出
  2. 取消订单:追加 OrderCancelled,状态变 CANCELLED
  3. 从日志重建:新实例回放事件得到完全相同的状态
  4. 读模型:回放全部事件流,构建按用户的订单汇总

运行

python run_all.py

纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_event_sourcing,欢迎 Star 与提 Issue。