KubeCon EU 2022、WebAssemblyでダウンタイムのないアプリ実装を解説するセッションを紹介

KubeCon EU 2022からwasmCloudのセッションを紹介する。これはWebAssemblyを使ったクラウドサービスのwasmCloudを提供するCosmonicのエンジニアが行ったもので、「Disrupting the Downtime Continuum」というタイトルのセッションとなる。プレゼンテーションとデモを行ったのはTaylor Thomas氏とBrooks Townsend氏だ。wasmCloudがCNCFにホストされたのは約1年前だが、最近のKubeConではプレカンファレンスとしてWasm Dayが開催されることが当たり前になってきた。その経緯については以下の記事を参照して欲しい。

参考:WASMを実行するためのランタイム、wasmCloudがCNCFのサンドボックスに

セッションの動画:Disrupting the Downtime Continuum – Taylor Thomas & Brooks Townsend

セッションの資料(PDF):Disrupting the Downtime Continuum.pdf

ポータビリティが高くどんなプラットフォームでもソフトウェアを実行できるという意味では、JavaScriptがさまざまなブラウザーで稼働することをさらに拡張した形になったが、サーバーサイドのWebAssemblyには移植性に加えてメモリーセーフな特徴や軽量で高速に稼働するという特性がある。このセッションでは移植性を中心に解説を行った内容となった。

セッションを行うTownsend氏(左)とThomas氏(右)

タイトルとなっているDisrupting the Downtime Continuumは直訳すれば「連続性のあるダウンタイムを破壊する」、つまりアプリケーション更新の際に必要となる入れ替えのための時間であるダウンタイムをどうやってなくすか? について解説するものだ。ここではメモリーセーフについては特に触れずに、ローカルの開発用マシンとパブリッククラウドでアプリケーションを実行するための仕組みについてデモを使って解説している。

このセッションのアジェンダを紹介

冒頭の自己紹介に続いて、このセッションで解説する内容を紹介した。特にWebAssemblyについては会場に挙手を求めて「WebAssemblyを知っている人はどれくらい居るの?」と問いかけた。

WebAssemblyの紹介のスライド。Webでもアセンブリ言語でもないというタイトル

想定よりも多く挙手があったことで、イントロダクションとなるWebAssemblyについては簡単に紹介するに留めたが、新しいテクノロジーであることから現状の課題についても紹介した。

WebAssemblyの現状。ネットワークについてはまだ課題が多い

開発言語が限られていることやネットワークについてもKubernetesのような多種多様なネットワークスタックがあるわけではなく、この領域については現在進行形で進化しているが、その部分に利点を求める場合は良く検討したほうが良いと率直に語った。

これまでのコンピューティングモデルを振り返って紹介するスライドでは、OSからライブラリー、アプリケーションまでデベロッパーがすべてのソフトウェアに責任を持つ形から仮想化、コンテナ(Kubernetes)、そしてWebAssemblyへと進化してきたという段階を解説。ここではwasmCloudが進化の最終形に位置付けられていることがわかる。実行モデルとしてWebAssemblyは統合、wasmCloudに至って初めて分散型の実行モデルを実装できているというのが、このスライドにおける目立たないが重要なメッセージだ。今回はこの部分にフォーカスしたセッションとなっている。

コンピューティングモデルの進化。最新がwasmCloudだ

ここでwasmCloudのランタイムについて解説。特にwasmCloudで実装されているwasmCloud Application Runtimeやアクターモデルについても解説を行っている。wasmCloudはアプリケーションの実行をアクターモデルで行うというのがポイントだろう。デベロッパーがビジネスロジックを実装する部分がアクター、それを手助けする外部機能(例えばHTTP処理)をケイパビリティとして区別している。前のスライドのHost(wasmCloud)のブロックの上にある「Cap」と書かれている部分だ。それ以前のモデルではライブラリーと呼ばれていた機能を、ここでは「ケイパビリティプロバイダー」と呼んでいることに注意して欲しい。

アクターとケイパビリティプロバイダーの意味についてはwasmCloudの公式ドキュメントを参照されたい。

参考:wasmCloud Documentation

NATSを使って実装されたアクターをつなぐLatticeというネットワークスタック

そしてそのアクターとケイパビリティプロバイダーをつなぐ部分がLatticeと呼ばれるネットワークスタックになる。これはCNCFにホストされているNATSというプロジェクトで実装されている。

そしてここからはデモを使って、タイトルにある「ダウンタイムを破壊する」ことを実装する内容となった。

最初のデモはxkcdというテクノロジーに関する1コママンガを紹介するサイトを使ったデモだ。これはHTTPリクエストに対してランダムに1コママンガのHTMLを返すシンプルなHTTPサーバーを実装するRustのプログラムを題材として使っている。Webアプリケーションとして多機能なWebサーバーではなくwasmCloudが用意しているHTTPのライブラリー、ここではケイパビリティプロバイダーを使って自前でWebサーバーを実装している。xkcdの作者であるランドール・マンロー氏は「ホワット・イフ?――野球のボールを光速で投げたらどうなるか」という著書が日本語訳されていることで、このマンガの画風に見覚えがある人も多いのではないだろうか。xkcdについては以下を参照されたい。

参考:xkcd: Artemis Quote

このデモではアクターとして実装されたランダムなIDを付けてリクエストを行うプログラムと、HTTPのリクエストを処理するケイパビリティプロバイダーの2つが存在している。そしてケイパビリティプロバイダー側のコードにわざと脆弱性が発生したというシナリオで修正を行うというのがデモの内容だ。ここでアプリケーション側の変更をしなくてもケイパビリティプロバイダーのRustのコードを修正するだけでアプリケーションの動作が元に戻ることを示す内容となった。

デモを行うThomas氏。実際に操作を行ったのはTownsend氏だ

このデモではビジネスロジックとライブラリー(ケイパビリティプロバイダー)のコードを明確に分けて実装することが可能であり、wasmCloudのダッシュボードによる操作でケイパビリティプロバイダーを最新バージョンに変えるだけでダウンタイムなしにアプリケーションの動作を変更できることを示している。

次にもっと現実的なアプリケーションを使ってダウンタイムを減らすことは可能か? についてデモを行った。これはSpring Bootのデモアプリケーションとして公開されているPet ClinicというアプリケーションをwasmCloudで実装、複数あるモジュールをAWS、Azureに移動してもアプリケーション自体が動き続けるということを見せるデモとなる。

オリジナルとなるSpring Bootのデモアプリの概要

オリジナルのデモアプリケーションではユーザーインターフェースとなるモジュールに加えて顧客管理のモジュール、PostgreSQLデータベース、治療データやペット情報のためのモジュールなど以外に、サービスディスカバリーのためのモジュール、管理やモニタリングのためのZipkinモジュールなどが必要なモジュールとして描かれている。それをシンプルなwasmCloudのアプリケーションとして実装するというのがこのデモの前半だ。

デモの前半は移植するだけ

Spring Bootでは多くのビジネスロジック以外のコードが必要だったが、wasmCloudでは非常にシンプルに構成されている。外部機能はケイパビリティプロバイダーとして切り出され、ビジネスロジックがアクターとして実装されている。

これをwasmCloudのダッシュボードで概観したのが以下のスライドになる。

PostgreSQLにつながっている3つのアクターが見える

ここからデモの後半として、Townsend氏はケイパビリティプロバイダーやアクターをダッシュボードから削除したり、実行されるパブリッククラウドを切り替えて再実行したりすることで、簡単にアクターとケイパビリティプロバイダーが再接続されることなどを見せた。

AWSでフロントエンド顧客管理をAzure、データベースをローカルで実行

このスライドではフロントエンドとなるUIをAWSで実行し、データベースを必要とするモジュールをAzureで実行、そしてデータベースの実体はローカルのMacBookで実行するというデモを行った。ここでもダウンタイムは発生せず、データベースの切り替えも何の設定もせずにスムーズに行われていることを実際にデモンストレーションした形になった。満員のセッションルームから拍手が起こったほどの見事なデモンストレーションとなった。システムの変更を行ってもダウンタイムはなくなり、破壊されたという形になった。

「ダウンタイムを破壊する」ために複数のインフラストラクチャーを切り替えるための複雑なネットワーク設定やユーザーの切り替えなどがすべてwasmCloudで吸収されていることを見せた。WebAssemblyが注目される中で、ビジネスに即した具体的なデモを行うことで実証したことは大きな意味があるだろう。冒頭ではまだ進化の余地があると認めながらも、Latticeという柔軟性のあるネットワークスタックによってマルチクラウドでのネットワークがスムーズに処理できることを見せた。またWebAssemblyがPCやサーバーだけではなくIoTなどにも実装できることから、デバイスの大小を問わずにシステムの中に組み込むことができることは大きな意味があると言える。

セッションの前にCosmonicのCEOであるLiam Randall氏、Thomas氏、Townsend氏に個別にインタビューを行った。

左からThomas氏、Randall氏、Townsend氏

ここではwasmCloudの将来について「PaaSとして使えるように進化していく」ことを語ったRandall氏だが、より詳しくは「次のデトロイトでまた会おう!」というコメントをくれた。パブリッククラウドが自社のサービスとの連携を強化することでマネージドサービスとしてのKubernetesがサイロ化していく中、PaaS的な使い方(ビジネスロジックだけをアプリケーションとして開発して実行)をしたいというニーズに応えるための方向性だ。WebAssemblyが確実にエンタープライズでの利用という領域に入ってきたことを感じるセッションとなった。

wasmCloud公式サイト:https://wasmcloud.com/

Original Post>