KubeCon North America 2024から、分散アプリのフレームワークNEXを解説するセッションを紹介

KubeCon+CloudNativeCon North America 2024から、CloudFoundry由来のメッセージングスタック、NATSに関するセッションを紹介する。プレゼンテーションを行ったのはNATSの開発元であるSynadiaのエンジニアであるKevin Hoffman氏とByron Ruth氏だ。NATSはNeural Autonomic Transport Systemのアクロニム(頭字語)だが、Herokuから始まったPaaSの代表的な実装例、CloudFoundryで使われていたメッセージングシステムだ。セッションのタイトルは「Nothing but NATS - Going Beyond Cloud Native」というもので、中身はNATSの紹介よりもNATSの上に実装されたNEXをデモを交えて解説するものだ。NEXはNATS Execution Engineと公式ドキュメントに記載されているが、Pub/Subで行われるメッセージ交換のコアの機能にキューイングなどを追加したJetStreamに、MicroVMのFirecrakerランタイムなどをパッケージした抽象化レイヤーと言える新しいソフトウェアだ。2024年11月の時点ではExperimentalということでまだベータの段階と言える。
この公式ドキュメントには、NEXについてNATSのインフラストラクチャーにアプリケーションなどのワークロードを実装する機能を追加するレイヤーだと説明されている通り、デベロッパーがSDKなどを使ってNATSのメッセージング機能を実装するのではなく、運用を行うオペレータがNATSのワークロードを扱えるようにするためのレイヤーということだろう。
セッションの動画は以下を参照して欲しい。
●動画:Nothing but NATS - Going Beyond Cloud Native
結論を先に書いてしまえば、このセッションではNEXを「NATSをベースにして分散型アプリケーションをシンプルに実装するミドルウェア」であると解説している。NATSはPub/Subをベースにしたメッセージ交換のミドルウェアだが、そこにJetStreamという信頼性を高めるための機能を追加した上で、コマンドラインなどを使ってアプリケーションを実装可能にしたのがNEXだ。セッションの最後ではアプリケーションが相互に通信を行うデモを見せて、分散アプリケーションをNEXで実装できることを解説している。
このスライドでは現代的な分散アプリケーションのためのソフトウェアとして何が存在するのかを紹介。タスク間通信のgRPC、メッセージングのRabbitMQ、キーバリューストアのRedisなどがリストアップされているが、これらのソフトウェアによって実現されている機能は限定的で複雑さを増すだけだと説明。
ここで分散アプリケーションが必要としている機能要件について、例を挙げて説明。ここで挙げられている機能はほぼNATSで実装されている機能であると言って良いだろう。問題点を挙げながらターゲットのソフトウェアに実装されている機能だけを紹介して問題を解決しているように見せるのは、多くのITベンダーが取る手法だ。
このスライドではここまで挙げてきた問題点についてデベロッパー、運用オペレータ、そしてシステムを設計するアーキテクトそれぞれの役割に応じた利点を挙げ、NATSの特徴を説明している。Kubernetesはオペレータ視点のプラットフォームでデベロッパーには多くの負担をかけ、PaaSはデベロッパー視点のプラットフォームで開発して即座に実装できるのは利点だが、運用サイドから見ればセキュリティや負荷分散などの運用には多くの手間がかかる。
それに対して、NATSを使うことで分散アプリケーションを開発するデベロッパーにはメッセージングベースでシンプルに開発が可能、オペレータにはセキュリティやモニタリングなどの機能を盛り込み、マルチクラウドや地理的に分散したエッジネットワークでの実装設計を行うアーキテクトにも利点があることをここで示している。
ここからNEXそのものの解説になった。NEXはオープンソースのNATS Execution Engineであるとして、アプリケーションを実装するためにMicroVMやWebAssemblyなどのテクノロジーを使っていることを紹介した。
ここでデベロッパーにとって開発環境と本番環境が違うことで発生するさまざまな問題点を説明。ここではデベロッパーのPCで開発したソフトウェアが本番稼働で動かないことが多々発生することを指摘し、本番環境をシミュレートすることの難しさを解説。特に1対1の通信が絡むアプリケーションにおいては、サービスディスカバリーやロードバランシングを実装するのことが面倒であることを語り、アプリケーション自体を開発するよりもその実行環境を開発マシンに設定することに時間が取られていることを指摘した。
前のスライドでは難しさを列挙したが、NATSによってそれらの問題点が解消されることを強調。ここも分散アプリケーションにおける問題点をNATSの機能に沿って解説しているといえる。
ここからはNEXの実行コマンドとソースコードの例を挙げて説明。ただこの後のデモアプリケーションのほうが理解はしやすいだろう。
アプリケーションがメッセージを交換しながらカウンターの数値を増加させていくというシンプルなアプリケーションだが、NEXにはWebサーバーが含まれていることからWebページを表示させてアプリケーションの状態を表示させることが可能というのは興味深い仕組みと言える。
次に紹介したのはオンラインポーカーゲームをNATSで実装したというデモアプリケーションだ。
アプリケーション自体はNATSを使って開発され、実行にはNEXを使うというのが外的な仕様だ。複数のアプリケーションがポーカーのテーブルを保持し、そこに他のアプリケーションがプレイヤーとして参加しメッセージを送ることで、カードの操作を実現している。テーブルを誇示するロビーやプレイヤーの成績(金額)を管理するバンクなどのアプリケーションがそれぞれ通信を行いながら、ポーカーゲーム自体を構成しているという分散アプリケーションの模範例のようなデモアプリケーションだ。
複数のNATSアプリケーションが通信を行いながら、テーブルのカードの状態を保持したり、金額を計算したり、結果をWebページとして表示する機能を実装している。
このアプリケーションを通じてHoffman氏が解説したのは、分散アプリケーションのワークロードからインフラストラクチャーに必要な機能を分解していくよりも、最初に最も難しいインフラストラクチャーでの実装を考えたうえでデータの持ち方やワークロードの分解を考えるべきだという、従来とは逆の発想が必要であるということだ。それを表したのが次のスライドだ。
そしてここからは分散アプリケーションをマルチクラウド、地域分散させたアーキテクチャー例やエッジに分散させた場合の例を挙げて説明を行った。
最後の例ではAIのワークロードをエッジ側で実装したとしてもデータセンターのサーバー上に実装する時と同じ構成が取れることを強調している。
最後にNATSのテクノロジースタックを説明。ここでは下位のNATSがコアとなってメッセージング、ロードバランシング、サービスディスカバリーを担い、JetStreamがストリーミングとキーバリューストアなどの機能を実装し、ランタイムやアプリケーションデプロイメントの外側を担当しているという概念図を解説した。
このセッションでは分散アプリケーション実装のためのフレームワークとして、Pub/Subのメッセージングとシングルバイナリーのランタイムで開発されたNATSとそれを実行するための仕組み、NEXの概要を解説したが、サイドカー構成のサービスメッシュや宣言的で耐障害性の高い分散アプリケーションを実装するKubernetesとの比較がなかったのは残念に感じた。
ちなみにWebAssemblyのランタイム環境としてCosmonicが手掛けるwasmCloudもネットワークの部分にはNATSを使っていることは、CNCFが配信したAdobeとAkamaiの事例に関するWebinarでも紹介している。当該Webinarに関しては以下の記事を参照して欲しい。
●参考:CNCFのWebinarから、AdobeとAkamaiがwasmCloudを解説したセッションを紹介
今回のプレゼンテーターであるKevin Hoffman氏はCosmonicの共同創業者だった人物で、いわばNATSを使って開発をしていたデベロッパーという立場から、wasmCloudが使っているインフラレイヤーのミドルウェアを進化させる役割に立ち位置を変えたということになる。短い時間で途中何度もスクリーンがブラックアウトしてしまうこともあったのはアンラッキーだったといえる。分散アプリケーションを検討しているエンジニアはNATSの持つシンプルなメッセージング機能とNEXを調査の対象にすべきだろう。
●公式サイト(GitHub):https://github.com/nats-io
●Synadiaの公式サイト:https://www.synadia.com
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- KubeCon NA 2021プレカンファレンスのWASM Dayの後半を紹介
- Cloud Native Wasm DayからWebAssemblyのスケジューラーWADMを解説するセッションを紹介
- CNCFのサンドボックスプロジェクトとなったwasmCloudの動画を紹介
- CNCFのWebinarから、AdobeとAkamaiがwasmCloudを解説したセッションを紹介
- CNCFがKubernetesモニタリングのFalcoをサンドボックスとしてホスト開始
- Microsoftがリードするモダンな分散システム用ランタイムDaprとは?
- WasmCon 2023からCosmonicのCEOがコンポーネントモデルを用いたデモを紹介
- KubeCon EU 2022、WebAssemblyでダウンタイムのないアプリ実装を解説するセッションを紹介
- KubeCon EU 2021からセキュアでコンパクトなバイナリーフォーマットWASMのセッションを紹介
- 分散型アプリの開発と運用を分離するOAMとDapr、そしてKubernetes上の実装であるRudrとは?