翻訳者 |李睿 校正:孫淑娟 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クラスタサービスを簡単に公開する
最近、ウェン・チャンは大人気となり、汪峰を羨ましがらせ、嫉妬させ、間違いなく話題になっている。ウェン...
あなたのウェブサイトに将来性があるかどうかをどのように評価しますか?隠さないでください。家族に見せる...
Armorshark は、基盤となる仮想化として KVM と SSD ハードディスクを備えた新しい ...
中国市場を振り返ってみると、光り輝く星、Weibo マーケティングを見つけるのは難しくありません。過...
この検索エンジンは、Google のような検索大手に取って代わる可能性は低いものの、一部の検索大手よ...
Weiboの自主メディア企画が本日スタート。フォロワー500万人超の「Big V」は当面応募不可...
1. コンテナクラウドプラットフォームとコンテナクラウドストレージクラウド プラットフォームにおける...
Pinterestはとても人気があります。 comScore のデータによると、Pinterest ...
5月は過酷な月だ。天気はますます暑くなり、Baiduのウェブ検索品質に関するホワイトペーパーの発表を...
最近、弟をseowhyにトレーニングに行かせました。私の親友がそれを知ったとき、彼はとても困惑してい...
テンセントテクノロジーニュース(劉学同)北京時間9月6日のニュース、海外メディアの報道によると、テク...
ウェブマスターの初心者であろうとベテランであろうと、何かをする前に詳細な計画を立てる必要があるのと同...
1. 概要通常、分散ストレージ システムと分散キャッシュ システムでは、データの分割 (ルーティング...
市場調査会社 Synergy Research Group が発表したデータによると、企業は 202...
テンセントテクノロジーニュース(月谷)12月21日のニュースによると、昨日、工業情報化部情報セキュリ...