共识算法入门

【摘要】 共识算法入门之raft和pbft

raft算法

算法动画演示:http://thesecretlivesofdata.com/raft/

节点的三种角色:跟随者(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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值