共识算法学习路线
初次接触共识算法领域让我非常头疼,大量晦涩难懂的资料让我无从下手。为了让我的人生更容易些,我决定在这里记录一些在学习过程中搜集到的认为有用的资料。
换方向了,该博客不再更新
论文与算法
Paxos
Paxos 是 Lamport 大佬提出的行业奠基性的共识算法。然而由于其晦涩难懂令大量研究人员头疼。
Raft
RAFT 是斯坦福大学的学者为了降低共识算法的学习难度所设计的一种以易于理解为首要目标的共识算法。
- 论文:In Search of an Understandable Consensus Algorithm
- [译]寻找可理解的共识算法(Raft)| Ying ZHANG 的博客, #机翻+人工
- Raft 作者的博士毕业论文对 Raft 有更详细的解释,这里有 Raft 博士论文的翻译 | GitHub
HoneyBadgeBFT
首个实用异步拜占庭共识算法
Dumbo
Dumbo(小飞象算法)是中科院软件所在分析了 HoneyBadgeBFT 的性能瓶颈之后提出的改进算法。
该团队之后还提出了 Dumbo-MVBA(小飞象多值共识算法)。
- 论文:Dumbo: Faster Asynchronous BFT Protocols
- 论文:Dumbo-MVBA: Optimal Multi-Valued Validated Asynchronous Byzantine Agreement
- 首个实用异步共识算法来了 | 中国科学报
相关资源:
区块链研究方向哪里找?看数据库顶会顶刊!| 中科院软件所 RepChain
共识算法的相关概念
FLP 不可能定理
在异步网络中,不可能存在能够容忍节点故障的一致性算法,哪怕只有一个节点故障。并且这里并没有考虑拜占庭错误,而是假设网络非常稳定、所有的消息都能被正确传递、并且仅被传递一次,即便如此都不可能找到能容忍哪怕只有一个节点失效的一致性协议。
因此在设计异步拜占庭共识算法时要通过一些假设规避 FLP 不可能定理。常见的方法有加强对网络的假设和引入随机源。
CAP 定理
分布式系统无法同时确保一致性(Consistency)、可用性(Availability)和分区容忍性(Partition),设计中往往需要弱化对某个特性的需求。
MVBA
MVBA 是 "Multi-Value Byzantine Agreement" 的缩写,即多值拜占庭协议。所谓多值,是指与传统的二值拜占庭协议(只能在两个值之间做出选择,如 0 或 1)不同,MVBA 允许节点在多个可能的值之间达成一致。
网络假设
拜占庭共识协议的设计和实现很大程度上依赖于对底层网络的假设。主要的网络假设有:
部分同步网络模型(partially synchronous model)中的一致性协议可以容忍最多 1/3 的任意错误。这里的部分同步模型是指网络延迟是有界的,但是我们无法提前得知。这里的容错也包含了拜占庭类错误。
异步网络模型(asynchronous model)中的确定性协议无法容忍错误。这里的异步模型即是前文所说的网络延迟是无界的。该结论其实就是 FLP 不可能定理的含义,在完全异步网络中的确定性协议不能容忍哪怕只有一个节点的错误。
同步网络模型(synchronous model)可以达到惊人的 100% 容错,虽然对错误节点超过 1/2 时的节点行为有限制。这里的同步模型是指网络延迟一定是有界的,即小于某个已知的常数。
GST
GST(Global Stablization Time)全局稳定时间。是一个理论上的假设。在 GST 事件发生之后,系统中所有消息的传播延迟都不会超过某个已知上限 \(\Delta\)。这意味着网络中的通信延迟在这个事件之后变得可预测。另外,节点处理消息的时间也变得可预测,不再存在不确定性。这意味着节点能够在已知的时间内处理并响应接收到的消息。
异步(asynchronous)
网络只保证消息最终能到达,并没有到达时间的限制,这几乎涵盖所有网络情况。由此可见,异步 BFT 协议的鲁棒性最强,即使在极端网络条件下协议也不会丧失活性。
共识算法学习资料
juhani 的博客[荐]