Microserviceのためのライブラリ、仕様、VM:helidon, microprofile, graalvm
Code Oneで毎年、Java関連技術の顕著なイノベーションに対して贈られるDuke's Choice Awardという賞があります。これを、今年同時に受賞した「Helidon」と「MicroProfile」というプロジェクトがあります。この2つはともに、近年注目されるマイクロサービスアーキテクチャ(micorservices architecture)に基づくアプリケーションをJavaで開発する上で注目される動きです。また、「GraalVM」も、今後マイクロサービスにおいて重要となると思われる新しい言語実行基盤です。以下ではこの3つに注目し、関連セッションをご紹介したいと思います。
まず、マイクロサービスアーキテクチャに基づくアプリケーションをJavaで開発するためのライブラリHelidonのセッション(Helidon: Java Libraries for Writing Microservices [DEV5539])をご紹介します。
Helidonの発表(DEV5539)と発表者のJoe Dipol氏(氏の画像は同発表の動画より)
Helidonは、マイクロサービスアプリケーションが必要とする機能、例えばリトライやタイムアウトといったフォールトトレランスな挙動、ヘルスチェック、認証といったようなことをサポートします。また、リアクティブなWebサーバを構築するフレームワークも提供します。
前者は主に、Eclipse MicroProfileによる基本的な基盤定義のインプリメンテーションとして作られ、また、後者は主に、Java 9から導入されたReactiveなFlow APIを使い、Nettyのベース上に作られています。前者は「Helidon MP」、後者は「Helidon SE」と呼ばれる異なるエディションとなっていて、この2つは、Helidon SEの上でHelidon MPが動作する関係にあります。
ところで、Helidon MPの基礎となるMicroProfileは2016年にEclipseのプロジェクトとなって以来、ThorntailやApache TomEE、WebSphere Libertyなどの主要な実装に採用されています(参考)。このたびのOracleによるHelidonの登場により、MicroProfileは、Javaによってマイクロサービスアーキテクチャにもとづくシステム構築を行う際の基本基盤定義として、重要な存在になりつつあると言えるかもしれません。
現在Helidon MPはMicroProfile 1.2までに対応済みであり、これは今後MicroProfile2以降へ対応してゆく予定とのことです(現在のMicroProfileの最新版は2.1)。
またHelidonは今後、GraalVMという新しい言語実行基盤との統合も予定されています。つぎはこのGraalVMについてのセッション(GraalVM: Vision and Roadmap [DEV5580])をご紹介します。
GraalVMは、高速、多言語対応などを目指した新しい言語実行基盤です。少ないリソース使用量で高速に起動し、JavaとJavaScript、Ruby、Rを組み合わせて使用するができ、さらにCのようなネイティブ言語も実行できます。また、各言語横断的に使用できる各種ツールがあるなど、多言語での開発に適した様々な工夫がなされています。
このセッションでも紹介されていた「Top 10 Things To Do With GraalVM」に、GraalVMの特色が良くまとめられているので、ぜひこちらもご参照ください。
なお、GraalVMは、現在のJava VMの基本をなすHotSpot VMの上に、新たなJIT CompilerであるGraalが載る構成となっています。従って現在のJava VMと基本となる部分はほぼ共通であり、また、Java VM上にも従来のJITコンパイラであるC2と並んでGraalが搭載されています。そのため、Java 11でプログラムを実行するときに、オプションを指定することでGraalコンパイラを有効にして動作させることもできます。
$ java -XX:+UnlockExperimentalVMOptions \ -XX:+EnableJVMCI \ -XX:+UseJVMCICompiler \ -jar target/benchmarks.jar -prof gc
このように現在のJava VMと密接な関係にあるにも関わらず、あえて別のVMとした理由ははっきりとは示されませんでしたが、GraalVMがHeridonと統合されることからわかるように、GraalVMは、マイクロサービス向けに特化したVMとしてイノベーションを積極的に取り込んでゆく可能性がありそうです。一方でJava VMは、既存のユーザーとの関係を保ちつつ、可能な限り変化を加えてゆくような棲み分けをすることが考えられます。
