Quorum 中的 RAFT 共识算法如何保证确定性的链扩展?
How does RAFT consensus algorithm in Quorum ensure deterministic chain extension?
在 Quorum 的 RAFT consensus docs 中提到
This chain extension logic is deterministic: the same exact behavior
will occur on every single node in the cluster, keeping the blockchain
in sync.
在leader发生变更的情况下,共识算法如何保证所有follower节点拥有相同的账本?会不会有一些follower节点先从前一个leader那里得到一个新块,一些节点先从新leader那里得到一个新块?是否有任何同步机制可以避免这种行为?
在领导层更迭期间,跟随者节点有可能从前任领导者那里获得区块;但他们不会使用它,直到新领导者提交该块,这可能不会发生。
raft 复制分两个阶段进行:准备阶段和提交阶段。两者都是通过 Append
消息发生的,该消息具有 committed
水印。
新 raft leader 所做的第一件事就是修复 followers 的日志。也就是说,它会覆盖日志中未提交的部分以匹配自己的部分,然后提交这些部分。
一旦一个区块的转换数低于节点的承诺水印,它就可以用于商业;在此之前,节点必须假定该块可能不正确并且可以被删除。
我强烈建议在 https://raft.github.io/ 上玩可视化:
- 关闭大部分节点,但保持领导者和另一个节点处于活动状态;
- 请求领导者的价值;
- 关闭leader,开启其他节点;
- 超时您刚刚重新激活的节点之一(不是具有您请求的值的节点。)
- 看看会发生什么。
在 Quorum 的 RAFT consensus docs 中提到
This chain extension logic is deterministic: the same exact behavior will occur on every single node in the cluster, keeping the blockchain in sync.
在leader发生变更的情况下,共识算法如何保证所有follower节点拥有相同的账本?会不会有一些follower节点先从前一个leader那里得到一个新块,一些节点先从新leader那里得到一个新块?是否有任何同步机制可以避免这种行为?
在领导层更迭期间,跟随者节点有可能从前任领导者那里获得区块;但他们不会使用它,直到新领导者提交该块,这可能不会发生。
raft 复制分两个阶段进行:准备阶段和提交阶段。两者都是通过 Append
消息发生的,该消息具有 committed
水印。
新 raft leader 所做的第一件事就是修复 followers 的日志。也就是说,它会覆盖日志中未提交的部分以匹配自己的部分,然后提交这些部分。
一旦一个区块的转换数低于节点的承诺水印,它就可以用于商业;在此之前,节点必须假定该块可能不正确并且可以被删除。
我强烈建议在 https://raft.github.io/ 上玩可视化:
- 关闭大部分节点,但保持领导者和另一个节点处于活动状态;
- 请求领导者的价值;
- 关闭leader,开启其他节点;
- 超时您刚刚重新激活的节点之一(不是具有您请求的值的节点。)
- 看看会发生什么。