Quarkusリリース

Red HatでOpenShiftのサポートをしているid:nekopです。3年前くらいまでJBoss Middlewareを主に担当していたので久しぶりなサーバサイドJavaネタとなるのですが、QuarkusというKubernetesネイティブJavaアプリケーションフレームワークをリリースしました。

quarkus.io

f:id:nekop:20190314154116p:plain

読み方は「くぉーかす」です。キャッチコピーがSupersonic Subatomic Javaとなっているように、高速軽量コンパクトなランタイムがウリです。また、コンテナ化やクラスのHot reloading対応などの開発容易性も備えています。

現在ではJava EEのアプリケーションサーバ上へのパッケージ化されたアプリケーションのデプロイ、Spring Bootなどに代表されるfat jarを利用したよりモダンなデプロイの2つのデプロイ形態が広く利用されていますが、その次の世代となる軽量なバイナリを生成するネイティブコンパイル可能なデプロイ形態です。

サーバサイドアプリケーションはKubernetes上での実行に対応することを求められるようになってきていますが、KubernetesやFaaSといった実行プラットフォームにデプロイする場合に、通常のJava VMの起動時のCPUの利用量の大きさ、必要なメモリ量の大きさ、バイナリのサイズなどのオーバヘッドはかなり大きなペナルティとなってしまい、結果としてJavaが敬遠されてGoなどの他言語が採用される状況も増えてきました。この課題を解決するために誕生したのがQuarkusです。より詳細な背景についてはEmmanuelのWhy Quarkusというブログエントリに記述されています。

in.relation.to

従来のJava EEやSpring BootアプリなどではJava VMとライブラリとアプリで最小130MB程度、実用アプリだと200MBなどとなってしまっていました。Quarkusのgetting-startedをnativeコンパイルしたときに生成されるシングルバイナリのサイズは20MB程度です。このバイナリには標準のJava VMとは異なるVM実装であるSubstrate VMというものが含まれており、動作に別途Java VMがインストールされている必要はありません。このあたりについての詳細はGraalVMのドキュメントAhead-of-time Compilationを参照してください。バイナリサイズの他にランタイムの起動速度、CPU利用量、メモリ利用量などもJava VMに比較するとほとんどの場合で数倍改善されています。

既に日本語でも以下の代表的な記事のほか、多くの紹介記事が出ています。このブログでも技術詳細などについて引き続きアップデートしていこうと思います。

また、Quarkusのリリースに伴い、fat jar形式のランタイムを提供するThorntailの次期メジャーバージョン4.xの開発は終了となりました。Thorntail 2.xについては引き続きメンテナンスは行われる予定です。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。