解析区块链为何变慢:原因与解决方案 |Quicknode🤖 新推出:《Quicknode 》AI 烹饪指南 10个经过验证的AI编程教程agents 。
查看食谱 通过 SOC 2 II 类认证 · ISO 27001
简而言之:当区块空间的需求超过网络处理能力时,区块链运行速度就会变慢。最常见的原因包括网络拥塞(过多交易争抢有限的区块容量)、状态膨胀(存储需求不断增长,导致处理每个区块的计算成本增加)、共识开销(随验证者数量增加而增长的通信成本)以及基础设施限制(节点速度慢、RPC 端点延迟高以及数据管道效率低下)。 运行变慢的表现包括确认时间延长、手续费上涨、应用程序中出现过时数据以及用户体验下降。其中一些原因源于区块链设计的固有特性,而另一些则可以通过优化基础设施来缓解。
简明解释
“慢”的含义因人而异。对于提交交易的终端用户而言,“慢”意味着需要等待数分钟甚至数小时才能获得确认,而不是几秒钟。对于运行数据管道的开发者而言,“慢”意味着无法跟上区块链末端(chain tip)的更新,从而提供过时的数据。对于DeFi交易者而言,“慢”意味着无法及时收到价格更新,从而错失套利机会。每种延迟现象都有不同的根本原因和相应的解决方案。
在协议层面,区块链的性能存在由其共识机制、区块参数和执行环境所决定的硬性上限。这些上限是设计使然,而非偶然形成。它们是去中心化和安全性的代价。当需求逼近这些上限时,网络并不会崩溃。它会通过提高手续费(将低价值交易排除在外)和延长确认时间(让用户等待更久)来实现“优雅降级”。 但从用户的角度来看,“平滑降级”依然让人感觉很慢。
在基础设施层面上,区块链本身可能运行正常,但应用程序用于与其交互的工具可能才是瓶颈。运行缓慢或过载的 RPCendpoint 会导致每次请求都产生延迟。基于轮询的数据管道会在区块生成与数据可用之间引入延迟。资源配置不足的节点会落后于区块链末端。这些基础设施层面的性能瓶颈通常比协议层面的影响更大(也更容易解决)。
网络拥塞 | 需求超过区块容量,因此手续费和等待时间随之上升 | 用户(费用)与应用设计 |
政府机构臃肿 | 随着区块规模的扩大,处理每个区块的成本也会增加 | 协议和核心开发者 |
共识开销 | 验证器之间的通信会带来不可避免的延迟 | 协议设计 |
基础设施瓶颈 | RPC 速度慢、轮询以及远程节点都会增加延迟 | 开发者,直接 |
网络拥塞
网络拥塞是导致区块链运行变慢最常见、也最明显的原因。当提交的交易数量超过下一个区块的容量时,内存池中就会形成积压。区块生成者会优先选择手续费最高的交易,而手续费较低的交易则需要等待。在严重拥塞的情况下,内存池中可能积压数十万笔待处理交易,确认时间可能从几秒延长至数小时。
网络拥堵本质上具有突发性。大多数时候,主流区块链的运行远低于其容量上限,交易确认迅速且成本低廉。但特定事件会触发需求激增,导致网络不堪重负。NFT铸造、代币发行、空投领取、市场崩盘以及病毒式传播的迷因代币交易,都会引发远超正常水平的交易激增。 在2022年5月Yuga Labs的Otherside铸造活动中,Ethereum 的Gas费一度超过8,000 gwei,是正常水平的数百倍。
关键的认识在于:拥塞虽然会延缓单笔交易的确认速度,但并不会降低网络的吞吐量。区块链仍以正常速率持续生成区块(Ethereum 为每12秒一个,Solana 为每400毫秒一个)。发生变化的是交易被纳入区块之前的等待时间。网络每秒处理的交易数量保持不变;变化的是等待交易的队列在不断增长。
政府机构臃肿
状态膨胀是区块链性能退化的一种更缓慢、更隐蔽的形式。每次智能合约部署、每个新账户、每笔代币余额记录都会增加区块链的状态——即所有当前账户余额和合约存储值的集合,节点必须将这些数据保存在内存或磁盘中,以便验证新交易。随着状态规模的扩大,在交易执行过程中读写状态所需的计算成本也会随之增加。
在Ethereum 上,状态三叉树已从上线时的几乎为零增长到数百千兆字节。每笔读取或写入状态的交易都必须遍历这一数据结构,而随着其规模的扩大,每项操作所需的磁盘 I/O 也会随之增加。这会对所有节点产生同等的影响,包括由 RPC 提供商运营的节点。与拥塞不同,状态膨胀不会导致剧烈且突发的性能下降。 相反,它会逐渐增加处理每个区块的基础成本,这可能表现为区块处理时间略有延长、访问状态操作的最低 gas 费用提高,以及运行节点所需的硬件配置要求增加。
已有若干区块链网络实施或提出了状态管理方案。Ethereum 提出的 EIP-4444 建议引入历史数据过期机制(从全节点中移除旧区块数据)。状态租金提案则计划根据合约占用的存储空间收取费用,以此激励清理工作。Solana 的账户租金系统已要求账户必须保持最低余额才能保持活跃状态。这些方法虽试图控制状态增长,但“区块链记住一切”与“存储并非免费”之间的根本矛盾依然存在。
共识开销
共识机制是指验证者就应将哪些交易纳入下一个区块以及按什么顺序纳入达成一致的过程。该过程本身会引入延迟,因为验证者必须相互通信,而通信需要时间。参与共识的验证者越多,需要交换的消息就越多,达成共识所需的时间也就越长。
这是区块链三难困境的一个方面。拥有4个验证者的网络可以非常快速地达成共识(低延迟),但高度集中化。而拥有40万个验证者的网络(如Ethereum )虽然去中心化程度很高,但需要一个复杂的共识协议,其中包含多轮通信、认证期和最终性检查点,这些环节会在区块被纳入与最终确认之间增加数分钟的延迟。
一些区块链采用基于领导者的共识机制,即由单个验证者提议一个区块,其他验证者对其进行验证,这虽然减少了通信开销,但引入了一个延迟单点(即领导者)。 还有一些区块链采用委员会式共识机制,即由随机选出的验证者子集负责每个时槽的共识,在去中心化与速度之间取得平衡。共识机制的选择直接决定了网络的基本延迟下限,即交易提交到最终确认之间所需的最短时间,无论底层硬件速度有多快,这一时间都无法进一步缩短。
基础设施瓶颈
对于大多数开发者而言,他们日常遇到的性能瓶颈根本不是协议层面的问题,而是基础设施层面的问题。应用程序所感知到的区块链速度,取决于其数据路径中最薄弱的环节:它所连接的 RPCendpoint 、向其数据库传输数据的管道,以及将原始区块链数据转换为应用程序状态的处理逻辑。
一个由数百名其他用户共享的公共 RPCendpoint ,用户之间争夺处理能力,这会给每个请求带来不可预测的延迟。速率限制会在使用高峰期限制您的请求量,而这恰恰是您最需要处理请求的时候。应用服务器与最近节点之间的地理距离会增加每次调用的往返时间。配置不足且滞后于链尾的节点会返回过期数据,导致应用程序的状态滞后于实际情况。
基于轮询的数据管道会引入与轮询间隔相等的人为延迟。如果您的索引器每 10 秒检查一次是否有新区块,那么即使在理想条件下,它也总是比区块链末端滞后 0 到 10 秒。在网络拥塞期间,当区块已满且处理时间增加时,轮询间隔就会成为阻碍您的应用程序跟上进度的瓶颈。
这些基础设施瓶颈是导致区块链运行缓慢的最可解决的原因,因为它们是开发者能够直接解决的问题。升级到专用的高性能 RPC 提供商可降低endpoint 的延迟。从轮询模式切换到流式传输模式可消除人为的管道延迟。使用地理分布式基础设施可缩短往返时间。分配专用且隔离的节点资源可消除“噪音邻居”效应。
Quicknode 如何解决区块链运行缓慢的问题
Quicknode该基础设施的设计旨在最大限度地减少或消除导致应用程序出现区块链运行缓慢的基础设施层瓶颈。 Core API 运行于覆盖 14 个以上区域和 5 家以上云服务商的全球分布式网络上,可自动将请求路由至最近且速度最快的可用节点。其响应时间平均比竞争对手快 2.5 倍,99.99% 的正常运行时间服务水平协议(SLA)确保即使在网络拥塞期间也能保持稳定的可用性。专用的Clusters 提供隔离的基础设施,消除了“噪音邻居”效应,无论其他用户如何操作,都能为对延迟敏感的应用程序提供可预测的性能。
Quicknode Streams 通过基于推送的流式传输方式交付区块链数据,并保证按最终确认顺序送达,从而彻底消除了轮询瓶颈。该方案不存在轮询间隔、人为延迟,也不存在遗漏区块的风险。在网络拥塞期间,当区块体积增大且包含更多交易时,Streams 会自动调整传输规模以适应数据量的增长。可配置的批处理和压缩功能可优化历史数据补录及高吞吐量区块链的吞吐量。对于Solana ,Quicknode 的 Yellowstone gRPC 提供了目前可用的最低延迟数据访问,采用二进制 Protocol Buffers 代替 JSON,以在每毫秒都至关重要的链上将序列化开销降至最低。
“运行缓慢的区块链”和“运行缓慢的去中心化应用”有什么区别?
对用户而言,这两种情况的体验相同,但成因却不同。区块链运行缓慢是协议层的问题:拥塞、共识时序或状态大小限制了网络确认交易的速度。而去中心化应用(dapp)运行缓慢通常是基础设施层的问题:区块链本身没有问题,但远程或负载过重的endpoint 导致了额外的延迟。比较吞吐量与延迟,是判断你实际面临哪种情况的最直观方法。
方面 | 协议层 | 基础设施层 |
|---|
来源 | 共识、区块限制、状态大小 | RPCendpoint ,数据管道,节点位置 |
谁控制它 | 网络和核心开发人员 | 您,作为开发者 |
可修复性如何 | 难度高,需要升级协议 | 很简单,换个服务商或换个方案就行 |
示例 | NFT铸造过程中 gas 费用过高 | endpoint 访问速度慢,导致延迟增加 |
是什么导致了区块链拥堵的突然激增?
网络拥堵通常呈突发性,而非持续性。代币发行、NFT铸造、空投领取、市场崩盘以及病毒式交易等事件,都会在短时间内向网络涌入大量交易,而随着用户竞相争夺有限的区块空间,手续费也会随之攀升。了解导致区块链拥堵的原因,有助于您提前规划应对这些事件,而不是被它们打个措手不及。
第二层协议和可扩展性如何缓解网络延迟?
第二层网络将大部分交易从主链转移出去,并以批处理方式进行结算,这极大地提高了吞吐量,并降低了日常活动的费用。在第二层区块链上运行您的应用,是避免主链拥堵的同时保持底层网络安全性的最有效方法之一。
开发者实际上能解决哪些性能瓶颈?
协议层面的限制大多不在你的掌控之中,但基础设施的性能下降却可以由你掌控。你可以更换为更快的服务商,将节点部署得更靠近用户,并用推送式传输取代轮询。仅将轮询切换为流式传输,就能消除基于时间间隔的管道中固有的延迟。
常见问题解答
拥塞是否意味着区块链处理的交易数量减少了?
不。区块链仍以正常速度持续生成区块,并处理相同的吞吐量。在拥塞期间增加的是待处理交易的队列,这就是为什么单笔交易的确认时间变长、手续费上涨的原因。
去中心化会让区块链运行得更慢吗?
确实如此。验证者数量越多,达成共识所需的通信量就越大,从而提高了基础延迟。关于速度与去中心化之间的这种权衡关系,在“去中心化与性能”一文中进行了详细探讨。
更快的 RPC 提供程序能解决应用程序运行缓慢的问题吗?
通常确实如此。如果区块链运行正常,但你的去中心化应用(dapp)感觉运行缓慢,那么瓶颈通常出在你的endpoint 上。通过使用更靠近用户且专用的提供商来降低RPC延迟,可以消除用户所感受到的大部分延迟。
作为一名开发者,我能解决状态膨胀的问题吗?
并非直接如此。状态膨胀是一个协议层面的问题,可通过历史数据过期和账户租金等升级机制进行管理。您可以通过缓存读取量大的数据,并在智能合约中避免不必要的链上存储,来减轻其影响。
为什么当区块链运行变慢时,手续费会上涨?
区块空间有限,因此当需求激增时,用户会出更高手续费以求交易能更早被纳入区块。更高的手续费是决定哪笔交易能进入下一个区块的市场清算机制。
延伸阅读