1

在 Quorum 的RAFT 共识文档中提到

这种链扩展逻辑是确定性的:集群中的每个节点都会发生相同的行为,从而使区块链保持同步。

在leader发生变化的情况下,共识算法如何保证所有follower节点拥有相同的账本?是不是有一些follower节点先从前一个leader那里得到一个新块,而一些节点先从新leader那里得到一个新块?是否有任何同步机制来避免这种行为?

4

1 回答 1

1

跟随者节点有可能在领导层变化期间从前一个领导者那里获得一个块;但在新领导者提交区块之前,他们不会使用它,这可能不会发生。

raft 复制分两个阶段进行:准备阶段和提交阶段。两者都是通过带有水印的Append消息发生的。committed

新的筏领导者做的第一件事就是修复追随者的日志。也就是说,它会覆盖日志中未提交的部分,使其与自己的匹配,然后提交这些部分。

一旦一个块的转换数低于节点的承诺水印,它就可以用于业务;在此之前,节点必须假设该块可能不正确并且可以被删除。

我强烈建议在https://raft.github.io/上使用可视化:

  1. 关闭大多数节点,但保持领导者和另一个节点处于活动状态;
  2. 请求领导者的价值;
  3. 关闭leader,开启其他节点;
  4. 使您刚刚重新激活的节点之一超时(不是具有您请求的值的节点。)
  5. 走着瞧吧。
于 2018-05-11T14:40:52.723 回答