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

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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy