区块链中的分片计算技术探讨
扫描二维码
随时随地手机看文章
众所周知,区块链得到广泛应用的瓶颈之一在于缓慢的交易速度:比特币的底层设计仅支持每秒7笔交易,还不及传统支付工具Visa每秒8000笔交易的一个零头,更别说支付宝在去年双十一创造的每秒25.6万笔的记录。这严重制约了去中心化应用的发展。
因此,区块链扩容性问题成为了当前业界关注的热点。
接下来我们要讨论的分片技术,被认为是一种有效的、能够解决区块链吞吐量问题的解决方案。
什么是分片
在传统数据库里,分片是指把整个数据库分成不同的部分,存储在不同的服务器里。这可以提高数据库的读写效率,突破单一服务器的性能瓶颈。
类似的,在区块链里,分片也是将数据划分成若干部分,交给不同的群组处理。每个群组都被称为一个「分片」。
把节点进行分组就是分片。
那为什么要进行分片呢?
这是因为在比特币这类传统区块链设计中,在一个铸块周期内,只会选择一个节点来出块,所以节点数量与出块的速度没有必然联系。
区块链的性能瓶颈并不是因为单节点的计算能力不足,而是受限于无法水平扩展。
小T图解
这就好比,有一个50人的班级,老师有一份50题的卷子要交给大家做,按照比特币的方式是,1号学生做完第一题,才能轮到2号做第二题,然后又要等2号学生做完第二题,才到3号做,直到50题做完,这其实是效率很低的做法,即便50个学生各个都聪明绝顶,但是在每一次只能做一题的规则下,效率也极其有限。很显然,影响效率的并不是学生,而是规则本身。那么就会有人问了,为什么不能50个学生一起做题目呢?
没错,分片技术就可以理解成你可以让50个学生分为10组同来同时做题。这样一来,就变成了一个简单的算术题了,如果一个分片一秒钟可以处理10个交易,那10个分片一秒钟就可以处理100个交易。吞吐量(TPS)自然就能得到一定的提升。
TASchain的分片计算并行框架
Chiron共识机制下3000+的TPS已经可以足够支撑大多数的商业化应用,但考虑到对超大规模应用的扩展性支持,TAS借鉴了Google的MapReduce和阿里云批量计算思想,设计了分片并行交易执行框架,以进一步提高吞吐量。
在TAS的并行计算框架中,将重节点逻辑上分为计算节点和提案节点。也就是说,在一个铸块周期里,根据上一区块产生的随机数可以选定多个提案节点(详见Chiron共识机制),而根据签名与交易发起人的地址的运算,选定的节点称之为计算节点。计算节点负责执行交易,提案节点负责块的生成。
小T解读
TASchian的分片计算过程可以这样理解,一个班级要大扫除,班主任根据以往的值日情况,把同学们分成了若干个扫地组,扫地组负责各个角落的清洁工作。等大家都扫完了,班主任确认这次大扫除的奖品。
其中有几个概念小T再为各位做进一步解释。
交易分片:每当一笔交易进入网络时,TAS会根据交易发送者的地址和上一块的签名,将交易通过VRF输出随机发送到不同的分片中,这一过程被称为交易分片。并且相同的交易发起人发起的多笔交易,都将落到同一个计算节点。这个设计既提高了效率,又保证了用最小时间窗口即可验证双花问题。
交易执行:计算节点会根据当前账户状态执行交易,同时记录账户状态变化等情况。对于交易的执行往往需要依赖状态数据,例如账户余额、合约内保存的用户数据等。在TAS的设计中,计算节点保存了完整的状态信息,一旦接受到一个新块,就会更新本地状态。所以计算节点本地即可完成交易的执行,无需进行跨链等复杂交互。
合并:对于每一笔交易的执行结果,计算节点提交给提案节点的内容包括账户状态树根hash(简称根hash)、交易影响的账户、账户状态的差值。提案节点遍历收到的所有结果,对比本地根hash与结果中的根hash,筛选出交易结果,称之为候选集。提案节点将候选集中的账户状态差值,合并到本地账户之上,生成最终的账户状态。
验证:验证组接收到候选区块后,以组协作方式来完成候选区块验证,并通过门限签名方式在达成组内共识的同时也产生当前轮的真随机数R1,在新块B1中写入R1,将新块B1向全网广播。
与有着“分片之王”的Zilliqa相比,TAS系统下验证组内所有成员收到门限签名后均能恢复出最终组签名,不需选定某位成员成为Leader,完成最后的多重签名聚合操作,系统的鲁棒性以及安全性要优于Zilliqa。