グローバルに最速の Solana RPC プロバイダを目指した開発の話
この記事は Solana Advent Calendar 2024 10日目の記事です。
gm! ELSOUL LABO, Epics DAO, Validators DAO の kishi.sol です。
日本で生まれ育ちましたが、現在はオランダのアムステルダムにて主に Solana やクラウド技術を中心としたソフトウェア研究所 (ELSOUL LABO B.V.)をやっていっています。
具体的には、Solana バリデータの立ち上げや運用を簡略化したオープンソースツールの solv、 TypesScript サーバーレスアプリフレームワークの Skeet、Solanaバリデータの運用を自動化、技術的知識不要で始められるようにした Validators Solutions、 オープンソース開発を応援するSolana NFT カードゲームの Epics DAO、そして今回の本題である グローバル Solana RPC の ERPC 等を開発しています。
ERPC とは?
Solana RPCは、チェーンデータの取得やトランザクションの実行を効率的に処理する役割を担います。ブロックチェーンアプリはRPCを通じてネットワークと接続するため、Solana開発の基盤として欠かせない存在です。
ERPC は、その Solana RPC の中でも、グローバルに最速を目指し開発を進めています。世界中300箇所以上にエッジサーバーが設置されており、常にユーザーのアクセスに近いエッジが応答することで、ハイパフォーマンスかつエコな接続を実現しています。
実際に共用サーバーにおいて、他社製RPCにおいて60~80msの応答時間を、ERPCでは約70%削減し、20~30msを達成しています。
専有ノードを用意すれば、2~3msの通信も可能になります。
本記事では、どのようにしてグローバルに最速を達成しているのか、開発の全体像についてお伝えできれば嬉しいです。
最速の RPC を目指すときに考えること
基本的に RPC はサーバーなので、今までのサーバー・クライアントと同じ考え方が適用できます。
サーバーまで近いと速い
サーバーまで最短距離でいければ速い
ネットワーク線が太ければ速い
ネットワークが混んでいなければ速い
マシンが強ければ速い
実行効率が良ければ速い
お求めやすい価格をキープしながら、できる限り上記の改善に努めることが私達 RPC プロバイダの仕事となります。
ERPCのノードリソース仕入れの際には、ネットワーク品質やマシンのスペック、性能を最大限に重視しています。
専用RPCノードを設置すれば、物理的に近い距離で接続することで最速の通信が可能です。さらに、ノード内でプログラムを直接実行することで圧倒的な高速化が実現します。
しかし、専用ノードには大きなコスト(約$2,500/月〜)がかかるため、プロジェクトを始めるハードルが高くなります。
そのため、多くのWeb3プロジェクトは共有RPCの月額プラン(約$40〜50/月)からスタートします。
SolanaのRPCは要求スペックが非常に高く、単純にベアメタルサーバーをレンタルするだけで約$1,000/月かかります。こうした背景から、共有RPCの存在は多くのプロジェクトの立ち上げにとって重要です。
グローバルプロキシとエッジサーバーで共有RPCを最適化
Web3プロジェクトはグローバルアクセスが前提です。たとえば、RPCが東京にしかない場合、ブラジルからのリクエストは地球を横断する必要があります。
データリクエストは光となり、ファイバーを通って物理的にブラジルから日本へ、そして日本からブラジルへ戻っていきます。基本的に経路は保証されません。ネットワークと交通道路は似ているので、運が悪ければ事故渋滞や自然渋滞にひっかかり大きく遅延することさえあります。
グローバルプロキシとエッジサーバーを活用することで、これらの問題を解決できます。
ERPCでは、世界中に配置されたRPCノードとエッジサーバーが連携します。データリクエストは、ユーザーに最も近いエッジサーバーが応答し、そこから最短経路でRPCノードと通信します。これにより、リクエストの遅延を最小化し、高速な処理を実現します。
ERPCのRPCノードはグローバルにデータを共有しているため、どのエッジサーバーから接続しても、最適なノードが選ばれ、効率的にリクエストを処理します。これにより、ERPCユーザーは世界中どこにいても、常に最速のアクセス環境を利用できます。
そして実行効率を上げにいく
ここまでの話はおそらく多くの他社 RPC プロバイダも対応している話だと思います。(東京にノードを設置しているところはまだ少ないのかも?要調査。東京リージョンにてERPCよりも速い共有RPCを見つけたらご一報ください。勝ちにいきます。)
違いを出すためには?
前提として、Web3アプリ、dApp、ブロックチェーンアプリ等と呼ばれているものは現状ほとんど Webアプリです。ブラウザからアクセスする、ホームページみたいなあれがWebアプリです。
Webアプリは JavaScript (TypeScript) に依存しています。Wasm など様々な高速化が試されていますが、現状はほとんどの場合ブラウザ、そして JavaScript, Node.js の V8 ランタイムに依存しています。
開発に使う Solana Web3.js
まずWasmを活用し、Rust製のグローバルプロキシを試してみましたが、大きく性能は変わりませんでした。(エッジサーバーは現状V8ランタイムで動作しているため、最大性能を上げることは難しかったためだと思われますが、現在Betaでもあるため、今後このあたりの性能が向上し次第もう一度試す予定です。)
ちなみに V8 ランタイムを活用したサーバーレスは Docker のコールドスタート問題を克服しており、これによってグローバルプロキシは眠らずにスケーラブルになっています。詳細解説 from Cloudflare
さらなる性能改善について模索している中、2024年10月、Deno v2.0 のリリースがありました。
Rusty v8 という Rust 実装の V8 JavaScript Engine を元に開発された Deno がついにプロダクションで使える段階まで開発が進んでいました。
Deno はいいぞ
Denoは、Rusty V8を基盤とした高速なJavaScriptランタイムであり、従来のNode.jsの課題を解決します。後方互換性が高いため、既存コードを活かしながら性能を最大限に引き出せる点が特長です。
Deno のいいところを挙げだしたらきりがないのですが、端的にまとめると、
今までと同じように TypeScript で書ける
のに、速い強い。Rustみたいにバイナリにコンパイルすらできる
Node.js の歯がゆい部分はすべて改善された (@std 開発に4年…)
ちなみにDenoの開発者はNode.jsの生みの親(Ryan Dahl)です。経験を元に洗練されています。
Denoについて詳しくはドキュメントを御覧ください。
すべてのソフトウェアを Deno ネイティブに書き換え
Deno は後方互換性などに優れており、今までと同じようにpackage.jsonを使ったりnode_modules等今までの資産を活用してすぐに開発を始めることができます。
しかし、私達は Deno の性能を最大限に発揮できるように Deno ネイティブコードへの書き直しを行ったところ、これまで共用RPCでは難しかった20~30msという応答時間を達成することができました。
少し余談ですが、フロントエンドを少し触ったことがある方には Deno のデモを利用して体感いただけます。
Next.js (Deno ネイティブではない) + Deno
Fresh (Deno ネイティブ) + Deno
これらの開発サーバーの起動時間の差から驚きです。
gRPC プレミアム接続プランについて
ERPC のもう一つの特長として、gRPC プレミアム接続プランが存在しています。
gRPCはストリーム接続が可能なため、より高速で高効率なデータの取得が可能になりますが、これまで gRPC 接続が必要な場合、基本的には専有ノードを用意する必要がありました。
これには理由があり、エッジサーバーは長時間の接続が得意ではなく、gRPC ストリームのプロキシに向いていません。
このため、もしgRPC接続を月額利用したい場合は、グローバルノードの高度な同期やノード上の高性能なプロキシ、セキュリティ管理が必要になってきます。
しかし、私達は solvの開発運用経験から、このgRPC接続に強い需要があることがわかったため、このgRPCプロキシの開発を開始、そしてリリースすることができました。
このgRPC接続の人気もあり、おかげさまで現在20カ国以上のユーザーの方々から ERPC をご利用いただいております。
技術的にはノード間の情報共有ネットワークに加え、 Nginx と Lua を活用し、要件に応じてカスタマイズされた高速なプロキシを構築しています。
今後について
現状の最速に満足することなく、私達はさらなる性能を追求し開発を続けます。
具体的な改善プランについて、少しだけ共有させてください。
プロキシ性能のさらなる向上
すでに Nginx や Lua 等の信頼された高品質な技術を活用し、ハイパフォーマンスなプロキシを構築していますが、さらに上を目指すことができます。
私達は Solana、Deno、と プログラミング言語 Rust による 開発の革命を目の当たりにしてきました。
プログラミング言語の C や C++は理論値で最速ですが、人間やチーム開発の限界を考慮していません。
Rustは、人間やチームが開発しやすい設計を持ちながら、C++並みの性能を発揮します。このため、様々な分野でソフトウェア開発の革命が起きています。
プロキシにもこの波が来ており、下記 pingora の活用によりさらに性能が改善できる見込みがあります。
Cloudflare チームによると、同社製のカスタマイズNginxより70%ほど性能が向上した事例があるようです。
「solv + Skeet = SLV」 Solana 開発ツールの決定版へ
私達は solv と Skeet 、これらの開発を進めていくにつれて、これらのツールには高い親和性があることがより深くわかってきました。
特に、RPC を使う際にはWebアプリ(Java(Type)Scriptアプリ)が、Solana Webアプリを開発する際にはRPCが必要です。
単純なことなのですが、開発でSolanaブロックチェーンを使い始めるまでには地味にコストがかかります。
Node.jsは実行環境を整えるだけで一苦労で、SolanaでHello World的なことをしたいだけなのに必要なファイル数、ステップが多すぎます。
Solana バリデータもRPCも、立ち上げるまで、そして運用が複雑すぎます。
RPCを立ち上げてからトレードするまでのツール(Webアプリ)構築、となると数日かかってしまうような状況で、週末にSolanaを気軽にスタートできる状況にありません。
この Solana への参入障壁を、簡単に扱えるオールインワンオープンソースツールを開発することで改善します。
SLV ユーザーはすぐにSolana Devs としてブロックチェーン開発を始めることができます。
バリデータも、RPCも、Web3アプリも、これ一つで爆速開発をスタートできる。それがSLVです。
すでに下記 GitHub リポジトリにて開発がスタートしています。
ぜひ GitHub スターをいただければとても嬉しいです。もちろんコミットも大歓迎です!
Deno に生まれ変わることで性能が改善するだけでなく、下記内容のアップデートも予定されています。
バリデータノードの完全キーレスオペレーション
従来の solv では、バリデータノード内でバリデータキーを作成、それを使用して実行していましたが、ノード内にバリデータキーを全く置かない、完全キーレスオペレーションが可能になります。
バリデータノードの遠隔管理と設定のコード化
一般に Solana バリデータノードの設定はノード内にあり見えづらく、把握しづらい状況にありましたが、そんななかでも設定はとても大切で、ひとつのミスがダウンタイムにつながることも珍しくありません。
Solanaバリデータの運用でなくても、基本的にリモートノードにアクセスして保守管理を行うにはミスがつきものです。単純にローカルと思ってたらリモートにいる事件はよく発生します。
また、Solanaバリデータは頻繁にアップデートを繰り返しますが、毎回変更をミスなく行い、ノード内の設定をすべて把握し続けるのは至難の業です。
SLV では設定のコード化と遠隔管理を可能にし、いつもの使い慣れた環境から安心な運用を可能にします。
詳しいロードマップにつきましては SLV GitHub リポジトリを御覧ください。
また SLV のメジャーリリースにつきましてもアナウンスさせていただきます。
乞うご期待!
Solana 特化型グローバルエッジデータセンターの設置
現状、Solanaブロックチェーンネットワークに特化したデータセンターラックは存在しておらず、多くのプロジェクトが一般的なベアメタルクラウドリソースを利用しています。しかし、これらはSolanaバリデータやRPCのパフォーマンスを最大限に引き出す設計ではありません。
私たちは、オープンソースツール「solv」の開発や複数のバリデータ運用を通じて得た経験を基に、理想的なマシンスペック、ネットワーク要件、ラック構成を設計しました。この設計により、Solana向けソフトウェアが持つ最高の性能を引き出すデータセンターを実現します。
さらに、SLV Cloudをこのエッジデータセンター内に設置予定です。SLV Cloudは、SLVで開発したアプリを簡単にデプロイし、Solana RPCとの最短距離接続を保証する高品質なWeb3特化型クラウドプラットフォームとして提供されます。
2025年にアムステルダムでスタート、そしてグローバル展開へ
私たちは2025年内に、最初のSolana特化型グローバルエッジデータセンターをアムステルダムに設置する予定です。その後、需要に応じてグローバル展開を進め、最終的には全世界へ安定したSolanaネットワークを届けたいと考えています。
最新情報や詳細は、Validators DAO 公式 Discord にて随時アナウンスしております。ご興味をお持ちいただけましたら、ぜひご参加ください!
ここまでお読みいただき、誠にありがとうございました。私たちはこれからもSolanaネットワークとWeb3の未来を支えるため、全力で開発を進めてまいります。
引き続きご支援いただけますと幸いです。今後ともどうぞよろしくお願いいたします。
明日の Solana Advent Calendar 2024 11日目の記事は sakmaro さんの Anchor 関連 のお話です。
LFG🚀🔥