重新思考分片与智能合约以最大化区块链吞吐量?
Amdahl加速定律的基本出发点是:1.对于很多科学计算,实时性要求很高,即在此类应用中时间是个关键因素,而计算负载是固定不变的。为此在一定的计算负载下,为达到实时性可利用增加处理器数来提高计算速度;2.因为固定的计算负载是可分布在多个处理器上的,这样增加了处理器就加快了执行速度,从而达到了加速的目的。在此意义下,1967年Amdahl推导出了固定负载的加速公式。
对于如何通过分片实现区块链扩展进行了大量的研究。
据我所知,目前主要概念是在不同的分片上启用多个事务并行执行,而不会影响区块链的不可变性和安全性,包括所有分片。我能够找到的大部分研究都集中在用于分片共识的算法上。 虽然所有这些研究看起来都很有希望,但我想从不同的角度来看待分片。
为了论证,我们假设存在一个用于分片的一致性算法。 此外,假设该算法在开放的无权限的区块链上运行,并且正常可以使用。我的问题是,即使有阿姆达尔定律,我们是否可以通过分片获得希望的扩展性。 如果想要了解阿姆达尔定律,可以百度一下。
这表明整个任务的执行的理论加速随着系统资源的改进而增加,并且无论如何改进的程度,理论加速总是受到限制而无法从改进中受益的任务。这基本上表明,一旦所有可并行化部分最大化,系统的吞吐量限于序列化部分的分配。
对于区块链分片,我将此解释为意味着吞吐量的潜在增加目前仅限于可以在单独的分片上同时执行的事务数量。 也就是说如果分片上的事务需要来自另一个分片的数据,则它必须同步来自另一个分片的数据传输。 根据阿姆达尔定律控制吞吐量,这是序列化的一个点并给出了大量的分片。
个人原生代币交易
两个帐户之间的交易明确限制为仅在帐户之间转移硬币余额,例如在两个帐户之间发送硬币,不需要来自任何其他帐户的数据。因此,如果两个帐户的数据在特定分片上可用,则事务可以与其他帐户上的其他事务异步执行。这会随着分片数量和帐户对之间不相交的交易数量而变化。随着账户数量的增长,人们可以预期分割此类独立交易的机会也会增加。在该限制中,吞吐量由执行单个事务所花费的时间决定,无论在任何给定时间点执行多少事务。这正是我们想要提高区块链吞吐量的情况。
智能合约分片
对于智能合约来说,情况并不那么好。智能合约在区块链上实施为单个分类账账户,其数据状态与程序代码相关联。每个事务都通过代码更改数据状态。每个更改都记录在区块链中,并使用表示状态的哈希进行验证。为了保持区块链的确定性,一致状态,每个智能合约一次只能在一个分片上执行,除非智能合约账户本身的状态可以分片。通常这会使智能合约帐户执行成为向智能合约发送交易的所有帐户的限制因素。由于智能合约用于标记化,很可能随着给定令牌的流通量增加,其智能合约成为吞吐量的瓶颈,无论存在多少分片,如阿姆达尔定律所预测的那样。
对于智能合约的当前实现模型,我只看到两种使用分片进行扩展的可能方法:
· 使用在分片上隔离的多个智能合约
· 使用确定性多线程智能合约(也称为SIMD)
多个智能合约可以利用分片优势。例如如果表示每一个代币的智能合约都分配给一条单独的分片,那么给定代币的事务不会影响其他代币上的事务。尽管每个单独代币的事务仅限于其特定分片上智能合约的吞吐量,但是随着代币数量的增加而增加,分片的数量会随着它们线性增长。但这并没有解决单个智能合约的吞吐量问题,这是对单个区块链上所有智能合约的改进而不是分片。即使采用这种方法,如果在分片之间共享的用户帐户需要任何状态(例如用于支付交易的本地代币),则会出现问题。
来自超级计算的一种称为矢量化的技术使程序能够并行地执行其代码部分。这称为单指令多数据(“SIMD”)。为SIMD编写的程序被编写为确定性的。本质上,SIMD机器(通常是通用图形处理器单元(“GPGPU”))在一系列处理器上对它们的数据进行分片。这对于某些类别的应用程序非常有效,例如图形和类似的矩阵运算。
这种技术理论上可以应用于区块链智能合约。也就是说,可以显式地编写智能合约以支持以某种方式并行执行事务。我不确切知道如何实施。也许区块链研究会在这方面提出一些创新的东西。然而,即使有这样的解决方案,编写具有SIMD能力的智能合约也会变得非常复杂。
多个智能合约和SIMD智能合约都不是理想的解决方案,尽管两者都可能提供一些扩展的机会。
智能对象资产开启分片的使用
中国观察