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

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

2022-03-19 22:56:54 来源:中国专利 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.图1为本发明分布式压力测试系统的结构示意图;
33.图2为本发明分布式压力测试方法的流程示意图;
34.图3为本发明分布式压力测试方法实施例的流程示意图一;
35.图4为本发明分布式压力测试方法实施例的流程示意图二。
具体实施方式
36.术语解释:
37.区块链:区块链是一种典型的分布式账本系统,它融合了共识机制、加密算法、点对点传输和数据存储等计算机技术,具有极高的应用价值。从狭义而言,区块链指的是使用链式的哈希结构进行串联而成的数据块,同时实现链式的哈希证明,保证历史的数据不可篡改。
38.有向无环图:简称dag,本发明中涉及的有向图的称呼,都指的是有向无环图。它是一个数学概念,在图论中,有向无环图指的是一个没有回路的有向图,更为精准的定义是:如果有一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图。本发明中,有向无环图的节点表示用户,有向无环图的有向边表示区块链交易。
39.智能合约:本质上,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理,简单而言,就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。通过合约以数字化的形式写入区块链中,因区块链的特性,数据将无法删除、修改,只能新增,整个过程透明可跟踪,保证了历史的可追溯性,同时结合区块链,保证了去中心化。
40.异步并发:并发在操作系统中指的是一个时间段中,有几个程序都处于运行的状态;而异步指的是不需要等待而继续执行程序流;两者结合简单理解就是在一批程序执行过程中可以不用互相等待而同时处理,达到快速并行的效果。
41.抽象语法树(abstract syntax tree,ast):简称语法树(syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
42.为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
43.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
44.本发明实施例提供了一种区块链网络的分布式压力测试系统及方法,以解决因没有考虑区块链网络节点的网络场景情况而导致区块链网络的压力测试不充分、区块链网络的压力测试结果不够准确的技术问题。
45.目前区块链网络的性能以及吞吐量仍然难以满足高负载、高并发的场景,因此出现了越来越多的区块链开发研究,而在开发的过程中,获取区块链网络的性能指标数据成为了开发者重要的参考途径。通过向区块链网络注入压力测试的交易流量,可以获得区块链网络的负载能力、交易数据处理吞吐量和延迟时间等各项性能指标数据,从而根据这些性能指标维护区块链的正常运行,并且针对性地对区块链网络的性能进行优化。
46.现有的区块链测试框架研究,大部分集中在从交易性能和资源性能、网络性能三个层面出发进行区块链的框架搭建,然后进行测试,例如对吞吐量、延迟时间、cpu、内存的消耗、网络延迟、节点的可用性等性能指标。而在此基础上的压力测试,通常是通过注入大量的执行交易、智能合约或者重放实际世界的交易到搭建好的区块链网络中,然后通过各种方法收集性能指标,达到性能测试的目的。
47.在这些研究中,通常是采用大批量的注入交易进行压力测试,而没有考虑交易之间的耦合度,也没有考虑交易的实际应用场景、交易间的先后顺序,同时没有考虑受智能合约、交易影响的交易排队导致区块链无法尽可能地高度并发、榨干区块链性能的结果,导致区块链网络的压力测试结果远低于实际区块链的极限性能,也就是说,受不同测试场景的一批区块链交易的随机性影响,对区块链网络进行压力测试得到的性能指标并不能体现其最佳性能。
48.而本发明正是针对这一点,对想要进行压力测试的一批区块链交易都进行了一个预处理,进行有向无环图即dag任务解析,该解析包括智能合约以及区块链交易的解耦,通过dag任务解析使得区块链交易被尽可能最佳地优化成能并行执行的交易工作流,并发的驱使区块链网络在最大压力下运行,使得测得的数据才是分布式压力测试下应该得到的数据。
49.现有技术中,考虑的基本上是区块链本身服务器节点的分布式参数,大部分考虑的是区块链节点的网络情况,没有考虑客户端本身是分布式的情况,也没有考虑分布式客户端的网络情况对区块链网络压力测试的影响,本发明在同时模拟客户端和服务端的分布式网络场景的情况下,提出了更加高可用的压力测试方案。
50.事实上,区块链真实的系统是分布式的,不管是客户端节点(也就是提交任务的模块节点),还是区块链自身的系统,都是分布式部署的,需要更加完善的框架来保障区块链系统的可用性。本发明将对区块链网络的压力测试扩展到分布式的测试框架中,既包含了作为任务提交的客户端是分布式部署的,也包含了区块链的节点是分布式部署的。
51.本发明要解决的首要问题是:区块链系统的分布式压力测试方案,也就是在针对区块链进行分布式压力测试的不同场景下,使用本发明提出的方法、装置与框架,能极尽所能榨干区块链的资源能力,在兼顾了分布式客户端,分布式区块链系统部署的前提下,从而对其的极限性能进行有效的摸底测试。
52.请参阅图1,本发明提供了一种区块链网络的分布式压力测试系统的实施例,包括:
53.区块链客户端11,用于创建多个用户之间具有先后顺序的多个交易数据,对多个所述交易数据进行预处理,得到可并行工作且互不冲突的多个交易工作流,将多个所述交易工作流分发给相应数量的区块链客户端,多个所述区块链客户端将多个所述交易工作流提交给区块链网络以便进行压力测试;其中,所述交易数据包括区块链交易以及对所述区块链交易的执行次数;
54.区块链网络22,用于通过所述区块链网络的节点执行多个所述交易工作流进行压力测试,获取所述区块链网络的压力测试性能数据。
55.本实施例提供的区块链网络的分布式压力测试系统,能对区块链网络进行有效的分布式压力测试,本实施例中的区块链网络包括各种类型的区块链系统,例如以太坊、eos、fabric以及各种联盟链。
56.本实施例中,区块链客户端创建多个用户之间具有先后顺序的多个交易数据,定义这些交易数据的目的是为了模仿区块链网络的真实交易情况。对区块链进行压力测试时,开发者、用户、实验人等测试者根据自己使用的实际场景去定义一批交易数据,交易数据中包括用来进行压力测试的、具有先后顺序的多个区块链交易和/或智能合约,以及区块链交易的执行次数和/或对智能合约的调用次数。本实施例中定义这些交易数据的目的是,为了模仿用户想进行测试的某个应用场景,比如银行后台系统使用区块链,并且测试这个区块链网络在该场景中的性能,通过区块链客户端构建一批交易来模拟银行后台系统的使用情景;淘宝后台系统使用区块链,也通过区块链客户端构建一批交易来模拟淘宝后台系统的使用情景。
57.例如,假设用a、b、c、d、e、f、g、h、i来代表银行后台系统创建的用户(即区块链的账户),若多个区块链交易即第一批区块链交易为:
58.a
‑‑‑
100
‑‑‑
》b(代表a给b转账100元)
59.b
‑‑‑
100
‑‑‑
》c
60.c
‑‑‑
100
‑‑‑
》d
61.e
‑‑‑
100
‑‑‑
》f
62.f
‑‑‑
100
‑‑‑
》g
63.h
‑‑‑
100
‑‑‑
》i
64.例如,对于一个银行系统的区块链,测试者可以通过区块链客户端随机定义多个用户之间的转账交易,如a转账给b,b转账给c,d转账给f等交易。测试者还可以通过区块链客户端定义智能合约,智能合约为可执行的一段代码,执行所述代码时生成具有逻辑关系的多个区块链交易。可以在智能合约中定义一些用户转账的逻辑,如:当a的余额大于b的余额时,a给b转账;当b的余额大于a的余额时,b给a转账等类似的交易。
65.由于使用区块链的用户是根据自己熟悉的应用场景去定义交易和/或智能合约的
内容,因此,不同用户定义的交易和/或智能合约可能存在很大的差异性。
66.而对于一般的区块链分布式压力测试,开发者或者实验人会在不同的机器上部署多个区块链节点,使用一定的方式模拟这些分布式区块链节点的可用性。例如,模拟一两个区块链节点宕机了、或者模拟一些区块链节点恶意发送错误交易、或者是模拟不同区块链节点的不同负载程度。但是对于发送区块链交易的区块链客户端节点的故障模拟却基本没有涉及,也没有通过一定的方式去补偿、处理那些没有被正常执行的区块链交易。
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.在得到多个工作流后,我们就可以启动多个区块链客户端进行任务提交,也就是所谓的往区块链系统进行区块链交易注入,进行压力测试。本实施例中,专注于在分布式压力测试中如何配合通过构造有向无环图得到的交易工作流进行压力测试。由于在分布式的场景下,相比单机情况,有很多网络的未知情况,不管是网络的可用性、还是客户端的负载情况,都将敏感地影响提交任务的效率,进而影响区块链压力测试的充分性。
121.根据交易工作流的数量分别确定分布式客户端节点、分布式区块链节点的数量,根据分布式客户端节点、分布式区块链节点的数量将所述交易工作流提交给区块链网络以便进行压力测试。
122.因此,本实施例中将多个交易工作流提交给多个区块链客户端,每个交易工作流对应一个区块链客户端,因为区块链客户端考虑了分布式的故障、可用性、负载情况,即分布式的区块链客户端节点不再像单机情况可控,它可能会模拟宕机、不工作、网络不佳、负载太高、发送速率下降等情况,进而影响交易工作流的提交。本实施例在每个分布式区块链客户端中,设置了一个消息队列,该消息队列有两个作用,第一个作用是:当任务流即交易工作流中的交易数量很多、提交速度很快的时候,消息队列可以作为一种削峰限流的缓冲中间层,根据区块链客户端向区块链网络提交交易工作流的速度,适当地调节给区块链客户端补充区块链交易的速度,进而防止区块链客户端严重阻塞甚至进程挂掉;第二个作用是:消息队列能够在与区块链客户端的交互过程中,收集延迟没有处理的交易(即距离发送时间很久还没有处理的交易)、发送失败的交易,比如客户端一直发送失败,或者客户端没有从消息队列中提取区块链交易,将延迟没有处理及发送失败的这些交易记录下来,将这些交易加入到新的交易工作流中进行重新整合,最终得到可并行工作且互不冲突的交易工作流,继续以消息队列的形式将这些交易工作流提交给区块链网络以进行分布式压力测试。
123.区块链客户端根据区块链节点的情况进行区块链交易的派发,通过订阅的方式,区块链客户端准确地知道区块链节点的负载情况,进而合理的派发区块链交易。对于区块链节点,这些区块链节点同样经过了故障的模拟、可用性的模拟、负载情况的模拟处理,具备分布式区块链节点的真实场景情况。同时区块链客户端派发区块链交易后,能从区块链节点获得交易派发的回执,收集延迟没有处理的交易和失败的交易,将这些交易与新来的交易工作流进行一块打包,重新构造有向无环图进行解析,重新得到可并行工作且互不冲突的多个交易工作流,继续以消息队列的形式将多个交易工作流提交给区块链网络,继续进行测试,将分布式的区块链压力测试循环跑起来,以充分测试区块链网络的性能。
124.值得说明的是,至于性能的收集,本实施例不做详述,大部分的装置系统都可以做到,比如在日志进行解析、或者在客户端进行插桩记录,都可以快速得到该装置的性能统计结果。
125.本实施例提供的区块链网络的分布式压力测试方法,用户根据实际应用场景创建具有先后顺序的多个区块链交易,并定义了对每个区块链交易的执行次数,充分考虑了区块链交易的使用场景、区块链交易之间的耦合度和相对顺序,能降低区块链交易的随机性对区块链网络性能的影响;然后对这些区块链交易进行预处理,能从多个区块链交易中快
速解析出可以并行处理且互不冲突的多个交易工作流,能够提高区块链网络的压力测试过程中的并行度,最大限度地利用区块链网络的资源性能,能提高区块链网络对多个区块链交易的执行速度,并提高区块链网络压力测试的测试结果准确程度。
126.本发明实施例提供的区块链网络的分布式压力测试方法,首次提出了用dag解析批量交易的方式,首先允许用户自定义测试场景的图结构、交易顺序;其次可以解决并发和交易冲突的矛盾,对于支持分片的区块链系统,更是一种提速的操作;再者对智能合约也进行了语法树拆解,有效进行dag分解,将dag的优势充分发挥在区块链网络的压力测试中。
127.本发明实施例提供的区块链网络的分布式压力测试方法,适应于使用区块链的不同商业场景、工业场景、实验场景,甚至对于较为简单清晰的智能合约,都能对实现功能或者是一批区块链交易进行有效的有向无环图(dag) 任务解析,从而实现异步并发、最大化测试出在该场景下区块链的极限性能。
128.请参阅图3,本发明还提供了一种区块链网络的分布式压力测试方法的另一实施例。本实施例中,在区块链网络的每一个压力测试的场景下面,用户会定义一批区块链交易和/或智能合约。本实施例首先对这一批区块链交易进行预处理,可以得到可以并行工作又互不干扰的多个交易工作流,根据这些交易工作流,同时启动多个分布式区块链客户端,并行将交易工作流提交给区块链网络进行压力测试,然后通过日志或者客户端插桩等方式进行性能数据的统计。
129.如图4所示,存在三种方式,用户可以选择其中的某一种方式得到最终的dag,手动设定场景dag,是用户根据提供的特定语言,根据自己的实际情况去完全构建一个类似上面两个工作流的最终dag;以实现对存在关联关系的用户进行划分。
130.本实施例通过dag对交易进行预处理(可以选择用户手动构建dag,也可以选择自动最优构造dag),首先帮助用户通过工作流图的方式最好的规划出符合自己实际场景的交易顺序、执行顺序,其次,帮助用户快速解析出在定义的一整批交易中最高速的可以并行处理的交易工作流,提高压力测试过程中的并行度,这才能充分利用区块链的资源性能,将区块链面对这一批交易体现的速度提高,使得测得的数据更为准确。
131.在得到多个工作流后,就可以启动多个客户端进行任务提交,即往区块链系统注入区块链交易,进行压力测试,本实施例中,专注于在分布式压力测试中如何配合有向无环图即dag得到交易工作流进行测试。由于在分布式的场景下,相比单机情况,有很多网络的未知情况,不管是网络的可用性、还是客户端的负载情况,都将敏感地影响提交任务的效率,进而影响测试的充分性。
132.因此,本实施例中将多个交易工作流提交给多个区块链客户端,每个交易工作流对应一个区块链客户端,因为区块链客户端如模块8:加入了分布式的故障、可用性、负载模块,即分布式的客户端节点不再像单机情况可控,它可能会模拟宕机、不工作、网络不佳、负载太高、发送速率下降等情况,进而影响工作流的提交。本实施例在分布式区块链客户端前面,给每个客户端中设置了一个消息队列,该消息队列有两个作用,第一个作用是:当任务流即交易工作流中的交易数量很多、提交速度很快的时候,消息队列可以作为一种削峰限流的缓冲中间层,根据客户端的提交速度适当地调节给客户端补充区块链交易的速度,进而防止客户端严重阻塞甚至进程挂掉;第二个作用是:消息队列能够在与客户端的交互过程中,收集延迟没有处理的交易(即距离发送时间很久还没有处理的交易)、发送失败的交
易,比如客户端一直发送失败,或者客户端没有从消息队列中提取区块链交易,将延迟没有处理及发送失败的这些交易记录下来,放到模块11中进行重新整合,将这些交易加入到交易工作流中,重新整合成新的交易工作流进行压力测试。
133.接下来模块8的客户端会提交交易到模块9消息派发的功能模块,该模块会根据区块链节点的情况进行交易的派发,通过订阅的方式,消息派发模块准确的知道区块链节点的负载情况,进而合理的派发交易,而模块10就是区块链负载节点,这些节点同样经过了故障的模拟、可用性的模拟、负载情况的处理模拟,具备分布式真实场景情况。而模块9会进行交易的派发,同时把交易的回执交回给客户端,并将失败的交易重新归回到模块11,模块11就是专门来收集延迟没有处理的交易和失败的交易,将这些交易,与新来的测试交易打包这一块,然后解析成为新的任务流dag,继续进行测试,将分布式的区块链测试循环跑起来,充分测试性能。至于性能的收集,这里不做详述,大部分的装置系统都可以做到,比如在日志进行解析、或者在客户端进行插桩记录,都可以快速得到该装置的性能统计结果。
134.本发明实施例首次提出了用dag解析批量交易的方式,首先允许用户自定义测试场景的图结构、交易顺序;其次可以解决并发和交易冲突的矛盾,对于支持分片的区块链系统,更是一种提速的操作;再者对智能合约也进行了语法树拆解,有效进行dag分解。将dag的优势发挥在区块链的压力测试中,同时将dag解析与分布式测试结合在一起,与消息队列的功能结合,形成一个削峰限流、失败统计、重新构造dag的循环反馈压力测试系统。
135.本实施例中,对区块链分布式压力测试过程中,通过有向无环图对交易和智能合约进行解析,得到可并行工作且互不冲突的交易工作流,能解决交易冲突造成的测试不充分问题;使用负载、故障模拟模块对分布式区块链客户端、分布式区块链节点的网络情况进行模拟;配合dag工作流,使用消息队列的方式在分布式测试中削峰限流、记录延迟与失败交易,并且重新整合到dag 工作流中,实现循环反馈的压力测试。
136.本实施例首次提出了用dag解析批量交易的方式,首先允许用户自定义测试场景的图结构、交易顺序;其次可以解决并发和交易冲突的矛盾,对于支持分片的区块链系统,更是一种提速的操作;再者对智能合约也进行了语法树拆解,有效进行dag分解。将dag的优势发挥在区块链的压力测试中,同时将dag解析与分布式测试结合在一起,与消息队列的功能结合,形成一个削峰限流、失败统计、重新构造dag的循环反馈压力测试系统。
137.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
138.在本技术所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
139.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
140.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
141.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
142.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

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

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

相关文献