「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java Spring Boot を使用したスケーラブルなマイクロサービスの構築: ベスト プラクティスとテクニック パート -1

Java Spring Boot を使用したスケーラブルなマイクロサービスの構築: ベスト プラクティスとテクニック パート -1

2024 年 8 月 18 日に公開
ブラウズ:534

モノリスアーキテクチャ

  • すべての機能を単一のプロジェクトで開発する場合、それはモノリス アーキテクチャ ベースのアプリケーションと呼ばれます。

  • アプリケーションを jar/war としてパッケージ化してサーバーにデプロイします。

  • モノリス アプリケーションにはすべての機能が含まれているため、fat jar/war になります。

利点
1) 開発と管理が簡単。
2) すべてが 1 か所で入手可能です。
3) 設定は 1 回だけ必要です。

短所
1) メンテナンスが難しい
2) 単一障害点
3) 変更を行った場合、プロジェクト全体が再デプロイされ、テストされます。
4) 開発者はモジュール全体の知識がない可能性があるため、問題の修正を開始するのは困難です。
5) 一部のモジュールの負荷が高くなった場合は、アプリケーション全体の複数のインスタンスを作成する必要があり、各モジュールが互いに緊密に結合されているため、多くのスペースが必要になります。

Building Scalable Microservices with Java Spring Boot: Best Practices and Techniques part -1

モノリシックの問題を克服するために、マイクロサービス アーキテクチャが市場に登場しました

マイクロサービスアーキテクチャ

  • マイクロサービスは、プログラミング言語、フレームワーク、または API ではありません。マイクロサービスはアーキテクチャ設計パターンです。

  • 疎結合でアプリケーション機能を開発することを提案するマイクロサービス。

  • マイクロサービス アーキテクチャでは、すべての機能を 1 つのプロジェクトで開発するわけではありません。プロジェクトの機能をいくつかの REST API に分割します。

  • Microservices は Java だけに関係するものではありません。プログラミング言語固有のプロジェクトはマイクロサービス アーキテクチャを使用できます。

マイクロサービスは、小規模なサービスを開発するアプローチです。各サービスは独自のコンテナ/プロセス/サーバー上で実行され、サービスは軽量で独立してデプロイ可能である必要があります。これにより、より迅速な開発、展開、スケーラビリティが可能になります。

ご覧のとおり、モノリス アプリケーションの従業員モジュール、顧客モジュール、住所モジュール、およびコース モジュールが小規模なサービスに変換されたため、ここでは従業員サービス、顧客サービス、住所サービス、コース サービスのようなものになります。モノリス アプリケーションでは単一のデータベースが使用されますが、マイクロサービス アプリケーションでは各サービスが独自のデータベースを持ちます。そしてそれらは今では相互に依存しています。各サービスは相互に通信し、残りの呼び出しをスローします。

Building Scalable Microservices with Java Spring Boot: Best Practices and Techniques part -1

利点

  • テクノロジーの独立性 (Python、Go などの複数のテクノロジーを使用してバックエンド API を開発できます)
  • データベースの独立性。

  • 各サービスは互いに独立しているため (疎結合)、各サービスを個別にデプロイできます。

  • いずれかのサービスで変更を実行する場合、すべてのサービスをデプロイする必要はなく、1 つのサービスのみを 1 つだけデプロイします。

  • 1 つのサービスに取り組む開発者は、アプリケーション全体の知識を必要としません。

  • 単一のマイクロサービスの障害はアプリケーション全体に影響を与えず、全体的な復元力が向上します。

  • コードベースが小さくなり、懸念事項が分離されるため、メンテナンスとデバッグがより管理しやすくなります。

  • その小規模で独立した性質により、個々のマイクロサービスは、アプリケーション全体をスケーリングすることなく、需要に基づいて個別にスケーリングできます。

  • 各サービスは異なる方法でテストできます。

デメリット

  • 1 つのサービス構成で変更を実行したい場合、各サービス構成で変更を実行する必要はありません。たとえば、すべてのプロジェクトのすべての application.properties ファイルに存在する共通のプロパティがあります。
company.name=tier3Hub

したがって、会社名を変更したい場合は、すべてのサービスで名前を変更する必要があります。

  • マイクロサービス ベースのアプリケーションのテストは、サービス間の相互依存性と相互作用により、より複雑になる可能性があります。

  • 各サービスは、サービスがダウンしているよりも多くのリクエストを送信した場合、その後特定の量のリクエストを処理するため、そのサービスの複数のインスタンスが必要であり、リクエストをサービスの別のインスタンスにルーティングするには、クライアントからのリクエストと別のインスタンスのルートのバランスをとったロードバランサー。しかし、ロードバランサーを Java で書くのは難しいです。

マイクロサービスに Java を使用する理由

Java は、Rest API を開発するための Spring-Boot と呼ばれるフレームワークを提供します。Spring-Boot は、サービスを開発している場合に自動構成、組み込みサーバーなどの多くの機能を提供するため、サーバー上に sech サービスをデプロイする必要があります。 Spring-Boot は Tomcat サーバーを提供するため、各サービスは Tomcat の異なるポートで実行されます。たとえば、従業員サービスはポート 8080 で実行され、コース サービスはポート 8081 で実行され、各サービスには独自のサーバーがあります。

Building Scalable Microservices with Java Spring Boot: Best Practices and Techniques part -1

spring-Boot の助けを借りて、迅速な開発、少ない構成、本番対応アプリケーションおよびステーター プロジェクトのための機能を提供します

Spring Framework の下には、既製のサポート マイクロサービスを提供する Spring Cloud と呼ばれるプロジェクトがあり、Spring Cloud は、マイクロサービスの共通パターンを迅速に開発するためのいくつかの共通ツールと技術を提供します。

Spring Cloud は、典型的なユースケースに対してすぐに使用できる優れたエクスペリエンスと、他のユースケースをカバーする拡張メカニズムを提供することに重点を置いています。

  • 分散/バージョン管理された構成
  • サービスの登録と検出
  • ルーティング
  • サービス間通話
  • 負荷分散
  • サーキットブレーカー
  • 分散メッセージング
  • 有効期間が短いマイクロサービス (タスク)
  • 消費者主導および生産者主導の契約テスト。

マイクロサービスアーキテクチャ

マイクロサービス用の固定アーキテクチャはありません。開発者はプロジェクトの要件に従ってマイクロサービス アーキテクチャをカスタマイズしています。ほとんどのプロジェクトでは、マイクロサービス アーキテクチャの以下のコンポーネントを使用します。

1) サービス レジストリ (Eureka サーバー)

2) サービス (REST API)

3) サービス間通信 (FeginClient)

4) API ゲートウェイ

5) 管理サーバー

6) ジップキン

結論

Java のマイクロサービスは、ソフトウェア開発へのアプローチ方法を変革し、新しいレベルの柔軟性、拡張性、回復力をもたらしました。 Java の豊富なエコシステムと Spring Boot、Micronaut などのフレームワークを組み合わせることで、最新のアプリケーションの要求に耐えられるマイクロサービスを構築するための優れた選択肢となります。

このアーキテクチャを調査してみると、従来のモノリシック アプリケーションよりもマイクロサービスの人気が高まっている理由が明らかです。これらはモジュール性と独立性を提供し、チームがサービスを個別に開発、展開、拡張できるようにします。これは、クラウドネイティブ機能がますます標準になりつつある世界では特に価値があります。ただし、その過程では、データの一貫性の確保、サービス間通信の管理、サービス全体での堅牢なセキュリティの維持などの課題も明らかになりました。

マイクロサービスを扱う Java 開発者にとって、ツールや実践方法の最新の進歩を常に最新の状態に保つことは非常に重要です。状況は常に進化しており、適応する者は、このアーキテクチャの可能性を最大限に活用できる最適な立場に立つことができます。 Java のマイクロサービスの将来は、知識と経験を共有したいと願う開発者のコ​​ミュニティの成長によってサポートされ、フレームワークとツールが継続的に改善されているため、有望に見えます。

Java でマイクロサービスを採用することは、より回復力があり、スケーラブルで、保守しやすいアプリケーションを作成するための扉を開くことを意味します。ベスト プラクティスに従い、継続的な学習に専念することで、開発者はソフトウェア開発の新たな可能性を解き放ち、より革新的で効率的なソリューションを生み出すことができます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/ayushstwt/building-scalable-microservices-with-java-spring-boot-best-practices-and-techniques-part-1-1da3?1 侵害がある場合、study_golang @163.comdelete までご連絡ください。
最新のチュートリアル もっと>
  • PHP デザイン パターン: アダプター
    PHP デザイン パターン: アダプター
    アダプター デザイン パターンは、互換性のないインターフェイスを持つオブジェクトが連携できるようにする構造パターンです。これは 2 つのオブジェクト間の仲介者 (またはアダプター) として機能し、一方のオブジェクトのインターフェイスを、もう一方のオブジェクトが期待するインターフェイスに変換します。こ...
    プログラミング 2024 年 11 月 6 日に公開
  • PHP の WebSocket を理解する
    PHP の WebSocket を理解する
    WebSocket は、単一の TCP 接続上でリアルタイムの全二重通信チャネルを提供します。クライアントがサーバーにリクエストを送信して応答を待つ HTTP とは異なり、WebSocket を使用すると、複数のリクエストを必要とせずにクライアントとサーバー間の継続的な通信が可能になります。これは、...
    プログラミング 2024 年 11 月 6 日に公開
  • Visual Studio 2012 ではどのような C++11 機能がサポートされていますか?
    Visual Studio 2012 ではどのような C++11 機能がサポートされていますか?
    Visual Studio 2012 の C 11 機能Visual Studio 2012 のプレビュー バージョンが最近リリースされたため、多くの開発者が C 11 機能のサポートに興味を持っています。 Visual Studio 2010 ではすでに部分的な C 11 サポートが提供されていま...
    プログラミング 2024 年 11 月 6 日に公開
  • Windows の起動時に Python スクリプトを自動的に実行するにはどうすればよいですか?
    Windows の起動時に Python スクリプトを自動的に実行するにはどうすればよいですか?
    Windows 起動時に Python スクリプトを実行するWindows を起動するたびに Python スクリプトを実行することは、タスクを自動化したり、重要なプログラムを起動したりするために非常に重要です。いくつかのアプローチで、さまざまなレベルのカスタマイズとユーザー制御が提供されます。スク...
    プログラミング 2024 年 11 月 6 日に公開
  • Astral.CSS の探索: Web デザインに革命をもたらす CSS フレームワーク。
    Astral.CSS の探索: Web デザインに革命をもたらす CSS フレームワーク。
    ペースの速い Web 開発の世界では、フレームワークは、開発者が視覚的に魅力的で機能的な Web サイトを効率的に作成する上で極めて重要な役割を果たします。現在利用可能なさまざまなフレームワークの中で、Astral CSS は、そのユニークな設計哲学と使いやすさの点で際立っています。この記事では、A...
    プログラミング 2024 年 11 月 6 日に公開
  • ESnd アロー関数の包括的なガイド
    ESnd アロー関数の包括的なガイド
    ES6 の概要 ECMAScript 2015 は、ES6 (ECMAScript 6) とも呼ばれ、JavaScript の大幅なアップデートであり、コーディングをより効率的で管理しやすくする新しい構文と機能が導入されています。 JavaScript は Web 開発に使用される...
    プログラミング 2024 年 11 月 6 日に公開
  • アルゴリズムとデータ構造の解明: 効率的なプログラミングの基礎
    アルゴリズムとデータ構造の解明: 効率的なプログラミングの基礎
    この一連の投稿では、学術環境と大手テクノロジー企業の両方で広く議論されている 2 つのトピック、アルゴリズムとデータ構造についての私の学習過程を共有します。これらのトピックは一見すると難しそうに見えるかもしれませんが、特に私のような、他の職業上の課題のためにキャリアを通じてそれらを深く掘り下げる機会...
    プログラミング 2024 年 11 月 6 日に公開
  • pprof を使用して Go プログラム内のゴルーチンの数をプロファイリングするにはどうすればよいですか?
    pprof を使用して Go プログラム内のゴルーチンの数をプロファイリングするにはどうすればよいですか?
    pprof を使用したゴルーチン数のプロファイリングGo プログラム内の潜在的なゴルーチン リークを検出するには、アクティブなゴルーチンの数を長期にわたって監視する必要があります。標準の go ツール pprof コマンドはブロックに関する洞察を提供しますが、ゴルーチンの数に直接対処するものではあり...
    プログラミング 2024 年 11 月 6 日に公開
  • クラスメソッドをコールバックとして渡す方法: メカニズムとテクニックを理解する
    クラスメソッドをコールバックとして渡す方法: メカニズムとテクニックを理解する
    クラス メソッドをコールバックとして渡す方法バックグラウンドシナリオによっては、効率的にクラス メソッドを他の関数へのコールバックとして渡す必要がある場合があります。特定のタスクの実行。この記事では、これを実現するためのさまざまなメカニズムについて説明します。呼び出し可能な構文の使用関数をコールバッ...
    プログラミング 2024 年 11 月 6 日に公開
  • Webスクレイピング - 面白いですね!
    Webスクレイピング - 面白いですね!
    クールな用語: CRON = 指定された間隔でタスクを自動的にスケジュールするプログラミング技術 ウェブって何? プロジェクトなどを調査するとき、私たちは通常、日記、エクセル、ドキュメントなど、さまざまなサイトから情報を書き込みます。 私たちはウェブをスクレイピングし、手動でデータ...
    プログラミング 2024 年 11 月 6 日に公開
  • お客様の声グリッドセクション
    お客様の声グリッドセクション
    ? CSS グリッドを学習しながら、このお客様の声グリッド セクションの作成が完了しました。 ?グリッドは構造化されたレイアウトの作成に最適です。 ?ライブデモ: https://courageous-chebakia-b55f43.netlify.app/ ? GitHub: https://gi...
    プログラミング 2024 年 11 月 6 日に公開
  • REGISTER_GLOBALS が PHP の主要なセキュリティ リスクとみなされるのはなぜですか?
    REGISTER_GLOBALS が PHP の主要なセキュリティ リスクとみなされるのはなぜですか?
    REGISTER_GLOBALS の危険性REGISTER_GLOBALS は、すべての GET 変数と POST 変数を PHP スクリプト内でグローバル変数として使用できるようにする PHP 設定です。この機能は便利に見えるかもしれませんが、潜在的なセキュリティ脆弱性やコーディング方法のため、使...
    プログラミング 2024 年 11 月 6 日に公開
  • Nodemailer の概要: Node.js での簡単な電子メール送信
    Nodemailer の概要: Node.js での簡単な電子メール送信
    Nodemailer は、メールを送信するための Node.js モジュールです。簡単な概要は次のとおりです: トランスポーター: 電子メールの送信方法を定義します (Gmail、カスタム SMTP など経由)。 const transporter = nodemailer.createTra...
    プログラミング 2024 年 11 月 6 日に公開
  • JavaScript での簡単なエラー処理: 安全な代入演算子がコードを簡素化する方法
    JavaScript での簡単なエラー処理: 安全な代入演算子がコードを簡素化する方法
    JavaScript でのエラー処理は面倒になる場合があります。 try/catch ステートメントで大きなコード ブロックをラップすることは機能しますが、プロジェクトが成長するにつれて、デバッグは悪夢のようになります。幸いなことに、もっと良い方法があります。 安全な代入演算子 (?=) を入力しま...
    プログラミング 2024 年 11 月 6 日に公開
  • Javascript は難しい (ESadness あり)
    Javascript は難しい (ESadness あり)
    長文になりますが、もう一度言わせてください。 JAVASCRIPTは難しいです。最後に会ったとき、私は Javascript の世界に足を踏み入れていました。目を輝かせ、希望に満ちたプログラマーが野生のジャングルに足を踏み入れ、「これはどれほど難しいことでしょう?」と言いました。私はどれほど間違っ...
    プログラミング 2024 年 11 月 6 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3