序文
この記事では、主にピンポイント-Webインターフェイスから始めて、私たちの目標は、二つの問題を明らかにすることです。
- 1、左がどのようにクエリでピンポイントサービスマップ上のデータの量を呼びますか?
- 2、インターフェース問い合わせWasOnlyは、それが何を意味するのでしょうか?
マップサービスコールトラフィックソースの左側
从下图可以看出,A显示被USER调用299次,线上数值代表着调用量。
私たちは、F12追跡インターフェイスアドレスを見て:
http://webip:port/getServerMapDataV2.pinpoint?applicationName=A
&from=1575337980000&to=1575338040000
&callerRange=1&calleeRange=1
&bidirectional=false&wasOnly=false
&serviceTypeName=SPRING_BOOT
&_=1575337947426
ApplicationMapStatisticsCallee_Ver2を:データがバックエンドピンポイント-webプロジェクトのソースコードを追跡するので、我々はHBaseのテーブルを見つけることができ、HBaseのからのすべてのチェックアウト、ウェブ上に表示しました。
呼び出し側(発信元)と、呼び出し元の呼び出し先
rowKey生成ルール
- 詳細は、知っているソースコードを追跡することができます
rowKey生成规则:
ApplicationMapStatisticsUtils.makeRowKey(...);
Qualify列名生成规则:
ApplicationMapStatisticsUtils.makeColumnName(...);
我々は、すべてのクエリインターフェイスがoutboud Inboudを選択してできることを知っており、最大のダイアグラム4X4の表示、
あなたは双方向の関係を保存することを選択したので、ピンポイント設計、:(目的はマップサービスの構成インターフェースの左にあります)。例えば:
TOMCAT ===「コール・MYSQL、呼び出し元に、次のメッセージを生成します。
emeroad-app (TOMCAT) -> MySQL_DB_ID (MYSQL)[10.25.141.69:3306]
そして、MySQLは、呼び出し先を生成します。
MySQL (MYSQL) <- emeroad-app (TOMCAT)[localhost:8080]
HBaseのストレージ
上に示したHBaseのメモリ構造は、バイナリとして、列1であり、実際にはバイトではなく、固定された文字名です。
####は、この双方向の関係を格納すると?
基本となるデータ記憶構造を認識して、ここでは、私たちが追跡し続け、それが来て保管方法、我々は参照を検索し、我々は、この保存されたAPIを呼び出す5つの場所があることがわかりました。
シンプルで、我々は1つのブレークずつ入れて!
①SpanChunkHandlerで
チャンクの構造では、(呼の数が内部容積をEVENTBoので、それは、1:1)のデータは、spanEventListを必要とし、条件を記録ミートisRecordStatistics必要があります。
A - 2つの条件が満たされた場合、A-> B、B <生成され 、 呼び出しの量が地図+1を残しように、2人の関係。
他の同様の論理的な場所、スペース上の理由から、ここでは詳しく説明しません。②SpanHandler、112 OK
③SpanHandler、117 OK
④SpanHandler、127 OK
⑤SpanHandler、189行
#### wasOnlyの意味
- インタフェースを介して、私たちが追跡することができたり、リクエストのパラメータは、SearchOptionクラスにパッケージ化されており、これらのパラメータのいずれかにカプセル化されています。
private final int callerSearchDepth;
private final int calleeSearchDepth;
private final LinkSelectorType linkSelectorType;
private final boolean wasOnly;
どのようにそれを参照してくださいするには?ここでの考え方を提供し、それは誰もが、あなたの参照のためではないかもしれません。
変数の定義から、その後に行き、その意味を理解する「推測」。
callerSearchDepth:呼び出し元の問い合わせの深さ。
calleeSearchDepth:発信者深さを検索します。
wasOnlyとlinkSelectorTypeに加えて、上記の二つの意味を知らない検索の深さを制御するために使用されるべきです。:その後、我々は、コードを追跡し続け
、新しいプロセッサましたがあるかどうかを判定することによって。:それは、この内の特定の使用する必要があります
callerLinkDataMapProcessorクラス。
if (searchOption.isWasOnly()) {
callerLinkDataMapProcessor = new WasOnlyProcessor();
}
このクラスのメソッドは、誰もが敏感であるべきと信じて受け入れてください、これは、フィルタ条件を決定するために使用されるべきです。
コードから見た場合getServiceTypeによって関連するアプリケーション、することができる
濾過の二つの方法かどうかを判断します。これらの2つの方法で、簡単にライン上のその実施に直接、私たちを処理します。
依存関係によると、私たちは次のような関係を理解するために、これらのクラスを見つけるために、特定の方法を見て、ServiceTypeFactoryに、このファクトリクラス、DefaultServiceTypeとServiceTypePropertyを、対象:
結論
粗理解:ONLY明確インタフェース表示を可能にする、データベース、またはノードの位置に同様のフィルタであろうました。
プログラムが考えている理解する:それは不明またはターミナルとしてノードサービス種別をフィルタリングし、これら二つの性質が行う必要があり、特にどのノード、私たちは、自分の研究に行くことができると思います。
- 私はここに不明となりました。これは一種類のみです。
// Callee node that agent hasn't been installed
ServiceType UNKNOWN = of(1, "UNKNOWN", RECORD_STATISTICS);
研究の時間は、掲載グラフィックがあまりにも多く、私は言葉をコンパイルし、より多くの物語が存在しない、と小さなパートナーの必要性がある、あなたは私を追加することができ、私はあなたを送りました。開発ノートの注目ようこそ夏の夢
公共号へようこそ[人]交換ノートの進捗状況を開発の夢