Hyperledger Caliper:測量區塊鏈效能的工具
導讀:作者Ashish,喜歡研究區塊鏈、密碼學和計算機網路。這次他給我們介紹了測量區塊鏈效能的工具:Hyperleder Caliper。Caliper專案最初於2017年5月啟動,全球資訊與通訊技術公司華為積極參與了該專案的設計和開發。Hyperledger Caliper是一個區塊鏈基準測試工具,讓專案可以不間斷地跟蹤不同區塊鏈實現的效能特性。Hyperledger Caliper初始版本的重點是每秒事務數(TPS)、延遲和資源利用率。
區塊鏈技術日益受到人們的關注,但是,你在為業務問題建立解決方案之前,卻無法測試各種可用區塊鏈平臺的效能。為了解決這一痛點,Hyperledger社群提供了一個名為“Hyperledger Caliper”的工具,可用來測試區塊鏈平臺的效能。
Hyperledger Caliper
Caliper是一個區塊鏈效能基準測試框架,它允許使用者使用預定義的用例測試不同的區塊鏈解決方案,並獲得一組效能測試結果。
目前支援的效能指標:
架構
適配層
使用適配層將現有的區塊鏈系統整合到Caliper框架中。每個介面卡通過使用相應的區塊鏈的原生SDK或RESTful API來實現區塊鏈的Caliper NBI。
介面和核心層
介面和核心層實現核心功能,併為上行應用程式(up-applications)提供了北向介面,共四種NBI:
- 區塊鏈操作介面: 包含在後端區塊鏈上部署智慧合約、呼叫合約、從分類賬查詢狀態等操作。
- 資源監控器: 包含啟動、停止監控器和獲取後端區塊鏈系統的資源消耗狀態的操作,包括CPU、記憶體、網路IO等。目前提供了兩種監控器,一種是監控本地和遠端docker容器,另一種是監控本地程序。
- 效能分析器: 包含讀取預定義效能統計資料(包括TPS、延遲、成功率等)和列印基準測試結果的操作。在呼叫區塊鏈NBI時記錄關鍵指標,例如事務的建立時間和提交時間、事務結果等。
- 報告生成器: 包含用於生成HTML格式測試報告的操作。
應用層
應用層包含針對典型區塊鏈場景實現的測試。每個測試都有一個配置檔案,用於定義後端區塊鏈網路和測試引數。
內建了一個預設基準測試引擎,用來幫助開發人員理解框架,並快速實現自己的測試。開發人員可以在沒有框架的情況下直接使用NBI來實現他們的測試。
基準測試引擎:
Master:
Master實現了一個包含三個階段的預設測試流:
- 準備階段: 在此階段,Master使用區塊鏈配置檔案建立並初始化內部區塊鏈物件,按照配置中指定的方式部署智慧合約,並啟動監控器物件來監控後端區塊鏈系統的資源消耗。
- 測試階段: Master根據基準測試配置檔案啟動一個迴圈測試、來執行測試。任務將根據定義的工作負載生成並分配給Client。將儲存客戶的效能統計返回,以供以後分析。
- 報告階段: 分析每一輪測試的所有客戶端統計資料,並自動生成HTML格式報告。
Client:
Local Client:
在這種模式下,Master使用Node.js叢集模組分叉多個Local Client來進行實際的測試工作。
Zookeeper Client:
在這種模式下,多個Zookeeper Client獨立啟動。Zookeeper客戶端將在啟動後註冊並監控測試任務。測試之後,將建立一個包含效能統計結果的znode。
Caliper示例報表格式:
配置檔案:
使用兩種配置檔案。一個是基準測試配置檔案,它定義了類似工作負載的基準測試。
另一個是區塊鏈配置檔案,它指定了有助與SUT互動的必要資訊。
下面是一個基準測試配置檔案示例:
先決條件:
-
確保已經安裝下列工具:
- NodeJS 8.X
- node-gyp
- Docker
- Docker-compose
git clone https://github.com/hyperledger/caliper.git
要在本地安裝依賴項,請在caliper資料夾中執行npm install。
安裝區塊鏈SDK:
Fabic
在根資料夾中執行:
npm install [email protected] fabric-ca-client fabric-client
Sawtooth
安裝依賴項:
npm install protocol-buffers
使用儲存庫安裝sawtooth JavaScript SDK。
run npm install sawtooth-sdkin the root folder
在根資料夾中執行:
npm install sawtooth-sdk
Iroha
安裝Iroha庫
在Caliper的根資料夾中執行:
npm install -no-save [email protected]
Composer/">Composer
安裝依賴項:
更新主package.json檔案,包含所需的Composer和Fabic模組,然後執行npm install來安裝。
執行基準測試:
在基準測試資料夾中,可以找到所有預定義的基準測試。
要開始基準測試,只需在根資料夾中執行它即可:
node benchmark/simple/main.js -c yourconfig.json -n yournetwork.json
引數-c:指定基準測試的配置檔案。如果不指定此引數,則config.json將用作預設值。
引數-n:指定被測區塊鏈網路的配置檔案。如果不指定此引數,則在基準測試配置檔案中指定檔案地址。
注意:
- 你還可以使用npm指令碼來執行基準測試。
npm執行列表:
> [email protected] list /home/hurf/caliper > node ./scripts/list.js
可用基準測試:
drm simple
使用特定配置檔案來執行基準測試:
npm test — — simple -c ./benchmark/simple/config.json -n ./benchmark/simple/fabric.json
> [email protected] test /home/hurf/caliper > node ./scripts/test.js "simple" "-c" "./benchmark/simple/config.json" "-n" "./benchmark/simple/fabric.json" ......
使用去中心化Client進行基準測試:
1. 啟動ZooKeeper服務;
2. 通過執行節點./src/comm/client/zoo-client.js zookeeper-server或npm run startclient — — zookeeper-server分別在目標計算機上啟動Client。
例如:
$ npm run startclient — 10.229.42.159:2181
> [email protected] 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型別設定修改為zookeeper。
例如:
"clients": { "type": "zookeeper", "zoo" : { "server": "10.229.42.159:2181", "clientsPerHost": 5 } }
4. 像往常一樣,在任何機器上啟動基準測試。
注意:
- Zookeeper用於註冊Client和交換資訊。啟動的Client將在/caliper/clients/下新增新的znode。基準測試檢查目錄以瞭解有多少Client,並根據工作負載為每個Client分配任務。
- Client之間沒有自動時間同步。你應該手動同步目標計算機之間的時間,例如使用“ntpdate”命令。
- 區塊鏈配置檔案必須存在於執行Client的計算機上,且檔案的相對路徑(相對於caliper資料夾)必須相同。配置中的所有引用檔案也必須存在。
編寫你自己的基準測試
Caliper提供了一組nodejs NBI(北向介面),供應用程式與後端區塊鏈系統互動。檢視src/comm/blockchain.js
來了解NBI。多重介面卡實現將NBI轉換為不同的區塊鏈協議。因此,開發人員可以編寫一次基準測試,並在不同的區塊鏈系統中執行它。
一般來說,要編寫一個新的caliper基準測試,你需要:
- 為想要測試的系統編寫智慧合約
- 使用caliper NBI編寫一個測試流。Caliper提供了一個預設的基準測試引擎,它可以插拔並可配置,可以輕鬆地整合新的測試。有關更多的詳細資訊,請參閱基準測試引擎。
- 編寫配置檔案來定義後端網路和基準測試引數。
參考:ofollow,noindex" target="_blank">https://github.com/hyperledger/caliper
感謝杜小芳對本文的審校。