(1) 什么是PBFT算法?
PBFT是BFT类中首个工作在弱同步网络下的实用算法,该算法是基于消息传递的一致性算法,在弱同步网络下,算法经过三阶段(两次投票)可以达成一致性,算法复杂度为O(N^2),在无法达成一致性时,重复执行这些阶段,直至超时。PBFT算法由一致性协议,检查点协议,视图更换协议组成。PBFT是很多区块链项目【Tendermint,hashgraph等】共识算法的基础。
其他实用的BFT算法
(2) 大家脱口而出的公式N=3f+1是怎么得来的?
记系统中拜占庭节点数为f,记N为系统中总的节点数,其中non-faulty节点的数量需满足:#(non-faulty)=N-f-f>f,这个不等式的含义是正常运作【即遵守协议步骤,及时响应相关消息】的节点数需要大于拜占庭节点数。不等式左边的2个f分别表示f个faulty节点【不响应1】和f个non-faulty节点【不响应2】。显然,N>3f。因此N的最小取值是N_min=3f+1。
不响应1:faulty节点不响应很正常,有可能宕机或存心不响应
f个non-faulty不响应可能是1)pre-prepare阶段没有收到primary的消息【可能是faulty节点延迟消息,也可能是消息丢失,…】;2)prepared阶段没有收到(至少)2f+1个一致的投票(其中包括自己的投票)。
##(3) 系统中总的节点数最好满足N=3f+1。
因为多余的节点并没有提升容错能力,反倒是因为需要交换更多的消息降低了性能。因此,建议在拜占庭容错的场景