Caliper介紹
Caliper是區(qū)塊鏈性能測試框架蝌以,用戶可以在定義好測試集的情況下針對自己的區(qū)塊鏈網(wǎng)絡進行性能測試,獲取一系列的測試結果并生成測試報告趋箩。
當前支持的區(qū)塊鏈解決方案
- fabric v1.0+, 最新支持版本為v1.1.0
- sawtooth 1.0+
- Iroha 1.0 beta-3
- 同時支持Hyperledger Composer 可以參見 Composer Performance Test.
當前支持的性能指標
- 交易成功率
- 交易吞吐量TPS
- 交易延遲
- 資源消耗(CPU/內存/網(wǎng)絡IO)
架構
image.png
Adaptation Layer 適配器層
Adaptation Layer 將現(xiàn)有的區(qū)塊鏈系統(tǒng)集成到Caliper框架中來铃拇,每一個適配器都通過相應的區(qū)塊鏈的SDK或者RESTful API實現(xiàn)了對應的'Caliper Blockchain NBIs'
Interface&Core Layer 接口和核心層
Interface&Core Layer 實現(xiàn)了核心功能并提供了北向接口通危,包括了四種NBIs:
- 區(qū)塊鏈操作接口:包括部署、調用智能合約蜈垮,查詢賬本信息等耗跛。
- 資源監(jiān)控:包括對監(jiān)控的啟停、獲取后臺區(qū)塊鏈系統(tǒng)的資源消耗狀態(tài)攒发,包括CPU调塌、內存、網(wǎng)絡IO等等惠猿。目前有提供的有兩種監(jiān)控羔砾,一種是監(jiān)控本地和遠程的docker鏡像,另一種是監(jiān)控本地進程偶妖。
- 性能分析器::包括讀取預定義的性能統(tǒng)計定義(包括TPS姜凄、延遲、成功率等)并打印出結果趾访。執(zhí)行交易時將會記錄關鍵指標态秧,比如創(chuàng)建時間、提交時間扼鞋、交易結果等申鱼。
- 報告生成器: 生成HTML格式的測試報告空扎。
Benchmark Engine 基準引擎
image.png
Configuration File 配置文件
主要有兩種配置文件,一種是測試基準配置文件润讥,一種是區(qū)塊鏈網(wǎng)絡拓撲配置文件转锈。
示例:
{
"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 - 定義了使用什么區(qū)塊鏈網(wǎng)絡,并且指明使用的配置文件楚殿。
-
command - 定義了在何時執(zhí)行的操作撮慨。
start: 測試開始時執(zhí)行
end: 測試完成后執(zhí)行 -
test - 定義測試元數(shù)據(jù)。
name&description: 測試名稱和簡介脆粥,生成報告時使用砌溺。
clients:定義測試客戶端類型,目前有'local' 和'zookeeper'兩種变隔。'local' 模式采用本地進程來模擬客戶端請求规伐。'zookeeper'模式則客戶端會分布在不同的機器上,通過zookeeper的協(xié)調來獲取測試任務匣缘。
hint:提示猖闪。主要用在報告生成中,表示調用的是什么鏈碼肌厨。
txNumber:每一輪的測試交易次數(shù)培慌。
txDuration:每一輪的測試時間。
rateControl:客戶端請求的速率柑爸,未定義則默認為1TPS吵护。
trim:修剪測試統(tǒng)計結果,用于消除啟動和停止時測試的不準確性表鳍。比如trim設置為30馅而,如果是按次數(shù)設置交易,則測試周期的前后30個交易數(shù)據(jù)不會被統(tǒng)計譬圣。如果是按照時間設置瓮恭,則測試周期的前后30s的數(shù)據(jù)不會被統(tǒng)計。
arguments:用戶定義的參數(shù)胁镐,直接透傳偎血。
callback:定義本輪測試中所調用的模塊。 - monitor - 定義監(jiān)控的是本地進程還是docker鏡像盯漂。
Master
定義了三個默認的測試階段
- 準備階段 - 根據(jù)區(qū)塊鏈配置文件生成創(chuàng)建并實例化一個區(qū)塊鏈颇玷,安裝智能合約并啟動監(jiān)控器。
- 測試階段 - master根據(jù)基準測試配置文件啟動循環(huán)測試就缆。client會獲取測試任務開始執(zhí)行測試帖渠,并存儲測試結果以備后續(xù)分析。
-
報告階段 - 每一輪測試結果會收集起來進行分析并自動生成HTML格式的測試報告竭宰。報告樣式如下:
image.png
Clients
- Local clients 會通過Node.js 啟動多個進程來進行測試空郊,由于node.js是單進程的份招,測試會啟動多個子進程來工作,每個子進程相當于一個client狞甚。負載將會均勻的劃分到每個client中锁摔。
- Zookeeper clients 多個zookeeper clients將會獨立啟動,并且監(jiān)聽測試信息哼审,測試完畢以后會創(chuàng)建一個znode來記錄測試結果谐腰。每一個zookeeper client也會本地創(chuàng)建多個字進程來執(zhí)行實際的測試工作。具體可以參考Zookeper Client Design.
User defined test module
定義了測試函數(shù)和以及提交交易涩盾,用戶可以在這里自定義測試邏輯十气。
需要定義三個函數(shù):
- init - 在客戶端的每一輪測試之前調用,獲取區(qū)塊鏈數(shù)據(jù)以及用戶的配置信息春霍,用戶也可以定義一些其他的初始化信息砸西。
- run - 使用API創(chuàng)建和提交實際的交易信息≈啡澹客戶端會周期性的調用此函數(shù)芹枷,建議一次只調用一個交易,采用異步模式离福。如果一次調用多個交易的話杖狼,實際的測試測試負載情況會跟配置文件里定義的不同。
- end - 會在每輪測試完成之后調用妖爷。用戶可以自己定義一些清理工作。
環(huán)境準備
- NodeJS 8.X
- node-gyp
- Docker
- Docker-compose
git clone https://github.com/hyperledger/caliper.git
cd caliper
npm install
npm install grpc@1.10.1 fabric-ca-client@1.1.0 fabric-client@1.1.0
執(zhí)行測試
node ./benchmark/simple/main.js -c ./config.json -n ./fabric.json
-c : 基準測試配置文件, 如果不設置理朋,默認使用 config.json .
-n : 賬本網(wǎng)絡的配置文件. 如果不設置, 默認使用 config.json中設置的 blockchain config值.
注:以上都是基于fabric v1.1版本
跑一個自帶的2org4peer的測試例子:
node benchmark/smallbank/main.js
成功生成報告則表明環(huán)境OK絮识。