关于raft:共识算法入门

33次阅读

共计 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

算法根本流程:

  1. 客户端发送申请给主节点
  2. 主节点播送申请给其余节点,节点执行 pbft 算法三阶段共识流程
  3. 节点解决完三阶段流程后,返回音讯给客户端
  4. 客户端收到来自 f + 1 个节点的雷同音讯后,代表共识曾经实现

pbft 算法外围三阶段流程:

v:视图编号

d:客户端音讯摘要

m:音讯内容

n:在 [h,H] 区间之间,申请编号

i:节点编号

<PRE-PREPARE,v,n,d> 进行主节点签名

  1. Pre-prepare 阶段:节点收到 pre-prepare 音讯后,会有两种抉择,一种是承受,一种是不承受。什么时候才不承受主节点发来的 pre-prepare 音讯呢?一种典型的状况就是如果一个节点承受到了一条 pre-pre 音讯,音讯里的 v 和 n 在之前收到里的音讯是已经呈现过的,然而 d 和 m 却和之前的音讯不统一,或者申请编号不在高下水位之间(高下水位的概念在下文会进行解释),这时候就会拒绝请求。回绝的逻辑就是主节点不会发送两条具备雷同的 v 和 n,但 d 和 m 却不同的音讯。
  2. Prepare 阶段:节点批准申请后会向其它节点发送 prepare 音讯。这里要留神一点,同一时刻不是只有一个节点在进行这个过程,可能有 n 个节点也在进行这个过程。因而节点是有可能收到其它节点发送的 prepare 音讯的。在肯定工夫范畴内,如果收到超过 2f 个不同节点的 prepare 音讯,就代表 prepare 阶段曾经实现。
  3. Commit 阶段:于是进入 commit 阶段。向其它节点播送 commit 音讯,同理,这个过程可能是有 n 个节点也在进行的。因而可能会收到其它节点发过来的 commit 音讯,当收到 2f+1 个 commit 音讯后(包含本人),代表大多数节点曾经进入 commit 阶段,这一阶段曾经达成共识,于是节点就会执行申请,写入数据。
正文完
 0