____  ___    _  _     _   _ _____     _______
 / ___|/ _ \  | || |   | | | |_ _\ \   / / ____|
| |  _| | | | | || |_  | |_| || | \ \ / /|  _|
| |_| | |_| | |__   _| |  _  || |  \ V / | |___
 \____|\___/     |_|   |_| |_|___|  \_/  |_____|

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

月旦评|拜占庭将军问题,和拜占庭容错(PBFT)算法 |Byzantine failures

BY: @snailsong | CREATED: April 25, 2018, 2:29 p.m. | VOTES: 10 | PAYOUT: $0.18 | [ VOTE ]

拜占庭将军问题

起源

[IMAGE: https://steemitimages.com/DQmbLJwXp44aBoE25BFDg15LsdPEKD3VCQ4KoTzRSJs3r7o/f11f3a292df5e0fe205e685c576034a85edf722d.jpg]

拜占庭是东罗马帝国的首都,但是当时候拜占庭罗马帝国国土面积非常大,为了更好的防御,军队就被分成了很多小部分,而且间隔距离很远,将军们之间的消息只能靠差使来传递。而在战争的时候,一个军队的实力不足以抗衡敌人阵营,所以所有军队必需达成共识,能否战胜敌方。而在军队里面有可能存在叛徒和敌方间谍,影响 左右将军的决定,扰乱军队秩序。而有可能最终达成的结果并不代表大多数人的意见。所以在已知有反叛情况下,前提其他将军忠诚度不变的情况下,如何解决信任协议问题呢?这就是拜占庭问题。

PBFT

拜占庭将军问题其实就是一个协议问题,它是对现实世界的模型化。如果我们在信息传输过程,由于硬件错误、网络拥堵断开、或者遭到恶意攻击,计算机网络都可能出现不可预测的问题。而拜占庭协议就要如何处理在这些失效,并且还要满足问题的规范。下面给大家讲讲PBFT的算法。

拜占庭问题,一致性确保 主要分为:预准备、准备,确认。

[IMAGE: https://steemitimages.com/DQmZz1vMCBnqLkoMkZQo6eQcjwdYvZ824UAytetKz5UN15o/20170704120008446.png]

>算法来源 来自于CSDN

>其中C为发送请求端,0123为服务端,3为宕机的服务端,具体步骤如下:

  1. Request:请求端C发送请求到任意一节点,这里是0。
  2. Pre-Prepare:服务端0收到C的请求后进行广播,扩散至123。
  3. Prepare:123,收到后记录并再次广播,1->023,2->013,3因为宕机无法广播。
  4. Commit:0123节点在Prepare阶段,若收到超过一定数量的相同请求,则进入Commit阶段,进行commit请求。
  5. 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的节点错误。它有效的解决了协议的统一性。

TAGS: [ #cn ] [ #cn-reader ] [ #crypto ] [ #life ] [ #cn-book ]

Replies

@cnbuddy | April 25, 2018, 2:55 p.m. | Votes: 0 | [ VOTE ]

你好!cn区点赞机器人 @cnbuddy 很开心你能成为cn区的一员。倘若你不喜欢我的留言,请回复“取消”。

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>