共计 968 个字符,预计需要花费 3 分钟才能阅读完成。
【摘要】共识算法入门之 raft 和 pbft
aft 算法
算法动画演示:http://thesecretlivesofdata.c…
节点的三种角色:跟随者(follower)、候选人(candidate)、领导者(leader)
最大容错故障节点:(N – 1)/ 2
选举超时(election timeout):一个节点在成为候选节点(candidate)之前期待的工夫,150ms 到 300ms 之间的随机值
心跳超时(heartbeat timeout):心跳超时
\
pbft 算法
最大容错节点数:3f + 1 <= N
算法根本流程:
- 客户端发送申请给主节点
- 主节点播送申请给其余节点,节点执行 pbft 算法三阶段共识流程
- 节点解决完三阶段流程后,返回音讯给客户端
- 客户端收到来自 f + 1 个节点的雷同音讯后,代表共识曾经实现
pbft 算法外围三阶段流程:
v:视图编号
d:客户端音讯摘要
m:音讯内容
n:在 [h,H] 区间之间,申请编号
i:节点编号
<PRE-PREPARE,v,n,d> 进行主节点签名
- Pre-prepare 阶段:节点收到 pre-prepare 音讯后,会有两种抉择,一种是承受,一种是不承受。什么时候才不承受主节点发来的 pre-prepare 音讯呢?一种典型的状况就是如果一个节点承受到了一条 pre-pre 音讯,音讯里的 v 和 n 在之前收到里的音讯是已经呈现过的,然而 d 和 m 却和之前的音讯不统一,或者申请编号不在高下水位之间(高下水位的概念在下文会进行解释),这时候就会拒绝请求。回绝的逻辑就是主节点不会发送两条具备雷同的 v 和 n,但 d 和 m 却不同的音讯。
- Prepare 阶段:节点批准申请后会向其它节点发送 prepare 音讯。这里要留神一点,同一时刻不是只有一个节点在进行这个过程,可能有 n 个节点也在进行这个过程。因而节点是有可能收到其它节点发送的 prepare 音讯的。在肯定工夫范畴内,如果收到超过 2f 个不同节点的 prepare 音讯,就代表 prepare 阶段曾经实现。
- Commit 阶段:于是进入 commit 阶段。向其它节点播送 commit 音讯,同理,这个过程可能是有 n 个节点也在进行的。因而可能会收到其它节点发过来的 commit 音讯,当收到 2f+1 个 commit 音讯后(包含本人),代表大多数节点曾经进入 commit 阶段,这一阶段曾经达成共识,于是节点就会执行申请,写入数据。
正文完