🦁
WebAssemblyの今後について
はじめに
- WebAssemblyは元々は、CやRust等の言語からバイトコードであるWASMに変換して、ブラウザ上でバイナリを実行する用途として利用されていた。
- 最近は、Krustlet等のWasmをPodとして稼働させ、コンテナよりも軽量なFaaSやマイクロサービスとしての活用させる動きが目立ってきている。k8sで構成されるマイクロサービスから、Krustlet+WasmのFaaSとして現行のマイクロサービスの分野にどのように組み込まれていくか注目している。
- FaaSとは「Function as a Service」の略で、サーバレスでアプリケーション開発ができるクラウドサービスのこと。
FaaSとして活用する動き
- FaaSとして活用する用途としての動向
- マイクロサービスで利用されているDocker/k8sのエコシステムへ組み込まれた。
- KrustletなどWASMをPodとして稼働させて、軽量なFaaSとして活用する。
- RDB等コンテナの環境と、起動したクラウドネイティブアプリであるWASMと連携する構成を簡易に構築することができるようになる。既存のマイクロサービスの構成に、WASMを部分的に導入することが可能となる。
- Dockerなどコンテナ環境では、opensslのバージョンアップ等といったインストールしたアプリケーションの管理が必要。それに対して、WASMはアプリケーションの管理のみ。これによってWASM管理はアプリケーション技術者の範疇となり、インフラ領域とますます区分されることとなる。
- FastlyやCloudflareなどのCDN事業者にて、エッジ環境でWASMを動作させることができるナノサービスとして提供される。
- 既存のマイクロサービスは別々のコンテナでネットワーク経由のインタフェースとなるため胥吏速度が落ちてしまう。対して、ナノサービスはマイクロサービスのように独立したデプロイメントであるが、同一のインフラストラクチャー、同一のプロセス・スレッドで実行できるため、処理速度が断然早い。
- 今後大きくWASMが普及されると見込まれる。
Krustlet
- Krustletを利用することでWASMのアプリケーションをk8s上で実行することができる。
- MicrosoftのDeis Labsにより開発が進められている。
- Mircrosoftの導入動画を参照する。
- 動画中のkrustlet-wasccコマンドは現行の1.0版ではkrustlet-wasiコマンドとなっている。
- Kubernatesでは、Kubeletはクラスター内のすべてのノードで実行されるエージェントである。
- デフォルトのkubeletは、Dockerランタイムで実行されるコンテナイメージを使用する。
- Krustletは、kubeletの新しいスピン(派生型)である、コンテナーイメージの代わりに、Webassemblyモジュールを主要なワークロードとして使用する。
- ユーザがWebassemblyを使用してPODを実行するように要求すると、APIサーバはクラスタでWebassemblyを実行できるノードをチェックし、Krustletがインストールされて実行され、利用可能であることを確認し、PODをそのノードにスケジュールする。
- Krustletは基盤となるハードウェアに関係なく、どこでも実行できる移植可能なバイナリ形式である。Webassemblyにコンパイルされたアプリケーションは、開発者がアプリケーションを再コンパイルする必要なく、任意のブラウザおよびオペレーティングシステムで実行できる。
- ホストからサンドボックス化され、各モジュールは互いに分離して実行される。
Krustlet Install
- 2023/2現在、Krustletのインストールはカナリアビルドされたバイナリを使う必要があるっぽいので、安定板で動作確認できた時点でインストールする。
関連情報
- VMware Wasm Labsは、WebAssemblyやJavaScriptで記述したWorkerをサーバサイドでイベントドリブンに実行できる「Wasm Workers Server」のバージョン1.0をリリースした。
- 対応するWorker
- Rustで記述されWebAssemblyにコンパイルされたWebAssemblyモジュールのファイル
- JavaScriptで記述されたスクリプト
- Rubyで記述されたスクリプト
- Pythonで記述されたスクリプト
Discussion