[Daozy]区块链—分片技术(Sharding)
由于比特币以及以太坊网络每秒处理的交易数量有限,亟需增加交易吞肚量,导致全网的系统亟需通过扩容实现。
什么是扩容呢?
扩容,本意是可以通过数据库拆开成小段,改变网络内部各步骤之间的验证方式实现分片,增加吞吐量。由此可见,分片是一项复杂的工作,现在很多项目为了实现扩容,采用分片技术。
分片是一种基于数据库分成若干片段的传统概念扩容技术,它将数据库分割成多个碎片并将这些碎片放置在不同的服务器上,在底层公有链的系统内,网络上的交易将被分成不同的碎片,其由网络上的不同节点组成。因此,只需要处理一小部分输入的交易,并且通过与网络上的其他节点并行处理就能完成大量的验证工作。将网络分割为碎片会使得更多的交易同时被处理和验证,因此,随着网络的增长,区块链处理越来越多的交易将成为可能。但这极其具有挑战。
image举个恰当的比喻,现有的区块链就像一条繁忙的高速公路,这条高速公路的收费站暂时只有一个收费出口,在这样的布局下,车辆稍微增加,交通很容易堵塞,印象最深的是Kitty猫的游戏,游戏玩家增多,导致网络拥堵。若是减少高速拥堵的情况,而实现一个基于分片技术的区块链就像在高速公路上增加N个收费口,它将极大地提高汽车通过收费站的速度。因此,分片技术将带来巨大的差异,并显著提高区块链的交易速度。
基于分片技术的区块链的实现底层公链有很多好处。
一是区块链上处理交易的速度变成了每秒上千笔甚至更多,这可以改变人们对加密货币作为支付方式效率的看法;
二是改善交易吞吐量将会给去中心化的系统带来使越来越多的用户和应用程序,而这将反过来促进区块链的进一步采用,也使挖矿变得更有利可图,同时也能吸引更多不同人士加入到公共网络上的节点,从而形成一个良性循环。
另一个额外的好处是,分片技术可因为验证单笔交易的处理量减少了,以帮助降低交易费用,节点盈利的同时减少收取的费用,在现实的区块链世界中,将降低节点费用与提高交易处理能力结合,底层公有链更具吸引力。这些积极的趋势所持续的时间越长,我们就会越能看到更多的主流的加密技术和区块链应用程序的出现。
但很多人就会问了,那么多项目都说分片,我们怎么分辨谁优谁次?我们主要还是看技术逻辑,以及项目本身希望做到多大体量。分片技术如何实现呢?这其实是一个开放式的问题,问题的答案不是唯一正确的。我们思考项目本身的逻辑应该是:项目说所的体量大小+项目技术框架+项目代码的查验,这是相当专业的技术活。
在我们还没有领会这些技术时,我们需要深度的逻辑分析能力。分片技术的本质是通过改变网络内部各步骤之间的验证方式来增加吞吐量。各步骤之间验证范式可以采用链上验证,也可以采用链下验证的方式,没有统一。对于未能领会真正要领以及擅长编码的我们来说,还是雾里看花,花非花。(持续学习,才是王道)分片技术独特在于其他解决扩容的链上技术的关键特性,就是它可以进行水平扩容,也就是说,网络的吞吐量随着挖矿网络的扩展而增加,这种特殊的特性可能使它成为推动区块链技术被快速采用的理想技术。
现有区块链的扩容有哪些问题亟需解决?
1、每秒内交易数量有待大幅度增加,至少满足每秒能处理约8000笔交易;
2、由于底层公有链上建立大量及复杂的DApps,在原本迟缓的交易基础上,更是雪上加霜;
由于区块链是分布式网络,用户每产生一笔交易,需得到全网的节点全部验证,数据才能打包入块,无疑这是在增加链上承载的负担;因此,分片,需要分而治之。
我们一起看下分片技术的策略,今天主要分享的是相关概念,但是我们有更细分的方法来实现分片策略,如网络分片和交易分片,以及状态分片等,通过网络和交易分片,区块链节点的网络被分割成不同的碎片,每个碎片都能形成独立的处理过程并在不同的交易子集上达成共识。通过这种方式,我们可以并行处理相互之间未建立连接的交易子集,通过提高数量级显著提高交易的吞吐量。
另一方面,在当今的主流底层公链上,所有公共节点都承担着存储交易、智能合约和各种状态的负担,这可能使其在为了获得更大的存储空间而进行巨大的花费,以维持其在区块链上的正常运转。
为了解决这一问题,有一种可被称为状态分片的可行方法已被提出,这一技术的关键是将整个存储区分开,让不同的碎片存储不同的部分;因此,每个节点只负责托管自己的分片数据。而不是存储完整的区块链状态,因此,分片技术相当具有复杂性,尽管所有不同形式的分片技术都可能非常直观。但通过对技术逻辑的解读,我们可以看到这一方法的复杂性和潜在的挑战,从逻辑分析,分片技术的其中一些挑战是很容易克服的。
而另一些则不然,一般来说,网络和交易分片更容易实现。而状态分片则要复杂得多,为什么说状态分片会复杂很多呢?通过链上存储状态的方式,减轻链上承载的负担,虽然是简简单单的一个步骤,从逻辑分析,这需要准备很多的工作。但也有很多项目,所采用的方式不一致。有的分层处理,有的是链上链下分开处理。对于不同的分片机制,我们会明确地讨论它们本身逻辑上所面临的一些挑战,以及它们的可行性。
首先,我们聊下网络分片,网络分的第一个也是最重要的挑战是创建碎片,开发者需要开发一种机制来确定哪些节点可以按照安全的方式保留在哪些碎片中,这样就能避免那些控制大量特定碎片的人所发起的攻击。
打败攻击者的最佳方法(至少在大多数情况下)就是建立随机性,通过利用随机性,网络可以随机抽取节点形成碎片,这样一种随机抽样的方式可以防止恶意节点过度填充单个碎片。但是,我们如何建立随机性呢?最容易获得公共随机性的来源是区块,例如比特币的挖矿原理,所谓记账实际上是随机数的碰对。
蒙对了,账本上增加一笔,矿工同时获得一笔记账奖励。这在区块中所提供的随机性是可被公开验证的,并且可以通过随机提取器中提取统一的随机比特,
然而,简单的将随机机制节点分配给网络是不够的,我们还必须要确保网络的一个碎片中不同成员意见的一致性,这可以通过pow这样的共识协议来实现。其实,网络分片本质是基于pow的挖矿机制,将事件机状态拆分若干个小部份,再继续由pow共识机制验证确认,打包入块,这个方法未必是最优的策略,其实施过程中,网络是一个因素。
系统内部也会起到很大作用。个人意思是,网络分片,会受制于很多因素,一旦内部过程繁琐,上层应用繁多,也有可能会出现堵塞。
image其次,我们看看交易分片。交易分片听起来稍微简单一些,从每笔交易上拆分分片。假设,在一个类似于比特币的系统中引入交易分片,(注意,比特币是采用账本机制,而不是采用智能合约机制。我们假设网络已经形成碎片,用户发送一笔交易,每一笔交易有两个输入和一个输出,用户发送一笔交易,每一笔交易有两个输入和一个输出,那么,该笔交易将如何分配给一个碎片呢?最直观的方法是根据交易哈希值的最后几位来决定碎片。
举个例子,如果哈希值的最后一个比特是0的话,那么交易将被分配给第一个碎片,若不是0,则它被分配给第二个碎片(假设我们只有两个碎片)。这允许我们在单个碎片中验证交易,但是,如果用户是恶意的,他可能会创建另一笔具有两个相同输入但不同输出的交易。对,说的就是一个双花交易,第二笔交易将有一个不同的哈希值,因此,这两笔交易就可能形成不同的碎片,
然后,每个碎片将分别验证接收到的交易,同时忽略在另一个碎片中验证的双花交易。为了防止双花问题,在验证过程中,碎片将不得不进行相互通信。事实上,由于双花交易可能会在任何碎片中出现,因此特定碎片所接收到的交易将不得不与其它的碎片进行通信,而实际上,这种相互之间的通信可能会破坏交易分片的整个目的。倘若在过程中,多添加一步身份验证,可以避免这个问题。可见,交易分片,也有其劣势。
另外,再分享下分层分片。分层,顾名思义是根据不同的层级,在各自领域做相应层级的碎片工作。现有的底层公有链上有可按几个简单的逻辑来看,如地基层,共识层(协议层),应用层,假设,每层上分别建立不同的碎片,结果会怎样?
回答这个问题时,是不是还需要考虑到其用的是什么技术?什么样的底层公链?以及其所处的网络环境?我们看待问题时,不能单一地抽离一个点,而脱离其大环境,单一看待问题,判断其好坏。可能很多人觉得是废话啊,但个人觉得,看待项目的本身,不仅需要看其成功经验,也需要看白皮书内的逻辑是否能够自洽,只看一些表面的结果数据,而不看其推理过程,远远不够,底层公链本身的技术就相当复杂。
转自:http://www.sohu.com/a/230974728_100142187
有兴趣的朋友,请关注微信公众号,有机会获取平台代币:
Daozy社区公众号
进入社区开发者群微信群,有机会获取平台代币:
Daozy开发者群
进入社区贡献者微信群,有机会获取平台代币:
Daozy社区贡献者群