DFINITY の革新的なブロックチェーン コンピューター アーキテクチャの詳細な説明
DfinityFun
2021-01-18 10:05
本文约4586字,阅读全文需要约18分钟
フロントエンドとバックエンドを統合し、ソフトウェア コンテナによってワン ステップでホストされる革新的な分散型フルスタック アーキテクチャ。

編集者注: この記事は以下から引用しましたDfinityFun(ID:DfinityFun)、許可を得てOdailyによって転載されました。

編集者注: この記事は以下から引用しました

、許可を得てOdailyによって転載されました。
仕上げ:ブロックパンク
コミュニティ: Nutshell Universe (ID: DfinityFun)Internet Computer は DFINITY のネットワーク名です。DFINITY は、IP プロトコルの上位層に構築されたオープン プロトコルを使用して、そのプロトコルを実行しているすべてのコンピュータのリソースを分散化し、ブロックチェーン、暗号化などのテクノロジを使用して、安全で信頼性の高いネットワークを仮想化しようとします。従来のコンポーネントを必要としないソフトウェアオペレーティング環境。並列処理、動的な拡張、柔軟なガバナンスは、後発の DFINITY の利点になり得るでしょうか?

ここでは、インターネット コンピュータ開発プラットフォームのインフラストラクチャに対する DFINITY の公式紹介と、DFINITY の革新的な次世代スマート コントラクトである「ソフトウェア コンテナ」によって、分散型インターネット サービスがどのようにして数十億のユーザーに拡張できるかを説明します。

副題

ネットワーク ニューロン システム (NNS)

インターネット コンピューターは、インターネット コンピューター プロトコル (ICP) と呼ばれるブロックチェーン コンピューティング プロトコルに基づいています。ネットワーク自体は階層構造に従って設計されています。最下層は、専用のハードウェア ノード (ノード) をホストする独立したデータ センターです。これらのノード マシンはグループ化されてサブネット (サブネット) を作成します。サブネット マスターは、ユーザーによってアップロードされた相互運用可能な基本的なコンピューティング ユニットであるソフトウェア コンテナー (キャニスター) を実行します。コンテナーにはコードと状態が含まれます。

ICP に特有なのは、ネットワークを制御、構成、管理するネットワーク ニューロン システム (NNS) です。

NNS はトークン経済学でも重要な役割を果たします。 NNS はノードに報酬を与えるために新しい ICP トークン (以前は DFN トークンとして知られていました) を生成します。ノードは 2 つのカテゴリに分けられます。1 つはデータセンターで実行される専用のハードウェア ノードで、もう 1 つは NNS に ICP をステーキングすることによって作成された投票ニューロン ノードです。ニューロン ノードはネットワーク内の提案を管理します。 NNS がデータセンターとニューロンに報酬を与えるために新しい ICP トークンを発行する場合、これはインフレの一部です。

最終的には、データセンターの所有者とニューロンの所有者は ICP トークンを取得し、コンテナーの所有者や管理者と取引できるようになります。コンテナの所有者と管理者は、これらのトークンをサイクルに変換し、コンテナの再充電(つまり、ガス料金)に使用します。たとえば、これらのコンテナが計算を実行したりメモリを保存したりする場合、プロセス全体でサイクルを消費する必要があります。サイクルが使い果たされた後、実行を継続するにはさらにサイクルを補充する必要があります。これがデフレ部分です。

副題

サブネット

インターネット コンピュータを理解するには、まずネットワーク全体の基本的な構成要素であるサブネットの概念を理解する必要があります。サブネットは、インターネット コンピュータ ネットワークのソフトウェア コンテナのさまざまなサブセットをホストする役割を果たします。 NNS の制御下で、さまざまなデータセンターから引き出されたノード マシンが集められ、サブネットが作成されます。これらのノードは、ICP を介して連携して、ホストするソフトウェア コンテナに関連するデータと計算を対称的に複製します。

NNS は、サブネットを構築するときに独立したデータセンターのノードを組み込みます。 ICP プロトコルは、DFINITY によって開発されたビザンチン フォールト トレランス テクノロジと暗号化テクノロジを使用することにより、サブネットの改ざん防止とダウンの防止を保証します。サブネットはインターネット コンピュータ ネットワーク全体の基本的な部分ですが、ユーザーやソフトウェアに依存しません。ユーザーとコンテナ ソフトウェアは、コンテナの ID を知っていれば、その共有関数を呼び出すことができます。

この鈍感さは、インターネットの基本的な設計原則の延長です。 (従来の) インターネットでは、ユーザーが何らかのソフトウェアに接続したい場合、ソフトウェアを実行しているコンピュータの IP アドレスと、ソフトウェアがリッスンしている TCP ポートを知る必要があります。インターネット コンピュータ上で、ユーザーが関数を呼び出したい場合、必要なのはコンテナの ID と関数の署名だけです。インターネットがシームレスな接続を作成したのと同じように、DFINITY はソフトウェアにシームレスな世界を作成します。そこでは、ネットワークの基礎となる仕組みを知らなくても、ライセンスを取得したソフトウェアが他のソフトウェアを直接呼び出すことができます。

インターネット コンピュータは、他の方法でもサブネットの非感受性を確保します。 NNS は、サブネットを分割および結合して、ネットワーク全体の負荷のバランスをとることができます。もちろん、これはホストされたコンテナーにも影響しません。

この例では、11 個のソフトウェア コンテナをホストする仮想サブネット ABC があります。 NNS は、ネットワーク スケーリング パフォーマンスを分割する必要があることを示します。その場合、サブネット ABC は引き続きコンテナ 1 ~ 6 をホストしますが、同時にコンテナ 7 ~ 11 をホストする新しいサブネット XYZ を生成します。スケーリング中に、関係するすべてのコンテナーでサービスが中断されることはありません。

各サブネット タイプは、コンテナに特定のプロパティと機能を提供します。たとえば、コンテナーがデータ サブネットでホストされている場合、そのコンテナーは呼び出しを処理できますが、他のコンテナーは処理できません。他のコンテナを呼び出すには、システム サブネットが必要です。コンテナーで ICP トークンのバランスを維持したり、サイクルを他のコンテナーに送信したりできるようにするには、信頼されたサブネットが必要です。これらの理由から、ガバナンス コンテナーは信頼されたサブネットでのみホストされる必要があります。

サブネットの機能は、基礎となる層のフォールト トレランスに部分的に由来します。これは基礎科学のエキサイティングな領域であり、NNS が壊れたサブネットを修復できるようにする新しい暗号化技術など、すぐに一般の人々と共有したいと考えています。

副題

容器

サブネットの目的は、コンテナーをホストすることです。コンテナーは専用のハイパーバイザーで実行され、公的に指定された API を通じて他のコンテナーと対話します。コンテナーには、WebAssembly 仮想マシン上で実行される WebAssembly バイトコードと、その内部で実行されるメモリ内データ ページが含まれています。通常、この WebAssembly バイトコードは、Rust や Motoko などのプログラミング言語をコンパイルすることによって作成されます。このバイトコードには、開発者が API を簡単に操作できるようにするランタイムが含まれます。

インターネット コンピュータでは、コンテナによって共有される関数を呼び出す方法が 2 つあります。更新呼び出しまたはクエリ呼び出しです。重要な違いは、関数を更新呼び出しとして呼び出した場合、関数がコンテナーのメモリ内のデータに加えた変更はすべて保持されるのに対し、関数をクエリ呼び出しとして呼び出した場合、メモリに加えられた変更はすべてコンテナーに残ることです。実行後は破棄されます。

更新呼び出しによる変更は永続的であり、ICP ブロックチェーン コンピューター プロトコルがサブネット内のすべてのノードで変更を実行するため、改ざんが防止されます。ご想像のとおり、これらの呼び出しは一貫したグローバルな呼び出し順序になっており、完全に決定的な実行環境での同時実行が可能です。更新呼び出しは 2 秒以内に完了します。

対照的に、クエリ呼び出しでは変更が保持されません。メモリに加えた変更は実行後に破棄されます。これらは非常に効率的かつ安価で、完了までにかかる時間はわずか数ミリ秒です。これは、サブネット内のすべてのノードで実行されていないためであり、提供されるセキュリティのレベルが低いことも意味します。

この例では、ユーザーはカスタマイズされたニュース ページをリクエストしており、新しく生成されたコンテンツはすぐに利用可能になります。

副題

自動ストレージ、直交永続性

開発者がデータを保存する方法は、インターネット コンピューターの最も優れた点の 1 つです。開発者は永続性について考える必要はなく、コードを記述するだけで永続化が自動的に行われます。これは直交永続性と呼ばれます。これは、インターネット コンピュータがメモリ データ ページをコンテナ内に保持しているためです。

これがどのように機能するのか疑問に思われるかもしれません。コンテナは、メモリ データのページを変更する更新呼び出しを実行するソフトウェア エンフォーサです。これは、常にコンテナ内で実行できるスレッドは 1 つだけであることを意味します。

対照的に、クエリ呼び出しはメモリに永続的な変更を加えません。これにより、コンテナ内の任意の数の同時スレッドがいつでもクエリ呼び出しを処理できるようになります。これらのクエリ呼び出しは、ステート ルートに記録された、最後に決定されたメモリ スナップショットに対して実行されます。

最後に、コンテナは新しいコンテナを作成したり、コンテナ自体をフォークしたりできます。 WebAssembly バイトコードを指定して新しいコンテナーを作成するだけで、メモリ内のデータ ページは空から始まります。コンテナがフォークすると、内部メモリ ページと同じ、新しく生成されたコピーが作成されます。スケーラブルなインターネット サービスを作成する場合、フォークは非常に強力です。

副題

スケーラビリティ

次に、インターネット コンピューター サービスのスケーラビリティについて話しましょう。さまざまな種類のコンテナには、独自の容量の上限があります。たとえば、WebAssembly 実装の制限により、コンテナーは 4 GB のメモリしか保存できません。したがって、数十億のユーザーに拡張できるインターネット サービスを作成したい場合は、マルチコンテナ アーキテクチャを使用する必要があります。

特別なコンテナを作成してコンテナのコピーを多数作成し、ユーザー コンテンツをさまざまなコンテナに分割してスケーラブルなインターネット サービスを作成したい場合があります。ただし、このアーキテクチャはさまざまな理由から過度に単純化されています。

確かに、コンテナーを追加するたびに全体のメモリ容量が増加し、コンテナーの数が増えると全体的な更新とクエリ呼び出しのスループットが増加しますが、特定のユーザー コンテンツに対するクエリ呼び出しリクエストをスケールすることはできません。コンテナー シャードを追加してシステム容量を増やすたびに、ユーザー コンテンツのバランスを再調整する必要がありますが、これは実際にはエッジでスケーラブルなアーキテクチャではありません。また、クエリ時に最も近いレプリカからエンド ユーザーにデータを提供する良い方法もありません。フロントエンド コンテナーとバックエンド コンテナーの 2 層アーキテクチャが必要です。

Internet Computer は、NNS (DNS のような) を介してドメイン名を複数のフロントエンド コンテナにマッピングできるようにするなど、エンド ユーザーをフロントエンド コンテナに固定するためのいくつかの興味深い機能を提供します。エンド ユーザーがそのようなドメイン名を解決したい場合、インターネット コンピューターは、フロントエンド コンテナーをホストしているすべてのサブネット内のすべてのレプリカ ノードの合計数を調べ、最も近いレプリカ ノードの IP アドレスを返します。これにより、エンド ユーザーは最も近いレプリカでクエリを実行し、固有のネットワーク遅延が削減され、ユーザー エクスペリエンスが向上し、コンテンツ配信ネットワーク (CDN) なしでエッジ コンピューティングの利点が得られます。

この機能を最大限に活用するには、フロントエンド コンテナーとバックエンド バケット コンテナーを含む従来の 2 層構造が必要です。この例では、Web ブラウザはプロフィール写真をロードしたいと考えています。

ステップ 1、Web ブラウザーは、近くのノードを持つサブネット上で実行されているフロントエンド コンテナーにマップされます。次に、Web ブラウザは近くのノードにクエリ呼び出しを送信して、写真を取得します。

ステップ 2、フロントエンド コンテナーは、写真を保存するデータ コンテナーにコンテナー間クエリ呼び出しリクエストを送信します。

ステップ 3。データ ストレージ コンテナーから返されたクエリ呼び出し応答に静的コンテンツ (写真など) が含まれる場合、データをキャッシュに保存できます。この場合、フロントエンド コンテナのクエリ呼び出しを実行しているレプリカ ノードは、クエリ呼び出しの応答 (つまり、データ) をクエリ キャッシュに保存できます。

ステップ 4、クエリ呼び出しキャッシュ メカニズムは、フロントエンド コンテナー コードの影響をまったく受けません。ユーザーが呼び出したフロントエンド コンテナーが必要な情報をすべて収集すると、クエリ呼び出し応答または HTTP リクエストを介してコンテンツを返すことができます。

時間の経過とともに、ノードのクエリ キャッシュに静的コンテンツが蓄積され、近くのユーザーに関心のあるデータが生成され、より高速で優れたユーザー エクスペリエンスが提供されます。このように、インターネット コンピュータのネイティブ エッジ アーキテクチャは、開発者が特別なことをしたり、別の独自サービスの助けを借りたりする必要がなく、コンテンツ配信ネットワークの利点を提供します。

Web ブラウザーまたはスマートフォン上で実行されている UX/UI が、一部のコンテンツまたはデータへの変更の調整を担当するフロントエンド コンテナーを決定すると、標準インターフェイスを介して更新呼び出しを送信して、コンテンツまたはデータを変更できます。

このフロントエンド コンテナは通常、さらにコンテナ間更新呼び出しを実行して、必要な変更を実装します。

副題

オープンインターネットサービス

要約すると、フロントエンド コンテナーとバックエンド データ コンテナーの 2 層アーキテクチャを使用したオープン インターネット サービスの設計について説明します。まず、フロントエンド コンテナーをコーディングするときに、BigMap と呼ばれる既存のライブラリ クラスを使用して作業を簡素化します。

DfinityFun
作者文库