【交易系统系列33】从Raft到Kafka:解构交易所核心系统的一致性与数据持久化之道
在构建金融交易所这类要求严苛的系统时,我们工程师总是在进行一场微妙的平衡艺术。一方面,我们需要系统快如闪电,以捕捉瞬息万变的市场机会;另一方面,我们又必须确保每一笔交易、每一分钱都准确无误,系统坚如磐石。这种对“快”与“准”的极致追求,最终都归结于两个核心的架构决策:我们选择何种一致性模型? 以及 我们应将数据真相的源头(Source of Truth)托付给数据库还是日志系统?
今天,我想和大家深入探讨这两个问题。这不仅仅是技术选型,更是对交易系统本质的理解。
一、 一致性的“光谱”:从铁序到最终收敛
在分布式系统中,“一致性”描述了多个数据副本对外呈现的状态。在交易所的场景里,不同的业务对一致性的要求天差地别,形成了一个从“强”到“弱”的光谱。
1. 强一致性 (Strong Consistency):不容丝毫含糊的“铁律”
强一致性保证一旦写入成功,任何后续的读取操作都将获取到最新的值。所有数据副本在任何时刻都像一个单点一样,对外呈现完全相同的状态。
- 核心算法:这类一致性通常依赖于共识算法,如 Paxos 或其更易于理解的继任者 Raft。这些算法通过“少数服从多数”的投票机制,确保所有节点对操作的顺序达成唯一共识。
- 应用场景:
- 撮合引擎订单簿:这是强一致性最典型的应用场景。订单簿的状态必须是全局唯一的、顺序确定的。如果出现不一致,比如同一笔订单在两个节点上被不同的对手方撮合,整个市场就会陷入混乱,这是绝对无法容忍的。
- 资金账本与账户系统:用户的资金安全是最高优先级。任何入金、出金、资金划转操作,都必须在强一致性保障