在 Quorum 的RAFT 共识文档中提到
这种链扩展逻辑是确定性的:集群中的每个节点都会发生相同的行为,从而使区块链保持同步。
在leader发生变化的情况下,共识算法如何保证所有follower节点拥有相同的账本?是不是有一些follower节点先从前一个leader那里得到一个新块,而一些节点先从新leader那里得到一个新块?是否有任何同步机制来避免这种行为?
在 Quorum 的RAFT 共识文档中提到
这种链扩展逻辑是确定性的:集群中的每个节点都会发生相同的行为,从而使区块链保持同步。
在leader发生变化的情况下,共识算法如何保证所有follower节点拥有相同的账本?是不是有一些follower节点先从前一个leader那里得到一个新块,而一些节点先从新leader那里得到一个新块?是否有任何同步机制来避免这种行为?
跟随者节点有可能在领导层变化期间从前一个领导者那里获得一个块;但在新领导者提交区块之前,他们不会使用它,这可能不会发生。
raft 复制分两个阶段进行:准备阶段和提交阶段。两者都是通过带有水印的Append
消息发生的。committed
新的筏领导者做的第一件事就是修复追随者的日志。也就是说,它会覆盖日志中未提交的部分,使其与自己的匹配,然后提交这些部分。
一旦一个块的转换数低于节点的承诺水印,它就可以用于业务;在此之前,节点必须假设该块可能不正确并且可以被删除。
我强烈建议在https://raft.github.io/上使用可视化: