—— Part4 拜占庭容错算法 ——
▲PBFT
实用性拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT),是一种在信道可靠的情况下解决拜占庭将军问题的实用方法。拜占庭将军问题最早由Leslie Lamport等人在1982年发表的论文[1]提出,论文中证明了在将军总数n大于3f,背叛者为f或者更少时,忠诚的将军可以达成命令上的一致,即3f+1<=n,算法复杂度为O(n^f+1)。随后Miguel Castro和Barbara Liskov在1999年发表的论文[2]中首次提出PBFT算法,该算法容错数量也满足3f+1<=n,算法复杂度降低到了O(n²)。
下面介绍PBFT算法的核心共识流程[3],如图4所示。
图4. 三阶段共识
在请求request阶段,客户端发起请求,主节点收到客户端的请求后,将触发核心共识流程。算法的核心共识流程分为三个阶段:pre-prepare阶段,prepare阶段,commit阶段。其中,节点在prepare阶段和commit阶段各进行了一轮投票,分别对消息的合法性与待执行进行了确认。图中,c代表客户端,0、1、2、3代表节点的编号,在视图为0(view=0)的情况下,节点0是主节点,节点1、2、3为从节点。打叉的3号代表拜占庭节点,这里表现的恶意行为就是对其它节点的请求无响应。
pre-prepare阶段