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

WASIがコンテナ化をより効率的にする方法

2021年5月13日お知らせ

By Marco Fioretti

WebAssembly、またはWasm 簡潔にするために、で書かれたソフトウェアを可能にする標準化されたバイナリ形式です どれか サンドボックス内またはサンドボックス内のプラットフォームでカスタマイズせずに実行する言語 ランタイム –つまり仮想マシン–ほぼネイティブの速度で。これらのランタイムはホスト環境から分離されているため、WebAssemblyシステムインターフェイス(WASI)は、Wasmを採用する開発者に、ソフトウェアを1回自由に記述できるが、実行場所を無視する、低レベルを呼び出す単一の標準的な方法を提供します。任意のプラットフォームに存在する機能。

このシリーズの前の記事 WASIの目標、設計原則、およびアーキテクチャについて説明します。今回は、WASIに基づいた実際の使用可能なプロジェクトとサービスを紹介します。これにより、全体像におけるその役割も明確になります。 コンテナ化 Dockerのようなかさばるコンテナよりもはるかに効率的に、事実上すべてのアプリケーションの

WASIでのコーディングは仕事の半分に過ぎません

プログラマーはすでにできます コードを記述してコンパイルする、たとえば C または さび、.wasmモジュールを作成します 使える WASI準拠の環境で。問題は、これらのモジュールを「Webブラウザーの外部」で実際に実行できるランタイムがすでにあるかどうかです。答えはイエスであり、複数あります。汎用ソリューションの1つは ワスムタイム、 から バイトコードアライアンス。このプロジェクトは、使用できるWasmモジュール用のWASI準拠のランタイムを開発します スタンドアロン、コマンドラインツールとして、または埋め込まれます ライブラリとして、他のアプリケーションに:現時点では、プレーンなBashの他に、WasmtimeはRust、C、Python、.NET、Goから使用できます。

他のWASIランタイムは、特定のユースケースまたはプログラミングコミュニティ向けに多かれ少なかれ最適化されています。次の例は、完全性を装うことなく、何が可能であるかを示しています。

サーバー上のWASI、または一部のサーバーの交換

Wasmer はRustのオープンソースWasmランタイムであり、その1.0バージョンは 2021年1月にリリース。 Wasmerは、汎用サーバー上で実行するように特別に設計されています。WASIメソッドを使用してホストオペレーティングシステムのネイティブ機能と対話する.Wasmモジュール。

加えて スタンドアロンランタイム あらゆるプラットフォームやチップセットでWasmバイナリを実行できるWasmerは、Wasmtimeと同様に、 他の多くの言語、C / C ++、Rust、Python、Go、PHP、Rubyから始まります。

その機能を証明するために、Wasmerの開発者は.wasmモジュールとしてコンパイルし、実際に実行しました。 nGinxWebサーバーの変更されていないバージョン、明らかにWASI呼び出しを使用してホストシステムと対話します。

Wasmerはまた、最初のWasmランタイムです。 完全にサポート WASIと高性能プログラミングの両方 単一命令、複数データ技術(SIMD):2019年に、2つのテクノロジーが一緒に使用され、非常に興味深い結果が得られました。 素粒子物理学をエミュレートする。 Wasmer開発者も実行する作業に参加します LinuxカーネルのWasmモジュール WASIを介して、より多くのチェックとより多くのコンテキスト切り替えを必要とするタスクを安全に実行するため。それがパフォーマンスのヒットです。

Dockerよりも高速でNode.jsよりもシンプルな人工知能

Second Stateは、サーバーサイドアプリケーションを「Dockerよりも安全で10倍高速」に実行するための別の仮想マシンを開発しました。 SSVM。 SSVMランタイムで特に興味深いのは、WebAssemblyとWASIのサポートを追加および最適化した理由と方法です。ハードウェアに直接アクセスして、「Web経由でRustで記述されたNode.jsのサービスとして」人工知能と機械学習を提供します。 。同等のPythonコードよりも最大25倍高速に実行される一般的なアプリケーションには、画像やその他のパターンの認識が含まれます。

SSVMツールチェーンは、次のWasmモジュールの作成にも使用できます。 デノ。これは、JavaScriptとTypeScriptのRustランタイムであり、 「Node.jsの作成者が後悔している10のこと」、および WASIをサポート システムリソースにアクセスする必要があるWasmモジュールの場合。

クラウドエッジでのWASIゲームなど

Fastlyは、エッジクラウドプラットフォームプロバイダーであり、 オープンソースとしてリリース 独自のWebAssemblyコンパイラとランタイム ルーセット。顧客が任意の言語で記述したコードのより高速で安全な実行をサポートするために、このツールを迅速に作成しました。 ユースケース Fastlyプラットフォームの。エッジコンピューティングにおけるWasmとWASIの機能を示すために、Fastlyエンジニア 最近発表された 彼はDoomの一人称シューティングゲームをFastlyのエッジクラウドで実行するように移植しました。

WebAssemblyとコンテナ?違いは何ですか?

WASIとすでに述べたWasmtimeを使用すると、両方が可能です。 .NETCoreアプリケーションからWasmモジュールを実行する、および同じ形式でモジュールを生成する .NETのRoslynコンパイラから。さらに興味深いのは、MicrosoftのKrustlets、つまり「KubernetesRustkubelets」です。これらは、WebAssemblyの「ワークロード」を調整して実行する方法です。 Kubernetesを使用した標準のコンテナと一緒に。言い換えれば、WasmとWASIは、Kubernetesのような標準システムを使用して、少なくとも従来のコンテナーと同様に、必要に応じてそれらと並べて分離された、数千の汎用アプリケーションのオーケストレーションをすでに有効にできます。 多く オーバーヘッドが小さい。

WASI主導のモノのインターネット

実行する可能性 同じ 多くの異なるプラットフォームで実行される非常に効率的な仮想マシンでのバイナリ形式は、一見したところよりもさらに多くのことを意味します。理由は次のとおりです。

「WASI対応のJavaScriptランタイムとシンプルなファームウェアにより、デバイスのソフトウェアをクラウドホストまたはローカルホストのリポジトリと同期させることができます」.

お気づきの方もいらっしゃると思いますが、そのような手順により、IoTやその他のリモートデバイス用の新しいファームウェアやソフトウェアの自動テストと展開が、現在よりもはるかに簡単で信頼できるものになる可能性があります。リモートデバイスがWebAssemblyバイトコードを実行できる場合、開発者は確実に 書く 使用するだけで、新しいソフトウェアをテストできます 「デジタルツインを備えた基本的なシミュレーター」 議論されたように、そのデバイスの 詳細とお問い合わせはこちらをご覧ください。。 WASIは…おもしろくないですか?

Linux Foundationのトレーニングと認定に関心をお寄せいただきありがとうございます。私たちは、中国のトレーニングサイトからより良いサービスを提供できると考えています。このサイトにアクセスするには、以下をクリックしてください。

Linux Foundationのカルチャに対するフィードバックは、より適切に、中国のカルチャウェブサイトに反映されることを期待しています。