仮想化とコンテナ + 分散型ネットワーク

仮想化とコンテナはコンピューティングに大きな影響を与え、数年前には考えられなかったようなペースでイノベーションとスケーラビリティを生み出しました。この技術革新は、時間単位でサーバーをレンタルできるクラウドコンピューティングの先駆けとなりました。これに続き、計算能力を秒単位、マイクロ秒単位で測定できるマイクロサービスやサーバーレス・アーキテクチャが登場しました。拡張性の高いコンピューターリソースを低コストなオンデマンド価格で利用できるようになったことで、多くの革新的なビジネスモデルが生まれ、飛躍的な成長が可能になりました。

分散化は、10数年前の仮想化やコンテナと似たような段階にあります。基本的な原則と分散化を可能にするコンポーネントや経済モデルは、多くのイノベーターや先駆者たちによって整備されており、多くの人々に利用されています。ユースケースは紙のアウトラインから本番環境へと移行し、エコシステムは技術スタックのすべてのレイヤーで急速に成長しています。

これら2つの技術の組み合わせは、全体が一部分よりも大きくなるケースの1つになります。サーバのスケーリングとデプロイメントに実績のある技術を革新的なネットワーク設計と組み合わせて使用することで、後者(ネットワーク)は、前者の利点である驚異的な俊敏性、スケール、コスト効率を実現することができるようになります。

要するに仮想化とコンテナは、クラウドコンピューティングで観察されたものと同様の効果、つまり、柔軟性とスケールに関して一定の効果を分散型ネットワークに与えました。

仮想化およびコンテナ化されたサブノード

仮想化された分散型ネットワークでは、サブノードはフルノード内で仮想化されます。この仮想化は、コンテナ化されたアーキテクチャを介して有効にすることができ、分散型アプリケーション開発者のためのオプション性を高めるとともに、高品位なパフォーマンスを提供します。このパフォーマンスと柔軟性の組み合わせは、従来の集中型クラウドやマイクロサービスシステムに類似しています。コンテナは、Docker化されたLinux OSを介してカプセル化されたいくつかの主要なコンポーネントに細分化することができ、各ノードをOSにとらわれない方法でホストすることができます。

コンテナ、LXC、Dockerに関する背景

この種の分散型アーキテクチャについて深く掘り下げる前に、コンテナとその基礎となる技術的なコンポーネントであるLXCとDockerの背景から見ていきましょう。

コンテナ

コンテナとは、コードとその依存関係をすべてパッケージ化して、あるコンピューティング環境から別のコンピューティング環境へ、アプリケーションを迅速かつ確実に実行できるようにするソフトウェアの標準的な単位です。コンテナイメージは、アプリケーションを実行するために必要なすべてのもの(コード、ランタイム、システムツール、システムライブラリ、設定など)を含む、軽量でスタンドアロンの実行可能なソフトウェアパッケージです。

コンテナイメージは実行時にコンテナになります。コンテナ化されたソフトウェアの目標は、インフラストラクチャに関係なく、常に同じように動作することです。コンテナは、ソフトウェアを環境から隔離し、開発とステージングの違いに関わらず、ソフトウェアが均一に動作することを保証します。

コンテナは、運用効率とデプロイメントの俊敏性を向上させるのに役立ちます。効果的なコンテナ管理システムとともにコンテナを使用することで、DevOpsチームは、サーバー、アプリケーション、マイクロサービス、さらにはタスクの構築、デプロイ、再定義を行うことができます。

Linux Container (LXC)

LXC(LinuX Container)は、オペレーティング・システム・レベルの仮想化手法で、単一のLinuxシステムを実行している他のプロセスから1つ以上のプロセスを分離する安全な方法を提供します。コンテナを使用することで、リソースを分離し、サービスを制限し、独自のプロセスID空間、ファイルシステム構造、及びネットワークインターフェースを持つオペレーティングシステムのプライベートビューを持つようにプロビジョニングすることができます。複数のコンテナは同じカーネルを共有することができ、各コンテナはCPU、メモリ、I/Oなどのリソースを定義された量だけ使用するように制限することができます。その結果、アプリケーション、ワーカー、およびその他のプロセスは、単一のホスト上で複数の軽量な分離型Linuxインスタンスとして実行するように設定することができます。

DockerとDocker Engine

DockerはLXC上に構築され、イメージ管理とデプロイメントサービスを可能にします。LXCはLinuxカーネルの機能(具体的にはネームスペースとコントロールグループ)を参照しており、互いのプロセスのサンドボックス化や、リソースの割り当てを制御する機能を提供しているため、DockerはLXCの代替ではないことに注意が必要です。このようにDockerは、カーネル機能を低レベルな基盤上に、マシン間でのポータブルなデプロイ、アプリケーション中心のユーザビリティ、自動ビルド、バージョニング、コンポーネントの再利用、共有、ツールエコシステムなどを含む高レベルなツールを提供しています。

Docker Engineは実行時のサーバーサイドエンジンで、Dockerdと呼ばれるロングランのデーモンプロセスと、Dockerデーモンとの通信や指示を行うためのインターフェースを指定するAPIから構成されています。Docker Engineを通じて、サーバを非常に細かいレベルで設定することができ、サーバリソース(SKALEネットワークの場合はノードリソース)をセグメント化して管理するために、Dockerイメージを永続的または刹那的にインスタンス化します。

SKALEネットワーク内の仮想化とコンテナ

SKALEネットワークは、ノードアーキテクチャ内で仮想化を利用した最初のネットワークの1つです。仮想化とコンテナ化を独自のプールされた検証モデル(ネットワークのセキュリティを強化するためにランダムなノード選択と頻繁なノードローテーションを採用したもの)と組み合わせることで、SKALEネットワークは、セキュリティ、スケール、経済的な実行可能性が相反しないことを示しています。

SKALEネットワークは、パブリックメインネットに見られるような高いトランザクションコストをかけることなく、高スループットと低レイテンシーのトランザクションをサポートする、設定可能な弾力性のあるサイドチェーンネットワークです。このネットワークはEthereumメインネットに容易に接続することができ、チェーン間メッセージング機能と共に拡張されたストレージ機能を提供します。これらはすべて、効率的かつスケーラブルであり、共謀に強い、プールされたトランザクション検証とセキュリティモデルを使用して実行されます。

仮想化サブノード

各弾性サイドチェーンは、SKALEデーモンを実行し、SKALEコンセンサスプロセスを実行するランダムに指定されたノードの集合体で構成されています。SKALEネットワークのノードは、単一のチェーンに制限されず、仮想化されたサブノードを使用して複数のサイドチェーンにまたがって動作することができます。

言い換えれば、各ノードは仮想化されており、このサブノードアーキテクチャを介して独立した数のサイドチェーンのバリデータとして参加することができます。この多重化機能は、ネットワーク内の各ノード内に配置されコンテナ化されたアーキテクチャによって可能になります。

バリデータノードは、ノードコアと最大128個の仮想化サブノードで構成されています。

コンテナはSKALEネットワークでどのように使用されているか

コンテナイメージは、SKALEバリデータノードを立ち上げ、最大128個のサブノードに分割するために使用されます。まず、バリデータはネットワーク内のノードの運用仕様を満たすために1つ以上のサーバをプロビジョニングし、SKALEマネージャに登録します。(サーバ要件の詳細については SKALE Validator FAQ を参照してください)。

SKALEマネージャは、Ethereumメインネット上で動作するスマートコントラクトのセットで、ネットワーク内のノードの動作を制御します。この点は、中央集権型コンピューティングと分散型コンピューティングの違いについて補足する原則であるため、繰り返し説明しておく必要があります。中央集権型クラウド・コンピューティング・ネットワークでは、コンピューティングリソースは中央集権型ハブによって管理されています。SKALEネットワークでは、ノードのリソースはEthereumメインネット上に存在するスマートコントラクトによって管理されています。この透過的で決定論的なアプローチにより、ネットワークには極めて高度な自律性と独立性が与えられています。

新しいバリデータノードの場合、SKALEマネージャはSKALE AdminプラグインとともにDocker Engineをインストールすることで、バリデータによって提供されるサーバをプロビジョニングします。このプラグインは、特定のスマートコントラクトによって指示された操作を実行するためにSKALEマネージャからの入力を取得するように設計されています。

SKALEマネージャは、Ethereumメインネット上で動作し、SKALEネットワーク内のノードプールのプロビジョニングと運用を制御するスマートコントラクトのセットです。本ドキュメントで「SKALEマネージャ」という用語が使用される場合、基本的には特定の機能や操作に対応する1つ以上のEthereumメインネットのスマートコントラクトを指します。

コンテナ化のメリット

クラウドコンピューティングやサーバーレス、マイクロサービスベースのアーキテクチャにおけるコンテナの利点については、これまで多くのことが書かれてきました。メリットの大半は、システムの分散化された性質を考慮しており、場合によってはひねりを加えたものではありますが、同様のメリットが適用されます。

オペレーショナル・アジリティ

Dockerコンテナを使用する大きなメリットは、ノードのセットアップと運用が比較的容易であることです。SKALEネットワーク内のノードオペレータは、適切なハードウェアをプロビジョニングし、Docker EngineとSKALE Adminプラグインをインストールし、SKALEネットワークにノードを登録するだけです。SKALEネットワークは、SKALEマネージャを介して、ノードのセットアップ、サブノードのプロビジョニング、サイドチェーンの割り当てと再割り当て、ノードが提供するメトリクスの収集などを行います。コンテナによって提供される運用の俊敏性は、ノードオペレータがデプロイする必要のあるDevOpsのリソース量を削減します。

ネットワーク・レジリエンス

運用の俊敏性と関連しているのは、ネットワークの回復力です。コンテナを使用することで、故障したサーバーをデプロビジョニングし、新しいサーバで仮想化されたサブノードのセットをアクティブ化するための迅速な切り替えメカニズムを提供することで、サーバーの停止に対処することが比較的容易になります。標準イメージを使用することで、新しいコンテナを迅速に起動して稼働させることができ、トラフィックを稼働中のノードにリダイレクトすることができます。

ダイナミック・チェーン・サイジング

Dockerを使用することで、SKALEネットワークはノード内のリソースを動的に割り当て、リソースの使用量をサイドチェーンサイズにマッピングする機能を提供します。ユーザーレベルのリソースには、弾力性のあるブロックチェーンサイズ、ファイルストレージ容量、トランザクションスループットなどがあります。コンテナは、メモリ、CPU使用量、I/O使用量、その他のシステム/カーネルレベルのリソースを管理します。効果的なリソース管理により、各サイドチェーンは適切なサービスレベルで動作しながら、安全でフォールト・トレラントな動作環境を維持することができます。

トランスパレンシー//”透明性”とどちらが良いだろうか//

また、Dockerコンテナを使用することで、ノードとサブノードのコンテキストの透明性が大幅に向上します。ソリューションを構成するコンポーネントを知り、それぞれを検証できることが重要であることを考えると、オープンソース・ソフトウェアは分散型コンピューティングの基本的な考え方です。これはSKALEネットワークのノードとサブノードのDockerイメージの構成に関しても同様です。これらのコンポーネントをDockerイメージとしてパッケージ化することは、ユーザー、開発者、バリデータ、その他の関係者がそれぞれのイメージを簡単に検査して内容を確認及び検証できることを意味します。また、自動化されたソフトウェアパッケージがイメージ上でテストを実行して、構成やセキュリティに関する懸念事項を満たすことができます。

コンポーザビリティ

コンポーザビリティとは、コンポーネント間の相互関係や、コンポーネント同士の疎結合または密結合の度合いを扱う複雑なシステムの設計原則です。一例として、EVMの高度なコンポーザブル設計により、SKALEネットワークはプルーフ・オブ・ワークコンセンサスアルゴリズムをスワップし、プルーフ・オブ・ステークアルゴリズムに置き換えることが可能になります。同様にコンポーザビリティは、特定のサイドチェーンのニーズを満たすために、アルゴリズムを変更して別のアルゴリズムに置き換えることも可能です。

アダプタビリティ

コンポーザビリティに関連して、SKALEネットワークが新しい機能、コンポーネント、機能を追加することができるアダプタビリティがあります。例えば、チェーン・ユーザが EVMに対する独自の拡張機能を実行したり、新しいコンセンサスプロトコルをスワップしたい場合、ネットワークは人気のある分散型ファイルストレージ、ゼロ知識証明プロトコル、またはクロスチェーン・メッセージング・アプローチ等のサポートを構築することができます。SKALEネットワークは、Dockerとコンテナ化されたアーキテクチャを使用することで、これらのタイプの拡張機能をより簡単に組み込み、ネットワークの標準的な一部とすることができます。

この記事は2部構成のシリーズの第1回目です。2回目は、コンテナとSKALE EVM、ランダムノード選択と頻繁なノードローテーションによるネットワークセキュリティなどについて説明します。

参照先