简介
BFT拜占庭容错不是指一种算法,而是解决拜占庭将军问题的一类算法。分布式一致性算法选择最简单的BFT拜占庭容错,作为一致性算法入门一定能事半功倍。在分布式(一)中我们了解了一些基本理论,我们知道在有分区存在的情况下不能能出现完美的可用性和数据一致性,我们在项目中必须要最大限度做到分布式一致性,同时又要保证系统性能,所以必须了解分布式一致性算法。

拜占庭将军问题
拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共识问题的一种情景化描述,由Leslie Lamport等人在1982年首次发表。

拜占庭将军问题描述的场景:
拜占庭帝国n只军队驻扎在敌城外,敌人虽然不如拜占庭军队,但是可用抵抗n/2的拜占庭军队同时进攻,少于等于n/2军队进攻一定会失败。基于一些限制条件,拜占庭的n只军队不能汇集一点进攻,必须分散开来。每支军队都有各自的将军和指挥,并且每支军队之间都不能直接通信,只能使用信使间接通信。

在观察敌情之后,他们必须制定一个共同的进攻或撤退计划,只有当半数以上的将军共同发起进攻时才能取得胜利。其中有一些将军或指挥是叛徒,他们虽然不能截获或修改其他人的消息,但是他们可用使用假情报(如有利进攻时发撤退等),试图阻止忠诚的将军达成一致的行动计划。

拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问。Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。所以,在研究拜占庭将军问题的时候,我们已经假定了信道是没有问题的,并在这个前提下,去做一致性和容错性相关研究。如果需要考虑信道是有问题的,这涉及到了另一个相关问题:两军问题。

我们将拜占庭将军问题简化成了,所有忠诚的将军都能够让别的将军接收到自己的真实意图,并最终一致行动;而形式化的要求就是,“一致性”与“正确性”。

一致性:每个忠诚的将军必须收到相同的命令值vi(vi是第i个将军的命令)
正确性:如果第i个将军是忠诚的,那么他发送的命令和每个忠诚将军收到的vi相同。
Lamport 对拜占庭将军的问题的研究表明,当 n > 3m 时,即叛徒的个数 m 小于将军总数的 n 的 1/3 时,通过口头同步通信(假设通信是可靠的),可以构造同时满足“一致性”和“正确性”的解决方法,即将军们可以达成一致的命令。

两将军问题
拜占庭问题前,就已经存在两将军问题(Two Generals Paradox):两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致?
根据FLP不可能原理,两将军问题无通用解。

与分布式对应关系
在分布式系统领域, 拜占庭将军问题中的角色与计算机世界的对应关系如下:
将军, 对应计算机节点;
忠诚的将军, 对应运行良好的计算机节点;
叛变的将军, 被非法控制的计算机节点;
信使被杀, 通信故障使得消息丢失;
信使被间谍替换, 通信被攻击, 攻击者篡改或伪造信息。
如上文所述,拜占庭将军问题提供了对分布式共识问题的一种情景化描述,是分布式系统领域最复杂的模型。此外, 它也为我们理解和分类现有的众多分布式一致性协议和算法提供了框架。现有的分布式一致性协议和算法主要可分为两类:

一类是故障容错算法(Crash Fault Tolerance, CFT), 即非拜占庭容错算法,解决的是分布式系统中存在故障,但不存在恶意攻击的场景下的共识问题。也就是说,在该场景下可能存在消息丢失,消息重复,但不存在消息被篡改或伪造的场景。一般用于局域网场景下的分布式系统,如分布式数据库。属于此类的常见算法有Paxos算法、Raft算法,、ZAB协议等。

一类是拜占庭容错算法,拜占庭将军问题之所以难解,在于任何时候系统中都可能存在多个提案(作恶成本很低),并且要完成最终的一致性确认过程十分困难,容易受到干扰。但是一旦确认,即最终确认,概率上是100%。简单的说就是解决分布式系统中既存在故障,又存在恶意攻击场景下的共识问题,一般用于互联网场景下的分布式系统,如在数字货币的区块链技术中。属于此类的常见算法有PBFT算法、PoW算法。

BFT 算法
拜占庭将军问题提出后,有很多的算法被提出用于解决这个问题。这类算法统称拜占庭容错算法(BFT: Byzantine Fault Tolerance)。BFT从上世纪80年代开始被研究,目前已经是一个被研究得比较透彻的理论,具体实现都已经有现成的算法。

拜占庭将军问题是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意***等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理现实存在的异常行为,并满足所要解决的问题的规范要求。
区块链网络环境符合拜占庭将军问题模型,有运行正常的服务器(忠诚的拜占庭将军),有故障的服务器,还有破坏者的服务器(叛变的拜占庭将军)。共识算法的核心是在正常的节点间形成对网络状态的共识。
通常,发生故障的节点被称为拜占庭节点,而正常的节点为非拜占庭节点。
拜占庭容错系统是一个拥有n台节点的系统,整个系统对于每一个请求,满足以下条件:
  A、所有非拜占庭节点使用相同的输入信息,产生同样的结果;
  B、如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。
拜占庭系统普遍采用的假设条件包括:
  A、拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;
  B、节点之间的错误是不相关的;
  C、节点之间通过异步网络连接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;
  D、服务器之间传递的信息,第三方可以嗅探到,但是不能篡改、伪造信息的内容和验证信息的完整性。
原始的拜占庭容错系统由于需要展示其理论上的可行性而缺乏实用性。另外,还需要额外的时钟同步机制支持,算法的复杂度也是随节点增加而指数级增加。

分布式- BFT拜占庭容错相关推荐

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

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

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

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

  3. 区块链快速入门(四)——BFT(拜占庭容错)共识算法

    一.BFT简介 1.拜占庭将军问题简介 拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(D ...

  4. 拜占庭容错(BFT)介绍

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 自2008年比特币作为一种作为点对点的电子现金系统出现开端,许多加密钱银都被发明出来,每个加密钱银都有其特定的机 ...

  5. 拜占庭容错(BFT)算法介绍

    [原文作者:Jae Kwon,译者:郭光华] 2011年比特币将世界的注意力引向到了区块链.但可惜的是,比特币版本的区块链不能解决区块链行业的很多问题.那是因为: 1.比特币的POW共识会浪费大量能源 ...

  6. 区块链时代的拜占庭容错:Tendermint(四)

    2019独角兽企业重金招聘Python工程师标准>>> 原文题目:<Tendermint: Byzantine Fault Tolerance in the Age of Bl ...

  7. 权益证明协议中的拜占庭容错

    如果您遵循以太坊基金会的Casper研究,您将会听到许多术语,如"异步安全性"和"异步时序模型中的容错阈值".我想概述基础拜占庭容错理论中的重要概念因此您可以在 ...

  8. 什么是异步拜占庭容错 (ABFT)?

    异步拜占庭容错(ABFT)是拜占庭容错共识算法的一个属性,它允许网络的诚实节点保证公平.安全地就一组交易的时间和顺序达成一致. 什么是拜占庭容错? 让我们首先了解拜占庭容错实际上意味着什么.术语拜占庭 ...

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

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

最新文章

  1. 【怎样写代码】小技巧 -- 关于引用类型的两种转换方式
  2. c++编译优化,arm优化
  3. mysql cmd终端服务无法启动
  4. js中使用进行字符串传参
  5. [网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
  6. 在 SAP BTP 平台 Neo 环境里使用 SAP Cloud SDK 创建应用
  7. 别羡慕别人的舒服,静下心来坚持奋斗!!!
  8. rz和sz上传下载文件
  9. 为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效。
  10. redmine cannot load such file – rbpdf-font
  11. 论文笔记_SLAM_An Overview of SLAM_SPIE
  12. linux服务器上已安装R 用户下载R包,服务器R语言包下载、R包离线安装
  13. 蓝星实物微商城H5源码 附搭建教程
  14. ogg怎么转换成mp3格式?
  15. 【初级算法】10.有效的数独
  16. c#基础知识学习——枚举、元组(四)
  17. 【web性能】获取web各个阶段响应时间:服务器响应时间、首页白屏时间、dom渲染完成时间等
  18. 哈工大 计算机系统 一纸开卷CSAPP
  19. Python画玫瑰图
  20. 计算机核心期刊的终审环节,7 本中文核心期刊投稿经验分享 总有一款适合你

热门文章

  1. Matlab:条件与循环
  2. 脑图XMind 8免费激活方法
  3. Windows注册表中修改UAC(用户账号控制)及批处理脚本
  4. 使用IDM实现百度云高速下载
  5. html表格虚线外边框,html表格虚线怎么设置
  6. 腾讯音乐php应用工程师面试,腾讯音乐面试准备
  7. Android 屏幕适配(修改系统字体大小、显示大小、修改分辨率相关适配)
  8. 如何分析测试结果和评估测试工作的质量
  9. Mac使用技巧之快速显示桌面
  10. oracle通过sqlplus 创建用户和密码