> 文章列表 > fisco-bcos java-sdk-demo压力测试环境搭建

fisco-bcos java-sdk-demo压力测试环境搭建

fisco-bcos java-sdk-demo压力测试环境搭建

如今,区块链技术被广泛应用在各行各业中,也接受海量用户、海量数据的挑战,越来越多同学开始关注链与合约的性能。fisco bcos中使用java-sdk-demo工具完成了对区块链系统性能的测试。

文章目录

  • 一、快速搭建一个fisco网络
    • 1、下载安装脚本并执行
    • 2、启动fisco联盟链
    • 3、检查节点状态
    • 4、检查日志输出的相应命令
  • 二、搭建java-sdk-demo环境
    • 1.下载并编译源码
    • 2. 拷贝证书
    • 3.拷贝配置文件
  • 三、执行压力测试
    • 1.查看压测程序ParallelOkPerf的使用方法
    • 2. 执行压测程序,对合约Parallelok.sol进行测试
      • 2.1 首先批量生成转账用户并初始化用户金额(add),执行后,生成用户列表文件user1000.txt
      • 2.2 生成账户后,用户间两两进行转账,来进行压力测试
  • 后续工作

一、快速搭建一个fisco网络

1、下载安装脚本并执行

cd ~/blockchain/fisco
#下载安装脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.0.0-rc3/build_chain.sh && chmod u+x build_chain.sh
#执行build_chain.sh脚本生成4个节点
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200

命令成功后会输出All completed

[INFO] Downloading fisco-bcos binary from https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v3.0.0-rc3/fisco-bcos-macOS-x86_64.tar.gz ...
################################################################################################################################### 100.0%
[INFO] Generate ca cert successfully!
Processing IP:127.0.0.1 Total:4
[INFO] Generate ./nodes/127.0.0.1/sdk cert successful!
[INFO] Generate ./nodes/127.0.0.1/node0/conf cert successful!
[INFO] Generate ./nodes/127.0.0.1/node1/conf cert successful!
[INFO] Generate ./nodes/127.0.0.1/node2/conf cert successful!
[INFO] Generate ./nodes/127.0.0.1/node3/conf cert successful!
==============================================================
[INFO] fisco-bcos Path     : bin/fisco-bcos
[INFO] Auth Mode           : false
[INFO] Start Port          : 30300 20200
[INFO] Server IP           : 127.0.0.1:4
[INFO] SM Model            : false
[INFO] output dir          : ./nodes
[INFO] All completed. Files in ./nodes

4个节点的配置文件放在了/Users/hanallen/blockchain/fisco/nodes下面

2、启动fisco联盟链

#进入到~/blockchain/fisco/下启动节点
bash nodes/127.0.0.1/start_all.sh

启动成功后会输出如下响应

try to start node0
try to start node1
try to start node2
try to start node3node2 start successfullynode3 start successfullynode1 start successfullynode0 start successfully

3、检查节点状态

ps -ef | grep -v grep | grep fisco-bcos

输出如下响应

  501 10237     1   0 10:47上午 ttys000    0:08.28 /Users/hanallen/blockchain/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini501 10239     1   0 10:47上午 ttys000    0:08.22 /Users/hanallen/blockchain/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini501 10240     1   0 10:47上午 ttys000    0:08.33 /Users/hanallen/blockchain/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini501 10243     1   0 10:47上午 ttys000    0:08.32 /Users/hanallen/blockchain/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini

4、检查日志输出的相应命令

# 查看节点node0链接的节点数
tail -f nodes/127.0.0.1/node0/log/log*  | grep connected
# 检查是否在共识
tail -f nodes/127.0.0.1/node0/log/log*  | grep +++
# 正常情况会不停输出++++Generating seal,表示共识正常。

二、搭建java-sdk-demo环境

1.下载并编译源码

cd ~/blockchain/fisco
# 下载源码
git clone https://github.com/FISCO-BCOS/java-sdk-demo
cd java-sdk-demo
git checkout release-3.0.0-rc3# 编译源码
bash gradlew build 
# 编译完成后,将会在项目根目录下生成dist文件夹

接下里需要拷贝证书以及相应的端口进行配置,详情可以参考这里

2. 拷贝证书

cd dist
# 将节点的证书全部拷贝进SDK配置文件夹中
cp -r ~/blockchain/fisco/nodes/127.0.0.1/sdk/* ~/blockchain/fisco/java-sdk-demo/dist/conf

3.拷贝配置文件

对dist目录下的conf文件夹中的config-example.toml文件进行拷贝,并命名为config.toml

$ cp conf/config-example.toml conf/config.toml

三、执行压力测试

以用户间的转账情景为例来进行压力测试,本测试一共由两部分组成,其中一个是压测的程序代码,一个是转账合约

1.查看压测程序ParallelOkPerf的使用方法

#进入到dist目录下
cd java-sdk-demo/dist/
# 查看压测程序ParallelOkPerf的用法
java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf

得到如下输出,为命令的使用方法:

 Usage:
===== ParallelOk test===========java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf [parallelok] [groupId] [add] [count] [tps] [file].java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf [parallelok] [groupId] [transfer] [count] [tps] [file].
===== DagTransafer test===========java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf [precompiled] [groupId] [add] [count] [tps] [file].java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf [precompiled] [groupId] [transfer] [count] [tps] [file].

2. 执行压测程序,对合约Parallelok.sol进行测试

2.1 首先批量生成转账用户并初始化用户金额(add),执行后,生成用户列表文件user1000.txt

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf parallelok group0 add 1000 1000 user1000.txt true

相应的输出为:

====== ParallelOk trans, count: 1000, qps:1000, groupId: group0
====== ParallelOk userAdd, deploy success, address: 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1
===================================================================
Start UserAdd test, count 1000
Already sended: 100/1000 transactions,QPS=990.09900990099
Already sended: 200/1000 transactions,QPS=1000.0
Already sended: 300/1000 transactions,QPS=1000.0
Already sended: 400/1000 transactions,QPS=997.506234413965
Already sended: 500/1000 transactions,QPS=1000.0|received:10%|received:10%|received:10%|received:10%|received:10%|received:10%|received:20%|received:20%
Already sended: 600/1000 transactions,QPS=998.3361064891848|received:30%|received:30%|received:40%
Already sended: 700/1000 transactions,QPS=1000.0000000000001
Already sended: 800/1000 transactions,QPS=1000.0
Already sended: 900/1000 transactions,QPS=998.8901220865705
Already sended: 1000/1000 transactions,QPS=1000.0|received:50%|received:50%|received:60%|received:70%|received:80%|received:80%|received:90%|received:90%|received:100%
total
===================================================================
Total transactions:  1000
Total time: 1501ms
TPS(include error requests): 666.2225183211193
TPS(exclude error requests): 666.2225183211193
Avg time cost: 368ms
Error rate: 0.0%
Time area:
0    < time <  50ms   : 0  : 0.0%
50   < time <  100ms  : 0  : 0.0%
100  < time <  200ms  : 143  : 14.299999999999999%
200  < time <  400ms  : 416  : 41.6%
400  < time <  1000ms : 441  : 44.1%
1000 < time <  2000ms : 0  : 0.0%
2000 < time           : 0  : 0.0%Write DagTransferUser end, count is 1000

2.2 生成账户后,用户间两两进行转账,来进行压力测试

java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf parallelok group0 transfer 10000 1000 user1000.txt true

相应的输出为:

====== ParallelOk trans, count: 10000, qps:1000, groupId: group0
Load DagTransferUser end, count is 1000
====== ParallelOk trans, load success, address: 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1
Start transfer...
Querying account info...
2023-04-19 15:05:07 Query account finished
Sending transfer transactions...
Already sent: 1000/10000 transactions,QPS=1000.0|received:10%|received:10%|received:10%|received:10%
Already sent: 2000/10000 transactions,QPS=999.5002498750625|received:20%
Already sent: 3000/10000 transactions,QPS=1000.0|received:30%
Already sent: 4000/10000 transactions,QPS=1000.0|received:40%|received:40%
Already sent: 5000/10000 transactions,QPS=1000.0|received:50%
Already sent: 6000/10000 transactions,QPS=1000.0|received:60%|received:60%|received:60%|received:60%
Already sent: 7000/10000 transactions,QPS=1000.0|received:70%|received:70%
Already sent: 8000/10000 transactions,QPS=1000.0|received:80%|received:80%
Already sent: 9000/10000 transactions,QPS=1000.0|received:90%|received:90%|received:90%
Already sent: 10000/10000 transactions,QPS=1000.0|received:100%
total
===================================================================
Total transactions:  10000
Total time: 10470ms
TPS(include error requests): 955.1098376313275
TPS(exclude error requests): 955.1098376313275
Avg time cost: 429ms
Error rate: 0.0%
Time area:
0    < time <  50ms   : 0  : 0.0%
50   < time <  100ms  : 0  : 0.0%
100  < time <  200ms  : 550  : 5.5%
200  < time <  400ms  : 3858  : 38.58%
400  < time <  1000ms : 5578  : 55.779999999999994%
1000 < time <  2000ms : 14  : 0.13999999999999999%
2000 < time           : 0  : 0.0%
===================================================================
validation:user count is 1000verify_success count is 1000verify_failed count is 0

后续工作

完成环境部署的工作以及简单的测试之后,后续工作将会围绕着共识算法的性能测试以及智能合约的压力测试等工作持续展开

在进行压力测试时,具体的工作步骤如下:

  1. 编写合约代码(XXXX.sol);
  2. 编译合约生成java代码(XXXX.java),并集成入Java-SDK-Demo中;
  3. 编写压测程序(Performance_XXXX.java);
  4. 编译代码并部署到你的压测环境;
  5. 压测,且保证所有的交易结果都是正常的,错误的交易结果使压测意义不大。