知识卡片
复制状态机为何复制日志而非状态
内容
多机同步应持久化”导致状态变化的事件流(日志)”而非”状态本身”——这是Paxos、Raft的共同基石:一样的初始状态+一样输入序列=一样最终状态。好处有二:日志只有追加一种操作,持久化比对更简单;日志是一维线性序列天然适合多节点比对,而状态可能是复杂结构直接比对成本高。发散:Redo Log、消息队列持久化、区块链账本都选择记录过程而非结果。
参考来源
- 位置:第11章《多副本一致性》11.2.2节「复制状态机」(源文件:_epub-src/text/part0056.html)
- 结论依据:原文明确说明状态机原理是'一样的初始状态+一样的输入事件=一样的最终状态',因此只要保证多个Node的日志流一样即可保证状态一致,节点宕机重启只需重放日志流即可恢复,复制日志等于复制任何数据,直接支持卡片论述。
- 原始内容:"状态机的原理是:一样的初始状态+一样的输入事件=一样的最终状态。因此,要保证多个Node的状态完全一致,只要保证多个Node的日志流是一样的即可!即使这个Node宕机,只需重启和重放日志流,就能恢复之前的状态……复制日志=复制任何数据(复制任何状态机)。"