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

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

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

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

推薦する

WeChatパブリックアカウントの闇ビジネスチェーンを暴く

11月16日、万達グループは正式に北京市裁判所に訴訟を起こし、微信(ウィーチャット)の公式アカウント...

グリーンラディッシュがリンク仲介プラットフォームの生き残り方について語る

アリ・ウェイウェイがKステーションに送られたことから、ウェブマスターネットワークがリンク取引プラット...

ハイブリッドクラウド向けの優れたオープンソースツール

企業は現在、さまざまな IT リソースを活用してビジネスを強化しています。コストが最大の考慮事項であ...

ヒープ メモリ: Java プログラムの「宝物」、そこに何が隠されているかご存知ですか?

みなさんこんにちは。私はテクノロジーの共有が大好きなプログラマーの Xiaomi です。今日は、Ja...

Kubernetes ポリシー エンジン Kyverno の使用

Kyverno は Nirmata のオープンソース プロジェクトであり、後に CNCF に寄贈され...

初心者でも毎日高品質なソフト記事を書けるようになる方法

ソフトコンテンツマーケティングは非常に効果的なマーケティング手法ですが、非常に難しいものでもあります...

情報フロー型広告のアイデア8セット+組み合わせターゲティング2種類、ゲットしよう! | ゲーム業界

百度の情報流通資源の中で、百度モバイルは最も大きな容量を誇り、その容量は急速に増加しています。ゲーム...

デバイス・エッジ・クラウドの連携: クラウドからエッジへ

SDX は Software Defined X の略で、ソフトウェア定義パラダイムを意味し、ソフト...

映画ウェブサイトの最適化: ドメイン名、スペース、プログラムの選択

みなさん、こんにちは。前回、新しいウェブサイトのランキングを目撃した件についてお話ししましたが、今そ...

100億ドル!アマゾンが今後10年間の米国のクラウドコンピューティング受注を独占、マイクロソフトは不満を表明

結局、最後に笑ったのはアマゾンだった。 Nextgov は、Amazon AWS が国家安全保障局か...

中国IT業界の4大リーダーがインターネットを再定義し統合

Discuz! の愛好家たちは 4 月 10 日に、インターネット時代は注目経済の時代であると報告し...

ブランドマーケティングプロモーション、ハンガーマーケティングの真髄!

あなたはこの種のページをよく知っているはずです!大きな「数量限定、期間限定、購入限定…」 「本日限定...

B2CプラットフォームSEMでキーワードを見つける方法

B2C プラットフォーム SEM のキーワードを見つけて設定する方法は、SEM スペシャリストにとっ...

テンセントクラウドがローコードクラウド開発プラットフォームを立ち上げ、アプリケーション開発の敷居を大幅に下げる

11月29日に開催された第2回「ミニプログラムクラウド開発」テクノロジーサミットで、テンセントクラウ...

SEO担当者の日々の仕事スケジュールと月間・週間目標スケジュール(パート1)

私の知る限り、ウェブサイトを期待通りの効果に最適化したり、期待を上回る成果を出したりできる SEO ...