查看原文
其他

大白技术论 | Sharding --- 给拥堵的以太坊做个 “切片手术”

Allen 白话区块链 2019-04-09

白话区块链

从入门到精通,看我就够了!

你是否在看区块链项目的白皮书时,常常跳过占比部分最多的技术部分?
你是否在参与项目讨论时,常常因为似曾相识却不明所以的术语,而难以加入?


相信你也明白,或许这些看不懂又超高频出现的技术、架构,正是区块链项目中最有价值的一部分,如何理解这些技术内容也是迟早要做的功课。


为此,白话区块链上线了 “大白技术论” 栏目,将这些最为常见的区块链技术,尽可能深入浅出地解释给大家,帮助大家去明白是哪些底层的技术,在帮助建设和完善着区块链的世界。


友情提醒:在技术解说中,大白会尽可能地追求通俗易懂,但对于一些重要概念,如果过分追求口语化,反而会失去对它的真正理解。所以在文章中仍然会保留一些对技术的阐述。


如果阅读时,在理解上存在困难,欢迎在文章下方留言,当然也可以加入白话区块链的知识星球(链接见文末),连接更多和你一样的小伙伴们,共同成长。



区块链圈的小伙伴应该都体验过以太坊的“拥堵”了,之前风靡全球的“电子猫”Cryptokitties,直接让以太坊网络瘫痪了。比特币也是一样,转账速度非常慢,没办法达到商业使用的要求。所以比特币社区迎来了“隔离见证”,给比特币来了次“分叉”手术,从而得到了BCH(比特现金)。但是以太坊社区尝试着使用各种扩容的方法来解决这次问题,比如雷电网络(侧链),Plasma,当然还有咱们今天要聊的“分片技术“(Sharding)。

小伙伴们是不是有点懵圈啦,“分片”听起来有点像把以太坊给切片了,有点奇怪呀。少安毋躁,在聊“分片”(sharding)之前,先得给大家普及一些知识点。

首先,大家要明白什么是“节点”?

其实很简单,想象下有个盒子,你放进“输入数据”,通过这个盒子内部进行一系列的操作,得到“输出数据”。那么这个神奇的“盒子”,就是我们常说的“节点”。网络就是由无数个这样的节点,互相连接到一起。其中确定节点连接的规则,就被称为“参数”。

设想现在你的电视机和服务器连接,但是同时你也想玩PS4和XBOX,所以一台电视就和三个设备连接。所以这时候,服务器,PS4和XBOX就是三个节点,它们和电视组合在一起成为网络。

图1:电视机节点图

但是聪明的小伙伴有没有发现一个问题呢?这种网络下,你是没办法同时看电视,又去玩PS4或者XBOX的。所以这时候,就需要添加一个切换频道的“参数“,例如你按“0”,电视就会和服务器连接,按“1”,电视就会和PS4连接,如果你按下“2”,电视就和XBOX连接。添加相应的“参数”,就会让你的节点连接变得不同。

进一步延伸到我们现在所用的中心化P2P网络,其中包含中心化的服务器。想获得信息的个人会通过设备向中心化服务器发送需求,从而得到答案,例如我们在百度搜索一样。

图2:中心化网络

但是这种中心化的网络中,有个最大的问题就是任何信息都依赖于中心化的服务器,也就是说无时无刻,服务器都得需要处于工作状态。并且,由于整个网络是中心化的,安全也是非常重要的问题。服务器中存储着很多非常敏感和重要的用户信息,一旦被黑客入侵,将造成不可预计的后果。

为了解决这些问题,一种不同的网络架构出现了,这就是我们链圈一直在谈的去中心化P2P网络。

图3:去中心化P2P网络

再进一步说,去中心化P2P网络和支付的结合,造就了我们的数字货币世界。当然,以太坊也是其中一员。但是在没有中心化系统的情况下,大家怎么才能知道某个转账发生了呢?假设小明给小红转3以太,距离小明最近的节点会知道这个事情,然后再通知距离他们最近的节点,之后不断地传递出去,直到每个节点都知道这个事情。

在以太坊中,每个节点就可以被认为是一台电脑,我们常说的“挖矿”其实就是进行验证的节点。并且,每个节点都会进行各自的计算,当这些节点达成共识的时候,转账完成。按照这个想法,整个以太坊网络应该会运行地很完美。但是问题来了,由于以太坊太火爆了,使用的人也越来越多,网络中的转账也逐渐增长。

图4:以太坊转账图表

当然,这对于以太坊社区来说,是件好事,毕竟越来越火了嘛。但是,达成共识所需要的计算量却指数般增长。并且由于众筹的火爆,以太坊网络的节点数也在疯狂增加,也许小伙伴会认为,节点增加了,转账速度不就应该加快了嘛!那就too young too simple啦,以太坊网络中的共识是通过线性的方式发生的。

换句话说,前一个节点完成了计算和验证,后一个节点才能接着做,如果多出了新的节点,共识系统中就需要花更多的时间来进行计算和验证。所以,随着以太坊变得更加火,转账时间就会变得更加地慢。而且,以太坊每秒20笔的转账速度和Paypal每秒193笔,Visa每秒1667笔的转账速度比起来,被秒的连渣都不剩了。

以太坊的实用性都是个大问题,更别提它的梦想是想做一个可以承载去中心化应用的平台了。所以,以太坊扩容迫不及待。分片技术“Sharding”就是其中非常重要的一种方法,那么到底这是怎么回事呢?

假设现在有三个节点A,B,C,并且他们需要验证数据T。在传统的以太坊网络模式中,每个节点都需要分别去计算和验证整个数据T,在分片技术下,整个数据被分成3个片区:T1,T2和T3。这样地化,节点A,B,C就可以只需要并行验证数据T1,T2和T3。是不是就节省了大量的时间呢?

如果我们把这个例子放到整体的数据库中,其实就是把数据库中的1,2子列和3,4子列分开放到两个数据库中。

图5:数据库分片

应用到区块链中,根据我们之前所说,以太坊网络中所有的节点对每个转账都需要进行计算和验证,这也是导致整个过程很慢和拥堵的原因。如果引入分片技术,我们可以将以太坊网络的状态根部(Global Root),分成很多的“分区”(Shard)状态根部,同时每个“分片”(Shard) 都会有自己的状态。

图5:以太坊分片

每个账号都在一个分片中,并且只有在相同分片中的账号才能互相交易。试想下,以太坊就好象被分割成了几千个小岛,每个岛都可以做自己的事情,岛上的居民可以互相交流并且转账。但是如果他们想和其他岛的人联系,就需要使用某种协议。

正常情况下,整个区块链网络只有一个交互层,但是以太坊想改变这个想法,使用两层交互。第一层,或者称为底层,每个“分片”(shard)都有他们自己特定的转账信息。

图6:分片(shard)底层

在第一层中,每个转账都会有自身独特的身份信息(ID),并且会显示属于这个分片ID的转账群(transaction group)。那么在第一层之上的第二层,又会是怎么样的结构呢?

图7:分片(shard)上层

在上层中,包含着两个基本信息,一个是状态根部信息(state root),还有一个就是转账群体的根部信息(txgroup root)。状态根部信息代表整个区块链状态,根据之前所说,这个状态被分成了很多的分片状态(shard state)。转账群的根部信息包含了在这个区块中所有的转账群体。

综上所述,分片(shard)技术就是为了要很多比计算同步进行,提高整体的性能。所以如果以太坊网络允许各种随意的跨片沟通,那么对于分片来说,就意义不大了。

还记得我们之前所说的“孤岛”理论吗?以太坊不同分片之间想要互相交流,需要通过某种协议,这就是“收据”协议。

图8:分片技术转账收据

每个分片中,都会有它自己独特的转账收据。而这些收据都会存储在分布式的分片记忆储存中,这些收据可以被其他分片看到,但是却不能更改。

图9:分片技术跨片区转账

例如片区M将收据证明发到片区N作为转账证明,在N收到这个转账之后,就会发送回复证明到分片M作为转账记录,并且明确这笔转账的收据,为以后有别的操作做好准备。

如此看来,分片技术(shard)真的是以太坊扩容的救星了,那么是不是我们就高枕无忧了呢?其实不完全是,在分片技术(shard)的实施过程中,我们还有很多的问题。

比如我们需要建立某种机制,要能明确地知道哪个节点在运行哪个片区,而且这个机制还需要非常有效地保证同步和安全性。在运行分片之前,PoS(权益证明)共识算法还需要先进行实施,但是现在以太坊还处在PoW(计算量证明)的过程中。不同片区的节点,也需要有适合的共识机制。

不管怎么说,以太坊社区已经逐渐明白,要想有更好地发展,扩容是刻不容缓。然而分片技术(shard)对以太坊的扩容作用是举足轻重的。当然,很开心地看到最近知名的项目Zilliqa,已经很好地应用了分片技术,大幅地提高了以太坊网络的速度。非常期待更多的优质项目,可以通过分片技术来为以太坊做出贡献。


——End——


『声明:本文是作者Allen之独立观点,不代表白话区块链立场,亦不构成任何投资意见或建议。』



公众号后台回复 0 查看 “区块链从0到1专题”;回复 1 查看“白话区块链历史精华”
查看更多——

喜欢请给我们点赞哦,谢谢 

(●—●)

查看历史

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

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