溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

區(qū)塊鏈性能測試工具caliper

發(fā)布時(shí)間:2020-07-08 12:57:09 來源:網(wǎng)絡(luò) 閱讀:29201 作者:享學(xué)IT 欄目:開發(fā)技術(shù)

Caliper是一個(gè)區(qū)塊鏈性能測試框架,可用于測試不同的區(qū)塊鏈實(shí)現(xiàn)。支持

  • fabric v1.0+
  • sawtooth 1.0+
  • Iroha 1.0

測試內(nèi)容指標(biāo)包括:

  • 交易成功率
  • 交易吞吐量TPS
  • 交易延遲
  • 資源消耗

感受一下先

準(zhǔn)備

先安裝NodeJS 8.X、node-gyp、Docker、Docker-compose。

git clone https://github.com/hyperledger/caliper.git
cd caliper
npm install

安裝區(qū)塊鏈SDK(以fabric為例)

# caliper項(xiàng)目目錄下
npm install grpc@1.10.1 fabric-ca-client fabric-client

跑個(gè)測試

性能測試示例在benchmark目錄下,用法如下:

node benchmark/simple/main.js -c yourconfig.json -n yournetwork.json
  • -c用于指定區(qū)塊鏈的配置文件,不指定的話默認(rèn)為config.json;
  • -n用于指定區(qū)塊鏈網(wǎng)絡(luò)配置文件,不指定的話由-c指定的配置文件定義。

跑一個(gè)smallbank的例子:

node benchmark/smallbank/main.js

生成的報(bào)告長這樣(部分):

區(qū)塊鏈性能測試工具caliper

架構(gòu)

在這個(gè)標(biāo)準(zhǔn)框架核心,是可以譯解信息的“適配層”,讓Caliper可以安裝智能合約,觸發(fā)合約,或者查詢各種分布式賬本的狀態(tài),從而更好地測量其有效性。

區(qū)塊鏈性能測試工具caliper

適配層 Adaptation Layer

適配層用于將現(xiàn)有的區(qū)塊鏈系統(tǒng)與Caliper框架集成。適配器使用了相應(yīng)的鏈SDK和API實(shí)現(xiàn)了Caliper Blockchain NBIs。

接口&核心層

  • 區(qū)塊鏈操作接口:包含部署合約、調(diào)用合約、查詢賬本狀態(tài)等操作;
  • 資源監(jiān)控:對(duì)docker容器、本地進(jìn)程進(jìn)行監(jiān)控,包括CPU、內(nèi)存、網(wǎng)絡(luò)IO等的狀態(tài);
  • 性能分析:讀取預(yù)定義的性能數(shù)據(jù)(如TPS、延遲、成功率等)并打印報(bào)告。這些數(shù)據(jù)在調(diào)用NBI的時(shí)候會(huì)記錄(如創(chuàng)建時(shí)間,交易提交時(shí)間,交易結(jié)果等);
  • 生成HTML報(bào)告。

應(yīng)用層

  • 應(yīng)用層來運(yùn)行區(qū)塊鏈測試場景。每一個(gè)測試場景由一個(gè)配置文件來定義,包含底層區(qū)塊鏈網(wǎng)絡(luò)的配置和測試參數(shù)。
  • 項(xiàng)目內(nèi)置一個(gè)默認(rèn)的區(qū)塊鏈引擎,當(dāng)然開發(fā)人員也可以基于NBI來定義自己的區(qū)塊鏈引擎。

區(qū)塊鏈引擎

區(qū)塊鏈性能測試工具caliper

配置文件

benchmark/simple/config.json為例:

{
  "blockchain": {
    "type": "fabric",
    "config": "benchmark/simple/fabric.json"
  },
  "command" : {
    "start": "docker-compose -f network/fabric/simplenetwork/docker-compose.yaml up -d",
    "end" : "docker-compose -f network/fabric/simplenetwork/docker-compose.yaml down;docker rm $(docker ps -aq);docker rmi $(docker images dev* -q)"
  },
  "test": {
    "name": "simple",
    "description" : "This is an example benchmark for caliper, to test the backend DLT's performance with simple account opening & querying transactions",
    "clients": {
      "type": "local",
      "number": 5
    },
    "rounds": [{
        "label" : "open",
        "txNumber" : [1000, 1000, 1000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 50}}, {"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 150}}],
        "arguments": { "money": 10000 },
        "callback" : "benchmark/simple/open.js"
      },
      {
        "label" : "query",
        "txNumber" : [5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}],
        "callback" : "benchmark/simple/query.js"
      }]
  },
  "monitor": {
    "type": ["docker", "process"],
    "docker":{
      "name": ["all"]
    },
    "process": [
      {
        "command" : "node",
        "arguments" : "local-client.js",
        "multiOutput" : "avg"
      }
    ],
    "interval": 1
  }
}
  • blockchain定義被測試區(qū)塊鏈類型,并給出具體配置文件;
  • command定義了測試開始和結(jié)束時(shí)的命令;
  • test定義了測試相關(guān)的信息;
  • monitor定義了對(duì)資源對(duì)象如何進(jìn)行監(jiān)控。

Master

master實(shí)現(xiàn)的測試流包含三個(gè)階段:

  • 準(zhǔn)備階段:創(chuàng)建和初始化區(qū)塊鏈,部署智能合約,并啟動(dòng)監(jiān)控;
  • 測試階段:啟動(dòng)一個(gè)循環(huán)測試,測試任務(wù)會(huì)被安排給client去執(zhí)行,client會(huì)返回性能測試數(shù)據(jù);
  • 報(bào)告階段:分析測試數(shù)據(jù),并生成HTML格式的報(bào)告。
    Order

    Client

Local client

由于Node.js天生時(shí)單線程的,因此會(huì)fork多個(gè)local client子進(jìn)程來充分利用多核,提高測試效率。每個(gè)子進(jìn)程都運(yùn)行有一個(gè)區(qū)塊鏈客戶端。

Zookeeper client

多個(gè)zoookeeper client是獨(dú)立啟動(dòng)的,啟動(dòng)后會(huì)注冊自己并待命測試任務(wù),測試后會(huì)創(chuàng)建一個(gè)包含結(jié)果數(shù)據(jù)的znode。也是會(huì)fork多個(gè)子進(jìn)程(local client)。

用戶自定義的測試模塊

其中定義有生成和提交交易的function(返回值都是promise):

  • init:會(huì)在每輪測試前被client調(diào)用;
  • run:定義如何執(zhí)行交易。client會(huì)根據(jù)workload定義循環(huán)調(diào)用它;
  • end:每輪測試后被調(diào)用,通常定義一些清理工作。

擼一下源碼

還是基于上邊的架構(gòu)圖,這次從上往下捋。

首先是Benchmark Layer

從測試命令入手,以smallbank為例:

node benchmark/smallbank/main.js

測試用例位于benchmark/目錄下。由測試人員編寫,并配置到-c指定的配置文件的test.rounds[.callback]中。

main.js中主要是加載兩個(gè)配置文件,然后調(diào)用src/comm/bench-flow.jsrun方法,將兩個(gè)配置文件傳進(jìn)去:

    const framework = require('../../src/comm/bench-flow.js');
    framework.run(absConfigFile, absNetworkFile);

bench-flow.js可以認(rèn)為是測試引擎,run方法定義了完整的測試流程。

下邊是接口和核心層

接口即Blockchain NBIs,位于src/comm/blockchain-interface.js中的,其中的BlockchainInterface定義了區(qū)塊鏈的基本操作:

區(qū)塊鏈性能測試工具caliper

為了生成測試報(bào)告,首先必須有監(jiān)控來收集數(shù)據(jù),主要側(cè)重于對(duì)Docker和Process的監(jiān)控,代碼文件包括monitor-interface.jsmonitor-docker.jsmonitor-process.js。從名字可以看出是接口和兩個(gè)具體實(shí)現(xiàn),看一下接口定義了些啥:

區(qū)塊鏈性能測試工具caliper

除了啟停操作,主要側(cè)重于對(duì)CPU、內(nèi)存和網(wǎng)絡(luò)的監(jiān)控。

數(shù)據(jù)統(tǒng)計(jì)和報(bào)告生成功能位于src/comm/report.js

區(qū)塊鏈性能測試工具caliper

適配層

caliper支持對(duì)Fabric、Sawtooth等的測試,看架構(gòu)圖上還想對(duì)以太坊進(jìn)行支持,但是目前還沒有。

具體的適配代碼分別位于src/fabric、src/sawtoothsrc/iroha等目錄下,比如fabric.js中的Fabric類就繼承自BlockchainInterface,實(shí)現(xiàn)了初始化、安裝/執(zhí)行智能合約等功能。

區(qū)塊鏈性能測試工具caliper

這些功能內(nèi)部自然就是調(diào)用了fabric-client,所以測試前需要先進(jìn)行安裝:

npm install grpc@1.10.1 fabric-ca-client fabric-client
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI