Cloudbreak — 水平スケール化されたステートアーキテクチャー

Solanaは、世界で最もパフォーマンスの高い、管理者の承認を必要としないブロックチェーンです。Solana Testnetの現在の反復では、200の物理的に異なるノードのネットワークが、GPUで実行している場合、1秒あたり50,000トランザクションを超える持続スループットをサポートします。 これを実現するには、いくつかの最適化と新しいテクノロジーを実装する必要があり、その結果、ネットワーク容量が飛躍的に向上し、ブロックチェーン開発の新しい段階が始まります。
これらがSolanaのネットワークを可能にしている7つのイノベーションです:
Proof of History (POH)— コンセンサス以前の時計;
Tower BFT — PoH最適化したPBFT;
Turbine — ブロック伝播プロトコル;
Gulf Stream — Mempoolなしのトランザクションフォワーディングプロトコル;
Sealevel — スマートコントラクト並行実行時間;
Cloudbreak — 水平スケール化されたアカウントデータベース;と
Replicators — 分散台帳保管
このブログ投稿では、Solanaの水平スケール化された状態アーキテクチャであるCloudbreakについて説明します。
概要: RAM、SSDsとスレッド
シャーディングなしでブロックチェーンをスケール化する場合、計算のみをスケーリングするだけでは十分ではありません。 アカウントの追跡に使用されるメモリは、すぐにサイズとアクセス速度の両方のボトルネックになります。 たとえば、最近のチェーンの多くが使用しているローカルデータベースエンジンであるLevelDBは、1台のマシンで約5,000 TPS以上をサポートできないことが一般的に知られています。 これは、仮想マシンがデータベース抽象化を介してアカウント状態への同時読み取りおよび書き込みアクセスを利用できないためです。
素朴な解決策は、RAMのグローバル状態を維持することです。 ただし、消費者グレードのマシンにグローバルステートを保存するのに十分なRAMがあると期待するのは合理的ではありません。 次のオプションはSSDの使用です。 SSDはバイトあたりのコストを30倍以上削減しますが、RAMよりも1000倍遅いです。 以下は、市場で最速のSSDの1つである最新のサムソンSSDのデータシートです。
サムソンSSDデータシート
シングル支出トランザクションは、2つのアカウントを読み取り、一つに書き込む必要があります。アカウントキーは暗号化された公開キーであり、完全にランダムであり、ローカルに実際のデータは存在しません。 ユーザーのウォレットには多くのアカウントアドレスがあり、各アドレスのビットは他のアドレスとはまったく関係ありません。 アカウント間に局所性がないため、それらを互いに近くにあるようにメモリに配置することは不可能です。
1秒あたり最大15,000の一意の読み取りで、単一のSSDを使用するアカウントデータベースの単純なシングルスレッド実装は、1秒あたり最大7,500トランザクションをサポートします。 最新のSSDは32の同時スレッドをサポートするため、1秒あたり370,000の読み取り、または1秒あたり約185,000のトランザクションをサポートできます。
Cloudbreak
Solanaの設計原則は、ハードウェアの邪魔にならないソフトウェアを設計して、100%の使用率を実現することです。
32個のスレッド間で同時読み取りおよび書き込みが可能になるようにアカウントのデータベースを編成することは困難です。 LevelDBのような普通のオープンソースデータベースは、ブロックチェーン設定におけるこの特定の課題に対して最適化されないため、ボトルネックを引き起こします。 Solanaは、これらの問題を解決するために従来のデータベースを使用しません。 代わりに、オペレーティングシステムで使用されるいくつかのメカニズムを使用します。
まず、メモリマップファイルを活用します。 メモリマップファイルは、バイトがプロセスの仮想アドレス空間にマップされるファイルです。 ファイルがマップされると、他のメモリと同じように動作します。 カーネルはRAMにキャッシュされたメモリの一部を保持することも、まったく保持しないこともありますが、物理メモリの量はRAMではなくディスクのサイズによって制限されます。 読み取りと書き込みは、ディスクのパフォーマンスによって明らかに制限されます。
2番目に重要な設計上の考慮事項は、順次操作がランダム操作よりもはるかに高速であることです。 これはSSDだけでなく、仮想メモリスタック全体にも当てはまります。 CPUは、連続してアクセスされるメモリの先取りに優れており、オペレーティングシステムは連続ページ障害の処理に優れています。 この動作を利用するために、おおよそ次のようにアカウントのデータ構造を分割します:
1.アカウントとフォークのインデックスはRAMに保存されます。
2.アカウントは、最大4MBまではメモリマップファイルに保存されます。
3.各メモリマップには、提案された単一のフォークからのアカウントのみが保存されます。
4.マップは、利用可能な限り多くのSSDにランダムに分散されます。
5.コピーオンライト言語論が使用されます。
6.同じフォークのランダムメモリマップに書き込みが追加されます。
7.各書き込みが完了すると、インデックスが更新されます。
アカウントの更新はコピーオンライトであり、ランダムなSSDに追加されるため、Solanaは、並行トランザクションのために、多数のSSDで順次書き込みと書き込みの水平スケーリングの利点を受け取ります。 読み取りは依然としてランダムアクセスですが、特定のフォーク状態の更新は多くのSSDに分散されるため、読み取りも最終的に水平方向にスケール化されます。
Cloudbreakは、ガベージコレクションの形式も実行します。 ロールバックを超えてフォークがファイナライズされ、アカウントが更新されると、古い無効なアカウントがガベージコレクションされ、メモリが解放されます。
このアーキテクチャには、少なくとも1つの大きな利点があります:特定のフォークの状態更新のマークルルートの計算は、SSDで水平方向にスケーリングされる順次読み取りで実行できます。 このアプローチの欠点は、データの一般性が失われることです。 これはカスタムレイアウトを備えたカスタムデータ構造であるため、データのクエリと操作に汎用のデータベース抽象化を使用することはできません。 すべてをゼロから構築する必要がありました。 幸いなことに、それは今完成しました。
Cloudbreakのベンチマーク
アカウントデータベースはRAMにありますが、使用可能なコアの数に応じてスケーリングしながら、RAMアクセス時間に一致するスループットが見られます。 アカウントが1,000万個になると、データベースはRAMに収まりません。 ただし、単一のSSDで1秒あたりの読み取りまたは書き込みで1m近くのパフォーマンスが見られます。
Solanaのインセンティブ付きtestnetイベントTour de SOLの詳細をご覧ください。
SolanaのCloudbreakの活用と、Proof of History、Sealevel、Tower BFTなどの革新が組み合わさって、世界初のWebスケールブロックチェーンが作成されます。 Solanaのtestnetは本日公開されます。 それはhttps://testnet.solana.comで見ることができます。 コストの観点から、ほんの少数のノードのみを実行しています。 ただし、ベンチマークのために、AWS、GCE、Azureの23のデータセンターにある(共有ハードウェアではなく)200を超える物理的に異なるノードに多くのインスタンスでスピンアップしました。
ランタイムは現在機能しており、開発者は今すぐtestnowにコードを展開できます。 開発者は現在C言語でスマートコントラクトを構築でき、私たちはRustツールチェーンに積極的に取り組んでいます。 RustはSolanaスマートコントラクト開発の主要言語になります。 Rustツールチェーンは、Solana Javascript SDKの一部として公開されており、Software Development Kitをさらに反復適応しています。
Solanaはまもなく、パブリックベータインセンティブバリデーターを起動して、Cosmosのゲームオブステークスに似たTour de SOLを介してノードを実行し、トークンを稼ぎながらSolanaネットワークの限界を試すよう大衆に働きかけます。