A challenging work in a distributed computing system is how to solve the Byzantine Generals’ problem and build a Byzantine Fault Tolerance system that namely has the ability to tolerate a class of Byzantine Faliures. Unfortunately, the Byzantine Generals’ Problem is a generalized version of the Two Generals’ Problem that has been proved to be unsolvable. However, if it is subjected to that at any time the number of Byzantine nodes or malicious nodes is less than 1/4 of the total compute computer, the Byzantine Generals’ Problem could be partly solved then, and the famous Paxos protocol in this case is expected to be a classical solution to this problem.
Q1: 什么是拜占庭将军问题?
假设一个分布式的,被分隔的将军群体中,就是否开战问题要做出一个决策,原则上是采取少数服从多数。那么,问题一个接一个地出现了:如果将军背叛怎么办?如果将军死亡怎么办?如果将军口令丢失怎么办?等等意外情况导致整个将军群体无法做出一个相对可靠的决策——这就是拜占庭将军问题。没错,抱怨完了,问题该想办法解决了!
Q2:怎么解决拜占庭将军问题?
只有在某些约束条件成立的条件下,拜占庭将军问题才可以得到比较有效的解决,即是否开战的决策可以可靠地,并且有效地收敛!其中,这些条件包括:将军中叛徒的数目少于将军总数的1/4,其他3/4将军是绝对忠诚的;忠诚的将军节点必须绝对地忠诚,包括精神的忠诚:便于有效地给出决策;以及行为上的忠诚:便于接收命令和广播命令,等约束条件。
Q3:约束条件满足的前提下,各个将军节点怎么获取当前最新的,有效的,共同的决策结果?
在拜占庭将军问题有解的前提下,一个最经典的,用于求取当前的,有效的,收敛解的方法就是Paxos协议(作者是大名鼎鼎的Leslie Lamport)。
Q4:Paxos协议是什么鬼?
最基本版本的Paxos协议的核心实现可以分为两个部分:prepare stage 和 accept stage。整个协议的核心思想就是:谁有最新的proposal谁就赶紧propose;在当前有效网络范围内获取当前最新的proposal;当前最新的proposal作用于当前有效的网络范围——通过当前范围下的当下最优解来逼近范围外的未知最优解,最优解可以通过鸽巢原理证明。操作过程如下:
prepare阶段:
1)某提议者向全网广播提议:proposal(内容,当前提议认可度)。
2)当前网络中其他有效节点验证该提议中的“内容”,验证通过则
该提议的当前认可度人数加一。直到该提议的认可度最高,然
后该议案进入第二阶段。
accept阶段:
3)处理当前有效网络范围内,当前时间范围内,认可度最高的那
个提案:将该提案进行全网广播,一旦网络中的节点验证该提
案依然是当前认可度最高的提案,则永久更新到分布式的数据
库中;否则,该提案退回到 prepare 阶段。
好的,上面都是编程逻辑,下面再用形象的图形操作演示一下Paxos协议的操作过程:
t=0时刻:P1提议并广播方案X。
t=2时刻:方案X获得多数人的认可,成为当前优先级最高的方案,进入accept
第二阶段。
t=3时刻:方案Y无法获得P1,P2,P3的认可,没法获得同样高的优先级和方案X
相提并论。方案X在t=3时刻仍然是优先级最高的方案。全网广播方案
X,P4也验证了X确实优于Y,也认可了P1,P2,P3的拒绝态度;反之
如果P4拒绝接受X方案,说明Y方案至少优于或者等于X方案——这就
陷入死循环了么?不会!因为这种情况下重新退回First Stage,继续
PK方案,直到无可争议地获得大家的认可。(问题的描述过程中,
也体现出了该协议的性能问题:一再的退回重新PK的问题,影响决
策的性能,影响收敛性,这些问题可以在改进的BFT协议Multi-Paxos
中分析解决,而不在本文的探讨范围内)。
Q5:Paxos协议在Blockchain中的应用?
目前,Paxos这类BFT协议适用于私有链,联盟链——一来网络规模不太大,二来网络中可信节点比例相对较高,降低了BFT协议Transactions快速确认的能力所带来的安全危机。限制BFT协议簇发展的主要原因在于:一旦网络节点规模增加,BFT协议簇的共识性能就会受到较大的挑战。这个挑战点还有待进一步探究。
BFT Paxos协议经典应用
Google: Chubby,Snapper
Yahoo: ZooKeeper
欢迎关注“Aha实验室”微信公众号
参考
[1] Lamport L, Shostak R, Pease M. The Byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems (TOPLAS), 1982, 4(3): 382-401.
[2] Lamport L. Paxos made simple[J]. ACM Sigact News, 2001, 32(4): 18-25.
[3] Chandra T D, Griesemer R, Redstone J. Paxos made live: an engineering perspective[C]//Proceedings of the twenty-sixth annual ACM symposium on Principles of distributed computing. ACM, 2007: 398-407.
[4] Vukolic M. The quest for scalable blockchain fabric: Proof-of-work vs. BFT replication[C]//International Workshop on Open Problems in Network Security. Springer International Publishing, 2015: 112-125.
[5] Brewer E A. Towards robust distributed systems[C]//PODC. 2000, 7.