图片不能显示时,请查看原文::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]中描述了如下拜占庭问题:
一组拜占庭帝国的将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻,或部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中,每位将军都将自己投票进攻还是撤退的信息,通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票,和其他所有将军送来的信息,就可以知道共同的投票结果,而决定行动策略。
问题在于,将军中可能出现叛徒(坏将军),他们不仅可能向较为糟糕的策略投票,还可能选择性地发送投票信息。阻止好将军达成一致的形成策略。
摘自:维基百科:拜占庭将军问题,有删改。
很多人喜欢玩狼人杀,我也喜欢,但我玩的很菜,我用狼人杀跟拜占庭将军问题做个类比。
在狼人杀开局的时候,你是好人,并且不知道自己的队友是谁ÿ