翻訳者 |李睿 校正:孫淑娟 Java プログラミング言語は 30 年近く前から存在しており、この言語とそのバイトコードは組み込みチップから大規模なサーバー ファームまで、あらゆるものに広く使用されています。 Java は、破壊不可能な仮想マシンと膨大なライブラリと組み合わせることで、どこでも実行できるコードを書くための豊かなエコシステムを提供します。 しかし、Java が苦戦している領域の 1 つは、数千、あるいは数百万のユーザーからの接続を処理する必要があることが多いサーバー領域です。初期の頃、Java ツールは、すべてのユーザーにビジネス ロジックを適用するサーバー側アプリケーションを作成するための最適なツールの 1 つでした。 J2EE、Hibernate、Spring などの Java フレームワークや基本的な Java サーブレット モデルを使用すると、強力な Web アプリケーションを比較的簡単に作成できます。 JavaScript と Node.js が登場する前は、Java テクノロジーが栄えていました。 Node.js が広く注目を集めた後、開発者は JavaScript ランタイム環境への移行を開始しました。これには 2 つの理由があります。まず、開発者はサーバーとブラウザ クライアントの両方で同じコードを実行できることを歓迎しています。 2 番目に、Node.js サーバーは、レスポンシブ モデルのおかげで、大幅に高いスループットを実現できることがよくあります。 Java エコシステムは競争に適応するようになりました。当初、一部の開発者は、Java を JavaScript に変換する Google Web Toolkit などのツールを採用しました。次に、サーバー上で Java をより高速に実行できるように取り組みました。初期のサーバー Java フレームワークには、受信リクエストごとに独自のスレッドがあるという制限がありました。これは、受信データと送信データを整理するための簡単な方法ですが、面倒になることもあります。スレッドを作成するには数キロバイトのオーバーヘッドが必要となり、各サーバーが処理できるユーザー数が制限される可能性があります。 Node.js は、このオーバーヘッドなしでより多くのユーザーを処理できる別のモデルを使用します。 最近、Java 開発者は、Node.js のイノベーションを Java スタック、特にクラウドネイティブ Java フレームワークにもたらしています。これらのフレームワークは Node.js を模倣し、軽量な機能をサポートし、クラウド コンピューティング サーバー上で実行され、すばやく起動および停止できます。追加のライブラリは必要なく、利用可能なサーバー インスタンスへの迅速な展開をサポートします。クラウドネイティブ Java フレームワークは、個別にインストールおよび再起動できるマイクロサービスのクラスターをサポートするように設計されています。最速のビルドとインストールを実現するために、Docker や Podman などのコンテナーでリリースされることがよくあります。 クラウドネイティブなエクスペリエンスを求める現代の Java 開発者には、いくつかの選択肢があります。理想的なクラウド ネイティブ Java フレームワークは、Java プラットフォームとそのサードパーティ ライブラリに投入された豊富な経験を活用しながら、クラウド プラットフォームでより高速かつ軽量に実行できるように適応させます。ここでは、クラウド ネイティブの開発とデプロイメント向けにゼロから構築された 7 つの Java フレームワークを紹介します。 1. マイクロノートMicronaut の作成者は、柔軟な構成や依存性注入など、Spring や Grails などの従来の Java フレームワークの優れた部分を取り入れながら、マイクロサービスの開発に適さない大きなメモリフットプリントや起動の遅さといった欠点を排除したいと考えていました。開発者は、古いフレームワークに見られるメモリを埋めるリフレクションを使用せずに依存性注入に十分な情報を提供するための注釈を慎重に作成しました。コンパイル時に Micronaut をより多く構成すると、コードの実行速度が速くなり、軽量になります。 このフレームワークは、さまざまな JVM ベースの言語 (現在は Java、Kotlin、Groovy) をサポートし、さまざまなクラウド プラットフォームで実行できるように設計されています。事前定義された構成ファイルにより、すべての主要なクラウド プラットフォームでのサーバーまたはサーバーレス機能のデプロイが簡素化され、すべての主要なデータベース接続には適切に記述されたドキュメント ページが用意されています。 Micronaut の開発者は、フレームワークが優れた開発チームワークをサポートすることも望んでいました。 HttpClient 実装がプロジェクトにバンドルされており、Micronaut を離れたり、追加の作業を追加したりすることなく、ユニット テストの作成を簡素化します。これらのテストは、動的フレームワークに必要なテストよりも単純かつ包括的であることが多いです。これもコンパイル時に行われた作業のおかげです。 Micronaut は、クラウド コンピューティング対応アプリケーションの開発にのみ使用されるわけではありません。このフレームワークは、従来のロールと一部のデスクトップ アプリケーションをサポートするのに十分な汎用性を備えています。 GraalVM との緊密な統合により、Micronaut を使用してネイティブ アプリケーションを生成することが可能になります。 2.クオークス命令型コードとリアクティブコードを簡単に組み合わせて作業したい開発者は、Quarkus を利用できます。 Quarkus チームは、クラウド ネイティブ開発の最も一般的なユースケースを予測することから始め、構成を一切必要とせずにそれらのユースケースをサポートする例を使用してフレームワークを構築しました。結果はコンテナに簡単に統合でき、Kubernetes クラスターにデプロイできます。 開発チームは、Kubernetes クラスターを迅速に拡張できるように、高速な起動を確保する必要があります。これは、呼び出されるまでコールド状態のままにできるため、時々実行される関数にとって望ましい機能です。 このプロジェクトの目標の 1 つは、Java コミュニティで一般的な既存の標準とライブラリの多くを採用し、拡張することです。たとえば、JAX-RS アノテーションは REST エンドポイントを定義します。構成は Eclipse マイクロファイルから始まります。 Quarkus 開発チームは 50 を超える標準ライブラリも統合しているため、企業が特定の状況でデザイン パターンを認識できる可能性が高くなります。 基本的な Quarkus フレームワークは、さまざまなサービスに使用できます。 Quarkus 2.8 以降、Quarkus 開発者は RESTeasy Reactive モデルの使用を推奨しています。新しいプロジェクトを開始する場合、これが標準オプションですが、これを使用する必要はありません。 RESTeasy Reactive は、よりシンプルでブロッキングのない構造とパターンを提供します。各リクエストにスレッドを割り当てる代わりに、非ブロッキング スレッドのセットがすべての I/O を処理し、必要に応じてコードを呼び出します。 Quarkus には、幅広いデプロイメント オプションも含まれています。 「コンテナファースト」と呼ばれていますが、ベアメタル上でも実行できます。さらに、Funqy と呼ばれる組み込みの構成オプションがあり、AWS Lambda、Azure Functions、Knative、およびその他のいくつかのオプションで受け入れられる関数の作成が簡素化されます。 3. Spring クラウド関数Spring Framework は約 20 年にわたって多くのプロジェクトの基盤となってきたため、Java 開発者は Spring Framework に非常に精通しています。 Spring の開発者は、クラウド展開やその他のいくつかの役割に適した新しいバージョンを作成することにしました。 Spring Cloud Functions の関数は、Web サービス、ストリーム処理、バックグラウンド作業など、さまざまなタスクに簡単に再デプロイできるように設計されています。 Spring Cloud Functions フレームワークは、Spring によって開始された多くの同じ伝統を継承しています。このフレームワークのクラウド関数は、リアクティブ スタイルまたは命令型スタイルのいずれか、または両方の組み合わせをサポートします。 複数の選択肢をサポートすることは、このプロジェクトの重要な目標です。これらの関数を AWS Lambda、Microsoft Azure、Apache OpenWhisk、Google Cloud Platform、その他の一般的なクラウド コンピューティング関数環境に埋め込むためのアダプターがあります。 Apache Kafka、Solace、RabbitMQ などの主要なストリーミング フレームワーク用のアダプターや、スタンドアロン オプションの Spring Cloud Stream もあります。パッケージ化とデプロイメントは高度に自動化されているため、開発者は機能の開発に集中できます。 Spring Cloud Functions 開発チームは、クラウド展開の一般的な落とし穴や課題の多くに対処するためにも懸命に取り組んできました。 Spring Cloud Skipper を使用すると、複数のクラウド プラットフォームにデプロイできます。 Spring Cloud Sleuth は、データの流れをトレースすることでデバッグに役立ちます。 Spring Cloud Security は、アプリケーションのセキュリティ保護に関する多くの作業を管理し、適切なユーザーだけがそれらの機能を実行できるようにします。サブプロジェクトだけでも数十あります。 このプロジェクトは、さまざまなプラットフォームを通じてビジネス アプリケーションを配布するための非常に優れた基盤を提供します。アプリケーション ロジックが Cloud Function POJO にカプセル化されると、さまざまな役割で機能する場所を見つけることができます。 4.Vert.xVert.x の作成者は、イベント ループを簡素化し、データベースへの接続を最適化することで、非常に高速なフレームワークを作成したいと考えていました。 Vert.x には Node.js のようなイベント ループがあり、イベントの到着時に複数の接続を処理できます。また、Java のスレッド モデルを活用して、プール内の複数のスレッドでイベントを処理します。これは、使用可能な場合は複数のコアで実行できます。 この構造は、イベント ストリームを処理するパイプラインの作成を簡素化するようにも計画されています。階層化されたコールバックによるコードの乱雑さを回避するために、Promise や Future などの構造を借用します。非同期オプションを使用すると、イベントがイベント バスに沿って移動するときに、メソッド呼び出しの単純なチェーンで満たされた、クリーンで読みやすいコードを生成することができます。 Vert.x 開発チームは、自らのビジョンに固執していません。彼らは Vert.x をフレームワークではなくツールキットだと考えています。コードはモジュール化されているため、開発者はいくつかの機能を選択して、アプリケーションに適したアーキテクチャに統合することができます。リアクティブ構造ではなく命令型構造を求める開発者は、Kotlin コルーチンのサポートを見つけることができます。 このプロジェクトは Eclipse エコシステムの一部です。幅広いバージョンとオプションにより、大きな自由度が得られます。たとえば、Vert.x アプリケーション ジェネレーターは、テンプレート エンジンや API サポートなど、多くの潜在的な依存関係を持つ Java または Kotlin コードを生成します。 5.Eclipse マイクロプロファイルEclipse チームは、Jakarta EE を適応させてマイクロサービスの小規模なクラスターを実行する方法として、Micro Profile プロジェクトを作成しました。マイクロサービス アーキテクチャの標準ライブラリの多くをバンドルしながら、大規模プラットフォームのオーバーヘッドの一部を削除します。 このアプローチは、より大規模で古い Java EE または Jakarta EE プロジェクトからコードを移行する可能性のある開発者にとって最も魅力的です。構成とアーキテクチャのほとんどは同じままです。多くの場合、調整は軽微です。しかし、この設計では、より軽量で高速なコードを作成するために、よりシンプルな決定が推奨されます。一部の開発者は、より現代的なクラウドネイティブ フレームワークへの足がかりとして MicroProfile を使用しています。 6. ドロップウィザード開発者の中には、古くて十分にテストされたモジュールに自然な親和性があり、Dropwizard を採用することに好意を持っている人もいます。 Dropwizard 開発チームは、安定性や成熟度などの機能を常に重視してきました。彼らは、Hibernate のようなデータベース接続モジュールを収集し、フォームやその他の標準 Web アプリケーション コンポーネントのフレームワークを組み合わせました。 Dropwizard は、依存性の注入や、構成やログ記録などのランタイム メンテナンス プロセスも簡素化します。 Dropwizard は、既存のアプリケーションの変更や拡張に取り組んでいるチームに人気があります。この構造は、既存の確立された方法に基づいて構築されているため、それらの方法と互換性があります。 7.クラウドプラットフォームのスターターフレームワークすべてのクラウド プラットフォームには、簡単な関数の記述を開始するのに適した基本的な例が用意されています。これらは主に、非常に単純な決定をサポートし、開発者がすぐに作業を開始できるようにすることを目的としています。 たとえば、Google Cloud Platform の開発チームは、Function as a Service (FaaS) で実行する Java 関数の基本フレームワークをオープンソース化しました。これを使用して構築されたコードは、Google Cloud Platform の標準トリガーと迅速に統合できるように設計されていますが、任意のローカル マシンでも正常に実行できます。 Microsoft は Java フレームワークもオープンソース化しました。このモデルには、JSON データと Java POJO 間の変換を行うライブラリなど、データ転送を簡素化するいくつかのルーチンが含まれています。関数トリガーが呼び出しのメタデータを提供する場合、フレームワークはそれを直接処理できます。 どちらのフレームワークでも、開発者は単一の関数を持つ単一のクラスを記述することで、多くの単純なタスクを実現できます。より複雑なプロジェクトでは、この基本ツールを他のフレームワークと統合する必要がある場合があります。これらは単なる出発点に過ぎませんが、時にはそれで十分なこともあります。 原題:クラウドネイティブの世界のための 7 つの Java フレームワーク、著者: Peter Wayner |
>>: Traefik Hubを使用してローカルKubernetesクラスタサービスを簡単に公開する
深セン Janus Software Co., Ltd.(以下、「TOP-THINK」)は、産業用イ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス今日の検索エンジンは、最...
最近、セルフサービス型ウェブサイト構築サービスプロバイダーのWeeblyが3,500万ドルの投資を受...
多くのウェブマスターは、まだ「ポインティング」という言葉の意味を理解していません。昨日、ウェブマスタ...
2013年に百度が導入したザクロアルゴリズムと青大根アルゴリズムにより、多くのウェブサイトが奈落の底...
Synergy Research Group の新しいデータによると、Amazon Web Serv...
Kyw は日々様々な SEO 担当者と接しており、徐々にそれぞれの SEO 担当者のタイプに対する独...
人々は、コロナウイルス後の世界でパフォーマンスと敏捷性を向上させる方法を理解する必要があります。過去...
5月20日、アリババ副社長兼アリババクラウドコンピューティングプラットフォーム責任者の賈陽清氏はメデ...
360 ブラウザがユーザーのプライバシーを侵害しているという話題が再び注目を集めています。 11月2...
成長コスト、効率、品質という3つのトピックを中心に、コンバージョンファネルの各レベルに実行可能な運用...
tragicservers.com 2017 年、私たちはこのばかげた名前をからかってばかりいました...
看看GPS地図网のウェブマスターによると、Baidu Shareは更新を停止した可能性があります。そ...
すべてのウェブマスターの目には、Baidu が提案するユーザー エクスペリエンスは常に誰にとっても馴...
インターネット上でウェブサイト構築の競争が激化するにつれ、一部のウェブマスターは、一定期間インターネ...