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

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

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

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

推薦する

catalysthost7$/月ダラス1GメモリVPS/1Gvswap

Catalysthost は 1G メモリを搭載した openvz サーバーを宣伝しています。興味の...

配布中の地域的な問題により、300ラウンドの戦いに至った

[[404321]]この記事はWeChatの公開アカウント「Su San Talks Technol...

dogyun: 300元/月、韓国独立サーバー、2*e5-2630L/16gメモリ/480gSSD+1T NVMe/10Min+5Mout

GouCloud は韓国に独立したサーバーを立ち上げました。このサーバーは完全に自動で展開され、人間...

「リベートサイト」の崩壊を受けて、北京市と他の5カ所は協力してねずみ講を取り締まることになった。

ここ半月ほど、「消費者還元」をマーケティング手段として宣伝していた国内の「キャッシュバックサイト」が...

「Baiduホームページに追加」サインを表示する方法

2012年5月17日正午、Baiduのホームページに「Baiduホームページに追加」という特別なロゴ...

記事からインターネットマーケティングを学ぶ

最近最もホットなセレブが誰なのか、皆さんご存知だと思います。それは「アーティクル」です。すべての主要...

ウェブサイトのハッキングにうまく対処するにはどうすればよいでしょうか?

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

検索エンジンのアルゴリズムに準拠したプロモーションは良いプロモーションです

ウェブサイトのプロモーションは、長い間議論されてきたテーマです。さまざまな時期にさまざまな形式が登場...

北京聯通はパッケージスキャンダルに巻き込まれ、経営不振と従業員が数千万元の巨額の利益を得た

テンセントテクノロジーの郭暁鋒は7月15日に報告した。北京聯通は一晩で10万枚の「違法」パッケージカ...

ヘンゴーストはどうですか?香港データセンター、香港独立サーバー評価、実際のテストデータ共有

Henghost(Hengchuang Technology)は、香港クラウドサーバー、香港独立サー...

ライワンの無料トラフィックから、無料のビジネスモデルは無料か破壊されているかのどちらかであることがわかります。

アリババグループの会長、ジャック・マー氏はこう語った。「起業で最も恐ろしいのは、見ることができず、見...

ポスト SEO 時代において、トラフィックを節約するために何ができるでしょうか?

SEOをご存知ですか?この言葉は、2007年にウェブマスターコミュニティでよく使われる言葉になりまし...

KubernetesとDockerの基本概念と共通コマンドの比較

Docker は、多くのユーザーが使い始めるための基本的なコンテナおよびオーケストレーション ツール...

Baidu の最近の調整か​​らどのような洞察が得られましたか?

最近、百度は多大な努力をしています。多くのジャンクサイト、重複サイトなどがダウングレードまたはK化さ...