ホームページ Java &#&チュートリアル Quarkus を使用したマイクロサービスの効果的なプロジェクトの構築

Quarkus を使用したマイクロサービスの効果的なプロジェクトの構築

Sep 19, 2024 am 06:26 AM

進化し続けるソフトウェア開発の状況において、その拡張性、柔軟性、保守性により、マイクロサービス アーキテクチャの採用が急速に注目を集めています。 Quarkus は、GraalVM および HotSpot 向けに調整された Java ネイティブ Kubernetes スタックとして、特にコンテナー向けに Java を最適化し、Java がサーバーレス、クラウド、および Kubernetes 環境の効果的なプラットフォームになることを可能にします。

Quarkus を効果的に活用するための鍵は、プロジェクトを正しく構成する方法を理解することです。プロジェクトを適切に構造化すると、コードの管理性が向上するだけでなく、マイクロサービス アーキテクチャの導入を成功させる上で重要な役割を果たします。

マイクロサービス アーキテクチャは、Quarkus が強化するいくつかの定義された特性によってそれ自体を区別します。

  1. 小規模かつ集中型 - マイクロサービス アーキテクチャの各サービスは、明確に定義された単一のタスクを実行するように設計されており、シンプルさと集中力を促進します。 Quarkus は、特定のタスクに最適な軽量でブート可能な jar とネイティブ コンパイルを容易にすることでこれをサポートします。

  2. 独立 - 独立性により、他のサービスに依存せずにサービスを開発、デプロイし、拡張することもできます。 Quarkus のコンテナファーストの哲学により、各マイクロサービスが隔離された環境で実行できることが保証されます。

  3. 疎結合 - サービスは明確に定義された API を介して通信し、内部実装への依存を減らします。 Quarkus は、MicroProfile や JAX-RS などの標準による分離を促進し、サービスの対話をシームレスかつ効率的にします。

  4. スケーラブル - 増加するワークロードを効率的に管理することが重要です。 Quarkus のリアクティブ プログラミング機能により、サービスはさまざまな負荷の下でも応答性が高く、スケーラブルになります。

  5. 柔軟性 - Quarkus の動的なスケーリングと復元機能により、変化する条件に適応する機能が促進され、クラウドネイティブ環境でのオンザフライ調整がサポートされます。

  6. 復元力- Quarkus は、組み込みのフォールト トレランス機能とヘルスチェック機能によりマイクロサービスの堅牢性を強化し、サービスの障害に対する耐性と中断からの迅速な回復を保証します。

Maven マルチモジュール プロジェクト構造の採用は、大規模な Java アプリケーションの管理に効果的であることが証明されており、Quarkus はこのモダリティを完全にサポートしています。 Maven のマルチモジュール構造を詳しく見てみましょう:

Maven マルチモジュール プロジェクトは、複数のサブモジュールを調整するアグリゲーター POM で構成されます。この構造は、大規模なアプリケーションを管理可能で独立して展開可能なユニットに分割し、簡単に保守および更新できるようにするのに役立ちます。通常、各モジュールには集中的な責任があり、他のモジュールから独立してデプロイできます。

実際のアプリケーションに基づいた簡略化されたレイアウトは次のとおりです。

parent (aggregator pom.xml)
├── api (API interfaces and DTOs)
│   ├── pom.xml
│   └── src
├── core (Business logic)
│   ├── pom.xml
│   └── src
├── data-access (Data layer integration)
│   ├── pom.xml
│   └── src
ログイン後にコピー

私は、多様な開発チームにわたるスケーラビリティ、保守性、一貫性を強化する、Quarkus 専用に最適化されたプロジェクト構造を調整しました。私が 2018 年に初めて開発したデザインは、進化する技術トレンドに合わせていくつかの改良が加えられました。当初、この構造は特に Quarkus を念頭に置いて作成されたものではありませんでした。ただし、そのアプリケーション全体を通じて、Quarkus の哲学およびコーディング手法と非常に優れた互換性があることが証明されています。 IntelliJ IDEA などの IDE に実装されたこの構造を調べてみましょう。ただし、他の最新の IDE にも効果的に適合させることができます。

Effective Project Structuring for Microservices with Quarkus

完全なプロジェクト構造は GitHub リポジトリで見つけることができます

プロジェクトはトップレベルから始めて、特定の役割を持ついくつかのモジュールに分割されます。

  1. api-dtos - このモジュールは、データの内部表現を API を通じて外部に公開されるものから分離するために重要です。データ転送オブジェクト (DTO) をドメイン モデルから分離することにより、このモジュールは、データベース スキーマまたはビジネス ロジックの変更が、これらの API を使用するクライアントに直接影響しないようにします。この分離により、API の安定性とバージョン管理が強化されます。

  2. commons - このユーティリティ モジュールは、プロジェクト内の他の複数のモジュール間で使用される共有ロジック、定数、およびヘルパーのリポジトリとして機能します。この方法で共通の機能を一元化すると、重複が減り、アプリケーション全体の一貫性が高まります。これは、データ形式コンバーター、標準バリデーター、一般的なビジネス ルールなどのユーティリティを保存する場合に特に役立ちます。

  3. configuration - このモジュールでは構成管理が合理化され、アプリケーション全体のすべての構成設定が 1 か所に統合​​され、アクセスと管理が簡素化されます。この構成の中央リポジトリにより、設定が一貫して適用および管理されるため、環境の移行 (開発から実稼働など) が簡素化され、構成ミスによるエラーの可能性が最小限に抑えられます。このモジュールは、単純な構成ファイルだけでなく、JSON のシリアル化と逆シリアル化のための ObjectMapper、カスタム デシリアライザー、その他の特殊な Bean など、アプリケーション全体で不可欠なカスタム マネージド Bean を定義するための理想的な場所でもあります。

  4. db-entities - データベース対話専用のこのモジュールは、すべての ORM クラスまたはデータベース スキーマをカプセル化し、ビジネス ロジックおよび API レイヤーから確実に分離します。この方法でエンティティを分離すると、データ アクセス メカニズムをビジネス ルール処理から切り離すことにより、クリーンなアーキテクチャ原則を維持することができ、よりクリーンで追跡可能なコードベースが促進されます。

  5. サービス - ここには、ドメイン モデル上で動作し、データの永続化のために db-entities を使用するサービス クラスにカプセル化されたコア ビジネス ロジックがあります。各サービスは特定のビジネス タスクに焦点を当てており、モジュール性と再利用性が強化されています。この分離は、他のモジュールのコントローラー クラスによって処理されるクライアントとの直接のやり取りからビジネス オペレーションを分離することにも役立ち、単一責任の原則を遵守します。

  6. リソース - いくつかの議論の中で、このモジュールは JAX-RS との整合性を反映するために名前が付けられました。JAX-RS のアノテーションが付けられたクラスはリソースと呼ばれます。このモジュールは REST エンドポイントの作成を処理し、外部クライアントとのインターフェースとなる通信層として機能します。 Quarkus を使用した REST API の構築に関する Red Hat リソースで説明されているように、標準化と確立された RESTful 原則への準拠を強調するために、「レスト」や「コントローラー」などの代替名ではなく「リソース」という名前が選択されました。このプロジェクトは、標準の用語に合わせることで、JAX-RS および REST の規約に精通した開発者にとって直観的になることを目指しています。

  7. アプリケーション - すべての部分をまとめる包括的なモジュールとして機能し、それらが正しく接続され、デプロイの準備ができていることを確認します。

これらの各モジュールは、Quarkus を使用したクラウドネイティブ マイクロサービス環境でのメンテナンスの容易さ、拡張性、堅牢性を促進するために調整された戦略的な役割を果たします。

上記の構造は、RedHat リソースで説明されている次のアーキテクチャ層に基づいています

Effective Project Structuring for Microservices with Quarkus


抽象化が多すぎる

プロジェクトの構造について議論するとき、前に説明した階層化されたアプローチの必要性についてよく疑問が生じます。ここで、デイビッド J. ウィーラーの言葉を思い出します。

コンピュータサイエンスにおけるすべての問題は、間接化の層が多すぎる問題を除いて、別のレベルの間接化によって解決できます。 - [C プログラミング言語第 4 版の David J. Wheeler ]

以上がQuarkus を使用したマイクロサービスの効果的なプロジェクトの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

See all articles