Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス トラッキング (はじめに)

Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス トラッキング (はじめに)

これまでの N 回のブログ投稿の紹介を通じて、実際にそれらを使用してビジネス ニーズを満たす基本的なマイクロサービス アーキテクチャ システムを構築することができました。しかし、ビジネスが発展するにつれて、システムの規模はどんどん大きくなり、マイクロサービス間の呼び出し関係はどんどん複雑になっていきます。

通常、クライアントによって開始されたリクエストは、バックエンド システム内の複数の異なるマイクロサービス呼び出しを経て、最終的なリクエスト結果が共同で生成されます。複雑なマイクロサービス アーキテクチャ システムでは、ほぼすべてのフロントエンド要求が複雑な分散サービス呼び出しリンクを形成します。各リンク内の依存サービスに過度の遅延またはエラーが発生すると、最終的なリクエストが失敗する可能性があります。この時点で、各リクエストのリンク全体を追跡することがますます重要になります。リクエスト呼び出しを追跡すると、エラーの根本原因を迅速に見つけ、各リクエスト リンクのパフォーマンスのボトルネックを監視および分析するのに役立ちます。

[[221306]]

Spring Cloud Sleuth は、上記の分散サービス追跡問題に対する完全なソリューションを提供します。この章では、Spring Cloud Sleuth を使用してマイクロサービス アーキテクチャに分散サービス トレース機能を追加する方法について詳しく説明します。

クイックスタート

さまざまな概念と原則を紹介する前に、まず簡単な例を実装して、サービス呼び出しを使用してアプリケーションにいくつかの Sleuth 構成を追加し、基本的なサービス追跡機能を実装します。これにより、Spring Cloud Sleuth を事前に理解し、その後、実装プロセスの詳細を徐々に紹介します。

準備

Sleuth を導入する前に、まず前の章で学んだ内容に従って準備作業を行い、いくつかの基本的な機能とアプリケーションを構築します。

  • サービス登録センター: eureka-server。ここでは詳細には触れず、以前に構築したプロジェクトを直接使用します。または、次の例で使用されている私の公共福祉ユーレカ レジストリを直接使用することもできます。
  • マイクロサービス アプリケーション: trace-1 は REST インターフェイス /trace-1 を実装し、このインターフェイスを呼び出すと trace-2 アプリケーションへの呼び出しがトリガーされます。具体的な実装は以下のとおりです。
  • 基本的な Spring Boot アプリケーションを作成し、pom.xml に次の依存関係を追加します。
  1. <親>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <バージョン>1.5.10.RELEASE</バージョン>
  5. <相対パス/>
  6. </親>
  7. <依存関係>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </依存関係>
  11. <依存関係>
  12. <groupId>org.springframework.cloud</groupId>
  13. <artifactId>spring-cloud-starter-eureka</artifactId>
  14. </依存関係>
  15. <依存関係>
  16. <groupId>org.springframework.cloud</groupId>
  17. <artifactId>スプリングクラウドスターターリボン</artifactId>
  18. </依存関係>
  19. <依存関係管理>
  20. <依存関係>
  21. <依存関係>
  22. <groupId>org.springframework.cloud</groupId>
  23. <artifactId>spring-cloud-dependencies</artifactId>
  24. <version>ダルストン.SR5</version>
  25. <type>ポンポン</type>
  26. <scope>インポート</scope>
  27. </依存関係>
  28. </依存関係>
  29. </依存関係管理>
  • メイン アプリケーション クラスを作成し、/trace-1 インターフェイスを実装し、RestTemplate を使用して trace-2 アプリケーションのインターフェイスを呼び出します。詳細は以下の通りです。
  1. @レストコントローラ
  2. @EnableDiscoveryClient
  3. @SpringBootアプリケーション
  4. パブリッククラスTraceApplication {
  5.  
  6. プライベート最終ロガー logger = Logger.getLogger(getClass());
  7.  
  8. @ビーン
  9. @負荷バランス
  10. レストテンプレートrestTemplate() {
  11. 新しい RestTemplate()を返します
  12. }
  13.  
  14. @RequestMapping(値 = "/trace-1" 、メソッド = RequestMethod.GET)
  15. パブリック文字列トレース() {
  16. logger.info( "===呼び出しトレース-1===" );
  17. restTemplate().getForEntity( "http://trace-2/trace-2" 、 String.class).getBody();を返します
  18. }
  19.  
  20. 公共 静的void main(String[] args) {
  21. SpringApplication.run(TraceApplication.class、引数);
  22. }
  23.  
  24. }
  • application.properties で、次のように eureka.client.serviceUrl.defaultZone パラメータを eureka-server のアドレスに指定します。
  1. spring.application.name =トレース-1
  2. サーバーポート=9101
  3.  
  4. eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/
  • マイクロサービス アプリケーション: trace-2 は、trace-1 が呼び出す REST インターフェイス /trace-2 を実装します。具体的な実装は以下のとおりです。
  • pom.xml に trace-1 と同じ依存関係を持つ基本的な Spring Boot アプリケーションを作成します。
  • メイン アプリケーション クラスを作成し、/trace-2 インターフェイスを実装します。具体的な実装は以下のとおりです。
  1. @レストコントローラ
  2. @EnableDiscoveryClient
  3. @SpringBootアプリケーション
  4. パブリッククラスTraceApplication {
  5.  
  6. プライベート最終ロガー logger = Logger.getLogger(getClass());
  7.  
  8. @RequestMapping(値 = "/trace-2" 、メソッド = RequestMethod.GET)
  9. パブリック文字列トレース() {
  10. logger.info( "===<呼び出しトレース-2>===" );
  11. 戻る  「トレース」 ;
  12. }
  13.  
  14. 公共 静的void main(String[] args) {
  15. SpringApplication.run(TraceApplication.class、引数);
  16. }
  17.  
  18. }
  • application.properties で、eureka.client.serviceUrl.defaultZone パラメータを eureka-server のアドレスに指定します。さらに、次のように異なるアプリケーション名とポート番号を設定する必要があります。
  1. spring.application.name =トレース 2
  2. サーバーポート=9102
  3. eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/

上記の内容を実装すると、eureka-server、trace-1、trace-2 の 3 つのアプリケーションを起動し、postman や curl などのツールを通じて trace-1 のインターフェース http://localhost:9101/trace-1 にリクエストを送信できるようになります。戻り値 Trace と次の出力をコンソールで取得できます。

  1. --トレース-1  
  2. INFO 25272 --- [nio-9101-exec-2] ication$$EnhancerBySpringCGLIB$$36e12c68 : ===<呼び出しトレース-1>===  
  3.  
  4. --トレース-2  
  5. INFO 7136 --- [nio-9102-exec-1] ication$$EnhancerBySpringCGLIB$$52a02f0b : ===<呼び出しトレース-2>===  

追跡の実装

準備作業が完了したら、この章のメインコンテンツを開始し、上記の trace-1 と trace-2 にサービス追跡機能を追加します。 Spring Cloud Sleuth のカプセル化により、アプリケーションにサービス トレース機能を追加するのは非常に簡単になります。次のように、trace-1 と trace-2 の pom.xml 依存関係管理に spring-cloud-starter-sleuth 依存関係を追加するだけです。

  1. <依存関係>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-sleuth</artifactId>
  4. </依存関係>

この時点で、実際にサービス トレースを実装するための trace-1 と trace-2 の基本的な準備が完了しました。 trace-1 と trace-2 を再起動した後、http://localhost:9101/trace-1 にある trace-1 のインターフェースにリクエストを送信します。この時点で、コンソール出力から sleuth に関するいくつかの手がかりを得ることができます。

  1. --トレース-1  
  2. INFO [trace-1,f410ab57afd5c145,a9f2118fa2019684, false ] 25028 --- [nio-9101-exec-1] ication$$EnhancerBySpringCGLIB$$d8228493 : ===<call tr​​ace-1>===  
  3.  
  4. --トレース-2  
  5. INFO [trace-2,f410ab57afd5c145,e9a377dc2268bc29, false ] 23112 --- [nio-9102-exec-1] ication$$EnhancerBySpringCGLIB$$e6cb4078 : ===<call tr​​ace-2>===  

上記のコンソール出力から、[trace-1,f410ab57afd5c145,a9f2118fa2019684,false] の形式で追加のログ情報を確認できます。これらの要素は、分散サービス トレースを実装するための重要なコンポーネントです。各値の意味は次のとおりです。

  • 最初の値: trace-1。これは、application.properties の spring.application.name パラメータによって構成されるプロパティであるアプリケーションの名前を記録します。
  • 2 番目の値: f410ab57afd5c145。これは Spring Cloud Sleuth によって生成される ID で、Trace ID と呼ばれ、リクエスト リンクを識別するために使用されます。リクエスト リンクには、1 つの Trace ID と複数の Span ID が含まれます。
  • 3 番目の値: a9f2118fa2019684 は、Spring Cloud Sleuth によって生成される別の ID で、Span ID と呼ばれ、HTTP リクエストの送信などの基本的な作業単位を表します。
  • 4 番目の値: false は、収集および表示のために Zipkin などのサービスに情報を出力するかどうかを示します。

上記 4 つの値のうち、Trace ID と Span ID は、分散サービス トレースを実現するための Spring Cloud Sleuth の中核です。サービス要求リンクの呼び出し中は、同じトレース ID が維持され渡されるため、異なるマイクロサービス プロセスに分散された要求トレース情報全体が接続されます。上記の出力内容を例にとると、trace-1 と trace-2 は同じフロントエンド サービス要求ソースに属しているため、それらの Trace ID は同じであり、同じ要求リンク内にあります。

この記事の完全な例:

読者は、自分の好みに応じて、次の 2 つのリポジトリで trace-1 プロジェクトと trace-2 プロジェクトを表示することを選択できます。

ギットハブ

ギティー

【この記事は51CTOコラムニスト「Zhai Yongchao」によるオリジナル記事です。転載の許可を得るには、51CTO を通じて著者に連絡してください。

この著者の他の記事を読むにはここをクリックしてください

<<:  分散データベースは3つのレベルでアップグレードされています

>>:  Parallels Toolbox 2.5 for Mac 使いやすい新ツールで毎日のコンピューティングを簡素化

推薦する

natanetwork: インドネシア VPS、月額 8 ドル、2G メモリ/2 コア/100g ハード ドライブ/無制限トラフィック/1Gbps 帯域幅

インドネシアの会社であるNatanetworkは、インドネシアのVPS(インドネシアのクラウドサーバ...

「中国Vバレー」馬欄山がグリーンデータセンターを建設、アリババクラウドの液体冷却技術が初めて輸出

サーバーを水に浸す単相浸漬液冷却技術は、グリーン データ センターの新しい標準になりつつあります。 ...

BandwagonHost - ロサンゼルス CN2 回線 VPS が正式に中国聯通/Alipay 決済に接続

最新ニュース: Bandwagonhost の CN2 VPS が正式に China Unicom ...

Sina Blogを例にブログの外部リンクについて話す

老倩は正月休みで帰省した10日間ほどの間に、ものまねショーの才能を存分に発揮し、本当に感動しました!...

テンセントと百度の戦い、「ミニプログラム」が勝敗を分けるか?

わずか1年余りで、to Bは中国のインターネットで人気のトレンドになりました。 3月末、馬化騰氏はI...

myhosting 期間限定 50% オフ 仮想ホスティング プロモーション

Myhosting は 1997 年に設立されたホスティング会社で、カナダの SoftCom Inc...

aliendata: 月額 2.5 ドル、KVM 仮想 VPS、1G メモリ/1 コア (ryzen 3900X)/20g SSD/1Gbps 無制限トラフィック

ヒューストンの北部で事業を展開している Data Ideas LLC は、正式に事業を開始して 1 ...

raksmart: 799 ドル、ハイエンド クラスター、2*e5-2680v2 (20 コア、40 スレッド)/128g メモリ/480gSSD+4*2T SSD、258IP、無制限トラフィック

Raksmart は超高構成のクラスタ サーバーを 2 台リリースしており、米国サンノゼ (カリフォ...

IBMの新しい広告はハイブリッドの新時代を切り開く

2019年、IBMはオープンソース技術のリーダーであるRed Hatを340億ドルで買収し、業界最大...

SaaS 時代の未来を予測する |第8回クラウドコンピューティングアプリケーションフォーラムが開催中です

過ぎ去ろうとしている2017年、SaaS業界は穏やかに見えますが、実は暗流があります。過去 1 年間...

TUN デバイスの魔法 - フランネル UDP モード

みなさんこんにちは。私は次男です。 「トロイの木馬 - 図解 VXLAN コンテナ ネットワーク通信...

Pinterestの画像ウォーターフォールモードが中国で人気に

中国人が模倣と創造の能力において一流であることは否定できない。 Pinterest の画像ウォーター...

2021 年のトップ 10 のテクノロジー トレンド - AI、エッジ コンピューティング、マシン ビジョンなど

アーキテクチャ、クラウドコンピューティング1. 複雑なものをシンプルに: 「ミニマリズム」の道を行く...

Baidu 7.27アップデートの異常データの分析

朝、ウェブサイトのSEOデータをチェックしたとき、ショックを受けました。昨夜のBaiduのアップデー...