您好,欢迎访问三七文档
区块链在整个区块链行业的凛冽寒冬中,价格的涨跌已经左右了太多的人头脑之中的理智。可是,众人之中,究竟有几个人真正理解了区块链技术的密码学机制与分布式计算?究竟有几个人还会关心区块链在技术上的创新?尘归尘,土归土。可能只有巨大的泡沫消散之后,区块链才能通过技术创新显示出真正的影响力。让区块链回归技术与应用的本质,这也是区块链大本营一直以来的定位。然而,传播这样的内容和话题,离不开货真价实的技术干货,以及有感染力的人物和故事。我们今天的内容就来自于这样一个女生:她是工业与系统工程专业出身,做过顶级投行高盛的分析师,做过著名风投a16z的合伙人——这都是许多人梦寐以求的工作。但是,功成名就的路上,她却发现编程才是自己想要的生活。区块链笨办法学会编程?她没学会。如何用HTML/CSS做一个网页?她开始上瘾了。所以,没有选择斯坦福、MIT的编程学位,她更喜欢HackReactor的全栈动手实践。先学JavaScript、React,后面的想法是机器学习、计算机视觉……这个女生就是PreethiKasireddy。接触区块链之后,金融从业背景和全栈编程能力让Preethi更加如鱼得水。从Coinbase工程师到智能合约设计的自由职业者,究根问底的天性让她开始用最浅显易懂的语言来向大家解释区块链技术的真相,篇篇爆款:比如这篇,《最全!写给技术小白的以太坊完整工作原理和运行机制!》,原文“HowdoesEthereumwork,anyway?”在Medium获赞45000+,区块链大本营已全文译出。比如这篇,《公有链的基本挑战》,原文“Fundamentalchallengeswithpublicblockchains”在Medium获赞17200+,评论比原文还长。比如这篇,《区块链尚无法扩展,至少现在不成,但希望犹在》,原文“Blockchainsdon’tscale.Nottoday,atleast.Butthere’shope.”在Medium获赞13600+,由技术专栏“HackerNoon”特别约稿。但是,不了解分布式系统的工作原理,不了解人们如何能在分散的网络上达成共识,你始终无法真正理解区块链技术的创新之处。众所周知,密码学和分布式计区块链算都不是什么新鲜事物;那为什么把它们整合在一起的区块链技术,却能够迫使科学家和工程师不得不去重新审视分布式计算的基本范式呢?接下来,我们就听Preethi从分布式系统的基本概念说起,一步一步说到公式算法,特别是中本聪共识的真正精妙之处,进而抓住区块链技术不会随泡沫而飘散的真实内涵:区块链分布式系统其实不是一个新鲜的话题,有关这个课题的研究已经进行过几十年了。区块链随着比特币、区块链等话题在网络上风生水起,分布式系统也逐渐走进大众的视野。区块链始于比特币,它本身就是一种新型的分布式系统,它们的流行反过来又促使分布式计算领域的研究发生翻天覆地的变化。想真正弄懂区块链,充分理解分布式系统是必不可少的。那么,你又该如何去了解分布式系统呢?这个话题很难三言两语说清楚,因为它所涉及的知识实在是太广泛、太琐碎了。关于分布式计算的资料文献要么晦涩难懂,要么不成体系。况且,随着应用场景不断拓展,分布式系统又衍生出数百种不同架构,分别服务于数百种不同的需求,这一切让整个问题愈显复杂。而如何把复杂的问题简单化,把生僻的话题讲明白,也就难上加难了。所以,在区块链概念满天飞的今天,如何Get到分布式系统和共识机制的基本概念而不被忽悠,就显得愈加迫切了。本文正是出于这样的目的来介绍入门区块链的这一基础:一、什么是分布式系统?二、分布式系统的基本性质三、分布式系统中的共识问题区块链四、一些基本的共识算法(Paxos、Raft、DLS和PBFT)五、中本聪共识为什么这么牛?请记住,如果读读这篇文章,你就想成为行业大拿,这肯是不现实的。一、什么是分布式系统?分布式系统是一组不同、分散的的进程,它们之间能够互相协调,通过相互间的信息传递完成一个共同的目标。尽管这些进程是分开的,但呈现给用户的,是一个系统、一个整体。分布式系统是围绕同一个目标而协同工作的一群计算设备。进程可以是“节点”、“个体”、“计算机”或“组件”,在本文中,它们的意思都是一样的。与之类似,“网络”与“系统”表达的也是同一个意思。前文中说过,分布式系统有数百种体系结构。例如,一台计算机可以看作成一个分布式系统——CPU、内存和IO设备都是独立的进程,它们相互协作完成同一个目标,比如上网、编程、游戏。区块链再比如,下图中飞机也可以看做是一个分布式系统,各单元共同协作,实现飞机的空间转移。类似的例子不胜枚举,在本文中,我们主要讨论进程是独立分散的计算机的分布式系统。区块链二、分布式系统的基本性质分布式系统有一些基本的共性,它们包括:1、并发性系统中的进程是同时操作的,多个事件同时发生。换言之,网络中的每台计算机都在同时、独立地执行任务。区块链最大的难题在于协调。2、缺少全局时钟在分布式计算机系统中,我们需要确定事件发生的先后顺序,但由于各台计算机在空间上是分开的,所以,我们缺少一个全局时钟。在《分布式系统中的时间、时钟和事件顺序》这篇论文中,LeslieLamport展示了他的排序方法,首先需要记住以下两点:消息发送在收到之前。区块链每台计算机都有一系列的事件。通过确定某两个事件的先后,我们可以知道系统中事件的部分顺序。译注:部分顺序——对应于总体顺序,例如:三个事件的特定顺序是ABC,在一次计算中,我们只要求AC,不在乎B何时发生,这就是部分顺序,那么ABC,ACB和BAC都满足部分顺序。Lamport的论文中阐述了一种算法,它要求每台计算机都能从另一台上收到信息。通过这种方式,得到部分顺序后,总体顺序也可以逐步推出来。在这里,我们是完全根据每台计算机收到信息的时间来排序的,那就会产生一些异常状况。因为各地的时钟或多或少都会有差别,这就导致系统顺序与外部用户感知到的顺序是不同的。为了处理这种异常,Lamport想出一个办法,同步各地的物理时钟!问题这样就能解决了吗?太天真了,年轻人!同步大量独立的时钟绝不是一个简单的事情,而是一个非常复杂的计算机科学问题。即使你在最初精确地设置了一大堆时钟,由于时钟漂移的存在,随着时间推移,时钟一定会有所变化。区块链译注:时钟漂移——各个时钟的计时速度存在细微差别,随着时间推移,一个时钟的运行速度与其参考时钟不完全相同,失去同步。计算机中使用的以晶体为基础的时钟也会发生漂移。容易被定时攻击所利用。因此,在分布式计算机系统中,时间和事件顺序是根本障碍。3、独立进程故障在分布式系统中,每个进程都可能发生故障,这些故障可能是进程崩溃或失控,可能是信息遗漏、歪曲或重复,也可能是恶意信息,还可能是网络延迟、断网断电。单个进程的故障率其实很低,但随着系统中的进程越来越多,系统会发生故障就从一个偶然事件变为必然事件。我们要做的就是开发分布式协议,保证系统在各种异常情形下仍能正常工作。因此分布式系统也被称为“容错分布式计算”。这些异常可大致分为三个类型:崩溃:进程在没有任何警告的情况下停止工作,如计算机崩溃。属于非恶意行为。遗漏:进程发送消息,但其他节点收不到,如消息丢失。属于非恶意行为。拜占庭:进程的行为随机。如果是在受控环境(例如Google或Amazon的数据中心)中,这种情况可以不做考虑。我们主要关心故障发生在“冲突地带”中区块链的情形,他们的行为相当随意,可能会恶意更改和阻断信息,或者根本就不发送。属于恶意行为。为了控制网络中的分散个体,我们需要设计一项协议,让一定会产生异常的系统仍然能够提供服务,完成共同目标,即系统需要具备容错性。因此,在构建分布式系统时必须做的核心假设是,在部分异常时系统还能否正常工作,异常是由于非恶意行为还是恶意行为。一般来说,在构建分布式系统时,有两种模型需要考虑:(1)简单容错在简单的容错系统中,我们假设系统的所有进程的行为方式都是固定的:要么遵守协议,要么失败。这种类型的系统能够妥善处理脱机或故障节点,并且不必担心节点发出任意或恶意的行为。但是,如果运行环境不受控,简单容错机制很难发挥作用。(2a)拜占庭容错在拜占庭容错系统中,我们假设节点可能产生故障或者恶意。在分散系统中,网络是开放的、不受限制的,节点由独立的个体控制,因此行为有很大的随意性,在设计系统模型时,这种情况必须考虑。区块链(2b)BAR容错还有一种故障叫做“理性”故障,即节点为了自身利益,可能会背离系统整体的目标。换句话说,节点可以老实,也可以不老实,这取决于其动机。如果“筹码”足够高,那么甚至大多数节点都会“叛变”。正所谓忠诚,取决于背叛的筹码。这被正式定义为BAR模型,它考虑到了拜占庭式故障和理性故障。BAR模型假设系统中有三种角色:拜占庭节点:是恶意的,只想作恶——坏人无私节点:诚实的,总是遵循协议——老实人理性节点:符合自身利益才会遵循协议——普通人4、信息传输分布式系统中的计算机之间通过“信息传输”实现沟通和协调,信息传输协议可以任选,无论是HTTP、RPC还是特定场景中的自定义协议。我们首先来了解一下信息传输环境:(1)同步式在同步信息传输系统中,假定信息传输时间是固定的、已知的。区块链概念上并不复杂,用户发送了消息,接收组件就会在固定的时间内得到消息。这样用户可以根据信息传输所需的固定时间上限来设计他们的协议。然而,在分布式系统的实际操作中,这种传输环境应用有限。因为计算机可能崩溃或掉线,消息可能丢失、重复、延迟或乱序。(2)异步式在异步信息传输系统中,假定网络可能无限延迟消息的发送,或者大量重复或者乱序。这时候,对于信息传输所需时间是不确定的。三、分布式系统中的共识问题到这里,我们已经了解了分布式系统的下列特性:并发性缺少全局时钟独立进程故障信息传输区块链接下来,我们将重点理解在分布式系统中“达成共识”的意义。最常见的一种模型称为复制状态机。复制状态机(Replicatedstatemachine)复制状态机,通俗点讲,就是多个节点从相同的初始状态开始,执行相同的一串命令,产生相同的最终状态。这一系列节点的状态都是相同的,就是所谓的“复制状态”。区块链在复制状态机中,如果某一事务是有效的,将其输入将导致系统的状态向下一个转换。在每个状态转换过程中,每个进程决定下一个输出值。从一个有效状态转换到下一个有效状态的逻辑称为“状态转换逻辑”。事务是数据库上的原子操作,这种操作一旦开始,就一直运行到结束,中间不会有任何切换。换句话讲就是操作要么完全完成,要么根本不发生。在复制状态机中,这一系列被维护的事务集合称为“事务日志”。所谓的“达成共识”意味着所有的计算机必须一致同意在每个状态转换过程中的输出值,也就是说,每台计算机上的事务日志都是相同的。复制状态是一种确定性状态机,功能与单个状态机相同,状态机中的单个计算机可能发生故障,但整个状态机依然会正常运转。故障主要有:区块链计算机崩溃。网络不稳定,信息传递可能会延迟、乱序或者失败。没有全局时钟,事件顺序难以确定。即使是在局部故障的情况下,复制状态机仍然必须不断地接受新事务到事务日志,从而提供服务。这其实也是每一种共识算法的基本目标。共识问题的定义如果一个算法满足以下条件,它就会达到共识:一致性:所有非故障进程必须决定相同的输出值。终止性:所有非故障节点最后必须在某个值上终止,不能无限循环下去。注意:不同的算法有不同的
本文标题:区块链是什么进阶篇
链接地址:https://www.777doc.com/doc-3457427 .html