深度学习
万法皆空,因果不空。随着摩尔定律遇到瓶颈,越来越多情况下要依靠分布式架构,才能实现海量数据处理能力和可扩展计算能力。区块链系统,首先是一个分布式系统。传统单节点结构演变到分布式系统,碰到的首要问题就是一致性的保障。很显然,如果分布式集群无法保证处理结果一致的话,那任何建立于其上的业务系统都无法正常工作。本章将介绍分布式系统领域的核心问题,包括一致性、共识的定义,基本的原理和算法,另外还介绍了评估分布式系统可靠性的指标。
一致性问题是分布式领域最为基础也是最重要的问题。如果分布式系统能实现“一致”,对外就可以呈现为一个完美的、可扩展的“虚拟节点”,相对物理节点具备更优越性能和稳定性。这也是分布式系统希望能实现的最终目标。4.1.1 定义与重要性定义 一致性(consistency),早期也叫agreement,是指对于分布式系统中的多个服务节点,给定一系列操作,在约定协议的保障下,试图使得它们对处理结果达成“某种程度”的认同。理想情况下,如果各个服务节点严格遵循相同的处理协议,构成相同的处理状态机,给定相同的初始状态和输入序列,则可以保障在处理过程中的每个环节的结果都是相同的。那么,为什么说一致性问题十分重要呢?举个现实生活中的例子,多个售票处同时出售某线路上的火车票,该线路上存在多个经停站,怎么
共识(consensus)在很多时候会与一致性(consistency)术语放在一起讨论。严谨地讲,两者的含义并不完全相同。一致性往往指分布式系统中多个副本对外呈现的数据的状态。如前面提到的顺序一致性、线性一致性,描述了多个节点对数据状态的维护能力。而共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。因此,一致性描述的是结果状态,共识则是一种手段。达成某种共识并不意味着就保障了一致性。实践中,要保障系统满足不同程度的一致性,核心过程往往需要通过共识算法来达成。共识算法解决的是对某个提案(proposal)大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等。可以认为任何可以达成一致的信息
4.3.1 定义FLP不可能原理:在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法(Nocompletelyasynchronousconsensusprotocolcantolerateevenasingleunannouncedprocessdeath)。提出并证明该定理的论文《ImpossibilityofDistributedConsensuswithOneFaultyProcess》由Fischer、Lynch和Patterson三位科学家于1985年发表,该论文后来获得了Dijkstra(就是发明最短路径算法的那位计算机科学家)奖。FLP不可能原理实际上告
CAP原理最早是2000年由EricBrewer在ACM组织的一个研讨会上提出猜想,后来Lynch等人进行了证明。该原理被认为是分布式系统领域的重要原理之一。4.4.1 定义CAP原理:分布式计算系统不可能同时确保以下三个特性:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。这里,一致性、可用性和分区容忍性的含义如下:·一致性:任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这里指的是强一致性;·可用性:在有限时间内,任何非失败节点都能应答请求;·分区容忍性:网络可能发生分区,即节点之间的通信不可保障。比较直观地理解如下,当网络可能出现分区的时候,系统是无
ACID原则指的是:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性),用了四种特性的缩写。ACID也是一种比较出名的描述一致性的原则,通常出现在分布式数据库领域。具体来说,ACID原则描述了分布式数据库需要满足的一致性需求,同时允许付出可用性的代价。ACID特征如下:·Atomicity:每次操作是原子的,要么成功,要么不执行;·Consistency:数据库的状态是一致的,无中间状态;·Isolation:各种操作彼此之间互相不影响;·Durability:状态的改变是持久的,不会失效。与ACID相对的一个原则是BASE(BasicAvailability,Soft-state,EventualConsiste
Paxos问题[1]是指分布式的系统中存在故障(crashfault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题。这也是分布式共识领域最为常见的问题。解决Paxos问题的算法主要有Paxos系列算法和Raft算法。4.6.1 Paxos算法1990年由LeslieLamport在论文《ThePart-timeParliament》中提出的Paxos共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。Paxos算法被广泛应用在Chubby、ZooKeeper这样的分布式系统中。LeslieLamport作为分布式系统领域的早期研究者,因为相关成果获得了2013年度图灵奖。
拜占庭问题(ByzantineProblem)更为广泛,讨论的是允许存在少数节点作恶(消息可能被伪造)场景下的一致性达成问题。拜占庭容错(ByzantineFaultTolerant,BFT)算法讨论的是在拜占庭情况下对系统如何达成共识。1.两将军问题在拜占庭将军问题之前,就已经存在两将军问题(TwoGeneralsParadox):两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致?根据FLP不可能原理,这个问题无通用解。2.拜占庭问题拜占庭问题又叫拜占庭将军问题(ByzantineGeneralsProblem),是LeslieLamport等科学家于1982年提出用来解释一致性问题的一个虚构模型。拜占庭是古代东罗马
可靠性(availability),或者说可用性,是描述系统可以提供服务能力的重要指标。高可靠的分布式系统往往需要各种复杂的机制来进行保障。通常情况下,服务的可用性可以用服务承诺(ServiceLevelAgreement,SLASLA)、服务指标(ServiceLevelIndicator,SLI)、服务目标(ServiceLevelObjective,SLO)等方面进行衡量。4.8.1 几个9的指标很多领域里谈到服务的高可靠性,都喜欢用几个9的指标来进行衡量。几个9,其实是概率意义上粗略反映了系统能提供服务的可靠性指标,最初是电信领域提出的概念。表4-1给出同指标下每年允许服务出现不可用时间的参考值。表4-1 同指标下,每年允许服务出现不可用时间的参考值一般来说,单点的服务
工程领域从来没有黑科技;密码学不仅是工程。密码学相关的安全技术在整个信息技术领域的重要地位无需多言。如果没有现代密码学和信息安全的研究成果,人类社会根本无法进入信息时代。区块链技术大量依赖了密码学和安全技术的研究成果。实际上,密码学和安全领域所涉及的知识体系十分繁杂,本章将介绍密码学领域中跟区块链相关的一些基础知识,包括Hash算法与数字摘要、加密算法、数字签名、数字证书、PKI体系、Merkle树、布隆过滤器、同态加密等。读者通过阅读本章可以了解如何使用这些技术保护信息的机密性、完整性、认证性和不可抵赖性。