スケーラビリティに優れたマイニングプールのサーバインフラ構成

今回の記事では、私が運営している Bitzeny マイニングプール Hoge Pool https://hogepool.net を事例として、スケーラビリティに優れた仮想通貨マイニングプールのサーバインフラ構成例を紹介しようと思います。Bitzeny って何?と思った方は、BitZeny Project をご覧下さい。

f:id:tsubuo:20180506234708p:plain
Hoge Pool トップページ

前提のはなし

Hoge Pool は、AWS 上に構築されたマイニングプールです。マイニングプールとは、簡単に言えば、複数の人がマイニング用の worker をもちよって(接続して)合同でマイニングを行い、得られた報酬を山分けするシステムです。非力な worker でも、継続的にマイニング報酬を得られるようにするための仕組みです。

Hoge Pool は 2018/5/8 現在マイニング worker 数 150 程度、ハッシュレートが 400 KH/s 程度(Bitzeny 全体の 2% 程度) で、控えめに言っても弱小プールの部類に入ります。

ですので、スケーラビリティといっても全く説得力がないのですが、クラウドを利用したマイニングプールのひとつの事例になればと思って筆をとりました。

現在普及しているマイニングプールサーバアプリケーションには主に 2 種類で、PHP で実装された MPOS と、Node で実装された NOMP がありますが、今回の記事では MPOS を動かすインフラを対象としています。しかし NOMP のインフラに対しても、今回の記事の内容が利用できると考えています。

github.com

github.com

MPOS をはじめとするマイニングプールに必要なミドルウェアのセットアップ方法についてはうさぎコイン発掘所 BitZeny Mining Pool - うさぎコイン発掘所 BitZeny版 - Home を運営されている間宮さんの記事が参考になりますので、興味がある方はご覧ください。

cryptomamiya.com

サーバインフラ構成

Hoge Pool は AWS を利用した以下のようなインフラ構成となっています。

f:id:tsubuo:20180506220932p:plain

主なコンポーネントとしては管理画面を表示する MPOS サーバ、ユーザのマイニングソフトと接続するための stratum サーバ、仮想通貨 Bitzeny の transaction、ブロックチェーンを管理する Bitzenyd サーバ、そして memcached サーバと DB サーバの5種類があります。

ポイントは stratum サーバの前にネットワークロードバランサを設置するという点になります。マイニングソフトとの通信は HTTP ではなく stratum という特殊な常時接続のプロトコルを使うためアプリケーションロードバランサは使えません。しかし、2017 年に AWS からリリースされたネットワークロードバランサを使用すると、メジャーでない常時接続なプロトコルであっても TCP であれば冗長化が可能です。

aws.amazon.com

2つめのポイントとしては Bitzenyd サーバの前にもロードバランサを設置し、冗長構成とする点になります。Bitzenyd サーバは再起動に 30 分程度時間がかかるという特徴がありますので、設定変更などで再起動が必要になった場合も長時間サービス停止させないために、冗長構成にするのがおすすめです。なお、Bitzenyd が管理しているブロックチェーンはもともと分散型のデータベースのような働きをするものですので、共通の秘密鍵を使用している限りは何も考えずに二台以上設置してもスプリットブレインのような事態は起こりません。

このような構成にしておくと、マイナーが増えて負荷が増えても、MPOS サーバ、 stratum サーバと Bitzenyd サーバーはロードバランサの下にサーバを増やすことによって、サービス無停止で、事実上無限にスケールさせることができます。

DB サーバについても、負荷が増えてきたら RDS のインスタンサイズ大きくすることで、スケールが可能です。 DB サーバは stratum サーバからの write が一番の負荷で、CPU 負荷は低いものの、メモリがネックになる傾向があります。RDS は現在はメモリ 244GB のサーバまで利用できます。よほどマイナーが増えない限りは問題ないでしょう。なお、Hoge Pool は 2018/5/6 現在 worker 数が 150 程度ですが、DB サーバのメモリ使用量は 1GB 程度です。

製品の詳細 - Amazon RDS for MySQL | AWS

multi-az 構成ならば、1分程度のダウンタイムでインスタンスサイズを変更させることができるのでおすすめです。予算が潤沢な場合は Amazon Aurora に乗り換えるのもいい選択肢でしょう。

なお、memcached サーバに関しても同様で、メモリ使用量が増えたらインスタンスサイズを変更することでスケールが可能です。もともとかなり負荷が低いので AWS が提供しているインスタンスサイズでボトルネックになるという事はそうそうないと思います。Hoge Pool では memcached のメモリを 100MB ほどしか使用していないので t2.micro で十分すぎるほどです。

料金 - Amazon ElastiCache(キャッシュ管理・操作)| AWS

サーバ代金について

役割ごとにサーバを分けたり、冗長構成にしている分、VPS のサーバ1台でマイニングプールを運営する場合と比較すると、かなり高額になります。 Hoge Pool ではがんばって節約して 200 USD/month ぐらい。利用して頂いているマイナーの方々から少々の手数料を頂いていますが、現在の Bitzeny の価格レート (約3円/ZNY) だと毎月超赤字。 Bitzeny の価格が上がることを祈っていますマジで。

今回紹介したようなサーバ構成は、worker 数が 1000 を超えるようなマイニングプールになって始めてペイ出来るようなものだと思います。 正直なところ、worker 数 150 程度だと、CPU 2 コアメモリ 4G の VPS で運営するのが負荷や費用の面でバランスがとれていると感じています。 まあ,Hoge Pool は赤字でもこのまま地道に運営していこうかと思っていますが.

まとめ

Hoge Pool https://hogepool.net 是非利用してください。

Bitzeny 関連ページ

Bitzeny 公式 Links に関連サイト、サービスの紹介があります。

bitzeny.tech

これからマイニングを始めようと考えている方向け記事

ogurabread.hatenablog.com cryptomamiya.com