Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス追跡 (追跡原則)

Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス追跡 (追跡原則)

前回の記事「分散サービス トレース (入門)」の例を通じて、Spring Cloud Sleuth を介してマイクロサービス アプリケーションに分散トレースを実装するための基本要素を追加しました。この記事では、分散サービス トラッキングを実装する際の重要なポイントについて詳しく説明します。

分散システムにおけるサービスの追跡は、理論的には複雑ではありません。主に以下の2つのポイントが含まれます。

  • リクエスト追跡を実装するには、リクエストが分散システムのエントリ エンドポイントに送信されたときに、サービス追跡フレームワークでそのリクエストの一意の追跡識別子を作成する必要があります。同時に、分散システム内を循環する場合、フレームワークは、要求元に返されるまで、常に一意の識別子を渡し続けます。この一意の識別子は、前の記事で説明した Trace ID です。トレース ID を記録することで、すべてのリクエスト プロセス ログを関連付けることができます。
  • 各処理ユニットの遅延時間をカウントするため、リクエストが各サービス コンポーネントに到達したとき、または処理ロジックが特定の状態に到達したとき、* 識別子を使用してその開始、特定のプロセス、および終了をマークします。この識別子は、前の記事で説明した Span ID です。各スパンには、開始ノードと終了ノードの 2 つのノードが必要です。スパンの始まりと終わりのタイムスタンプを記録することで、スパンの時間遅延をカウントできます。タイムスタンプ レコードに加えて、イベント名、リクエスト情報などの他のメタデータも含めることができます。

[[222355]]

クイック スタートの例では、spring-cloud-starter-sleuth コンポーネントの実装により、ログ レベルのトレース情報に簡単にアクセスできました。 Spring Boot アプリケーションでは、プロジェクトに spring-cloud-starter-sleuth 依存関係を導入することで、現在のアプリケーションの各通信チャネルの追跡メカニズムが自動的に構築されます。

  • RabbitMQ、Kafka(またはその他の Spring Cloud Stream バインダー実装)などのメッセージング ミドルウェアを介して配信されるリクエスト
  • Zuulプロキシを通過するリクエスト
  • RestTemplate を通じて開始されたリクエスト

クイック スタートの例では、trace-1 から trace-2 へのリクエストは RestTemplate を通じて実装されるため、spring-cloud-starter-sleuth コンポーネントがリクエストを処理します。 sleuth は、トレース 2 に送信する前に、トレースに必要な重要な情報をリクエストのヘッダーに追加します。主に次の情報です (ヘッダー情報の定義の詳細については、org.springframework.cloud.sleuth.Span のソース コードを表示することで取得できます)。

  • X-B3-TraceId: リクエストリンク(トレース)の***識別子。
  • X-B3-SpanId: 作業単位(Span)の一意の識別子。
  • X-B3-ParentSpanId: 現在の作業単位が属する前の作業単位を識別します。ルート スパン (リクエスト リンクの最初の作業単位) の値が空です。
  • X-B3-Sampled: サンプル出力フラグが使用されているかどうか。1 は出力が必要であることを意味し、0 は出力が不要であることを意味します。
  • X-Span-Name: 作業単位の名前

次のように、trace-2 の実装にいくつかの変更を加えることで、これらのヘッダー情報を出力できます。

  1. @RequestMapping(値 = "/trace-2" 、メソッド = RequestMethod.GET)
  2. パブリック文字列トレース(HttpServletRequest リクエスト) {
  3. logger.info( "===<call tr​​ace-2, TraceId={}, SpanId={}>===" ,
  4. リクエスト.getHeader( "X-B3-TraceId" )、リクエスト.getHeader( "X-B3-SpanId" ));
  5. 戻る  「トレース」 ;
  6. }

上記の変換後、クイック スタート サンプル コンテンツを再度実行し、trace-1 へのインターフェイス アクセスを開始します。次のような出力が得られます。 trace-2 のコンソールには現在処理中の TraceID と SpanId の情報が出力されます。

  1. --トレース-1  
  2. INFO [trace-1,a6e9175ffd5d2c88,8524f519b8a9e399, true ] 10532 --- [nio-9101-exec-2] icationEnhancerBySpringCGLIB27aa9624 : ===<call tr​​ace-1>===  
  3.  
  4. --トレース-2  
  5. INFO [trace-2,a6e9175ffd5d2c88,ce60dcf1e2ed918f, true ] 1208 --- [nio-9102-exec-3] icationEnhancerBySpringCGLIBa7d84797 : ===<call tr​​ace-2、TraceId=a6e9175ffd5d2c88、SpanId=be4949ec115e554e>===  

追跡情報をより直感的に観察するために、application.properties に次の構成を追加することもできます。

  1. ログレベル.org.springframework.web.servlet.DispatcherServlet =DEBUG

Spring MVC リクエストディスパッチログレベルを DEBUG レベルに調整すると、より多くのトレース情報を確認できます。

  1. --トレース-1  
  2. 2016-11-27 09:26:52.663 DEBUG [trace-1,a6e9175ffd5d2c88,a6e9175ffd5d2c88, true ] 10532 --- [nio-9101-exec-2] osweb.servlet.DispatcherServlet: 「dispatcherServlet」という名前の DispatcherServlet が [/trace-1] の GET リクエストを処理しています 
  3. 2016-11-27 09:26:52.666 DEBUG [trace-1,a6e9175ffd5d2c88,a6e9175ffd5d2c88, true ] 10532 --- [nio-9101-exec-2] osweb.servlet.DispatcherServlet : [/trace-1] の Last-Modified 値は -1 です 
  4. 2016-11-27 09:26:52.685 DEBUG [trace-1,a6e9175ffd5d2c88,8524f519b8a9e399, true ] 10532 --- [nio-9101-exec-2] osweb.servlet.DispatcherServlet: Null ModelAndView が 'dispatcherServlet' という名前の DispatcherServlet に返されました: HandlerAdapter がリクエスト処理を完了したと想定しています 
  5. 2016-11-27 09:26:52.685 DEBUG [trace-1,a6e9175ffd5d2c88,a6e9175ffd5d2c88, true ] 10532 --- [nio-9101-exec-2] osweb.servlet.DispatcherServlet: リクエストが正常に完了しました 
  6.  
  7. --トレース-2  
  8. 2016-11-27 09:26:52.673 DEBUG [trace-2,a6e9175ffd5d2c88,be4949ec115e554e, true ] 1208 --- [nio-9102-exec-3] osweb.servlet.DispatcherServlet: 'dispatcherServlet' という名前の DispatcherServlet が [/trace-2] の GET リクエストを処理しています 
  9. 2016-11-27 09:26:52.679 DEBUG [trace-2,a6e9175ffd5d2c88,be4949ec115e554e, true ] 1208 --- [nio-9102-exec-3] osweb.servlet.DispatcherServlet : [/trace-2] の Last-Modified 値は -1 です 
  10. 2016-11-27 09:26:52.682 DEBUG [trace-2,a6e9175ffd5d2c88,ce60dcf1e2ed918f, true ] 1208 --- [nio-9102-exec-3] osweb.servlet.DispatcherServlet: Null ModelAndView が 'dispatcherServlet' という名前の DispatcherServlet に返されました: HandlerAdapter がリクエスト処理を完了したと想定しています 
  11. 2016-11-27 09:26:52.683 DEBUG [trace-2,a6e9175ffd5d2c88,be4949ec115e554e, true ] 1208 --- [nio-9102-exec-3] osweb.servlet.DispatcherServlet: リクエストが正常に完了しました 

この記事の完全な例:

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

Github: https://github.com/dyc87112/SpringCloud-Learning/

gitee: https://gitee.com/didispace/SpringCloud-Learning/

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

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

<<:  仮想化バックアップについてお話しましょう

>>:  ビットコインマイニング技術: 分散データストレージ、ピアツーピア伝送、コンセンサスメカニズム、暗号化アルゴリズム...

推薦する

マーケティング戦略の分析: Three Squirrels が 1 年足らずで急成長できたのはなぜでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています著者: D...

あそこの景色は美しいですね。国内のショッピングガイドサイトがどこへ向かうのか見てみましょう

つい最近、Pinterest が新たに 2 億ドルを調達しました。昨日の午後、Fanli.com は...

清雲新創クラウドは国内の3段階の置き換えを護衛する

現在の国際環境はますます複雑化、深刻化しており、国防や科学技術安全保障の重要性はより顕著になっていま...

ネットセレブのヒットの法則:老年、中年、若者の3世代

著者 | 蘇 琦編集者 | 金 宇凡「私の名前はディン・ジェンです。そしてこれは私のポニーのパールで...

Weiboマーケティング実践事例:1日で1万人以上のファンを獲得する5つのプロモーション手法

なぜ私たちは「A Bite of China」をフォローしたがるのでしょうか?なぜ私たちは特定の人物...

ベライゾンとホンダ、運転の安全性向上のため5Gとエッジコンピューティングで協力

海外メディアの報道によると、ホンダと通信事業者のベライゾンは、5Gとモバイルエッジコンピューティング...

ZStack はどのようにしてハイブリッド クラウドの災害復旧を実現するのでしょうか?この記事を読めば分かるだろう

[51CTO.com からのオリジナル記事]この記事では、ZStack ハイブリッド クラウド ディ...

Ceph の運用とメンテナンスで分散ストレージの「落とし穴」を知る

過去 2 年間、私の主な仕事は Hadoop テクノロジー スタックでしたが、最近 Ceph に触れ...

dedione - 独占: CN2 GIA、1Gbps 帯域幅、無制限トラフィック VPS

dedioneの最新ニュース: [1] 新しいコンピュータルーム(Sharkではない)に、いくつかの...

データストレージを超えて: 新興のクラウドコンピューティング技術が 4 つの伝統的な業界にどのような革命をもたらすか

クラウド コンピューティングの定義や理解がいかに「曖昧」であっても、クラウド コンピューティングは人...

インテルがクラウドコンピューティングの加速キーを押す

4 月 7 日、Intel はシングル ソケットおよび 2 ソケット サーバー向けに設計された第 3...

AIOps ツールがクラウド コンピューティングに新たな命を吹き込む理由

[[331103]] AIOps ツールは IT 分野で幅広い応用が期待されていますが、クラウド テ...

ユーザーにブランドロゴを覚えてもらうにはどうすればよいでしょうか? LOGO Design Network はユニークなロゴのデザインをお手伝いします。

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますLOGO ...

Huawei Cloud、ハイブリッドクラウド災害復旧ソリューションをリリース

最近、HUAWEI CONNECT 2018 で、HUAWEI Cloud は完全なパブリック クラ...

IoT のエッジ コンピューティングで Kafka を使用する方法

[51CTO.com クイック翻訳] エッジ テクノロジーの分野では、製造、自動化、航空、物流、小売...