图文详解以太坊的节点和分片(三)

上一讲中,我们简单提到了什么是分片。今天的文章我们会详细介绍以太坊的分片技术。(Finally!)

什么是分片?

分片是数据库系统中抽离而来的一个词。我们先来介绍下数据库中分片的概念。假设你的网站上有大量的数据库存储,这不仅会导致数据搜索速度减慢,还会影响可扩展性。这种情况下我们可以做些什么呢?

能不能把数据横向切分成小的数据表格,并把他们存储在不同的数据库服务器中?就比如这样:

你或许会问为什么要进行横向切分而不是垂直切分呢?这是由于数据表格本身的设计导致的。

假设这就是我们的主数据表:

我们现在进行垂直切分。

注意到了吗?垂直切分后会把整个数据库表切割成两个完全不相干的数据表格(A和B是一个;A+B和A-B是一个)。

但是横向切分的话,还是同一个由A, B, A+B, A-B构成的数据库,只不过每个数据库中的数据存量减少了。这些小的数据库就是大的数据库的分片。每一个分片的表格结构都相同。

区块链中的分片

上一讲中,我们提到过以太坊共识的问题在于所有的节点都必须对同一笔交易进行计算和确认。整个计算过程又慢又繁琐。分片技术可以如何改善这个问题呢?

现在我们来设想一下:整个以太坊区块链就是一个“万国领土”(global state),可以分割给所有人。这个万国领土的默克尔树根会切分成大大小小不同的分片根,每一个分片根都拥有自己的国度。让我们以默克尔树的形式把这些国度表现出来:

这就是整个万国领土切分成多个小国的简单结构图。现在让我们来看一下内部机制。

分片启动后会发生什么呢?

万国领土被分割成多个分片

每一个独特的账户都代表着一个分片

只有同一个分片里的账户能相互转账。

在以太坊的开发者大会中,Vitalik是这样解释分片的:

假设以太坊被分割成成千上万个小的岛屿。每个岛屿都是自治的。每个岛屿都有自己的特色(features),岛屿上的每个人都可以跟其他岛民互动,并且随意享用这个岛屿的特色。如果你想跟其他岛屿互动,就必须使用某种特定的协议。

(注:feature是指一个系统的功能,特点,是一种它可以提供的东西)

那么问题来了,这种分片技术对区块链有什么影响呢?我们先来看一下比特币和以太坊中一个正常的区块长什么样子?

一个区块中由区块头和包含所有交易的区块主体构成。所有交易的默克尔根都存在在区块头中。

现在让我们来自问一下:比特币真的需要区块吗?真的需要区块链吗?中本聪本可以把上一笔交易的哈希记录在一笔新的交易之中,用这种简单的方式就可以构成一条交易链(transaction chain)。

把交易都记录在区块中的目的是为了创造一层交互,让整个过程更加可扩展。以太坊想做的是实现两层交互。

第一层

图片来源:hackernoon

第一层是交易组。每一个分片都有自己的交易群。交易群包括交易群头和交易群主体。

交易群头包括左右两个部分。左侧包含的信息如下:

分片ID:交易组所属的分片ID(图片中为43)

前状态根:这是交易执行前分片43的根状态。

后状态根:交易执行后分片43的根状态。

右侧信息如下:

右侧是随机选取的需要在分片内确认交易的确认者。

交易组主体

包含了分片中所有交易的ID。

第一层的特征

每一笔交易对应着它所属分片的ID。

某特定分片中的一笔交易表明这笔交易的发起和接收账户都在这个特定的分片中。

交易群组中的交易只存在于分片ID之中,具有特定的前后状态根。

现在我们来看一下第二层交互

图片来源:hackernoon

别跑!其实非常简单。

这就是一般的区块链结构,只不过现在包括两个主要的根:

状态根(state root)

交易群根

状态根代表了整个以太系统的根。我们之前提到过,这个系统被切分成大大小小的分片,对应着它们各自的分国度。

交易群根包含了某特定区块里所有的交易群。

第二层的特征

第二层是一个简单的区块链,记录交易群而不是交易本身。交易群合法的唯一条件是:

前状态根与整个系统的分片根相符。

交易群组中的所有签名都已经得到了确认。

交易群进入区块后,整个系统的根就变成了特定分片ID的后状态根。

那么跨分片通信是怎么实现的呢?还记得之前的岛屿比喻吗?

分片就相当于岛屿。它们如何互相联系呢?记住,分片的目的是让很多平行交易同时发生来提高性能。如果以太坊允许任意的跨分片交流,那么整个分片就毫无意义了。

因此以太坊协议要如何设计来允许跨分片通信呢?以太坊使用收据实现跨分片通信。如图所示:

图片来源:hackernoon

如你所见,每笔交易的收据只需通过这个交易群的多个默克尔根就可以轻松访问。分片中的每一笔交易都会做两件事情:

改变所属分片的状态

产生收据

数据存储在分布式共享内存中,其他分片可以看到,但是无法修改。通过数据跨分片交流如下:

图片来源:hackernoon

实行分片技术的挑战有哪些?

我们需要一种机制来知道每个节点执行了哪个分片,这种机制还要能保证系统安全又高效。

根据以太坊研究员Vlad Zamfir的说法,在实现分片之前需要以太坊需要先转到POS算法。节点之间可以互不信任,但是也需要能够达成共识。如果某笔交易分割成多个分片,并分配给节点A和节点B,节点A和B需要利用某种机制来证明自己完成了分片中各自对应的工作量。

总结

随着以太坊的进一步崛起,大都会和宁静阶段的到来,分片对以太坊越来越重要。如果以太坊想要演化成新一代的互联网,必须要解决可拓展性问题。采用分片后的以太坊会如何发展,让我们拭目以待。

PS: 今天的文章如果你有问题,请留言。明天统一解答~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180520G1GXN600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券