← 返回索引 · 2026-02-15 · 0009

基于事件溯源的撮合引擎状态重建与容灾设计(摘要)

原文首发于 TechNova: 基于事件溯源的撮合引擎状态重建与容灾设计

承接页(解决方案):https://technologynova.org/solution/

TL;DR

1. 问题本质:性能要内存,可靠性要持久化

交易系统的撮合核心之所以快,是因为它把订单簿(Order Book)当成内存数据结构来操作。 但这也意味着:一旦进程崩溃、机器断电、甚至一次计划内重启,订单簿瞬间丢失。

直觉解法是“每次状态变更都同步写数据库”,但这会把瓶颈从撮合逻辑转移到磁盘 I/O、事务与锁竞争上,吞吐从百万级掉到千级并不稀奇。 所以正确方向通常是:撮合仍在内存跑,但持久化要做到不拖慢撮合

2. 核心思路:事件溯源(Event Sourcing)= 只存“发生过什么”

把状态“还原”为事件重放的结果

这套方法成立的关键前提是确定性:同一个初始状态 + 同一条严格有序的事件流 → 必然得到同一个最终订单簿。 也因此,“事件顺序”比事件内容更敏感。

3. 关键要点/坑:WAL 与全局序列号,缺一不可

4. 快照(Snapshot):让恢复时间从“重放全部”降到“重放增量”

只有事件日志会遇到一个必然问题:日志无限增长,重放耗时越来越长。 快照的作用是定期把“某一时刻的完整订单簿状态”落盘(或写对象存储),恢复时:

工程上需要重点关注:快照频率(RTO vs 运行开销)、快照一致性(不要拿到半更新状态)、以及快照存储介质的可靠性(本地 SSD vs 对象存储)。

5. 适用场景:什么时候值得上“事件溯源 + 快照/重放”


承接页 CTA

“事件溯源 + 快照/重放”能解决撮合引擎的可恢复性,但真正落地还会牵扯到序列器高可用、日志系统选型、风控/清算下游一致性、以及故障切换演练。 如果你在做交易系统整体规划/重构,可以从解决方案页快速对齐模块与演进路径: https://technologynova.org/solution/

原文链接:
https://technologynova.org/…/