この記事はWeChat公式アカウント「Mayuan Technology Column」から転載したもので、著者はChenです。この記事を転載する場合は、CodeApeテクノロジーコラム公式アカウントまでご連絡ください。 この記事では、Spring Cloud Sleuth と Zipkin という 2 つのコンポーネントに焦点を当てて、リンク トラッキングに関する知識をいくつか紹介します。次の記事でもう一つ紹介します。 記事のディレクトリは次のとおりです。 リンクトラッキングはなぜ必要なのでしょうか?大規模な分散マイクロサービス システムでは、システムは N 個以上のモジュールに分割されます。これらのモジュールはさまざまな機能を担当し、最終的に豊富な機能を提供できるシステムに統合されます。この分散アーキテクチャでは、次の図に示すように、リクエストには複数のサービスが関係することがよくあります。 サービス間の呼び出しが複雑になり、メンテナンスコストが飛躍的に増加します。次のような問題が必ず発生します。
分散アーキテクチャにおける問題を迅速に特定するために、分散リンク トラッキングが誕生しました。分散要求をコールリンクに復元し、ログ記録、パフォーマンス監視を実行し、分散要求のコールステータスを集中的に表示します。たとえば、各サービス ノードで消費された時間、リクエストが到達したマシン、各サービス ノードのリクエスト ステータスなどです。 一般的なリンク追跡テクノロジーは何ですか?市場には多くのリンク トラッキング プロジェクトがあり、次のような優れたプロジェクトもいくつかあります。
Spring Cloud Sleuth とは何ですか?Spring Cloud Sleuth は、分散サービス リンク追跡ソリューションを実装します。 Sleuth を使用すると、サービスの問題をすぐに見つけることができます。簡単に言えば、Sleuth は、各マイクロサービスに統合され、コール チェーン監視データを生成する役割を担うコール チェーン監視ツールのクライアントに相当します。 Spring Cloud Sleuth は、監視データを生成し、それをログの形式で表示する役割のみを果たし、視覚的な UI インターフェースは提供しません。 Sleuth を学習する前に、いくつかの概念を理解する必要があります。
Spring Cloud は Sleuth とどのように統合されますか?Spring Cloud Sleuth の統合は実際には難しくありません。その前に、次の 3 つのサービスを準備する必要があります。
3 つのサービスの呼び出し関係は次のとおりです。 クライアントはゲートウェイに注文照会要求を開始するように要求し、ゲートウェイはそれを注文サービスにルーティングし、注文サービスは注文の詳細を取得し、製品サービスを呼び出して製品の詳細を取得します。 依存関係の追加 次のようにして、親モジュールに sleuth 依存関係を追加します。
上記は Spring Cloud Sleuth の依存関係のみです。 Nacos と openFeign の依存関係については、ここでは詳しく説明しません。質問がある場合は、Chen の以前の記事やケース ソース コードを参照して、不明な点を補うことができます。 ログレベルの調整 sleuth には UI インターフェースがないため、コンソールでより詳細なリンク情報を表示するには、ログ レベルを調整する必要があります。 3 つのサービスの構成ファイルに次の構成を追加します。
デモインターフェースの改善 次のインターフェースは作成されたデータのデモンストレーションのみを目的としており、DB とは統合されていません。 sleuth-order9033 の注文詳細を照会するためのインターフェースは次のとおりです。 sleuth-product9032 の製品詳細を照会するためのインターフェースは次のとおりです。 gateway-sleuth9031 ゲートウェイのルーティング構成は次のとおりです。 テスト 上記の 3 つのサービスを起動し、ブラウザに直接アクセスします: http://localhost:9031/order/get/12 以下に示すように、コンソール ログ出力を確認します。 ログ形式には 4 つのパラメータがあり、それぞれの意味は次のとおりです。
さて、これで統合は完了です。思わず深呼吸してしまいます。ログを直接読むと目がくらんでしまいます… ZipKinとは何ですか?Zipkin は Twitter のオープンソース プロジェクトです。これは Google Dapper に基づいており、サービスのタイミング データを収集することに専念しています。 データの収集、保存、検索、表示を含むマイクロサービス アーキテクチャにおけるレイテンシの問題を解決します。 ZipKin の基本的なアーキテクチャは次のとおりです。 Zipkin は次の 4 つのコア コンポーネントに分かれています。
Zipkin はサーバーとクライアントに分かれています。サーバーは主に追跡データを収集して表示するために使用されます。クライアントの主な機能は、それをサーバーに送信することです。マイクロサービスのアプリケーションもクライアントです。呼び出しが発生すると、リスナーがトリガーされ、sleuth ログ データがサーバーに送信されます。 Zipkin サーバーを構築するにはどうすればいいですか?まず、サーバーの jar パッケージをダウンロードする必要があります。アドレス: https://search.maven.org/artifact/io.zipkin/zipkin-server/2.23.4/jar ダウンロードが完了すると、以下に示すように jar パッケージが取得されます。 次のコマンドでこの jar を直接起動します。
起動が完了したことを示す次のインターフェイスが表示されます。 この時点で、http://localhost:9411 で zipkin UI にアクセスできます。インターフェースは次のとおりです。 上記はjarをダウンロードしてサーバーを構築する方法です。もちろん、docker など他のインストール方法もあります。自分で試してみてください。チェンは再びそれを実演しないだろう。 zipKin クライアントを構築するにはどうすればいいですか?サーバーはデータの収集と表示のみを追跡し、データを生成して送信するのはクライアントです。以下にクライアントの構築方法について詳しく紹介します。 上記の例の 3 つのマイクロサービスを引き続き使用して、次のように zipkin 依存関係を直接追加します。
注: Spring Cloud Sleuth の依存関係は spring-cloud-starter-zipkin にすでに含まれているため、上記の依存関係をインポートするだけで済みます。 構成ファイルでは、次のように Zipkin サーバーのアドレスを構成する必要があります。
上記の設定が完了したら、サービスを起動して次のサイトにアクセスします: http://localhost:9031/order/get/12 インターフェイスを呼び出した後、以下に示すように、再度 zipkin UI にアクセスします。 呼び出されたインターフェースが監視されていることがわかります。以下に示すように、[表示] をクリックすると詳細が表示されます。 左側にサービス名と時間消費を含む完全なリンクが表示され、右側に開始時間と終了時間、リクエスト URL、リクエスト方法など、サービス呼び出しの関連情報が表示されていることがわかります。 呼び出しリンクの関連情報に加えて、以下に示すように各サービスの依存関係も明確に確認できます。 zipKin のデータ転送モードを切り替えるにはどうすればいいですか? zipkin のデフォルトの送信方法は HTTP ですが、ここで問題があります。送信プロセス中にクライアントとサーバーが切断されると、追跡ログ情報は失われます。 もちろん、Zipkin は MQ 送信もサポートしており、次のメッセージ ミドルウェアをサポートしています。
MQ 伝送を使用すると、メッセージ損失の問題を回避できるだけでなく、伝送効率も向上します。生産時には MQ 伝送が推奨されます。 それで、問題は、どうやって切り替えるかということです。 実際、その方法は非常に簡単です。 RabbitMQを例に紹介します。 1. サーバーがRabbitMQに接続する 次のコマンドを使用してサーバーを実行し、RabbitMQ に接続します。
コマンド分析は次のとおりです。
2. クライアントにRabbitMQを追加する MQ 送信が使用されるため、対応する依存関係と構成を追加する必要があります。次のように RabbitMQ 依存関係を追加します。
MQ アドレス、ユーザー名、およびパスワードを次のように設定します。
3. 設定ファイルで送信モードを切り替える spring.cloud.zipkin.sender.type 構成は、送信モードを切り替えるために使用されます。値がrabbitの場合、データ転送にrabbitMQを使用することを意味します。 構成は次のとおりです。
注: MQ トランスポートを使用する場合は、spring.cloud.zipkin.sender.base-url を削除できます。 完全な構成は次のとおりです。 4. テスト MQ送信を使用しているため、サーバーを起動せずに正常に送信できます。ブラウザアクセス: http://localhost:9031/order/get/12 現時点では、サービスが例外を報告していないことが判明しました。 RabbitMQ では、データが送信され、以下に示すように zipkin キューに保存されます。 一部のメッセージが消費されていないことがわかります。それらをクリックすると、メッセージの内容がトレースおよびスパンに関連する情報であることがわかります。 では、次のコマンドでサーバーを起動しましょう。
サーバーの起動後、zipkin キュー内のメッセージが即座に消費されることがわかります。 Zipkin UI インターフェースを確認すると、次の図に示すように、リンク情報が生成されていることがわかります。 Zipkin はどのようにして存続するのでしょうか?Zipkin の情報はデフォルトでメモリに保存されます。サーバーを再起動すると情報は失われますが、Zipkin はプラグ可能なストレージを提供します。 Zipkin は次の 4 つのストレージ方法をサポートしています。
今日、Chen は MySQL を例に使用して、Zipkin がどのように永続化されるかを紹介します。 Elasticsearchについては、少し長くなりますが、次の記事に掲載します。 1. データベースを作成する Zipkin サーバーの MySQL テーブル作成 SQL は、ソース コードの Zipkin-storage/mysql-v1/src/main/resources/mysql.sql にあります。この SQL ファイルをケースのソース コードに配置します。 GitHub アドレス: https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql データベースを作成します: zipkin (任意の名前)、テーブル作成 SQL をインポートすると、新しく作成されたデータベース テーブルは次のようになります。 2. サーバー上でMySQLを設定する サーバーの構成は非常に簡単です。次のコマンドを実行します。
上記のコマンドパラメータは次のように分析されます。
チェンはこれらのパラメータをどうやって覚えたのでしょうか?もちろん彼はそれらを思い出せなかった。いつでもソースコードをチェックすることができました。これらの設定は、ソース コードの設定ファイル /zipkin-server/src/main/resources/zipkin-server-shared.yml にあります。たとえば、上記の MySQL 構成は次のようになります。 Zipkin サーバーのすべての設定項目はここにありますので、時間があれば確認してください。 GitHub アドレス: https://github.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml 次に、rabbitMQ 送信モードと MySQL 永続モードを使用します。完全なコマンドは次のとおりです。
永続化はサーバーが行うもので、クライアントとは関係がないので、私たちが行う必要があるのはそれだけです。これ以上テストはしないので、自分で試してください。 要約するこれまでもたくさん紹介してきました。注意深く読んだかどうかは分かりません。要約すると次のようになります。
|
<<: データベースが分散化されるのはなぜでしょうか?分散化に向けてどのように進むか?
クラウド コンピューティングは、効率性を高め、データのセキュリティを強化し、利益を増やす機会を提供し...
企業のウェブサイトでロングテールキーワードのランキングを獲得するのは簡単ではありません。ウェブサイト...
Datashack は 2009 年に設立されたクリエイティブな若いインターネット サービス会社です...
1. 百科事典。この方法を使用するには、ある程度の専門知識と文学的才能が必要です。エントリを編集して...
この記事は、現代中国人の共通点やメンタリティを考え、より人間的な視点からウェブ製品のユーザーエクスペ...
hostodo のボスは、KVM や OpenVZ を含む 6 つの特別な VPS を送ってくれまし...
最近、半分インターネット実践者であるシャオ・レイは、新しい言葉を何度も言及しています。それは「メタバ...
製品の成長フレームワークの構築を始める前に、まず答えなければならない質問は、「成長の方向はどこから始...
機密情報ネットワークはGanji.comや58.comなどの超大規模ウェブサイトによって独占されてい...
導入:多くの SEO 担当者は、ウェブサイトのランキングが変動し、不安定になるという状況に遭遇したこ...
Tencent Cloud は、コンピューティング パフォーマンスが大幅に向上し、仮想化の可用性と製...
ネットワーク仮想化の概念は長い間提案されてきましたが、その具体的な定義は業界では依然として議論の的と...
本日のメディアは、国家ラジオ映画テレビ総局が昨日、インターネットテレビの違反行為を是正するよう要求す...
知性の波が押し寄せています。デジタル化とインテリジェンスは人々の仕事や生活を変えるだけでなく、業界に...
SD-WAN は包括的なソリューションではありません。これは、より広範なアプリケーション配信エコシス...