メインコンテンツへスキップ

ArcBlockがブロックチェーンフレームワークの構築にBEAMを採用する理由

Tyr Chen (VP of Engineering, ArcBlock)
ArcBlockArcBlock Users OnlyBlockchainForgeForge Framework

著者: Tyr Chen(ArcBlock エンジニアリング担当VP)

ArcBlockとは何者で、なぜBEAMを愛用しているのでしょうか?

ArcBlockは、ブロックチェーンの複雑さを取り除き、日常生活への普及を加速することを目指しています。そのために、開発者が分散型アプリケーション(dApp)を簡単に構築、実行、デプロイするために必要なものをすべて提供する、包括的なブロックチェーン開発プラットフォームを開発しました。その中核にあるのがBEAM VMです。ArcBlockはErlangエコシステムを強く信頼し支援しており、Erlang Ecosystem Foundationに創設スポンサーとして参加しました。このゲストブログでは、ArcBlockのエンジニアリング担当VPであるTyr Chenが、BEAM VMを高く評価する理由と、dAppを構築したい人にとって中核技術として採用する利点を紹介します。

BEAMとブロックチェーンの紹介

Erlangは、高可用性、耐障害性、拡張性を備えたソフトリアルタイムシステムを構築するのに最適なプログラミング言語の一つです。BEAMはその仮想マシンであり、私たちから見れば縁の下の力持ちです。BEAMの利点は、Elixirを含むVM上で動作する他の言語にも及びます。どの高水準プログラミング言語を使っていても、最終的にはすべてBEAM上で動きます。極めて重要な99.9999999%の可用性を実現する助けとなるのが、この不可欠な技術です。

現在、BEAMは世界のインターネットルーターの半数以上を支えており、その実績だけでも十分な裏付けになると考えています。以下では、BEAMがブロックチェーン構築に最適である理由をいくつか紹介します。

ネットワークコンセンサス

分散型アプリケーション(dApps)を構築する重要な要素としてBEAMを採用する決断は容易でした。まず、ブロックチェーンと分散型アプリケーションでは、ネットワーク内のすべてのノードで一貫した状態を実現する必要があります。私たちは状態複製エンジン(コンセンサスエンジンとも呼ばれます)を使ってこれを実現します。コンセンサスは、ブロックチェーン台帳に追加される情報が有効であることを保証する重要な仕組みです。ネットワークのノードが情報に合意し、コンセンサスが成立すると、データを台帳へ追加できます。状態複製エンジンには複数の選択肢があり、現在私たちのプラットフォームではTendermintを採用しています。

BEAM + dApps

コンセンサスエンジンに加え、BEAMは分散型アプリケーションに不可欠なその他の要件も満たす最適なソリューションです。私たちの開発フレームワークで分散型アプリケーションを動かすには、アプリケーション状態を保存する組み込みデータベースと、ブロックチェーンデータ用のインデックスデータベースが必要です。同時に、ブロックチェーンノードはネットワーク上のピアを監視し、次のデータブロックに「投票」できなければなりません。これらの要件を満たすには、システムが常に応答可能で利用できる必要があります。

継続的な応答性に加え、CPU負荷の高いタスクも考慮する必要があります。特に、CPU集約型タスクに遭遇しても、ブロックチェーンプラットフォームとサービスが停止してはなりません。システムが応答不能になれば、壊滅的なエラーにつながる可能性があります。

ホットコードリローディング

BEAMのスケジューラーに加えて、私たちが気に入っているもう一つの機能がホットコードリローディングです。BEAMを停止することなく、ほぼあらゆる変更をその場で行えます。たとえば私たちのブロックチェーンアプリケーションプラットフォームには、開発者が機能豊富な分散型アプリケーションを作るために利用できる、多数のスマートコントラクトが同梱されています。しかしブロックチェーンは分散ネットワークであるため、すべてのノードが同じように動作することを保証しなければなりません。

多くの場合、開発者は最新ソフトウェアを有効にするためノードを更新して再起動する必要があり、問題や不要なダウンタイムが発生します。ArcBlockではBEAMのホットコードリローディングを利用し、ネットワーク全体のノードでスマートコントラクトを即座に有効化・無効化できます。指定時刻にソフトウェアをアップグレードするようシステムへ指示するトランザクションを送るだけです。その時刻になるとArcBlockがBEAMに新しいコードをインストールするよう指示し、ネットワーク内のすべてのノードで最新機能が利用可能になります。

速度は相対的

BEAMは「アクターモデル」で現実世界を模倣し、すべてがイミュータブルです。そのため、状態をロックして競合状態を防ぐ必要がありません。もちろん、あらゆるものにはコストがあります。BEAMにおけるイミュータビリティの簡潔さと美しさは、処理速度の低下につながる可能性があります。ArcBlockはこの遅延を抑えるため、状態管理用Merkle-PatriciaツリーなどのCPU集約型タスクでRustを活用しています。さらにBEAMは、Rustを使って外部と容易に連携し、性能をもう一段引き上げる方法を提供することで、その価値を示しています。

ガベージコレクション

名前に惑わされてはいけません。ガベージコレクションは極めて重要です。Erlangは、トレーシング方式のガベージコレクションを備えた動的メモリを使用します。各プロセスは独自のスタックとヒープを持ち、同じメモリブロック内に割り当てられて互いに向かって成長します。スタックとヒープが接するとガベージコレクターが起動し、メモリが回収されます。

少し技術的な説明ですが、BEAMのガベージコレクションはプロセス単位で行われるため、「世界を止めてゴミを片付ける」タイプの処理は決して発生しません。その代わり、各プロセスは中断することなく実行を続けられます。

OTP

最後に、ErlangはOTPという開発スイートを提供しており、開発者はBEAMの世界で確立されたベストプラクティスを簡単に利用できます。企業向けまたはブロックチェーンのアプリケーションプラットフォームでは業界標準に基づく設計が必須であり、OTPを使えばBEAMが開発者に提供するあらゆる利点を活用したコードを容易に書けます。

耐障害性

これを最後に紹介したのには理由があります。ArcBlockがBEAMで最も頼りにしている機能であり、ブロックチェーン分野でBEAMを多くの競合技術より優れたものにしているからです。数万件のトランザクションが同時に発生していても、システムの一部で起きたエラーがノード全体に影響することはありません。エラーは自己修復され、ノードは不正な動作や特定の攻撃に耐えられます。ユーザーにサービスを提供する人や本番アプリケーションを支える人にとって、これは不可欠な機能です。耐障害性を標準で備えることで、ArcBlockプラットフォーム上で動くすべてのサービスをオンラインかつ利用可能な状態に保てます。

BEAMは何年も前に設計されたものですが、ブロックチェーンのために生まれたかのような技術だと私たちは考えています。開発者やArcBlockのようなブロックチェーンプラットフォームに、高並行かつ耐障害性のあるシステムを運用するために必要な機能と能力をすべて提供し、開発者の仕事を容易にします。

落ち着いて、BEAMを続けましょう。

詳細はこちら

ArcBlockのエンジニアリング担当VPであるTyr Chenが、11月27日(水)のウェビナーでゲストホストを務めます。ぜひ登録してご参加ください。当日参加できなくても、終了後にウェビナーの録画をいち早く受け取れます。

Erlang Solutions Blogに掲載された記事を転載

このページに関わるもの

製品

  • Forge sunset

    ノード、データ層、クライアントを別々に組み立てずにチェーンアプリケーションを構築するための SDK とツールチェーン。これが後の ArcBlock Chain になりました。

用語

  • ブロックチェーン

    記録を暗号学的に結び付け、共通の検証・合意形成ルールに従って取引履歴を確定する分散台帳。