PBFT拜占庭容错算法
PBFT是一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。
假设节点总数为N,f为拜赞庭错误节点,N满足:N=3f+1。
- 当节点发现leader作恶时,通过算法选举其他的replica为leader。
- leader通过pre-prepare 消息把它选择的 value广播给其他replica节点,其他的replica节点如果接受则发送 prepare,如果失败则不发送。
- 一旦2f个节点接受prepare消息,则节点发送commit消息。
- 当2f+1个节点接受commit消息后,代表该value值被确定如下图表示了4个节点,0为leader,同时节点3为fault节点,该节点不响应和发出任何消息。最终节点状态达到commited时,表示该轮共识成功达成。
这里主要说明一下为什么需要3F+1个节点来保证算法的安全性,这里有N个节点,假设有F个拜占庭节点,则消息需要从N-F个节点中判断,如果由于网络延迟等原因,诚实节点的消息还未到达,极端情况下N-F中有F个拜占庭节点,如果要保证消息的正确性,至少需要诚实消息大于F则有N-2F>F,则至少需要保证N=3F+1。