使用Pilotfish扩展Sui执行能力

Pilotfish第一个多机智能合约执行引擎,使Sui网络的验证节点可以利用多台机器,并在负载增加时自动扩展以执行更多的交易。这一目标实现不会影响可靠性或功能完整性。

Pilotfish可以从内部执行机器的故障中恢复,并支持Sui的全面动态操作。其流式架构导致非常低的延迟性。我们对Pilotfish与Sui集成的性能评估表明,在使用八台服务器进行执行时,吞吐量最多增加了八倍,显示了对于计算受限负载的线性扩展。

执行面临的挑战

惰性区块链是一种有前景的新兴设计架构,将交易排序(共识)和执行解耦。在这种设计中,一个排序层对交易进行排序,然后在稍后的时间,执行层执行交易序列。这使得最先进的区块链系统可以使用现代共识算法(如Bullshark和Hammerhead)对大量交易进行排序(每秒约10万笔交易)。然而,执行性能一直落后,如今执行成为了瓶颈。例如,以太坊虚拟机在执行简单交易时据报道峰值只能达到每秒2万笔交易。

分批处理:高延迟的解决方案

解决执行瓶颈的一种方法是分批处理。通过构建大量交易的批次或区块,并将它们作为一个单元提交以执行,可以在不对架构进行重大更改的情况下实现高吞吐量。然而,分批处理的代价是高延迟。分批处理执行的延迟通常在几百毫秒,对于像Sui这样的低延迟区块链来说是不可忽视的。

Pilotfish在引入了可以忽略延迟性的同时实现了高吞吐量,延迟在十几毫秒到几十毫秒的范围内,采用了Sui已经使用的流处理方法进行多核执行。

纵向扩展与横向扩展

实现高吞吐量同时保持低延迟的一种方式是横向扩展,即单台机器上的并行交易执行,一些区块链,包括Sui,成功地采用了这种模式。这种方式的优势在于不需要进行巨大的架构更改。验证节点已经完全位于一台机器上,只需在保持交易因果关系的同时并行执行交易而不是顺序执行即可。

采用纵向扩展方法,一旦当前负载超出了当前机器的处理能力,您唯一的选择就是升级到更强大的机器。但是这种解决方案的持续性有限。服务器上只能容纳那么多CPU核心,那么多内存等。因此,如果负载不断增长,最终会超出任何单台机器的处理能力。更令人沮丧的是,可能不仅是CPU会枯竭,而且机器的任何单一资源都可能枯竭。即使当前验证节点机器在CPU方面并未饱和,也可能会耗尽内存容量,并被迫依赖于缓慢的持久性存储,从而拖慢整个流程。最后,依赖单一强大机器对区块链空间来说并不友好,因为强大的机器很少,并且只有少数数据中心提供商支持。

解决执行瓶颈的另一种方法,由Pilotfish在区块链领域开创,是通过在多台机器上进行分布式交易执行进行横向扩展。横向扩展方法的优势在于它具有无限扩展的潜力。当负载超出当前机器数量的能力时,我们只需增加更多的机器,从根本上保证我们永远不会耗尽资源,也永远不必依赖于关键路径上的缓慢持久性存储。这种方法的另一个优势是它与纵向扩展方法是正交且相容的。最后,它还可以更容易地实现去中心化,防止硬件提供商出现“单一文化”。相比于单一超强大机器,多个小型机器有着更大的市场。

Pilotfish的工作原理

以下是Pilotfish如何在多台机器上分发交易执行的过程。每个验证节点内部分为三个逻辑角色:(1)主要角色,负责共识,(2)顺序工作者(SWs),负责存储交易并将其分派给执行;(3)执行工作者(EWs),负责存储区块链状态并执行来自SWs的交易。

一个潜在的Pilotfish部署使用一个主要角色,以及三个顺序工作者和三个执行工作者。

除了主要角色始终是单台机器外,这些角色中的每一个都可以在一个或多个机器上实例化。请注意,组成验证节点的机器彼此信任(它们由同一实体运行),因此它们不需要沉重的拜占庭容错(Byzantine Fault Tolerant,BFT)协议来协调。只有当主要角色与其他节点交互时,主要角色才需要BFT。

Pilotfish能够扩展的原因在于SWs和EWs对状态进行了分片。每个交易被分配给一个单独的SW,每个区块链对象被分配给一个单独的EW。请注意,这与验证节点间的分片不同,验证节点被分配了状态的不同子集。在Pilotfish中,所有验证节点都被分配了整个状态,而分片发生在使用多台机器的每个验证节点内部。

在理想的世界中,每个交易只会访问来自一个分片的对象,因此分发交易执行将是将每个交易分派到其适当的EW分片。然而,在现实世界中,交易通常会访问来自多个分片的对象。为了处理这样的跨分片交易,Pilotfish的EWs会根据需要交换对象数据,以确保指定执行给定交易的EW在开始执行之前始终具有所需的对象数据。

在这个Pilotfish的示例部署中,一个SW和三个EW处理由主要角色接收的交易。

在上面的图表中,主要角色与其他验证节点的主要角色交互以将交易排序(➊)。 SW从主要角色接收交易排序信息,并将交易分派给适当的EW(➋)。在上面的示例中,当前交易T访问来自分片EW1和EW3的输入对象,因此SW只将T分派给这些EW。然后EW1和EW3分别针对可能与T冲突的其他交易进行调度(关于我们的调度算法更多内容,请参阅完整论文)(➌)。一旦T准备执行,EW1和EW3将适当的对象数据发送给T的指定执行者(在本例中,指定执行者是EW1,因此只需要EW3发送对象)。一旦EW1具有了所有所需的对象数据,它就执行T(➍)并将输出效果发送给所有的EW。每个EW都会对其拥有的对象进行本地更改(➎)。

其他基本原理

除了这个基本的交易流程外,阅读我们的完整论文以了解:

  • 我们如何调度交易以允许非冲突交易的并行执行。
  • 我们如何处理和从分片崩溃中恢复。
  • 我们如何在动态字段上实现读写操作。

实验结果简要介绍

快速浏览以下实验结果,该论文包含实验设置和结果的完整细节。

在下面的延迟与吞吐量图中,每个数据点代表一个实验运行,其中SequencingWorker以固定速率提交交易,持续时间为五分钟。我们实验性地增加发送到系统的交易负载,并记录执行交易的中位吞吐量和延迟。因此,所有的图表都展示了在低负载下所有系统的稳态延迟以及它们可以提供的最大吞吐量,之后延迟迅速增长。这是延迟突然增加到超过20毫秒的吞吐量。

我们强调,在所有的实验中,交易都是按照流式方式逐个提交的,而不是分批处理。对于Sui来说,这点尤为重要,因为它会在交易被批准后,异步处理快速通道交易,然后才会在共识提交中进行批处理。Pilotfish还支持批处理,这会显著提高吞吐量,但(当然)也会导致更高的延迟。

在这个第一个工作负载中,每个交易都是从一个地址向另一个地址转移硬币。我们生成的交易保证没有两个交易发生冲突。每个交易都操作来自其他交易不同的对象集。因此,这个工作负载是完全可并行化的。

延迟与吞吐量在简单转账方面:Pilotfish保持低延迟(<20毫秒)。

我们观察到,无论EW的数量如何,Pilotfish都能保持低于20毫秒的延迟。值得注意的是,我们还观察到随着添加更多的EW,每个交易的延迟会降低。在延迟为6到7毫秒的情况下,配置了八个EW的系统处理的单个转账数量比只有一个EW的配置要多五到六倍。

请注意,当工作负载增加时,对于单个执行工作者来说,延迟会呈线性增长,主要是因为交易排队的影响。更具体地说,单台机器没有足够的核心来充分利用工作负载的并行性,因此一些交易必须等待进行调度。对于更多的执行工作者,这种影响不再存在,这说明增加更多的硬件有利于通过降低执行延迟来降低服务时间。

在这种工作负载下,Pilotfish的可伸缩性并非完全线性。特别是,随着执行工作者数量的增加,吞吐量的边际改善逐渐减小。这是由于计算轻量级的简单转账工作负载以及吞吐量不受计算限制所致。因此,增加更多的CPU资源不再以相应地提高性能。下图展示了当工作负载受计算限制时,增加执行工作者数量的好处。

为了说明计算强度的影响,我们在每个交易中添加了一些合成计算。为简单起见,我们将迭代的斐波那契计算作为我们的合成计算。例如,在下面的图表中,“Fib-2500”表示每个交易计算第2500个斐波那契数。该图表显示了Pilotfish的最大吞吐量随着EW数量的增加而扩展的情况,针对三个不同的计算强度级别(Fib-2500是最低的,Fib-10000是最高的)。作为基准,我们包含了Sui基准的性能,该基准在单个计算机上运行,并且无法利用额外的硬件。

正如图表所示,在这种情况下,Pilotfish的吞吐量随着可用EW数量的增加呈线性增长,最多可达到八个EW的八倍吞吐量,接近理想状态。

计算密集型工作负载下的可扩展性:在计算成为瓶颈的情况下,Pilotfish可以实现线性扩展。

下一步是什么?

目前,Pilotfish是一个概念验证,它表明在惰性区块链中可以实现良好的分布式执行扩展性,而不会影响延迟。特别是,我们展示了高度分布式的执行器可以实现低延迟执行和更高的吞吐量,即使对于简单的转账也是如此。此外,对于计算密集型智能合约,我们展示了随着我们增加更多执行资源,吞吐量几乎实现了理想的增加。

Pilotfish为智能合约中的廉价计算开辟了道路,消除了一个CPU密集型合约的执行会对其他智能合约产生负面影响的担忧。

在下一次迭代中,我们计划实现并测试支持超过一个SW、分片复制和故障恢复,并支持超快速的远程直接内存访问网络。我们正在通过工程优化来改进我们的原型,添加这些功能并提高其端到端的性能。


关于 Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网|英文Twitter|中文Twitter|Discord|英文电报群|中文电报群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293695.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享react+three.js展示温湿度采集终端

前言 气象站将采集到的相关气象数据通过GPRS/3G/4G无线网络发送到气象站监测中心&#xff0c;摆脱了地理空间的限制。 前端&#xff1a;气象站主机将采集好的气象数据存储到本地&#xff0c;通过RS485等线路与GPRS/3G/4G无线设备相连。 通信&#xff1a;GPRS/3G/4G无线设备通…

计算机网络链路层

数据链路 链路是从一个节点到相邻节点之间的物理线路&#xff08;有线或无线&#xff09; 数据链路是指把实现协议的软件和硬件加到对应链路上。帧是点对点信道的数据链路层的协议数据单元。 点对点信道 通信的主要步骤&#xff1a; 节点a的数据链路层将网络层交下来的包添…

Dockerfile和Docker-compose

一、概述 Dockerfile和Docker Compose是用于构建和管理 Docker 容器的两个工具&#xff0c;但它们的作用和使用方式不同。 Dockerfile Dockerfile 是一个文本文件&#xff0c;用于定义 Docker 镜像的构建规则。它包含一系列指令&#xff0c;如 FROM&#xff08;指定基础镜像…

【蓝桥杯第十三届省赛B组】(详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…

安全SCDN的威胁情报库对DDOS防护有什么好处

目前网络攻击事件频频发生&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击已成为各种企业&#xff08;小到区域性小公司大到各种跨国公司&#xff09;的主要威胁&#xff0c;DDoS 攻击可能会对企业造成重大损害和破坏&#xff0c;比如对目标公司的业务造成产生不利…

吴晓波频道:构建知识付费领域的数据飞轮

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 知识付费正在完成新阶段的转变。 知识付费的概念可以追溯到 20 世纪 80 年代的彼得德鲁克&#xff0c;他在《后资本主义》一书中提出“知识经济”&#xff0c;指出…

IDEA跑Java后端项目提示内存溢出

要设置几个地方&#xff0c;都试一下吧&#xff1a; 1、默认是700&#xff0c;我们设置大一点&#xff08;上次配置了这儿就解决了&#xff09; 2、 3、 4、-Xmx4g

redolog 和 binlog 的区别以及两阶段提交

最近在学习MySQL架构的时候&#xff0c;关于执行器&#xff0c;存储引擎的具体操作那里&#xff0c;有些地方不是很懂&#xff0c;我仔细思考了一下&#xff0c;发现我对两阶段提交这个过程比较模糊&#xff0c;所以我特意写一篇文章来说一下两阶段提交。 比如说一条更新语句&…

接口自动化框架搭建(九):接入钉钉消息通知

1&#xff0c;jenkins安装钉钉插件 2&#xff0c;在钉钉群聊设置机器人 3&#xff0c;jenkins配置钉钉 根据情况选择&#xff1a; 除了这些&#xff0c;其他不用配置&#xff0c;配置完成点击确认 4&#xff0c;项目配置 添加后保存 5&#xff0c;测试下效果 构建完成后&a…

免费开源的 AI 绘图工具 ImgPilot

免费开源的 AI 绘图工具 ImgPilot 分类 开源分享 项目名: ImgPilot -- 通过提示词及涂鸦生成图片 Github 开源地址&#xff1a; GitHub - leptonai/imgpilot: Turn the draft into amazing artwork with the power of Real-Time Latent Consistency Model 在线地址&#xff…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

Excel 粘贴回筛选后的单元格不能完全粘老是少数据 ,有些单元格还是空的

环境&#xff1a; excel2021 Win10专业版 问题描述&#xff1a; excel 粘贴回筛选后的单元格不能完全粘老是少数据 有些单元格还是空的 复制选择筛选后A1-A10单元格 &#xff0c;定位条件&#xff09;&#xff08;仅可见单元格&#xff09;来访问&#xff0c;或者你可以使用…

牛角工具箱源码 轻松打造个性化在线工具箱

&#x1f389; Whats this&#xff1f; 这是一款在线工具箱程序&#xff0c;您可以通过安装扩展增强她的功能 通过插件模板的功能&#xff0c;您也可以把她当做网页导航来使用~ 觉得该项目不错的可以给个Star~ &#x1f63a; 演示地址 https://tool.aoaostar.com &#x1f…

MySQL 高级语句(一)

一、MySQL查询 1.1 排序 1.1.1 排序语法 1.1.2 order by案例 1.2 区间判断及查询不重复记录 1.2.1 区间判断 1.2.2 查询不重复记录 1.3 对结果进行分组 1.3.1 group by 语法 1.3.2 group by 案例 1.4 限制结果条目 1.4.1 LIMIT 语法 1.4.2 LIMIT 案例 1.5 设置别名…

分治——归并排序算法

例题一 解法&#xff08;归并排序&#xff09;&#xff1a; 算法思路&#xff1a; 归并排序的流程充分的体现了「分⽽治之」的思想&#xff0c;⼤体过程分为两步&#xff1a; ◦ 分&#xff1a;将数组⼀分为⼆为两部分&#xff0c;⼀直分解到数组的⻓度为 1 &#xff0c;使…

网络游戏推广利器:Xinstall一站式解决方案

随着网络游戏的飞速发展&#xff0c;游戏推广已成为游戏公司不可或缺的一环。然而&#xff0c;面对渠道繁多、效果评估困难、用户获取成本高昂等问题&#xff0c;许多游戏公司在推广过程中感到力不从心。今天&#xff0c;我们要为大家介绍一款强大的游戏推广利器——Xinstall。…

[leetcode] 100. 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&a…

Linux 理解进程信号

目录 一、共享内存通信机制中的临界资源访问与同步控制 1、概念 2、生活角度理解信号机制 3、信号量的操作 二、信号 1、生活角度的信号 2、技术应用角度的信号 3、操作系统角度的信号 信号如何产生 理解组合键变为信号 理解信号如何被进程保存 时钟中断&#xff0…

基于《2023腾讯云容器和函数计算技术实践精选集》—探索腾讯云TKE的Docker容器、Serverless和微服务优势

重剑无锋&#xff0c;大巧不工。 ——金庸 腾讯云TKE&#xff0c;全称Tencent Kubernetes Engine&#xff0c;是一种完全托管式的容器服务。它可以帮助用户快速、高效地部署和管理Kubernetes集群&#xff0c;并提供一系列与之相关的云服务&#xff0c;如负载均衡、云硬盘、对象…

汇编语言第四版-第3章 寄存器(内访问)

al为ax的低字节&#xff0c;ax寄存器为累加器。