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、モバイルファースト アーキテクチャを推進し、未来のインテリジェント デジタル ワークプレイスを実現

推薦する

ウェブ編集者必携:検索エンジン最適化の基本要素

1. 良いコンテンツを作成するGoogle で良いランキングを獲得したいなら、まず自分自身に問いかけ...

SEO 最適化を行う際、これらの 8 つのポイントを本当に理解していますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO 最適化を長い間続...

deinserverhost - $5.9/4g メモリ/4 コア/50g SSD/1T トラフィック/ドイツ VPS

deinserverhost は 2009 年に設立されたドイツの企業です。同社の主な事業には、ドメ...

ウェブマスターネットワークからの毎日のレポート:百度が旅行ウェブサイトの価格競争を開始するためにクラウドサービスを開始

Baidu、開発者にAPIを提供するクラウドサービスプラットフォームを正式に開始9月3日午前のニュー...

「コンテンツ」+「外部リンク」+「ユーザーエクスペリエンス」= チーム管理の秘密

成功するウェブサイトを構築するとなると、多くの友人は、良い外部リンクを構築し、良いコンテンツを作成し...

2019年メーデー休暇旅行アプリ市場レポート!

先日終了したメーデーの休日中、目的地やアトラクションでは、おなじみの「群衆に従う」休日パターンが再び...

封鎖が強化されました!米国は、中国の顧客がアメリカのクラウドコンピューティング企業のコンピューティングパワーを利用してAIを開発することを阻止するだろう

米国政府は、進行中の米国貿易戦争の一環として、人工知能の開発と訓練に使用される高度なチップの中国への...

原稿の質を向上させるにはどうすればいいでしょうか?

私が検索したキーワードは「成都 近視手術」でした。最初のいくつかはプロモーションで、次に百度の製品、...

フォーラムのプロモーションのための素晴らしいアイデア

この話題について話す前に、まず、何度も記事の投稿に失敗した友人全員に一言言わせてください。この原稿は...

vpsace-128M メモリ VZ 年払い 9 米ドル

以前、vpsace のプロモーションについて書きました (こちらを参照)。 全体的な状況: Inte...

アジアのクラウドソーシングサイトが静かに台頭:中国が最大の「雇用者」に

はじめに:オーストラリアのデザイナー向けクラウドソーシングサービス「DesignCrowd」の創設者...

ウェブサイトの編集と最適化で注意すべき事項について簡単に説明します

電子商取引が蔓延するこの時代、ますます多くの企業のウェブサイトが製品のオンラインプロモーションに力を...

入札キーワード選択の核となるステップ

入札キーワードの選択は非常に重要です。広告業界では、検索エンジン入札プロモーションに適したキーワード...

プロモーション - 言葉と数字の背後にあるロジック

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

ウェブサイトのランキング最適化レッスン 3: SEO ランキング ツールを表示するにはどうすればいいですか?早く並んで美味しいですか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO を行う人の 10...