协议 类似_分布式一致性协议三部曲-去中心化一致性协议PBFT源码分析

TenderMint PBFT协议交互流程

Tendermint是一个基于PBFT(实用拜占庭容错)的共识机制,是Cosmos跨链协议的核心模块。PBFT是一种去中心化的一致性协议,非常类似Paxos,推荐先看笔者这篇文章【分布式一致性协议三部曲-深入理解一致性协议】,由该文可知,PBFT和Paxos交互的对应关系如下,我们再次预习下。

Paxos交互图如下

e1ae0c79d3678e24539d5dd9c68b2344.png

PBFT是通过广播进行的,因而上述交互可以缩减

481e9f934de91436d72eb1bfd2e35ba4.png

进而可以简化为如下交互

7ab8d875f2dd646fc88ee9e03de50247.png

上述流程更名后就变为

8f5b70ff163e808ba966564b127b08a2.png

对应的详细交互图如下:

0fbe4501d7603a489c0a41bf0a59c2d5.png

接下来我们通过源码来分析这些交互流程

PBFT源码分析

Propose

节点生成新区块时发起Propose, Propose会广播proposeMessage消息, 该消息由Proposer发起。

c59436a3562fd77cc17df8a1371a6c43.png

Provote

收到propose且block信息已收集好,就会广播provote投票

  • 由于Proposer有本地的区块,一般会很快发出Prevote消息, 相当于proposer无需接收一个proposeMessage才发起prevote,其他节点是要接收到proposeMessage才会。
73fcf1d0db91d9c9ebb71668fc0e79fd.png
  • 其他节点,收到proposeMessage且收到完整区块信息后才会广播provote消息
4256baad5ac5aff23b8bb7fdcc5d59ec.png
9a39aa1a97084df06fb4a78a1f065ecd.png
245a645f595063038587e1e1832a884c.png

Precommit

  • 收到2/3 prevote会进入precommit

收到vote

bf7fe96c78363860b438f467a7d2f58e.png

​收到2/3票进入precommit

eab6eb2173175ca86fd9a76bb372afb1.png

​在precommit会添加lockedBlock

83ca01b136305ff187a6808762ee1029.png
  • 收到其他人的Precommit
01c5d1c76e6aa87e7099bd699183cf0b.png

Commit

  • 收到2/3 precommit会进入commit
9cd07ace3d91a16f7d0c685e8dce21e6.png
718e4c90bb628b84fc984682be490294.png

到了commit已经变为不可逆,但是理论上将commit广播给更多人可以加快区块同步, 但是并没有主动广播commit。pBFT里commit传播是通过区块同步实现的,进入commit的validator会propose新区块,然后其他节点收到它的propose后在provote之前会先同步到proposer的高度,这就相当于同步了commit信息。

lockedBlock的四种场景

lockedBlock是pBFT的一个核心逻辑,类似Paxos的Promise已有Accepted的value。

  • 当节点收到超过2/3的prevote消息, 节点会进入precommit状态并发出precommit消息, 该高度的区块被锁定(类似Paxos的Accepted状态)
2450f6f55c89ccef92654baf6549eefa.png
  • 已经有lockedBlock, 在收到下一轮的Propose时prevote时推荐这个locked区块,类似Paxos的promise阶段返回已Accepted的value
25afa44fa071b32c3270beff6314d822.png
  • 新的一轮Propose, 如果新的proposer收到过一个节点的Locked Block, 直接更新Round并使用该Locked Block, 不会提议新的Block。
b72d1fdcbb3fd8c1e95e05ea4037a760.png
  • 未收到2/3 prevote的节点在新一轮的新block上产生了新的2/3的provotes, 那没办法只有承认新round, 新block。
3eafdacc3eeae2c2e935537679a4a0f7.png

超时处理逻辑

b4615fd54af7fad099a18ae94050db36.png

分布式一致性协议算是一个比较复杂的系统,需要多思考讨论,欢迎文章下面留言讨论


系列文章:

【分布式一致性协议三部曲-深入理解一致性协议Paxos】

【分布式一致性协议三部曲-从paxos幽灵复现看Raft实现原理】

【分布式一致性协议三部曲-PBFT源码分析】

欢迎关注​「一点码客」

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值