Announcing GraalVM support in Azure SDK for Java and Spring Cloud Azure libraries

原文はこちら。
The original article was written by Jonathan Giles (Principal Software Architect, Azure SDK, Microsoft).
https://devblogs.microsoft.com/azure-sdk/announcing-graalvm-support-in-azure-sdk-for-java-and-spring-cloud-azure-libraries/

Azure SDK for JavaとSpring Cloud Azureチームは、クライアントライブラリでGraalVMを利用可能にしたことを発表します。高性能なPolyglot VMであるGraalVMは、Javaを含む複数のプログラミング言語で書かれたアプリケーションの実行を可能にします。

Azure SDK for Java
https://github.com/Azure/azure-sdk-for-java
GraalVM
https://graalvm.org

GraalVMの主要な特徴の1つは、AOT (Ahead-of-Time) コンパイルのサポートで、場合によっては、従来のJIT (Just In Time) コンパイルと比較して、起動時間の短縮やランタイムパフォーマンスの向上を可能にします。Azureのようなクラウドプラットフォームを利用する開発者にとって、パフォーマンスは特に重要です。Azureのデプロイメントは極限までスケールできますが、大量のリクエストと高速なレスポンスタイムが命題となります。GraalVM を Azure SDK for Java に組み込むことで、開発者は AOT コンパイルの利点を活用し、Azure の顧客の要求と期待に応える高性能で低レイテンシーのアプリケーションを提供できます。

この新機能は、クラウドベースのアプリケーションを構築するための包括的なツールセットを提供するというコミットメントの下、Azure SDK for Javaを強化するものです。このGraalVMのAzure SDK for Javaへの統合は大きな前進であり、開発者はAOTコンパイルのパワーを使い、クラウドプラットフォームの要求に応え、Azure上で高性能なJavaアプリケーションをビルド、デプロイ出来るようになりました。

私たちは、この18ヶ月間、GraalVMのサポート強化に取り組んできました。Azure SDK for Javaチームは、私たちのライブラリでGraalVMをサポートするための多くの方法を検討し、最終的に、今日皆様に提供できるものに満足しています。特に、Azure SDK for Java GraalVMのサポートは、エンドユーザーに余分な依存関係やコードの変更を強いるものではありません。Spring Cloud Azureについては、当初、GraalVMネイティブコンパイルの実験的なサポートがSpring Nativeプロジェクトを通じて実現されていました。Spring Boot 3とSpring 6では、ネイティブイメージのサポートはSpring Cloud Azure内のコア機能として利用できるようになりました。Spring Cloud Azure 5.xはSpring Boot 3と互換性があり、ネイティブイメージのサポートはSpring Cloud Azure 5.1.0にあります。

Get started

Install GraalVM and Native Image

まずは、GraalVMをインストールし、ネイティブイメージをコンパイルするために開発システムを準備する必要があります。GraalVMのインストールプロセスは簡単で、GraalVMのドキュメントには、GraalVMのインストールとGraalVMを使用してネイティブイメージをインストールするためのステップバイステップの指示が記載されています。前提条件に注意深く従い、お使いのOSに必要なネイティブコンパイラをインストールします。

Get Started with GraalVM
https://graalvm.org/latest/docs/getting-started/
Getting Started
https://graalvm.org/latest/reference-manual/native-image/

GraalVMをインストール後、MavenまたはGradleを構成する必要があり、ビルドスクリプトの変更が必要です。Azure SDK for Java用のMavenとGradleビルドのセットアップについては、Azure SDK for Java docサイトにドキュメントがあります。Azure SDK for JavaとAzure Spring Cloudライブラリの最新リリースには、必要なすべてのGraalVMメタデータが付属しています。プロジェクトファイルに余分な依存関係を追加する必要はありません。MavenとGradleの説明は、GraalVMのWebサイトにあります。

Azure SDK for Java documentation
https://learn.microsoft.com/azure/developer/java/sdk/
Get started with Azure SDK and Apache Maven
https://learn.microsoft.com/azure/developer/java/sdk/get-started-maven
Get started with Azure SDK and Gradle
https://learn.microsoft.com/azure/developer/java/sdk/get-started-gradle
Maven plugin for GraalVM Native Image building
https://graalvm.github.io/native-build-tools/latest/maven-plugin.html
Gradle plugin for GraalVM Native Image building
https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html

新プロジェクトを開始する場合、Azure SDK for Java Maven archetypeを使用すると、GraalVMをサポートするプロジェクトが自動的に作成されます。

Get started with Azure SDK and Apache Maven
https://learn.microsoft.com/azure/developer/java/sdk/get-started-maven#create-a-new-maven-project

これでネイティブイメージでのビルドの準備ができました。標準的なMavenもしくはGradleツールを利用できますが、GraalVMのツールにアクセスするには、前章で指定されたフラグを含める必要があります。Mavenの場合は以下のコマンドを使います。

mvn clean package -Pnative

Gradleの場合はこちらです。

gradle nativeCompile

上記のコマンドのいずれかを実行すると、GraalVMは、実行しているプラットフォーム用のネイティブ実行ファイルを生成します。Maven /targetまたはGradle build/native/nativeCompileディレクトリに現れます。この実行可能ファイルを使ってアプリケーションを実行できます。それは標準的なJavaアプリケーションと同様に動作するはずです。

Samples

すぐに始められるように、Azure SDK for JavaとSpring Cloud Azureチームは、GraalVMとAzure SDK for Javaで何ができるのかを示すいくつかのエンド・ツー・エンドのサンプルを作成しました。これらのサンプルは、以下の2つのリンクからアクセスできます。

Azure SDK for JavaのサンプルGitHubのsampleディレクトリ
https://github.com/Azure/azure-sdk-for-java/tree/main/samples
Spring Cloud AzureのサンプルSpring Cloud Azure Samples
https://github.com/Azure-Samples/azure-spring-boot-samples#introduction-to-maven-profiles

GraalVM implications

GraalVMは、特定の種類のアプリケーションに大きな性能上の利点をもたらす可能性を持っています。GraalVMを利用することで、高速で応答性が高く、軽量で低レイテンシのアプリケーションを開発できます。しかし、GraalVMが常に理想的なソリューションを提供するとは限らない点を認識することが極めて重要です。場合によっては、GraalVMで構築されたネイティブイメージは、JITコンパイルされたJavaアプリケーションよりもパフォーマンスが低下することがあります。したがって、両デプロイ方法について実世界でのテストを実施することが不可欠です。

GraalVMアプリケーションの信頼性を確保するために、最近追加されたJUnitテストのネイティブコンパイルのサポートを活用することから始めるとよいでしょう。

Gradle and Maven plugins for Native Image with initial JUnit testing support
https://medium.com/graalvm/gradle-and-maven-plugins-for-native-image-with-initial-junit-testing-support-dde00a8caf0b
https://logico-jp.io/2021/06/17/gradle-and-maven-plugins-for-native-image-with-initial-junit-5-testing-support/

プロジェクトでJUnitを使用している場合、ユニットテストをネイティブコンパイルし、実行することを検討してください。JUnit を使用することで、ネイティブコンパイルされたアプリケーションが期待通りに機能し続けるという信頼性を高めることができます。Azure SDKチームは、実装を検証し、問題を早期に発見するために、いくつかの継続的インテグレーションパイプラインを確立しています。

コードが意図したとおりに動作することを確認したら、ネイティブいイメージアプリケーションがアプリケーションに与える影響を検証すべきでしょう。動的な動作、ロギングインフラ、設定サポートなどを確認し、アプリケーションが期待通りに動作し続けることを確認する必要があります。さらに、ランタイムプロファイリングやデバッグなど、ネイティブコンパイルされたアプリケーションのさまざまな特性を理解する必要があります。

最後に、GraalVM Community Editionは、使用可能な唯一のGCとしてシリアルGCを同梱しています。GraalVMメモリ管理ドキュメントを慎重に読み取り、GraalVMがソフトウェアに及ぼす可能性のある影響を理解する必要があります。シリアルGCは、少ないメモリの使用と小さなJavaヒープサイズに最適化されているため、その動作の徹底的な理解が不可欠です。

Memory Management
https://graalvm.org/latest/reference-manual/native-image/optimizations-and-performance/MemoryManagement/

Conclusion

Azure SDK for JavaとSpring Cloud AzureライブラリをGraalVMとともに使用すると、開発者は高性能で低遅延なアプリケーションを作成できる可能性があります。Javaコードをネイティブイメージにコンパイルする機能を持つGraalVMは、軽量でありながら、より高速で応答性の高いアプリケーションを作成することができます。今すぐ試して、その利点をご自身の目で確かめてください。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中