Hyperledger Caliper:測(cè)量區(qū)塊鏈性能的工具
Hyperleder Caliper。Caliper項(xiàng)目最初于2017年5月啟動(dòng),全球信息與通信技術(shù)公司華為積極參與了該項(xiàng)目的設(shè)計(jì)和開(kāi)發(fā)。Hyperledger Caliper是一個(gè)區(qū)塊鏈基準(zhǔn)測(cè)試工具,讓項(xiàng)目可以不間斷地跟蹤不同區(qū)塊鏈實(shí)現(xiàn)的性能特性。Hyperledger Caliper初始版本的重點(diǎn)是每秒事務(wù)數(shù)(TPS)、延遲和資源利用率。
區(qū)塊鏈技術(shù)日益受到人們的關(guān)注,但是,你在為業(yè)務(wù)問(wèn)題創(chuàng)建解決方案之前,卻無(wú)法測(cè)試各種可用區(qū)塊鏈平臺(tái)的性能。為了解決這一痛點(diǎn),Hyperledger社區(qū)提供了一個(gè)名為“Hyperledger Caliper”的工具,可用來(lái)測(cè)試區(qū)塊鏈平臺(tái)的性能。
Hyperledger Caliper
Caliper是一個(gè)區(qū)塊鏈性能基準(zhǔn)測(cè)試框架,它允許用戶使用預(yù)定義的用例測(cè)試不同的區(qū)塊鏈解決方案,并獲得一組性能測(cè)試結(jié)果。
目前支持的性能指標(biāo):
成功率
事務(wù)吞吐量
事務(wù)延遲(最小值、最大值、平均值、百分比)
資源消耗(CPU、內(nèi)存、網(wǎng)絡(luò)IO等)
架構(gòu)
適配層
使用適配層將現(xiàn)有的區(qū)塊鏈系統(tǒng)集成到Caliper框架中。每個(gè)適配器通過(guò)使用相應(yīng)的區(qū)塊鏈的原生SDK或RESTful API來(lái)實(shí)現(xiàn)區(qū)塊鏈的Caliper NBI。
接口和核心層
接口和核心層實(shí)現(xiàn)核心功能,并為上行應(yīng)用程序(up-applications)提供了北向接口,共四種NBI:
1.區(qū)塊鏈操作接口:包含在后端區(qū)塊鏈上部署智能合約、調(diào)用合約、從分類(lèi)賬查詢狀態(tài)等操作。
2.資源監(jiān)控器:包含啟動(dòng)、停止監(jiān)控器和獲取后端區(qū)塊鏈系統(tǒng)的資源消耗狀態(tài)的操作,包括CPU、內(nèi)存、網(wǎng)絡(luò)IO等。目前提供了兩種監(jiān)控器,一種是監(jiān)控本地和遠(yuǎn)程docker容器,另一種是監(jiān)控本地進(jìn)程。
3.性能分析器:包含讀取預(yù)定義性能統(tǒng)計(jì)數(shù)據(jù)(包括TPS、延遲、成功率等)和打印基準(zhǔn)測(cè)試結(jié)果的操作。在調(diào)用區(qū)塊鏈NBI時(shí)記錄關(guān)鍵指標(biāo),例如事務(wù)的創(chuàng)建時(shí)間和提交時(shí)間、事務(wù)結(jié)果等。
4.報(bào)告生成器:包含用于生成HTML格式測(cè)試報(bào)告的操作。
應(yīng)用層
應(yīng)用層包含針對(duì)典型區(qū)塊鏈場(chǎng)景實(shí)現(xiàn)的測(cè)試。每個(gè)測(cè)試都有一個(gè)配置文件,用于定義后端區(qū)塊鏈網(wǎng)絡(luò)和測(cè)試參數(shù)。
內(nèi)置了一個(gè)默認(rèn)基準(zhǔn)測(cè)試引擎,用來(lái)幫助開(kāi)發(fā)人員理解框架,并快速實(shí)現(xiàn)自己的測(cè)試。開(kāi)發(fā)人員可以在沒(méi)有框架的情況下直接使用NBI來(lái)實(shí)現(xiàn)他們的測(cè)試。
基準(zhǔn)測(cè)試引擎:
Master:
Master實(shí)現(xiàn)了一個(gè)包含三個(gè)階段的默認(rèn)測(cè)試流:
1. 準(zhǔn)備階段:在此階段,Master使用區(qū)塊鏈配置文件創(chuàng)建并初始化內(nèi)部區(qū)塊鏈對(duì)象,按照配置中指定的方式部署智能合約,并啟動(dòng)監(jiān)控器對(duì)象來(lái)監(jiān)控后端區(qū)塊鏈系統(tǒng)的資源消耗。
2. 測(cè)試階段: Master根據(jù)基準(zhǔn)測(cè)試配置文件啟動(dòng)一個(gè)循環(huán)測(cè)試、來(lái)執(zhí)行測(cè)試。任務(wù)將根據(jù)定義的工作負(fù)載生成并分配給Client。將存儲(chǔ)客戶的性能統(tǒng)計(jì)返回,以供以后分析。
3. 報(bào)告階段:分析每一輪測(cè)試的所有客戶端統(tǒng)計(jì)數(shù)據(jù),并自動(dòng)生成HTML格式報(bào)告。
Client:
Local Client:
在這種模式下,Master使用Node.js集群模塊分叉多個(gè)Local Client來(lái)進(jìn)行實(shí)際的測(cè)試工作。
Zookeeper Client:
在這種模式下,多個(gè)Zookeeper Client獨(dú)立啟動(dòng)。Zookeeper客戶端將在啟動(dòng)后注冊(cè)并監(jiān)控測(cè)試任務(wù)。測(cè)試之后,將創(chuàng)建一個(gè)包含性能統(tǒng)計(jì)結(jié)果的znode。
Caliper示例報(bào)表格式:
配置文件:
使用兩種配置文件。一個(gè)是基準(zhǔn)測(cè)試配置文件,它定義了類(lèi)似工作負(fù)載的基準(zhǔn)測(cè)試。
另一個(gè)是區(qū)塊鏈配置文件,它指定了有助與SUT交互的必要信息。
下面是一個(gè)基準(zhǔn)測(cè)試配置文件示例:
先決條件:
· 確保已經(jīng)安裝下列工具:
· NodeJS 8.X
· node-gyp
· Docker
· Docker-compose
git clone https://github.com/hyperledger/caliper.git
要在本地安裝依賴(lài)項(xiàng),請(qǐng)?jiān)赾aliper文件夾中運(yùn)行npm install。
安裝區(qū)塊鏈SDK:
Fabic
在根文件夾中運(yùn)行:
npm install grpc@1.10.1 fabric-ca-client fabric-client
Sawtooth
安裝依賴(lài)項(xiàng):
npm install protocol-buffers
使用存儲(chǔ)庫(kù)安裝sawtooth JavaScript SDK。
run npm install sawtooth-sdk in the root folder
在根文件夾中運(yùn)行:
npm install sawtooth-sdk
Iroha
安裝Iroha庫(kù)
在Caliper的根文件夾中運(yùn)行:
npm install -no-save iroha-lib@0.1.7
Composer
安裝依賴(lài)項(xiàng):
更新主package.json文件,包含所需的Composer和Fabic模塊,然后運(yùn)行npm install來(lái)安裝。
運(yùn)行基準(zhǔn)測(cè)試:
在基準(zhǔn)測(cè)試文件夾中,可以找到所有預(yù)定義的基準(zhǔn)測(cè)試。
要開(kāi)始基準(zhǔn)測(cè)試,只需在根文件夾中運(yùn)行它即可:
node benchmark/simple/main.js -c yourconfig.json -n yournetwork.json
參數(shù)-c:指定基準(zhǔn)測(cè)試的配置文件。如果不指定此參數(shù),則config.json將用作默認(rèn)值。
參數(shù)-n:指定被測(cè)區(qū)塊鏈網(wǎng)絡(luò)的配置文件。如果不指定此參數(shù),則在基準(zhǔn)測(cè)試配置文件中指定文件地址。
注意:
·你還可以使用npm腳本來(lái)運(yùn)行基準(zhǔn)測(cè)試。
npm運(yùn)行列表:
》 caliper@0.1.0 list /home/hurf/caliper
》 node 。/scripts/list.js
可用基準(zhǔn)測(cè)試:
drm
simple
使用特定配置文件來(lái)運(yùn)行基準(zhǔn)測(cè)試:
npm test?—?— simple -c 。/benchmark/simple/config.json -n./benchmark/simple/fabric.json
》 caliper@0.1.0 test /home/hurf/caliper
》 node 。/scripts/test.js “simple” “-c” “。/benchmark/simple/config.json” “-n” “。/benchmark/simple/fabric.json”
。..。..
使用去中心化Client進(jìn)行基準(zhǔn)測(cè)試:
1. 啟動(dòng)ZooKeeper服務(wù);
2. 通過(guò)運(yùn)行節(jié)點(diǎn)。/src/comm/client/zoo-client.js zookeeper-server或npm run startclient?—?— zookeeper-server分別在目標(biāo)計(jì)算機(jī)上啟動(dòng)Client。
例如:
$ npm run startclient?—?10.229.42.159:2181
》 caliper@0.1.0 startclient /home/hurf/caliper
》 node 。/src/comm/client/zoo-client.js “10.229.42.159:2181”
Connected to ZooKeeper
Created client node:/caliper/clients/client_1514532063571_0000000006
Created receiving queue at:/caliper/client_1514532063571_0000000006_in
Created sending queue at:/caliper/client_1514532063571_0000000006_out
Waiting for messages at:/caliper/client_1514532063571_0000000006_in.。..。.
3. 將配置文件中的Client類(lèi)型設(shè)置修改為zookeeper。
例如:
“clients”: {
“type”: “zookeeper”,
“zoo” : {
“server”: “10.229.42.159:2181”,
“clientsPerHost”: 5
}
}
4. 像往常一樣,在任何機(jī)器上啟動(dòng)基準(zhǔn)測(cè)試。
注意:
· Zookeeper用于注冊(cè)Client和交換信息。啟動(dòng)的Client將在/caliper/clients/下添加新的znode?;鶞?zhǔn)測(cè)試檢查目錄以了解有多少Client,并根據(jù)工作負(fù)載為每個(gè)Client分配任務(wù)。
· Client之間沒(méi)有自動(dòng)時(shí)間同步。你應(yīng)該手動(dòng)同步目標(biāo)計(jì)算機(jī)之間的時(shí)間,例如使用“ntpdate”命令。
· 區(qū)塊鏈配置文件必須存在于運(yùn)行Client的計(jì)算機(jī)上,且文件的相對(duì)路徑(相對(duì)于caliper文件夾)必須相同。配置中的所有引用文件也必須存在。
編寫(xiě)你自己的基準(zhǔn)測(cè)試
Caliper提供了一組nodejs NBI(北向接口),供應(yīng)用程序與后端區(qū)塊鏈系統(tǒng)交互。查看src/comm/blockchain.js來(lái)了解NBI。多重適配器實(shí)現(xiàn)將NBI轉(zhuǎn)換為不同的區(qū)塊鏈協(xié)議。因此,開(kāi)發(fā)人員可以編寫(xiě)一次基準(zhǔn)測(cè)試,并在不同的區(qū)塊鏈系統(tǒng)中運(yùn)行它。
一般來(lái)說(shuō),要編寫(xiě)一個(gè)新的caliper基準(zhǔn)測(cè)試,你需要:
· 為想要測(cè)試的系統(tǒng)編寫(xiě)智能合約
· 使用caliper NBI編寫(xiě)一個(gè)測(cè)試流。Caliper提供了一個(gè)默認(rèn)的基準(zhǔn)測(cè)試引擎,它可以插拔并可配置,可以輕松地集成新的測(cè)試。有關(guān)更多的詳細(xì)信息,請(qǐng)參閱基準(zhǔn)測(cè)試引擎。
· 編寫(xiě)配置文件來(lái)定義后端網(wǎng)絡(luò)和基準(zhǔn)測(cè)試參數(shù)。
評(píng)論