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 を通じて著者に連絡してください。

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

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

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

推薦する

9s9s: CN2 GIAネットワーク、米国ネイティブIP、Netflix/Hulu/HBOを視聴可能、年間210元から、有料評価データ

中国商人の死海インターネット(9s9s)は、運営開始から1年になる新ブランドです。主な業務は米国ロサ...

raksmart: 100M 帯域幅、香港専用サーバー/香港クラスターサーバー、月額 123 ドルから、3 つのネットワークへの直接接続 (実名は不要、匿名)

raksmart 香港データセンターには、香港独立サーバーや香港クラスターサーバーなど、10M、20...

新しいサイトが掲載とランキングを獲得するための2つの強力なツール

Baidu の新規サイトのレビュー期間は比較的遅いです。新しいドメイン名をお持ちの場合、ウェブサイト...

eleven2-50%オフ/SSDに完全アップグレード/12年の実績を誇るホスティング会社

以前のHDDディスク搭載のcpanelパネルホストは時代遅れです。eleven2はSSDディスクの全...

成功か失敗かは細部によって決まります。ブログのタグを最適化するにはどうすればよいでしょうか?

ブログにタグを追加することは、ブログ記事を書くときに最も基本的な習慣の 1 つになっています。これに...

ファーウェイクラウドウランチャブデータセンターが国家新データセンターリストに選出

工業情報化部は3月28日、新データセンターの建設と応用を加速し、経済社会の各分野のデジタル変革をより...

傅志華:中国にはまだPinterestがないのは、コミュニティで共有する習慣がないからだ

編集者注:Pinterest とは何でしょうか?興味グラフ コミュニティだと言う人もいれば、ソーシャ...

Tuanbao.com が「賃金未払いスキャンダル」に巻き込まれる: 共同購入サイトの変革は避けられない

国内の共同購入サイトの数は2010年8月以降1,000サイトを突破した。非合理的な発展により、201...

ウェブサイトタイトルの変更が検索エンジンに与える影響の分析例

今年、百度の「6.28事件」が突如発生し、検索業界の長らく沈黙していた戦場が破られた。「8.22事件...

#大容量ハードドライブ VPS# vpsdime-$7/2g メモリ/4 コア/500g ハードドライブ/4T トラフィック/10G ネットワーク

vpsdime(年に設立され、複数のブランドを運営しており、常に高い評価を得ています)については後ほ...

質疑応答プラットフォームが依然として外部リンクの宝庫であり得るかどうかの簡単な分析

かつて、質疑応答プラットフォームは、その重みと効果の両面で、すべてのオンライン マーケターのお気に入...

ミニプログラムがジュエリー業界のオンラインマーケティングに新たな可能性をもたらす

月収10万元の起業の夢を実現するミニプログラム起業支援プランジュエリー業界は、これまで常にオフライン...

#台湾サーバー# serverfield-$169/E5-2407/16g メモリ/250g SSD/無制限トラフィック

serverfield は 2009 年に設立された台湾の会社 (登録番号: 66607099) で...