Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,094 views

Published on

Spring Fest 2019にて講演した資料です。

Published in: Technology
  • Hi there! I just wanted to share a list of sites that helped me a lot during my studies: .................................................................................................................................... www.EssayWrite.best - Write an essay .................................................................................................................................... www.LitReview.xyz - Summary of books .................................................................................................................................... www.Coursework.best - Online coursework .................................................................................................................................... www.Dissertations.me - proquest dissertations .................................................................................................................................... www.ReMovie.club - Movies reviews .................................................................................................................................... www.WebSlides.vip - Best powerpoint presentations .................................................................................................................................... www.WritePaper.info - Write a research paper .................................................................................................................................... www.EddyHelp.com - Homework help online .................................................................................................................................... www.MyResumeHelp.net - Professional resume writing service .................................................................................................................................. www.HelpWriting.net - Help with writing any papers ......................................................................................................................................... Save so as not to lose
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. 1 Quarkus による超音速な Spring アプリケーション開発 Red Hat Chihiro Ito(@chiroito)
  2. 2. 2 スピーカー紹介 伊藤智博(いとうちひろ) @chiroito Middleware Solution Architect OpenJDK Author
  3. 3. 3 Supersonic. Subatomic. Java.
  4. 4. 4 Javaアプリを作成するための オープンソーススタック Cloud Native, Microservices, Serverless
  5. 5. 5 デモ
  6. 6. なぜQUARKUS?
  7. 7. 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. 8. 8 なぜこの痛みを経験するのか? 機敏性、拡張性、迅速なビジネス反応性 コンテナ・プラットフォーム App 1 Data App 2 Data App 3 Data App 4 App 5 Data
  9. 9. ● スループットを考慮した設計 (リクエスト/秒) ● 起動時のオーバーヘッド ○ クラスの数, bytecode, JIT ● メモリオーバーヘッド ○ クラスの数, metadata, コンパイル 9 Java + コンテナについて隠された真実 RSS Java ヒープメタスペース ネイティブコード 内部
  10. 10. 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 + コンテナについて隠された真実
  11. 11. QUARKUSとは何か? QUARK: 素粒子 / US: コンピュータ科学で最も難しいこと
  12. 12. 12 developer joyに最適化された統合プラットフォーム : ● 設定なし、瞬時にライブ再ロード ● 標準に基づくが、制約はない ● 統合された構成 ● 80%の共通使用に対応する合理化されたコード、 20%に対応する柔軟性 ● ネイティブ実行可能ファイルの生成が不要 メリット1: Developer Joy 待って。保存するだけでコードが実行されるの?Javaで?! そうでしょう?勝利のための超音速Java!
  13. 13. 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. 14. 14 メリット2: Supersonic Subatomic Java REST + CRUD Quarkus + Native (GraalVMを使用) 28 MB Quarkus + JDK (OpenJDKを使用) 145 MB 典型的なクラウドネイティブスタック 209 MB Memory RSS
  15. 15. 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. 16. 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. 17. 17 メリット4: 最高の組み合わせのライブラリと標準 Eclipse Vert.x Eclipse MicroProfile Spring Compat Hibernate RESTEasy Apache Camel Kubernetes OpenShift Jaeger Prometheus Apache Kafka Netty
  18. 18. どのように QUARKUS は動くのか
  19. 19. 19 フレームワークが起動時にすること 起動にかかる時間をビルド時間に移動 ● 設定ファイルの解析 ● クラスパスとクラスのスキャン ○ アノテーション、Getter、他のメタデータのため ● フレームワーク・メタモデル・オブジェクトを構築 ● リフレクションの準備とプロキシの構築 ● IO、スレッドなどを開始して開く
  20. 20. 20 起動時に毎回やるのではなく一度だけやる すべてのブートストラップクラスはロードされない 起動時間の短縮、メモリ使用量の削減 リフレクションやダイナミックプロキシを減らす ビルド時間に移動する利点
  21. 21. 21 事前作業, ビルド, ランタイム コンパイル 準備 (収集・整理) 配線と組立 (補強) AOT ネイティブコ ンパイル JDK Hotspot 実行可能イメージ ネイティブ実行 イメージ app.jar frameworks Runnable java app native-app
  22. 22. 22 GraalVMが必要とするメタデータの収集を促進する GraalVMのためにQuarkusが提供する利点 ● フレームワークの知識に基づく ● リフレクション、リソースなどを使用するクラス ● エージェント+事前実行、長いJSONメタデータ、手動のコマンドラインは不要 依存関係の最小化 デッドコードの除去を助ける エコシステムの100%がGraalVM上でサポートされている
  23. 23. 23 JIT - OpenJDK HotSpot いつどちらのVMをQuarkusと使うか 高メモリ密度の要件 メモリや秒あたりの高いリクエスト 速い起動時間 最高レベルのパフォーマンス (CPU) 最高のガベージコレクタ ヒープサイズ使用量の増加 既知の監視ツール 一度コンパイルすればどこでも動く 標準JDKだけで動作するライブラリ AOT - GraalVM native image 最高のメモリ密度要件 メモリや秒あたりの最高のリクエスト 小さなヒープ使用量のため より速い起動時間 サーバレスでは10ms
  24. 24. さらなるQUARKUS 多ければ多いほど良い
  25. 25. 25 @QuarkusTest public class HelloResourceTest { @Inject HelloService service; @Test public void testHelloEndpoint() { assertEquals( "Hello Quarkus", service.greeting("Quarkus") ); } } 速い起動 全て起動 依存性注入 モック GraalVMネイティブイメージテス ト テストを実行する
  26. 26. 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. 27. 27 Open API と Swagger UI メトリクス ヘルスチェック 可観測性
  28. 28. 28 メッセージング: Kafka, AMQP, など
  29. 29. 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. 30. 30 Spring 互換の拡張
  31. 31. 31 あなたの依存関係を追加 私は依存性を追加できますか? ● JVM上で動く (OpenJDK) ● AOT上でも動くかも (GraalVM) 拡張を書こう ● 依存関係を追加するようなもの ● ビルド時間の起動とメモリの改善 ● デッドコードの除去の向上 ● Developer Joy はい
  32. 32. 32 Developer Joy Quarkus のメリット Supersonic Subatomic Java 命令型とリアクティブ型を統合 最高の組み合わせの ライブラリと標準
  33. 33. 発表 Quarkus 1.0 Quarkusを気に入ったら, GitHubで★を付けてね https://github.com/quarkusio/quarkus
  34. 34. 全体的な情報 ● 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
  35. 35. 初心者向けの情報 ● 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
  36. 36. 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. 37. 37 Thank you.
  38. 38. 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 定員まで先着順。定員到達次第抽選です。
  39. 39. Red Hat39 アンケートにご協力よろしくお願いします お手元の紙のQRコード、または https://red.ht/Springfest2019 からフォームへ回答ください ⇨Red Hatロゴグッズをプレゼント!
  40. 40. 40 https://quarkus.io @quarkusio https://quarkusio.zulipchat.com

×