CNCFのサンドボックスプロジェクトとなったwasmCloudの動画を紹介

2022年1月5日(水)
松下 康之 - Yasuyuki Matsushita
Capital Oneのエンジニアが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を使う選択を行った場合にどうなるのか?を説明した。

WebAssemblyを使った開発で実現できる要件の整理

WebAssemblyを使った開発で実現できる要件の整理

ここではポータビリティ、依存性がないことに加えて「Beneficial Limitations」が挙げられていることがポイントだ。ポータビリティはブラウザーだけではなくサーバーサイドでも実行できる環境が揃っているWebAssemblyの利点の一つだし、依存性がないという点も、JavaScriptのライブラリーやフレームワークなどを使って開発を行っているデベロッパーには朗報だろう。また「Beneficial Limitations(有用な制限)は、安全であることの裏返しとも言える。Rustのように安全ではないメモリー参照などが仕様としてできなくなっていることによる安全性と、危険だが何でもできることを天秤に掛けて、安全であることに意味があるという意味だろう。

WebAssemblyの解説

WebAssemblyの解説

このスライドでやっとWebAssemblyそのものの解説を行った。スタックベースの仮想マシンであること、OSやCPUアーキテクチャーに依存しないこと、非常に高速であること、ライブラリーではなくホストのOSにのみ依存していることなどを利点として挙げ、分散コンピューティングの未来であるというのがHoffman氏のメッセージだ。

ここで黄色の文字で強調されているのが、CNCFのサンドボックスプロジェクトとして採用されたランタイムのwasmCloudである。

wasmCloudの解説

wasmCloudの解説

次のスライドでwasmCloudの説明を行っているが、Actorランタイムであると同時にプラットフォームであることが最初に記載されている。このActorについてはビジネスロジックを実装したアプリケーションと理解しておけば問題はないだろう。公式のドキュメントにもFAQの最初の質問として書かれている。

参考:https://wasmcloud.dev/

ここでは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とwasmCloudの比較表

この表ではWebAssemblyとwasmCloudの機能を比較している。バイナリーフォーマットであるWebAssemblyとランタイムを比較すること自体に意味はないが、名称が似ているゆえの混乱を避ける意味もあるだろう。この表の中の「Horizontal Scaling(水平的に拡張可能)」という部分は、wasmCloudの特徴であるNATSを使ったネットワーク機能であるLatticeを指していると思われる。

Latticeについてもドキュメントを参照されたい。

Lattice:https://wasmcloud.dev/reference/lattice/

従来の開発フローとwasmCloudの比較

ここから従来のアプリケーション開発のフローとwasmCloudのフローを比較するフェーズに入った。

従来のアプリケーション開発の流れ

従来のアプリケーション開発の流れ

ここではアイデアから初期のデザイン、実験的な実装の後にシステムの再設計を経て、完成したアプリケーションが最初のアイデアからはかけ離れたモノになってしまうという経験を語った。これは多くのデベロッパーが経験するものだろう。一人が使う分には思った通りだったとしても、クラウドベースのサービスとして巨大なトラフィックを引き受けるような状況に対応するために、性能改善や分散、そしてセキュリティ機能の実装など本来やりたかったことではない機能が多数追加されて行くうちに、最初の思いとは別物になってしまうという例だ。

WebAssemblyとクラウドによる実装は実験をそのまま本番に移行できる

WebAssemblyとクラウドによる実装は実験をそのまま本番に移行できる

この図では最初のアイデアをそのままアプリケーションに実装し、規模に合わせて配備するプラットフォームを替えたとしても最初のアイデアのまま実装できるのが、WebAssemblyとwasmCloudであると説明した。

またクラウドネイティブでは良く出てくる「分散によるマイクロサービス」についてもその欠点を指摘した。

「伝統的なマイクロサービス」の欠点を指摘

「伝統的なマイクロサービス」の欠点を指摘

ここに描かれているようにユーザーインターフェース、メッセージ機能、チャットルーム機能など分割された機能がそれぞれテレメトリーやRPC、データストアを実装することで、プロセスとしては分離されはっきりとした境界線で区分されているために運用に多くのオーバーヘッドが発生するという。ここでは描かれていないが、サービスディスカバリーなどの機能も必要となるだろう。

wasmCloudではアクターを柔軟に配備できる

wasmCloudではアクターを柔軟に配備できる

比較として挙げたwasmCloudのモデルでは、アクターは分離されていても良いし、モノリシックなアプリケーションとして開発しても良いという。ここではホスト上にすべての機能を載せても良いし、分離したプロセスとしてマイクロサービスを構築しても良いという柔軟性があることを解説した。

またOSやCPUを選ばないこと、バイナリーが小さいことから一部をAWSなどのサーバーに置いて必要な機能をエッジに置くなどの構成も選択可能であるという。

デモアプリケーションの解説

そしてここからデモアプリケーションの解説に移った。このアプリケーションはチャットを行うアプリケーションで、フロントエンド、バックエンド、データストア、認証などを備えている。単なるデモではないということがポイントだろう。2021年9月初旬の時点で、このデモはGitHubのレポジトリーからは検索できなくなっているようで、wasmCloudのランタイムがElixirベースになったことと関連しているのだろう。

参考:https://github.com/wasmCloud/examples

実際にビルドした実行ファイルが700Kバイトという小ささであることを示しながら、WebAssemblyのポータビリティと柔軟性を見せた形になった。デモアプリケーションが単なる「Hello, World」ではなく複数のプロセスを必要とするチャットアプリだった訳は、マイクロサービスとして実装する例を使わないとマイクロサービスの欠点が理解されないからであろう。

ターミナルを使ってメッセージ送信を確認

ターミナルを使ってメッセージ送信を確認

メッセージを送った内容をターミナルで確認することで、このデモタイムは終わったが、マイクロサービスが思ったよりも複雑になってしまうという欠点を、wasmCloudがLatticeを使って解消しているという部分はもう少し解説が必要だろう。

NATSをベースにして階層を伴わないフラットなネットワークを実装しているということについては、これから多くのユースケースでその利点や構成的な限界が検証されていくだろう。エッジを含めたポータビリティを実現するためのプラットフォームとしてのwasmCloudだけではなく、マイクロサービスのためのプラットフォームとしてのwasmCloudの今後に注目していきたい。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

OSSイベント

Open Source Summit Japan 2022開催。車載からストレージ、Kubernetesまで幅広いトピックをカバー

2023/4/26
2022年12月、横浜でOpen Source Summit Japanが開催された。リアルでは約500名が参加し、車載システムからSBoM、AIまで広範なセッションが行われた。
開発言語イベント

WASM Meetup@ByteDanceで垣間見たWebAssemblyの静かな広がり

2023/4/11
ByteDanceのシリコンバレーオフィスで開催されたWebAssemblyのミートアップを紹介。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています