タグ別アーカイブ: Quarkus

Quarkus MicroProfile Cheat Sheet

このエントリは以下のエントリをベースにしています。
This entry is based on the following one written by John Clingan (Senior Principal Product Manager, Red Hat).
https://microprofile.io/2019/04/22/quarkus-microprofile-cheat-sheet/

QuarkusのMicroProfileサポートに関する質問がstackoverflowに投稿されました。これを見たときに、QuarkusのMicroProfileサポートに関する1枚もののチートシートが必要と感じました。

from Quarkus documentation I can read “Quarkus is made of … Hibernate, RESTEasy, Eclipse Microprofile, etc.”. I have an application which uses Thorntail stack so it’s compatible with Eclipse Microprofile. Is the MicroProfile stack compatible with Quarkus’s stack ? Should I change just the dependencies name, leaving the code untouched ? Thanks

Using Microprofile with Quarkus
https://stackoverflow.com/questions/55791227/using-microprofile-with-quarkus

MicroProfileは仕様の集合体です。SmallRyeはMicroProfile仕様を実装するプロジェクトです。

SmallRye
http://smallrye.io/

一般的に言って、各仕様をサポートするSmallRye GitHubレポジトリがあります。 QuarkusはSmallRyeの実装を使ってMicroProfile仕様を実装しています(smallryeがMavenアーティファクト名に含まれているのはこれが理由です)。Quarkusはこのエントリ執筆時点ではまだBetaですので、互換性の問題が残っています。

SmallRye GitHub Repository
https://github.com/smallrye

例として、下表に記載されているMaven GAV(バージョンを除く)を使って以下のコードを実行すれば、指定したMavenの依存関係をプロジェクトのpom.xmlに追加できます。複数並べる場合、各要素をカンマで区切る必要があります。

mvn quarkus:add-extension -Dextensions="io.quarkus:quarkus-smallrye-metrics,io.quarkus:quarkus-smallrye-health"

まとめると以下のようになりました。

MicroProfile仕様Quarkusの依存関係
(Maven group:artifact)
Developer Guide
CDIio.quarkus:quarkus-archttps://quarkus.io/guides/cdi-reference
JAX-RSio.quarkus:quarkus-resteasyhttps://quarkus.io/guides/rest-client-guide
JSON-Pio.quarkus:quarkus-jsonp
JSON-Bio.quarkus:quarkus-jsonbhttps://quarkus.io/guides/rest-json-guide
Configデフォルトで包含済みhttps://quarkus.io/guides/application-configuration-guide
Rest Clientio.quarkus:quarkus-smallrye-rest-clienthttps://quarkus.io/guides/rest-client-guide
Fault Toleranceio.quarkus:quarkus-smallrye-fault-tolerance
Health Checkio.quarkus:quarkus-smallrye-healthhttps://quarkus.io/guides/health-guide
Metricsio.quarkus:quarkus-smallrye-metricshttps://quarkus.io/guides/metrics-guide
JWT Securityio.quarkus:quarkus-smallrye-jwthttps://quarkus.io/guides/jwt-guide
OpenAPIio.quarkus:quarkus-smallrye-openapihttps://quarkus.io/guides/openapi-swaggerui-guide
OpenTracingio.quarkus:quarkus-smallrye-opentracinghttps://quarkus.io/guides/opentracing-guide
Reactive Streams Operatorsio.quarkus:quarkus-smallrye-reactive-streams-operators
Reactive Messaging (Draft)io.quarkus:quarkus-smallrye-reactive-messaginghttps://quarkus.io/guides/kafka-guide

Next-generation Kubernetes Native Java Framework implements Eclipse MicroProfile

このエントリは以下のエントリをベースにしています。
The original entry, which was written by John Clingan (Senior Principal Product Manager, Red Hat), is accessible via the following URL.
https://microprofile.io/2019/03/07/next-generation-kubernetes-native-java-framework-implements-eclipse-microprofile/

本日、 Quarkus をオープンソースコミュニティに向けて発表しました。アナウンスの中で以下のように述べています。

“Quarkus is a Kubernetes Native Java framework tailored for GraalVM and HotSpot, crafted from best-of-breed Java libraries and standards.”
(QuarkusはGraalVMとHotSpot用に設計されたKubernetes Native Java Frameworkで、最善のJavaライブラリと標準から作られています。)

Quarkus はコンテナやKubernetes、FaaS (Function as a Service) でのJavaアプリケーションの開発および実行のために素晴らしい体験を提供するようデザインされており、そのため、これらの環境に適した機能を提供しています。

Quarkusを使うとJavaアプリケーションの高速な立ち上がりならびに低メモリフットプリントを実現するため、Kubernetes上やFaaSとしてJavaを実行するためにコンテナの集積度を高めることができるだけでなく、Infinispan、RestEasy、Hibernate、Eclipse Vert.x、Netty、Kubernetes、OpenShift、Jaeger、Prometheus、そしてEclipse MicroProfile 2.1の拡張を含むことにより、エンタープライズ向けの機能も備えています。

Eclipse MicroProfileに関して言えば、Quarkus は以下のEclipse MicroProfile 2.1 APIおよびスタンドアロン仕様をサポートしています。

  • Eclipse MicroProfile Config
  • Eclipse MicroProfile OpenTracing
  • Eclipse MicroProfile Metrics
  • Eclipse MicroProfile Fault Tolerance
  • Eclipse MicroProfile Health
  • Eclipse MicroProfile OpenAPI
  • Eclipse MicroProfile JWT Propagation
  • Eclipse MicroProfile REST Client
  • Eclipse MicroProfile Reactive Streams Operators
  • Eclipse MicroProfile Reactive Messaging (Draft Specification)

Quarkus には開発者にうれしい、以下のような多くの機能が含まれています。

  • 統合された構成:すべての構成は1個のファイルで
  • 構成不要でライブリロード:開発者は自身のアプリを再起動せずにコード作成可能
  • 命令型(Imperative)とリアクティブ型(Reactive)プログラミング」の統合
  • ネイティブバイナリ生成で面倒な作業は不要
  • 80%の一般的な使用法向けにコードを合理化し、残りの20%のための柔軟性を提供

Eclipse MicroProfileコミュニティはこの新しい実装にわくわくしており、Quarkusコミュニティとコラボレーションできることを楽しみにしています。

Quarkusについては以下のURLからどうぞ。

Introducing Quarkus: a next-generation Kubernetes native Java framework
https://developers.redhat.com/blog/2019/03/07/quarkus-next-generation-kubernetes-native-java-framework/

Quarkus — Supersonic Subatomic Java
https://quarkus.io/

quarkus (GitHub)
https://github.com/quarkusio/quarkus

Introducing Quarkus: a next-generation Kubernetes native Java framework

このエントリは以下のエントリをベースにしています。
This entry is based on the one by Jason Greene (Quarkus Co-Founder, Distinguished Engineer and Manager, Red Hat).
https://developers.redhat.com/blog/2019/03/07/quarkus-next-generation-kubernetes-native-java-framework/


オープンソースコミュニティにJavaが現れて20年以上が過ぎましたが、いまなお開発者の間では非常に人気があります。事実、TIOBEインデックスの2位を下回ることは一度もありません。Javaは90年代半ばに生まれ、(仮想化)ホストのCPUとメモリの単独所有を前提とした、非常に動的なモノリシックアプリケーションを実行するため、約20年間にわたって最適化されてきました。しかし、私たちは現在、クラウド、モバイル、IoT、そしてオープンソースによって支配される世界にいます。そこでは、コンテナ、Kubernetes、マイクロサービス、リアクティブ、FaaS、12-factor、そしてクラウドネイティブのアプリケーション開発により、より高いレベルの生産性と効率性をもたらすことができます。業界として、これらの新しいデプロイメント環境とアプリケーションアーキテクチャに対処するためにJavaをどのように利用するのが最もよいかを再考する必要があります。

TIOBE Index for March 2019
https://www.tiobe.com/tiobe-index/
12 factor
https://12factor.net/

そこで、Quarkus Supersonic Subatomic Javaをご紹介したいと思います。

QuarkusとはGraalVMとHotSpot用に設計されたKubernetes Native Java Frameworkで、最善のJavaライブラリと標準から作られています。Quarkusの目標は、JavaをKubernetesおよびサーバーレス環境の主要なプラットフォームにすると同時に、幅広い分散アプリケーションアーキテクチャに最適に対処するための統一された反応的で命令的なプログラミングモデルを開発者に提供することです。

Container First

Quarkusを使うと実行時間を大幅に短縮できます(Red Hatによるテストに基づきます)。具体的には以下の機能を提供します。

./my-native-java-rest-app
Quarkus started in 0.008s
  • Fast Startup(数十ミリ秒)により、コンテナおよびKubernetes上のマイクロサービスの自動スケールアップ・ダウンおよびFaaSの即時実行ができる
  • メモリ使用率が低いため、複数のコンテナを必要とするマイクロサービスアーキテクチャの展開でコンテナ密度を最適化できる
  • アプリケーションとコンテナイメージのフットプリントをさらに小さくできる

Unifies Imperative and Reactive

ほとんどのJava開発者は命令型プログラミングモデルに精通しているので、新しいプラットフォームを採用するときにはその経験を利用したいと考えています。と同時に、開発者はビジネス要件に対処するためにクラウドネイティブ、イベント駆動、非同期、およびリアクティブモデルを急速に採用しており、高度な並行処理でレスポンシブなアプリケーションを構築しています。Quarkusは、2つのモデルを同じプラットフォームにシームレスに統合して、組織内で強力に活用できるように設計されています。

Developer Joy

開発者の喜びのために最適化されたまとまりのあるプラットフォームを提供します。

$ mvn package -Pnative
  # or
$gradle quarkus-native
  • すべての設定は単一のプロパティファイルにまとめて管理します
  • 構成不要で、瞬く間にライブでリロードします
  • 80%の一般的な使用法向けにコードを合理化し、残りの20%のための柔軟性をもたらします
  • ネイティブ実行可能ファイルの生成で面倒なことをする必要はありません

Best of Breed Libraries and Standards

Quarkusは、お好みかつ標準的なバックボーンで使う最適なライブラリを活用する、まとまりのある、使いやすい、フルスタックのフレームワークです。ここでバックボーンとはEclipse MicroProfile、JPA/Hibernate、JAX-RS/Hibernete、Eclipse Vert.x、Nettyなどのことです。

Quarkusには、サードパーティのフレームワークの作者が自身のフレームワークを拡張するために活用できる拡張フレームワークも含まれています。Quarkus拡張フレームワークは、サードパーティ製フレームワークをQuarkus上で実行し、GraalVMネイティブバイナリにコンパイルするための複雑さを軽減します。

Summary

上記のことを念頭において設計されているため、Quarkusはサーバーレス、マイクロサービス、コンテナ、Kubernetes、FaaS、およびクラウドというこの新しい世界におけるJava実行のための効果的なソリューションたり得るでしょう。クラウドネイティブのJavaアプリケーションに対するそのcontainer-firstアプローチは、マイクロサービス開発のための命令型および理アクティブ・プログラミングパラダイムを統合し、Javaを使った開発に革命をもたらすことを約束する拡張可能な標準ベースのエンタープライズJavaライブラリおよびフレームワークのセットを提供します。

Quarkusオープンソースコミュニティへのご参加をお待ちしております。Quarkusの改良、サードパーティ製の拡張機能の開発、Quarkusを使用したアプリケーションの開発を継続して支援したいと思ってらっしゃる場合、またはご興味がある場合は、以下のURLからどうぞ。


ということで、Getting Start Guideに従ってちょっとさわってみました。このQuick Startで必要なものは、GraalVM、Mavenです。IDEも必要と書いてありますが、なくてもOKです。GraalVMを使う時点で、Java 8を前提にしていますが、今後Java 11以後の機能が使えるように機能追加されていくことでしょう。

QUARKUS — CREATING YOUR FIRST APPLICATION
https://quarkus.io/guides/getting-started-guide

Mavenでプロジェクトを生成してプロジェクト内を見ると、GreetingResource.javaという、見慣れたJAX-RSのコードが見つかりますが、以下の注記にある通り、Applicationクラスを作成するコードがありません。

With Quarkus there is no need to create an Application class. It’s supported but not required. In addition, only one instance of the resource is created and not one per request. You can configure this using the different *Scoped annotations (ApplicationScoped, RequestScoped, etc).

その他特に詰まるところはないと思います。「必要なコードだけ書けばよい」というのはありがたいことです。

Native Imageを作るチュートリアルもありますが、native-imageコマンドでごにょごにょする部分もMavenにお任せです。

QUARKUS — BUILDING A NATIVE IMAGE
https://quarkus.io/guides/building-native-image-guide.html

macOSの環境では、チュートリアルのアプリケーションのexecutable jarファイルは36KB程度ですが、Nativeイメージのサイズは19MB超…。

Dockerfileはプロジェクト生成時に自動作成されており、Native ImageをDockerイメージにパッケージングすることもできます。

普通にDockerイメージを作成すると125MBになってしまうのですが、もっとサイズを小さくするためのdistrolessバージョンなるものがあるようです。

Distroless base image
https://github.com/quarkusio/quarkus/tree/master/docker/distroless

Dockerfileを書き換えて、 docker build した際のイメージは、37.2MBになりました。環境に依存しますが、当方の環境では起動時間は下図のような感じです。