使用Pilotfish扩展Sui执行能力

news2024/11/26 23:23:55

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.coloradmin.cn/o/1561021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP粘包是怎么回事,如何处理?

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Wafer的T7 Code是什么,怎么来的

1、T7 Code是什么 在半导体Cim系统中,waferstart 业务需要支持 Sorter 读取 Wafer 的 T7 Code,与 MES 的 Wafer ID 进行绑定,以便向 前追溯 Wafer 历史,那么问题来了,T7code 是什么 Wafer的T7 Code是一种背面刻号,用于标识双面抛光的晶圆。这种标记采用二维矩阵代码符号,…

海外问卷调查保姆级教程,看完这篇就不用再找别的了

大家好&#xff0c;我是橙河老师&#xff0c;最近很多小伙伴在问海外问卷调查怎么做&#xff1f;这篇文章就从环境搭建到做问卷的过程&#xff0c;全部展示给大家&#xff0c;希望大家能够学会。 这个是保姆级教程了&#xff0c;争取一次就把大家教会&#xff0c;多看教程&…

Docker服务

任务描述&#xff1a;请采用podman&#xff0c;实现有守护程序的容器应用。 &#xff08;1&#xff09;在linux2上安装docker-ce&#xff0c;导入rocky镜像。 &#xff08;2&#xff09;创建名称为skills的容器&#xff0c;映射本机的8000端口到容器的80端口&#xff0c;在容…

Object类-equals方法

细节&#xff1a;1、equals方法默认先比较两个对象的地址是否相同&#xff08;即两个对象是否是同一个对象&#xff09;&#xff0c;如果是同一个对象返回true&#xff1b;如果不是同一个对象&#xff0c;返回false。 2、子类中重写父类的equals方法后&#xff0c;比较的是两个…

如何算通过了PMP考试?

一般在PMP考试结束后的6-8周便可以在PMI网站查询到成绩&#xff0c;或者查看PMI发送给考生的成绩邮件。如果成绩上显示“PASS”就是通过&#xff0c;“FAIL”就是没通过。 需要注意的是你看到的成绩不是直接的分数&#xff0c;而是用A\T\B\N表示的&#xff0c;即Above Target(…

2024银行业最新数字化转型的方法与路径

银行业数字化转型是一场由思想到行动、由顶层到基层、由内部到外部的深刻变革&#xff0c; 需要科学方法论的指导。在推动体系性重塑、开放生态建设、业务科技融合、基础设施升 级以及体制机制变革等探索和实践中&#xff0c;银行业逐步形成从顶层设计到数字化能力建设&#xf…

JavaEE 初阶篇-深入了解多线程安全问题(指令重排序、解决内存可见性与等待通知机制)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 指令重排序概述 1.1 指令重排序主要分为两种类型 1.2 指令重排序所引发的问题 2.0 内存可见性概述 2.1 导致内存可见性问题主要涉及两个方面 2.2 解决内存可见性问…

C语言----预处理(详解)

好了书接上回。我在讲编译与链接的时候写过宏和条件建议。我说会在下一篇博客中讲解&#xff0c;那么来了。今天我们来详细的讲讲预处理。宏与条件编译也在其中&#xff0c;那么我们现在就来好好会会这个预处理吧。 预定义符号 关于预定义符号&#xff0c;我暂时只知道几个。并…

安装kubesphere的 devops 插件报错

安装kubesphere的 devops 插件报错&#xff1a; ks-minio 报错&#xff1a; TASK [common : Kubesphere | Check minio] *************************************** changed: [localhost]TASK [common : Kubesphere | Deploy minio] ************************************** fa…

期货开户分析的三个基本要素

我常用的交易系统为概率分析系统&#xff0c;具备的三个基本要素与三个基本原则&#xff1a; 1、行情研判规则。这是最基础的&#xff0c;你必须首先用交易系统对行情有一个正确的判断。 2、进出场规则。在进出场规则当中&#xff0c;我个人更看重出场规则。因为实际上&#…

腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践

腾讯云容器与Serverless的融合&#xff1a;探索《2023技术实践精选集》中的创新实践 文章目录 腾讯云容器与Serverless的融合&#xff1a;探索《2023技术实践精选集》中的创新实践引言《2023腾讯云容器和函数计算技术实践精选集》整体评价特色亮点分析Serverless与Kubernetes的…

什么是智慧公厕?智慧城市下的智慧公厕有什么功能和特点?

随着科技的不断进步和城市化的加快发展&#xff0c;智慧城市已经成为我们生活中的一部分。而在智慧城市的建设中&#xff0c;智慧公厕作为城市基础设施的重要组成部分发挥着重要的作用。那么什么是智慧公厕&#xff1f;智慧公厕是针对公共厕所的日常使用、运行、管理、运营等过…

数据科学薪酬分析项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目简介 《数据科学薪酬分析》是一个全面的分析项目&#xff0c;旨在探索和解释数据科学领域的薪酬趋势。通过分析607份不同工作年份、经验水平…

跑通飞浆平台的MTMCT 跨镜跟踪示例

想跑通飞浆平台的MTMCT跨镜跟踪示例&#xff0c;真的是难上加难啊&#xff01; 改了几处代码&#xff0c;可以顺利跑通了&#xff0c;特此记录&#xff1a; 第一处&#xff1a;不要拉主线的代码&#xff0c;改成 !git clone https://gitee.com/paddlepaddle/PaddleDetection…

C++教学——从入门到精通 7.if,else语句

有一个商人在街头衣服&#xff0c;每次卖完都不知道自己是赚了还是亏了&#xff0c;他想请你帮他算一算他一天赚了多少还是亏了多少 首先我们知道商人每天卖5件衣服&#xff0c;利润售价-成本&#xff0c;那么我们该编一个怎么样的程序呢&#xff1f; 我们来学一个新的语句—…

四氟进样器耐腐蚀耐高温可灵活加工PTFE材质含氟塑料注射器

四氟注射器用于抽取或者注入气体或者液体&#xff0c;四氟注射器由前端带有小孔的针筒以及与之匹配的活塞芯杆组成&#xff0c;用来将少量的液体或其注入到其它方法无法接近的区域或者从那些地方抽出&#xff0c;在芯杆拔出的时候液体或者气体从针筒前端小孔吸入&#xff0c;在…

MyBatis 参数重复打印的bug

现象 最近有个需求&#xff0c;需要在mybatis对数据库进行写入操作的时候&#xff0c;根据条件对对象中的某个值进行置空&#xff0c;然后再进行写入&#xff0c;这样数据库中的值就会为空了。 根据网上查看的资料&#xff0c;选择在 StatementHandler 类执行 update 的时候进…

虚拟内存到物理地址的映射,是CPU做的,还是操作系统做的?

虚拟地址到物理地址的转换&#xff0c;是CPU实现得&#xff0c;具体来说&#xff0c;就是CPU的内存管理单元 &#xff08;Memory Management Unit, MMU&#xff09;实现的。 为了加速地址翻译的 过程&#xff0c;现代CPU都引入了转址旁路缓存&#xff08;Translation Loopasid…

HarmonyOS 应用开发之I/O密集型任务开发指导 (TaskPool)

使用异步并发可以解决单次I/O任务阻塞的问题&#xff0c;但是如果遇到I/O密集型任务&#xff0c;同样会阻塞线程中其它任务的执行&#xff0c;这时需要使用多线程并发能力来进行解决。 I/O密集型任务的性能重点通常不在于CPU的处理能力&#xff0c;而在于I/O操作的速度和效率。…