Zademy

Quarkus:マイクロサービス向けJavaフレームワーク

Java; Quarkus; Microservicios
words 単語

最近マイクロサービス周りを調べていて、Quarkusが気になっています。Spring Boot一択ではない、クラウドネイティブ前提の選択肢として面白そうだからです。

Quarkusとは?

KubernetesネイティブなJavaフレームワークです。設計段階からコンテナとKubernetesを前提にしていて、起動がミリ秒単位、メモリ消費もかなり少ない。マイクロサービスと相性がいいのはそういう理由です。

何が違うのか

パフォーマンス面では、GraalVMのAhead-of-Time(AOT)コンパイルでネイティブバイナリを生成できます。起動時間がミリ秒、メモリも従来のJVMアプリケーションと比べて格段に少ない。サーバーレスやオートスケーリングを前提にすると、この差は無視できません。

開発面では、ライブリロードが効きます。コードを保存すれば即座に反映されるので、再起動の手間がいりません。ホットデバッグも使えるし、Dev UIでエンドポイントの動作確認もできます。Spring BootのDevToolsに近い感覚で書けます。

エコシステムも揃っています。Jakarta EE標準に準拠しているので、JAX-RSやCDI、JPAの知識がそのまま通じる。データベース、メッセージング、セキュリティの拡張機能も公式で提供されています。

マイクロサービスで選ぶ理由

デプロイサイズが小さい。ネイティブバイナリにするとコンテナイメージが数MBで済むこともあります。起動が速いので、サーバーレス環境でのコールドスタートも許容範囲に入る。メモリとCPUの使用量が少ないので、クラウドのコストに直結します。

基本的な例

@Path("/hello")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello from Quarkus REST";
    }
}

JAX-RSのアノテーションそのままですね。Spring MVCに慣れていると違和感があるかもしれませんが、標準仕様なので一度覚えれば他の実装でも通用します。

開発の生産性を保ったまま、クラウドでのパフォーマンス要件を満たす。Quarkusはそこを真面目に狙っています。Spring Bootで困っていないなら無理に替える必要はありませんが、新規でマイクロサービスを始めるなら一度触ってみてほしいフレームワークです。