查看原文
其他

白话区块链 之4: 区块链分类与架构

2018-04-21

作者 蒋勇

【编者Peter Ye按】

可以打开如下链接,详细阅读前几篇:

白话区块链 之1: 为什么账本要这么记?

白话区块链 之2: 区块链技术理念

白话区块链 之3: 区块链技术栈


下面的段落是:第1章第4节 《区块链分类与架构》。


---Begin---

 

通过上述的了解,我们知道了区块链系统实际上就是一个维护公共数据账本的系统,一切技术单元的设计都是为了更好的维护好这个公共数据账本。通过共识算法达成节点的账本数据一致;通过密码算法确保账本数据的不可篡改性以及数据发送的安全性;通过脚本系统扩展账本数据的表达范畴。


站在本质的角度,我们甚至可以认为,区块链系统实际上就是一种特别设计的数据库系统或者说是分布式数据库系统,在这个数据库中可以去存储数字货币,也可以去存储逻辑更复杂的智能合约以及范围更加广阔的各种业务数据


在区块链系统的发展过程中,也经历了这样一个阶段,从比特币开始,早期的区块链系统都是面向数字货币的,如比特币、莱特币等,这个阶段我们可以认为区块链系统是一个支持数字货币合约的系统;之后便出现了更加灵活的,能够支持自定义智能合约的系统,其代表作是以太坊,可以认为以太坊就是对比特币这样的数字货币系统的扩展,不过以太坊仍然是内置一个数字货币的支持的,延续了比特币系统的金融特征,也使得以太坊的应用更多的还是面向金融范畴;再之后的代表就是超级账本项目,尤其是其中的fabric子项目,在这个系统中,超越了对金融范畴的应用,支持各个领域的数据定义,我们分别将这三个阶段称为区块链系统的1.0\2.0\3.0架构时期。


为了让大家对发展过程中的区块链系统有一个整体的概念,在本节中,我们来描述一下通常的区块链系统的架构,并站在不同的角度对区块链系统进行一个分类。


一、区块链架构

1.  区块链1.0架构


如上所述,这个阶段区块链系统主要是用来实现数字货币的,我们看一下示意图:

如图所示,在整个架构中,分为核心节点和前端工具,这里提一下核心节点中矿工的功能,矿工在1.0架构的系统中,主要是承担两个任务,第一个是通过竞争获得区块数据的打包权后将内存池(发送在网络中但是还没有确认进区块的交易数据,属于待确认交易数据)中的交易数据打包进区块,并且广播给其他节点;第二个是接受系统对打包行为的数字货币奖励,从而系统通过这种奖励方式完成新增货币的发行。


在前端工具中,最明显的就是一个钱包工具,钱包工具是提供给用户管理自己的账户地址以及余额的;浏览器则用来查看当前区块链网络中发生的数据情况,比如最新的区块高度、内存池的交易数、单位时间的网络处理能力等;RPC客户端和命令行接口都是用来访问核心节点的功能的,在这个时候,核心节点就相当于是一个服务器,通过RPC服务提供功能调用接口。

 

2.  区块链2.0架构


区块链2.0架构的代表产品就是以太坊,因此我们可以套用以太坊的架构来说明,先看下示意图吧:

如图所示,与1.0架构相比,最大的特点就是支持智能合约,在以太坊中,我们使用智能合约开发工具开发合约程序,并且编译为字节码,最终部署到以太坊的区块链账本中,部署后的智能合约是运行在一个虚拟机上的,称之为以太坊虚拟机。正是通过这样的一个智能合约的实现,扩展了区块链系统的功能,同时我们也能看到,在以太坊中还是支持数字货币的,因此在应用工具中也是有一个钱包工具的。


3.  区块链3.0架构


3.0的架构中,超越了对数字货币或者金融的应用范畴,而将区块链技术作为一种泛解决方案,可以在其他领域比如行政管理、文化艺术、企业供应链、医疗健康、物联网、产权登记等方面的应用,可以认为是面向行业应用。

行业应用一般是需要具备企业级的属性的,比如身份认证、许可授权、加密传输等,并且对数据的处理性能也会有要求,因此企业级场景下的应用,往往都是联盟链或者私有链。我们来一下示意图:

如图所示,首先在3.0架构中,数字货币不再是一个必选组件了,当然如果需要,我们也是可以通过智能合约的方式来实现数字货币的。与之前的架构相比,最大的特点就是增加了一个网关控制,实际上就是增加了对安全保密的需求支持,并且通过数据审计加强对数据的可靠性管理。


3.0架构中,实际上可以看成是一套框架,通过对框架的配置和二次开发可以适应各行各业的需求,比如图中的可插拔共识,意思就是共识机制不是固定的,而是可以通过用户自己去选用配置。



二、区块链分类

 

1. 根据网络范围

可以划分为公有链、私有链、联盟链。

(1)公有链

所谓公有就是完全对外开放,任何人都可以任意使用,没有权限的设定,也没有身份认证之类,不但可以任意的参与使用,而且发生的所有数据都可以被任意查看,完全的公开透明,比特币就是一个公有链网络系统,大家在使用比特币系统的时候,只需要下载相应的软件客户端,创建钱包地址、转账交易、挖矿等操作,都可以自由的使用。


公有链系统由于完全没有一个第三方管理,因此依靠的就是一组事先约定的规则在进行,这个规则要确保每个参与者在不信任的网络环境中能够发起可靠的交易事务。通常来说,凡是需要公众参与,需要最大限度保证数据公开透明的系统,都适用于公有链,比如数字货币系统、众筹系统、金融交易系统等。


这里说一个注意点,在公有链的环境中,节点数量是不固定的,节点的在线与否也是无法去控制的,甚至节点是不是一个恶意节点也不能保证。我们在上述章节中讲解区块链的一般工作流程的时候,提到过一个问题,在这种情况下,如何知道数据是被大多数的节点写入确认的?实际上在公链环境下,这个问题没有很好的解决方案,目前最合适的做法就是通过不断的去互相同步,最终网络中大多数节点都同步一致的区块数据所形成的链就是被承认的主链,这也被称之为是最终一致性。


(2)私有链

这是与公有链相对的一个概念,所谓私有就是指不对外开放,仅仅在组织内部使用的系统,比如企业的票据管理、账务审计、供应链管理等,或者是一些政务管理系统。私有链在使用过程中,通常是有注册要求的,也就是需要提交身份认证,而且具备一套权限管理体系。


有朋友可能会有疑问,比特币、以太坊等系统虽然都是公链系统,但如果将这些系统搭建在一个不与外网连接的局域网中,这个不就成了私有链了吗?从网络传播范围来看,可以算,因为只要这个网络一直与外网隔离着,就只能是一直自己在使用,只不过由于使用的系统本身并没有任何的身份认证以及权限设置,因此从技术角度来说,这种情况只能算是使用公链系统的客户端搭建的私有测试网络,比如以太坊就可以用来搭建私有链环境,通常这种情况可以用来测试公有链系统,当然也可以适用于企业应用。


在私有链环境中,节点数量和节点的状态通常是可控的,因此在私有链环境中一般不需要去通过竞争的方式来筛选区块数据的打包者,可以采用更加节能环保的方式,比如在上述共识机制的介绍中提到的POS (Proof of Stake 权益证明)DPOS(DelegateProof of Stake 委托权益证明)PBFT(Practical Byzantine FaultTolerance 实用拜占庭容错算法)以及等等。


(3)联盟链

联盟链的网络范围介于公有链和私有链之间,通常是使用在多个成员角色的环境中,比如银行之间的支付结算、企业之间的物流等等,这些场景下往往都是由不同权限的成员参与的,与私有链一样,联盟链系统一般也是具有身份认证和权限设置的,而且节点的数量往往也是确定的,对于企业或者说机构之间的事务处理很合适。联盟链并不一定要完全的管控,比如政务系统,有些数据可以对外公开的,则可以部分开放出来。


由于联盟链一般是使用在明确的机构之间,因此与私有链一样,节点的数量和状态也是可控的,并且通常也是采用更加节能环保的共识机制。


2. 根据部署环境

(1)主链

所谓主链,也就是部署在生产环境的真正的区块链系统,软件在正式发布前会经过很多内部的测试版本,用于发现一些可能存在的BUG,并且用来内部演示以便于查看效果,直到最后才会发布正式版。主链,也可以说是由正式版客户端组成的区块链网络,只有主链才是会被真正推广使用的,各项功能的设计也都是相对最完善的。另外,有些时候,区块链系统会由于种种原因导致分叉,比如挖矿的时候临时产生的小分叉等,此时将最长的那条原始的链条称之为是主链。


(2)测试链

这个很好理解,就是开发者为了方便大家学习使用而提供的测试用途的区块链网络,比如比特币测试链,以太坊测试链等,当然了,倒也不是说非得是区块链开发者才能提供测试链,用户也可以自行搭建测试网络。测试链中的功能设计与生产环境中的主链是可以有一些差别的,比如主链中使用工作量证明算法进行挖矿,在测试链中可以更换算法以更方便进行测试使用。


3. 根据对接类型

(1)单链

能够单独运行的区块链系统都可以称之为是单链,例如比特币主链、测试链;以太坊主链、测试链;莱特币的主链、测试链;超级账本项目中的Fabric搭建的联盟链等,这些区块链系统拥有完备的组件模块,自成一个体系。


大家要注意了,对于有些软件系统,比如基于以太坊的众筹系统或者金融担保系统之类,这些只能算是智能合约应用,不能算是一个独立的区块链系统,应用程序的运行需要独立的区块链系统的支撑。


(2)侧链

侧链是属于一种区块链系统的跨链技术,这个概念主要是由比特币侧链发起的,随着技术发展,除了比特币,出现了越来越多的区块链系统,每一种系统都有自己的优势特点,如何将不同的链结合起来,打通信息孤岛,彼此互补呢?


侧链就是其中之一的技术。以比特币来说,比特币系统主要是设计用来实现数字加密货币的,且业务逻辑也都固化了,因此并不适用于实现其他的功能例如金融智能合约、小额快速支付等,然而比特币是目前使用规模最大的一个公有区块链系统,在可靠性、去中心化保证等方面具有相当的优势,那么如何利用比特币网络的优势来运行其他的区块链系统呢?


可以考虑在现有的比特币区块链之上,建立一个新的区块链系统,新的系统可以具备很多比特币没有的功能比如私密交易、快速支付、智能合约、签名覆盖金额等,这些新的功能的使用又通过比特币网络创造更多的其他应用,并且能够与比特币的主区块链进行互通,简单的说,侧链是以锚定比特币为基础的新型区块链,锚定比特币的侧链,目前有ConsenSysBTCRelayRootstockBlockStream的元素链等。


大家要注意,侧链本身就是一个区块链系统,并且侧链并不是一定要以比特币为参照链,这是一个通用的技术概念,比如以太坊可以作为其他链的参照链,也可以本身作为侧链与其他的链去锚定。实际上,抛开链啊网络啊这些概念,就是不同的软件之间互相提供接口,增强软件之间的功能互补,我们看下侧链的示意图:


通过这个简单的示意图,我们可以看到,区块链系统与侧链系统本身都是一个独立的链系统,两者之间可以按照一定的协议进行数据互动,通过这种方式,侧链能起到一个对主链功能扩展的作用,很多在主链中不方便实现的功能可以实现在侧链中,而侧链再通过与主链的数据交互增强自己的可靠性。


(3)互联链

曾经我们的计算机是不联网的,所有的软件都是单机运行的,大家以为计算机也不过如此,就是能够做点办公,玩玩游戏之类而已,后来有了互联网,各种好玩的、强大的应用雨后春笋般冒出来,如今我们的生活可以说几乎已经离不开互联网了,仅仅一个互通互联,带来的能量是如此的巨大。


区块链也是这样,目前各种区块链系统不断涌现,有的只是实现了数字货币,有的实现了智能合约,有的实现了金融交易平台,有些是公有链,有些是联盟链,等等等等,这么多的链,五彩缤纷,功能各异,各种新奇的应用,脑洞大开的设想,不断的在刷新着更新颖的应用玩法。


那么,这些链系统如果能够彼此之间互联会发生些什么样的化学反应呢?与传统软件不同的是,区块链应用拥有独特的性质,比如数据不可篡改性、完整性证明、自动网络共识、智能合约等,从最初的数字货币到未来可能的区块链可编程社会,这些不单单会改变生活服务方式,还会促进社会治理结构的变革,如果说每一条链都是一条神经的话,一旦互联起来,就像是神经系统一般,将会给我们的社会发展带来更新层次的智能化。


另外一个,从技术角度来讲,区块链系统之间的互联,可以彼此互补,每一类系统都会有长处和不足之处,彼此进行功能上的互补,甚至可以彼此进行互相的验证,可以大大的加强系统的可靠性以及性能。


---End---


未完待续,下一节将介绍《创世元灵:一切源自比特币》。欢迎持续关注“乐生活与爱IT”。在这个公众号平台上,之前也分享过和区块链相关的如下文章:


Gartner:2018年十大战略科技发展趋势

雄文:知耻而后勇,数字代币和区块链技术的未来 (修改版-20180213)

谁将会是AWS的颠覆者? (完整版)

比特币到底是货币资产,还是骗局?

比特币能成为人类未来的货币吗?

赠书 | 金融区块链的挑战

白话区块链 之1: 为什么账本要这么记?

白话区块链 之2: 区块链技术理念

白话区块链 之3: 区块链技术栈


对《白话区块链》这本书感兴趣的朋友,可以直接在京东等网店购买:

http://item.jd.com/12236097.html#comment


---


微信公众号平台"乐生活与爱IT"在目前阶段,主要是分享软件定义存储(SDS),及VMware vSAN相关的文章,偶尔也会分享虚拟化、云计算、大数据、人工智能、IoT、区块链等IT类文章,甚至生活类的好文章。欢迎投稿,特别是原创文章。如果原创文章属于首次发布,根据质量和阅读量的不同,能获得20~500元的稿费。我的QQ号:9269216另外,如果还有赞赏收入,作者可获得60%


欢迎对SDS感兴趣的朋友,加入软件定义存储讨论 QQ群:122295009,可下载原创的一些文章,及其他有参考价值的文档。可直接搜索群号,或者扫描如下二维码:


同时,欢迎您加入 "开放讨论群-SDS&虚拟化" 微信群,并邀请其他对SDS和虚拟化感兴趣的朋友加入此微信群。可以通过添加如下管理员之一的微信号,建议添加管理员时,告知你的公司名和姓名,方便备注保存。

sdg8848

libo9538

yangzhuan

dts0103

欢迎您通过扫描关注微信公众号:“乐生活与爱IT”。


关注后,可以通过点击左下角的文章目录,通过输入三位数(记住!是三位数,目前第一位是0或者1)详细了解如何查看历史文章。


点击左下角“阅读原文”,可以跳转到前一篇《白话区块链 之3: 区块链技术栈


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存