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

2025年4月11日(金)
松下 康之 - Yasuyuki Matsushita
KubeCon North America 2024から、NATSベースの分散アプリの実装を解説するセッションを紹介する。

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ということでまだベータの段階と言える。

●参考:Running Workloads on NATS

この公式ドキュメントには、NEXについてNATSのインフラストラクチャーにアプリケーションなどのワークロードを実装する機能を追加するレイヤーだと説明されている通り、デベロッパーがSDKなどを使ってNATSのメッセージング機能を実装するのではなく、運用を行うオペレータがNATSのワークロードを扱えるようにするためのレイヤーということだろう。

セッションの動画は以下を参照して欲しい。

●動画:Nothing but NATS - Going Beyond Cloud Native

セッションを行うHoffman氏(左)とRuth氏(右)

セッションを行うHoffman氏(左)とRuth氏(右)

結論を先に書いてしまえば、このセッションではNEXを「NATSをベースにして分散型アプリケーションをシンプルに実装するミドルウェア」であると解説している。NATSはPub/Subをベースにしたメッセージ交換のミドルウェアだが、そこにJetStreamという信頼性を高めるための機能を追加した上で、コマンドラインなどを使ってアプリケーションを実装可能にしたのがNEXだ。セッションの最後ではアプリケーションが相互に通信を行うデモを見せて、分散アプリケーションをNEXで実装できることを解説している。

分散アプリケーションのためのOSSスタックを紹介

分散アプリケーションのためのOSSスタックを紹介

このスライドでは現代的な分散アプリケーションのためのソフトウェアとして何が存在するのかを紹介。タスク間通信のgRPC、メッセージングのRabbitMQ、キーバリューストアのRedisなどがリストアップされているが、これらのソフトウェアによって実現されている機能は限定的で複雑さを増すだけだと説明。

モダンな分散アプリケーションが必要としている機能の例

モダンな分散アプリケーションが必要としている機能の例

ここで分散アプリケーションが必要としている機能要件について、例を挙げて説明。ここで挙げられている機能はほぼNATSで実装されている機能であると言って良いだろう。問題点を挙げながらターゲットのソフトウェアに実装されている機能だけを紹介して問題を解決しているように見せるのは、多くのITベンダーが取る手法だ。

NATSとは何か? デベロッパー、運用オペレータ、アーキテクト別に解説

NATSとは何か? デベロッパー、運用オペレータ、アーキテクト別に解説

このスライドではここまで挙げてきた問題点についてデベロッパー、運用オペレータ、そしてシステムを設計するアーキテクトそれぞれの役割に応じた利点を挙げ、NATSの特徴を説明している。Kubernetesはオペレータ視点のプラットフォームでデベロッパーには多くの負担をかけ、PaaSはデベロッパー視点のプラットフォームで開発して即座に実装できるのは利点だが、運用サイドから見ればセキュリティや負荷分散などの運用には多くの手間がかかる。

それに対して、NATSを使うことで分散アプリケーションを開発するデベロッパーにはメッセージングベースでシンプルに開発が可能、オペレータにはセキュリティやモニタリングなどの機能を盛り込み、マルチクラウドや地理的に分散したエッジネットワークでの実装設計を行うアーキテクトにも利点があることをここで示している。

ここからNEXの解説へ

ここからNEXの解説へ

ここからNEXそのものの解説になった。NEXはオープンソースのNATS Execution Engineであるとして、アプリケーションを実装するためにMicroVMやWebAssemblyなどのテクノロジーを使っていることを紹介した。

開発環境と本番環境が違うことによって生じる不具合を列挙

開発環境と本番環境が違うことによって生じる不具合を列挙

ここでデベロッパーにとって開発環境と本番環境が違うことで発生するさまざまな問題点を説明。ここではデベロッパーのPCで開発したソフトウェアが本番稼働で動かないことが多々発生することを指摘し、本番環境をシミュレートすることの難しさを解説。特に1対1の通信が絡むアプリケーションにおいては、サービスディスカバリーやロードバランシングを実装するのことが面倒であることを語り、アプリケーション自体を開発するよりもその実行環境を開発マシンに設定することに時間が取られていることを指摘した。

NATSによって開発環境と本番環境の差がなくなる

NATSによって開発環境と本番環境の差がなくなる

前のスライドでは難しさを列挙したが、NATSによってそれらの問題点が解消されることを強調。ここも分散アプリケーションにおける問題点をNATSの機能に沿って解説しているといえる。

NEXのコードを挙げてメッセージ交換の例を説明

NEXのコードを挙げてメッセージ交換の例を説明

ここからはNEXの実行コマンドとソースコードの例を挙げて説明。ただこの後のデモアプリケーションのほうが理解はしやすいだろう。

カウンターを上げていくデモアプリケーションを説明

カウンターを上げていくデモアプリケーションを説明

アプリケーションがメッセージを交換しながらカウンターの数値を増加させていくというシンプルなアプリケーションだが、NEXにはWebサーバーが含まれていることからWebページを表示させてアプリケーションの状態を表示させることが可能というのは興味深い仕組みと言える。

内蔵されたWebサーバーを使ってアプリケーションの値を表示させている

内蔵されたWebサーバーを使ってアプリケーションの値を表示させている

次に紹介したのはオンラインポーカーゲームをNATSで実装したというデモアプリケーションだ。

オンラインポーカーゲームをNATSのメッセージングを使って実装

オンラインポーカーゲームをNATSのメッセージングを使って実装

アプリケーション自体はNATSを使って開発され、実行にはNEXを使うというのが外的な仕様だ。複数のアプリケーションがポーカーのテーブルを保持し、そこに他のアプリケーションがプレイヤーとして参加しメッセージを送ることで、カードの操作を実現している。テーブルを誇示するロビーやプレイヤーの成績(金額)を管理するバンクなどのアプリケーションがそれぞれ通信を行いながら、ポーカーゲーム自体を構成しているという分散アプリケーションの模範例のようなデモアプリケーションだ。

オンラインポーカーゲームをNATSのサービスで記述し、NEXで実装

オンラインポーカーゲームをNATSのサービスで記述し、NEXで実装

NATSポーカーデモの概要

NATSポーカーデモの概要

複数のNATSアプリケーションが通信を行いながら、テーブルのカードの状態を保持したり、金額を計算したり、結果をWebページとして表示する機能を実装している。

このアプリケーションを通じてHoffman氏が解説したのは、分散アプリケーションのワークロードからインフラストラクチャーに必要な機能を分解していくよりも、最初に最も難しいインフラストラクチャーでの実装を考えたうえでデータの持ち方やワークロードの分解を考えるべきだという、従来とは逆の発想が必要であるということだ。それを表したのが次のスライドだ。

分散アプリケーションを下から設計する逆の発想

分散アプリケーションを下から設計する逆の発想

そしてここからは分散アプリケーションをマルチクラウド、地域分散させたアーキテクチャー例やエッジに分散させた場合の例を挙げて説明を行った。

マルチクラウド、地域分散の例。どのインフラでもアプリの構造は同じ

マルチクラウド、地域分散の例。どのインフラでもアプリの構造は同じ

店舗のPOS端末とスマホ経由のECサービスも同様の構造で実装できる

店舗のPOS端末とスマホ経由のECサービスも同様の構造で実装できる

データセンターとエッジの通信も車載システムも同様に同じ構造で分散配備

データセンターとエッジの通信も車載システムも同様に同じ構造で分散配備

最後の例では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

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

連載バックナンバー

クラウドイベント
第9回

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

2025/4/11
KubeCon North America 2024から、NATSベースの分散アプリの実装を解説するセッションを紹介する。
開発ツールイベント
第8回

KubeCon North America 2024から、ローカルPC上でCIを実行することでクラウドコストを激減させるDaggerのセッションを紹介

2025/4/3
KubeCon North America 2024から、ローカルPC上でCIを実行することでコストと時間を削減するDaggerのセッションを紹介する。
クラウドイベント
第7回

KubeCon North America 2024から、P2P決済のCash Appがマルチクラスター実装を解説するセッションを紹介

2025/4/1
KubeCon North America 2024から、P2P決済のCash Appが解説したKubernetesのマルチクラスター実装のセッションを紹介する。

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

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

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

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