SlideShare a Scribd company logo
1
Quarkus による超音速な
Spring アプリケーション開発
Red Hat
Chihiro Ito(@chiroito)
2
スピーカー紹介
伊藤智博(いとうちひろ)
@chiroito
Middleware Solution Architect
OpenJDK Author
3
Supersonic. Subatomic. Java.
4
Javaアプリを作成するための
オープンソーススタック
Cloud Native, Microservices, Serverless
5
デモ
なぜQUARKUS?
7
モノリス
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
1 モノリス ≈ 20 マイクロサービス ≈ 200 ファンクション
モノリスから...へ
8
なぜこの痛みを経験するのか?
機敏性、拡張性、迅速なビジネス反応性
コンテナ・プラットフォーム
App 1
Data
App 2
Data
App 3
Data
App 4 App 5
Data
● スループットを考慮した設計 (リクエスト/秒)
● 起動時のオーバーヘッド
○ クラスの数, bytecode, JIT
● メモリオーバーヘッド
○ クラスの数, metadata, コンパイル
9
Java + コンテナについて隠された真実
RSS
Java ヒープメタスペース ネイティブコード 内部
10
コンテナ・プラットフォーム
ノード
NodeJS
NodeJS
NodeJS
NodeJS
NodeJS
NodeJS
NodeJS
ノード
Go Go
Go Go
Go Go
Go Go
Go Go
Go Go
Go Go
ノード
HotSpot ヒープ
HotSpot ヒープ
HotSpot ヒープ
HotSpot ヒープ
Java + コンテナについて隠された真実
QUARKUSとは何か?
QUARK: 素粒子 / US: コンピュータ科学で最も難しいこと
12
developer joyに最適化された統合プラットフォーム :
● 設定なし、瞬時にライブ再ロード
● 標準に基づくが、制約はない
● 統合された構成
● 80%の共通使用に対応する合理化されたコード、
20%に対応する柔軟性
● ネイティブ実行可能ファイルの生成が不要
メリット1: Developer Joy
待って。保存するだけでコードが実行されるの?Javaで?!
そうでしょう?勝利のための超音速Java!
13
メリット2: Supersonic Subatomic Java
Quarkus + Native (GraalVMを使用)
12 MB
Quarkus + JDK (OpenJDKを使用)
73 MB
典型的なクラウドネイティブスタック
Traditional Cloud-Native Stack
136 MB
REST
Memory RSS
14
メリット2: Supersonic Subatomic Java
REST + CRUD
Quarkus + Native
(GraalVMを使用)
28 MB
Quarkus + JDK (OpenJDKを使用)
145 MB
典型的なクラウドネイティブスタック
209 MB
Memory RSS
15
メリット2: Supersonic Subatomic Java
Boot + First Response Time (in seconds)
Quarkus + AOT (GraalVMを使用) 0.016 Seconds
REST
REST + CRUD
Quarkus + JDK (OpenJDKを使用) 0.943 Seconds
Quarkus + AOT (GraalVMを使用) 0.042 Seconds
Quarkus + JDK (OpenJDKを使用) 2.033 Seconds
典型的なクラウドネイティブスタック9.5 Seconds
典型的なクラウドネイティブスタック4.3 Seconds
最初の応答までの時間
16
メリット3: 命令型とリアクティブ型を統合
● 命令型開発とリアクティブ開発の両方を同一アプリケーション内で統合
● ユースケースに適したテクノロジを使用する
● イベント駆動型アプリケーションに基づくリアクティブシステムの重要性
@Inject
SayService say;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return say.hello();
}
@Inject @Stream(”kafka”)
Publisher<String> reactiveSay;
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher<String> stream() {
return reactiveSay;
}
17
メリット4: 最高の組み合わせのライブラリと標準
Eclipse Vert.x Eclipse MicroProfile Spring Compat Hibernate RESTEasy Apache Camel
Kubernetes OpenShift Jaeger Prometheus Apache Kafka Netty
どのように
QUARKUS は動くのか
19
フレームワークが起動時にすること
起動にかかる時間をビルド時間に移動
● 設定ファイルの解析
● クラスパスとクラスのスキャン
○ アノテーション、Getter、他のメタデータのため
● フレームワーク・メタモデル・オブジェクトを構築
● リフレクションの準備とプロキシの構築
● IO、スレッドなどを開始して開く
20
起動時に毎回やるのではなく一度だけやる
すべてのブートストラップクラスはロードされない
起動時間の短縮、メモリ使用量の削減
リフレクションやダイナミックプロキシを減らす
ビルド時間に移動する利点
21
事前作業, ビルド, ランタイム
コンパイル
準備
(収集・整理)
配線と組立
(補強)
AOT ネイティブコ
ンパイル
JDK Hotspot 実行可能イメージ
ネイティブ実行
イメージ
app.jar frameworks Runnable java app native-app
22
GraalVMが必要とするメタデータの収集を促進する
GraalVMのためにQuarkusが提供する利点
● フレームワークの知識に基づく
● リフレクション、リソースなどを使用するクラス
● エージェント+事前実行、長いJSONメタデータ、手動のコマンドラインは不要
依存関係の最小化
デッドコードの除去を助ける
エコシステムの100%がGraalVM上でサポートされている
23
JIT - OpenJDK HotSpot
いつどちらのVMをQuarkusと使うか
高メモリ密度の要件
メモリや秒あたりの高いリクエスト
速い起動時間
最高レベルのパフォーマンス (CPU)
最高のガベージコレクタ
ヒープサイズ使用量の増加
既知の監視ツール
一度コンパイルすればどこでも動く
標準JDKだけで動作するライブラリ
AOT - GraalVM native image
最高のメモリ密度要件
メモリや秒あたりの最高のリクエスト
小さなヒープ使用量のため
より速い起動時間
サーバレスでは10ms
さらなるQUARKUS
多ければ多いほど良い
25
@QuarkusTest
public class HelloResourceTest {
@Inject HelloService service;
@Test
public void testHelloEndpoint() {
assertEquals(
"Hello Quarkus",
service.greeting("Quarkus")
);
}
}
速い起動
全て起動
依存性注入
モック
GraalVMネイティブイメージテス
ト
テストを実行する
26
@Entity
public class Todo extends PanacheEntity {
// id is inherited
public String title;
public boolean completed;
public String url;
public static List<Todo> findNotCompleted() {
return list("completed", false);
}
}
@Path("/api")
public class TodoResource {
@GET
public List<Todo> getAll() {
return Todo.listAll(Sort.by("order"));
}
}
@Entity
public class Todo {
@Id @GeneratedValue public Long id;
public String title;
public boolean completed;
public String url;
}
@ApplicationScoped
public class TodoRepo extends PanacheRepository<Todo> {
public List<Todo> findNotCompleted() {
return list("completed", false);
}
}
@Path("/api")
public class TodoResource {
@Inject TodoRepo repo;
@GET
public List<Todo> getAll() {
return repo.listAll(Sort.by("order"));
}
}
ActiveRecord と Repository パターン
27
Open API と Swagger UI
メトリクス
ヘルスチェック
可観測性
28
メッセージング: Kafka, AMQP, など
29
JWT
Keycloak
ストアを選択する
...
セキュリティ: OIDC, JWT, Keycloak...
@Path(“api”) @Produces(MediaType.TEXT_PLAIN)
public class UsersResource {
@PermitAll
@NoCache
public String publicStuff() {
return “Hello world”;
}
@GET @Path("/admin")
@RolesAllowed("admin")
public String admin() {
return "Secret handshake baby!";
}
}
30
Spring 互換の拡張
31
あなたの依存関係を追加
私は依存性を追加できますか?
● JVM上で動く (OpenJDK)
● AOT上でも動くかも (GraalVM)
拡張を書こう
● 依存関係を追加するようなもの
● ビルド時間の起動とメモリの改善
● デッドコードの除去の向上
● Developer Joy
はい
32
Developer Joy
Quarkus のメリット
Supersonic Subatomic Java
命令型とリアクティブ型を統合 最高の組み合わせの
ライブラリと標準
発表
Quarkus
1.0
Quarkusを気に入ったら, GitHubで★を付けてね
https://github.com/quarkusio/quarkus
全体的な情報
● QUARKUS - GUIDES
○ https://quarkus.io/guides/
● Interactive Learning Portal
○ https://learn.openshift.com/middleware/courses/middleware-quarkus/
● Quarkus Tutorial
○ https://redhat-developer-demos.github.io/quarkus-tutorial
● Quarkusio チャネル
○ https://www.youtube.com/channel/UCaW8QG_QoIk_FnjLgr5eOqg
34
初心者向けの情報
● QUARKUS - GET STARTED
○ https://quarkus.io/get-started/
● Introduction to Quarkus
○ https://learn.openshift.com/middleware/courses/middleware-quarkus/getting-started
● Introduction to Quarkus: "Supersonic Subatomic Java"
○ https://youtu.be/DYcEQs-9sb0
35
Springユーザ向けの情報
● Quarkus for Spring Boot Developers
○ https://learn.openshift.com/middleware/courses/middleware-quarkus/spring
● Using the Quarkus Extension for Spring DI API
○ https://quarkus.io/guides/spring-di
● Using the Quarkus Extension for Spring Web API
○ https://quarkus.io/guides/spring-web
● Using the Quarkus Extension for Spring Data JPA API
○ https://quarkus.io/guides/spring-data-jpa
● Quarkus why, how and what by Emmanuel Bernard
○ https://youtu.be/SQDR34KoC-8
● ToDo アプリケーション
○ https://github.com/chiroito/quarkus-sample/tree/master/spring-todo
36
37
Thank you.
OpenShift.Run 2019 開催決定
OpenShift, Kubernetesに携わる技術者向けイベント
OpenShift.Run
2019
Powered by
OpenShift Japan User Group
#openshiftjp
日時: 2019年12月20日(金) 13:00
(13:30受付開始予定)
会場: イベントスペース「EBiS303」
〒150-0013
東京都渋谷区恵比寿 1-20-8
エビススバルビル 3F
定員: 400 名
主催: Japan OpenShift User Group
参加者: OpenShiftに関わる技術者
OpenShiftに関わるパートナー 他
概要:
•パートナー・スポンサー様 Session 
•Product Session/Technical Tips
•After Party
※予告なく変更になることがあります。
https://www.openshift.run
定員まで先着順。定員到達次第抽選です。
Red Hat39
アンケートにご協力よろしくお願いします
お手元の紙のQRコード、または
https://red.ht/Springfest2019
からフォームへ回答ください
⇨Red Hatロゴグッズをプレゼント!
40
https://quarkus.io
@quarkusio
https://quarkusio.zulipchat.com

More Related Content

PDF
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
PDF
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
PDF
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
PDF
Keycloak拡張入門
PPTX
DeNA の AWS アカウント管理とセキュリティ監査自動化
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
Azure ADとIdentity管理
PPTX
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Keycloak拡張入門
DeNA の AWS アカウント管理とセキュリティ監査自動化
分散トレーシング技術について(Open tracingやjaeger)
Azure ADとIdentity管理
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング

What's hot (20)

PPTX
KeycloakでAPI認可に入門する
PDF
OpenID Connect入門
PDF
TLS 1.3 と 0-RTT のこわ〜い話
PPTX
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
PDF
Mastering kubernetes ingress nginx
PDF
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
L3HA-VRRP-20141201
PDF
Dockerイメージ管理の内部構造
PDF
「これからはじめるNGINX技術解説~基本編」セミナー (NGINX Back to Basic in JP)
PDF
#idcon vol.29 - #fidcon WebAuthn, Next Stage
PDF
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
PDF
OSSを活用したIaCの実現
PPTX
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
PPTX
Spring Boot ユーザの方のための Quarkus 入門
PPTX
Amazon EKS によるスマホゲームのバックエンド運用事例
PPTX
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
KeycloakでAPI認可に入門する
OpenID Connect入門
TLS 1.3 と 0-RTT のこわ〜い話
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
Mastering kubernetes ingress nginx
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
L3HA-VRRP-20141201
Dockerイメージ管理の内部構造
「これからはじめるNGINX技術解説~基本編」セミナー (NGINX Back to Basic in JP)
#idcon vol.29 - #fidcon WebAuthn, Next Stage
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
OSSを活用したIaCの実現
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Spring Boot ユーザの方のための Quarkus 入門
Amazon EKS によるスマホゲームのバックエンド運用事例
IDaaS を利用すべき理由とエンジニアがおさえておくべきポイント (2021年1月14日)
Ad

Similar to Quarkus による超音速な Spring アプリケーション開発 (20)

PDF
Quarkus入門
PPTX
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
PDF
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
PPTX
Spring I/O 2015 報告
PDF
Java EE から Quarkus による開発への移行について
PDF
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
PPTX
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
PDF
Quarkus Technical Deep Dive - Japanese
PDF
Spring3.1概要x di
KEY
関ジャバ JavaOne Tokyo 2012報告会
PPTX
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
PPTX
JavaOne 2016 Report for Java EE
PDF
Jjug springセッション
PDF
Javaで1から10まで書いた話(sanitized)
PDF
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
PPTX
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
Cloud Foundry: Open Platform as a Service
PDF
Spring Framework ふりかえりと4.3新機能
Quarkus入門
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2015 報告
Java EE から Quarkus による開発への移行について
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
Quarkus Technical Deep Dive - Japanese
Spring3.1概要x di
関ジャバ JavaOne Tokyo 2012報告会
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
JavaOne 2016 Report for Java EE
Jjug springセッション
Javaで1から10まで書いた話(sanitized)
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Node.jsアプリの開発をモダン化するために取り組んできたこと
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Cloud Foundry: Open Platform as a Service
Spring Framework ふりかえりと4.3新機能
Ad

More from Chihiro Ito (13)

PDF
Red Hat Data Grid 8.2 新機能
PDF
Red Hat Data Grid 8.1 新機能
PDF
Advanced database monitoring in modern java
PDF
システムのモダナイズ 落ちても良いアプリの作り方
PDF
Quarkusのビジネスと技術的な価値
PDF
Oracle code one 2018 報告会概要
PDF
Getting started MySQL as Document Data Store
PDF
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
PDF
Hello Java
PDF
Java Flight Recorderの紹介 at Java Day Tokyo 2015
PDF
JPAのキャッシュを使ったアプリケーション高速化手法
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PDF
JDKツール使ってますか
Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.1 新機能
Advanced database monitoring in modern java
システムのモダナイズ 落ちても良いアプリの作り方
Quarkusのビジネスと技術的な価値
Oracle code one 2018 報告会概要
Getting started MySQL as Document Data Store
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Hello Java
Java Flight Recorderの紹介 at Java Day Tokyo 2015
JPAのキャッシュを使ったアプリケーション高速化手法
Javaはどのように動くのか~スライドでわかるJVMの仕組み
JDKツール使ってますか

Quarkus による超音速な Spring アプリケーション開発