更新调用是互联网计算机协议中的一项核心操作,使用户能够在容器(托管在互联网计算机上的智能合约)内进行更改,这篇文章探讨了更新调用生命周期的每个阶段,并重点介绍了 Tokamak 里程碑如何优化其端到端延迟。
背景
为了全面了解更新调用生命周期,有必要了解互联网计算机架构的一些基础组件。
1. 容器
容器是互联网计算机协议(ICP)上的智能合约,用于存储状态和执行代码,用户通过提交更新调用与容器进行交互,从而启动智能合约上的操作。
2. 子网
子网是托管和管理容器的节点组,每个子网都充当独立的区块链网络,使 ICP 能够通过在多个子网之间分配负载来扩展,每个子网管理一组唯一的容器,一个子网上的智能合约可以通过发送消息与另一个子网上的另一个智能合约进行通信。
3. 副本
在每个子网中,节点(称为副本)存储该子网上每个容器的代码和数据,每个副本还执行容器的代码,这种存储和计算的复制可确保容错能力,即使某些节点崩溃或受到恶意行为者的攻击,容器智能合约也能可靠运行。
4. 边界节点
边界节点负责将请求路由到适当的子网,并在该子网内的副本之间平衡负载。
更新调用的生命周期
下图概述了互联网计算机协议上更新调用的生命周期:
1. 互联网计算机(IC)接到更新通知
更新调用从用户开始,用户使用 IC 代理实现(例如 agent-rs 或 agent-js)发送请求,这些库提供了一个用户友好的界面来与 ICP 交互,处理请求格式、签名和通信协议,然后,请求被发送到边界节点,通过 DNS 进行解析。
2. 通过边界节点进行路由
边界节点将更新调用路由到托管目标容器的子网内的副本,循环选择方法将请求负载分配到 F+1 个副本上,以确保性能和可靠性,这里,F 表示 ICP 的容错阈值 - 每个子网中可以容忍的最大故障副本数,有关互联网计算机容错的更多信息,请参阅此链接:
internetcomputer.org/how-it-works/fault-tolerance
3. 广播更新调用
一旦副本收到更新调用,它就会使用可中止广播原语将请求广播到子网中的其他副本,即使在网络拥塞、对等或链路故障和背压的情况下,此方法也能确保强大的交付保证。
可中止广播对于拜占庭容错(BFT)环境中的高效副本间通信至关重要,它节省带宽,确保所有数据结构即使在存在恶意对等体的情况下仍保持有界,并保持可靠的通信以在 ICP 内进行一致的更新处理,有关更多技术细节,您可以参考此处解释可中止广播解决方案的论文:
arxiv.org/abs/2410.22080
4. 区块提案(区块制作)
一个副本(指定为区块制造者)负责创建包含更新调用的新区块,然后,区块制造者将该区块提交给子网中的其他副本进行处理。
步骤 4 到步骤 7 构成了互联网计算机上共识轮的阶段,其中副本共同协作以就提议的区块达成一致,有关共识机制的详细说明,您可以在此处阅读更多内容:
internetcomputer.org/how-it-works/consensus
5. 公证延迟
引入一个短暂的延迟,称为公证延迟,以同步网络并让所有副本有时间接收区块提议,此延迟对于保持副本之间的一致状态至关重要。
6. 公证
在公证阶段,副本会审查提议的区块的有效性并同意对其进行公证,公证是初步的共识步骤,表明该区块符合 ICP 的标准。
7. 最终确定
经过公证后,区块将经过最终确认 - 子网中的所有副本均同意其有效性,确保其被接受并添加到链中,最终确认可确保所有节点都确认该区块,从而确保整个网络达成共识。
8. 执行
完成之后,块将进入执行阶段,在此阶段,容器的状态将根据更新调用进行更新,有几个因素会影响此阶段的延迟,包括:
容器代码复杂度:容器代码的复杂度直接影响执行速度,更复杂的逻辑或数据密集型操作可能会带来额外的延迟;
子网负载:由于每个子网承载多个容器,因此执行资源是共享的,子网负载过高可能会增加延迟,因为容器会争夺计算资源。
根据子网活动,即使是简单的操作也可能会遇到延迟,在高峰使用期间,更新调用可能会在等待资源时遇到延迟。
9. 认证共享
一旦执行,副本就会在子网内共享认证信息,验证更新调用是否准确执行,以及由此产生的状态变化是否一致。
10. 副本以证书进行响应
认证后,副本向边界节点发送包含证书的响应,表示更新调用成功完成。
11. 边界节点传递响应
最后,边界节点将认证的响应传递给用户,标志着更新调用生命周期的结束。
Tokamak 里程碑
上面描述的更新调用生命周期的简化流程通过 Tokamak 里程碑得到了显著增强,它为互联网计算机引入了几项关键改进:
通过 QUIC 实现可中止广播:在 QUIC 协议之上实现的可中止广播原语现在管理所有副本到副本的通信,从而在网络上提供可靠且高效的消息传递,此解决方案可以显著减少公证延迟,从而在不牺牲可靠性的情况下加快共识。
增强的边界节点路由:边界节点中改进的路由逻辑优化了对副本的更新调用的分配,如生命周期的第二阶段所示。
同步更新调用:引入同步更新调用允许在认证后立即直接响应用户,从而简化并加快生命周期的最后阶段。
这些进步共同提高了互联网计算机更新调用的效率、速度和可靠性,创造了更加无缝的用户体验和更加强大的协议。
影响更新调用延迟的关键因素
互联网计算机的端到端延迟受几个突出的因素影响:
子网拓扑:子网的物理和网络布局会影响副本之间的往返时间(RTT),较短的 RTT 有助于加快通信速度,而副本之间的地理距离越大,延迟就越大。
子网负载:子网上容器的数量和处理的消息量会影响延迟,由于 IC 作为共享基础设施运行,位于负载较重的子网上的容器可能会因对相同资源的竞争需求而出现更高的延迟。
流水线架构:ICP 的架构旨在通过流水线共识和执行阶段来最大化吞吐量,这种设计允许多个进程同时运行,但它带来了一个权衡 - 虽然吞吐量增加了,但流水线中的每个阶段在等待前几个阶段完成时可能会经历额外的延迟。
ICP 的设计优先考虑高吞吐量和可扩展性,在这些要求与分布式、去中心化网络固有的性能权衡之间取得平衡。
Tokamak 前后 ICP 的基准
为了衡量 Tokamak 里程碑的影响,我们测量了 ICP 上托管的三个不同智能合约的端到端(E2E)延迟,作为基准,我们在 Tokamak 里程碑推出之前进行了基准测试,然后在完成里程碑后重复了基准测试以进行比较。
结果非常令人兴奋,表明用户可以期待 ICP 未来更低的延迟,从而带来更好的用户体验。
对于我们进行基准测试的每个用例,我们都附加了一个表格和图表来显示 0-99.99 百分位的 E2E 延迟。
ICP 分类账
ICP 账本是托管在 NNS 子网上的智能合约,用作 ICP 代币的账本,用户可以通过多种方式与账本交互,但最受欢迎的 dapp 和前端是 NNS dapp,它也托管在 NNS 子网上。
我们连续几天进行基准测试,在此期间我们循环发送 ICP 令牌,并记录从提交交易到从 ICP 获得响应(以及证明令牌已发送的证书)所用的时间,平均延迟从 4.57 秒减少到 2.23 秒,减少了 51%。
互联网身份
互联网身份 dapp 托管在互联网身份子网中,是运行在互联网计算机上的联合身份验证服务,如果您曾与 ICP 上的 dapp 进行过交互,那么您很可能花时间使用互联网身份登录,此基准测试衡量使用互联网身份服务登录所需的时间。
我们的结果表明,登录时间的平均延迟从 7.12 秒减少到 3.9 秒,减少了 45.2%!下图 2 显示了不同百分位数的前后结果,该图显示,对于第 50 个百分位数,即中位数,登录时间从 6.9 秒减少到 3.2 秒。
紫色区域突出显示了每个百分位数节省的时间,您还可以查看表 2 以更详细地查看每个百分位数的结果。
应用程序子网
我们有一个容器托管在 13 个节点的应用程序子网 snjp 上,这个子网允许我们测试 13 个节点的应用程序子网在 Tokamak 里程碑之后的改进情况,我们的基准测试显示,平均 E2E 延迟从 2.43 秒减少到 1.35 秒,这意味着减少了约 44%。
你关心的 IC 内容
技术进展 | 项目信息 | 全球活动
收藏关注 IC 币安频道
掌握最新资讯