掌桥专利:专业的专利平台
掌桥专利
首页

一种区块链的压力测试动态分发方法

文献发布时间:2024-04-18 19:58:21


一种区块链的压力测试动态分发方法

技术领域

本发明涉及了区块链技术领域的一种压力测试的压力动态分发方法,具体涉及了一种在区块链压力测试场景下对区块链系统的测试压力进行动态分发的优化方法。

背景技术

作为一种分布式加密账本技术,区块链技术已在加密货币、跨国交易以及供应链管理等多应用领域展现出巨大的潜力。在生产实践中,为确保区块链系统的可靠性和安全性,常需对区块链系统做压力测试来评估系统的性能极限和抗攻击能力。压力测试常被用于评估区块链网络的吞吐量、延迟、可扩展性和抗攻击能力,通过模拟高负载、高并发的环境,压力测试可以帮助开发者和运营者了解系统在不同负载情况下的行为,并识别潜在的性能瓶颈和问题。

现有的技术方案中,压力测试通常基于事先人工定义好的测试用例和测试配置,通过部署接近甚至完全还原生产环境下区块链网络的镜像网络并回放生产环境下区块链上的数据到测试链来模拟真实的网络压力。然而由于这些请求通常基于手动配置的负载均衡算法如轮询法、随机法、源地址哈希法、加权轮询法、最小连接数法分发到各个区块链节点,而无法自动地按照不同区块链节点的机器配置、网络拥塞状况和运行状态动态分发,使得部分节点无法达到理论处理速度,而部分节点超出了其处理能力,进而影响了测试结果的准确性。

现有的技术方案中,通常通过向网络中多数节点并发发送请求以测试区块链网络整体的极限吞吐量等指标。为避免单节点的网络IO和CPU等瓶颈导致的影响,压力测试场景常采用分布式主从架构,测试服务器可被分为主测试服务器和从测试服务器两种角色。其中主测试节点负责分配测试时的压力,将测试任务按照预先配置好的分配规则分发给多个从测试节点,从测试节点则作为区块链客户端向收到的测试任务对应的区块链节点发送查询请求或区块交易。然而现有方案没有在主测试节点和从测试节点之间传递网络信息,或是由从测试节点来获取所有的网络信息,这导致测试网络中的实时运行数据无法被用于修正压力测试时的权重分配,以及从测试节点出现的IO和计算瓶颈导致的测试结果的不准确性。

发明内容

为了解决背景技术中存在的问题和需求,本发明的目的是提供一种区块链的压力测试动态分发优化方法,实现对压力测试任务的动态分发,提高区块链系统压力测试的自动化程度和准确性。

为实现上述发明目的,本发明采用的技术方案是:

一种区块链的压力测试动态分发方法,其具体如下:

待进行压力测试的区块链中,各区块链节点使用无向连通图数据结构各自维护以节点自身为中心的局部区块链网络的网络信息,所述网络信息包含区块链节点相互逻辑连接形成的拓扑结构信息及各区块链节点的指标信息,其中指标类型包括系统指标和区块链性能评价指标;各区块链节点在运行过程中使用基于超时重传机制和指数退避策略的网络泛洪请求,通过定时轮询网络中邻近区块链节点维护的网络信息,将轮询到的邻近节点的网络信息合并至自身维护的网络信息中实现更新,且各区块链节点通过时间戳处理合并冲突;

所述压力测试动态分发方法分为权重计算阶段和测试阶段,且测试所需的测试节点分为主测试节点和若干从测试节点;

所述权重计算阶段中,由主测试节点生成一系列测试请求并划分为多个测试分片,然后利用所生成的测试分片对各区块链节点的权重向量进行迭代优化,每个区块链节点获得自身的最优权重向量;所述权重向量的维度与区块链节点的指标信息维度相同;对于每一个测试分片,主测试节点首先基于每个区块链节点中最新的权重向量计算其节点权重,然后将测试分片中的总测试请求数量按照各区块链节点的节点权重进行请求数分配,再后由主测试节点生成测试任务分发给各从测试节点,从测试节点收到测试任务后,根据测试任务中的信息生成相应的测试请求并按照主测试节点分配的请求数向已知的各区块链节点发送测试请求,同时收集各区块链节点的测试结果和网络信息并汇总给主测试节点,主测试节点根据各区块链节点中最新记录的指标信息,以区块链系统全局性能最优为目标对各区块链节点的权重向量进行模拟退火优化,进而用于下一个测试分片的请求数分配;

所述测试阶段中,主测试节点将实际测试任务中的测试请求均分为若干个测试分片,并按照各区块链节点的最优权重向量计算各区块链节点的最优节点权重,再将各测试分片中的总测试请求数量按照各区块链节点的最优节点权重进行请求数分配;所有从测试节点收到主测试节点下发的实际测试任务后,依次利用各测试分片按照主测试节点对每个区块链节点分配的请求数执行实际测试任务,并向主测试节点反馈区块链节点的测试结果数据。

作为优选,各区块链节点在运行过程中使用网络泛洪请求维护自身的网络信息时,采用一种超时重传机制来防止网络中因重传导致请求数量过多,同时采用指数退避策略维护超时时间,具体过程如下:

S11、每个区块链节点维护一个定时时间长度t′的轮询定时器,同时由超时定时器维护一个初始为T+T

S12、轮询定时器每经过时间t′,执行轮询操作:各区块链节点向已知网络拓扑中距离为1的邻近区块链节点查询其网络信息,若在超时时间内查询得到对方节点维护的网络信息则将其作为轮询结果返回并合并到自身节点维护的网络信息中,结束本轮轮询,如在超时时间结束后未能获得任意一个距离为1的区块链节点维护的网络信息,则进入单组重传阶段;

在单组重传阶段中,不断对超时定时器维护的超时时间中的T进行倍增,从而以指数形式扩大超时时间,每次扩大超时时间后重新执行所述轮询操作,若在新的超时时间内得到轮询结果则将其合并到自身节点维护的网络信息中,结束本轮轮询,如在超时定时器维护的超时时间达到预设的阈值T′后,仍然尚未得到轮询结果,则进行S13;

S13、若超时定时器维护的超时时间达到预设的阈值T′后,依然未能查询到距离为1的区块链节点维护的网络信息,则按照S12轮询更远一跳距离的区块链节点,若仍然未能得到轮询结果,则继续增大轮询范围,直至得到轮询结果或者达到轮询所允许的最大距离值时停止本轮轮询。

作为优选,所述区块链节点中维护的网络信息包含由自身节点和周围已知节点构成的网络拓扑结构以及网络拓扑结构中各区块链节点的指标信息,指标信息包括系统指标和区块链性能评价指标两类,系统指标包括CPU负载、GPU负载、内存使用率、网络带宽和网络IO,区块链性能评价指标包括成功每秒提交交易数、每秒成功交易数、每秒成功查询数和交易延迟。

作为优选,所述主测试节点和从测试节点互相交换测试任务信息以及测试结果和网络信息,且交换的网络信息为区块链节点中维护的网络信息。

作为优选,所述区块链节点的权重向量为[q

式中:k为向量长度,取值为区块链节点的指标信息中的指标数量。

作为优选,所述主测试节点对各区块链节点进行所述请求数分配时,每个区块链节点分配到的请求数与其节点权重正相关,计算式为:

其中,S

作为优选,所述测试请求分为查询请求和交易请求两类,每个区块链节点针对两类请求分别设置查询权重向量和交易权重向量两个权重向量;在所述权重计算阶段中,由主测试节点生成同等数量的查询请求和交易请求,并分别对查询权重向量和交易权重向量进行优化,得到每个区块链节点对应的最优查询权重向量和最优交易权重向量;在所述测试阶段中,主测试节点将实际测试任务中的测试请求预先按照查询请求和交易请求进行分类,然后每一类请求各自进行测试分片的划分并调用相应的最优权重向量进行请求数分配,最后下发至从测试节点执行实际测试任务。

作为优选,若所述测试请求为交易请求,则所述主测试节点将交易密钥传送给各从测试节点,从测试节点根据下发的密钥生成交易请求并发送给其连接的区块链节点,避免在主测试节点存在负载瓶颈导致测试效率降低。

作为优选,在所述权重计算阶段中,对于查询请求,主测试节点以区块链系统全局的每秒查询率QPS最大为目标,对各区块链节点的查询权重向量进行模拟退火优化,而对于交易请求,主测试节点以区块链系统全局的每秒交易数TPS最大为目标,对各区块链节点的交易权重向量进行模拟退火优化。

作为优选,在所述测试阶段中,主测试节点从测试结果中获取所有测试分片中的测试请求响应情况,并统计每秒提交交易数、每秒成功交易数、交易写入延迟、每秒查询数指标,通过可视化装置对各指标可视化。

相对于现有技术而言,本发明的有益效果如下:

1)通过将网络节点组织为一个无向连通图,将区块链网络的拓扑信息和节点的运行状态信息结合,可以在测试时反馈网络的健康状况,进而调整各个评价指标对应的权重信息,用于动态调整相关参数,可以实现测试压力的动态分发;

2)对于网络信息的泛洪更新,采用指数退避策略,并引入随机调整值,可以避免常见的分段时延导致的大量网络重传对压力测试准确性的影响。

附图说明

图1为本发明提出的区块链测试压力动态分发方法的步骤流程图;

图2为本发明提出的区块链网络信息结构和合并方法。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似改进,因此本发明不受下面公开的具体实施例的限制。本发明各个实施例中的技术特征在没有相互冲突的前提下,均可进行相应组合。

本发明提供了一种区块链的压力测试动态分发方法,该方法使用多维的权重向量对待分配给区块链节点的请求做动态加权负载均衡,并使用退火模拟方法动态计算区块链网络中权重向量,从而进一步用于计算节点权重和节点被分配的请求数。本发明中使用无向连通图数据结构和泛洪算法维护测试区块链网络的拓扑结构,并引入随机超时因子和时间戳,以期解决区块链压力测试场景下测试请求压力分布不合理导致的测试结果不准确的问题,提高区块链质量评估的有效性。

在本发明的一个较佳实施例中,上述区块链的压力测试动态分发方法的实现方式如下:

待进行压力测试的区块链中,各区块链节点使用无向连通图数据结构各自维护以节点自身为中心的局部区块链网络的网络信息,此处的网络信息包含区块链节点相互逻辑连接形成的拓扑结构信息及各区块链节点的指标信息,其中指标类型包括系统指标和区块链性能评价指标。各区块链节点在运行过程中,使用基于超时重传机制和指数退避策略的网络泛洪请求,通过定时轮询网络中邻近区块链节点维护的网络信息,将轮询到的邻近节点的网络信息合并至自身维护的网络信息中实现更新,且各区块链节点通过时间戳处理合并冲突。

在本发明中,区块链节点中维护的网络信息除了包含由自身节点和周围已知节点构成的网络拓扑结构之外,还包含了网络拓扑结构中各区块链节点的指标信息,指标信息是由系统指标和区块链性能评价指标两类构成的,系统指标包括CPU负载、GPU负载、内存使用率、网络带宽和网络IO等,区块链性能评价指标包括成功每秒提交交易数、每秒成功交易数、每秒成功查询数和交易延迟等节点状态信息。本发明可利用这些状态信息在权重计算阶段动态更新权重向量,在压力测试阶段动态计算各个节点应分配的压力比例。

在本发明的实施例中,采用时间戳处理合并冲突是为了解决两个时间戳存在差异的网络信息的合并,其具体做法如下:如果需要合并两个时间戳不同的网络信息,对应的无向连通图分别记为图G

该压力测试动态分发方法分为权重计算阶段和测试阶段,且测试所需的测试节点分为主测试节点和若干从测试节点。主测试节点和从测试节点均为独立的服务节点,主测试节点负责按权重向量计算各节点的权重信息,并据此分配测试任务给从测试节点,从测试节点负责发送测试请求,收集网络状态并汇总给主测试节点。主测试节点和从测试节点互相交换测试任务信息以及测试结果和网络信息,且交换的网络信息为区块链节点中维护的网络信息。压力测试动态分发方法的两个阶段各自具有相应的功能,两个阶段中均会采用权重向量对发往区块链节点的查询和交易请求分片进行加权分配,权重向量在权重计算阶段被优化,可在测试阶段则利用优化后的权重向量计算每个节点所具有的权重信息,进而分配应当发送给各节点的实际请求数量。

下面对权重计算阶段和测试阶段的具体运行方式分别进行详细描述。

在权重计算阶段中,由主测试节点生成一系列测试请求并划分为多个测试分片,然后利用所生成的测试分片对各区块链节点的权重向量进行迭代优化,每个区块链节点获得自身的最优权重向量。各区块链节点权重向量的维度与区块链节点的指标信息维度相同,各维度的初始值设置为相同,后续再逐步进行优化。对于每一个测试分片,其优化权重向量的过程如下:主测试节点首先基于每个区块链节点中最新的权重向量计算其节点权重,然后将测试分片中的总测试请求数量按照各区块链节点的节点权重进行请求数分配,再后由主测试节点生成测试任务分发给各从测试节点,从测试节点收到测试任务后,根据测试任务中的信息生成相应的测试请求并按照主测试节点分配的请求数向已知的各区块链节点发送测试请求,同时收集各区块链节点的测试结果和网络信息并汇总给主测试节点,主测试节点根据各区块链节点中最新记录的指标信息,以区块链系统全局性能最优为目标对各区块链节点的权重向量进行模拟退火优化,进而用于下一个测试分片的请求数分配。

另外在权重计算阶段中执行模拟退火算法时,需要设置优化目标。在本发明的实施例中,对于查询请求,主测试节点可以区块链系统全局的每秒查询率QPS最大为目标,对各区块链节点的查询权重向量进行模拟退火优化,而对于交易请求,主测试节点可以区块链系统全局的每秒交易数TPS最大为目标,对各区块链节点的交易权重向量进行模拟退火优化。

在测试阶段中,主测试节点将实际测试任务中的测试请求均分为若干个测试分片,并按照各区块链节点的最优权重向量计算各区块链节点的最优节点权重,再将各测试分片中的总测试请求数量按照各区块链节点的最优节点权重进行请求数分配;所有从测试节点收到主测试节点下发的实际测试任务后,依次利用各测试分片按照主测试节点对每个区块链节点分配的请求数执行实际测试任务,并向主测试节点反馈区块链节点的测试结果数据。

由于测试节点的拓扑和状态信息是定时获取的,且由于测试网络环境的复杂性,为了避免大量因超时导致的无效重复请求影响网络健康状况而最终降低测试结果的准确性,本发明的区块链网络中,各区块链节点在运行过程中使用网络泛洪请求维护自身的网络信息时,采用一种超时重传机制来防止网络中因重传导致请求数量过多,同时采用指数退避策略维护超时时间,并引入随机因子作为调整值,具体过程如下:

S11、每个区块链节点维护一个定时时间长度t′的轮询定时器,同时由超时定时器维护一个初始为T+T

S12、轮询定时器每经过时间t′,执行轮询操作:各区块链节点向已知网络拓扑中距离为1的邻近区块链节点查询其网络信息,若在超时时间内查询得到对方节点维护的网络信息则将其作为轮询结果返回并合并到自身节点维护的网络信息中,并结束本轮轮询,如在超时时间结束后未能获得任意一个距离为1的区块链节点维护的网络信息,则进入单组重传阶段;

在单组重传阶段中,不断对超时定时器维护的超时时间中的T进行倍增(总超时时间依次为T+T

S13、若超时定时器维护的超时时间达到预设的阈值T′后,依然未能查询到距离为1的区块链节点维护的网络信息,则按照S12轮询更远一跳距离的区块链节点,若仍然未能得到轮询结果,则继续增大轮询范围(整个轮询的距离依次按照1、2、3、4、……进行递增),直至得到轮询结果即得到至少一个区块链节点的网络信息时停止本轮轮询,或者达到轮询所允许的最大距离值时也需要停止本轮轮询,避免无限制扩大轮询范围。

需要说明的是,从测试节点向区块链节点发送请求时,区块链节点在响应该请求时携带该节点已知的信息,并将网络信息以无向连通图的形式返回给主测试节点,区块链节点的网络信息合并可由主测试节点执行。

在本发明的实施例中,区块链节点的权重向量可记为[q

式中:k为向量长度,取值为区块链节点的指标信息中的指标数量。

另外,主测试节点对各区块链节点进行前述的请求数分配时,每个区块链节点分配到的请求数与其节点权重正相关,计算式为:

其中,S

另外,在本发明的实施例中,区块链网络的压力测试任务中,测试请求实际存在查询请求和交易请求两类。且查询请求和交易请求对系统资源的要求有所不同,因此为了顾及两类测试请求都存在的情况,每个区块链节点针对两类请求分别设置查询权重向量和交易权重向量两个权重向量。在权重计算阶段中,由主测试节点生成同等数量的查询请求和交易请求,并分别对查询权重向量和交易权重向量进行优化,得到每个区块链节点对应的最优查询权重向量和最优交易权重向量;在测试阶段中,主测试节点将实际测试任务中的测试请求预先按照查询请求和交易请求进行分类,然后每一类请求各自进行测试分片的划分并调用相应的最优权重向量进行请求数分配,最后下发至从测试节点执行实际测试任务。需要注意的是,虽然有两类权重向量,但是其在权重计算阶段中的向量优化过程以及测试阶段实际测试过程,可以将查询请求和交易请求视为并行的两个任务,相互之间不存在交集。

另外,在本发明的实施例中,若测试请求为交易请求,则主测试节点将交易密钥传送给各从测试节点,从测试节点根据下发的密钥分布式生成交易请求并发送给其连接的区块链节点,避免在主测试节点生成所有的交易而因其CPU或GPU负载瓶颈导致降低测试效率。

在本发明的实施例中,在测试阶段还可以对压力测试的指标进行可视化。具体而言,主测试节点从测试结果中获取所有测试分片中的测试请求响应情况,并统计每秒提交交易数、每秒成功交易数、交易写入延迟、每秒查询数指标,通过可视化装置对各指标可视化。

进一步的,为了便于理解,本发明进一步给出了上述实施例中展示的区块链的压力测试动态分发方法的一种具体实现流程。该流程如图1所示,其具体过程如下:

1)每个区块链节点使用有向无环图数据结构维护区块链网络的网络信息,其中包含各个节点的拓扑结构信息及其指标信息(包括各项系统指标和区块链性能评价指标数据)。特别地,对于点x,其维护的网络拓扑信息可表示为G

2)测试开始时,主测试节点进入权重计算阶段,该阶段计算系统的各项性能指标在压力分发时所具有的权重构成的权重向量。由于查询请求和交易请求对于CPU等资源消耗有较大差别,分别需要用查询权重向量和交易权重向量求节点的权重信息。主测试节点在权重计算阶段生成S个请求,其中

其中,W

3)主测试节点将测试任务均匀分发给M个从测试节点,由从测试节点与区块链节点进行通信并执行测试任务。特别的,如果测试任务包含交易请求,则可携带交易签名所需的密钥,用于在多个从测试节点分布式生成交易,而不都在主测试节点生成,可以避免主测试节点瓶颈影响测试准确性。从测试节点收到测试任务后,根据测试任务中的节点信息及请求列表信息生成相应的测试请求,并发送给其已知网络信息(每个测试节点仅初始配置了一部分已知的区块链节点)中连接的区块链节点。

4)每个区块链节点维护一个轮询定时器,定时时间长度t′,每经过时间t′节点会向已知区块链网络中临近节点查询其网络信息,其中包括区块链网络拓扑信息以及各个节点的节点状态信息,包括CPU负载、GPU负载、内存使用率、内存频率、网络带宽、网络IO等系统信息以及成功提交交易数、成功执行交易数、成功查询数、交易延迟等系统评价指标。首先,在定时器触发后区块链节点向其已知网络拓扑中距离为1的节点查询网络信息,超时时间初始为T+T

5)单组重传阶段重复上述4)中的流程,按照指数退避策略更新超时定时器的值,分别为T+T

6)从测试节点向区块链节点发送请求,区块链节点返回响应时携带带有时间戳的网络信息,并将网络信息以无向连通图的形式返回给主测试节点,由主测试节点对其合并计算,一个合并的示例可见图2所示。具体地,合并过程中采用前述的时间戳处理合并冲突。主测试节点在合并完成得到网络信息并执行一次模拟退火后,计算得到新的权重向量,并生成测试任务,重复执行3)、4)、5)、6)的流程,直至分发完K组测试请求。其中,在执行模拟退火算法对权重向量进行优化时,如果是查询请求,则以主测试节点收到的所有从测试节点的QPS(Queries Per Second)即每秒查询率最大为算法的优化目标,如果是交易请求,则以主测试节点收到的所有从测试节点的TPS(Transactions Per Second)即每秒区块链网络确认的交易数最大为算法的优化目标。具体的模拟退火算法属于现有技术,此处不再赘述。

7)在对查询请求和交易情况分别计算完K组测试请求后,主测试节点可以得到每个区块链节点对应的两个相对最优的权重向量,一个是最优查询权重向量,一个是最优交易权重向量,此时进入任务执行阶段。同前述1)中过程,主测试节点将实际测试任务的请求分为L组即L个分片,若请求是查询请求则采用最优查询权重向量计算各个节点所分配的请求数,若请求为交易请求则采用最优交易权重向量计算各个节点所分配的请求数,同前述2)中过程。

8)按照7)中计算得到的请求数,将测试请求按分片负载均衡到多个区块链节点,请求信息被均匀下发至多个从测试节点,由从测试节点与向区块链接节点发起测试请求。特别的,若存在交易请求,从测试节点根据下发的密钥生成交易请求,发送给其连接的区块链节点。对各分片重复执行该流程直至分发完L组测试请求。

9)主测试节点根据L组测试请求的响应数据,统计每秒提交交易数、每秒成功交易数、交易写入延迟、每秒查询数等指标,通过可视化装置对其可视化。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

相关技术
  • 一种基于区块链数据结构的终端软件分发验证方法
  • 一种自动模组压力测试设备及压力测试方法
  • 点播分发系统压力测试方法及装置、计算机装置及计算机存储介质
  • 一种基于区块链动态智能合约的数据处理方法及终端
  • 一种视频直播分发网络的动态网络分发树管理方法
  • 一种视频直播分发网络的集簇式动态网络分发树管理方法
技术分类

06120116482861