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

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

前回の記事「分散サービストラッキング(Logstashの統合)」を通じて、ELKプラットフォームが提供する収集、保存、検索などの強力な機能を利用できるようになり、トラッキング情報の管理と利用が非常に便利になりました。ただし、ELK プラットフォームのデータ分析ディメンションでは、リクエスト リンクの各段階での時間遅延が考慮されていません。多くの場合、リクエスト リンクをトレースする理由の 1 つは、コール リンク全体の過度の遅延のボトルネックの原因を見つけること、または分散システムの遅延監視などの時間関連の要件を満たすことです。現時点では、ELK のようなログ分析システムはやや弱いようです。このような問題には、Zipkin を導入すると簡単に解決できます。

Zipkin の紹介

Zipkin は、Google Dapper をベースにした Twitter のオープンソース プロジェクトです。これを使用して、各サーバーのリクエスト リンクの追跡データを収集し、提供される REST API インターフェイスを使用して追跡データを照会し、分散システムの監視プログラムを実装することで、システム内の遅延増加の問題を迅速に発見し、システム パフォーマンスのボトルネックの根本原因を見つけることができます。開発指向の API インターフェースに加えて、追跡情報を直感的に検索したり、リクエスト リンクの詳細を分析したりするのに役立つ便利な UI コンポーネントも提供します。たとえば、一定期間内の各ユーザーリクエストの処理時間を照会できます。

上の図は、4 つのコア コンポーネントで構成される Zipkin の基本アーキテクチャを示しています。

  • コレクター: コレクター コンポーネント。主に外部システムから送信された追跡情報を処理し、この情報を Zipkin によって内部処理される Span 形式に変換して、その後の保存、分析、表示などの機能をサポートするために使用されます。
  • ストレージ: 主にコレクターが受信した追跡情報を処理するストレージ コンポーネント。デフォルトでは、この情報はメモリに保存されます。このストレージ戦略を変更し、他のストレージ コンポーネントを使用して追跡情報をデータベースに保存することもできます。
  • RESTful API: 主に外部アクセス インターフェイスを提供するために使用される API コンポーネント。たとえば、追跡情報をクライアントに表示したり、監視のために外部システムにアクセスしたりします。
  • Web UI: API コンポーネントに基づいて実装された UI コンポーネント、上位層アプリケーション。 UI コンポーネントを通じて、ユーザーは追跡情報を便利かつ直感的に照会および分析できます。

HTTP コレクション

Zipkin の統合は Spring Cloud Sleuth に自動構成でカプセル化されているため、簡単に導入して使用できます。 Sleuth と Zipkin の基本的な統合プロセスを詳しく見てみましょう。主に2つのステップに分かれています。

ステップ1: Zipkinサーバーを構築する

zipkin-server という名前の基本的な Spring Boot アプリケーションを作成し、次のように pom.xml に Zipkin Server の依存関係を導入します。

  1. <親>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <バージョン>1.5.10.RELEASE</バージョン>
  5. <相対パス/>
  6. </親>
  7. <依存関係>
  8. <依存関係>
  9. <groupId>io.zipkin.java</groupId>
  10. <artifactId>zipkin サーバー</artifactId>
  11. </依存関係>
  12. <依存関係>
  13. <groupId>io.zipkin.java</groupId>
  14. <artifactId>zipkin-autoconfigure-ui</artifactId>
  15. </依存関係>
  16. </依存関係>
  17. <依存関係管理>
  18. <依存関係>
  19. <依存関係>
  20. <groupId>org.springframework.cloud</groupId>
  21. <artifactId>spring-cloud-dependencies</artifactId>
  22. <version>ダルストン.SR5</version>
  23. <type>ポンポン</type>
  24. <scope>インポート</scope>
  25. </依存関係>
  26. </依存関係>
  27. </依存関係管理>
  • メイン アプリケーション クラス ZipkinApplication を作成し、@EnableZipkinServer アノテーションを使用して次のように Zipkin Server を起動します。
  1. @EnableZipkinServer
  2. @SpringBootアプリケーション
  3. パブリッククラス ZipkinApplication {
  4.  
  5. 公共 静的void main(String[] args) {
  6. SpringApplication.run(ZipkinApplication.class、引数);
  7. }
  8.  
  9. }
  • application.properties で、サービス ポート番号を 9411 に設定するなどの簡単な構成を行います (クライアントが統合されている場合、自動構成によってポート 9411 に接続されるため、サーバーでポートが 9411 に設定されている場合、クライアントはこの構成を省略できます)。
  1. spring.application.name = zipkin-server
  2. サーバーポート=9411

上記のプロジェクトを作成したら、それを起動して http://localhost:9411/ にアクセスします。 Zipkin 管理ページは次のように表示されます。

ステップ2: アプリケーション用のZipkinサービスを導入して構成する

Zipkin サーバーの構築が完了したら、追跡情報を Zipkin サーバーに出力するようにアプリケーションを構成する必要があります。以前実装した trace-1 と trace-2 を例として、次の変更を加えてみましょう。

  • 以下に示すように、spring-cloud-sleuth-zipkin 依存関係を trace-1 と trace-2 の pom.xml に導入します。
  1. <依存関係>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-sleuth-zipkin</artifactId>
  4. </依存関係>
  • 以下に示すように、trace-1 と trace-2 の application.properties に Zipkin Server の構成情報を追加します (zip-server アプリケーションでポートを 9411 に設定し、ローカルでデバッグする場合は、デフォルト値が http://localhost:9411 であるため、このパラメータは未構成のままにしておくこともできます)。
  1. spring.zipkin.base-url=http://localhost:9411

テストと分析

この時点で、Zipkin サーバーに接続するための基本的な作業はすべて完了しました。引き続き eureka-server、trace-1、trace-2 を起動し、いくつかのテスト実験を行って、その動作メカニズムを予備的に理解することができます。

まず、trace-1 インターフェース (http://localhost:9101/trace-1) にいくつかのリクエストを送信します。ログ内のトレース情報の最後の値が true の場合、トレース情報が Zipkin サーバーに出力されることを意味します。したがって、この時点で、Zipkin Server 管理ページに移動し、適切なクエリ条件を選択し、[トレースの検索] をクリックして、ログに表示されたトレース情報をクエリできます (ページの右上隅にある入力ボックスで、ログ内のトレース ID に従って検索することもできます)。次のページを参照してください。

以下の trace-1 エンドポイントをクリックすると、懸念されるリクエスト時間の消費など、Sleuth によって収集された詳細情報も取得できます。

ナビゲーション バーの [依存関係] メニューをクリックすると、追跡情報分析に基づいて Zipkin Server によって生成されたシステム要求リンク依存関係グラフも表示できます。

メッセージミドルウェアコレクション

Zipkin を統合する場合、Spring Cloud Sleuth は HTTP 経由でトレース情報を収集するだけでなく、メッセージ ミドルウェアを通じてトレース情報の非同期収集もカプセル化します。 Spring Cloud Stream を組み合わせることで、アプリケーション クライアントがトレース情報をメッセージ ミドルウェアに簡単に出力できるようになり、Zipkin サーバーはメッセージ ミドルウェアからこのトレース情報を非同期的に使用できるようになります。

次に、以前に実装した trace-1 および trace-2 アプリケーションと zipkin-server サーバーに基づいていくつかの変更を加え、メッセージ ミドルウェアを通じてトレース情報を収集します。変換は非常に簡単です。すぐに実装するには、プロジェクトの依存関係と構成ファイルにいくつかの調整を加えるだけです。以下では、クライアントとサーバーの変換について詳しく説明します。

ステップ1: クライアントのトレース1とトレース2を変更する

  • トレース情報を生成した後、trace-1 と trace-2 がサンプル レコードをメッセージ ミドルウェアに出力できるようにするには、以前に導入した spring-cloud-starter-sleuth 依存関係に加えて、Spring Cloud Stream に対する zipkin の拡張依存関係である spring-cloud-sleuth-stream と、Spring Cloud Stream に基づくメッセージ ミドルウェア バインダー依存関係も導入する必要があります。 RabbitMQ を例にとると、次の依存関係を追加できます。
  1. <依存関係>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-sleuth-stream</artifactId>
  4. </依存関係>
  5.  
  6. <依存関係>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
  9. </依存関係>
  • application.properties 構成の HTTP 実装で使用される spring.zipkin.base-url パラメータを削除し、実際の展開状況に応じて、メッセージ ミドルウェアの関連構成を追加します。たとえば、RabbitMQ に関する次の構成情報などです。
  1. spring.rabbitmq.host=ローカルホスト
  2. spring.rabbitmq.port=5672
  3. spring.rabbitmq.ユーザー名=springcloud
  4. spring.rabbitmq.パスワード= 123456

ステップ2: zipkin-serverサーバーを変更する

zipkin-server サーバーがメッセージ ミドルウェアから追跡情報を取得できるようにするには、pom.xml でメッセージ ミドルウェアの収集とカプセル化のためのサーバー側依存関係 spring-cloud-sleuth-zipkin-stream を導入するだけで済みます。同時に、使用される特定のメッセージ ミドルウェアをサポートするために、メッセージ ミドルウェアのバインダー実装も導入する必要があります。たとえば、RabbitMQ を例にとると、依存関係に次のコンテンツを追加できます。

  1. <依存関係>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
  4. </依存関係>
  5.  
  6. <依存関係>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
  9. </依存関係>
  10.  
  11. <依存関係>
  12. <groupId>io.zipkin.java</groupId>
  13. <artifactId>zipkin-autoconfigure-ui</artifactId>
  14. </依存関係>

spring-cloud-sleuth-zipkin-stream 依存関係は、メッセージ ミドルウェアからトレース情報を収集するためのコア カプセル化であり、メッセージ ミドルウェアを統合するためのコア依存関係、zipkin サーバーのコア依存関係、およびその他のよく使用される依存関係 (たとえば、データ ストレージを拡張するための依存関係、テストをサポートするための依存関係など) が含まれます。ただし、このパッケージは zipkin のフロントエンド依存関係 zipkin-autoconfigure-ui を導入しないことに注意してください。使いやすさのために、ここでも参照します。

テストと分析

上記の変換が完了したら、eureka-server、trace-1 および trace-2、zipkin-server の起動を継続し、RabbitMQ も実行状態であることを確認します。この時点で、RabbitMQ コントロール ページに sleuth という名前のスイッチが表示されます。これは、zipkin メッセージ ミドルウェア コレクター実装で使用されるデフォルトのトピックです。

***、以前の検証方法を使用し、trace-1 インターフェースにいくつかのリクエストを送信します: http://localhost:9101/trace-1。サンプリングされたトレース情報がある場合 (デバッグ時に、各トレース情報を収集するために AlwaysSampler サンプリング メカニズムを設定できます)、RabbitMQ コントロール ページでメッセージが sleuth exchanger に送信されたことを確認できます。同時に、zipkin サーバーの Web ページで対応するトレース情報を検索することもできます。これで、メッセージ ミドルウェアを使用してトレース情報を収集するタスクは完了です。

完全な例:

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

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

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

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

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

<<:  VMware が新たなエコシステムの構築に向けて Cloud Harbor を立ち上げ

>>:  Aruba、モバイルファースト アーキテクチャを推進し、未来のインテリジェント デジタル ワークプレイスを実現

推薦する

外部リンクは本当に役に立つのでしょうか?外部リンクの役割は何でしょうか?

最近、私がSEOの基礎知識について語っていることに気づいた人もいるかもしれません。実は、SEOは基礎...

Handu Yisheのウェブマスターから学ぶインターネットマーケティングスキル

概要:6月22日、女性服ブランドHan Du Yisheが盛大なウェブマスターカンファレンスを開催し...

ウェブサイトのランキングに直接影響を与える4つの大きな間違いについて詳しく説明します

ウェブサイト所有者の90%は、自分のウェブサイトが標準に最適化されており、コンテンツが完璧で、ユーザ...

Pogoplug セール: 無制限のクラウド ストレージが年間 29 ドル

Pogoplug、初めて聞きましたが、公式の情報によると、すでに従業員が50人いて、米国カリフォルニ...

友好的なリンク交換で見落としがちな重要な指標を分析する: PR出力値

こんな風に感じたことはありませんか。Baidu で何かや質問を検索したとき、返される結果が満足のいく...

ウェブサイトの外部リンクの平均分布は、リソースを節約し、サイト全体の重量を改善するのに役立ちます。

コンテンツが王様で外部リンクが女王だった時代は過ぎ去り、検索エンジンは近年絶えず改良され、外部リンク...

コンテンツマーケティング記事を書くためのヒント

一定のライティングスキルを持つことは、インターネット マーケターの基本的なスキルであると言えるでしょ...

VSaaS を使用してビデオとアラームを管理するにはどうすればよいですか?

​組織が人々と財産の安全とセキュリティの向上を求めているため、ビデオ監視の需要は毎年増加し続けていま...

ウェブサイトのコンバージョン率を向上させる方法

私たちが行うすべての SEO の最終目標はコンバージョンであるため、コンバージョン率が最終目標となり...

Safehouse が上海聯通と提携し、ビッグデータ業界の未来を勝ち取る

2月1日、UCloudは上海聯通のパートナーとして、「未来に向けて共に働く」をテーマにした上海聯通2...

選択: 企業ウェブサイトに大きな変更を加える方法

ウェブサイトのバージョンを更新することは一般的です。ウェブサイトを公開時から「変更なし」のままにして...

非営利慈善団体ウェブサイト向けの Google SEO: ウェブサイト診断のヒント

ウェブサイト診断のヒント2012年1月18日午前10時46分投稿者: Google 中国語検索品質チ...

オンラインドメイン名の投機的登録は絶え間ない紛争を引き起こし、裁判所は取り消し期限を設定

著名な企業ドメイン名の投機的かつ悪意のある登録は、指定された期間内に取り消されます。重慶市第五中級人...

raksmart: 「香港\日本\米国 cn2」指定シリーズ VPS が 50% オフ、トラフィック無制限の全 VPS が 20% オフ

Raksmart は今月、大規模な VPS プロモーションを開催しています。1G メモリと無制限トラ...

ウェブマスターネットワークニュース: 6桁ドメイン名の新時代が到来したかもしれない。警察がQvod屋台事件に介入

1. クアイボは今日トラブルに巻き込まれた:多数の警察がその巣を襲撃したKuaiBoが「心機一転」し...