«上一篇 下一篇»
  计算机工程  2022, Vol. 48 Issue (11): 170-176  DOI: 10.19678/j.issn.1000-3428.0064348
0

引用本文  

贺鹏飞, 范鹏飞, 尹千慧, 等. 基于负载均衡算法的Hyperledger Fabric共识机制研究[J]. 计算机工程, 2022, 48(11), 170-176. DOI: 10.19678/j.issn.1000-3428.0064348.
HE Pengfei, FAN Pengfei, YIN Qianhui, et al. Research on Hyperledger Fabric Consensus Mechanism Based on Load Balancing Algorithm[J]. Computer Engineering, 2022, 48(11), 170-176. DOI: 10.19678/j.issn.1000-3428.0064348.

基金项目

2021年度烟台市校地融合发展项目(1521001-WL21JY01)

作者简介

贺鹏飞(1980—),男,副教授、博士,主研方向为工业互联网、短距离无线通信;
范鹏飞,硕士研究生;
尹千慧,硕士研究;
王中训,教授;
张桐敬,工程师;
梁大伟,工程师

文章历史

收稿日期:2022-03-31
修回日期:2022-06-05
基于负载均衡算法的Hyperledger Fabric共识机制研究
贺鹏飞1 , 范鹏飞1 , 尹千慧1 , 王中训1 , 张桐敬2 , 梁大伟3     
1. 烟台大学 物理与电子信息学院, 山东 烟台 264005;
2. 华能山东烟台发电有限公司烟台发电厂, 山东 烟台 264002;
3. 烟台市食品药品检验检测中心, 山东 烟台 264000
摘要:Hyperledger Fabric将业务逻辑解耦,在提升系统灵活性的同时存在性能瓶颈,无法满足高并发快响应的业务需求。通过对Hyperledger Fabric共识机制中的背书、排序、验证3个阶段进行分析,为均衡背书节点性能并提高系统效率,设计基于动态负载均衡算法的提案分发优化方案。综合均衡指数、反馈周期等性能指标,设计节点负载和节点权值量化方法。通过采集节点负载信息计算并选取合理的反馈周期和影响权重以更新节点权值,同时结合加权轮询算法将交易提案分发至当前权重最大的节点进行背书,实现背书节点负载的动态均衡。在Caliper工具上的测试结果表明,优化方案提升了Hyperledger Fabric共识机制的请求处理性能,相比于原始方案的链码交易和查询吞吐量提高了17.53%和15.84%,平均时延下降了6.7%和18.2%。
关键词区块链    Hyperledger Fabric平台    共识机制    负载均衡    背书阶段    
Research on Hyperledger Fabric Consensus Mechanism Based on Load Balancing Algorithm
HE Pengfei1 , FAN Pengfei1 , YIN Qianhui1 , WANG Zhongxun1 , ZHANG Tongjing2 , LIANG Dawei3     
1. School of Physics and Electronic Information, Yantai University, Yantai, Shandong 264005, China;
2. Yantai Power Generation Plant, Huaneng Shandong Power Generation Co., Ltd., Yantai, Shandong 264002, China;
3. Yantai Food and Drug Inspection and Testing Center, Yantai, Shandong 264000, China
Abstract: Hyperledger Fabric decouples business logic.Although it improves system flexibility, it has performance bottlenecks and cannot satisfy the high concurrency or fast response needs of businesses.This study analyzes the three stages of endorsement, sorting, and verification in the Hyperledger Fabric consensus mechanism.To balance the performance of endorsement nodes and improve system efficiency, this study provides a proposal distribution optimization scheme based on a dynamic load balancing algorithm.The optimization scheme integrates performance indicators, such as the balance index and feedback cycle, and designs a quantification method for node loads and weights.The optimization scheme calculates and selects a reasonable feedback period and influence weight to update the node weight by collecting the node load information.Simultaneously, the scheme uses the weighted round robin algorithm to distribute the transaction proposal to the node with the current largest weight for endorsement to realize the dynamic balance of the endorsement node load.The test results on the Caliper tool show that the optimization scheme improves the request processing performance of the Hyperledger Fabric consensus mechanism.Compared with the original scheme, the chaincode transaction and query throughput of the optimization scheme is increased by 17.53% and 15.84% and the average delay is decreased by 6.7% and 18.2%, respectively.
Key words: blockchain    Hyperledger Fabric platform    consensus mechanism    load balancing    endorsement stage    

开放科学(资源服务)标志码(OSID):

0 概述

区块链是由多节点参与的由区块构成的有序数据链,记录了账本中业务对象的所有状态,本质是一个具有一致性的分布式账本[1]。区块链融合了共识算法、密码学、智能合约、对等网络等技术,实现了交易的安全、可靠和不可篡改,是一种利用哈希指针及分布式存储技术进行数据存储的系统[2]。目前,主流的区块链开发平台包括以太坊、Hyperledger Fabric等,其中以太坊属于公有链,由于公有链中全网节点共同参与,因此交易速度较慢。Hyperledger Fabric采用成员许可制,支持自定义的共识协议及多种语言的智能合约,交易速度快,运营成本低,是一种模块化的许可链开发平台[3]。此外,Hyperledger Fabric为上层应用开发者提供了多种SDK开发包,降低了应用开发者的学习门槛。主流的共识算法有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、代理权益证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等。不同于其他共识机制,在Hyperledger Fabric中共识被定义为对包含在区块中的一组交易的正确性的全面验证[4]。简而言之,Hyperledger Fabric将共识过程解耦,通过背书-排序-验证过程达成共识。

针对Hyperledger Fabric性能研究,周玉舒[5]基于区块链设计钢铁供应链系统,引入SQL和负载均衡技术设计链上查询请求分发方案,解决了链上查询效率低下的问题。孟吴同[6]在Hyperledger Fabric区块链开发平台中引入基于可随机验证函数(Verifiable Random Function,VRF)的抽签算法,为交易随机抽取背书节点,改进后提高了链码的吞吐量,降低了交易延迟,同时提升了共识安全性。THAKKAR等[7]研究Hyperledger Fabric中参数配置产生的性能影响,识别系统中存在的性能瓶颈并研究了3种优化方案。袁普[8]使用PNTOOL工具箱搭建GSPN模型对Hyperledger Fabric性能进行分析,并对Hyperledger Fabric中存在的性能瓶颈提出解决方案,通过参数的最优化配置和背书节点的负载均衡进行性能优化,提升了系统吞吐量。FOSCHINI等[9]对Hyperledger Fabric进行测试,研究了实现链码的编程语言和背书节点数量对交易延迟的影响,结果表明GO语言实现的链码性能最优。何英[10]在Hyperledger Fabric中引入负载均衡的一致性哈希算法,采用二分查找的背书节点搜索算法,提升了链码的吞吐量,解决了共识中背书提案分发导致的性能瓶颈问题。NARAYANAM等[11]对Hyperledger Fabric中的排序服务进行优化,通过并行交易验证减少了等待时间,实现了高交易吞吐量。王洋[12]针对档案业务的应用场景,基于Hyperledger Fabric平台对PBFT算法、节点角色以及智能合约等进行改进,进一步保障了数据安全,提升了系统性能。刘云等[13]使用最小损失算法动态调整区块参数以提升链上事务吞吐量。刘应等[14]基于哈希取模算法和默克尔树设计中间件优化方法,通过实时验证以实现数据一致性,使系统查询性能提升至数据库级别。周步祥等[15]基于Stackelberg博弈理论构建交易模型,采用迭代算法求解交易策略,从而实现了交易的最优化。陈悦妍[16]对区块链系统进行轻量化研究,提出基于分组-分配方式存储数据的扩容算法,并设计预付式激励与交易机制和数据安全共享与验证机制。

本文针对Hyperledger Fabric共识中背书阶段存在的性能瓶颈,提出基于动态负载反馈的提案分发优化方案。该方案根据反馈周期T采集节点负载信息,利用加权轮询算法分发交易提案至背书节点,以解决共识机制中背书阶段提案分发方式导致的系统性能低下问题。

1 相关研究 1.1 负载均衡算法

负载均衡技术是一种为了使服务器资源得到有效利用的技术。负载均衡算法[17]根据调度策略的不同可分为静态负载均衡算法和动态负载均衡算法[18]。静态负载均衡算法简单易于实现,但无法根据集群实际负载调整调度策略,包括轮询算法、加权轮询算法、一致性哈希算法等。动态负载均衡算法能根据服务器性能变化及时调整调度策略,因此应用广泛,包括最小连接数算法、加权最小连接数算法、最快响应算法等。

近几年,国内外学者对动态负载均衡算法进行深入研究并取得了一定的成果。针对目前提出的固定权重负载均衡算法在微服务请求较多的情况下无法实现更好的负载均衡效果,YI等[19]提出一种基于动态权重的负载均衡算法。为更好地解决蜂窝车联网与移动边缘计算融合应用场景下边缘服务器资源负载分配不均、资源利用率较低等问题:林峰[20]提出一种动态负载均衡算法,该算法能够更好地提升边缘服务器集群的负载均衡度,缩短任务完成时间;倪雅婷等[21]提出一种由动态配置、负载收集、算法调度组成的动态负载均衡策略,对Nginx中WLC算法进行改进,满足了DRC集群的大流量访问需求;李岚[22]利用神经网络动态优化参数,提出用于移动通信平台的动态负载均衡算法,降低了算法的响应时间,提升了移动通信平台的运行效率。徐爱鑫等[23]提出一种基于非合作博弈降载的主控制器重选模型,解决了软件定义网络中多控制器负载失衡问题。

1.2 Hyperledger Fabric

在Hyperledger Fabric中节点按逻辑角色解耦,实现了排序服务、共识、身份认证、权限管理、加解密、账本机制的模块化,提高了可扩展性[24]。Hyperledger Fabric采用成员许可制,支持多通道管理、可编程和第三方实现,并通过Docker容器技术,实现了低资源占用前提下的节点快速启动。此外,Hyperledger Fabric支持自定义的共识协议,实现了应用平台的定制化。在实际运行过程中,不同节点担任不同的逻辑角色。

1.2.1 交易流程

Hyperledger Fabric中的请求包括查询请求(Query)和交易请求(Invoke)。查询请求是读取账本但并不会修改账本状态的链码调用,除了基于审计目的需要记录访问账本日志之外,在通常情况下,客户端不会提交这种只读性事务进行排序、验证和提交。交易请求根据提案内容调用指定链码内的函数,经过提案、背书、排序、提交等一系列的交易过程,最终将区块写入相应通道账本中。Hyperledger Fabric交易流程如图 1所示。

Download:
图 1 Hyperledger Fabric交易流程 Fig. 1 Process of Hyperledger Fabric transaction

Hyperledger Fabric交易过程具体如下:

1)客户端通过SDK调用证书服务进行身份注册,向区块链网络发送交易提案(proposal)至背书节点,交易提案中包括链码信息、提交时间、客户端签名等信息。

2)背书节点在收到提案后,检查客户端签名并确认提交者是否被授权执行该操作,根据提案内容调用并模拟执行交易(实际并不改变当前账本的状态),随后背书节点调用背书系统链码(Endorsement System Chaincode,ESCC),并根据节点身份对交易响应签名,同时将签名和背书执行结果发送至客户端[25]

3)客户端在收到背书节点返回的信息后,检查背书节点的签名是否有效,若签名无效,则交易停止。同时,客户端根据背书策略,检查背书数量是否与背书策略相匹配,并检查背书结果是否一致。在检查无误后,根据背书生成的读写集打包生成交易发送给排序节点,否则中止交易。

4)在排序服务中,排序节点根据共识算法将交易按时间顺序排序,基于交易顺序达成共识,并按指定的切分策略,首先将交易打包为区块,然后分发到相应通道的所有组织的主节点上。

5)提交节点在收到区块后,使用读写集中的读集对交易进行校验以检查交易的有效性(如果读集中键的版本和世界状态中键的版本一致,则认为该交易是有效的),检查通过后将区块提交至区块链中,并修改相应业务对象的世界状态。

在区块被提交至链上并更新世界状态后,则认为交易已完成。这一过程主要包括背书、排序、验证3个阶段,其中,背书是指接收客户端的交易请求后模拟执行交易,对结果签名并返回交易响应的过程,排序是对交易按时间顺序达成一致并打包为区块的过程,验证是由提交节点对交易完整性和账本一致性进行检查。

1.2.2 性能分析

Hyperledger Fabric将共识机制解耦,使共识过程逻辑分离。Hyperledger Fabric通过背书-排序-验证过程达成共识,使得系统具有模块化的特性,提高了灵活性,但是也对系统性能产生了一些影响。对Hyperledger Fabric共识阶段做进一步分析:

1)背书阶段,默认背书策略会将提案分发给通道所有成员,通道中大部分成员达成一致即背书成功。通过背书预先执行交易提案进行交易有效性验证,避免了各节点都调用链码执行交易的过程,提高了系统的交易处理速度。但在背书过程中,背书节点需要校验提案合法性、执行智能合约、生成读写集、背书签名、背书响应等步骤,消耗了大量时间。在默认背书策略下,当客户端产生大量交易时,背书节点难以及时处理,容易形成较长的交易请求队列,从而导致较长的交易时延。

2)排序阶段,排序节点使用共识算法达成交易顺序一致性共识,仅负责交易排序并根据区块参数设置将排序后的交易打包成为区块,在此阶段中处理时长主要取决于所采用的共识算法。

3)验证阶段,提交节点首先对区块结构和数据进行检查,通过验证系统链码(Validation System Chain Code,VSCC)验证背书有效性以及交易合法性,然后执行多版本并发控制(Multi-Version Concurrency Control,MVCC)验证是否存在并发操作,检查通过后提交区块至分类账本并更新相应世界状态。当区块切分策略设置过小时,在交易发送速率不断提高的过程中,多个API的频繁调用会使验证性能显著下降,验证阶段的队列长度暴涨从而成为系统瓶颈。

综合以上分析得出,在不改变Hyperledger Fabric网络架构的前提下,合理选取区块配置参数可以规避区块大小导致的验证阶段性能瓶颈问题,从而将系统性能瓶颈定位到背书阶段,因此本文设计基于动态负载反馈的提案分发优化方案以均衡背书节点性能,提高系统效率。

2 基于动态负载反馈的提案分发优化方案

在Hyperledger Fabric共识机制的基础上,设计一种基于动态负载反馈的提案分发优化方案。该方案周期性计算背书节点负载,通过动态反馈的负载均衡算法依据节点权值选取交易背书节点完成交易背书,实现了交易背书节点性能的均衡利用,提高了交易处理性能。

2.1 设计原理

在系统运行过程中,原有共识机制忽略了背书节点之间背书任务量的差异,容易导致节点处理性能失衡。考虑到所有节点都配置在Docker容器中,Docker容器共享宿主机的内核,在同一宿主机或多个宿主机配置相同的情况下,可以通过节点当前负载来衡量节点的剩余处理能力。因此,为了增强Hyperledger Fabric集群的负载自适应能力,提出基于动态负载反馈的提案分发优化方案。

该方案根据反馈周期T计算节点负载,并根据节点负载计算节点权值,建立候选背书节点列表,客户端/应用程序提交交易请求至客户端服务器,客户端服务器作为负载均衡器依据当前周期的节点权值,根据负载均衡算法为提案选择背书节点,并最终调用SDK将指定交易提案分发至背书节点为交易进行背书。节点权值大小与节点当前负载成反比,与节点的剩余处理能力成正比。

在该方案中,由于节点具有相同的配置,在实现方案效果的同时考虑算法复杂度对服务器性能的影响,因此选用加权轮询算法实现对提案的分发。通过这种动态反馈的负载均衡机制,根据节点负载周期性修正节点权值,避免了加权轮询算法中由于特殊权值产生的不均匀序列,从而实现了交易背书分配策略的动态调整,使背书节点的负载趋于均衡,并最终提升了系统的交易处理性能。基于动态负载反馈的提案分发优化方案流程如图 2所示。

Download:
图 2 基于动态负载反馈的提案分发优化方案流程 Fig. 2 Process of optimization scheme of proposal distribution based on dynamic load feedback
2.2 参数设置 2.2.1 负载指数

选取CPU、内存、磁盘以及带宽使用率来综合评价节点负载,其中,CPU利用率反映了节点繁忙情况,磁盘使用率反映了对磁盘的使用程度,内存利用率反映了节点内存使用情况,带宽利用率反映了网络使用情况。假设集群an是由n个节点组成,即$ {a}_{n}=\left\{{a}_{1}, {a}_{2}, \cdots , {a}_{n}\right\} $$ {L}_{ai} $表示节点i的当前负载,则:

$ {L}_{ai}={\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}{C}_{ai}+{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}{M}_{ai}+{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}{D}_{ai}+{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}{N}_{ai} $ (1)
$ {N}_{ai}=\frac{{s}_{\mathrm{s}\mathrm{p}\mathrm{e}\mathrm{e}{\mathrm{d}}_{\mathrm{u}\mathrm{p}}}+{s}_{\mathrm{s}\mathrm{p}\mathrm{e}\mathrm{e}{\mathrm{d}}_{\mathrm{d}\mathrm{o}\mathrm{w}\mathrm{n}}}}{1{024}^{2}\times {N}_{\mathrm{N}\mathrm{e}\mathrm{t}}} $ (2)

其中:$ {C}_{ai} $$ {M}_{ai} $$ {D}_{ai} $$ {N}_{ai} $分别为节点i当前的CPU、内存、磁盘以及带宽使用率;$ {s}_{\mathrm{s}\mathrm{p}\mathrm{e}\mathrm{e}{\mathrm{d}}_{\mathrm{u}\mathrm{p}}} $$ {s}_{\mathrm{s}\mathrm{p}\mathrm{e}\mathrm{e}{\mathrm{d}}_{\mathrm{d}\mathrm{o}\mathrm{w}\mathrm{n}}} $$ {N}_{\mathrm{N}\mathrm{e}\mathrm{t}} $分别为每秒带宽上传速度、每秒带宽下载速度和网络带宽,参数数值通过对Docker进行性能监控获得;$ {\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}} $$ {\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}} $$ {\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}} $$ {\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}} $分别为节点i当前的CPU利用率、内存利用率、磁盘使用率以及网络带宽利用率的负载影响权重,并且$ {\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}+{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}+{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}+{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}=1 $

2.2.2 节点权值

为能够根据节点负载反馈动态改变节点处理背书任务数量,实现节点负载自适应,节点权值设定需要能够反映节点当前处理能力,即节点权值与节点当前负载呈反比。根据以上分析,将节点权值设为节点负载倒数的占比,负载越高的节点权值越低,分配到的任务数量越少,负载越低的节点权值越高,分配到的任务数量越多。利用$ {\omega }_{i} $表示节点权值,计算公式如下:

$ {\omega }_{i}=\left(1/{L}_{ai}\right)/\sum\limits_{i=1}^{n}\left(1/{L}_{ai}\right) $ (3)

其中:$ {L}_{ai} $表示节点i当前的负载。

2.2.3 均衡指数

当达到理想状态时,各节点负载需满足:

$ {L}_{a1}={L}_{a2}=\cdots ={L}_{an}=\overline {L} $ (4)

此时各节点负载离散程度最小,集群负载的均方差为0。反之,在负载不均衡时,集群负载的均方差较大。因此采用集群an负载的标准差来表示节点的负载均衡情况,使用$ {L}_{\mathrm{a}\mathrm{v}\mathrm{g}} $表示集群an的平均负载,$ {L}_{\mathrm{d}} $表示集群$ {a}_{n} $的均衡指数,得到:

$ \overline {L}=\frac{\sum\limits_{i=1}^{n}\left({\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}\;\;{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}\;\;{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}\;\;{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}\right){\left({C}_{ai}\;\;{M}_{ai}\;\;{D}_{ai}\;\;{N}_{ai}\right)}^{\mathrm{T}}}{n} $ (5)
$ {L}_{\mathrm{d}}=\sqrt{\frac{{\left({L}_{a1}-\overline {L}\right)}^{2}+{\left({L}_{a2}-\overline {L}\right)}^{2}+\cdots +{\left({L}_{an}-\overline {L}\right)}^{2}}{n}} $ (6)
2.2.4 影响权重

对于各指标的影响权重$ \alpha =\left\{{\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}, {\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}, {\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}, {\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}\right\} $的计算,传统方法是根据经验取值,其结果可能会与实际偏差较大,难以精确描述各指标对于节点性能的影响。本文选择将各性能指标与响应时延的相关系数作为各指标占比权值。相关系数是研究变量之间线性相关程度的量。响应时延为背书阶段的提案处理时间,即客户端发送交易请求至背书节点与背书节点返回响应至客户端的时间差,可通过回调函数打印背书响应时间戳和提案中的时间戳,将时间戳解析后对其求差值得到。当前节点负载越高,节点剩余处理能力越弱,用户请求处理时延越长,而响应时延是节点负载情况的直接体现。因此,各性能指标与响应时延之间的相关系数能从一定程度上反映各性能指标对节点负载的影响,影响权重计算如下:

$ {\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}^{{{'}}}=\left|\frac{\mathrm{c}\mathrm{o}\mathrm{v}\left({\boldsymbol{X}}_{\mathrm{c}\mathrm{p}\mathrm{u}}, \boldsymbol{Y}\right)}{\sqrt{D\left({\boldsymbol{X}}_{\mathrm{c}\mathrm{p}\mathrm{u}}\right)}\sqrt{D\left(\boldsymbol{Y}\right)}}\right| $ (7)
$ {\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}^{{{'}}}=\left|\frac{\mathrm{c}\mathrm{o}\mathrm{v}\left({\boldsymbol{X}}_{\mathrm{m}\mathrm{e}\mathrm{m}}, \boldsymbol{Y}\right)}{\sqrt{D\left({\boldsymbol{X}}_{\mathrm{m}\mathrm{e}\mathrm{m}}\right)}\sqrt{D\left(\boldsymbol{Y}\right)}}\right| $ (8)
$ {\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}^{{{'}}}=\left|\frac{\mathrm{c}\mathrm{o}\mathrm{v}\left({\boldsymbol{X}}_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}, \boldsymbol{Y}\right)}{\sqrt{D\left({\boldsymbol{X}}_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}\right)}\sqrt{D\left(\boldsymbol{Y}\right)}}\right| $ (9)
$ {\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}^{{{'}}}=\left|\frac{\mathrm{c}\mathrm{o}\mathrm{v}\left({\boldsymbol{X}}_{\mathrm{n}\mathrm{e}\mathrm{t}}, \boldsymbol{Y}\right)}{\sqrt{D\left({\boldsymbol{X}}_{\mathrm{n}\mathrm{e}\mathrm{t}}\right)}\sqrt{D\left(\boldsymbol{Y}\right)}}\right| $ (10)

其中:$ {\alpha }_{c\mathrm{p}\mathrm{u}}^{{{'}}} $$ {\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}^{{{'}}} $$ {\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}^{{{'}}} $$ {\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}^{{{'}}} $为CPU、内存、磁盘I/O、网络带宽对负载性能的初始影响权重;$ {\boldsymbol{X}}_{\mathrm{c}\mathrm{p}\mathrm{u}} $$ {\boldsymbol{X}}_{\mathrm{m}\mathrm{e}\mathrm{m}} $$ {\boldsymbol{X}}_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}} $$ {\boldsymbol{X}}_{\mathrm{n}\mathrm{e}\mathrm{t}} $为一定时间内采集到的CPU利用率、内存利用率、磁盘使用率、网络带宽利用率组成的向量;Y为响应时延向量;$ \mathrm{c}\mathrm{o}\mathrm{v}\left({\boldsymbol{A}}, \boldsymbol{B}\right) $AB的协方差;$ D\left(\boldsymbol{A}\right) $$ D\left({\boldsymbol{B}}\right) $分别为AB的方差。对初始影响权重进行归一化处理:

$ {\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}=\frac{{\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}^{{{'}}}}{{\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}+{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}+{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}+{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}} $ (11)
$ {\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}=\frac{{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}^{{{'}}}}{{\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}+{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}+{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}+{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}} $ (12)
$ {\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}=\frac{{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}^{{{'}}}}{{\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}+{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}+{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}+{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}} $ (13)
$ {\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}=\frac{{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}^{{{'}}}}{{\alpha }_{\mathrm{c}\mathrm{p}\mathrm{u}}+{\alpha }_{\mathrm{m}\mathrm{e}\mathrm{m}}+{\alpha }_{\mathrm{d}\mathrm{i}\mathrm{s}\mathrm{k}}+{\alpha }_{\mathrm{n}\mathrm{e}\mathrm{t}}} $ (14)

通过测试并计算得出各参数对于负载的影响权重分别为0.335 1、0.340 7、0.156 1、0.168 1,依次为CPU利用率、内存利用率、磁盘使用率、网络带宽利用率的影响权重。

2.2.5 反馈周期

通过节点集群周期性反馈性能给负载均衡器实现性能均衡,反馈周期T会影响系统负载均衡的有效性。在收集负载信息并进行计算的过程中,会消耗均衡器所在的服务器资源。当T设置过小时,会更多地消耗服务器资源,加重服务器的性能负载。当T设置过大时,收集到的节点负载信息误差较大,实时性较差。因此,为实现较好的负载均衡效果,需要对T进行合理设置。本文参考负载均衡算法的经验值,选取T的范围为2~15 s并以间隔1 s进行实验,通过多次实验取平均值并计算不同T下的集群均衡指数,测试结果如图 3图 4所示。从图 3可以看出:当反馈周期T小于6 s时,集群吞吐量呈递增趋势;当反馈周期T为6~8 s时,集群吞吐量在53 transaction/s左右,吞吐量达到最大值;当反馈周期T大于8 s时,集群吞吐量呈下降趋势。从图 4可以看出:当反馈周期T小于9 s时,集群均衡情况较稳定;当反馈周期T大于9 s时,集群均衡指数呈上升趋势。因此,经过综合衡量后选取反馈周期T为7 s。

Download:
图 3 不同反馈周期下的集群吞吐量 Fig. 3 Cluster throughput under different feedback periods
Download:
图 4 不同周期下的集群均衡指数 Fig. 4 Cluster equilibrium index under different periods
2.3 算法流程

基于动态负载反馈的提案分发优化算法具体步骤如下:

步骤1  测试计算影响权重$ \alpha $、反馈周期T,算法初始化。

步骤2  在部署Hyperledger Fabric的服务器上采集各节点的负载状况,包括CPU利用率、内存利用率、磁盘使用率、网络带宽上传/下载速率。

步骤3  根据负载信息,利用式(1)量化当前周期节点负载。

步骤4  根据节点负载,利用式(4)计算当前周期节点权值。

步骤5  初始化加权轮询算法。将当前周期的节点权值作为加权轮询算法的权重weight,并将currentWeight设置为0。

步骤6  根据加权轮询算法为背书节点分发交易提案,在新的反馈周期T到来时,重新采集负载信息,跳转至步骤3开始新一轮算法。

3 测试与结果分析

在双核、2 GB内存和60 GB系统硬盘的阿里云服务器上搭建Hyperledger Fabric环境,Fabric网络中包括Orgl和Org2两个组织,每个组织包含5个对等节点。服务器配置如表 1所示。

下载CSV 表 1 服务器配置 Table 1 Server configuration

性能测试采用官方测试工具Caliper,通过编写网络配置文件、测试负载文件和测试基准配置文件等对Hyperledger Fabric优化前后的查询性能和交易性能进行测试,测试指标主要包括交易吞吐量和时延两方面,其中吞吐量是指单位时间内能处理的交易数,时延为单个交易处理时间。测试配置文件中设置客户端数量为5,设置每轮的测试时间为30 s,采用Fixed load速率控制器,分别对Hyperledger Fabric原始方案和本文优化方案的单机网络交易和查询的吞吐量进行测试。测试结果如表 2表 3所示。

下载CSV 表 2 原始方案性能测试结果 Table 2 Performance test results of the original scheme
下载CSV 表 3 优化方案性能测试结果 Table 3 Performance test results of the optimized scheme

表 2中原始方案的测试结果可知:链码交易的平均吞吐量为45.63 transaction/s,平均时延为0.193 s;链码查询的平均吞吐量为205.17 transaction/s,平均时延为0.033 s。由表 3中优化方案的测试结果可知,链码交易的平均吞吐量为53.63 transaction/s,平均时延为0.18 s;链码查询的平均吞吐量为237.67 transaction/s,平均时延为0.027 s。根据计算结果:采用优化方案后链码交易吞吐量较原始方案提高了17.53%,平均处理时延降低了6.7%;链码查询吞吐量较原始方案提高了15.84%,平均处理时延降低了18.2%;请求成功数量也有所提升。

4 结束语

本文针对Hyperledger Fabric背书阶段存在的性能瓶颈,提出一种基于动态负载反馈的提案分发优化方案。该方案综合考虑多种性能指标量化节点负载和节点权值,根据负载数据计算影响权重与反馈周期,并通过加权轮询算法分发交易提案,实现背书节点负载的动态均衡。测试结果表明,优化方案相比于原始方案链码交易和查询的吞吐量更高且处理时延更短,同时证明了负载均衡算法应用于Hyperledger Fabric共识性能优化的可行性。后续将对Hyperledger Fabric共识中背书节点的隐私保护问题进行研究,进一步提升优化方案的交易和查询安全性和容错性。

参考文献
[1]
张亮, 刘百祥, 张如意, 等. 区块链技术综述[J]. 计算机工程, 2019, 45(5): 1-12.
ZHANG L, LIU B X, ZHANG R Y, et al. Overview of blockchain technology[J]. Computer Engineering, 2019, 45(5): 1-12. (in Chinese)
[2]
蔡维德, 郁莲, 王荣, 等. 基于区块链的应用系统开发方法研究[J]. 软件学报, 2017, 28(6): 1474-1487.
CAI WT, YU L, WANG R, et al. Blockchain application development techniques[J]. Journal of Software, 2017, 28(6): 1474-1487. (in Chinese)
[3]
KARANDIKAR N, CHAKRAVORTY A, RONG C M. Transactive energy on Hyperledger Fabric[C]//Proceedings of the 6th International Conference on Internet of Things: Systems, Management and Security. Washington D. C., USA: IEEE Press, 2019: 539-546.
[4]
Hyperledger Fabric: a blockchain platform for the enterprise[EB/OL]. [2022-02-11]. https://hyperledger-fabric.readthedocs.io/zh_CN/release-2.2/.
[5]
周玉舒. 基于区块链的钢铁供应链系统的设计与实现[D]. 西安: 西安电子科技大学, 2021.
ZHOU Y S. Design and implementation of steel supply chain system based on blockchain[D]. Xi'an: Xidian University, 2021. (in Chinese)
[6]
孟吴同. 基于可验证随机函数的Hyperledger Fabric共识机制优化方案[D]. 北京: 北京交通大学, 2020.
MENG W T. Optimization scheme for Hyperledger Fabric consensus mechanism based on verifiable random function[D]. Beijing: Beijing Jiaotong University, 2020. (in Chinese)
[7]
THAKKAR P, NATHAN S, VISWANATHAN B. Performance benchmarking and optimizing Hyperledger Fabric blockchain platform[C]//Proceedings of the 26th International Symposium on Modeling, Analysis, and Simulation of Computer and Telecommunication Systems. Washington D. C., USA: IEEE Press, 2018: 264-276.
[8]
袁普. 基于Hyperledger的私有区块链系统设计与性能优化[D]. 北京: 北京邮电大学, 2020.
YUAN P. Design and performance optimization of a Hyperledger-based permissioned blockchain system[D]. Beijing: Beijing University of Posts and Telecommunications, 2020. (in Chinese)
[9]
FOSCHINI L, GAVAGNA A, MARTUSCELLI G, et al. Hyperledger Fabric blockchain: chaincode performance analysis[C]//Proceedings of IEEE International Conference on Communications. Washington D. C., USA: IEEE Press, 2020: 1-6.
[10]
何英. 基于区块链的数字版权登记技术研究[D]. 重庆: 重庆邮电大学, 2019.
HE Y. Research on digital copyright registration technology based on blockchain[D]. Chongqing: Chongqing University of Posts and Telecommunications, 2019. (in Chinese)
[11]
NARAYANAM K, KAUL A, KUMAR K, et al. Partial order transactions on permissioned blockchains for enhanced scalability[C]//Proceedings of the 3rd Conference on Blockchain Research & Applications for Innovative Networks and Services. Washington D. C., USA: IEEE Press, 2021: 149-156.
[12]
王洋. 基于优化共识的区块链在电子文件全生命周期真实性保障中的应用——以中国电力建设集团有限公司电子文件单套归档和电子档案单套管理试点为例[J]. 档案学研究, 2022(2): 89-96.
WANG Y. Application of blockchain based on consensus optimization in authenticity guarantee of electronic records in whole life cycle: take power construction corporation of China's pilot project of electronic records single-set archiving and management as an exam[J]. Archives Science Study, 2022(2): 89-96. (in Chinese)
[13]
刘云, 宋凯, 陈路遥, 等. 最小损失算法在区块链物联网中的优化研究[J]. 四川大学学报(自然科学版), 2022, 59(2): 84-90.
LIU Y, SONG K, CHEN L Y, et al. Optimization of minimum loss algorithm in blockchain Internet of Things[J]. Journal of Sichuan University(Natural Science Edition), 2022, 59(2): 84-90. (in Chinese)
[14]
刘应, 范洪博, 马首群, 等. 基于联盟区块链的高效性能优化中间件研究[J]. 数据通信, 2022(1): 6-8, 24.
LIU Y, FAN H B, MA S Q, et al. Research on efficient performance optimization middleware based on federated blockchain[J]. Data Communication, 2022(1): 6-8, 24. (in Chinese)
[15]
周步祥, 曹强, 臧天磊, 等. 基于区块链的微电网双层博弈电力交易优化决策[J]. 电力自动化设备, 2022, 42(9): 35-42.
ZHOU B X, CAO Q, ZANG T L, et al. Electricity trading optimization decision for microgrid based on blockchain and two-level game[J]. Electric Power Automation Equipment, 2022, 42(9): 35-42. (in Chinese)
[16]
陈悦妍. 面向区块链性能的轻量级优化方法研究[D]. 南京: 南京邮电大学, 2021.
CHEN Y Y. Research on lightweight optimization methods for blockchain performance[D]. Nanjing: Nanjing University of Posts and Telecommunications, 2021. (in Chinese)
[17]
吴俊鹏, 刘晓东. 一种基于集群的动态负载均衡算法研究[J]. 电子设计工程, 2021, 29(16): 75-78.
WU J P, LIU X D. Research on a dynamic load balancing algorithm based on cluster[J]. Electronic Design Engineering, 2021, 29(16): 75-78. (in Chinese)
[18]
杨炳钊. 流媒体服务器负载均衡算法研究与应用[D]. 贵阳: 贵州大学, 2019.
YANG B Z. Research and application of load balancing algorithm for streaming media server[D]. Guiyang: Guizhou University, 2019. (in Chinese)
[19]
YI C, ZHANG X G, CAO W. Dynamic weight based load balancing for microservice cluster[C]//Proceedings of the 2nd International Conference on Computer Science and Application Engineering. New York, USA: ACM Press, 2018: 1-7.
[20]
林峰, 段建岚, 李传伟, 等. C-V2X边缘服务器的动态负载均衡算法研究[J]. 计算机工程, 2020, 46(12): 201-206, 221.
LIN F, DUAN J L, LI C W, et al. Research on dynamic load balancing algorithm for C-V2X edge server[J]. Computer Engineering, 2020, 46(12): 201-206, 221. (in Chinese)
[21]
倪雅婷, 杨文晖, 苗放, 等. 基于Nginx的DRC集群动态负载均衡策略[J]. 计算机与现代化, 2022(4): 58-64.
NI Y T, YANG W H, MIAO F, et al. Dynamic load balancing strategy of DRC cluster based on Nginx[J]. Computer and Modernization, 2022(4): 58-64. (in Chinese)
[22]
李岚. 基于神经网络反馈的移动通信平台动态负载均衡算法[J]. 大庆师范学院学报, 2022, 42(3): 102-108.
LI L. Dynamic load balancing algorithm of mobile communication platform based on neural network feedback[J]. Journal of Daqing Normal University, 2022, 42(3): 102-108. (in Chinese)
[23]
徐爱鑫, 孙士民, 汪晓凡, 等. 基于改进遗传算法的SDN多控制器负载均衡机制研究[J/OL]. 计算机应用研究: 1-7[2022-05-09]. https://doi.org/10.19734/j.issn.1001-3695.2022.02.0070.
XU A X, SUN S M, WANG X F, et al. SDN multi-controller load balancing mechanism based on improved genetic algorithm[J/OL]. Application Research of Computers: 1-7[2022-05-09]. https://doi.org/10.19734/j.issn.1001-3695.2022.02.0070. (in Chinese)
[24]
BALIGA A, SOLANKI N, VEREKAR S, et al. Performance characterization of Hyperledger Fabric[C]//Proceedings of Crypto Valley Conference on Blockchain Technology. Washington D. C., USA: IEEE Press, 2018: 65-74.
[25]
ANDROULAKI E, DE CARO A, NEUGSCHWANDTNER M, et al. Endorsement in Hyperledger Fabric[C]//Proceedings of IEEE International Conference on Blockchain. Washington D. C., USA: IEEE Press, 2019: 510-519.