Raft 协议 - Fabric( 四 )


区块链性能表现非常复杂 。比如执行1次交易的响应时间在2.1s~2.8s内,并发执行99次交易的响应时间也大致相同 。但并发执行100次也许只需1.4s~1.37s 。
本文中采用一种类似负载测试的方法,针对一个方法或函数,一次性加载500个并发调用,然后记录每个调用的完成时间作为响应时间,以最后完成时间作为500个调用完成时间,以此来计算平均响应时间、每秒交易数、区块生成速率等各项性能指标 。一次负载测试可分三个阶段 。
加载、吞入阶段 。从开始到最后一个调用完成加载,并记录开始时间与各调用的开始时间;承载、消化阶段 。从加载完成到第1个调用完成,此阶段网络承载并发工作量;减载、吐出阶段 。从第1个调用完成到最后1个调用完成,此阶段负载逐步减少,记录各调用完成时间 。3 性能测试指标与影响因素 3.1 性能测试指标
本文中采用的测试性能指标主要为每秒交易数、平均响应时间、区块生成速率 。
每秒交易数TPS( Per ):每秒完成的交易数量 。用完成的交易数量除以所需时间求得 。记t0为开始提交交易的时刻(s),t1为所有交易均完成的时刻(s),n为完成的总交易数量(个) 。
平均响应时间ART(Time):每次交易的平均响应时间,记RTi为第i个交易的响应时间(s),n为完成的交易总数量(个) 。
区块生成速率BLKPS(Block Per ):每秒产生的区块个数 。记t0为开始提交交易的时刻(s),t1为所有交易均完成的时刻(s),b为在一次测试中产生的区块个数(个) 。
3.2 性能影响因素
网络是一个分布式多节点密切协作的复杂系统,影响交易性能的因素非常多 。在本文中选取区块大小、背书策略、代理节点作为性能影响因素进行分析 。
3.2.1 区块大小
区块大小指每个区块中能够包含的最大交易数目 。当至少满足以下三个条件之一时,便会产生一个区块 。
该区块中从首个交易到达开始,等待时间超过2s;该区块中已接收的交易个数达到区块大小;该区块中字节大小达到512KB 。
实验结果预测假设:
针对不同大小的区块,在相同并发数量的情况下,生成的区块数目不同 。以并发数为100为例 。当区块大小为10时,将生成10个区块;区块大小为50时,将产生两个区块 。因此预测,随着区块大小的增大,每秒交易数增大,平均响应时间降低,区块生成速率降低,并且都将趋于稳定 。
3.2.2 背书策略
节点通过背书策略来确定一个交易是否被正确背书 。本文网络中含有两个机构,org1与org2 。对于双机构网络,背书策略可选取单背书OR,双背书AND 。
单背书OR:org1或org2中任何一个peer节点背书成功即可 。双背书AND:org1与org2机构中均至少一个peer节点背书成功 。
实验结果预测假设:
背书策略为AND时与背书策略是OR时相比较,安全性更强,但需要的背书节点也更多 。因此预测,每秒交易数降低,平均响应时间增大,区块生成速率降低 。
3.2.3 代理节点
代理节点是raft网络中的接受请求节点,raft网络的节点是处理请求的节点,如果两者不是同一节点,代理节点需要将请求转发至raft的节点进行处理,如果二者是同一节点,则无需转发,可直接处理 。
实验结果预测假设:
代理节点是raft网络中的节点时与是节点时相比较,需要一个交易转发的过程 。因此预测,每秒交易数降低,平均响应时间增大,区块生成速率降低 。
4 实验与数据分析 4.1 基准性能测试
首先进行基准性能实验,计算每秒交易数、平均响应时间、区块生成速率 。相关参数配置如表2 。设置并发数为500,进行3次测试取平均值作为结果 。