4.4 PBFT算法 - 数据结构 - 机器学习
数据结构 - 机器学习
深度学习

当前位置:首页 » 区块链精品文章 » 正文
4.4 PBFT算法
1844 人参与 2018年08月25日 17:22 分类 : 区块链精品文章 评论
1999年Castro和Liskov提出的PBFT(Practical Byzantine Fault Tolerance)是第一个得到广泛应用的BFT算法。在PBFT算法中,至多可以容忍不超过系统全部节点数量的1/3的拜占庭节点“背叛”,即如果有 超过2/3的节点正常,整个系统就可以正常工作。早期的拜占庭容错算法或者基于同步系统的假设,或者由于性能太低而不能在实际系统中运作。PBFT算法解 决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。也许就是出于效率的考虑,央 行推出的区块链数字票据交易平台用的就是优化后的PBFT算法。腾讯的区块链用的也是PBFT。
在PBFT算法中,每个副本有3个状态:pre-prepare、prepared和commited。消息也有 3种:pre-prepare、prepare和committed。收到pre-prepare消息并且接受就进入prepared状态。收到 commit消息并且接受就进入Committed状态。下面以一个有4个节点/拷贝的例子说明,这个网络内,仅允许1个拜占庭节点(此处设f=1)。
百花村小学举行百米赛跑比赛,3年级第一组的选手只有4个人:Alice、Bob、Cathy和David(简称 A、B、C、D)。为了节省钱,比赛并没有请裁判,而是在4个选手中随机挑出一个做裁判,假设是Alice。众所周知,百米跑的口令是:“各就各位,预 备,跑!”
这里“各就各位”就是pre-prepare消息,选手接受了命令就会脚踩进助跑器,而这一动作被其他选手看到, 就会认为该选手进入了prepared状态。相当于发了一个prepare消息给其他选手。同理,预备就是prepare消息,选手接受了就是双手撑起, 身子呈弓形,而这一动作被其他选手看到,就会认为该选手进入了committed状态。
1)假设A是公正的。Alice得到老师示意,3年级第一组准备比赛。Alice就喊:“各就各位!”
老师的示意相当于一个外部消息请求。Alice收到这个消息,给消息编一个号,比如编为030101号。必须编 号,因为比赛有一个规则(假想),连续4次起跑失败,整个组都被淘汰。B、C、D同学收到口令后,如果认为命令无误,便都把脚踩进助跑器(拜占庭的那个人 例外)。而这一个动作又相当于互相广播了一个prepare消息。A、B、C、D选手互相看到对方的动作,如果确认多于f个人(由于此处f=1,所以至少 是2个人)的状态和自己应有的状态相同,则认为大家进入prepared状态。选手会将自己收到的pre-prepare和发送的prepare信息记录 下来。
2)假设A是公正的。Alice看到至少2个人进入prepare状态,Alice就接着喊:“预备,跑!”。
3)接下来发生的事类似上一步:B、C、D同学收到口令后(相当于收到commit消息),如果认为命令无误,便 都双手撑起,身子呈弓形(拜占庭的那个人例外)。而这一个动作又相当于互相广播了一个commit消息。A、B、C、D选手互相看到对方的动作,如果确认 多于f个人(由于此处f=1,所以至少是2个人)的状态和自己应有的状态相同,则认为大家进入committed状态。当大家都确认进入 Committed状态后,就可以起跑了!
4)假设A是不公正的。A就会被换掉,重新选一个选手B发令。
这时候,由于所有选手都记录了自己的状态和接受/发送的信息。那些换掉前已经是Committed状态的选手,开 始广播commit消息,如果确认多于f个人(由于此处f=1,所以至少是2个人)的状态和自己应有的状态相同,则认为大家进入committed状态。 而对于换掉前是prepared和pre-prepare状态的选手,则完全作废以前的命令和状态,重新开始。
PBFT算法的主要优点如下。
·PBFT算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。
·共识的时延大约在2~5秒,基本达到商用实时处理的要求。
·共识效率高,可满足高频交易量的需求。
因为非常适合联盟链的应用场景,PBFT及其改进算法因此成为目前使用最多的联盟链共识算法。改进主要集中在:①修改底层网络拓扑的要求,使用P2P网络;②可以动态地调整节点数量;③减少协议使用的消息数量等。
不过PBFT仍然是依靠法定多数(quorum),一个节点一票,少数服从多数的方式,实现了拜占庭容错。对于联盟链而言,这个前提没问题,甚至是优点所在。但是在公有链中,就有很大的问题。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=95
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
- 1.2 区块链体验2018-10-02 20:49
- 比特币技术解密2018-09-04 13:13
- 7.3 创建投注合约2018-09-15 10:56
- 8.1 微链是什么2018-08-23 13:21
网站分类
- 数据结构
- 数据结构视频教程
- 数据结构练习题
- 数据结构试卷
- 数据结构习题解析
- 数据结构电子书
- 数据结构精品文章
- 区块链
- 区块链精品文章
- 区块链电子书
- 大数据
- 大数据精品文章
- 大数据电子书
- 机器学习
- 机器学习精品文章
- 机器学习电子书
- 面试笔试
- 物联网/云计算
标签列表
- 数据结构 (39)
- 数据结构电子书 (20)
- 数据结构习题解析 (8)
- 数据结构试卷 (10)
- 区块链是什么 (261)
- 数据结构视频教程 (31)
- 大数据技术与应用 (12)
- 百面机器学习 (14)
- 机器学电子书 (29)
- 大数据电子书 (37)
- 程序员面试 (10)
- RFID (21)
最近发表
- 找出数组中有3个出现一次的数字
- 《百面机器学习》电子书下载
- 区块链精品电子书《深度探索区块链:Hyperledger技术与应用_区块链技术丛书》张增骏
- 区块链精品电子书《比特币:一个虚幻而真实的金融世界》
- 区块链精品电子书《图说区块链》-徐明星 & 田颖 & 李霁月
- 区块链精品电子书《是非区块链:技术、投机与泡沫》-英国《金融时报》
- 区块链精品电子书《商业区块链:开启加密经济新时代》-威廉·穆贾雅
- 区块链精品电子书《人工智能时代,一本书读懂区块链金融 (互联网_时代企业管理实战系列)》-马兆林
-
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https'){
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else{
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区