「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring Cloud を使用したマイクロサービス アーキテクチャ

Spring Cloud を使用したマイクロサービス アーキテクチャ

2024 年 7 月 29 日に公開
ブラウズ:185

Microservices Architecture with Spring Cloud

マイクロサービス アーキテクチャは、アプリケーションが疎結合されたサービスで構成される設計アプローチです。各サービスは特定の機能を担当し、個別に開発、展開、拡張できます。 Spring Cloud は、堅牢でスケーラブルなマイクロサービスの構築に役立つツールとフレームワークのスイートです。

マイクロサービスとは何ですか?
マイクロサービスは、複雑なアプリケーションをより小さな管理可能なサービスに分割します。各マイクロサービスは 1 つのビジネス機能に焦点を当てており、明確に定義された API (通常は REST またはメッセージング キューを使用) を通じて他のサービスと通信します。

マイクロサービスの利点

  • スケーラビリティ: 個々のサービスは、需要に基づいて個別にスケーリングできます。
  • 柔軟性: さまざまなテクノロジーや言語を使用してさまざまなサービスを開発できます。
  • 障害分離: 1 つのサービスで障害が発生しても、システム全体には影響しません。
  • 継続的展開: サービスを頻繁かつ独立して展開できます。

Spring Cloud の主要コンポーネント:

1. Spring クラウド構成:

  • 一元的な外部構成管理。
  • Git、SVN、ローカル ファイルなどのさまざまな構成ソースをサポートします。
  • : 複数のサービスにわたるデータベース認証情報、API キー、その他のプロパティの構成。

2.スプリング クラウド Netflix:

  • Eureka、Hystrix、Zuul、Ribbon などの Netflix OSS コンポーネントを統合します。
  • ユリイカ: サービス検出サーバーとクライアント。
  • Hystrix: 耐障害性のためのサーキットブレーカー。
  • Zuul: 動的ルーティング用の API ゲートウェイ。
  • リボン: クライアント側の負荷分散。

3. Spring クラウド ゲートウェイ:

  • Zuul に代わる新しいプロジェクト。
  • リクエストをルーティングするためのシンプルかつ効果的な方法を提供します。
  • パス書き換え、負荷分散、ルート フィルターなどの機能。

4.スプリングクラウドスルース:

  • マイクロサービス全体のリクエストのフローを追跡する分散トレース。
  • 監視と分析のために Zipkin と統合します。

5.春のクラウド ストリーム:

  • イベント駆動型のマイクロサービスを構築するためのフレームワーク。
  • RabbitMQ や Apache Kafka などのメッセージング システムを使用します。

Spring Cloud を使用したシンプルなマイクロサービス アプリケーションの構築:

Spring Boot プロジェクトのセットアップ:

  • マイクロサービスごとに個別の Spring Boot プロジェクトを作成します。
  • pom.xml または build.gradle で Spring Cloud コンポーネントの依存関係を定義します。

Spring Cloud Config サーバーの構成:

  • 外部構成を管理するために構成サーバーをセットアップします。
  • 集中構成のためにマイクロサービスを構成サーバーに向けます。

Eureka によるサービス ディスカバリ:

  • サービスの登録と検出のために Eureka サーバーをセットアップします。
  • Eureka サーバーに登録するように各マイクロサービスを構成します。

Spring Cloud Gateway を使用した API ゲートウェイ:

  • リクエストをさまざまなマイクロサービスにルーティングするための Spring Cloud Gateway をセットアップします。
  • リクエストを処理するためのルーティング ルールとフィルターを定義します。

Hystrix で回復力を強化:

  • 回路遮断およびフォールバック メカニズムのために Hystrix を統合します。
  • @HystrixCommand でメソッドにアノテーションを付けてサーキット ブレークを有効にします。

Spring Cloud Sleuth を使用した分散トレース:

  • Sleuth の依存関係を追加して、リクエストのフローを追跡および記録します。
  • Zipkin を使用してトレース データを視覚化し、分析します。

例: 単純なマイクロサービス アーキテクチャの実装

次のマイクロサービスを使用した基本的な e コマース アプリケーションを考えてみましょう:

  1. 製品サービス: 製品情報を管理します。
  2. 注文サービス: 注文と取引を処理します。
  3. 在庫サービス: 在庫レベルを管理します。

ステップ 1: Spring Boot プロジェクトを作成する
サービスごとに、必要な依存関係を含む Spring Boot プロジェクトを作成します:


org.springframework.cloudspring-cloud-starter-netflix-eureka-client

ステップ 2: 構成サーバーをセットアップする
構成サーバーを作成し、Git リポジトリから読み取るように構成します:

# application.yml for Config Server
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo

ステップ 3: Eureka にサービスを登録する
各マイクロサービスで、Eureka クライアント設定を構成します:

# application.yml for Product Service
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

ステップ 4: Spring Cloud Gateway を構成する
ゲートウェイ アプリケーションでルートを設定します:

# application.yml for Gateway
spring:
  cloud:
    gateway:
      routes:
        - id: product-service
          uri: lb://PRODUCT-SERVICE
          predicates:
            - Path=/products/**

ステップ 5: Hystrix を使用してサーキット ブレーカーを追加する
サービス クラスのメソッドに注釈を付ける:

@HystrixCommand(fallbackMethod = "fallbackMethod")
public String getProductDetails(String productId) {
    // logic to get product details
}

public String fallbackMethod(String productId) {
    return "Product details not available";
}

ステップ 6: 分散トレースを有効にする
Sleuth と Zipkin の依存関係と構成を追加します:

# application.yml for Tracing
spring:
  zipkin:
    base-url: http://localhost:9411/

結論

Spring Cloud を使用してマイクロサービス アーキテクチャを実装すると、アプリケーションのスケーラビリティ、復元力、保守性が向上します。 Spring Cloud の堅牢なツールセットは、マイクロサービスの構築と管理に伴う複雑さを簡素化し、開発者にとって優れた選択肢となっています。ベスト プラクティスに従い、これらの強力なツールを活用することで、効率的でスケーラブルでフォールト トレラントなマイクロサービス ソリューションを作成できます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/vidhi_jayswal/microservices-architecture-with-spring-cloud-lff?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • もうプレプテンバーですか?
    もうプレプテンバーですか?
    皆さんおはようございます、MonDEV おめでとうございます ☕ 私たちは本格的に戻ってきており、9 月に PC に戻るのが良い理由の 1 つはプレプテンバーです! 初期の頃からニュースレターをフォローしている人や、オープンソースの世界をフォローしている人はすでに知っていると思いますが、10 月には...
    プログラミング 2024 年 11 月 2 日に公開
  • 間違って配置された return ステートメントが for ループ内でプログラムの早期終了を引き起こすのはなぜですか?
    間違って配置された return ステートメントが for ループ内でプログラムの早期終了を引き起こすのはなぜですか?
    for ループの Return ステートメントが間違っているこのプログラミングの問題では、ユーザーは 3 匹の動物に対するユーザー入力を可能にするプログラムを作成する際に困難に遭遇します。 。このプログラムは、名前、動物の種類、年齢を含むペット オブジェクトをリストに追加するように設計されています。...
    プログラミング 2024 年 11 月 2 日に公開
  • 項目 他の型の方が適している場合は文字列を避ける
    項目 他の型の方が適している場合は文字列を避ける
    1.他のデータ型の代わりに文字列を使用することは避けてください: 文字列はテキストを表すように設計されていますが、数値、列挙型、または集合構造を表すために誤用されることがよくあります。 データが本質的に数値である場合は、String. ではなく、int、float、BigInteger などの型を...
    プログラミング 2024 年 11 月 2 日に公開
  • sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    ゴルーチンのデッドロックの解決このシナリオでは、Go 同時実行コードでデッドロック エラーが発生しました。問題を詳しく調べて、効率的な解決策を提供しましょう。このエラーは、プロデューサとコンシューマの動作の不一致が原因で発生します。プロデューサー関数に実装されたプロデューサーは、限られた期間、チャネ...
    プログラミング 2024 年 11 月 2 日に公開
  • テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキスト: エラーのない記述のための包括的なガイドGoogle ドキュメントから抽出されたデータのコーディングは、特に困難な場合があります。 HTML で使用するために変換する必要がある非 ASCII シンボルが見つかった場合。このガイドでは、Unicode ...
    プログラミング 2024 年 11 月 2 日に公開
  • EchoAPI と不眠症: 実践例による包括的な比較
    EchoAPI と不眠症: 実践例による包括的な比較
    フルスタック開発者として、私は API のデバッグ、テスト、文書化のための一流のツールを用意することがいかに重要であるかを知っています。 EchoAPI と Insomnia は 2 つの傑出したオプションであり、それぞれに独自の特徴と機能があります。これらのツールについて説明し、その機能と利点を比...
    プログラミング 2024 年 11 月 2 日に公開
  • 移動時間と所要時間 |プログラミングチュートリアル
    移動時間と所要時間 |プログラミングチュートリアル
    導入 このラボは、Go の時間と期間のサポートについての理解をテストすることを目的としています。 時間 以下のコードには、Go で時間と期間を操作する方法の例が含まれています。ただし、コードの一部が欠落しています。あなたの仕事は、コードを完成させて期待通りに動作させ...
    プログラミング 2024 年 11 月 2 日に公開
  • ホイスティングにおける面接の質問と回答
    ホイスティングにおける面接の質問と回答
    1. JavaScript におけるホイスティングとは何ですか? 答え: ホイスティングは、変数や関数にメモリが割り当てられる実行コンテキストの作成フェーズ中のプロセスです。このプロセス中に、変数用のメモリが割り当てられ、変数には未定義の値が割り当てられます。関数の場合、関数定義全...
    プログラミング 2024 年 11 月 2 日に公開
  • JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    こんにちは、素晴らしい JavaScript 開発者の皆さん? ブラウザは、スクリプト (特に JavaScript) が Web ページのレイアウトと対話できるようにするドキュメント オブジェクト モデル (DOM) と呼ばれるプログラミング インターフェイスを提供します。 We...
    プログラミング 2024 年 11 月 2 日に公開
  • SPRING BATCH でプログラミングを始める
    SPRING BATCH でプログラミングを始める
    Introduction Dans vos projets personnels ou professionnels, Il vous arrive de faire des traitements sur de gros volumes de données. Le traite...
    プログラミング 2024 年 11 月 2 日に公開
  • CSS で Github プロフィールを目立たせる
    CSS で Github プロフィールを目立たせる
    これまで、Github プロフィールをカスタマイズできる唯一の方法は、写真を更新するか名前を変更することでした。これは、すべての Github プロファイルが同じに見え、カスタマイズしたり目立たせるためのオプションが最小限であることを意味しました。 それ以来、Markdown を使用してカスタム セ...
    プログラミング 2024 年 11 月 2 日に公開
  • TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript は、開発者が型を効果的に変換および再利用できるようにする組み込みのユーティリティ型を提供し、コードをより柔軟で ​​DRY にします。この記事では、TypeScript スキルを次のレベルに引き上げるのに役立つ、Partial、Pick、Omit、Record などの主要なユー...
    プログラミング 2024 年 11 月 2 日に公開
  • 電報 window.open(url, &#_blank&#); iOSでは動作がおかしい
    電報 window.open(url, &#_blank&#); iOSでは動作がおかしい
    電報ボットを作成していて、ミニアプリからチャットに情報を転送するオプションを追加したいと考えています。 window.open(url, '_blank'); を使用することにしました。 iPhone で試してみるまでは問題なく動作していました。転送の代わりに、Share を取得しま...
    プログラミング 2024 年 11 月 2 日に公開
  • フロントエンド開発者とは誰ですか?
    フロントエンド開発者とは誰ですか?
    今日のインターネット上のすべての Web サイトやプラットフォームのユーザー インターフェイス部分は、フロントエンド開発者の仕事の成果です。彼らはユーザーフレンドリーなインターフェイスの作成に携わり、サイトの外観と機能を保証します。しかし、フロントエンド開発者とはいったい誰なのでしょうか?簡単に説明...
    プログラミング 2024 年 11 月 2 日に公開
  • CSS スタイルを保持したまま HTML コンテンツを PDF として保存するにはどうすればよいですか?
    CSS スタイルを保持したまま HTML コンテンツを PDF として保存するにはどうすればよいですか?
    CSS を含む HTML コンテンツを PDF として保存するWeb 開発では、コンテンツを別の形式にエクスポートする場合でも、見た目の美しさを維持することが非常に重要です。変換プロセス中に CSS スタイルが失われる可能性があるため、HTML 要素を PDF として保存しようとするときに問題が発生...
    プログラミング 2024 年 11 月 2 日に公開

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

Copyright© 2022 湘ICP备2022001581号-3