CNCFのサンドボックスプロジェクトとなったwasmCloudの動画を紹介
CNCFが2021年5月21日に公開したCloud Native WASM Dayのセッション「From Napkin to the Cloud: A WebAssembly Journey」を紹介する。これはKubeCon EU 2021のプレカンファレンスとして開催されたCloud Native WASM Dayのセッションとして行われたものだ。プレゼンテーションを行ったのはKevin Hoffman氏だ。Hoffman氏はアメリカの先進的な金融サービス企業であるCapital Oneのエンジニアであり、WebAssemblyとRustに関する書籍も執筆しているインフルエンサーであり、wasmCloudのリードコントリビューターでもある。
CNCFが公開している公式動画は以下を参照されたい。
動画:From Napkin to the Cloud: A WebAssembly Journey
またプレゼンテーションも以下のリンクから参照できる。
プレゼンテーション(PDF):From Napkin to the Cloud: A WebAssembly Journey
WebAssemblyとwasmCloud
タイトルにあるように「ナプキンに描いたアイデアが実際にアプリケーションとしてクラウドの上で実行されるまで」について、従来の方法とWebAssemblyを使った方法を比較しながら、WebAssemblyの利点を解説している。筆者が特に注目したのは「マイクロサービスとして実装する際の欠点を、WebAssemblyが克服できる」という部分だ。
またデモとして良くある「Hello, World」を出力するだけの単機能なものではなく、チャットを行うアプリをフロントエンド、バックエンド、認証、データストアなどの機能を備えて開発しているという点にも注目したい。
最初にWebアプリケーションを開発する際にデベロッパーが必要とする要件を整理した。ここではセキュリティ、予想可能性、実行速度などの条件を挙げて、それらの条件がWebAssemblyを使う選択を行った場合にどうなるのか?を説明した。
ここではポータビリティ、依存性がないことに加えて「Beneficial Limitations」が挙げられていることがポイントだ。ポータビリティはブラウザーだけではなくサーバーサイドでも実行できる環境が揃っているWebAssemblyの利点の一つだし、依存性がないという点も、JavaScriptのライブラリーやフレームワークなどを使って開発を行っているデベロッパーには朗報だろう。また「Beneficial Limitations(有用な制限)は、安全であることの裏返しとも言える。Rustのように安全ではないメモリー参照などが仕様としてできなくなっていることによる安全性と、危険だが何でもできることを天秤に掛けて、安全であることに意味があるという意味だろう。
このスライドでやっとWebAssemblyそのものの解説を行った。スタックベースの仮想マシンであること、OSやCPUアーキテクチャーに依存しないこと、非常に高速であること、ライブラリーではなくホストのOSにのみ依存していることなどを利点として挙げ、分散コンピューティングの未来であるというのがHoffman氏のメッセージだ。
ここで黄色の文字で強調されているのが、CNCFのサンドボックスプロジェクトとして採用されたランタイムのwasmCloudである。
次のスライドでwasmCloudの説明を行っているが、Actorランタイムであると同時にプラットフォームであることが最初に記載されている。このActorについてはビジネスロジックを実装したアプリケーションと理解しておけば問題はないだろう。公式のドキュメントにもFAQの最初の質問として書かれている。
ここではWhat is wasmCloud?の回答として黄色のマーカーでハイライトされている部分を引用する。
“wasmcloud is an application runtime that has been designed to speed up the developer workflow. An actor model seamlessly separates business logic from specific underlying capabilities. Common capabilities are included in the runtime and developers may easily create their own.”
要約すれば、「wasmCloudはアプリケーションのランタイム、アクターモデルはビジネスロジックと土台となる機能を分離するためのもの」であり、よく使われる機能はランタイムに含まれているために別のライブラリーなどを導入する必要がない。そしてデベロッパーが自身で付加機能を開発し利用することも容易」であるということになる。
この表ではWebAssemblyとwasmCloudの機能を比較している。バイナリーフォーマットであるWebAssemblyとランタイムを比較すること自体に意味はないが、名称が似ているゆえの混乱を避ける意味もあるだろう。この表の中の「Horizontal Scaling(水平的に拡張可能)」という部分は、wasmCloudの特徴であるNATSを使ったネットワーク機能であるLatticeを指していると思われる。
Latticeについてもドキュメントを参照されたい。
Lattice:https://wasmcloud.dev/reference/lattice/
従来の開発フローとwasmCloudの比較
ここから従来のアプリケーション開発のフローとwasmCloudのフローを比較するフェーズに入った。
ここではアイデアから初期のデザイン、実験的な実装の後にシステムの再設計を経て、完成したアプリケーションが最初のアイデアからはかけ離れたモノになってしまうという経験を語った。これは多くのデベロッパーが経験するものだろう。一人が使う分には思った通りだったとしても、クラウドベースのサービスとして巨大なトラフィックを引き受けるような状況に対応するために、性能改善や分散、そしてセキュリティ機能の実装など本来やりたかったことではない機能が多数追加されて行くうちに、最初の思いとは別物になってしまうという例だ。
この図では最初のアイデアをそのままアプリケーションに実装し、規模に合わせて配備するプラットフォームを替えたとしても最初のアイデアのまま実装できるのが、WebAssemblyとwasmCloudであると説明した。
またクラウドネイティブでは良く出てくる「分散によるマイクロサービス」についてもその欠点を指摘した。
ここに描かれているようにユーザーインターフェース、メッセージ機能、チャットルーム機能など分割された機能がそれぞれテレメトリーやRPC、データストアを実装することで、プロセスとしては分離されはっきりとした境界線で区分されているために運用に多くのオーバーヘッドが発生するという。ここでは描かれていないが、サービスディスカバリーなどの機能も必要となるだろう。
比較として挙げたwasmCloudのモデルでは、アクターは分離されていても良いし、モノリシックなアプリケーションとして開発しても良いという。ここではホスト上にすべての機能を載せても良いし、分離したプロセスとしてマイクロサービスを構築しても良いという柔軟性があることを解説した。
またOSやCPUを選ばないこと、バイナリーが小さいことから一部をAWSなどのサーバーに置いて必要な機能をエッジに置くなどの構成も選択可能であるという。
デモアプリケーションの解説
そしてここからデモアプリケーションの解説に移った。このアプリケーションはチャットを行うアプリケーションで、フロントエンド、バックエンド、データストア、認証などを備えている。単なるデモではないということがポイントだろう。2021年9月初旬の時点で、このデモはGitHubのレポジトリーからは検索できなくなっているようで、wasmCloudのランタイムがElixirベースになったことと関連しているのだろう。
参考:https://github.com/wasmCloud/examples
実際にビルドした実行ファイルが700Kバイトという小ささであることを示しながら、WebAssemblyのポータビリティと柔軟性を見せた形になった。デモアプリケーションが単なる「Hello, World」ではなく複数のプロセスを必要とするチャットアプリだった訳は、マイクロサービスとして実装する例を使わないとマイクロサービスの欠点が理解されないからであろう。
メッセージを送った内容をターミナルで確認することで、このデモタイムは終わったが、マイクロサービスが思ったよりも複雑になってしまうという欠点を、wasmCloudがLatticeを使って解消しているという部分はもう少し解説が必要だろう。
NATSをベースにして階層を伴わないフラットなネットワークを実装しているということについては、これから多くのユースケースでその利点や構成的な限界が検証されていくだろう。エッジを含めたポータビリティを実現するためのプラットフォームとしてのwasmCloudだけではなく、マイクロサービスのためのプラットフォームとしてのwasmCloudの今後に注目していきたい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- KubeCon EU 2021からセキュアでコンパクトなバイナリーフォーマットWASMのセッションを紹介
- KubeCon NA 2021プレカンファレンスのWASM Dayの後半を紹介
- KubeCon EU 2022、WebAssemblyでダウンタイムのないアプリ実装を解説するセッションを紹介
- WASMを実行するためのランタイム、wasmCloudがCNCFのサンドボックスに
- wasmCloudのCosmonicのCEOが新しいデモを紹介
- KubeCon Europe 2024併催のCloud Native Wasm DayでOrangeが行ったセッションを紹介
- Cloud Native Wasm DayからWebAssemblyのスケジューラーWADMを解説するセッションを紹介
- KubeCon NA 2021開催。プレカンファレンスのWASM Dayの前半を紹介
- 「KubeCon NA 2022」のプレカンファレンスからCloudNative Wasm DAYを紹介
- KubeCon Europe 2023共催のWasm Day、Cosmonicが作成したWASMを解説する絵本を紹介