🦁

WebAssemblyの今後について

2023/02/24に公開

はじめに

  • WebAssemblyは元々は、CやRust等の言語からバイトコードであるWASMに変換して、ブラウザ上でバイナリを実行する用途として利用されていた。
  • 最近は、Krustlet等のWasmをPodとして稼働させ、コンテナよりも軽量なFaaSやマイクロサービスとしての活用させる動きが目立ってきている。k8sで構成されるマイクロサービスから、Krustlet+WasmのFaaSとして現行のマイクロサービスの分野にどのように組み込まれていくか注目している。
    • FaaSとは「Function as a Service」の略で、サーバレスでアプリケーション開発ができるクラウドサービスのこと。

FaaSとして活用する動き

  • FaaSとして活用する用途としての動向
  1. マイクロサービスで利用されているDocker/k8sのエコシステムへ組み込まれた。
    • KrustletなどWASMをPodとして稼働させて、軽量なFaaSとして活用する。
    • RDB等コンテナの環境と、起動したクラウドネイティブアプリであるWASMと連携する構成を簡易に構築することができるようになる。既存のマイクロサービスの構成に、WASMを部分的に導入することが可能となる。
    • Dockerなどコンテナ環境では、opensslのバージョンアップ等といったインストールしたアプリケーションの管理が必要。それに対して、WASMはアプリケーションの管理のみ。これによってWASM管理はアプリケーション技術者の範疇となり、インフラ領域とますます区分されることとなる。
  2. FastlyやCloudflareなどのCDN事業者にて、エッジ環境でWASMを動作させることができるナノサービスとして提供される。
    • 既存のマイクロサービスは別々のコンテナでネットワーク経由のインタフェースとなるため胥吏速度が落ちてしまう。対して、ナノサービスはマイクロサービスのように独立したデプロイメントであるが、同一のインフラストラクチャー、同一のプロセス・スレッドで実行できるため、処理速度が断然早い。
  • 今後大きくWASMが普及されると見込まれる。

Krustlet

  • Krustletを利用することでWASMのアプリケーションをk8s上で実行することができる。
  • MicrosoftのDeis Labsにより開発が進められている。

  • Mircrosoftの導入動画を参照する。
    • 動画中のkrustlet-wasccコマンドは現行の1.0版ではkrustlet-wasiコマンドとなっている。

https://www.youtube.com/watch?v=pEEdJlH-nWo

  • Kubernatesでは、Kubeletはクラスター内のすべてのノードで実行されるエージェントである。
  • デフォルトのkubeletは、Dockerランタイムで実行されるコンテナイメージを使用する。
  • Krustletは、kubeletの新しいスピン(派生型)である、コンテナーイメージの代わりに、Webassemblyモジュールを主要なワークロードとして使用する。
  • ユーザがWebassemblyを使用してPODを実行するように要求すると、APIサーバはクラスタでWebassemblyを実行できるノードをチェックし、Krustletがインストールされて実行され、利用可能であることを確認し、PODをそのノードにスケジュールする。
  • Krustletは基盤となるハードウェアに関係なく、どこでも実行できる移植可能なバイナリ形式である。Webassemblyにコンパイルされたアプリケーションは、開発者がアプリケーションを再コンパイルする必要なく、任意のブラウザおよびオペレーティングシステムで実行できる。
  • ホストからサンドボックス化され、各モジュールは互いに分離して実行される。

Krustlet Install

  • 2023/2現在、Krustletのインストールはカナリアビルドされたバイナリを使う必要があるっぽいので、安定板で動作確認できた時点でインストールする。

https://github.com/krustlet/krustlet/issues/699

関連情報

https://www.publickey1.jp/blog/23/webassemblywasm_workers_server_10rubypythonwasmrubypython.html

  • VMware Wasm Labsは、WebAssemblyやJavaScriptで記述したWorkerをサーバサイドでイベントドリブンに実行できる「Wasm Workers Server」のバージョン1.0をリリースした。
  • 対応するWorker
    • Rustで記述されWebAssemblyにコンパイルされたWebAssemblyモジュールのファイル
    • JavaScriptで記述されたスクリプト
    • Rubyで記述されたスクリプト
    • Pythonで記述されたスクリプト

Discussion