月旦评|拜占庭将军问题,和拜占庭容错(PBFT)算法 |Byzantine failures
拜占庭将军问题
起源
拜占庭是东罗马帝国的首都,但是当时候拜占庭罗马帝国国土面积非常大,为了更好的防御,军队就被分成了很多小部分,而且间隔距离很远,将军们之间的消息只能靠差使来传递。而在战争的时候,一个军队的实力不足以抗衡敌人阵营,所以所有军队必需达成共识,能否战胜敌方。而在军队里面有可能存在叛徒和敌方间谍,影响 左右将军的决定,扰乱军队秩序。而有可能最终达成的结果并不代表大多数人的意见。所以在已知有反叛情况下,前提其他将军忠诚度不变的情况下,如何解决信任协议问题呢?这就是拜占庭问题。
PBFT
拜占庭将军问题其实就是一个协议问题,它是对现实世界的模型化。如果我们在信息传输过程,由于硬件错误、网络拥堵断开、或者遭到恶意攻击,计算机网络都可能出现不可预测的问题。而拜占庭协议就要如何处理在这些失效,并且还要满足问题的规范。下面给大家讲讲PBFT的算法。
拜占庭问题,一致性确保 主要分为:预准备、准备,确认。
算法来源 来自于CSDN
其中C为发送请求端,0123为服务端,3为宕机的服务端,具体步骤如下:
- Request:请求端C发送请求到任意一节点,这里是0。
- Pre-Prepare:服务端0收到C的请求后进行广播,扩散至123。
- Prepare:123,收到后记录并再次广播,1->023,2->013,3因为宕机无法广播。
- Commit:0123节点在Prepare阶段,若收到超过一定数量的相同请求,则进入Commit阶段,进行commit请求。
- Reply:0123节点在Commit阶段,若收到超过一定数量的相同请求,则对C进行反馈。
根据上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決,N为总计算机数,F为有问题的计算机总数。
N=4,F=0
| 节点 | 得到数据 | 最终数据 |
|---|---|---|
| a | 1 1 1 1 | 1 |
| b | 1 1 1 1 | 1 |
| c | 1 1 1 1 | 1 |
| d | 1 1 1 1 | 1 |
N=4,F=1
| 节点 | 得到数据 | 最终数据 |
|---|---|---|
| a | 1 1 1 0 | 1 |
| b | 1 1 1 0 | 1 |
| c | 1 1 1 0 | 1 |
| d | 1 1 1 0 | 1 |
N=4, F=2
| 节点 | 得到数据 | 最终数据 |
|---|---|---|
| a | 0 1 1 1 | NA |
| b | 1 0 1 1 | NA |
| c | 1 0 1 1 | NA |
| d | 1 0 1 1 | NA |
我们可以从列表中看出拜占庭容错算法,能够容纳1/3的节点错误。它有效的解决了协议的统一性。
Leave 月旦评|拜占庭将军问题,和拜占庭容错(PBFT)算法 |Byzantine failures to:
Read more #cn posts
Best Posts From snail
We have not curated any of snailsong's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.