Help us understand the problem. What is going on with this article?

お財布に優しいCatapult 4000TPSチャレンジ (その1)

More than 1 year has passed since last update.

Catapult 4000TPSチャレンジについて

2018/02/18 追記
このチャレンジがプライベート・ネットワークでのテストであることを明記しました。

こんにちは。最近Blockchainの勉強を始めたインフラエンジニアの@hide825jpです。

皆さんは、NEMを使ってますか?私は全く使ったことがなかったのですが、先月開催された「NEMBOOT CAMP」に勉強がてら参加してきました。

NEM Bootcamp - Hello, Blockchain!

どのセッションも興味深いものでしたが、インフラエンジニアの私にとっては、@planethoukiさんの「Catapult 実験室『4,000トランザクション・チャレンジの報告と募集』」セッション、それにセッションの中で発表された4,000トランザクション・チャレンジ募集、これが、とても興味を引きました。

ということで、チャレンジに応募してみました。
Catapult 4000 TPSチャレンジ 応募フォーム

参考にさせて頂いたこと

4000トランザクション/秒というのは、ビットコインやイーサリアムとは桁が数桁違います。個人でそんな挑戦ができるんでしょうか。

ただ、すでに@planethoukiさんが挑戦された詳細な記事があり、その後@44uk_i3さんのチャレンジ記事もあり、正直軽い気持ちで応募したのですが、、、。

@planethoukiさんの記事を読んでいただくとお分かりのように、

Azure VMのF32s_v2インスタンス -> 月額 17万なり。。

これは検証で数日使っても、それなりの金額になりますね。私のお財布にはとても痛いです。やはり法人レベルでないと厳しいのでしょうか。

でも、がんばってみました。私のチャレンジの切り口は、

お財布に優しいにCatapult 4000TPSチャレンジ

で、やってみました。

検証は、@planethoukiさんの以下のスクリプトのお世話になっております。
https://github.com/planethouki/yonsen.git

今回の検証で異なる点は、@planethoukiさんのスクリプトでは、Catapultと負荷テストスクリプトが同じサーバで動くことになりますが、これは分離することにしました。コードの変更点は、ターゲットURLを「localhost」からCatapultサーバのIPに変更しただけです。

また、Catapultの構築は「catapult-service-bootstrap」を、そのまま使用しています。
https://github.com/tech-bureau/catapult-service-bootstrap

AWSでのチャレンジ

まずは、AWSで検証してみました。

構成図はこんな感じです。後で出てくるGCPもほぼ同じ構成です。負荷テスト用のサーバは、テストスクリプトが8スレッドで動くので、8コアの「c5.2xlarge」としてします。

これは、あくまでもVPC内でのテストです。
つまり、プライベート・ネットワークでのテストなります。GCPでのテストも同様です
スライド1.png
Catapultサーバのインスタンス・サイズは「c5.4xlarge」としました。
「c5.4xlarge」は「コンピューティング最適化 」の「現行世代」です。スペックはこんな感じです。

vCPUコア: 16
メモリ: 32GB
ストレージ: EBS
OS: Ubuntu 18.04LTS
そして、お値段は、東京リージョンで「0.856USD/時間」です。

なので、24時間x30日動かすと、

0.856 X 24 X 30 = 616.32 USD ≒ 6万8千円くらい

これに転送量やディスクへの課金、負荷テスト用のインスタンスの料金もかかります。
AzureのF32s_v2インスタンスより、だいぶ安くなりました。でも、まだまだ高いですね。

AWSでの結果

それで、前置きはいいとして、結果です。

トランザクション/秒 = 1 Blockのトランザクション数 ÷ そのBlockの生成時間

で、計算してます。

トランザクションの結果をPythonのpandasで整形して、matplotlibで表示するとこんな感です。

  • トランザクション数の結果 aws_cpu16_remote.png

cadvisor」 -> 「Prometheus」 -> 「Grafana」で、テスト時のCatapultサーバのDocker状況を表示すると、こんな感じになります。

  • 各DockerコンテナのCPU使用率
    スクリーンショット 2019-02-09 18.05.21.png

  • ネットワーク(受信)
    スクリーンショット 2019-02-09 18.05.35.png

  • ネットワーク(送信)
    スクリーンショット 2019-02-09 18.05.44.png

  • メモリ消費状況
    スクリーンショット 2019-02-09 18.05.50.png

瞬間的に4000トランザクション/秒を何度か越えてます。ただ、リソース使い切ってないですね。。。CPUコアはホスト側のCPUリソースと合わせても16コアは必要なさそうです。メモリは無駄に大きいだけですね。
ということで、「c5.4xlarge」のひとつ下「c5.2xlarge」(8コア)でも試したのですが、瞬間的に4000TPSがで出ても、Catapultの動作が不安定でデータが取り出せなかったりで、今回のチャレンジでは断念しました。

NEM素人でもすんなり4000トランザクション/秒を実現できるのは、やっぱりCatapultはすごいのかもしれません。でも、インフラ的にはまだ工夫の余地はありそうですね。

GCPでの仕切り直し

ということで、コア数の選択で融通の利く、GCPで再テストすることにしました。

結論から言うと、4000トランザクション/秒が出た一番スペックの低い単一インスタンスはこんな感です。

vCPUコア: 10
CPUプラットホーム Skylake以降
メモリ: 10GB (これは必須ではありません。9GB以上しか選択できなかったので)
OS: Ubuntu 18.04LTS

そして、東京リージョンでのお値段は、設定時のGCPコンソールの月間予測で「$235.76」でした。日本円にすると2万円後半といったところでしょうか。
でも、検証なので「プリエンプティブ」でもいいですね。「プリエンプティブ」をオンにした場合は、月額予測が「$73.58」と出ました。
https://cloud.google.com/preemptible-vms/?hl=ja

日本円で月額8千円台前半ですね !!!

それにGoogleさんがサーバを勝手に停止するので、この金額を下回ってくるはずです。

ところで、トランザクションの結果はこんな感じです。GCPでの負荷テストサーバも、AWSと同様にCPUを8コアとしました。
gxp-txt.png
また、リソース消費の状況はこんな感じです。

  • 各DockerコンテナのCPU使用率
    スクリーンショット 2019-02-16 20.25.38.png

  • ネットワーク(受信)
    スクリーンショット 2019-02-16 20.26.55.png

  • ネットワーク(送信)
    スクリーンショット 2019-02-16 20.25.45.png

  • メモリ消費状況
    スクリーンショット 2019-02-16 20.26.08.png

なんとか、4000トランザクションが出てますね。。。

最後に

最終的に自分のお財布で、なんとかなりそうな金額でチャレンジができました。

しかし、NEM素人の私ではつたない部分も多々あり、テスト手法については再検討が必要かと思います。特にテスト時の取引の中で、XEM残高をうまく調節するのが難しいようです。その他、改善すべき点は多数あり、より厳密な検証を後日やってみたいと思います。

いずれにしても、

チャレンジにかかる費用は工夫次第でだいぶ安くなりそう、

です。みなさんも挑戦してみてはいかかでしょうか。
  
  
  

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away