QUARKUS で作る爆速 Java Micro Service #2
準備
GraalVM のダウンロードとインストール
QUARKUS を利用するには GraalVM が必要になります。ここからダウンロードして適当な場所にインストールします。Mac の場合は graalvm-ce-darwin-amd64–XX.X.X.tar.gz という名称のものを落とします。
/Library/Java/JavaVirtualMachines/graalvm-ce-19.1.1/
GRAAL_VM 環境変数と PATH の設定
環境変数を設定します。19.1.1 をインストールした場合は下記のとおりです。
$ export GRAAL_VM=/Library/Java/JavaVirtualMachines/graalvm-ce-19.1.1/Contents/Home
$ export PATH=$GRAAL_VM/bin:$PATH
ネイティブビルド
Java は通常、Java Vritual Machine が理解できるバイトコードに Java ソースコードをコンパイルして利用します。#1 ではその形態を利用していました。しかし Java では一度起動したらずーっと起動し続けるようなシステムには向いていましたが、オートスケールアップ、オートスケールダウンを前提とするような、例えばコンテナオーケストレーションシステムには向いていませんでした。
しかし、QUARKUS ではコンテナ上で動作する Java を目的にしており、これまで課題だった Java の起動時のメモリや起動時間を解決することができるしかけを用意しています。結論を言うと、Linux (x86_64)用のバイナリコードを生成することができます。docker は Linux を前提として作られたシステムです。
Mac 形式ファイルのビルド
以下のコマンドを打ってみます。
$ mvnw clean package -Pnative
-Pnative オプションでプロファイルを使用して Maven を起動します。オプションを付与しない場合は Maven を稼働させたプラットフォーム(今回は Mac)用のバイナリを生成します。
target ディレクトリに以下のファイルが作成されていることを確認します。
./target/quarkus-samples-1.0-SNAPSHOT-runner
これが Mac で直接実行できる executable ファイルになります。file コマンドでファイルについてみてみます。Mach-0 64-bit executable x86_64 になっているのが確認できます。
Mac 形式ファイルの実行
実際に実行してみましょう。Java と比べて非常に高速に起動することが確認できるかと思います。
$ ./target/quarkus-samples-1.0-SNAPSHOT-runner
以下の警告が出力された場合は、「許可」を選択してください。
メモリも Java と比較するとそれほど消費していません。
REST サービスの確認
http://localhost:8080/hello にアクセスして、ちゃんと動作するか確認してみます。
動作しているのが確認できました。
次回は Docker コンテナ用に Linux executable ファイルとしてビルドしたいと思います。