系统架构设计师 · 高频练习

Event Sourcing 中的快照能否替代快照之后的事件日志?

高级 单选题 第 943 题 中等 系统架构设计师Event SourcingSnapshot事件日志状态重建
题目

某 Event Sourcing 聚合已经积累数十万条事件,团队准备引入快照以缩短加载时间。较合理的做法是()。

A 创建快照后立即删除全部事件,快照永远不会失效
B 只保存最后一次命令,不再记录已发生事件
C 让客户端自行猜测快照之后发生了哪些变化
D 从最近有效快照恢复基础状态,再按顺序回放其后的事件
题目类型:原创高频练习题 用途:用于帮助理解系统架构设计师相关考点和答案解析,不等同于官方真题。
正确答案
D
答案解析

事件溯源快照是性能优化点,保存某个事件位置上的聚合状态。恢复时先载入快照,再回放快照之后的事件,避免每次从第一条事件开始。

选项分析

A

错误。快照可能损坏、过期或与模型版本不兼容,不能无条件替代全部事件。

B

错误。命令表示意图,事件表示已经发生的事实,两者不能混为一谈。

C

错误。服务端应通过有序事件重建状态,不能让客户端猜测。

D

正确。快照提供起点,后续事件补齐到当前状态。

本题为什么容易错

“快照能加速”常被误解成“快照就是最终数据”。在事件溯源中,快照通常可以重建,事件才承担事实记录。

先看结论

简短答案

Event Sourcing 中的快照能否替代快照之后的事件日志,正确答案是 D(从最近有效快照恢复基础状态,再按顺序回放其后的事件)。事件溯源快照是性能优化点,保存某个事件位置上的聚合状态。恢复时先载入快照,再回放快照之后的事件,避免每次从第一条事件开始。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
创建快照后立即删除全部事件,快照永远不会失效 本题干扰项 错误。快照可能损坏、过期或与模型版本不兼容,不能无条件替代全部事件。 看到该词不要急着选,先判断是否真正解决题干问题
只保存最后一次命令,不再记录已发生事件 本题干扰项 错误。命令表示意图,事件表示已经发生的事实,两者不能混为一谈。 看到该词不要急着选,先判断是否真正解决题干问题
让客户端自行猜测快照之后发生了哪些变化 本题干扰项 错误。服务端应通过有序事件重建状态,不能让客户端猜测。 看到该词不要急着选,先判断是否真正解决题干问题
从最近有效快照恢复基础状态,再按顺序回放其后的事件 本题正确答案 正确。快照提供起点,后续事件补齐到当前状态。 看到题干核心场景时优先联想到它
本题易混淆选项怎么区分
  • 创建快照后立即删除全部事件,快照永远不会失效:错误。快照可能损坏、过期或与模型版本不兼容,不能无条件替代全部事件。
  • 只保存最后一次命令,不再记录已发生事件:错误。命令表示意图,事件表示已经发生的事实,两者不能混为一谈。
  • 让客户端自行猜测快照之后发生了哪些变化:错误。服务端应通过有序事件重建状态,不能让客户端猜测。
复习

知识点详解

Event Sourcing 把状态变化记录为有序事件,通过回放得到当前聚合状态。快照在某个事件版本处保存派生状态,恢复时减少历史回放开销。可靠实现需要记录快照版本、事件序号、模型版本与校验信息,并保留处理快照失败的回退路径。事件是否归档或删除涉及审计、法规和重建能力,不能仅因生成快照就草率清理。

备考速记

快照给起点,事件给事实;载入快照后还要接着回放。

Event Sourcing 在状态重建场景中的作用

Event Sourcing在本题中的核心价值,是解决“某 Event Sourcing 聚合已经积累数十万条事件,团队准备引入快照以缩短加载时间。较合理的做法是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 事件数量过大导致聚合加载慢,选择快照优化。
  • 判断快照、事件和命令在系统中的不同角色。
Event Sourcing 在系统架构设计师软考中的考法

软考选择题通常不会只考概念定义,还会把Event Sourcing放到状态重建场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

把事件日志想成完整账本,快照像做到某一天的余额结转。查今天余额时,可以先拿结转余额,再处理之后的收支,不必从开户第一天重算;但不能因为有一张余额截图,就把后面的交易记录都丢掉。快照还要带事件版本或序号,才能知道从哪里继续回放。

考点定位

快照是派生状态,不是新的事实来源。它能减少回放量,但快照位置之后的事件仍然决定当前状态。

易错提醒

  • 快照没有记录对应的事件序号,恢复时重复或漏放事件。
  • 聚合模型升级后仍直接反序列化旧快照,没有版本迁移。
  • 在快照和新事件写入之间缺少一致性策略。

备考提示

  • 用银行流水和余额结转解释事件与快照。
  • 把 Event Sourcing、CQRS 和普通审计日志分开复习,它们可以组合但不等同。

你可能还想了解

  • 事件溯源为什么需要快照?
  • 生成快照后能否删除历史事件?
  • 快照应该记录哪个事件版本?

本文小结

事件溯源快照保存某个事件位置的派生状态,用于加速重建。恢复时先载入有效快照,再按顺序回放之后的事件,快照不能随意替代事件事实。