左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

66 | 区块链技术细节:去中心化的共识机制

陈皓 2018-05-17
其实,去中心化的共识机制也是要解决拜占庭将军问题(The Byzantine Generals Problem),它是莱斯利·兰伯特(Leslie Lamport)于 1982 年提出来的,用来解释一致性问题的一个虚构模型。同时,它也是分布式领域中最复杂、最严格的容错模型。

分布式一致性算法

拜占庭的将军们没有一个中心化的领导机构,所以,如果他们需要攻击某个城市,所有将军需要对任何将军可能提出的攻击时间达成共识。也就是说,只有所有的将军都达成了共识,在同一个攻击时间攻击,就有非常大的胜率。但是,问题来了。这时,可能会有多个将军同时发出不同的攻击计划,而且这些将军中还有叛徒。那么,将军们怎样达成共识呢?
莱斯利·兰伯特证明,当叛变者不超过 1/3 时,存在有效的算法。不论叛变者如何折腾,忠诚的将军们总能达成一致的结果。如果叛变者过多,则无法保证一定能达到一致性。
拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且要完成最终的一致性确认过程十分困难,容易受干扰。但一旦确认,即为最终确认。
比特币的区块链网络在设计时使用的 PoW(Proof of Work) 算法思路。一个是限制一段时间内整个网络中出现提案的个数(增加提案成本),另外一个是放宽对最终一致性确认的需求,约定好大家都确认并沿着已知最长的链进行拓宽。
也就是说,如果比特币系统在某一个时刻同时出现了两个都合法的区块,那么两个都承认。于是,区块链上会出现两个合法的分支(术语叫 " 分叉 ")。此时矿工可以选择任何一个分支继续,在某个分支的长度超过了另一个分支时,短的那个分支马上作废。
如果你看过我之前写的《分布式系统架构的本质》系列文章,那么一定知道 Paxos 协议,这也是一种分布式一致性的共识算法。但为什么不用 Paxos 和 Raft 来做区块链的一致性算法的协议呢?这两个算法对资源的消耗比 PoW 要小得多呢。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • hua168
    大神,分布式方面,能不能讲下安全,像国内大网站经常会被攻击他们是怎么防攻击,像防DDOS做CDN+DDOS防火墙效果也不怎么好,都在哪些地方做安全……能简单讲下吗?谢谢……
    2018-04-11
    5
  • .
    讲的好清楚!
    补充亮点
    在bitcoin挖矿中,GPU已经被更专业的ASIC取代了
    在改进版的POS中,要求参与者抵押资产来解决nothing at stake的问题

    作者回复: 谢谢补充

    2018-06-06
    4
  • neohope
    哈哈哈,您预测的很准,EOS的主链刚上线就挂了。我觉得BM能力是有的,但对团队的管理水平就有些差了。 应该多看看您的文章。
    2018-06-22
    2
  • derek
    老师有了解墨客吗?作为母链,可在之上构建各种子链,子链可使用自己的共识机制,并实现了分层分片
    2018-04-11
    1
  • 酱了个油
    耗子叔,关于链长导致的效率问题,是说每个区块生成后都需要把整条链走一遍来验证合法性吗,这一步主要是做什么校验呀

    作者回复: 验证你账户上的钱是怎么来的?

    2018-04-10
    1
  • args
    信息量很大,很多点都要值得花大篇幅查询学习
    2019-10-27
  • QQ怪
    说的真好
    2019-10-12
  • freeland
    最后说到了去中心化,安全性和高性能不能同时存在,现在的侧链的这种方案,主链用安全的pow,锚定对应的资产到侧链,侧链用dpos这样的共识,如果发现侧链有问题,主链通过plasma cash把侧链中的资产withdraw,是不是就同时有去中心化,安全性和高性能了
    2018-11-15
  • Michael
    现在的DAG可以说解决高性能的思路吗?
    2018-08-02
  • cat0
    看了很多介绍比特币技术的文章,能站在社会发展历史的宏观角度探谈比特币技术的,耗子叔是我见到的第一个。读你的专栏越读越觉得物超所值,你的音频也是我听过的技术类最棒的,看得出用心做了
    2018-06-27
  • 登高
    行家出手,比起之前看过的文章更有高度
    2018-04-29
  • 杨洪林
    非常佩服作者的理解深度,我有一个问题请教。区块链技术的去中心,高性能和 安全 怎么和CAP 中的 Consistency, availability and partition tolerance 一一对应呢?consistency 对应安全性,partition tolerance 对应去中心化, availability 对应性能? 不知道我的理解对不对?
    2018-04-22
  • 总指挥
    很有意思啊哈哈
    2018-04-14
  • 云学
    很欣赏这种辩证看技术的文章,不知不觉中解决了之前的很多疑问,对区块链也比较理性了,相比于去中性化,防篡改和可追溯更有应用价值
    2018-04-13
  • 微leng
    有个疑问 最初的比特币是咋来的,当时还没有交易吧
    2018-04-11
  • macworks
    有人的地方就有政治,这点任何协议都不能免除。至于去中心化和中心化的演进其实很正常。有些去中心化解决不了的问题,需要引入中心化的方案,而中心化的引入又会带来风险,所以又会有新的去中心化的提议出现。如果你仔细想想,法币,例如美金,很大程度上也是去中心化的。能搞定去中心化和安全本身已经是很了不起的事情了,性能问题是可以通过引入中心化的方案,例如担保机构来解决。这在一定程度上是可以接受的。
    2018-04-10
  • xiaotao
    请教一下,去中心化的协议还有gossip,为什么不是用gossip呢?
    2018-04-10
  • Yole
    其实Paxos/Raft也能作为区块链网络中的共识算法,只是不能使用在公有链里面,不能BFT。联盟链CFT应该就够了。

    作者回复: 两个问题,1)为什么要联盟链?2)为什么数据结构要存成链?

    2018-04-10
  • 王亚南
    有几个疑问,可能比较初级:1、比特币能成为货币必然需要发行,那现在比特币的唯一发行增量就是挖矿产生的奖金了?2、如果每一笔交易都需要获得全网确认一致的话,比特币交易不是会很慢,现在采用比特币交易的平台体验会很差吧?
    2018-04-10
收起评论
19
返回
顶部