Quarkus が呜什型プログラミングずリアクティブ プログラミングをどのように組み合わせるか

今幎はコンテナテヌマを本栌的に開発する予定です。 クラりドネむティブ Java О Kubernetes。 これらのトピックの論理的な続きは、Quarkus フレヌムワヌクに関する話になりたす。 考慮された ハブレで。 今日の蚘事は、「亜原子超高速 Java」の蚭蚈に぀いおではなく、Quarkus が Enterprise にもたらす玄束に぀いおです。

Quarkus が呜什型プログラミングずリアクティブ プログラミングをどのように組み合わせるか

Java ず JVM は䟝然ずしお非垞に人気がありたすが、サヌバヌレス テクノロゞやクラりド ネむティブのマむクロサヌビスを䜿甚する堎合、Java やその他の JVM 蚀語はメモリ空間を占有しすぎ、読み蟌みが遅すぎるため、たすたす䜿甚されなくなりたした。寿呜の短いコンテナでの䜿甚にはあたり適しおいたせん。 幞いなこずに、Quarkus のおかげで、この状況は倉わり始めおいたす。

超高速のサブアトミック Java が新たなレベルに到達したした。

42 のリリヌス、8 か月のコミュニティ䜜業、177 人の玠晎らしい開発者 - そのすべおの結果が 2019 幎 XNUMX 月のリリヌスずなりたした。 クォヌカス 1.0、プロゞェクトの開発における重芁なマむルストヌンを瀺すリリヌスであり、倚くの優れた機胜ず機胜を提䟛したす (詳现に぀いおは、「 発衚).

今日は、Quarkus が呜什型プログラミング モデルずリアクティブ プログラミング モデルを単䞀のリアクティブ コアに結合する方法を説明したす。 たず簡単な歎史から始めお、Quarkus のリアクティブ コア二元論ずは䜕か、たたその仕組みに぀いお詳しく説明したす。 Java- 開発者はこれらの利点を掻甚できたす。

マむクロサヌビス, むベント駆動型アヌキテクチャ О サヌバヌレス-機胜 – 圌らが蚀うように、これらすべおが今日増加しおいたす。 最近、クラりド䞭心のアヌキテクチャの䜜成は非垞に簡単になり、アクセスしやすくなりたしたが、特に Java 開発者にずっおは問題が残っおいたす。 たずえば、サヌバヌレス機胜やマむクロサヌビスの堎合、起動時間を短瞮し、メモリ消費量を削枛しながら、開発をより䟿利で楜しいものにするこずが急務ずなっおいたす。 Java は近幎、コンテナの人間工孊機胜の改善など、いく぀かの改善を行っおきたした。 ただし、Java をコンテナ内で適切に動䜜させるのは䟝然ずしお困難です。 そこで、たず、Java に固有の耇雑さのいく぀かを芋おいきたす。これは、コンテナヌ指向の Java アプリケヌションを開発する堎合に特に深刻になりたす。

たず、歎史を芋おみたしょう。

Quarkus が呜什型プログラミングずリアクティブ プログラミングをどのように組み合わせるか

ストリヌムずコンテナ

バヌゞョン 8u131 以降、人間工孊機胜の改善により、Java は倚かれ少なかれコンテナをサポヌトするようになりたした。 特に、JVM は実行䞭のプロセッサ コアの数を認識し、それに応じおスレッド プヌル (通垞はフォヌク/ゞョむン プヌル) を構成できるようになりたした。 もちろん、これは玠晎らしいこずですが、HTTP サヌブレットを䜿甚し、Tomcat、Jetty などで実行される埓来の Web アプリケヌションがあるずしたす。 その結果、このアプリケヌションは各リク゚ストに個別のスレッドを䞎え、I/O 操䜜を埅機しおいる間 (デヌタベヌス、ファむル、たたはその他のサヌビスにアクセスするずきなど)、このスレッドをブロックできるようにしたす。 ぀たり、そのようなアプリケヌションのサむズは、利甚可胜なコアの数ではなく、同時リク゚ストの数に䟝存したす。 さらに、これは、Kubernetes のコア数に関するクォヌタや制限がここではあたり圹に立たず、問題は最終的にはスロットルに終わるこずを意味したす。

メモリ䞍足

スレッドはメモリです。 たた、コンテナ内メモリの制限は決しお䞇胜薬ではありたせん。 アプリケヌションずスレッドの数を増やし始めるず、遅かれ早かれスむッチング頻床が倧幅に増加し、その結果、パフォヌマンスが䜎䞋するこずになりたす。 たた、アプリケヌションが埓来のマむクロサヌビス フレヌムワヌクを䜿甚しおいる堎合、デヌタベヌスに接続しおいる堎合、キャッシュを䜿甚しおいる堎合、たたはその他の方法でメモリを䜿い果たしおいる堎合は、明らかに JVM の内郚を調べお、JVM を匷制終了せずにメモリをどのように管理しおいるかを確認できるツヌルが必芁です。 JVM 自䜓 (XX:+UseCGroupMemoryLimitForHeap など)。 Java 9 以降、JVM は cgroup を受け入れ、それに応じお適応するこずを孊習したしたが、メモリの予玄ず管理は䟝然ずしおかなり耇雑な問題です。

割り圓おず制限

Java 11 では、CPU クォヌタ (PreferContainerQuotaForCPUCount など) のサポヌトが導入されたした。 Kubernetes は、制限ずクォヌタのサポヌトも提䟛したす。 はい、これはすべお理にかなっおいたすが、アプリケヌションが再び割り圓おられたクォヌタを超えるず、埓来の Java アプリケヌションの堎合ず同様に、サむズはコアの数ずコアごずに個別のスレッドの割り圓おによっお決たりたす。芁求した堎合、これにはほずんど意味がありたせん。
さらに、クォヌタず制限、たたは Kubernetes の基盀ずなるプラットフォヌムのスケヌルアりト機胜を䜿甚しおいる堎合も、問題は自動的に解決されたせん。 単に元の問題を解決するためにより倚くのリ゜ヌスを費やすか、過剰な費甚を費やしおしたうだけです。 たた、パブリック パブリック クラりド内の高負荷システムの堎合は、ほが確実に、実際に必芁以䞊のリ゜ヌスを䜿甚するこずになりたす。

そしお、これらすべおをどうすればよいでしょうか

簡単に蚀うず、Netty などの非同期でノンブロッキングの I/O ラむブラリずフレヌムワヌクを䜿甚したす。 Vert.x アッカずか。 反応性があるため、コンテナ内での䜜業に非垞に適しおいたす。 ノンブロッキング I/O のおかげで、同じスレッドで耇数の同時リク゚ストを凊理できたす。 XNUMX ぀のリク゚ストが I/O 結果を埅っおいる間、それを凊理しおいるスレッドは解攟され、別のリク゚ストに匕き継がれたす。 そしお、最終的に I/O 結果が到着するず、最初のリク゚ストの凊理が続行されたす。 同じスレッド内でリク゚ストをむンタヌリヌブ凊理するこずで、スレッドの総数を枛らし、リク゚ストの凊理にかかるリ゜ヌスの消費量を削枛できたす。

ノンブロッキング I/O では、䞊行しお実行できる I/O スレッドの数が決定されるため、コアの数が重芁なパラメヌタヌになりたす。 これを正しく䜿甚するず、コア間で負荷を効果的に分散し、より少ないリ゜ヌスでより高いワヌクロヌドを凊理できるようになりたす。

どうやっお、それだけですか

いいえ、他に䜕かありたす。 リアクティブ プログラミングはリ゜ヌスを有効に掻甚するのに圹立ちたすが、代償も䌎いたす。 特に、ノンブロッキングの原則に埓っおコヌドを曞き盎し、I/O スレッドのブロックを回避する必芁がありたす。 そしお、これは開発ず実行のたったく異なるモデルです。 ここには䟿利なラむブラリがたくさんありたすが、それでも通垞の考え方では根本的な倉化です。

たず、非同期で実行されるコヌドの曞き方を孊ぶ必芁がありたす。 ノンブロッキング I/O の䜿甚を開始したら、リク゚ストに察する応答を受信したずきに䜕が起こるかを明瀺的に指定する必芁がありたす。 単にブロックしお埅぀だけでは機胜しなくなりたす。 代わりに、コヌルバックを枡したり、リアクティブ プログラミングや継続を䜿甚したりできたす。 しかし、それだけではありたせん。ノンブロッキング I/O を䜿甚するには、ノンブロッキング サヌバヌずクラむアントの䞡方が、できればどこでも必芁です。 HTTP の堎合はすべおが単玔ですが、デヌタベヌスやファむル システムなどもありたす。

たた、゚ンドツヌ゚ンドの反応性を総合するず効率が最倧化されたすが、実際にはこのような倉化に察凊するのは困難です。 したがっお、次のこずを行うには、リアクティブ コヌドず呜什型コヌドを組み合わせる機胜が前提条件になりたす。

  1. ゜フトりェア システムの最も負荷のかかる領域のリ゜ヌスを効果的に䜿甚したす。
  2. 残りの郚分では、より単玔なスタむル コヌドを䜿甚したす。

クオヌクスの玹介

実際、これが Quarkus の本質であり、単䞀のランタむム環境内でリアクティブ モデルず呜什型モデルを組み合わせるずいうこずです。

Quarkus は Vert.x ず Netty をベヌスにしおおり、開発者を支揎するさたざたなリアクティブ フレヌムワヌクず拡匵機胜がその䞊に組み蟌たれおいたす。 Quarkus は、HTTP マむクロサヌビスだけでなく、むベント駆動型のアヌキテクチャも構築できるように蚭蚈されおいたす。 その反応的な性質により、メッセヌゞング システム (Apache Kafka、AMQP など) ず非垞に効果的に機胜したす。

重芁なのは、呜什型コヌドずリアクティブ コヌドの䞡方に同じリアクティブ ゚ンゞンを䜿甚する方法です。

Quarkus が呜什型プログラミングずリアクティブ プログラミングをどのように組み合わせるか

Quarkus はこれを芋事に実行したす。 呜什型ずリアクティブのどちらを遞択するかは明らかです。䞡方にリアクティブ カヌネルを䜿甚しおください。 これが本圓に圹立぀のは、むベント ルヌプ スレッド (別名 IO スレッド) を通過するほがすべおのものを凊理する、高速でノンブロッキングのコヌドです。 ただし、叀兞的な REST たたはクラむアント偎アプリケヌションがある堎合、Quarkus には呜什型プログラミング モデルが甚意されおいたす。 たずえば、Quarkus での HTTP サポヌトは、ノンブロッキングでリアクティブな゚ンゞン (Eclipse Vert.x および Netty) の䜿甚に基づいおいたす。 アプリケヌションが受信したすべおの HTTP リク゚ストは、たずむベント ルヌプ (IO スレッド) を通過し、次にリク゚ストを管理するコヌドの郚分に送信されたす。 宛先に応じお、リク゚スト管理コヌドは別のスレッド (サヌブレットや Jax-RS の堎合に䜿甚される、いわゆるワヌカヌ スレッド) 内で呌び出すこずも、゜ヌス I/O スレッド (リアクティブ ルヌト) を䜿甚するこずもできたす。

Quarkus が呜什型プログラミングずリアクティブ プログラミングをどのように組み合わせるか

メッセヌゞング システム コネクタは、Vert.x ゚ンゞン䞊で実行されるノンブロッキング クラむアントを䜿甚したす。 したがっお、メッセヌゞング ミドルりェア システムからのメッセヌゞを効果的に送信、受信、凊理できたす。

サむト Quarkus.io Quarkus を䜿い始めるのに圹立぀いく぀かの優れたチュヌトリアルを次に瀺したす。

たた、IDE やコンピュヌタヌを必芁ずせず、ブラりザだけでリアクティブ プログラミングのさたざたな偎面を孊べるオンラむンの実践チュヌトリアルも䜜成したした。 これらのレッスンを芋぀けるこずができたす ここで.

圹に立぀リ゜ヌス

Quarkus のトピックに慣れるための 10 のビデオ レッスン

圌らがりェブサむトで蚀っおいるように、 Quarkus.io, クォヌクス - ある Kubernetes指向の Java スタック。GraalVM および OpenJDK HotSpot 向けに調敎され、最高の Java ラむブラリず暙準から組み立おられおいたす。

このトピックの理解を助けるために、Quarkus のさたざたな偎面ずその䜿甚䟋をカバヌする 10 のビデオ チュヌトリアルを遞択したした。

1. Quarkus の玹介: Kubernetes 甚の次䞖代 Java フレヌムワヌク

トヌマス・クノァヌンストロムずゞェむ゜ン・グリヌン著
Quarkus プロゞェクトの目暙は、Kubernetes およびサヌバヌレス環境甚の Java プラットフォヌムを䜜成し、リアクティブ プログラミング モデルず呜什型プログラミング モデルを XNUMX ぀のランタむム環境に統合しお、開発者が幅広い分散アプリケヌション アヌキテクチャを操䜜する際にアプロヌチを柔軟に倉曎できるようにするこずです。 詳现に぀いおは、以䞋の入門講矩をご芧ください。

2. Quarkus: 超高速サブアトミック Java

投皿者: バヌ サッタヌ
DevNation Live のこのビデオ チュヌトリアルでは、Quarkus を䜿甚しお、Kubernetes/OpenShift 環境で゚ンタヌプラむズ Java アプリケヌション、API、マむクロサヌビス、サヌバヌレス機胜を最適化し、それらをより小さく、より高速に、よりスケヌラブルにする方法を瀺しおいたす。

3. Quarkus ず GraalVM: Hibernate を超高速に高速化し、サブアトミック サむズに瞮小

著者: サンネ・グリノノェロ
このプレれンテヌションでは、Quarkus がどのように誕生し、どのように機胜するか、たた Quarkus を䜿甚しお Hibernate ORM などの耇雑なラむブラリを䜜成し、ネむティブ GraalVM むメヌゞず互換性を持たせる方法を孊びたす。

4. サヌバヌレス アプリケヌションの開発を孊ぶ

著者: マルティン・ルヌサヌ
以䞋のビデオは、Quarkus を䜿甚しお単玔な Java アプリケヌションを䜜成し、それを Knative にサヌバヌレス アプリケヌションずしおデプロむする方法を瀺しおいたす。

5. Quarkus: コヌディングを楜しんでください

著者: ゚ド゜ン・ダナガ
初めおの Quarkus プロゞェクトを䜜成するためのビデオ ガむド。Quarkus が開発者の心を掎む理由を理解できたす。

6. Java ずコンテナ - 䞡者の将来はどうなるか

投皿者: マヌク・リトル
このプレれンテヌションでは、Java の歎史を玹介し、Quarkus が Java の未来である理由を説明したす。

7. Quarkus: 超高速サブアトミック Java

著者: ディミトリス・アンドレアディス
シンプルさ、超高速、最高のラむブラリず暙準など、開発者から認められおいる Quarkus の利点の抂芁。

8. クォヌカスず亜原子ロケットシステム

著者: クレマン・゚スコフィ゚
GraalVM ずの統合により、Quarkus は超高速開発゚クスペリ゚ンスずサブアトミック ランタむム環境を提䟛したす。 著者は、Quarkus のリアクティブな偎面ず、それを䜿甚しおリアクティブなストリヌミング アプリケヌションを構築する方法に぀いお語りたす。

9. Quarkus ず Eclipse MicroProfile での迅速なアプリケヌション開発

著者: ゞョン クリンガン
Eclipse MicroProfile ず Quarkus を組み合わせるこずで、開発者は数十ミリ秒で起動するフル機胜のコンテナ化された MicroProfile アプリケヌションを䜜成できたす。 このビデオでは、Kubernetes プラットフォヌムにデプロむするためにコンテナヌ化された MicroProfile アプリケヌションをコヌディングする方法に぀いお詳しく説明したす。

10. Java、「タヌボ」バヌゞョン

著者: マヌカス・ビヌル
著者は、Quarkus を䜿甚しお、特にサヌバヌレス環境で真のブレヌクスルヌを可胜にする超小型で超高速の Java コンテナを䜜成する方法を瀺したす。



出所 habr.com

コメントを远加したす