bitget消息:当把层级划分出来后,诸多问题就能迎刃而解。
这篇文章源于一次讨论,文章内容也是对讨论内容的整理。讨论源于一个普通的问题:区块链该不该追求效率?
问题普通却很难回答,难是基于两个相矛盾的常识:
1.分布式系统的效率无法提高:受限于分布式系统CAP定理,分布式系统很难追求高效率。
2.人们希望区块链系统能够支持需要高效率的应用。
一边是无法提高效率,一边是必须提高效率,区块链该不该追求效率?这引发了一个更基础的问题:什么是区块链技术?如果能回答清楚这个问题,也许就能回答区块链该不该追求效率。
区块链技术是开发一个区块链系统所包含的全部技术的统称,还是只指解决区块链系统中某些特定范围内问题的技术?当我们接着去回答这个问题时发现,如果把一个区块链系统「分解」成不同的层,问题就能变得清晰和有所指,也就能给出相应的答案。
一个区块链系统可以划分为四层,从下至上依次是:分布式系统层,区块链层,应用平台层,应用层。我们通常所说的区块链/公链是包含分布式系统层,区块链层,应用平台层的这样一个三层的集合。
为什么可以这么去划分区块链系统的层级?因为不管是从功能上还是从实现上,它们都可以被单独地切分出来。功能上,每一个层级要做的事情不一样;实现上,每一个层级采用的方法也不一样。
当把层级划分出来后,诸多问题就能迎刃而解。因这些问题而起的种种困惑或矛盾,其实是把需要在不同层级做的不同的事情混为一谈了。
那么,这样的一个四层结构,每一层具体在做什么,为整个区块链系统提供什么?每一层又该如何去实现,实现的过程中可否牺牲去中心化?本文将以问答的形式展开分析。
注:本文是开放式的,观点仅为探讨,也欢迎大家一起探讨。
01
「分布式系统」层
第一个问题:分布式系统层是什么?要做什么?
分布式系统层是区块链系统最底层的基础设施,所有其他的架构都要建筑在它之上。分布式系统层所做的工作非常简单,为上层提供一个可以被使用的分布式系统。
构建分布式系统所需要的分布式技术是一种已经相对成熟的技术,分布式系统层可以直接使用这些技术。
分布式系统层不用追求效率,因为它只需要为上层提供一个底层的分布式系统;它也因其分布式的结构而无法有效的提升效率。
第二个问题:分布式系统层提供什么?
区块链系统是以分布式系统为出发点的,正是分布式系统把自己的优点赋予了使用自己的区块链,才让区块链成为一种充满可能性的发展方向。但归根结底,分布式系统提供两种东西:
1分布式的特征
2.分布式的资源
具体而言是如下几点:
1.分布式系统能够为应用提供分布式的特征/功能,比如去中心化。
2.分布式系统可以让分布式的资源变得可用:每个个体和他们拥有的各种可以连接到网络的设备、数据等都是分布式资源;机构数据、物联网设备等等也都是分布式资源。
3.分布式系统能够为应用提供更便宜的可用资源。
注:本文的分布式资源指什么
分布式资源是指放入分布式系统中的、可供交易的资源,比如计算能力、存储空间、物联网数据、分布式服务等等。
在区块链系统中,分布式资源需要利用「挖矿」提供的分布式账本才能被记账,从而实现交易,进而能够被使用。
区块链「挖矿」需要使用分布式系统提供的CPU、存储等资源,这些资源是为账本服务的,均不是本文所指的分布式资源。
02
「区块链」层
第一个问题:区块链层是什么?要做什么?
在分布式系统层和应用平台层之间,是区块链层。区块链层通过设计和选择不同的账本结构、共识机制、激励机制等给分布式系统提供运转的动力,让应用平台层可以使用分布式系统层的特征和资源。
区块链层也不应承担追求效率的责任,它更多的是提供一套机制让分布式系统可用或可运转,最好不要在此处破坏其分布式的特征。
此处破坏后,在上层无法通过设计弥补回来;而在后期对此层做出修改也相当困难。
第二个问题:区块链层提供什么?
区块链层向应用平台层提供一个能够满足特定需求的分布式的账本系统或者分布式的资源系统。
1.分布式的账本系统是区块链目前最主要的应用方向。我们通常所说的区块链应用都是对该账本系统的一种使用,这种账本具有去信任、去中心化、价值传递等等特征。
2.分布式的资源系统是指提供分布式系统层里的资源,这种资源必须与分布式账本系统结合起来使用,因为只有通过账本实现资源的可交易,才有可能建设出一个资源的提供、使用生态。
第三个问题:设计区块链层要考虑什么问题?
在进行区块链层的设计之前,要先弄清这个区块链系统的应用场景或者愿景,根据需求来选择不同的机制和技术。
这是一个全新的需要去开拓的领域,也是一个艰难的领域。它不仅需要包括经济学、社会学、计算机科学等方面在内的知识,还需要能够把这些知识融合的应用起来,比如技术要能支持和保障机制。
设计区块链层可以从如下三个角度来思考:
1. 为应用提供什么样的分布式账本;为应用吸纳什么样的资源到分布式系统中(愿景设计)。
2.如何吸引更多的算力和存储来保障分布式账本的安全;如何吸引更多、更好的资源加入到分布式系统中,建成资源生态(机制设计)。
3.如何实现分布式账本;如何提供分布式资源(技术设计)。
第四个问题:「区块链」可以指什么?
在不同的语境中,区块链也许可以指如下三种不同的主体。
1.指分布式系统层与应用平台层之间的区块链层,它驱动分布式系统,向应用平台层提供分布式账本或分布式资源。
2.指包含分布式系统层和区块链层的一个两层系统,它是一个面向应用平台层的、满足应用平台层需求的区块链底层系统。
3.指包含分布式系统层、区块链层、应用平台层的一个三层系统,它是一个面向应用的、满足应用需求的、可能具备一些分布式特征也具备一些中心化特征的系统。这个三层系统也就是我们通常所指的公链/区块链系统,公链的研发工作也包含了全部三层的设计和实现。
03
「应用平台」层
第一个问题:应用平台层是什么?要做什么?
应用平台层在区块链层之上,应用层之下,所有的应用都搭建在它的上边。应用平台层为应用服务。
它通过提供一系列的解决方案,让底部两层提供的分布式账本和分布式资源能够被应用使用,且满足应用在使用时的具体要求。
如果区块链系统要追求效率,效率的问题应该放在这一层解决。
此外,应用平台层还要根据需求,满足应用在安全、隐私等等方面的要求,同时还要能更好地支持应用的实现,比如让开发工作更简单、让应用运行更便宜等等。
应用平台层也需要根据该区块链系统的应用场景或愿景,进行更多特殊的设计来更好地服务于特定的需求。
第二个问题:应用平台层提供什么?
应用平台层提供的,也就是我们要求一个区块链系统提供的。本质上讲是对分布式账本和分布式资源的一种封装,但从封装完的模样来看,是我们希望这个区块链系统实现的功能。
比如一种特殊的账本,一台世界的计算机,一个分布式的存储系统,一个让分布式存储的数据可以被应用的世界的计算机……
第三个问题:目前阶段应用平台层的发展方向有什么?
目前区块链领域的很多工作都是在应用平台层上的工作。主要有如下几个方向:
1.提高效率。采用的方法包括分层、分片等等。
2.简化开发。采用的方法包括模块化设计、完备的SDK工具包等等。
3. 提供隐私,包括账本的隐私和资源的隐私。采用的方法包括安全多方计算、零知识证明等等。
4.连接底层的不同区块链系统,让应用可以使用多个系统。采用的方法包括跨链、原子交换等等。
5.实现特殊愿景下的特殊系统设计。
附:关于去中心化的一点思考
在区块链的世界中,人们不喜欢中心化,也把是否去中心化当作评价一个区块链系统的指标;但另一方面,一些区块链应用场景需要效率。于是很多项目坚持自己是在未牺牲去中心化的前提下实现的大幅度的效率的提升。
但如果我们理解分布式系统是低效率的,只有中心化才能带来效率(如今诸多区块链系统的效率的大幅提升,其实是借助中心化的方式来完成的),同时理解在一些场景中,并不需要场景中的所有元素都去中心化时,也许就能够重新看待区块链的去中心化问题。
而如果能够重新看待这个问题,项目也许就可以认真的去思考该在什么地方保留去中心化,又可以在什么地方使用中心化来提升效率,而不是陷于某种困境,甚至在不该中心化的地方采用了中心化的方法。
这也是对区块链系统进行分层,讨论不同层级的功能的一个原因。层级可能有助于我们了解可以在哪儿做中心化的处理,在哪儿则不行。
直白来讲,如果一个区块链系统在某个特征上必须去中心化,而在该特征上又要求很高的效率支持,又无法把该特征拆解为保持去中心化和可以中心化的不同组成部分,那么该区块链系统无法建立;如果一个区块链系统在必须去中心化的特征上用了中心化的方法,即使在别的地方都用的去中心化,它也是一个伪区块链系统。
04
「应用」层
第一个问题:应用层是什么?
应用层是搭建在应用平台层之上的、使用区块链系统的所有应用,它不仅仅指DApp。
第二个问题:什么样的应用需要使用区块链?
什么样的应用需要使用区块链与区块链能够提供什么是相对应的,包含两类:
1.需要使用分布式账本的应用。
2.需要使用分布式资源的应用,或者使用分布式资源可以极大的降低成本的应用。
不同应用场景或不同愿景的需求决定了整个区块链系统的设计与实现。
1.需求决定了最底层的分布式系统连接的是什么资源,进而影响其对数据结构和数据处理方式等等的选择。
2.需求决定了区块链层需要提供什么样的分布式账本和共识,进而决定其账本、机制、技术等等的选择。
3.需求决定了应用平台层要满足应用的哪些需求,比如效率、去中心化、安全、隐私等等,进而影响其具体的平衡策略和技术路线。
第三个问题:可以如何挖掘使用区块链的应用,甚至是一个为应用服务的区块链系统?
也许可以从两个不同的方向去思考。
1.从分布式系统出发
a.分析分布式账本的特征,再思考这些特征可能产生什么应用场景,然后根据应用场景来设计应用或者是设计为应用服务的区块链系统。
b.分析分布式系统可以提供哪些资源,再思考这些资源可能产生什么应用场景,然后根据应用场景来设计应用或者是设计为应用服务的区块链系统。
2.从现有需求出发
a.有哪些现有需求可以因为分布式账本的特点而被满足?是否需要设计一个区块链应用满足这类需求?如果没有支持这类应用的区块链系统,是否需要设计一个为应用服务的区块链系统?
b.有哪些现有需求可以通过使用由分布式账本支持的分布式资源而被满足?是否需要设计一个区块链应用满足这类需求?如果没有支持这类应用的区块链系统,是否需要设计一个为应用服务的区块链系统?
05
写在最后
一个区块链系统可以问自己的问题
基于对区块链系统的分析,也许可以提出一些问题来理解和理清一个区块链项目(特指区块链系统项目,不包含区块链应用项目):
1.出发点是利用区块链去解决特定问题,还是提供一个基本通用的区块链系统,还是为区块链系统提供某种解决方案?
2-1.如果是利用区块链,是利用分布式账本,还是利用分布式资源?为什么必须利用区块链?
2-2.如果是利用区块链,为什么现有的区块链系统不满足需求?该类问题的解决重要到需要设计一个专门的区块链系统吗?
3-1.如果是提供区块链,是提供分布式账本,还是提供分布式资源?
3-2.如果是提供分布式账本,该账本的应用场景是什么?需要该账本的应用能否支撑起这个区块链系统的运转?
3-3.如果是提供分布式资源,该资源的应用场景是什么?需要该资源的应用能否支撑起这个区块链系统的运转?能否支撑起资源的质量和数量?
4-1.如果是为区块链系统提供某种解决方案,它解决的是哪一类问题?
4-2.如果是为区块链系统提供某种解决方案,该解决方案可以在不同的区块链系统通用吗?这种解决方案需要什么样的资源支撑,能够获得这种支撑吗?