区块链底层设计Java实战_牛冬 编著_AZW3_MOBI_EPUB_PDF_电子书(无页码)_牛冬 编著
内容节选
第5章分布式一致性与共识算法 愿得一人心 白首不相离 前面讲述了区块链系统中的两大基石——密码学的应用和P2P网络的构建,本章将介绍区块链系统的另一个基石——共识算法。 什么是共识呢?通常的理解是共同的认识、一致的看法。在区块链系统中,共识指的是区块链系统中各个节点账本数据同步的实现。 共识算法并非凭空而生,而是基于分布式系统中为众人所知的分布式一致算法得来的。因此,本章将从简单的分布式一致算法开始,一步步引导读者学习共识算法。只要能掌握分布式一致算法的“美人心”,各类共识算法都会有似曾相识之感。 5.1 区块链的分布式 区块链系统本质上是分布式网络系统,而在分布式系统中,最核心的问题就是“一致性(Consistency)的问题”,即在分布式网络的各个节点中如何保持节点数据的一致性。如果在分布式系统中,一致性无法保证,那么分布式系统就变成了不可用的系统,因此保证一致性是分布式系统中最为重要的内容。 熟悉分布式网络的读者,看到一致性时,往往会自然联想到分布式领域的CAP理论。CAP理论中论述了在任何一个分布式系统都无法同时满足Consistency(一致性)、Availability(可用性)和Partition tolerance(分区容错性)这三个基本需求。最多只能满足其中两项,而一致性是不能丢弃的。 当然,分布式系统中的分布式的一致性问题主要还是用来保证数据的一致性。 目前,各类分布式系统中使用的分布式一致性算法比较多,但基本都是源于Paxos分布式一致算法。正如Google Chubby的作者Mike Burrows所言: “there is only one consensus protocol, and that's Paxos – all other approaches are just broken versions of Paxos.” 中文可翻译为:世上只有一种一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。 因此分布式系统的一致性算法讲解将从Paxos算法开始。 5.2 Paxos算法 Paxos算法是莱斯利·兰伯特(Leslie Lamport,现就职于微软研究院)于1990年提出的,是一种基于消息传递的一致性算法。莱斯利·兰伯特于2013年获得了图灵奖。他的分布式计算理论奠定了这门学科的基础。 莱斯利·兰伯特在1978年发表了论文《分布式系统内的时间、时钟事件顺序》(Time, Clocks, and the Ordering of Events in a Distributed System),这篇论文成为目前计算机科学史上被引用最多的文献。他的论文为并发系统的规范与验证课题的研究贡献了核心原理。 Paxos算法是在莱斯利·兰伯特的论文The Part-Time Parliament中提出的。在论文中,他以故事的方式讲述了Paxos算法。 这个故事的主要内容如下: 古希腊有一个叫Paxos的岛屿,是爱琴海上的一个小岛,Paxos是一个兴盛的商业贸易中心。在这个岛屿上,法律的制定与修订通过议会表决的形式进行,而非传统的神权统治。 所有法律都必须经由议会成员投票表决后才能生效实施,而且已通过的律法必须被记录在案。 在岛上,商业繁荣,做生意赚钱才是头等大事,因此没有人愿意始终在议会大厅里从头到尾参与每一个法律表决的会议。为此,每一个议员都来维护一个法律律簿,用来记录一系列已通过的法令,每个法令带有一个唯一编号。为了保持各个议员法律律簿内容的一致性,法律律簿是用擦不掉的墨水书写而成的,所以内容一旦书写就不能改变。 在议会中有多个角色的成员:议员和服务员。服务员的工作是在比较嘈杂的议会厅里传递信息,议员的工作是发起法律提案或将通过的法律记录在自己的法律律簿上。 由于议员和服务员有可能并不可靠,他们可能随时会因为各种事情临时甚至是彻底离开议会大厅,服务员也有可能重复传递消息,当然也可能有新的议员在临时事务处理完毕后再回到议会大厅进行法律表决,因此议会的协议要求保证在上述情况下能够正确地修订法律并且不会产生冲突。 在法律表决时,议员的角色分为proposers和acceptors。 通过一个法律决议时,分为两个阶段: 阶段1:prepare阶段 proposer选择一个提案编号n,并将prepare请求发送给acceptors群体。 acceptor收到prepare消息后,如果提案的编号大于它已经回复的所有prepare消息,则acceptor将自己上次接受的提案回复给proposer,并承诺不再回复小于n的提案;如果提案的编号小于等于它已经回复的所有prepare消息,则说明是重复消息,不再重复处理。 阶段2:批准阶段 当proposer收到多数acceptors对prepare......
- 信息
- 关于作者
- 序
- 第1章 区块链简介
- 第2章 区块链架构
- 第3章 密码学
- 第4章 P2P网络构建
- 第5章 分布式一致性与共识算法
- 第6章 区块设计
- 第7章 区块存储
- 第8章 联盟链中的币设计
- 第9章 联盟链管理后台
- 第10章 联盟链的运营
- 附录A TextNG
- 附录B Mockito
- 附录C CouchDB的安装
- 后记