一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种区块链网络的压力测试系统及方法与流程

2022-03-19 22:56:38 来源:中国专利 TAG:


1.本发明涉及区块链技术领域,尤其涉及一种区块链网络的压力测试系统、及方法。


背景技术:

2.区块链作为一种典型的分布式账本系统,凭借着其去中心化和不可篡改的性质,在近年来得到了越来越多的重视与应用。但是目前区块链的性能以及吞吐量仍然难以满足高负载、高并发的场景,如何准确获取区块链网络的性能指标对区块链网络的正常运行与优化非常重要。
3.现有技术中,通过向区块链网络注入压力测试的交易流量,可以获得区块链网络的负载能力、交易数据处理吞吐量和延迟时间等各项性能指标,从而根据这些性能指标维护区块链网络的正常运行,并且针对性地对区块链网络进行优化。
4.现有技术中采用大批量的注入交易对区块链网络进行压力测试,而没有考虑交易的实际应用场景、交易间的耦合度以及交易间的相对顺序等因素,有可能存在交易冲突从而导致区块链网络的压力测试结果不够准确。


技术实现要素:

5.本发明提供了一种区块链网络的压力测试系统及方法,以解决因交易冲突造成区块链网络的压力测试不充分、区块链网络的压力测试结果不够准确的技术问题。
6.本发明的目的,可以通过如下技术方案实现:
7.一种区块链网络的压力测试系统,包括:
8.区块链客户端,用于创建多个用户之间具有先后顺序的多个交易数据,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流,将多个所述交易工作流提交给区块链网络以便进行压力测试;其中,所述交易数据包括区块链交易以及对所述区块链交易的执行次数;
9.区块链网络,用于通过所述区块链网络的节点执行多个所述交易工作流进行压力测试,获取所述区块链网络的压力测试性能数据。
10.可选地,所述交易数据还包括:
11.智能合约以及对所述智能合约的调用次数,所述智能合约为可执行的一段代码,执行所述代码时生成具有逻辑关系的多个区块链交易。
12.可选地,区块链客户端包括:
13.交易数据创建模块,用于创建多个用户之间具有先后顺序的多个交易数据;
14.交易数据预处理模块,用于对多个所述交易数据进行预处理得到可并行工作且互不冲突的多个交易工作流;
15.任务提交模块,用于将多个所述交易工作流提交给区块链网络以便进行压力测试。
16.可选地,所述交易数据预处理模块对多个所述交易数据进行预处理,得到可并行
工作且互不冲突的多个交易工作流包括:
17.所述交易数据预处理模块通过构造有向无环图对多个所述交易数据进行解析,得到可并行工作且互不冲突的多个交易工作流。
18.可选地,所述任务提交模块将多个所述交易工作流提交给区块链网络以便进行压力测试包括:
19.所述任务提交模块根据预设参数确定所述交易工作流的并发数量,根据并发数量将所述交易工作流提交给区块链网络以便进行压力测试。
20.本发明还提供了一种区块链网络的压力测试方法,包括:
21.区块链客户端创建多个用户之间具有先后顺序的多个交易数据,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流,将多个所述交易工作流提交给区块链网络以便进行压力测试;其中,所述交易数据包括区块链交易以及对所述区块链交易的执行次数;
22.区块链网络通过所述区块链网络的节点执行多个所述交易工作流进行压力测试,获取所述区块链网络的压力测试性能数据。
23.可选地,所述交易数据还包括:
24.智能合约以及对所述智能合约的调用次数,所述智能合约为可执行的一段代码,执行所述代码时生成具有逻辑关系的多个区块链交易。
25.可选地,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流包括:
26.通过构造有向无环图对多个所述交易数据进行解析,得到可并行工作且互不冲突的多个交易工作流。
27.通过构造有向无环图对多个所述交易数据进行解析包括:
28.根据多个所述区块链交易的先后顺序构建有向无环图,通过有向无环图将没有先后联系的区块链交易划分到不同的交易工作流;
29.或者利用抽象语法树对智能合约的逻辑进行解析,拆分区块链账户之间的冲突关系,将没有先后联系的区块链交易划分到不同的交易工作流。
30.可选地,将多个所述交易工作流提交给区块链网络以便进行压力测试包括:
31.根据预设参数确定所述交易工作流的并发数量,根据并发数量将所述交易工作流提交给区块链网络以便进行压力测试。
32.本发明提供的一种区块链网络的压力测试系统及方法,其中系统包括:区块链客户端,用于创建多个用户之间具有先后顺序的多个交易数据,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流,将多个所述交易工作流提交给区块链网络以便进行压力测试;其中,所述交易数据包括区块链交易以及对所述区块链交易的执行次数;区块链网络,用于通过所述区块链网络的节点执行多个所述交易工作流进行压力测试,获取所述区块链网络的压力测试性能数据。
33.有鉴于此,本发明带来的有益效果是:
34.本发明提供了一种区块链网络的压力测试系统及方法,用户根据实际应用场景创建具有先后顺序的多个区块链交易,并定义了对每个区块链交易的执行次数,充分考虑了区块链交易的使用场景、区块链交易之间的耦合度和相对顺序,能降低区块链交易的随机
性对区块链网络性能的影响;然后对这些区块链交易进行预处理,能从多个区块链交易中快速解析出可以并行处理且互不冲突的多个交易工作流,能够提高区块链网络的压力测试过程中的并行度,最大限度地利用区块链网络的资源性能,能提高区块链网络对多个区块链交易的执行速度,并提高区块链网络压力测试的测试结果准确程度。
附图说明
35.图1为本发明压力测试系统的结构示意图;
36.图2为本发明压力测试方法的流程示意图;
37.图3为本发明压力测试方法实施例的流程示意图一;
38.图4为本发明压力测试方法实施例的流程示意图二。
具体实施方式
39.术语解释:
40.区块链:区块链技术最初从比特币系统和它的原理抽象发展而来,从狭义而言,区块链指的是类似与比特币系统中使用链式的哈希结构进行串联而成的数据块,同时实现链式的哈希证明,保证历史的数据不可篡改。
41.有向无环图:简称dag,本发明中涉及的有向图的称呼,都指的是有向无环图。它是一个数学概念,在图论中,有向无环图指的是一个没有回路的有向图,更为精准的定义是:如果有一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图。
42.智能合约:本质上,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理,简单而言,就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。通过合约以数字化的形式写入区块链中,因区块链的特性,数据将无法删除、修改,只能新增,整个过程透明可跟踪,保证了历史的可追溯性,同时结合区块链,保证了去中心化。
43.异步并发:并发在操作系统中指的是一个时间段中,有几个程序都处于运行的状态;而异步指的是不需要等待而继续执行程序流;两者结合简单理解就是在一批程序执行过程中可以不用互相等待而同时处理,达到快速并行的效果。
44.抽象语法树(abstract syntax tree,ast):简称语法树(syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
45.为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
46.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
47.本发明实施例提供了一种区块链网络的压力测试系统及方法,以解决因交易冲突
造成区块链网络的压力测试不充分、区块链网络的压力测试结果不够准确的技术问题。
48.目前区块链网络的性能以及吞吐量仍然难以满足高负载、高并发的场景,因此出现了越来越多的区块链开发研究,而在开发的过程中,获取区块链网络的性能指标数据成为了开发者重要的参考途径。通过向区块链网络注入压力测试的交易流量,可以获得区块链网络的负载能力、交易数据处理吞吐量和延迟时间等各项性能指标数据,从而根据这些性能指标维护区块链的正常运行,并且针对性地对区块链网络的性能进行优化。
49.现有的区块链测试框架研究,大部分集中在从交易性能和资源性能、网络性能三个层面出发进行区块链的框架搭建,然后进行测试,例如对吞吐量、延迟时间、cpu、内存的消耗、网络延迟、节点的可用性等性能指标。而在此基础上的压力测试,通常是通过注入大量的执行交易、智能合约或者重放实际世界的交易到搭建好的区块链网络中,然后通过各种方法收集性能指标,达到性能测试的目的。
50.在这些研究中,通常是采用大批量的注入交易进行测试,而没有考虑用户之间的耦合度,也没有考虑交易的实际应用场景、交易间的先后顺序,同时没有考虑受智能合约、交易影响的交易排队导致区块链交易无法尽可能地高度并发、榨干区块链性能的结果,导致区块链网络的压力测试结果远低于实际区块链的极限性能,也就是说,受不同测试场景的一批区块链交易的随机性影响,对区块链网络进行压力测试得到的性能指标并不能体现其最佳性能。
51.本发明要解决的首要问题是:区块链系统的压力测试方案,也就是在针对区块链进行压力测试的不同应用场景下,使用本发明提供的区块链网络的压力测试系统及方法,能极尽所能地榨干区块链网络的资源能力,从而对区块链网络的极限性能进行有效的摸底测试。
52.而本发明正是针对这一点,对想要进行压力测试的一批区块链交易都进行了一个预处理,进行有向无环图即dag任务解析,该解析包括智能合约以及区块链交易的解耦,通过dag任务解析使得区块链交易被尽可能最佳地优化成能并行执行的交易工作流,并发的驱使区块链网络在最大压力下运行,使得测得的数据才是压力测试下应该得到的数据。
53.请参阅图1,本发明提供了一种区块链网络的压力测试系统的实施例,包括:
54.区块链客户端11,用于创建多个用户之间具有先后顺序的多个交易数据,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流,将多个所述交易工作流提交给区块链网络以便进行压力测试;其中,所述交易数据包括区块链交易以及对所述区块链交易的执行次数;
55.区块链网络22,用于通过所述区块链网络的节点执行多个所述交易工作流进行压力测试,获取所述区块链网络的压力测试性能数据。
56.本实施例提供的区块链网络的压力测试系统,能对区块链网络进行有效的压力测试,本实施例中的区块链网络包括各种类型的区块链系统,例如以太坊、eos、fabric以及各种联盟链。
57.本实施例中,区块链客户端创建多个用户之间具有先后顺序的多个交易数据,定义这些交易数据的目的是为了模仿。本实施例中的区块链客户端包括:交易数据创建模块,用于创建多个用户之间具有先后顺序的多个交易数据;交易数据预处理模块,用于对多个所述交易数据进行预处理得到可并行工作且互不冲突的多个交易工作流;任务提交模块,
用于将多个所述交易工作流提交给区块链网络以便进行压力测试。
58.对区块链进行压力测试时,开发者、用户、实验人等测试者根据自己使用的实际场景去定义一批交易数据,交易数据中包括用来进行压力测试的、具有先后顺序的多个区块链交易和/或智能合约,以及区块链交易的执行次数和/或对智能合约的调用次数。本实施例中定义这些交易数据的目的是,为了模仿用户想进行测试的某个应用场景,比如银行后台系统使用区块链,并且测试在这个区块链网络在该场景中的性能,通过区块链客户端构建一批交易来模拟银行后台系统的使用情景;淘宝后台系统使用区块链,也通过区块链客户端构建一批交易来模拟淘宝后台系统的使用情景。
59.例如,假设用a、b、c、d、e、f、g、h、i来代表银行后台系统创建的用户(即区块链的账户),若多个区块链交易即第一批区块链交易为:
60.a
‑‑‑
100
‑‑‑
》b(代表a给b转账100元)
61.b
‑‑‑
100
‑‑‑
》c
62.c
‑‑‑
100
‑‑‑
》d
63.e
‑‑‑
100
‑‑‑
》f
64.f
‑‑‑
100
‑‑‑
》g
65.h
‑‑‑
100
‑‑‑
》i
66.例如,对于一个银行系统的区块链,测试者可以通过区块链客户端随机定义多个用户之间的转账交易,如a转账给b,b转账给c,d转账给f等交易。测试者还可以通过区块链客户端定义智能合约,智能合约为可执行的一段代码,执行所述代码时生成具有逻辑关系的多个区块链交易。可以在智能合约中定义一些用户转账的逻辑,如:当a的余额大于b的余额时,a给b转账;当b的余额大于a的余额时,b给a转账等类似的交易。
67.由于使用区块链的用户是根据自己熟悉的应用场景去定义交易和/或智能合约的内容,因此,不同用户定义的交易和/或智能合约可能存在很大的差异性。
68.本实施例中,可以通过手动或自动方式构造有向无环图即dag对交易数据进行预处理。首先,用户可以通过构造有向无环图的方式规划出符合自己实际场景且最优的交易顺序以及智能合约的执行顺序;其次,在用户定义的一整批区块链交易中,用户可以通过有向无环图快速解析出最高速的、可以并行处理的多个交易工作流,能提高对区块链网络进行压力测试过程中的并行度,才能充分利用区块链网络的资源性能,能提高区块链网络对多个区块链交易的执行速度,使得区块链网络的压力测试的结果数据更为准确。
69.值得说明的是,最高速的、可以并行处理的多个交易工作流,是指相对其他组合形式的交易工作流,这组交易工作流在耗费相同资源时,执行速度最快、执行所需时间最短,能保证区块链交易尽可能地高度并发,能最大限度地榨干区块链网络的性能,利用这组交易工作流对区块链网络进行压力测试时,能得到最优的性能指标数据。
70.有向无环图即dag的构建,在以往的测试场景下,基本上所有的测试工具有两种测试手段,第一种测试手段是:测试时顺序执行用户所定义的一批区块链交易,即按照用户定义交易的先后顺序来依次执行交易,这种方式的缺点是测试速度很慢;第二种测试手段是:随机划分交易,同时启动多个客户端并行发送交易进行并发执行,这种方式没有考虑用户之间的冲突,可能造成大量的资源浪费。
71.例如,采用随机划分交易的方式将第一批区块链交易划分为两个并行的执行工作
流:
72.(1)第一个交易工作流依次包括以下区块链交易:
73.a
‑‑‑
100
‑‑‑
》b(代表a给b转账100元)
74.b
‑‑‑
100
‑‑‑
》c
75.c
‑‑‑
100
‑‑‑
》d
76.e
‑‑‑
100
‑‑‑
》f
77.(2)第二个交易工作流依次包括以下区块链交易:
78.f
‑‑‑
100
‑‑‑
》g
79.h
‑‑‑
100
‑‑‑
》i
80.对得到的两个交易工作流进行分析可知,e
‑‑‑
》f
‑‑‑
》g这个交易流程被切分为两部分并行处理,若假设用户f原本是没有余额的,那么同时并行的第二个工作流f
‑‑‑
》g会因为用户f没有余额而执行失败。而实际上,如果将e
‑‑‑
》f
‑‑‑
》g放在同一个工作流中一起执行,即用户e给用户f转账100元后,用户f的余额不再为0,用户f有能力给用户g转账100元,因此交易e
‑‑‑
》f、f
‑‑‑
》g都能顺利执行。将e
‑‑‑
》f
‑‑‑
》g放在同一个工作流中,能解决实际的应用场景中,由于随机切分并行的交易工作流从而导致并发执行失败、压力测试不充分的缺点。
81.本实施例中,为了解决用户之间的耦合度问题,可以根据有向无环图dag来构建用户之间的关系图,可以用有向无环图dag将存在转账关系的用户关联起来。比如对于第一批区块链交易,运用数据结构的方法,构建出多个并行的dag图,以下为得到的3个dag图:
82.a
‑‑‑
》b
‑‑‑
》c
‑‑‑
》d
83.e
‑‑‑
》f
‑‑‑
》g
84.h
‑‑‑
》i
85.可以看到,构建得到的dag图是没有长度限制的,每个dag图中包含的交易数量可能不同,dag图的长度大说明该dag图包含的区块链交易多,dag图的长度小说明该dag图包含的区块链交易少。通过构建dag图将可能存在耦合关系的用户进行切分,将可能存在耦合的用户划分到不同的dag图中,通过dag图将用户或交易之间的耦合情况给切分出来,能避免用户或交易之间的冲突。
86.值得说明的是,若多个用户之间存在耦合关系,则这些用户之间的交易也可能存在耦合关系。例如用户a与用户b之间存在耦合关系,同时,用户b与用户c之间也存在耦合关系,
87.值得说明的是,通过构造有向无环图即dag图对交易数据进行预处理时,可以选择用户手动方式构建dag图,也可以选择自动方式构造最优dag图。根据dag图可以得到对应的交易工作流,每个dag图都对应着一个交易工作流,不同dag图对应的不同交易工作流之间没有冲突,可以并行执行。
88.值得说明的是,在区块链系统中,进行转账操作的主体是不同的用户,他们之间的一次转账操作就是一笔交易,比如,用户a给用户b转账100元,就是一笔交易。而智能合约是部署在区块链上的具有一定功能的一段代码,用户可以调用该智能合约来实现一定功能,比如,用户a可以调用智能合约c,来实现是否转账给用户b的功能,具体的,用户a判断自己的余额是否大于100元,如果大于,则转账给用户b,否则不给用户b转账。智能合约从某种意
义上来看,也是一个区块链交易,智能合约中包含可以实现各种自定义功能的功能代码。
89.本实施例提供了一种区块链网络的压力测试系统,区块链客户端根据实际应用场景创建具有先后顺序的多个区块链交易,并定义了对每个区块链交易的执行次数,充分考虑了区块链交易的使用场景、区块链交易之间的耦合度和相对顺序,能降低区块链交易的随机性对区块链网络性能的影响;然后对这些区块链交易进行预处理,能从多个区块链交易中快速解析出可以并行处理且互不冲突的多个交易工作流,能够提高区块链网络的压力测试过程中的并行度,最大限度地利用区块链网络的资源性能,能提高区块链网络对多个区块链交易的执行速度,并提高区块链网络压力测试的测试结果准确程度。
90.请参阅图2,本发明还提供了一种区块链网络的压力测试方法的实施例,包括:
91.s100:区块链客户端创建多个用户之间具有先后顺序的多个交易数据,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流,将多个所述交易工作流提交给区块链网络以便进行压力测试;其中,所述交易数据包括区块链交易以及对所述区块链交易的执行次数;
92.s200:区块链网络通过所述区块链网络的节点执行多个所述交易工作流进行压力测试,获取所述区块链网络的压力测试性能数据。
93.在步骤s100中,用户针对压力测试的实际应用场景定义一批区块链交易或者智能合约,同时包括述区块链交易的执行次数以及对智能合约的调用次数。一般的压力测试都是简单的顺序执行,比如说a转账给b执行1000次,b转账给c执行1000次。如果用户对于自己的场景足够熟悉,而且希望有交易的顺序,各个任务之间的关系有比较复杂的关系,可以通过自动构造dag图,本实施例提供了特定的简单语言对于构造dag,比如“a(10,100)
‑‑‑
》b(2,20)
‑‑‑
》c”,代表在该工作流中,首先将a转账给b这笔交易执行100次,每笔交易的金额为10元,然后再将b转账给c这笔交易执行20次,每笔交易的金额为2元。
94.值得说明的是,区块链交易和智能合约的区别主要在于,它们之间的复杂程度是不一样的,智能合约从本质上来说也是一种交易类型,执行智能合约得到的是交易工作流。
95.一般来说,用户并不会非常熟悉自己实际使用的场景所对应的dag图,而是希望尽可能地高度并发、榨干区块链系统的性能,测得区块链系统的最佳性能。因此,可以选择自动dag工作流调度。dag的工作流调度又分为通过dag对区块链交易进行解析和通过dag对智能合约进行解析。
96.通过dag对区块链交易进行解析时,需要考虑用户之间的耦合度,需要对一整批交易中不会产生耦合的交易进行拆分,比如,若某批次区块链交易中包括以下5个区块链交易:a
‑‑‑
》b、b
‑‑‑
》c、c
‑‑‑
》d、e
‑‑‑
》f、f
‑‑‑
》g;该批次区块链交易中,用户a与用户b之间存在转账关系,用户b与用户c之间也存在转账关系。若将这5个区块链交易分别划分到相互之间没有联系的交易工作流,然后将这些交易工作流进行并行处理,可能会导致锁住状态的情况,即某个交易工作流必须等待另一个交易工作流执行完了才能执行,交易工作流之间的冲突会降低执行速度。因此,正确的划分方式是将上述5个交易划分为以下两个交易工作流:(1)a
‑‑‑
》b
‑‑‑
》c
‑‑‑
》d;(2)e
‑‑‑
》f
‑‑‑
》g;可见,这两个交易工作流之间不会互相影响,将这两个交易工作流进行并行处理,能够最大限度地提高执行速度。利用自动方式构建有向无环图dag,能将用户定义的一批区块链交易快速解析成可并行工作且互不冲突的多个交易工作流,对于状态不可预测的区块链执行系统来说是非常好的压力测试手段。同时,如
果区块链网络为具备分片功能的区块链,能有效提高分片区块链的并发利用率。这就是通过构建dag的手段去解决用户或交易账户冲突的关键。
97.本实施例中,根据用户定义的多个区块链交易的前后顺序构造dag图,用简单的数据结构图,将用户之间的关系定义在图上,比如整理所有交易后可以得到a
‑‑‑
》b
‑‑‑
》c
‑‑‑
》d这样的图关系,这是一个构建用户之间的转账交易的简单数据结构。构造dag图的目的是为了将没有任何前后联系(即没有依赖关系)的用户分配到不同的交易工作流中,不同交易工作流中的用户不会存在前后冲突,这些交易工作流之间互不影响,可以并行执行。
98.通过dag对智能合约进行解析,智能合约本质上是一段代码,主要是从抽象语法树(abstract syntax tree,ast)出发,通过分解ast的方式,可以对代码的逻辑进行解析,同时从中找到相应的区块链账户,与上述检测交易冲突一样,可以将智能合约的执行流程梳理出来,通过对智能合约的ast语法树进行拆解,最终目的是为了拆分区块链账户之间的冲突关系,得到互不冲突、可并行执行的交易工作流。
99.值得说明的是,抽象语法树(ast)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,抽象表示把代码进行了结构化的转化,转化为一种数据结构。
100.具体的,智能合约的dag解析过程为:
101.智能合约本质上是部署在区块链上一段有逻辑功能的代码,从某种意义上来说,智能合约就是具有复杂关系的一批区块链交易的糅合,例如,我们可以用一个智能合约(智能合约1)来实现b
‑‑‑
》c,c
‑‑‑
》d这两个区块链交易的集合,也就是说用户只要调用这个智能合约,那么相当于依次执行了b
‑‑‑
》c,c
‑‑‑
》d这两个本来要分开执行的区块链交易,即调用一次这个智能合约相当于执行了b
‑‑‑
》c
‑‑‑
》d这个交易工作流。
102.可以理解的是,如果测试场景中有定义了智能合约,我们只需要把这个智能合约解析成为多个串联在一起的交易,就可以用上面同样的方法进行dag构建。
103.ast树解析是很常见的代码解析技术,它是一种判断逻辑的代码树,根据定义的变量,找到实际的用户主体,然后根据执行的逻辑,找到用户的行为。因此,利用ast可以将智能合约的代码解析出不同用户、以及用户的行为,比如可以得到b
‑‑‑
》c
‑‑‑
》d这个结果。假设用户定义了一批区块链交易:
104.a
‑‑‑
100
‑‑‑
》b(代表a给b转账100块钱)
105.智能合约1(b
‑‑‑
》c
‑‑‑
》d)
106.e
‑‑‑
100
‑‑‑
》f
107.f
‑‑‑
100
‑‑‑
》g
108.h
‑‑‑
100
‑‑‑
》i
109.经过解析,可以得到如下区块链交易:
110.a
‑‑‑
100
‑‑‑
》b(代表a转账100块钱给b)
111.b
‑‑‑
100
‑‑‑
》c
112.c
‑‑‑
100
‑‑‑
》d
113.e
‑‑‑
100
‑‑‑
》f
114.f
‑‑‑
100
‑‑‑
》g
115.h
‑‑‑
100
‑‑‑
》i
116.接下来可以进一步整合得到最终的dag图,用类似的方法将智能合约解析成交易,用处理交易类似的方法展开,得到最终的交易工作流:
117.(1)第一个交易工作流:a
‑‑‑
》b,智能合约1;
118.(2)第二个交易工作流:e
‑‑‑
》f
‑‑‑
》g、h
‑‑‑
》i;
119.本实施例中,通过手动设定场景dag或者自动dag工作流调度,最终确定可并行工作且互不冲突的多个交易工作流。对于可并行工作且互不冲突的交易工作流的具体数量,用户可以预设参数确定交易工作流的并发数量,即用户预先设定交易工作流的宽度参数,宽度参数关系到并发的交易工作流的数量,然后在客户端上开多个进程用来模拟多个客户端。如图4所示,图中有三个交易工作流,第一个交易工作流是:交易1、交易3和交易5;第二个交易工作流是:交易2、合约1和交易4;第三个交易工作流是:交易6和交易7。
120.值得说明的是,交易工作流的宽度参数决定了交易工作流的并发数量,宽度太小,并发太少,难以达到压力测试的目的;但如果宽度太大,并发太多,造成请求队列阻塞,反而造成系统阻塞,降低速度,所以选一个适合的数值是用户根据实际物理资源决定。一般而言,资源有限,所以交易工作流的数量不会很多,宽度参数一般取2至5。而且,最终的交易工作流长度不限制一样长,能执行完、而且每个交易工作流的长度差距不会很大就行。
121.由于并发执行的多个交易工作流间的长度不一致,如果开启三个交易工作流客户端进行交易的提交执行,显然第三个交易工作流很快就完成了,造成资源浪费。因此,我们可以只设置两个工作流客户端,根据设定的工作流宽度参数(2个)把原本三个dag工作流(a
‑‑‑
》b
‑‑‑
》c
‑‑‑
》d、e
‑‑‑
》f
‑‑‑
》g、h
‑‑‑
》i),根据平均长度接近的方式去组合原本的交易工作流,比如第二个交易工作流比较短,那么第三个交易工作流就接在他后面执行,变成两个交易工作流:
122.(1)第一个交易工作流:a
‑‑‑
》b
‑‑‑
》c
‑‑‑
》d;
123.(2)第二个交易工作流:e
‑‑‑
》f
‑‑‑
》g、h
‑‑‑
》i;
124.值得说明的是,在步骤s200中,在同一台机器上即区块链客户端,开多个进程,模拟多个客户端,每个客户端只能提交一个交易工作流。
125.在得到多个工作流后,我们就可以启动多个客户端进行任务提交,也就是所谓的往区块链系统进行交易注入,对区块链网络进行压力测试,在这个过程中,可以获取对区块链进行性能的统计,这里性能统计是常用方法,不做深入讨论,主要可以通过日志解析的形式,快速的从区块链系统中获得交易、性能参数,也可以在客户端插桩进行时间、资源的统计,进行实时的计算。
126.本实施例提供的区块链网络的压力测试方法,用户根据实际应用场景创建具有先后顺序的多个区块链交易,并定义了对每个区块链交易的执行次数,充分考虑了区块链交易的使用场景、区块链交易之间的耦合度和相对顺序,能降低区块链交易的随机性对区块链网络性能的影响;然后对这些区块链交易进行预处理,能从多个区块链交易中快速解析出可以并行处理且互不冲突的多个交易工作流,能够提高区块链网络的压力测试过程中的并行度,最大限度地利用区块链网络的资源性能,能提高区块链网络对多个区块链交易的执行速度,并提高区块链网络压力测试的测试结果准确程度。
127.本发明实施例提供的区块链网络的压力测试方法,首次提出了用dag解析批量交易的方式,首先允许用户自定义测试场景的图结构、交易顺序;其次可以解决并发和交易冲
突的矛盾,对于支持分片的区块链系统,更是一种提速的操作;再者对智能合约也进行了语法树拆解,有效进行dag分解,将dag的优势充分发挥在区块链网络的压力测试中。
128.本发明实施例提供的区块链网络的压力测试方法,适应于使用区块链的不同商业场景、工业场景、实验场景,甚至对于较为简单清晰的智能合约,都能对实现功能或者是一批区块链交易进行有效的有向无环图(dag)任务解析,从而实现异步并发、最大化测试出在该场景下区块链的极限性能。
129.请参阅图3,本发明还提供了一种区块链网络的压力测试方法的另一实施例。本实施例中,在区块链网络的每一个压力测试的场景下面,用户会定义一批区块链交易和/或智能合约。本实施例首先对这一批区块链交易进行预处理,根据用户设定的参数(下面会展开说明参数)对这一批区块链交易进行dag分解,因此,可以得到可以并行工作又互不干扰的多个交易工作流,根据这些交易工作流,在客户端启动多个进程,并行将交易工作流提交给区块链网络进行压力测试,然后通过日志或者客户端插桩等方式进行性能数据的统计。
130.如图4所示,存在三种方式,用户可以选择其中的某一种方式得到最终的dag,手动设定场景dag,是用户根据提供的特定语言,根据自己的实际情况去完全构建一个类似上面两个工作流的最终dag;以实现对存在关联关系的用户进行划分。
131.本实施例通过dag对交易进行预处理(可以选择用户手动构建dag,也可以选择自动最优构造dag),首先帮助用户通过工作流图的方式最好的规划出符合自己实际场景的交易顺序、执行顺序,其次,帮助用户快速解析出在定义的一整批交易中最高速的可以并行处理的交易工作流,提高压力测试过程中的并行度,这才能充分利用区块链的资源性能,将区块链面对这一批交易体现的速度提高,使得测得的数据更为准确。
132.在得到多个工作流后,我们就可以启动多个客户端进行任务提交,也就是所谓的往区块链系统进行交易注入,进行压测,在这个过程中,我们就可以通过性能获取模块对区块链进行性能的统计,这里性能统计是常用方法,不做深入讨论,主要可以通过日志解析的形式,快速的从区块链系统中获得交易、性能参数,也可以在客户端插桩进行时间、资源的统计,进行实时的计算。
133.本发明实施例首次提出了用dag解析批量交易的方式,首先允许用户自定义测试场景的图结构、交易顺序;其次可以解决并发和交易冲突的矛盾,对于支持分片的区块链系统,更是一种提速的操作;再者对智能合约也进行了语法树拆解,有效进行dag分解,将dag的优势充分发挥在区块链网络的压力测试中。
134.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
135.在本技术所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
136.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
137.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
138.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
139.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献