对PBFT算法的理解
PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识。虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么。现在整理下思路,写一篇关于PBFT的理解。 1. 前提假定 1.1 同步模型 在分布式系统中谈论共识,首先需要明确系统同步模型是 synchrony , asynchrony 还是 partial synchrony ? synchrony : 节点所发出的消息,在一个确定的时间内,肯定会到达目标节点; asynchrony : 节点所发出的消息,不能确定一定会到达目标节点; partial synchrony : 节点发出的消息,虽然会有延迟,但是最终会到达目标节点。 synchrony是十分理想的情况,如果假设分布式系统是一个同步系统,那么共识算法的设计可以简化很多,在同步系统中只要超时没收到消息就可以认为节点除了问题。asynchrony是更为贴近实际的模型,但是根据 FLP Impossibility 原理,在asynchrony假定下,共识算法不可能同时满足 safety 和 liveness 。为了设计能够符合实际场景的共识算法,目前的BFT类共识算法多是基于 partial synchrony 假定,这在PBFT论文中被称为"weak synchrony"。