本記事は古い内容になっています。最新版の使用方法についてこちらの記事を参照ください。
はじめに
Hyperledgerは、Linux Foundationが推進するオープンソースのブロックチェーン基盤開発プロジェクトです。Hyperledgerプロジェクトでは、FabricやSawtooth、Burrowなど、複数のブロックチェーン基盤が開発されています。これらの実装の全く異なるブロックチェーン基盤を、同一のアプリケーション、同一のワークロードで統一的にベンチマークするためのフレームワークが、Hyperledger Caliperです。
対象のブロックチェーン基盤自体が絶賛開発中な上、Caliperも頻繁に仕様が変わっているように見受けられますが、簡単な使い方と何ができるかについてまとめたいと思います。
対応するブロックチェーン基盤
- Burrow
- Composer
- Fabric
- Fabric CCP1
- Iroha
- Sawtooth
使い方
前提
以下のソフトウェアを使用します。
- NodeJS 8, 9 or 10
- node-gyp
- Docker
- Docker-compose
インストール
$ git clone https://github.com/hyperledger/caliper.git
$ cd caliper
$ npm install
$ npm run repoclean
$ npm run bootstrap
現状、Caliperはnpmで公開されておらず、caliperというコマンドをインストールするには一手間かかるのですが、面倒なのでcaliperコマンドを使わずに実行します。コマンドをインストールしたい場合は、こちらをしてください。
$ cd packages/caliper-cli
$ node caliper.js benchmark run -w ../caliper-samples -c benchmark/simple/config.yaml -n network/fabric-v1.4/2org1peergoleveldb/fabric-node.json
各オプションの意味は以下の通りです。
-
-w: ワークスペースディレクトリのパス -
-c: ベンチマーク構成ファイルのワークスペースからの相対パス -
-n: ネットワーク構成ファイルのワークスペースからの相対パス
ベンチマーク構成ファイルでは、どういうワークロードでどれくらいの負荷をかけるかを指定し、ネットワーク構成ファイルでは評価対象のブロックチェーンネットワークを指定します。packages/caliper-samples内のbenchmarkディレクトリ、networkディレクトリのそれぞれにサンプルファイルがあります。
ネットワーク構成ファイルでは開始終了時に実行するコマンドを指定できるようになっており、各サンプルでは、そこでdocker-composeを使用して評価対象のブロックチェーンネットワークを起動するようになっています。
packages/caliper-samples内のbenchmarkディレクトリには、現在、以下のブロックチェーン基盤のサンプルファイルがあるので同じワークロードのまま、他のブロックチェーン基盤での性能を測ることができます。ただ、筆者が試したところ、基盤によっては負荷を大幅に抑えたベンチマーク構成ファイルを選ばないと完走しないものもありました。
- burrow
- fabric-{v1.0,v1.1,v1.2,v1.3,v1.4,v1.4.1}
- iroha
- sawtooth
実行が終わると、下記のようなHTML形式のレポートが出力され、スループットやレイテンシ、リソースの使用状況などを確認することができます。
[Hyperledger Caliperのレポートサンプル](caliper_report.png)
## ベンチマーク構成ファイルで指定可能な項目
-
clients-
type: localとzookeeperの2つのタイプが指定できます。複数マシンでクライアントを動作させる場合はzookeeperを使用します。
-
-
txMode: トランザクションの生成モードを指定します。-
real-time: トランザクションをその場で生成してすぐにバックエンドのブロックチェーンネットワークへ送信します。(デフォルト) -
file-readfile-write: file-writeモードで生成したトランザクションをファイルに保存しておき、file-readモードで当該ファイルを読んでワークロードを再現します。benchmark/simple/config-file.yamlなどにサンプルがあります。
-
-
rateControl-
fixed-rate: 指定されたレート(tps)でトランザクションを送信します。 -
fixed-feedback-rate: 未完了のトランザクションがある場合に、一時的にトランザクションの送信を止めながら、指定されたレートで実行します。
-
-
callback: ワークロード(アプリケーション)の処理が記述されたJavaScriptファイルを指定します。(例: 口座開設、残高照会) -
monitor: モニタリング対象のDockerコンテナなどを指定します。
パラメータの詳細はこちらを参照してください。
サンプルで用意されているワークロード
| ワークロード名 | 概要 |
|---|---|
| simple | 単純なGet/Putを行うワークロード。 |
| smallbank | 口座開設、預入れ、送金などを模したワークロード。 |
| marbles | Hyperledgerのサンプルにしばしば登場するおはじきのワークロード。 |
| drm | 著作権管理を模そうとしているようだが詳細未確認。 |
| composer | Hyperledger Composerのサンプルとおぼしきものだが詳細未確認。 |