You Don't Need Kubernetes to Be Cloud Native
目を引くタイトルの本セッションでは、クラウドネイティブなアプリケーションプラットフォームであるVMware Tanzu Application Service(以下、TAS)の価値が強調されていました。
「クラウドネイティブの文脈でKubernetesがよく登場するが、Kubernetesの導入が必ずしもアプリケーション開発者を超生産的にするわけではない。そもそもアプリケーション開発者の関心事は書いたコードを動かすことであり、それがどこであるかは気にしない。だからこそ、我々は抽象化レイヤにフォーカスしている」
VMwareのNick Kuhn氏はこのようにタイトルの真意について触れました。
そして、その主張を裏付けているのが同社製品のTASです。TASはオープンソースのCloud Foundryをベースとした商用プラットフォームで、開発の一連のプロセスを抽象化し、開発者のエクスペリエンス向上に貢献します。アプリケーションのデプロイメントやスケーリング、ルーティングやロードバランシング、バックエンドとの連携、ロギング、セキュリティ対策などコーディング外の作業を強力に支援します。これにより、アプリケーション開発者はコーディングに集中することができるのです。なお、TASにホスティングされたSpringアプリケーションは、追加費用なしで商用サポートを受けられます。
また、TASではBOSHと呼ばれるインフラのライフサイクルを管理するツールによって、クラウドインフラのプロビジョニングやアップグレード等が高度に自動化され、レジリエントなプラットフォームが持続的に提供されます。これにより,プラットフォームエンジニアリングの効率が大幅に上がるのです。
実際、TASはFortune 100に名を連ねる企業や金融機関等で利用されており、多くの企業がこの堅牢なプラットフォームに投資し続け、成果を上げていることが示されています。
TASを用いたデモでは、Spring Bootアプリケーションのデプロイメントが披露されました。アプリケーションのパッケージング、スケーリング、データベースサービスのバインドなどが容易に実行でき、開発者のワークフローを根本的に変える様子が示されていました。
今後も開発者のエクスペリエンスやプラットフォームエンジニアリングの変革の動きに注視していく必要がありそうです。
Preparing Spring Web Applications for Loom
Java 21で正式導入される仮想スレッドを使用したWebアプリケーションについては、Keynoteでも取り上げられていましたが、長年Tomcatの開発に携わっているMark Thomas氏の本セッションでは、より多面的な検証の結果を含めて詳細に解説されました。
サーブレットは、単純に言えば1リクエストに対してスレッドプール内の1スレッドを割り当てて処理を行う方式を採ってきました。すべてのリクエストにスレッドを割り当ててしまうと、すぐにスレッドが枯渇してしまいます。ノンブロッキングI/Oや非同期I/Oの導入により実際に処理を行っているリクエストのみにスレッドを割り当てるように改善を重ね、現在はスレッドプールのスレッド数以上のリクエストやコネクションを並行で捌くことができるようになっています。とはいえ、すべての処理がOSのスレッド(プラットフォームスレッド)に紐づいたJavaのスレッドで実行されることには変わりはなく、スケーラビリティの面では課題を抱えていました。
一方、仮想スレッドはプラットフォームスレッドとは独立したスケジューラを持つ、より軽量なスレッドです。そのため、リクエストに対して従来のスレッドに代わり仮想スレッドを割り当てることで、少ないプラットフォームスレッドで多数のリクエストを処理できるようになります。
Springにおける仮想スレッド使用時の注意点としては、以下の2点が挙げられます。
-
synchronized:ブロックの中でのブロッキングAPIを使用を避けること-
synchronized:ブロックの中では仮想スレッドがプラットフォームスレッドと紐づけられ、プラットフォームスレッドをブロックしてしまう恐れがあるため
-
-
キャッシュ目的での
ThreadLocalの使用が意味をなさない可能性があること- 仮想スレッドはスレッドプールを持たず、処理の度に生成・破棄されるため
セッションの後半では、仮想スレッドの性能の検証結果が紹介されました。非公式な実験の結果によると、仮想スレッドの使用によってスループットの面では若干の向上が見られた一方、レイテンシがやや増大していたようです。全体的な結論としては、既にノンブロッキングAPIを使用しているアプリケーションではほとんど差が見られないであろう一方、現在ブロッキングAPIを使用しているアプリケーションではスケーラビリティの向上に目に見える効果があるだろうとのことです。
