Hyperledger Caliperの使い方


本記事は古い内容になっています。最新版の使用方法についてこちらの記事を参照ください。

はじめに

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のレポートサンプル

ベンチマーク構成ファイルで指定可能な項目

  • clients

    • type : localとzookeeperの2つのタイプが指定できます。複数マシンでクライアントを動作させる場合はzookeeperを使用します。
  • txMode : トランザクションの生成モードを指定します。

    • real-time : トランザクションをその場で生成してすぐにバックエンドのブロックチェーンネットワークへ送信します。(デフォルト)
    • file-read file-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のサンプルとおぼしきものだが詳細未確認。

  1. CCP(Common Connection Profile)を使う場合と使わない場合が用意されています。CCPについてはこちらの記事で簡単にまとめています。