没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
2018/6/12 极客时间 | 左耳听风
https://time.geekbang.org/column/article/5612 1/13
区块链技术(4)-去中心化的共识机制
2018-04-10 陈皓
区块链技术(4)-去中心化的共识机制
朗读人:柴巍 22′37′′ | 7.77M
其实,去中心化的共识机制也是要解决拜占庭将军问题(The Byzantine Generals
Problem),它是莱斯利·兰伯特(Leslie Lamport)1982 年提出,用来解释一致性问题的一个
虚构模型。它是分布式领域中最复杂、最严格的容错模型。
分布式一致性算法
拜占庭的将军们没有一个中心化的领导机构,所以,如果他们需要攻击某个城市,所有将军需要
对任何将军可能提出的攻击时间达成共识。也就是说,只有所有的将军都达成了共识,在同一个
攻击时间攻击,就有非常大的胜率。但是,问题来了。这时,可能会有多个将军同时发出不同的
攻击计划,而且这些将军中还有叛徒。那么,将军们怎样达成共识呢?
莱斯利·兰伯特证明,当叛变者不超过 1/3 时,存在有效的算法。不论叛变者如何折腾,忠诚的
将军们总能达成一致的结果。如果叛变者过多,则无法保证一定能达到一致性。
拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且
要完成最终的一致性确认过程十分困难,容易受干扰。但一旦确认,即为最终确认。
2018/6/12 极客时间 | 左耳听风
https://time.geekbang.org/column/article/5612 2/13
比特币的区块链网络在设计时使用的 PoW(Proof of Work) 算法思路。一个是限制一段时间
内整个网络中出现提案的个数(增加提案成本),另外一个是放宽对最终一致性确认的需求,约
定好大家都确认并沿着已知最长的链进行拓宽。
也就是说,如果比特币系统在某一个时刻同时出现了两个都合法的区块,那么两个都承认。于
是,区块链上会出现两个合法的分支(术语叫 " 分叉 ")。此时矿工可以选择任何一个分支继
续,在某个分支的长度超过了另一个分支时,短的那个分支马上作废。
如果你看过我之前写的《分布式系统架构的本质》,那么一定知道 Paxos 协议,这也是一种分
布式一致性的共识算法。但为什么不用 Paxos 和 Raft 来做区块链的一致性算法的协议呢?这两
个算法对资源的消耗比 PoW 要小得多呢。
如果你熟悉这几个算法,那么你就知道 PoW 和 Paxos/Raft 的算法在本质上有下面这些不同。
对于 Paxos/Raft,其需要 Leader 选举,而对于比特币或者以太坊这样的无中心化的方式是
没有 leader 的。
对于 Paxos/Raft,加入其网络(集群)的结点前提假设都是受信的。然而,对于比特币 / 以
太坊来说,其前提假设都是不受信的,它们只相信,超过一半的结点所同意的东西。
对于 Paxos/Raft,需要事先对整个集群中的结点数有定义,而无中心化的比特币和以太坊中
的结点是想来就来,想走就走,来去自由。如果 Paxos/Raft 在这样的环境下,其会处于一个
非常尴尬的境地——要能随时进行伸缩。而且,Paxos/Raft 并不适合在一个非常大的网络中
玩(比如上百万的结点)。
但是它们有一些是相同的。
它们都是一致性的算法。
对系统的修改总是需要一个人来干(区块链用 PoW 消耗资源,让提案变得困难,
Paxos/Raft 用领导选举)。
系统中暂时的不一致是可以被修正的(区块链会考虑最长链,牺牲了强一致性,保证了可用
性,Paxos/Raft 如果没有超过半数的结点在线,会停止工作,牺牲了可用性,保证了强一
性)。
总之,区块链所面对的无中心化的 P2P 网络要比 Paxos/Raft 所面对的相对中心式分布式网络
要复杂多得多。所以,不太可能使用 Paxos/Raft 协议来替代 PoW 协议。除非,你想干一个相
对中心化的区块链,然而这就成了区块链的一个悖论了。
无论你是搞区块链,还是搞分布式,你都需要知道拜占庭容错系统研究中的三个重要理论:
CAP、FLP 和 DLS。
2018/6/12 极客时间 | 左耳听风
https://time.geekbang.org/column/article/5612 3/13
CAP 理论 - " 在网络发生阻断(partition)时,你只能选择数据的一致性(consistency)或
可用性(availability),无法两者兼得 "。论点比较直观:如果网络因阻断而分隔为二,在
其中一边我送出一笔交易:" 将我的十元给 A";在另一半我送出另一笔交易:" 将我的十元
给 B "。此时系统要么是,a)无可用性,即这两笔交易至少会有一笔交易不会被接受;要么
就是,b)无一致性,一半看到的是 A 多了十元而另一半则看到 B 多了十元。要注意的是,
CAP 理论和扩展性(scalability)是无关的,在分片(sharded)或非分片的系统皆适用。
FLP impossibility- 在异步环境中,如果节点间的网络延迟没有上限,只要有一个恶意节点存
在,就没有算法能在有限的时间内达成共识。但值得注意的是, "Las Vegas"
algorithms(这个算法又叫撞大运算法,其保证结果正确,只是在运算时所用资源上进行赌
博。一个简单的例子是随机快速排序,它的 pivot 是随机选的,但排序结果永远一致)在每
一轮皆有一定机率达成共识,随着时间增加,机率会越趋近于 1。而这也是许多成功的共识
演算法会采用的解决办法。
容错的上限 - 由DLS 论文我们可以得到以下结论。
在部分同步(partially synchronous)的网络环境中(即网络延迟有一定的上限,但我
们无法事先知道上限是多少),协议可以容忍最多 1/3 的拜占庭故障(Byzantine
fault)。
在异步(asynchronous)网络环境中,具确定性质的协议无法容忍任何错误,但这篇论
文并没有提及 randomized algorithms 在这种情况可以容忍最多 1/3 的拜占庭故障。
在同步(synchronous)网络环境中(网络延迟有上限且上限是已知的),协议可以容
忍 100% 的拜占庭故障。但当超过 1/2 的节点为恶意节点时,会有一些限制条件。要注
意的是,我们考虑的是 " 具认证特性的拜占庭模型(authenticated Byzantine)",而
不是 " 一般的拜占庭模型 "。具认证特性指的是将如今已经过大量研究且成本低廉的公私
钥加密机制应用在我们的算法中。
工作量证明
比特币的挖矿算法并不是比特币开创的,其原型叫 Hashcash。这个想法最初是由哈佛大学的女
计算机科学家辛西娅·德沃克 (Cynthia Dwork)、加州伯克立大学的 Moni Naor 和 Eli
Ponyatovski 于 1992 年的 "Pricing via Processing or Combatting Junk Mail" 论文中提出来
的。是的,一开始这个算法是用来限制垃圾邮件的。
简单说来,Hashcash 一开始要求邮件发送方对邮件头(其中包括时间和收件人地址)计算一个
160bit 的 SHA-1 哈希值。其前面需要有 5 个零,也就是 20bit 的 0。接收端会检查这个事。
为什么要设计成这个样子?因为如果我们发垃圾邮件,这点算力对于发送方来说,没有什么。但
对于需要大量发送垃圾邮件的人来说,这就是一个很大的成本了。就算是那些控制着用户的僵尸
剩余12页未读,继续阅读
苗苗小姐
- 粉丝: 42
- 资源: 328
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- bdwptqmxgj11.zip
- onnxruntime-win-x86
- onnxruntime-win-x64-gpu-1.20.1.zip
- vs2019 c++20 语法规范 头文件 <ratio> 的源码阅读与注释,处理分数的存储,加减乘除,以及大小比较等运算
- 首次尝试使用 Win,DirectX C++ 中的形状渲染套件.zip
- 预乘混合模式是一种用途广泛的三合一混合模式 它已经存在很长时间了,但似乎每隔几年就会被重新发现 该项目包括使用预乘 alpha 的描述,示例和工具 .zip
- 项目描述 DirectX 引擎支持版本 9、10、11 库 Microsoft SDK 功能相机视图、照明、加载网格、动画、蒙皮、层次结构界面、动画控制器、网格容器、碰撞系统 .zip
- 项目 wiki 文档中使用的代码教程的源代码库.zip
- 面向对象的通用GUI框架.zip
- 基于Java语言的PlayerBase游戏角色设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0