「Spring Native」ベータ版公開、GraalVMによりSpring FramworkのJava/Kotlinアプリをネイティブイメージにコンパイル。JavaVMに依存せず瞬時に起動可能
Spring Frameworkの開発チームとGraalVMの開発チームは、GraalVMを用いてSpring Frameworkのアプリケーションをネイティブイメージにコンパイルする「Spring Native」がベータ版として公開されたことを発表しました。
Announcing Spring Native Beta! Read the blog post https://t.co/5klXV6kSVB
— SpringCentral (@springcentral) March 11, 2021
and check out the video for more details. #spring #native #graalvm https://t.co/83pI3vNYEr
Spring Native is now in beta!
— GraalVM (@graalvm) March 15, 2021
Join @thomaswue and @sdeleuze as they discuss what is currently possible and what the future holds for @springframework apps compiled with GraalVM Native Image.
Subscribe on Twitch: https://t.co/ScbuyDlnPU pic.twitter.com/jgGFanFAwu
Spring FrameworkはJavaの主要なフレームワークの1つ。AOP(Aspect Oriented Programming:アスペクト指向プログラミング)やDI(Dependency Injection:依存性注入)などを利用できることが大きな特徴の1つです。
GraalVMはオラクルが主導してオープンソースで開発されている多言語対応ランタイム。
JavaをはじめとしてScalaやKotlinなどのいわゆるJavaVM言語を実行可能であることに加えNode.js/JavaScript、Python、Ruby、LLVMのビットコードなど、さまざまなプログラミング言語のランタイムとして利用できます。
さらにコードを事前コンパイルしネイティブバイナリ化しておくことでアプリケーションを高速に起動、実行できる「GraalVM Native Image」機能も含まれています。
今回のSpring Nativeベータ版は、このGraalVM Native Image機能を用いてSpringアプリケーションをコンパイル、ネイティブバイナリ化するというもの。JavaとKotlinのどちらのSpringアプリケーションにも対応しています。
ネイティブバイナリ化によりアプリケーションの実行にJavaVMは必要なくなり、瞬時に起動するようになります。下記は「Announcing Spring Native Beta!」からの引用です。
Those native Spring applications can be deployed as a standalone executable (no JVM installation required) and offer interesting characteristics including almost instant startup (typically < 100ms), instant peak performance and lower memory consumption at the cost of longer build times and fewer runtime optimizations than the JVM.
ネイティブなSpringアプリケーションは、(JVMのインストールは不要で)スタンドアロンの実行ファイルとしてデプロイでき、ほぼ瞬時の起動(通常100ms以下)、瞬時のピークパフォーマンスに到達し小さなメモリ消費で済む、などの興味深い特性を備えていますが、一方でJVMに比べてビルド時間が長く、実行時の最適化が少ないという欠点があります。
ネイティブバイナリ化はGraalVMを使えば簡単なように思えますが、実際にはJavaVMで実行するのとバイナリに変換するのでは下記のような差異があるため、Spring Frameworkの開発チームとGraalVMのチームが協力して問題を解決していく必要があったとのことです。下記も「Announcing Spring Native Beta!」からの引用です。
Native is different from the JVM : the classpath is fixed at build time, configuration is required for reflection or resources for example, there is no class lazy loading (everything shipped in the executable is loaded in memory on startup) and some code can be invoked at build time.
ネイティブはJVMとは異なります。例えばクラスパスはビルド時に固定されてしまい、リフレクションやリソース用のコンフィグレーションも要求され、クラスの遅延ローディングはなく(実行ファイルに同梱されているものはすべて起動時にメモリにロードされる)、一部のコードはビルド時に呼び出されることもあります。
Spring NativeによってSpringアプリケーションのデプロイ方法の選択肢が広がるとともに、軽量かつ起動時間が高速になることでマイクロサービスやサーバレスなどでも活用しやすくなることが期待されます。
あわせて読みたい
マイクロソフト、2021年中にAzureを展開するすべての国のリージョンで「アベイラビリティゾーン」を提供
≪前の記事
オラクルがOracle Autonomous Data Warehouseを強化。SQLを知らないビジネスユーザーでもデータ分析を容易にする自動化とUIなど追加