拜占庭将军问题
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题总结
此时总结一下, 拜占庭问题的问题到底是什么:所有将军如何才能达成共识去攻 打(或撤退)城堡
区块链技术
根据相关的研究,得出一个【一般性的结论】:如果叛徒的数量大于或等于三分 之一 ,那么拜占庭问题不可解,这个三分之一也被称为拜占庭容错,三模冗余 是完全无法容错的(也就是说无解,不可能保持一致性)
最简单的策略即: 投票 (上图中的红色箭头和绿色箭头为每个将军做出的判断) , 超过半数支持某个决定,那么所有 9 个将军一定执行这个决定。如上图,5 个将 军决定进攻,4 个将军决定撤退,那么所有将军都会下令:进攻!
这种策略需要每个将军把自己的判断通过一种途径(途中灰色箭头)传递到所有 其他将军处。相对的,每个将军只有在收到了所有投票结果后,才会下令。如上 面的例子,所有将军得到投票:4 进攻 5 撤退,才下令撤退。
我们先假设信道一定是可靠的, 传令兵死亡之类的事情我们不考虑,毕竟在一个 非常复杂的网络中, 还可以通过多条的方式连接任意两个节点,可靠性还是值得 相信。主要破坏一致性的还是心怀不轨的【间谍】,或者总结为:如何防止【间 谍】对整体决策(进攻还是撤退)进行破坏?
我们按照区块链模型构造一个下图所示的系统
解释方法使用副官模型即可
推广到计算机系统内,【将军】类比为【计算机】,而计算机因为物理或被感染 等其他原因造成的【运行异常】就是【叛徒】,其实整个问题也是为了保证分布 式系统的一致性和可用性
传统解决方案
在区块链 之前,有两种解决方案:口头协议(又称为拜占庭 容错算法)和书面协议
【可视化直观】
其中每个将军投降下方的数字就是收到的攻击事件列表,在该规则下,可以看到 能保证,当叛徒数量小于 1/3 维护系统的一致性,即无论是什么情况,都可以防 止不一致的决定被执行(至少也是按兵不动,并且很容易定位叛徒是谁)
注意, 在这种仅有 4 个节点的情况下看似复用信道和传递消息的数量不多。 但随 着结点的增加, 时间复杂度和信道使用量级是节点数的平方。大规模网络基本瘫 痪,效率太低。
通常来说,大多数分布式系统使用的是书面协议确保一致性,中心机构背书。其 中有实用拜占庭容错算法(PBFT)最为有名
PBFT 概述
区块链技术
这个算法说起来也不难理解,他的核心思想是:对于每一个收到命令的将军,都 要去询问其他人, 他们收到的命令是什么。也就是说利用不断的信息交换让可行 的节点确认哪一个记录选择是正确的,即发现其中的背叛者
区块链技术
区块链解决方案
我们知道,区块链(想了解更多区块链原理,请移步:区块链常见问题)最强的 地方就在于它的一致性,同时这正是拜占庭问题的核心。
案例拆解
我们先假设你已经完全了解了比特币区块链的运行原理, 那么我们一步一步建立 一个场景看一看区块链是如何解决拜占庭将军问题?
区块链技术
首先, 你要知道这个问题属于计算机科学领域。解决这个问题才是区块链最大的 价值所在,因为这个问题一直是分布式系统的重要难题之一。
什么是拜占庭将军问题
这个问题的定义者是图灵奖获得者——Lamport,分布式系统的关键性奠基人 之一。他有面包店算法,拜占庭将军问题,Paxos 算法等著名成果。
区块链技术
每个将军本地都存储一份【记录】:记录所有将军的决定,比如“1:1”代表 1 号将军决定进攻
然后构造以下协议内容:
使用数字签名保证身份可可信 所有将军参与挖矿,国王以保证战役胜利为缘由,出资,奖励每一个挖到新区块 俩的将军
每一个将军当本地维护的最新确认【记录】中包含了所有 1-9 号将军的决定后, 正式做出自己的决定 在这个案例中,抛弃了代币的设定,因为不存在交易行为,而是由国王出资(保 证战争不被间谍影响,我认为国王应该愿意出这笔钱)。在拜占庭时期,因为没
区块链技术
这个投票策略的最大问题:假设出现了叛徒,如上图所示,会出现两种情况
【1】对自己位置的战场情况进行错误广播(比如他这个地方同的将军送去不同的消息破坏整体决定的一致性(导致左 边四个将军选择撤退,右边四个将军选择进攻)
必须强调,在传统的拜占庭问题构造的情景中,只能是一个例子,这个应用情景 是完全没有没有必要使用区块链来解决的!
总结
互联网技术的存在, 让传输过程中, 基本没有延迟 (或说延迟很小可以基本忽略) , 解决了通讯延迟的问题
区块链使用链型数据结构 + 算力互相制约使得作假的成本随着时间的加长呈指 数上升,解决了一致性问题。当然非对称秘钥部分的密码学,解决了身份确认问 题。
区块链技术
有网络,构造上述这样的系统,是完全不可能的。而现在网络链路速度,效率越 来越高,让区块链解决一致性问题得以解决
这里就引出了现在区块链的核心问题:应用场景与代价博弈。你要解决的痛点, 到底值不值得这样的花费呢?无论是算力消耗,还是资源消耗,亦或是类似于上 述案例中的国王出资(区块链代币价值为负数?),都是一种【代价】。完全的 信任是不存在的,只有当造假(走捷径获得利润)的成本远远高于得到的利润, 才能取得信任(一致性)。
问题描述
9 个将军带领 9 支军队,打一场攻城战役。假设每个将军都能独立根据眼前战况 做出两种判断:进攻或撤退,要求(或者最终目的是)如何让这 9 个将军的命令 是一致的(一致性,即共识)?要么一起进攻,要么一起撤退(每个将军之间也 是互不信任的,也有消灭对方的动机)。
区块链技术
【问题定义】总共 4 个将军,有 1 个是叛徒,每个将军需要在自己的战斗计划 中添加一行内容 <什么时间>进攻
【目标】只需要 3 个将军达成一致在同一时间进攻,就可以攻占城市,否则进攻 者全军覆没。最终目标还是统一一个一致的战斗计划,并按照计划同时实施(在 去中心化系统中,即【记录】的一致性)
【方法】对于每一个收到命令的将军,都要去询问其他人,他们收到的命令是什 么。在判断不出判断者的情况,执行更多的那个命令
采用 PBFT 方法,本质上就是利用通信次数换取信用。每个命令的执行都需要节 点间两两交互去核验消息,通信代价是非常高的。通常采用 PBFT 算法,节点间 的通信复杂度是节点数的平方级的。
白话 PBFT
区块链技术
还是用上面的将军的例子来举例,但为了方便我们把问题的定义稍作修改