为什么PBFT需要3个阶段消息?

图片不能显示时,请查看原文::https://lessisbetter.site/2020/03/15/why-pbft-needs-3-phase-message/

前言

在面试的时候,很多同学的简历熟悉PBFT共识算法,在现场面试的时候,却只能说个主要逻辑,离完整的算法,还差十万八千里,相似从网络上看了一些文章,就算是熟悉了。当我问“为什么PBFT需要3个阶段消息?2个阶段行不行”时,还没有人能回答出来。

回答这个问题,还要从PBFT要解决的本质问题说起,所以我打算以这样一个思路,为大家回答问题:

  • PBFT与拜占庭问题
  • 拜占庭节点在网络中的行为
  • 什么是3阶段消息
  • 3阶段消息解决什么问题
  • 为什么不能只有前2个阶段
  • 论文使用的2个不变性
  • 为什么3个阶段可以达成一致性

PBFT与拜占庭问题

莱斯利·兰波特在其论文[1]中描述了如下拜占庭问题:

一组拜占庭帝国的将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻,或部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中,每位将军都将自己投票进攻还是撤退的信息,通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票,和其他所有将军送来的信息,就可以知道共同的投票结果,而决定行动策略。

问题在于,将军中可能出现叛徒(坏将军),他们不仅可能向较为糟糕的策略投票,还可能选择性地发送投票信息。阻止好将军达成一致的形成策略。

摘自:维基百科:拜占庭将军问题,有删改。

很多人喜欢玩狼人杀,我也喜欢,但我玩的很菜,我用狼人杀跟拜占庭将军问题做个类比。

在狼人杀开局的时候,你是好人,并且不知道自己的队友是谁ÿ

### Raft与PBFT共识算法的区别 #### Leader选举机制的不同 在Leader选举方面,Raft算法遵循的是速度优先原则,即哪个候选者最先获得多数票就成为新的领导者[^1]。相比之下,PBFT采用了一种更为有序的方式来进行视图变更(View Change),这意味着主节点的选择按照预设顺序依次轮替,当当前主节点失效时,下一个预定的备份节点接管其职责。 #### 共识达成方式上的差异 对于如何达成一致意见,在Raft中通过日志复制来实现一致性;具体而言就是由Leader负责收集客户端请求并将这些操作记录追加到自己的日志条目之后再向其他Follower发送AppendEntries RPC调用来同步副本状态机的日志并推进提交索引位置直至所有已知安全可提交的日志都被确认[^2]。 而在PBFT环境下,则运用拜占庭容错理论下的三阶段协议——Pre-Prepare, Prepare 及 Commit 来确保即使存在恶意行为体也能正确处理交易提案从而形成最终确定性的决策结果[^3]。 ```python # 示例代码展示两种算法的部分逻辑伪码对比 (仅作示意用途) # Raft Algorithm Simplified Pseudocode Snippet class Node_Raft: def become_leader(self): self.state = "leader" while True: send_heartbeats_to_followers() def on_receive_vote_request(): if condition_met_for_voting: vote_and_respond() # PBFT Algorithm Simplified Pseudocode Snippet class Replica_PBFT: phase = ["pre-preparing", "preparing", "committing"] def process_client_request(self,message): broadcast_pre_prepare_message(message) def handle_pre_prepare_msg(msg): validate_and_reply_with_prepare_acknowledgement(msg) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值