作者:蒋雨辰
链接: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拜占庭容错的回答相关推荐

  1. 理解分布式一致性:拜占庭容错与PBFT

    理解分布式一致性:拜占庭容错与PBFT 拜占庭问题 拜占庭容错BFT PBFT(Practical Byzantine Fault Tolerance) why 3f+1 ? PBFT 的优点 PBF ...

  2. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  3. PBFT实用拜占庭容错算法详解

    分布式架构遭遇的问题 分布式架构会遭遇到以下问题: 1.异构环境的分布式架构首先可能遇到网络传输问题,比如数据丢失.延迟.重复.乱序. 2.欺骗攻击和重播攻击 3.操纵多个失效节点,延迟通讯,制造混乱 ...

  4. 拜占庭容错共识(PBFT)

    文章目录 一.拜占庭容错共识 1. 什么是PBFT 拜占庭将军的问题是什么? pBFT 原理 2. 与最传统的PoW共识机制相比,PBFT优势和劣势 3. BFT共识开发库 Tendermint BF ...

  5. 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos

    五篇分布式共识系列文章合集: 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT.PoW.PoS.DPos 分布式共识算法(故障容错算法)系列整理(二):Bully.Gossip.NWR 分布式共 ...

  6. PBFT实用拜占庭容错算法深入详解

    PBFT即实用拜占庭容错算法,由Miguel Castro和Barbara Liskov在1999年提出,可以在作恶节点少于三分之一的情况下,保证系统的正确性(避免分叉).与原始的BFT算法相比,算法 ...

  7. PBFT(拜占庭容错)

    PBFT(拜占庭容错)     基于拜占庭将军问题,一致性的确保主要分为这三个阶段:预准备(pre-prepare).准备(prepare)和确认(commit).流程如下图所示: 其中C为发送请求端 ...

  8. 实用拜占庭容错系统(PBFT)共识算法

    摘拜占庭容错问题简称BFT,实用拜占庭容错系统(PBFT)在区块链中的应用很普遍,简介PBFT算法步骤. 更多区块链技术与应用分类: 区块链应用    区块链开发 以太坊 | Fabric | BCO ...

  9. 区块链共识算法: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% ...

最新文章

  1. Android内存优化(三)避免可控的内存泄漏
  2. python录入学生信息网_干货满满 | Python趣味编程教学实践
  3. CodeForces - 1551F Equidistant Vertices(暴力+dp)
  4. 文献学习(part78-B)--A Survey of Clustering Algorithms for Big Data: T axonomy Empirical Analysis
  5. JavaScript常用方法(工具类的封装)
  6. Django之Ajax刷新记住用户名
  7. python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码
  8. Makefile语法总结
  9. AD域控exchange邮箱(三)——exchange2010卸载报错的解决方法全纪录
  10. 【java】窗口和监听器的使用
  11. c语言的高级编程,C语言高级编程
  12. (转)Uncaught TypeError: Cannot set property 'innerHTML' of null
  13. individual program总结2.0
  14. 电子政务互联互通软件平台的体系架构
  15. 人工智能有没有可能在未来超越人类?
  16. k8s通过Service访问Pod
  17. html视频播放卡顿,电脑网页看视频卡?来看看我的解决方法!
  18. JS获取浏览器类型和版本信息
  19. 玩qq游戏提示计算机内存不足,Win8系统下玩lol提示关闭程序以防止信息丢失内存不足怎么办...
  20. 推荐15个清爽简约风格的 HTML5 网站作品

热门文章

  1. 12月16号 双链表
  2. dev控件中LookUpEdit的数据绑定问题
  3. 关于写文本文件的问题
  4. pip升级之后出现no module named pip
  5. 【算法】ROI Align 原理
  6. 【Matlab】如何确定数组中存在哪几个数?
  7. 云炬随笔20211016(4)
  8. 图像处理入门 100 题,有人把它翻译成了中文版!
  9. 干货 | 谈谈我是如何入门这场 AI 大赛的
  10. Jupyter notebook入门教程(上)