Mandrel: Red HatのQuarkusビルド用のGraalVMのコミュニティディストリビューション

Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろです。

この記事は、Red Hat Developerのブログ記事、Mandrel: A community distribution of GraalVM for the Red Hat build of Quarkus - Red Hat Developer の翻訳記事です。

https://developers.redhat.com/blog/wp-content/uploads/2020/04/quarkus_logo_vertical_rgb_1280px_default.png

Javaコミュニティは、開発者とユーザーのニーズに合わせて進化、改善、適応する能力を何度も実証してきました。言語とフレームワークの選択に25年を費やした後も、Javaはエンタープライズ・ユース・ケースでの強力な実績と機能により、現在使用されている言語の中で常に上位に位置しています。Red Hatは長い間、Javaおよびオープンソースソフトウェア開発における強力なリーダーであり、進化を続けるJavaの最前線であり続けることを約束してきました。

今日、Red HatとGraalVMコミュニティは共同で、Mandrelと呼ばれるGraalVMの新しいダウンストリームディストリビューションを確立しました。このディストリビューションは、最近発表されRed Hat Runtimesへの追加されたQuarkusのRed Hatビルドに搭載されます。この記事では、Mandrelとは何か、なぜMandrelが必要なのかについて説明します。

今後のJava

Red Hatはここしばらくの間、Javaの将来と、同社の顧客と開発者が長年のJavaの経験を、コンテナマイクロサービスKubernetesといった新しい世界でどのように活用し続けられるかに注目してきました。Javaの経験は言語以外にも適用されます–Hibernate, CDI, RESTEasy, MicroProfile,あるいはEclipse Vertなどのリアクティブフレームワークなど、開発者の身体に深く染み付いたライブラリやフレームワークも数多く含まれています。

Quarkusプロジェクトは2019年に立ち上げられ、Kubernetesとサーバレスという新しい世界でJava開発者に必要な進化のステップを提供しました。要するに、QuarkusはJavaというゲームのルールを変更します。Javaアプリケーションとそれを支えるフレームワークの両方を最適化して、それらがデプロイされる制約のある環境によりよく適合するようにし、 Java初期のアーキテクチャと設計の選択を逆転させます。Quarkusネイティブのアプリケーションは、Kubernetesと同じように、スケーリングと弾力性によって処理されるスループットを犠牲にしても、メモリ使用量を大幅に削減します。また、Kubernetesで分かったように、不変のデプロイメントアーキテクチャでは不要なオーバーヘッドが発生していますが、動的な実行時の動作を犠牲にしても、起動速度を高速化します。

Quarkus と GraalVM

GraalVMはエコシステムであり、Javaを含む様々な言語にパフォーマンス上の利点を提供する共有ランタイムです。非常に最適化されたJavaアプリケーションを作成するために事前のコンパイルを行うことができるため、従来のJVMデプロイメントよりも小さなフットプリントでJavaを実行するのに特に適しています。数年前にGraalVMプロジェクトが紹介されたことで、Quarkusとそれが提供する多くのフレームワークを設計し、このツールで使用できるようにすることは非常に理にかなうことでした。この決定により、Quarkusアプリケーションはさらに最適化され、開発者が使い慣れている豊富なAPIを犠牲にすることなく、シームレスかつ容易に連携できるようになります。GraalVMはQuarkusストーリーの重要な部分となっており、Red Hatはその成功にコミットしています。Red HatはGraalVMプロジェクト諮問委員会のメンバーであり、ネイティブイメージのデバッグ機能の改善、AArch 64ネイティブイメージのサポート、Java Flight Recorder (JFR) のサポートの継続など、GraalVMコミュニティの機能と修正を定期的に提供しています。

Red Hatは最近、私たちの顧客による本番環境での使用についてQuarkusのサポートを発表しました。QuarkusのRed Hatビルドを使用することで、私たちの顧客はKubernetesとサーバーレスアプリケーション用に完全にサポートされ、高度に最適化されたJavaソリューションを手に入れることができます。開発者はGraalVMを使ってQuarkusアプリをネイティブバイナリにコンパイルし、クラウドやKubernetes向けに最適化することもできます。この機能は現在、GraalVMコミュニティと協力してテクニカルプレビューを行っているので、Quarkusを使ってRed Hatの顧客をサポートすることができます。それでは、Mandrelの話に移りましょう。

Mandrel(マンドレル)

Red Hatのオープンソースコミュニティへの献身は、同社のエンタープライズグレードのサポートモデルを支えています。私たちは、オープンソースの革新がRed Hatだけでなく、Red Hatが提供するコミュニティの成功にも不可欠であると確信しています。GraalVMは大きな動きがある大規模なプロジェクトであり、 Red HatやOracle,その他多くのGraalVMコミュニティメンバからのコントリビューションが毎日行われています。

私たちのオープンソースへのコミットメントを守りつつ、顧客をサポートする最良の方法は、アップストリームの対応するものと協調して構築されたダウンストリームのオープンソースディストリビューションを確立することであることがわかりました。FedoraCentOSを使ったLinuxのダウンストリームディストリビューション、OKDを使ったKubernetes、そしてGraalVMのダウンストリームディストリビューションとしてのMandrelがあります。これらのコミュニティは協力して、双方にとって理にかなった方法でオープンソース技術を進化させています。これはまた、Red Hatが 「アップストリーム優先」 の精神で、アップストリームから逸脱しないことを好むように、製品化プロセスにおいてさえ、オープンに革新を続けることを可能にします。

QuarkusにとってGraalVMの重要な部分は、ネイティブ実行可能ファイルを生成するネイティブイメージ機能であり、クラウドネイティブのワークロードでJavaを競争力のあるものにするための重要な機能です。Mandrelを使うと、Red Hat Enterprise Linuxやその他のOpenJDK 11ディストリビューションのOpenJDK 11上にGraalVMをバンドルすることができます。GraalVM側では、リリースのタイミングが必要な場合には、進行中のJava Flight Recorderなどの機能を、 GraalVMよりも早くMandrelでサポートすることができます。したがって、Mandrelは、特別にパッケージ化されたGraalVMネイティブ・イメージを持つ通常のOpenJDKのディストリビューションとして説明するのが最適です。

ユーザにとっての違いは最小限ですが、保守性の面では、 OpenJDK 11とGraalVMの両方を使用したアップストリームのアラインメントが非常に重要です。これは、OpenJDKとGraalVMコミュニティ内で作業している熟練したエンジニアがいるので、Red Hatが顧客により良いサポートを提供できることを意味します。

Mandrelを使うことで、Red Hatの顧客とGraalVMコミュニティの両方が真にオープンな開発から利益を得ることができ、Red Hatは、実証済みのメカニズムで顧客をサポートすると同時に、オープンソースコンピューティングの最先端を前進させ続けるために依存しているアップストリームコミュニティに還元することができます。

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