Upgrade to Pro — share decks privately, control downloads, hide ads and more …

仮想スレッド/ネイティブイメージ/CRaC/ノンブロッキングにも対応! msで起動しオンプレか...

Chihiro Ito
November 12, 2023

仮想スレッド/ネイティブイメージ/CRaC/ノンブロッキングにも対応! msで起動しオンプレからサーバレスまで幅広く利用できる 軽量OSSフレームワークQuarkus

Keywords : Virtual Threads / Native Image / CRaC / Non Blocking / Loom / GraalVM / Reactive / Eclipse MicroProfile / Jakarta EE / Spring Boot

Chihiro Ito

November 12, 2023
Tweet

More Decks by Chihiro Ito

Other Decks in Technology

Transcript

  1. Quarkusとは Quarkusは、高性能でありながらも開発効率を高められる フレームワーク & ランタイム Quarkus概要 3 使い慣れたツールを活用できるため開始する コストは低く、開発や運用に必要なツール群や 機能が充実しているため、開発者が本来注力

    すべき活動に注力できる。 開発 & 運用 サーバレスなFaaS、コンテナ、IaaSなど幅広い 環境で動作でき、RDBMSはもちろん さまざまなデータストアと連携できる。 幅広い対応環境 Quarkusは、多くのJava開発者がすぐにアプリ ケーションを開発でき、その成果物をすぐに本 番で実行できる。 アプリケーションフレームワーク 要件に合わせてJava仮想マシンを容易に切り 替えられ、独自のビルドプロセスによるリソー ス使用量の極小化や高速起動に加え、必要 最小限のスレッドをノンブロッキングに処理す ることでCPU効率も向上 性能
  2. Quarkusの起動時のメモリ使用量 4 Source: IDC Lab Validation Report, Sponsored by Red

    Hat Doc. #US46203820, May 2020 Research by Arnal Dayaratna, Research Director, Software Development, IDC https://www.redhat.com/en/blog/key-findings-idc-red-hat-quarkus-lab-validation Quarkus Memory Nativeは、フレー ムワークAと比較して、メモリ使用量 を89%削減しました。 - Quarkus Memory JVMは、フレーム ワークAと比較して、メモリ使用量を 20%削減しました。 最初のリクエスト後のメモリ( RSS)使用量 Source : IDC
  3. スループット 5 Source: IDC Lab Validation Report, Sponsored by Red

    Hat Doc. #US46203820, May 2020 Research by Arnal Dayaratna, Research Director, Software Development, IDC https://www.redhat.com/en/blog/key-findings-idc-red-hat-quarkus-lab-validation スループットと並行ユーザー数の関係 Quarkus JVM Quarkus Native Framework A Source : IDC
  4. MB単位のスループット 6 Source: IDC Lab Validation Report, Sponsored by Red

    Hat Doc. #US46203820, May 2020 Research by Arnal Dayaratna, Research Director, Software Development, IDC https://www.redhat.com/en/blog/key-findings-idc-red-hat-quarkus-lab-validation ピーク負荷でのメモリ使用量 1MBごとの秒間処理数 Source : IDC
  5. ネイティブイメージの起動時間 7 Comparing Native Java REST API Frameworks - JCON

    2023 https://speakerdeck.com/mraible/comparing-native-java-rest-api-frameworks-jcon-2023?slide=67
  6. ネイティブイメージのメモリ使用量 8 Comparing Native Java REST API Frameworks - JCON

    2023 https://speakerdeck.com/mraible/comparing-native-java-rest-api-frameworks-jcon-2023?slide=68
  7. Reactive / Virtual Threads / Blocking の比較 9 ConsiderationsforintegratingvirtualthreadsinaJava framework:aQuarkusexampleina

    resource-constrainedenvironment ,2023/05/31 ArthurNavarro, JulienPonge, FrédéricLeMouël, ClémentEscoffier HALId : hal-04112339 https://inria.hal.science/hal-04112339 良い 悪い 良い 悪い 悪い 良い 良い 悪い スループット 応答時間 メモリ使用量 CPU使用量 図4:リクエストレートに対する遅延、 CPU使用率、RSS、スループットの変化( 遅延なし、デフォルトの仮想スレッドスケジューラを使用) Source : HAL
  8. Reactive / Virtual Threads / Blocking の比較 10 ConsiderationsforintegratingvirtualthreadsinaJava framework:aQuarkusexampleina

    resource-constrainedenvironment ,2023/05/31 ArthurNavarro, JulienPonge, FrédéricLeMouël, ClémentEscoffier HALId : hal-04112339 https://inria.hal.science/hal-04112339 良い 悪い 良い 悪い 悪い 良い 良い 悪い スループット 応答時間 メモリ使用量 CPU使用量 図5:リクエストレートの遅延、 CPU使用率、RSS、スループットの変化( 200msの遅延、デフォルトの仮想スレッドスケジューラを使用した場合) 図4と比べ遅延が増加するとどの様な影響があるかを確認 Source : HAL
  9. 12 Javaアプリケーションが関わる要素の全体像を表現しているだけに過ぎず、 Quarkusを含め各種製品がこれらに対応している訳ではありません。 Quarkus概要 - アプリケーション フレームワーク Java エコシステム の現状と

    Quarkus の立ち位置 Quarkusはアプリケーションフレームワークとランタイムの集合 RHEL, Windows, EC2, Lambda, etc OpenJDK系 Jakarta EE App OS + HW Java仮想マシン フレームワーク アプリケーション IBM JDK系 GraalVM系 MicroProfile Spring Quarkus は流行のサービスだけではなく、既存のオンプレ 環境でも稼働。 さまざまな Java 仮想マシンの中で、Quarkus は OpenJDK と GraalVM 上で稼働。 Jakarta EE (旧Java EE)、Spring と並び、 Quarkus は Java のアプリケーションフレームワーク ユーザが開発するアプリケーション Spring
  10. QuarkusはMicroProfileに準拠、旧来の仕様などにも一部対応し、開発者はすぐに開発できる Quarkus概要 - アプリケーション フレームワーク 13 Spring Web / Data

    / Data REST / Cache / DI / Scheduling / Security に対応。Spring 開発者は即座に開発をはじめられる。 Jakarta EE Spring 従来のJava標準仕様全体には対応してい ない。Servlet や Persistenceなど、MPを補 足する形として対応しており、従来の開発 者もすぐに開発をはじめられる。 Eclipse MicroProfile 現在主流なJavaの標準仕様に対応。多く のJava開発者はすぐに開発をはじめられ る。 対応するアプリケーションフレームワーク 仕様準拠製品例:Helidon / Payara Micro など 仕様準拠製品例:JBoss EAP / Wildfly / WebShpere / OpenLiberty / Interstage / WebOTX / uCosminexus / WebLogic Server / Glassfish / Payara など 完全対応 一部対応 一部対応 Spring
  11. ランタイムの環境構築は要りません Quarkusは実行に必要なファイルを自動でダウンロードし、環境構築工数を大幅に削減 Quarkus概要 - アプリケーション フレームワーク 14 これまでは、開発環境やテスト環境な どでアプリケーションを動かす環境構 築に工数を要した。

    Quarkusはビルド時に、実行に必要な ファイルをダウンロードする。毎回ダウ ンロードは不要で、ファイルはキャッ シュされる。 アプリケーションサーバなどのランタイ ムを事前に用意し、成果物をその上に デプロイする ビルド時に必要なファイルをダウンロー ド。成果物と合わせて Javaがある環境 へコピーするだけで実行できる 従来の方法 Quarkus ソース コード Java ランタイム Java 成果物 war, ear など jar 成果物 ビルド ビルド デプロイ デプロイ
  12. 目的に合わせて選択できるJava仮想マシン アプリケーションを変えずに、システムの要件に合わせてJava仮想マシンを変更可能 Quarkus概要 - 性能 16 Quarkusは要件に合わせてJava仮想 マシンをOpenJDKとGraalVMから選 択できる。これにより、モノリスからク ラウドネイティブまで幅広い分野で利

    用できる。 通常はこちらを選択。特に、 JITコンパ イラによる最高の最適化による処理速 度と、これまでの監視方式が必要な場 合に選択する。ただし、通常の Javaア プリケーションと同じく、起動時間は長 く、起動後しばらくは最適化処理が実 行されることを留意する。 高速な起動時間と、極小なストレージと メモリ使用量が必要な場合に選択す る。最適化がJITコンパイラより劣るた め処理速度がOpenJDKほど速くな い、リフレクションが使えない、これまで の運用方法が使えないなど制限事項 が多く、それらを許容しなければならな い。
  13. 18 Quarkus概要 - 性能 アプリケーションの起動は最速で起動 結果が毎回同じになる初期化処理はビルド時に実行して、起動時間を短縮 @ @ </> パッケージング

    (maven, gradle…) ビルド時 稼働時 設定ファイルを読み、 それを解析 アプリケーションを調査し 必要なクラスを検索。 必要に応じて機能を有効 /無効 にする 実行に必要な オブジェクトのモ デルを構築 管理を開始 (スレッド, プール…) @ @ </> 稼働時 ビルド時 JAR or ネイティブイメージ 一般的な方法 Quarkusの方法 毎回結果が同じ初期化処理はビルド時に実行 起動 起動
  14. 19 Quarkus概要 - 性能 アプリケーションの起動は最速で起動 要件にあわせた方法で実行可能 @ @ </> ビルド時

    JAR or ネイティブイメージ Quarkusの方法 Native JVM ミリ秒後 数百ミリ秒後 数秒後 JVM - CRAC 最初の応答ま での時間
  15. 20 Quarkus概要 - 性能 起動後は瞬時に要求を処理できる 初期化処理を省くことで、起動後に最初に受け付けた要求に即時応答 Quarkus + ネイティブ (GraalVM)

    0.016 秒 REST REST + DB処理 Quarkus + JVM (OpenJDK) 0.943 秒 Quarkus + ネイティブ (GraalVM) 0.042 秒 Quarkus + JVM (OpenJDK) 2.033 秒 伝統的なマイクロサービスフレームワーク +JVM (OpenJDK) 9.5 秒 伝統的なマイクロサービスフレームワーク +JVM (OpenJDK) 4.3 秒
  16. 21 Quarkus概要 - 性能 処理に必要なメモリを極小化 不要な処理やリソースを省くことで省メモリ化を実現 REST REST + DB処理

    28 MB 145 MB 209 MB 12 MB 73 MB 136 MB Quarkus + ネイティブ (GraalVM) Quarkus + JVM (OpenJDK) 伝統的なマイクロサービス フレームワーク + JVM(OpenJDK) = 1MB
  17. 最小限のCPUとメモリ使用量を実現 巨大なスレッドプールを持たず、必要最小限のスレッドとノンブロッキングで実装 Quarkus概要 - 性能 22 Webアプリケーションの処理時間は通 信が多くを占め、CPUを消費する期間 は短い。OS上のCPUを使い切るた め、従来のランタイムでは大量のス

    レッドを作成する。スレッドは、OSと JVM内で多くのメモリを消費し、スレッ ドの切替はOSレベルで行われ、コン テキストスイッチによるCPUの消費も 多い 1つのスレッドが1つのリクエストを処理。DBア クセスなどのI/OによってスレッドがI/O待ちに なり、OSレベルで処理するスレッドを切り替え る。そのため、負荷も高く、リソース使用量が 多い。 1つのスレッドが同時に複数のリクエストを処 理。I/O待ちになると他のリクエストを処理し、 先ほどのI/O待ちが終わると、再び元のリクエ ストを継続する。リクエストの切替はQuarkus が行い、OSレベルでは同一のスレッドを使う。 OSレベルでスレッドの切替がなくなるため、負 荷が低下し、リソース使用量も低い。 これまでの処理方法 Quarkusの処理方法 I/O I/O I/O I/O リクエスト リクエスト リクエスト1 リクエスト1 I/O待ち リクエスト2 I/O待ち リクエスト1 の継続 リクエスト3 I/O待ち リクエスト2 の継続 リクエスト2 リクエスト3
  18. 再読み込 み 25 Dev Services は AMQP, Apicurio Registry, Db2,

    MariaDB, SQL Server, MySQL, Oracle XE, PostgreSQL, , Elasticsearch, Kafka, Kubernetes, Pulsar, RabbitMQ, Redis, Infinispan 生産性を高める開発モードの全体像 さまざまな仕組みが開発を支援し、みなさんの開発生産性を高める 起動 起動・接続 Dev UI Dev Services IDE Quarkusアプリ アプリプロジェクト 開発者 など Db2 Oracle DB XE 開発
  19. 開発生産性を向上 Quarkusは再起動しなくても変更を即時反映し、開発者はすぐに確認できる Quarkus概要 - 開発 & 運用 26 開発期間では修正をすぐに確認した いことがある。たとえ1文字の変更やト

    ライ&エラーであっても、これまでは、 ビルドとその成果物の再デプロイの時 間に多くの時間を費やしていた。 Quarkusでは一瞬で確認できる。 ソースコードを修正した後に、それらを 再ビルドして、ランタイムへ再デプロイ しないと確認できない。規模によって は、ビルドや再デプロイには合わせて 10分弱かかることもある。 Quarkusを開発モードで起動すると、自 動にソースコードの変更を即時に検知 して反映する。これにより、開発者は待 ち時間なく変更を確認できる。 1. 修正&保存 4.確認 2.ビルド 3.再デプロイ(or再起動) 1. 修正&保存 2.確認 これまでの開発 Quarkusの開発
  20. Java開発者はすぐに開発をはじめられ、開発に必要な多くの情報を提供される Quarkus概要 - 開発 & 運用 27 デファクトスタンダードなビルドツールに対 応し、Quarkusに慣れていない開発者も、 はじめやすい

    開発者ツール ビルドツール 開発やデバッグに役立つ情報を確認でき るGUIの開発者ツールを提供。エクステン ションに関する情報も確認できる CLIツール プロジェクトの作成・実行、エクステンション の管理、成果物の作成など、開発に必要な 作業をサポートする機能を提供 開発ツールが開発工程を幅広く支援 (Tech Preview) Gradle はコミュニティサポート
  21. 運用・監視に必要なツール群も提供 運用や監視に使われるデファクトスタンダードに対応し、既存の環境への適用も容易 Quarkus概要 - 開発 & 運用 29 ログ出力機能に加え、準拠する MicroProfile

    が定める健康診 断機能、指標を公開する機能 を提供 情報を提供 依存関係のあるサービスまで 含め、各サービスで処理がい つ開始され、どれくらいの期間 処理され、いつ終わったかを全 て追跡して記録する。 サービス間追跡 主要なログ管理ツールと連携 するエクステンションを提供し、 設定だけでログを集中管理で きる ログ転送 KubernetesやOpenShiftのプ ロセスの健康状況を確認する 機能と連携や、Prometheusの 指標を収集する機能と連携し、 システムの健康状態を監視で きる 情報の連携
  22. さまざまな種類のデータストアに対応 クラウドやオンプレ、古いアーキテクチャや最近のアーキテクチャなど問わず導入し易い Quarkus概要 - 幅広い対応環境 31 さまざまなリレーショナルデータ ベースでテストが行われている ため、さまざまなクラウド上に導 入し易い

    RDBMS メジャーなキュー製品にも対応 しているため、ニアリアルタイム なサービス間連携を求めるシス テムにも導入し易い キュー キャッシュやデータグリッドとし て使われるKVS製品にも対応し ているため、性能を求めるシス テムにも導入しやすい。 KVS 今では広く使われるドキュメント 型にも対応しているため、最近 のアーキテクチャにも導入し易 い ドキュメント型 Db2 Oracle Database PostgreSQL Elasticsearch Infinispan Redis Kafka RabbitMQ
  23. Quarkus概要 - 幅広い対応環境 どこでも実行できるランタイム クラウド(PaaS/IaaS)やコンテナに限らず、どこでも稼働※ 成果物を各社クラウドベン ダーが提供するサーバレス FaaSへデプロイする機能を提 供 クラウド

    成果物をJavaがインストール された仮想マシン上へコピー することで実行できる 仮想マシン(IaaS含む) 成果物をJavaがインストール されたマシン上へコピーする ことで実行できる オンプレミス 成果物を含んだコンテナイ メージの作成やコンテナオー ケストレーションツールへデプ ロイする機能を提供 コンテナ Amazon Web Service Google Cloud Microsoft Azure
  24. linkedin.com/company/red-hat youtube.com/user/RedHatVideos facebook.com/redhatinc twitter.com/RedHat 35 Red Hat is the world’s

    leading provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you Optional section marker or title