引言
拜占庭将军问题在分布式领域是一个所有人都耳熟能详的问题,在初次学习分布式共识算法,比如Raft的时候,我们会看到容忍非拜占庭错误这样的句子,所以Raft可以抵御N>2f+1时f个节点的错误。那么什么是拜占庭错误,如何可以避免拜占庭错误呢?这就需要我们再深入学习了。拜占庭容错算法的完善其实是一个逐步发展的过程,在Lamport 1982年提出拜占庭将军问题时其实就已经给出了两种解法OM与SM,但是太过注重理论,使得算法虽可以解决问题,但时间复杂度太高,即O(n^(f+1)),已经达到了指数级别,基本不可能用于实践。后来在1999年Castro和Liskov提出了PBFT,一种实用的拜占庭容错算法,使得时间复杂度降低到了 O(n^2),成了一种现实世界可用的算法。
这个主题涉及到两篇论文,即Leslie Lamport的《The Byzantine Generals Problem 》以及Miguel Castro (卡斯特罗)和 Barbara Liskov (利斯科夫)在1999年发表的论文《 Practical Byzantine Fault Tolerance 》,以我现在水平确实很难读懂全部的内容,第一篇的非全连接下情况下的算法优化没有看懂,第二篇看完了第四节后面就没有再看了,第一是因为英文不好,汉语翻译太拉跨,第二是确实是难懂,感觉就算看懂了也很快会忘,遂也没有继续钻研,等到后面真的会用的时候在仔细研究,现在搞清楚最基础的,满足一点点的求知欲即可。
2020年8月22日:
不想写了,原因有二:第一是因为没有动力,两篇论文中我能看懂的部分已经有人做了记录,且非常详细,且我自己并没有悟到别人没想到的东西,所以再写一遍无论从对他人的帮助还是我自己后面再次查看都意义不大,所以就把我学习过程中找到的好的资料贡献出来吧,对于拜占庭将军问题[1][2][3][4]中基本把论文的问题描述和证明重写了一遍,是个不错的资料。后面的引用都是在描述PBFT,但是都有一个共同特点,就是都只是描述到view change为止,论文后面论文没有再提及,看来不止我一个没看懂啊。。当然后面的部分也更加细化,不是有特别的需求的话确实也可以不看,前四节就已经简单的描述了这个算法。第二个原因就是最近太懒了,也不知道是否是隔了半年马上要再次回到校园从而有些莫名的兴奋还是什么,最近半周都非常懒散,希望能尽快恢复过来吧。
参考:
- 博文《拜占庭将军问题(一)—— 引言与结论》
- 博文《拜占庭将军问题(二)——口头协议》
- 博文《拜占庭将军问题(三)——书面协议》
- 博文《拜占庭将军问题(四)——非全连接下的算法演变》
- 博文《PBFT读书笔记》
- 博文《pBFT论文笔记》
- 博文《深入浅出PBFT算法原理》
- 博文《区块链核心技术:拜占庭共识算法之PBFT》
- 博文《共识算法系列:PBFT算法关键点综述、优缺点总结》
- 博文《美图技术团队:共识算法系列之一:raft和pbft算法》