1. 程式人生 > >Fabirc效能測試工具之Caliper介紹

Fabirc效能測試工具之Caliper介紹

Caliper介紹

Caliper是區塊鏈效能測試框架,使用者可以在定義好測試集的情況下針對自己的區塊鏈網路進行效能測試,獲取一系列的測試結果並生成測試報告。

當前支援的區塊鏈解決方案

當前支援的效能指標

  • 交易成功率
  • 交易吞吐量TPS
  • 交易延遲
  • 資源消耗(CPU/記憶體/網路IO)

架構

參見 Architecture introduction.
image.png

Adaptation Layer 介面卡層

Adaptation Layer 將現有的區塊鏈系統整合到Caliper框架中來,每一個介面卡都通過相應的區塊鏈的SDK或者RESTful API實現了對應的’Caliper Blockchain NBIs’

Interface&Core Layer 介面和核心層

Interface&Core Layer 實現了核心功能並提供了北向介面,包括了四種NBIs:

  • 區塊鏈操作介面:包括部署、呼叫智慧合約,查詢賬本資訊等。
  • 資源監控:包括對監控的啟停、獲取後臺區塊鏈系統的資源消耗狀態,包括CPU、記憶體、網路IO等等。目前有提供的有兩種監控,一種是監控本地和遠端的docker映象,另一種是監控本地程序。
  • 效能分析器::包括讀取預定義的效能統計定義(包括TPS、延遲、成功率等)並打印出結果。執行交易時將會記錄關鍵指標,比如建立時間、提交時間、交易結果等。
  • 報告生成器: 生成HTML格式的測試報告。

Benchmark Engine 基準引擎

image.png

Configuration File 配置檔案

主要有兩種配置檔案,一種是測試基準配置檔案,一種是區塊鏈網路拓撲配置檔案。
示例:

{
  "blockchain": {
    "type": "fabric",
    "config": "./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)"
  },
  "test": {
    "name": "simple",
    "description" : "This is an example benchmark for caliper",
    "clients": {
      "type": "local",
      "number": 5
    },
    "rounds": [{
        "label" : "open",
        "txNumber" : [5000, 5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}, {"type": "fixed-rate", "opts": {"tps" : 300}}],
        "arguments": {  "money": 10000 },
        "callback" : "benchmark/simple/open.js"
      },
      {
        "label" : "query",
        "txNumber" : [5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 300}}, {"type": "fixed-rate", "opts": {"tps" : 400}}],
        "callback" : "benchmark/simple/query.js"
      }]
  },
  "monitor": {
    "type": ["docker", "process"],
    "docker":{
      "name": ["peer0.org1.example.com", "http://192.168.1.100:2375/orderer.example.com"]
    },
    "process": [
      {
        "command" : "node",
        "arguments" : "local-client.js",
        "multiOutput" : "avg"
      }
    ],
    "interval": 1
  }
}
  • blockchain - 定義了使用什麼區塊鏈網路,並且指明使用的配置檔案。
  • command - 定義了在何時執行的操作。
    start: 測試開始時執行
    end: 測試完成後執行
  • test - 定義測試元資料。
    name&description: 測試名稱和簡介,生成報告時使用。
    clients:定義測試客戶端型別,目前有’local’ 和’zookeeper’兩種。‘local’ 模式採用本地程序來模擬客戶端請求。'zookeeper’模式則客戶端會分佈在不同的機器上,通過zookeeper的協調來獲取測試任務。
    hint:提示。主要用在報告生成中,表示呼叫的是什麼鏈碼。
    txNumber:每一輪的測試交易次數。
    txDuration:每一輪的測試時間。
    rateControl:客戶端請求的速率,未定義則預設為1TPS。
    trim:修剪測試統計結果,用於消除啟動和停止時測試的不準確性。比如trim設定為30,如果是按次數設定交易,則測試周期的前後30個交易資料不會被統計。如果是按照時間設定,則測試周期的前後30s的資料不會被統計。
    arguments:使用者定義的引數,直接透傳。
    callback:定義本輪測試中所呼叫的模組。
  • monitor - 定義監控的是本地程序還是docker映象。

Master

定義了三個預設的測試階段

  • 準備階段 - 根據區塊鏈配置檔案生成建立並例項化一個區塊鏈,安裝智慧合約並啟動監控器。
  • 測試階段 - master根據基準測試配置檔案啟動迴圈測試。client會獲取測試任務開始執行測試,並存儲測試結果以備後續分析。
  • 報告階段 - 每一輪測試結果會收集起來進行分析並自動生成HTML格式的測試報告。報告樣式如下:
    image.png

Clients

  • Local clients 會通過Node.js 啟動多個程序來進行測試,由於node.js是單程序的,測試會啟動多個子程序來工作,每個子程序相當於一個client。負載將會均勻的劃分到每個client中。
  • Zookeeper clients 多個zookeeper clients將會獨立啟動,並且監聽測試資訊,測試完畢以後會建立一個znode來記錄測試結果。每一個zookeeper client也會本地建立多個字程序來執行實際的測試工作。具體可以參考Zookeper Client Design.

User defined test module

定義了測試函式和以及提交交易,使用者可以在這裡自定義測試邏輯。
需要定義三個函式:

  • init - 在客戶端的每一輪測試之前呼叫,獲取區塊鏈資料以及使用者的配置資訊,使用者也可以定義一些其他的初始化資訊。
  • run - 使用API建立和提交實際的交易資訊。客戶端會週期性的呼叫此函式,建議一次只調用一個交易,採用非同步模式。如果一次呼叫多個交易的話,實際的測試測試負載情況會跟配置檔案裡定義的不同。
  • end - 會在每輪測試完成之後呼叫。使用者可以自己定義一些清理工作。

環境準備

  • NodeJS 8.X
  • node-gyp
  • Docker
  • Docker-compose
git clone https://github.com/hyperledger/caliper.git
cd caliper
npm install
npm install [email protected] [email protected] [email protected]

執行測試

node ./benchmark/simple/main.js -c ./config.json -n ./fabric.json

-c : 基準測試配置檔案, 如果不設定,預設使用 config.json .
-n : 賬本網路的配置檔案. 如果不設定, 預設使用 config.json中設定的 blockchain config值.
注:以上都是基於fabric v1.1版本
跑一個自帶的2org4peer的測試例子:

node benchmark/simple/main.js

成功生成報告則表明環境OK。