$30 off During Our Annual Pro Sale. View Details »

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

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

    View Slide

  2. 自己紹介
    伊藤ちひろ (Chihiro Ito)
    日本Javaユーザグループ 幹事
    OpenJDK コミッタ
    Quarkus Contributor
    Java Platform Advocate @ Red Hat
    自己紹介
    Profile
    @chiroito

    View Slide

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

    View Slide

  4. 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

    View Slide

  5. スループット
    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

    View Slide

  6. 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

    View Slide

  7. ネイティブイメージの起動時間
    7
    Comparing Native Java REST API Frameworks - JCON 2023
    https://speakerdeck.com/mraible/comparing-native-java-rest-api-frameworks-jcon-2023?slide=67

    View Slide

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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 11
    Quarkus概要
    アプリケーション
    フレームワーク

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

  14. ランタイムの環境構築は要りません
    Quarkusは実行に必要なファイルを自動でダウンロードし、環境構築工数を大幅に削減
    Quarkus概要 - アプリケーション フレームワーク
    14
    これまでは、開発環境やテスト環境な
    どでアプリケーションを動かす環境構
    築に工数を要した。
    Quarkusはビルド時に、実行に必要な
    ファイルをダウンロードする。毎回ダウ
    ンロードは不要で、ファイルはキャッ
    シュされる。 アプリケーションサーバなどのランタイ
    ムを事前に用意し、成果物をその上に
    デプロイする
    ビルド時に必要なファイルをダウンロー
    ド。成果物と合わせて Javaがある環境
    へコピーするだけで実行できる
    従来の方法 Quarkus
    ソース
    コード
    Java
    ランタイム
    Java
    成果物
    war, ear など
    jar
    成果物
    ビルド
    ビルド
    デプロイ
    デプロイ

    View Slide

  15. 15
    Quarkus概要
    性能

    View Slide

  16. 目的に合わせて選択できるJava仮想マシン
    アプリケーションを変えずに、システムの要件に合わせてJava仮想マシンを変更可能
    Quarkus概要 - 性能
    16
    Quarkusは要件に合わせてJava仮想
    マシンをOpenJDKとGraalVMから選
    択できる。これにより、モノリスからク
    ラウドネイティブまで幅広い分野で利
    用できる。 通常はこちらを選択。特に、 JITコンパ
    イラによる最高の最適化による処理速
    度と、これまでの監視方式が必要な場
    合に選択する。ただし、通常の Javaア
    プリケーションと同じく、起動時間は長
    く、起動後しばらくは最適化処理が実
    行されることを留意する。
    高速な起動時間と、極小なストレージと
    メモリ使用量が必要な場合に選択す
    る。最適化がJITコンパイラより劣るた
    め処理速度がOpenJDKほど速くな
    い、リフレクションが使えない、これまで
    の運用方法が使えないなど制限事項
    が多く、それらを許容しなければならな
    い。

    View Slide

  17. 17
    目的に合わせて選択できるJava仮想マシン
    アプリケーションを変えずに、システムの要件に合わせてJava仮想マシンを変更可能

    View Slide

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

    View Slide

  19. 19
    Quarkus概要 - 性能
    アプリケーションの起動は最速で起動
    要件にあわせた方法で実行可能
    @
    @
    >
    ビルド時
    JAR or
    ネイティブイメージ
    Quarkusの方法 Native
    JVM
    ミリ秒後
    数百ミリ秒後
    数秒後
    JVM - CRAC
    最初の応答ま
    での時間

    View Slide

  20. 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 秒

    View Slide

  21. 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

    View Slide

  22. 最小限の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

    View Slide

  23. Quarkus概要 - 性能
    23
    ノンブロッキングの仕組み
    アプリケーション開発者はノンブロッキングを意識する必要はありません
    イベントを
    ポーリング
    処理を探して
    実行
    交代
    交代 Virtual
    Thread

    View Slide

  24. 24
    Quarkus概要
    開発 & 運用

    View Slide

  25. 再読み込

    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
    開発

    View Slide

  26. 開発生産性を向上
    Quarkusは再起動しなくても変更を即時反映し、開発者はすぐに確認できる
    Quarkus概要 - 開発 & 運用
    26
    開発期間では修正をすぐに確認した
    いことがある。たとえ1文字の変更やト
    ライ&エラーであっても、これまでは、
    ビルドとその成果物の再デプロイの時
    間に多くの時間を費やしていた。
    Quarkusでは一瞬で確認できる。
    ソースコードを修正した後に、それらを
    再ビルドして、ランタイムへ再デプロイ
    しないと確認できない。規模によって
    は、ビルドや再デプロイには合わせて
    10分弱かかることもある。
    Quarkusを開発モードで起動すると、自
    動にソースコードの変更を即時に検知
    して反映する。これにより、開発者は待
    ち時間なく変更を確認できる。
    1. 修正&保存
    4.確認
    2.ビルド
    3.再デプロイ(or再起動)
    1. 修正&保存
    2.確認
    これまでの開発 Quarkusの開発

    View Slide

  27. Java開発者はすぐに開発をはじめられ、開発に必要な多くの情報を提供される
    Quarkus概要 - 開発 & 運用
    27
    デファクトスタンダードなビルドツールに対
    応し、Quarkusに慣れていない開発者も、
    はじめやすい
    開発者ツール
    ビルドツール
    開発やデバッグに役立つ情報を確認でき
    るGUIの開発者ツールを提供。エクステン
    ションに関する情報も確認できる
    CLIツール
    プロジェクトの作成・実行、エクステンション
    の管理、成果物の作成など、開発に必要な
    作業をサポートする機能を提供
    開発ツールが開発工程を幅広く支援
    (Tech Preview) Gradle はコミュニティサポート

    View Slide

  28. 開発環境
    開発者は、好みの開発環境で開発できる
    Quarkus概要 - 開発 & 運用
    28
    VSCode che.openshift.io
    IntelliJ
    Eclipse

    View Slide

  29. 運用・監視に必要なツール群も提供
    運用や監視に使われるデファクトスタンダードに対応し、既存の環境への適用も容易
    Quarkus概要 - 開発 & 運用
    29
    ログ出力機能に加え、準拠する
    MicroProfile が定める健康診
    断機能、指標を公開する機能
    を提供
    情報を提供
    依存関係のあるサービスまで
    含め、各サービスで処理がい
    つ開始され、どれくらいの期間
    処理され、いつ終わったかを全
    て追跡して記録する。
    サービス間追跡
    主要なログ管理ツールと連携
    するエクステンションを提供し、
    設定だけでログを集中管理で
    きる
    ログ転送
    KubernetesやOpenShiftのプ
    ロセスの健康状況を確認する
    機能と連携や、Prometheusの
    指標を収集する機能と連携し、
    システムの健康状態を監視で
    きる
    情報の連携

    View Slide

  30. 30
    Quarkus概要
    幅広い対応環境

    View Slide

  31. さまざまな種類のデータストアに対応
    クラウドやオンプレ、古いアーキテクチャや最近のアーキテクチャなど問わず導入し易い
    Quarkus概要 - 幅広い対応環境
    31
    さまざまなリレーショナルデータ
    ベースでテストが行われている
    ため、さまざまなクラウド上に導
    入し易い
    RDBMS
    メジャーなキュー製品にも対応
    しているため、ニアリアルタイム
    なサービス間連携を求めるシス
    テムにも導入し易い
    キュー
    キャッシュやデータグリッドとし
    て使われるKVS製品にも対応し
    ているため、性能を求めるシス
    テムにも導入しやすい。
    KVS
    今では広く使われるドキュメント
    型にも対応しているため、最近
    のアーキテクチャにも導入し易

    ドキュメント型
    Db2
    Oracle
    Database
    PostgreSQL
    Elasticsearch
    Infinispan Redis Kafka RabbitMQ

    View Slide

  32. Quarkus概要 - 幅広い対応環境
    どこでも実行できるランタイム
    クラウド(PaaS/IaaS)やコンテナに限らず、どこでも稼働※
    成果物を各社クラウドベン
    ダーが提供するサーバレス
    FaaSへデプロイする機能を提

    クラウド
    成果物をJavaがインストール
    された仮想マシン上へコピー
    することで実行できる
    仮想マシン(IaaS含む)
    成果物をJavaがインストール
    されたマシン上へコピーする
    ことで実行できる
    オンプレミス
    成果物を含んだコンテナイ
    メージの作成やコンテナオー
    ケストレーションツールへデプ
    ロイする機能を提供
    コンテナ
    Amazon Web Service
    Google Cloud
    Microsoft Azure

    View Slide

  33. 33
    Quarkus概要
    Quarkusをはじめよう

    View Slide

  34. Quarkus概要 - Quarkusをはじめよう
    Quakus をはじめよう
    さまざまな情報を提供し、今すぐにでも、はじめられます
    https://ja.quarkus.io/guides/
    Quarkusガイド
    https://code.quarkus.io/
    スタートページ

    View Slide

  35. 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

    View Slide