Polkadot 官方发文:如何帮助平行链提升 10 倍吞吐量?
共 5611字,需浏览 12分钟
·
2024-05-21 18:40
加入 PolkaWorld 社区,共建 Web 3.0!
Parity 工程师 Dmitry Sinyavin 解释了 Polkadot 平行链可以将吞吐量提高 10 倍的计算过程。
概述
交易吞吐量不仅在不同区块链之间难以比较,即使在同一条链内也很难比较。在 Web3 世界中比较各个链的 TPS 是一件喜闻乐见的事,但其实它不代表任何价值,而且容易被滥用。然而,在开发过程中,我们需要以某种方式评估我们的进展,这就是我们的方法。
本文提供了一个概览的介绍和解释,说明异步支持如何在 Polkadot 平行链上实现 10 倍交易吞吐量增加。
当我们在测量 TPS 的时候,我们在测量什么?
我们使用的是“标准 TPS”(sTPS)概念,这一点 Shawn Tabrizi 在他的 sub0 2024 演讲中很清楚的解释了这一点。https://www.youtube.com/watch?v=MTzeE0fNSZ0
简而言之,我们测量的是 transfer_keep_alive 交易,这类交易指的是从一个已经有资金的账户向另一个已存在的账户进行的余额转移,而这种转账不会导致发送账户被终止使用。测量的标准是每个发送者进行这样一笔交易的吞吐量,即这种类型的交易能在一定时间内达到多少笔。
这个指标作为绝对数字仍然没有意义,但它允许我们在更改链逻辑时评估吞吐量的变化。
在这次测试中,我们运行了一个接入到 rococo-local 中继链的 rococo 平行链,并测量了平行链交易的吞吐量。
交易及其权重
每笔交易都有一个权重。在 Polkadot SDK 中使用的权重是二维的,第一维是计算量,表现为执行时间;第二维是 PoV(证明有效性)的大小。
计算权重取决于硬件。每个硬件执行相同代码所需的时间不同,因此这些权重需要使用参考硬件提前进行基准测试。
但重要的是要理解,这些权重是最坏情况下的场景。交易可能会采取不同的执行路径。例如,如果接收账户不存在,则必须创建新账户,这比转账到已存在的账户需要更多的时间和更大的证明大小。然而,在提前进行基准测试时,我们不知道具体交易将采取什么样的执行路径,因此我们总是使用“最重”的一个。
构建区块
现在,我们来谈谈区块的构建。每个区块能够容纳一定量的权重。因此,在编写区块时,如果交易池中充满了准备包含的交易,我们可能会碰到三个限制之一:
计算权重限制。达到此限制意味着区块中的交易消耗了允许的最大计算资源。
区块大小限制。达到此限制意味着我们已达到 PoV 大小限制,即使还有一些计算资源剩余,也不能再向区块中添加更多交易。
编写/创建区块的时间限制。达到此限制意味着,虽然从权重上看还有可用的计算资源,但实际上我们的计算时间消耗比预期的要多。实际上,这意味着我们的硬件性能不如用于基准测试的参考硬件。
很难给出一些确切的数字,因为权重的设定非常复杂(在区块构建的不同阶段,部分权重被保留用于各种目的),所以我们只能进行测量。
使用传统的同步支持,我们每个区块能处理 1094 笔交易。我们达到了区块大小限制,即使创建区块的时间为 0.5 秒,也还有大量的计算权重未被使用。
那么,如果我们引入异步支持会发生什么变化呢?遗憾的是,变化不大。我们的计算资源增加了四倍,但区块大小限制没有变化,当推送 1094 笔交易后我们仍然达到了这一限制。然而,使用异步支持我们能够更快地生产区块,因此我们的吞吐量将翻倍。
这没关系,但我们希望从如此复杂的技术如异步支持中获得更多,这种技术本身就能带来 8 倍的吞吐量增加!此外,一些技术限制不允许我们增加区块大小以容纳更多交易。那么,我们如何突破这一限制呢?
POV 回收来“救援”
在这里,我们回到了“最坏情况执行路径”的部分。在进行基准测试时,我们并不确切知道一笔交易将消耗多少证明大小,并且我们总是必须按最大可能值减少区块容量。但在执行一个区块时,我们已经知道了实际情况。我们能否将未使用的证明大小报告回运行时,以便将更多交易纳入区块呢?
答案是可以的 —— 事实上,这正是 PoV 回收机制的作用。每笔交易都需要向存储写入数据,因此需要存储证明,我们在基准测试中使用的最坏情况场景迫使我们使用完整的证明大小,包括从账户的叶节点一直到根的每个 Merkle 树节点。
实际上,大多数交易共享了 Merkle 树的很大一部分,使得个别证明的大小要小得多。例如,基准测试的证明大小是 3,593 字节,这与推入区块的第一笔交易的实际证明大小非常接近。但随后的交易可能只有 250 字节,而如果没有 PoV 回收,我们仍会为每笔交易计算满 3.5 千字节的证明。因此,使用 PoV 回收后,我们在 sTPS 测试中将在更晚时候触及证明大小限制。
因此,有了 PoV 回收,我们可以将更多交易纳入区块,但计算资源限制阻止了我们。处理这么多交易需要超过半秒的时间。在这里,异步支持再次发挥作用,其创建区块的时间为两秒。将这两项技术结合使用,我们可以将 3,764 笔交易纳入区块,这大约是每个区块的 3.5 倍增加,而将区块时间减半,我们将得到 7 倍吞吐量的增加!但这还没有结束。
玩转常数
为了进一步突破极限,我们需要做一些调整。我曾建议说,通过异步支持我们可以“自动”获得两秒的区块创建时间。我承认,我撒了谎。由于所有网络上验证者的备份超时时间(backing timeout)为两秒,我们需要将区块创建时间设置得低于此值,以在这两个超时之间创建一个“保护区”,因此最初将区块创建时间设置为 1.5 秒。但没有什么能阻止我们将备份超时时间增加到 2.5 秒,然后我们就可以使用整整两秒来进行区块编写和创建。
其次,我概述了区块权重的两个维度中一些神秘的“预留”。这些是保守的估计,考虑到我们不知道确切的证明大小。但现在,多亏了 PoV 回收,我们可以肯定,一些这样的预留可以被取消,为 PoV 释放出更多的区块大小。
在这些调整之后,我们每个区块可以容纳 5,573 笔交易,这是每个区块的 5.09 倍增加,最终触及计算限制而不是区块大小限制。在计算区块时间减半后,我们获得了 10.18 倍的吞吐量增加。
结论
两种几乎独立开发的技术使得这一结果成为可能。不过,很明显 sTPS 测试并没有涵盖所有使用场景。那些大部分交易在计算上很重但产生小证明的网络可能单独从异步支持中受益。其他交易轻但证明大的网络可能即使没有异步支持,也能从 PoV 回收中受益。但正是这两种技术的综合,使得平行链的吞吐量增高 10 倍成为现实!
直播预告:
5 月 22 日(本周三)晚 7 点,PolkaWorld 生态研究负责人 Kristen 将在 PolkaWorld 推特(X)上直播,带来波卡生态项目的最新福利。
直播地址:Twitter 视频直播 @polkaworld_pro(提前关注,以便在直播开始时收到提醒)
PolkaWorld Telegram 群:
https://t.me/+z7BUktDraU1mNWE1
PolkaWorld Youtube 频道:
https://www.youtube.com/c/PolkaWorld
PolkaWorld Twitter:
@polkaworld_org
更多内容
W3F 发放第 21 批 Grant:增强 Coretime 和 XCM 创新功能,提升用户体验
波卡周报 | 平行链 Frequency 或将重构 Tiktok!全球知名加速器Founder与波卡推出首个Web3创始人学院
关注 PolkaWorld
发现 Web 3.0 时代新机遇
点个 “在看” 再走吧!