通俗易懂理解PBFT拜占庭容错的回答
链接:https://www.zhihu.com/question/52254063/answer/322188918
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
拜占庭容错是一种共识算法,即如何使远距离通信的人们对一个提案达成一致意见。
与普通的共识算法(例如,majority wins,即超过一半人赞成即有效)不同的是,PBFT可以容忍投票的人中产生叛徒或者不响应。
举个合适的例子,我是一个愚昧的国王,没有自己的判断力,我不知道应该对敌国进攻还是投降好。我有一些大臣,我希望听从他们的意见做出决定,但是他们现在都离我很远,我只能通过飞鸽传书的方式告知他们目前的问题,得到他们的选择。然而,可能出现大臣叛变,故意提出相反的观点(错误的节点),也可能出现鸽子在传输过程中飞错了,我没有得到该大臣的选择(网络堵塞)。PBFT可以保证如果我有3f+1的大臣的话,即使其中有f个大臣叛变或者没有响应,我依然可以得出共识的正确结果。
这里一个核心问题就是,为什么有f个节点未响应或出错时,为了保证系统的正常,我需要总共有3f+1个节点进行投票。
同样用国王的例子,假设除了我(国王)一共有n个大臣,我知道其中有f个大臣是叛徒或者未响应,所以我一定要能从n-f个大臣的回应中进行判断(如果上述f个大臣都是未响应)。然而由于是飞鸽传书(异步传输),所以当我陆续收到n-f个传来的消息后,我并不知道之后是否还会有新的消息传来。因为如果f个有问题的大臣都是未响应,那么我将不会收到新的消息,如果其中有大臣是叛徒,我之后还会收到消息,但作为国王的现在不知道是哪种情况,却需要立刻作出进攻还是投降的判断。
最坏的情况下,剩下的f个大臣都是好人,只是鸽子飞得慢我还没收到消息,也就是说我收到消息的n-f的大臣中有f个大臣都是叛徒,即f个叛徒和n-2f个好人。由于多数者胜,所以只有当n-2f>f的情况下,作为国王的我会做出正确的决定,即n>3f,n最小需要取3f+1。
这也就是为什么PBFT能保证有3f+1节点投票时,允许f个节点未响应或者出现故障投相反票。
通俗易懂理解PBFT拜占庭容错的回答相关推荐
- 理解分布式一致性:拜占庭容错与PBFT
理解分布式一致性:拜占庭容错与PBFT 拜占庭问题 拜占庭容错BFT PBFT(Practical Byzantine Fault Tolerance) why 3f+1 ? PBFT 的优点 PBF ...
- 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述
共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...
- PBFT实用拜占庭容错算法详解
分布式架构遭遇的问题 分布式架构会遭遇到以下问题: 1.异构环境的分布式架构首先可能遇到网络传输问题,比如数据丢失.延迟.重复.乱序. 2.欺骗攻击和重播攻击 3.操纵多个失效节点,延迟通讯,制造混乱 ...
- 拜占庭容错共识(PBFT)
文章目录 一.拜占庭容错共识 1. 什么是PBFT 拜占庭将军的问题是什么? pBFT 原理 2. 与最传统的PoW共识机制相比,PBFT优势和劣势 3. BFT共识开发库 Tendermint BF ...
- 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos
五篇分布式共识系列文章合集: 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT.PoW.PoS.DPos 分布式共识算法(故障容错算法)系列整理(二):Bully.Gossip.NWR 分布式共 ...
- PBFT实用拜占庭容错算法深入详解
PBFT即实用拜占庭容错算法,由Miguel Castro和Barbara Liskov在1999年提出,可以在作恶节点少于三分之一的情况下,保证系统的正确性(避免分叉).与原始的BFT算法相比,算法 ...
- PBFT(拜占庭容错)
PBFT(拜占庭容错) 基于拜占庭将军问题,一致性的确保主要分为这三个阶段:预准备(pre-prepare).准备(prepare)和确认(commit).流程如下图所示: 其中C为发送请求端 ...
- 实用拜占庭容错系统(PBFT)共识算法
摘拜占庭容错问题简称BFT,实用拜占庭容错系统(PBFT)在区块链中的应用很普遍,简介PBFT算法步骤. 更多区块链技术与应用分类: 区块链应用 区块链开发 以太坊 | Fabric | BCO ...
- 区块链共识算法:Paxos、Raft以及实用拜占庭容错机制PBFT
详情参见个人博客: http://brainware360.cn/%E5%8C%BA%E5%9D%97%E9%93%BE%E5%85%B1%E8%AF%86%E7%AE%97%E6%B3%95%EF% ...
最新文章
- Android内存优化(三)避免可控的内存泄漏
- python录入学生信息网_干货满满 | Python趣味编程教学实践
- CodeForces - 1551F Equidistant Vertices(暴力+dp)
- 文献学习(part78-B)--A Survey of Clustering Algorithms for Big Data: T axonomy Empirical Analysis
- JavaScript常用方法(工具类的封装)
- Django之Ajax刷新记住用户名
- python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码
- Makefile语法总结
- AD域控exchange邮箱(三)——exchange2010卸载报错的解决方法全纪录
- 【java】窗口和监听器的使用
- c语言的高级编程,C语言高级编程
- (转)Uncaught TypeError: Cannot set property 'innerHTML' of null
- individual program总结2.0
- 电子政务互联互通软件平台的体系架构
- 人工智能有没有可能在未来超越人类?
- k8s通过Service访问Pod
- html视频播放卡顿,电脑网页看视频卡?来看看我的解决方法!
- JS获取浏览器类型和版本信息
- 玩qq游戏提示计算机内存不足,Win8系统下玩lol提示关闭程序以防止信息丢失内存不足怎么办...
- 推荐15个清爽简约风格的 HTML5 网站作品