解放以太坊 2.0 的灵魂:分片(Sharding)

了解区块链的人应该都知道区块链如果要同时兼顾安全、效率及开放性,目前有两种层次的解决方案正在开发中。

首先,完成度比较高的是闪电网络(Lightning Network)、雷电网络(Raiden Network)这种第二层(layer 2)的解决方案。方法是把多数的交易转移到区块链下(off-chain),借此减轻区块链上(on-chain)的负担。

另外,属于第一层(layer 1)解决方案的分片技术(sharding),还在早期开发阶段,目的是直接提升区块链上(on-chain)的交易效率。今天我会告诉你分片技术是如何进行,以及预期可以达成什么效果。

要提升以太坊的整体交易速度,最直觉的第一层解决方案,当然不是听起来很吓人的分片技术。而是直接多创建几个以太坊出来即可。

换句话说,现在以太坊每秒处理 6 笔交易(Transactions Per Second),那么只要创造 10 个以太坊出来,彼此相互沟通,不就可以每秒处理 60 笔交易了吗?

这不是我发明的烂点子,而是数据库(database)领域常用的方法,用来解决数据库读写效率低落的问题。数据库的用途是储存、读取资料,能够让使用者高效率的读写资料,就是一个好的数据库。

对数据库不熟悉的人,可以直接把数据库想像成PChome 24h 购物网站的物流仓库。能够快速的进货、出货的物流仓储,才是一个好的仓储管理。假设PChome 无法在24 小时内把商品送到北京,最直觉的方法就是在北京多建立一个物流仓库。哪个县市配送太慢,就去那个县市设立一个物流仓库,马上就可以解决问题。

不过,这个方法明显有三个障碍。首先,每个仓库的存货种类必须要相同,假如有北京的消费者要买护唇膏,结果只有广州的仓库有库存,那也无法在24 小时内到货。第二,这个方法必须耗费大量成本盖仓库,但是每盖一个仓库就只能快一点点,增加的效益有限。第三,不只盖仓库的成本,仓库人力也同样必须倍数扩增,否则反而服务水准下降。

要让配送效率有显著的进步,终究还是得回到仓储管理。同样道理套到数据库、区块链领域,也是完全适用。

光是新增几个一样的东西,很可能只是事倍功半。尤其是区块链安全性是由矿工所贡献的运算能力保护,如果新增了10 个以太坊,但是矿工运算能力没有同样增加10 倍,就等于是牺牲了10 倍的安全性,换取10 倍的效率。

所以,以太坊不是采取上述新建更多仓库的方法,而是反方向把一个以太坊切成好几个小片段的「分片技术(sharding)」。

分片技术:用既有资源改善规模化(scalability)问题

分片技术在数据库领域,就是把一个完整的数据库切分成几个小的片段数据库,让每个片段数据库都可以同时独立运行。

举例来说,下图就是一份存有4 笔资料的数据库,分片在这个例子内就是横向切割,让资料依然是依照相同的类别分类,但是每一份都变成小片段了。因此,未来我要找1、2 的数据就到上方的片段数据库找,要找3、4 就到下方的片段数据库找。

你可能会问,我可以纵向切割吗?可以。但是这样就让一个数据库变成两个不同的数据库,而不是一个数据库的「两个片段」,这反而可能降低了资料的读取、写入效率。因此,一个数据库应该如何切割最恰当,得根据资料的类型和使用情境单独设计,很难有一招打天下的方法。


数据库分片

那么在区块链上,分片技术能怎么解决区块链的规模化(scalability)问题呢?

区块链目前的共识机制,是每一台电脑(full node)都必须花时间验证区块链上每一笔交易的正确性。如果你把交易想像成是学生缴交的作业,而电脑是批改作业的老师。现在区块链共识机制的做法,是每一位学生缴交的作业,都必须经过全校每一位老师的批改才行。

这种做法当然非常没有效率,只要作业量增加,全校每位老师就都得熬夜改作业了。这就是现在区块链上的交易量一增加,就会有很多排队等待被验证的交易出现的原因,也就是规模化(scalability)或效率问题。这种批改作业的机制,是为了确保每一份作业都没有改错,也就是确保区块链上的交易安全性足够。但是,你一定马上就能想到更有效率的方法。

如果现在全校有20,000 份作业,总共有1,000 位老师。原本每位老师都要看20,000 份作业,每份作业都被看过1,000 次。

但是,如果把全校1,000 位老师,每10 位分成一组,总共分成100 组彼此分工合作。每份作业只交给其中一组的10 位老师批改一次,其实每份作业仍然会被看过10 次,已经很难出错了。但是每位老师的工作量,就只剩下原本的百分之一。在这个简单的例子里面,每一组老师和他们所负责批改的作业,就是一个分片(shard)。

你可能会说,那为什么不每一位老师自成一组,那不是能分成更多组,就能更有效率吗?

当然。但是这就变成一个老师定生死的中心化系统,而不是多个老师互相制衡的去中心化系统。所以,每一个分片还是必须要有足够多位老师,来确保批改作业的正确性。又不用太多老师挤在同一组,导致资源的浪费。但也不能太少老师,导致区块链失去去中心化的特色。只要每一个分片独立运作,就可以兼顾效率、安全性及去中心化的特性。

总结来说,你可以将分片技术视为在足够的安全性前提之下,牺牲原本「多余的」安全性,来换取运作效率的方法。

分片技术的挑战

首要的考量是安全性。

以太坊在第一阶段,预计将整个以太坊切成100 个分片,也就是将老师分成100 组的意思。过去如果一个学生要作弊,他必须买通超过500 位老师(50%)以上,都将他的错误答案打勾。但是,现在这位作弊的学生只要知道自己的作业由哪一组老师批改,就只要买通那一组老师(1%)即可。

因此,分片技术必须要搭配一套随机分配(reshuffle)的机制,来避免这种作弊手段。只要老师不知道自己未来会被分配到哪一组,也就不知道会改哪位学生的作业,那就很难作弊。

除了安全性之外,第二个分片技术的重点是分片与分片之间的沟通(Cross-shard Communication)。

回到分片技术的最初目的,是要藉由区块链每一个分片的「独立运作」,来增加区块链的交易吞吐量。既然已经把老师分成100 组,那就希望跨组之间的互动少一点,否则我这组老师批改的作业还要跨组传给另一组老师批改一次,那就跟没有分组一样了。

之所以会有跨组的互动,是每一个分片内除了老师(collator)被切成好几个小组独立批改作业(transaction)之外,全校的学生(account)也被切成同样数量的分片。作业的举例有其极限,因为交易是得从一方帐户扣钱,另一方帐户增加钱。这时候两组老师的其中一方,得确认转出的帐户余额是否足够,另一方的老师得确认收到的钱是否已经提领。

因此,分片技术必须要设计一套安全的跨分片沟通机制(protocol),来确保一方有把钱付出去,另一方也有收到钱。但这样的跨分片协作也不能过度频繁,导致影响区块链的效率。

今天文章的重点在于解释分片技术是透过分组独立运作的方式,来解决区块链的规模化问题。分片技术正好跟我们一开始所说,多创建几个区块链的方法相反,是把一个区块链切成好几个小片段平行处理。在区块链矿工的运算能力维持不变的情况下,提升区块链的运作效率。

本文链接地址:https://www.wwsww.cn/ytf/9784.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。