特許第5978401号(P5978401)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アリババ・グループ・ホールディング・リミテッドの特許一覧

特許5978401分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム
<>
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000002
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000003
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000004
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000005
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000006
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000007
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000008
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000009
  • 特許5978401-分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5978401
(24)【登録日】2016年7月29日
(45)【発行日】2016年8月24日
(54)【発明の名称】分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム
(51)【国際特許分類】
   G06F 11/30 20060101AFI20160817BHJP
【FI】
   G06F11/30 172
   G06F11/30 140A
【請求項の数】11
【全頁数】16
(21)【出願番号】特願2015-532018(P2015-532018)
(86)(22)【出願日】2013年9月11日
(65)【公表番号】特表2015-528612(P2015-528612A)
(43)【公表日】2015年9月28日
(86)【国際出願番号】US2013059229
(87)【国際公開番号】WO2014043211
(87)【国際公開日】20140320
【審査請求日】2015年4月9日
(31)【優先権主張番号】14/023,014
(32)【優先日】2013年9月10日
(33)【優先権主張国】US
(31)【優先権主張番号】201210342909.6
(32)【優先日】2012年9月14日
(33)【優先権主張国】CN
(73)【特許権者】
【識別番号】510330264
【氏名又は名称】アリババ・グループ・ホールディング・リミテッド
【氏名又は名称原語表記】ALIBABA GROUP HOLDING LIMITED
(74)【代理人】
【識別番号】110000028
【氏名又は名称】特許業務法人明成国際特許事務所
(72)【発明者】
【氏名】カイ・ホワ
(72)【発明者】
【氏名】ジョウ・チイ
(72)【発明者】
【氏名】スゥン・ティーンタオ
【審査官】 大塚 俊範
(56)【参考文献】
【文献】 特開2010−118072(JP,A)
【文献】 特開2009−064124(JP,A)
【文献】 特開2004−227360(JP,A)
【文献】 米国特許出願公開第2005/0203952(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/28−11/36
(57)【特許請求の範囲】
【請求項1】
分散システムにおいてユーザリクエストの実行を監視する方法であって、
分散システムにおける複数のサーバの内の1以上のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバの内の1以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバの内の1以上のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集すること、
を備える方法。
【請求項2】
請求項1に記載の方法であって、
前記分散システムにおける複数のサーバの内の1以上のサーバによって受信されるユーザリクエストをサンプリングすることは、
前記分散システムにおける前記複数のサーバによって受信される前記ユーザリクエストのランダムサンプリングを、1〜5%の比率に基づいて行うことを含む、方法。
【請求項3】
請求項1に記載の方法であって、
前記複数のサーバの内の1以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成することは、
前記複数の受信サーバの内の1以上のサーバによって受信された前記ユーザリクエストについて、ユーザリクエスト送信時間及びリクエスト受信サーバのマーカに基づいて、一意に対応する識別子を生成することを含む、方法。
【請求項4】
請求項1に記載の方法であって、
前記ユーザリクエストがスレッドを呼び出す場合に、前記識別子が現スレッドへ変数として送信されることは、
同じプロセスにおける別のユーザリクエストが異なるスレッドを呼び出す場合は、前記識別子は前記スレッド変数内に保持され、
前記プロセスがサブプロセスを作成した場合は、前記識別子は前記サブプロセスへ送信され、
前記ユーザリクエストが複数のプロセスに跨っており、異なるスレッドを呼び出すときは、前記識別子は通信プロトコルを通じて全てのプロセスへ送信されること、
を備える、方法。
【請求項5】
請求項1に記載の方法であって、
前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成することは、
前記識別子、前記呼び出された関数の名前及び場所、前記関数が呼び出されたときの時刻、呼び出しの時点で生成されたエラー情報、又はこれらの任意の組み合わせを前記ログへ出力することを含む、方法。
【請求項6】
請求項1に記載の方法であって、
前記作成されたログを、前記対応する識別子に従って個々に収集することとは、
受信されたログを、識別子の違いに従って個々に分類し、
同じ識別子を有するログを、プロセスの違いに従って個々に分類し、
同じ識別子及び同じプロセスを有するログを、関数に従って、並びに開始時刻及び終了時刻の呼び出しに従って、個々に合体させ、
同じ識別子を有する、プロセスに跨がるログを、時系列に従って組み合わせること、
を含む、方法。
【請求項7】
請求項1に記載の方法であって、更に、
前記作成されたログを個々に収集した後に、前記収集されたログを解析し、解析結果を出力することを備える方法。
【請求項8】
請求項7に記載の方法であって、
前記収集されたログを解析することは、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すこと、
又はこれらの任意の組み合わせ
を備える、方法。
【請求項9】
分散システムにおいてユーザリクエストの実行を監視するためのシステムであって、
少なくとも1つのプロセッサであって、
分散システムにおける複数のサーバの内の1以上のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバの内の1以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバの内の1以上のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集するように構成されている少なくとも1つのプロセッサと、 前記少なくとも1つのプロセッサに接続され、前記少なくとも1つのプロセッサに命令を提供するように構成されているメモリと、
を備える、システム。
【請求項10】
請求項9に記載のシステムであって、
前記少なくとも1つのプロセッサは、更に、
前記作成されたログを収集した後に、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すように、又は
これらの任意の組み合わせを行うように、
構成されている、システム。
【請求項11】
分散システムにおいてユーザリクエストの実行を監視するためのコンピュータプログラムであって、
分散システムにおける複数のサーバの内の1以上のサーバによって受信されるユーザリクエストをサンプリングするための機能と、
前記複数のサーバの内の1以上のサーバによって受信された前記ユーザリクエストに対応する識別子を生成するための機能と、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバの内の1以上のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトするための機能と、
プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定するための機能と、
前記現プロセスが追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成するための機能と、
前記作成されたログを、前記対応する識別子に従って個々に収集するための機能と、
をコンピュータによって実現させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本出願は、あらゆる目的のために、参照によって本明細書に組み込まれる、2012年9月14日に出願された、発明の名称を「METHOD AND DEVICE FOR MONITORING THE RUNNING OF USER REQUEST IN DISTRIBUTED SYSTEMS(分散システムにおいてユーザリクエストの実行を監視するための方法及び装置)」とする中国特許出願第201210342909.6号に基づく優先権を主張する。
【0002】
本出願は、分散システムにおいてユーザリクエストの実行を監視するための方法及びシステムに関する。
【背景技術】
【0003】
大規模な分散システムにおいて、ユーザアプリケーションサービスリクエストは、多くの場合、実行される前に多くのサービスモジュールを経る。例えば、アリババのクラウドコンピューティングプラットフォームにおいて、ユーザによる1つの動作リクエストは、インデックスバッファの更新、メタ情報の維持、ファイルの書き込み、及びアクセスログの書き込みなどの多くの動作の完了前に、スケジューリングモジュール、通信モジュール、インデクシングモジュール、分散ストレージモジュール、及びその他のサービスモジュールを経る。これらのサービスモジュールは、通常は、幾百ものサーバにおいて様々なプロセス上に展開されており、様々なソフトウェアプログラムで構成される。
【0004】
現在では、ユーザによって呼び出される分散システム挙動の監視及び解析は、多くの場合、例えばファイルシステムの監視、読み出し、及び書き込み、又は上位システムのスループットの監視などの、分散システムにおける1つのサービスコンポーネント上に集中している。このような監視手法は、1つのサービスモジュールのみを解析するものであり、ユーザによるアプリケーションサービスリクエストが分散システム全体に及ぼす影響を正確に得ることはできない。
【図面の簡単な説明】
【0005】
以下の詳細な説明及び添付の図面において、本発明の様々な実施形態が開示される。
【0006】
図1】ユーザリクエストの実行を監視するためのプロセスの一実施形態を示すフローチャートである。
【0007】
図2】出力されたログの一例を示す図である。
【0008】
図3】ログを収集するためのプロセスの一実施形態を示すフローチャートである。
【0009】
図4】ログの解析の一例を示す図である。
【0010】
図5】ログの解析の詳細な一例を示す図である。
【0011】
図6】ログに基づいて統計をまとめる一例を示す図である。
【0012】
図7】ユーザリクエスト分布の一例を示す図である。
【0013】
図8】ユーザリクエストの実行を監視するためのシステムの一実施形態を示す構造図である。
【0014】
図9】ユーザリクエストの実行を監視するためのシステムの一実施形態を示す構造図である。
【発明を実施するための形態】
【0015】
本発明は、プロセス、装置、システム、合成物、コンピュータ読み取り可能記憶媒体に実装されたコンピュータプログラム製品、並びに/又は結合先のメモリに記憶された命令及び/若しくは結合先のメモリによって提供される命令を実行するように構成されているプロセッサのようなプロセッサなどの、数々の形態で実現することができる。本明細書では、これらの実現形態、又は本発明がとりえるその他のあらゆる形態が、技術と称されてよい。総じて、開示されるプロセスの各段階の順番は、本発明の範囲内で変更されてよい。別途明記されない限り、タスクを実施するように構成されるとして説明されるプロセッサ又はメモリなどのコンポーネントは、所定時にタスクを実施するように一時的に構成されている汎用コンポーネントとして、又はタスクを実施するように製造された特殊コンポーネントとして実装されてよい。本明細書で使用される「プロセッサ」という用語は、コンピュータプログラム命令などのデータを処理するように構成されている1つ以上の機器、回路、並びに/又は処理コアを言う。
【0016】
本発明の原理を例示する添付の図面とともに、以下で、本発明の1つ以上の実施形態の詳細な説明が提供される。本発明は、このような実施形態との関わりのもとで説明されるが、いずれの実施形態にも限定されない。本発明の範囲は、特許請求の範囲によってのみ限定され、本発明は、数々の代替形態、変更形態、及び均等物を包含している。以下の説明では、本発明の完全な理解を与えるために、数々の具体的詳細が明記されている。これらの詳細は、例示を目的として提供されるものであり、本発明は、これらの詳細の一部又は全部を伴わずとも、特許請求の範囲に従って実施されえる。明瞭を期するために、本発明に関係した技術分野で知られる技術要素は、本発明が不必要に不明瞭にされないように、詳細な説明を省略されている。
【0017】
図1は、ユーザリクエストの実行を監視するためのプロセスの一実施形態を示すフローチャートである。一部の実施形態では、プロセス100は、図9のサーバ910によって実行に移され、以下を含む。
【0018】
ステップ110において、サーバは、分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングする。
【0019】
ステップ120において、サーバは、複数のサーバによってサンプリングされたユーザリクエストに対応する識別子を生成する。一部の実施形態では、識別子は、ユーザリクエストがスレッドを呼び出すときに、現スレッドへ変数として送信される。一部の実施形態では、各スレッドは、データの読み出し及び書き込みのためのストレージインターフェースを有するローカルストレージを有する。一部の実施形態では、変数は、ストレージインターフェースに記憶される。
【0020】
ステップ130において、サーバは、分散システムにおける複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトする。
【0021】
以下の、追跡インターフェースの一例は、2つの概念、すなわち追跡インターフェース、及び追跡インターフェースをどのようにしてオンオフ切り替えするかを示している。
【0022】
FunctionB(){
【0023】
TRACE_LOG (FunctionB,(”Message”, “exception throw”)(“User”,”100240”));
【0024】
}
【0025】
上記の例では、追跡インターフェースのためのコードが手動でインジェクトされる。追跡インターフェースの切り替えは、追跡インターフェースによって決定されるのではなく、現識別子が0に設定されているか否かに基づく。
【0026】
ステップ140において、サーバは、現時点で実行されているプロセス(現プロセス)が、インジェクトされた追跡インターフェースを含むときに、この実行されているプロセスが、ユーザリクエストに対応する識別子を含むか否かを判定する。
【0027】
ステップ150において、現プロセスが、ユーザリクエストに対応する識別子を含む場合に、サーバは、追跡インターフェースによって示された関数に関係する識別子に対応する情報を記録し、ログを作成する。
【0028】
ステップ160において、サーバは、対応する識別子に基づいて、作成されたログを個々に収集する。
【0029】
分散システムのパフォーマンスを監視することによる乱れの影響を軽減するために、及び監視システムによって消費される負荷が重すぎないことを保証するために、分散システムにおける複数のサーバによって受信されるユーザリクエストは、一般に、1〜5%の比率にしたがったランダムダンプリングを経る。サンプリングされたユーザリクエストは、呼び出された個々のスレッドにおいてまとめて追跡され、対応するログを作成される。
【0030】
一例として、サンプリングされたユーザリクエストの追跡は、ユーザリクエストに対応する識別子に基づく。更に、複数のサーバによってサンプリングされたユーザリクエストに対応する識別子が生成されるときに、サーバは、生成される識別子が分散システムにおいて一意であることを保証する。例えば、ユーザリクエストに一意に対応する識別子が、設定アルゴリズムに従って生成される。一部の実施形態では、アルゴリズムは、複数の受信サーバによってサンプリングされたユーザリクエストについて、そのサンプリングされたユーザリクエストの送信時間及びリクエスト受信サーバのマーカに基づいて、識別子を生成する。識別子の生成について、アルゴリズムに課される制約はない。
【0031】
サンプリングされたユーザリクエストが、複数のサーバによって実行されるプロセスにおいて効果的に検出されることを保証するために、ユーザリクエストに対応する識別子は、ユーザリクエストによって現時点で呼び出されているスレッドへ変数として送信される。一部の実施形態では、ユーザリクエストが同じプロセスにおいて異なるスレッドを呼び出すときは、識別子は、スレッドローカルストレージ(TLS)内に保持される。プロセスがサブプロセスを作成するときは、サーバは、それらのサブプロセスへ識別子を送信する。ユーザリクエストが複数のプロセスに跨っており、異なるスレッドを呼び出すときは、識別子は、通信プロトコルを通じて全てのプロセスへ送信される。以下は、通信プロトコルの一例である。
【0032】
【Header】
【0033】
TracerID:1001234311111(Identifier)
【0034】
【Body】
【0035】
[Original transmitted content]
【0036】
一部の実施形態では、ネットワークモジュールがネットワークリクエストを送信するときに、スレッドから識別子が得られ、ネットワークリクエストのヘッダに置かれ、受信端末へ送信される。受信端末は、受信されたネットワークリクエストから識別子を抽出し、その識別子を、現時点でネットワークリクエストを処理しているスレッドへ送信する。
【0037】
一部の実施形態では、分散システムにおける各サーバについて、サーバは、監視対象とされるプロセスに、事前に追跡インターフェースをインジェクトする。例えば、追跡インターフェースは、Windows(登録商標)オペレーティングシステムにおけるTRACE_LOGインターフェースに対応している。
【0038】
例えば、関数が実行されるときに、サーバは、識別子が0であるか否かを判定する。識別子が0でない場合、サーバは、現TRACE_LOGの内容及び識別子の値をログへ出力する。
【0039】
追跡インターフェースは、インジェクト点において、そのインジェクト点のタイプに関する記述的情報を明示的に追加する。一部の実施形態では、全ての追跡インターフェースが、「リソースの取得は初期化である(RAII)」プログラミング仕様を採用している。つまり、追跡インターフェースは、システムリソースの解放及び要求を完成させる。一部の実施形態では、追跡インターフェースを通じて、コンストラクタ関数及びデストラクタ関数によってユーザリクエストインジェクト点の出入りのタイムスタンプが個々に記録され、ログに組み込まれる。
【0040】
一部の実施形態では、以下のコードを通じてインジェクトプローブ追跡が実行に移される。
【0041】
FunctionB(){
【0042】
TRACE_LOG(FunctionB);
【0043】
……
【0044】
}
【0045】
FunctionC(){
【0046】
TRACE_LOG(FunctionC);
【0047】
……
【0048】
}
【0049】
FunctionA(){
【0050】
TRACE_LOG(FunctionA);
【0051】
FunctionB();
【0052】
FunctionC();
【0053】
……
【0054】
}
【0055】
Main(…){
【0056】
ENABLE_TRACE();
【0057】
FunctionA();
【0058】
}
【0059】
したがって、分散システムにおける複数のサーバのプログラムがTRACE_LOGインターフェースに到達すると、プログラムは、常に、現時点で実行されているプロセスがユーザリクエストに対応する識別子を含むか否かを判定する。
【0060】
一例では、識別子は、スレッド関数が呼び出されたときはそのスレッド関数によって使用される。識別子の値が0に対応する(リクエストがサンプリングされなかったことを意味する)場合、何も出力されない。識別子の値が0に等しくない(リクエストがサンプリングされている)場合、識別子の値及びログの内容が、処理のためにログへ出力される。
【0061】
現時点で実行されているプロセスがユーザリクエストに対応する識別子を含むことが、プログラムによって判定された場合は、サーバは、スレッドから識別子を取得する。サーバは、追跡インターフェースによって示された関数に関係する情報を記録する。例えば、識別子及び呼び出された関数の名前及び場所を含む情報、関数が呼び出されたときの時刻、関数が呼び出された時点で生成されたエラー情報、又はこれらの任意の組み合わせが、ログへ出力される。
【0062】
図2は、出力されたログの一例である。この出力されたログにおいて、「TRACE_ID_:001」は、識別子がリクエスト001についての識別子であることを示し、「_FUNC_:FunctionA_start」は、「Function A」の開始時刻を示し、「_FUNC_:FunctionA_end」は、「Function A」の終了時刻を示し、「/Example.cpp:117」は、ログが「Example.cpp」のライン117上に位置することを示す補助的な情報である。
【0063】
現時点で実行されているプロセスがユーザリクエストに対応する識別子を含まないことが、プログラムによって判定された場合は、サーバは、いかなる動作も実行しない。つまり、識別子がセットアップされなかった又は識別子が0である場合は、識別子は、プロセスを呼び出したユーザリクエストが追跡又は監視されていないことを示す。
【0064】
一部の実施形態では、ステップ160において、サーバは、分散システムにおける全てのサーバについてのログを作成した後、バックグラウンド収集手順を通じて、処理サーバにおいて一定間隔でログを収集し、それらの収集されたログを相互に関係付ける。つまり、識別子の違いに従って、収集動作が実行される。例えば、同じ識別子を持つログが、同じタイプとして収集される。
【0065】
図3は、ログを収集するためのプロセスの一実施形態を示すフローチャートである。一部の実施形態では、プロセス300は、図1の160を実行に移したものであり、以下を含む。
【0066】
ステップ310において、サーバは、収集されたログを、識別子の違いに基づいて個々に分類する。
【0067】
ステップ320において、サーバは、同じ識別子を有するログを、プロセスの違いに基づいて個々に分類する。
【0068】
ステップ330において、サーバは、同じ識別子及び同じプロセスを有するログを、関数、並びに開始時刻及び終了時刻に基づいて個々に合体させる。
【0069】
ステップ340において、サーバは、同じ識別子を有する、プロセスに跨るログを、時系列に基づいて組み合わせる。
【0070】
ステップ350において、ログが収集された後に、サーバは、具体的なニーズに基づいて、収集されたログを解析し、解析結果を出力する。例えば、サーバは、異なる識別子を組み合わせて解析のための未加工データを形成するために、収集されたログを解析する。一部の実施形態では、プログラムにおいてユーザリクエストがどのように実行されるかについての便利な解析を可能にするために、プログラム実行モードを解釈するための視覚化/解析フレームワークが使用される。
【0071】
一部の実施形態では、以下のログ解析のうちの1つ以上が実施される。
【0072】
1.サーバは、同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施する。一部の実施形態では、分散システムにおいて、同じ呼び出しフォームが、システム状態が異なるゆえに異なる挙動を引き起こす。例えば、分散システムは、キャッシュがヒットしたか否かに関し、同じ2種類の応答を有する。同じ処理モードについての異なる呼び出し挙動を数えることによって、分散システムの真の処理状態を解析することが可能である。図4は、ログの解析の一例である。例えば、同じ、MailBox::GetMail処理に関して、合計の99.77%及び0.22%をそれぞれ占める2つの異なる挙動(A及びB)が存在する。図5は、ログの解析の詳細な一例である。詳細な解析は、挙動Aと挙動Bとの間の差を示している。一例として、図5の左側502は、挙動Aを示しており、図5の右側504は、挙動Bを示している。
【0073】
2.サーバは、分散システムにおけるユーザリクエスト実行経路の、及び実行時間の解析を実施する。図6は、ログに基づいて統計をまとめる一例である。収集されたユーザリクエストログに基づいて、複数のサーバのプロセスにおける、ユーザリクエスト呼び出しデータに関して及びユーザリクエストを実行させるために費やされる時間について統計をまとめることが可能である。
【0074】
3.サーバは、分散システムにおける全てのモジュールの頻度解析を呼び出す。各モジュールにおける各ユーザリクエスト頻度の平均値及び最大値の検査を可能にすることに加えて、解析は、様々な次元に基づく、すなわち時間、識別子、及び器具の観点からの、プログラム呼び出し状況の分布の検査も可能にする。図7は、ユーザリクエストの分布の一例である。
【0075】
更に、方法に対応する、分散システムにおいて実行されるユーザリクエストを監視するためのシステムが提供される。このシステムが稼働時にしたがう原則は、分散システムにおいて実行されるユーザリクエストを監視するための上記の方法と同様である。したがって、システムを実現するにあたっては、方法の実行を参照することができる。簡潔を期するために、繰り返し部分のこれ以上の説明は省略される。
【0076】
図8は、ユーザリクエストの実行を監視するためのシステムの一実施形態を示す構造図である。一部の実施形態では、システム800は、サンプリングモジュール810と、識別子生成モジュール820と、追跡インターフェースインジェクトモジュール830と、判定モジュール840と、生成モジュール850と、ログ収集モジュール860と、ログ解析モジュール870とを含む。
【0077】
サンプリングモジュール810は、分散システムにおける複数のサーバよって受信されたユーザリクエストをサンプリングする。
【0078】
識別子生成モジュール820は、様々なサーバによってサンプリングされたユーザリクエストに対応する識別子を生成する。一部の実施形態では、識別子は、ユーザリクエストがスレッドを呼び出す場合に、現スレッドへ変数として送信される。
【0079】
追跡インターフェースインジェクトモジュール830は、分散システムにおける様々なサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトする。
【0080】
判定モジュール840は、現プロセスが、インジェクトされた追跡インターフェースを含むときに、この実行されているプロセスが、ユーザリクエストに対応する識別子を含むか否かを判定する。
【0081】
現プロセスが追跡インターフェースを含むときに、この実行されているプロセスがユーザリクエストに対応する識別子を含むとして検出された場合は、生成モジュール850は、追跡インターフェースによって示された関数に関係する識別子に対応する情報を記録し、ログを作成する。
【0082】
ログ収集モジュール860は、対応する識別子に基づいて、作成されたログを個々に収集する。
【0083】
ログ解析モジュール870は、収集されたログを解析し、解析結果を出力する。一例として、解析は、1)同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施する方法、2)分散システムにおけるユーザリクエスト実行経路の、及び様々なモジュールにおける実行時間の解析を実施する方法、並びに3)分散システムにおける様々なモジュールの頻度解析を呼び出す方法のうちの、1つ以上を含む。
【0084】
図9は、ユーザリクエストの実行を監視するためのシステムの一実施形態を示す概略図である。システム900は、複数のサーバ910と、クライアント920とを含む。サーバ910は、ネットワーク930を通じてクライアント920に接続されている。
【0085】
例えば、クライアント920は、ネットワーク930を通じて、システム900におけるサーバ910の1つへユーザリクエストを送信する。
【0086】
分散システムにおいて実行されるユーザリクエストを監視するための方法及びシステムが提供される。ユーザが分散システムにアクセスするときに、分散システムによって受信されたユーザリクエストがサンプリングされ、サンプリングされたユーザリクエストに対応する識別子が生成される。識別子は、ユーザリクエストによって呼び出される各スレッドへ送信される。分散システムの複数のサーバによって実行されるプロセスに、追跡インターフェースが挿入される。このような各プロセスが追跡インターフェースに到達したときに、現プロセスがユーザリクエストに対応する識別子を含むとして検出された場合は、追跡インターフェースによって示される関数に関係する識別子に対応する情報が記録され、ログが作成される。続いて、作成されたログは、対応するそれらの識別子に基づいて、個々に収集される。ユーザリクエストは、ユーザリクエストの監視中に、サンプリング方法を使用してサンプリング監視されるので、システムパフォーマンスに対する影響は少ない。したがって、監視システムに過度な負担がかかることはない。更に、分散システムの監視において複数のサーバによって作成されたログは、ユーザリクエストの識別子に基づいてリアルタイムで収集され、ユーザリクエスト挙動のリアルタイム解析へのサポートを可能にする。
【0087】
上述されたユニットは、1つ以上の汎用プロセッサ上で実行されるソフトウェアコンポーネントとして、又はプログラマブル論理装置及び/若しくは特定の機能を実施するように設計された特殊用途向け集積回路などのハードウェアとして、又はこれらの組み合わせとして実装することができる。一部の実施形態では、ユニットは、本発明の実施形態で説明される方法を(パソコン、サーバ、ネットワーク機器などの)計算装置に実行させるための幾つかの命令を含み尚且つ(光ディスク、フラッシュストレージデバイス、モバイルハードディスクなどの)不揮発性のストレージ媒体に記憶させることができるソフトウェア製品の形で具現化することができる。ユニットは、1つの装置に実装されてよい、又は複数の装置に分散されてよい。ユニットの機能は、互いに統合されてよい、又は複数の小ユニットに更に分けられてよい。ユニットの機能は、互に合体されてよい、又は複数のサブユニットに更に分けられてよい。
【0088】
本明細書で開示される実施形態に照らして説明される方法又はアルゴリズムステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、又はこれら両方の組み合わせを使用して実現することができる。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、メモリ、読み出し専用メモリ(ROM)、電気的にプログラム可能なROM、電気的に消去可能でプログラム可能なROM、レジスタ、ハードドライブ、着脱式ディスク、CD−ROM、又は当該技術分野で知られるその他の任意の形態のストレージ媒体にインストールすることができる。
【0089】
以上の実施形態は、理解を明瞭にする目的で幾らか詳細に説明されてきたが、本発明は、提供された詳細に限定されない。本発明を実現するには、多くの代替的手法がある。開示された実施形態は、例示的であり、限定的ではない。
適用例1:分散システムにおいてユーザリクエストの実行を監視する方法であって、
分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
前記現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが前記追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集すること、
を備える方法。
適用例2:適用例1に記載の方法であって、
前記分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングすることは、
前記分散システムにおける前記複数のサーバによって受信される前記ユーザリクエストのランダムサンプリングを、1〜5%の比率に基づいて行うことを含む、方法。
適用例3:適用例1に記載の方法であって、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成することは、
前記複数の受信サーバによってサンプリングされた前記ユーザリクエストについて、ユーザリクエスト送信時間及びリクエスト受信サーバのマーカに基づいて、一意に対応する識別子を生成することを含む、方法。
適用例4:適用例1に記載の方法であって、
前記ユーザリクエストがスレッドを呼び出す場合に、前記識別子が現スレッドへ変数として送信されることは、
同じプロセスにおける別のユーザリクエストが異なるスレッドを呼び出す場合は、前記識別子は前記スレッド変数内に保持され、
前記プロセスがサブプロセスを作成した場合は、前記識別子は前記サブプロセスへ送信され、
前記ユーザリクエストが複数のプロセスに跨っており、異なるスレッドを呼び出すときは、前記識別子は通信プロトコルを通じて全てのプロセスへ送信されること、
を備える、方法。
適用例5:適用例1に記載の方法であって、
前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成することは、
前記識別子、前記呼び出された関数の名前及び場所、前記関数が呼び出されたときの時刻、呼び出しの時点で生成されたエラー情報、又はこれらの任意の組み合わせを前記ログへ出力することを含む、方法。
適用例6:適用例1に記載の方法であって、
前記作成されたログを、前記対応する識別子に従って個々に収集することとは、
受信されたログを、識別子の違いに従って個々に分類し、
同じ識別子を有するログを、プロセスの違いに従って個々に分類し、
同じ識別子及び同じプロセスを有するログを、関数に従って、並びに開始時刻及び終了時刻の呼び出しに従って、個々に合体させ、
同じ識別子を有する、プロセスに跨がるログを、時系列に従って組み合わせること、
を含む、方法。
適用例7:適用例1に記載の方法であって、更に、
前記作成されたログを個々に収集した後に、前記収集されたログを解析し、解析結果を出力することを備える方法。
適用例8:適用例7に記載の方法であって、
前記収集されたログを解析することは、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すこと、
又はこれらの任意の組み合わせ
を備える、方法。
適用例9:分散システムにおいてユーザリクエストの実行を監視するためのシステムであって、
少なくとも1つのプロセッサであって、
分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングし、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成し、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトし、
前記現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定し、
前記現プロセスが前記追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成し、
前記作成されたログを、前記対応する識別子に従って個々に収集するように構成されている少なくとも1つのプロセッサと、 前記少なくとも1つのプロセッサに接続され、前記少なくとも1つのプロセッサに命令を提供するように構成されているメモリと、
を備える、システム。
適用例10:適用例9に記載のシステムであって、
前記少なくとも1つのプロセッサは、更に、
前記作成されたログを収集した後に、
同じ呼び出しフォームを有するユーザリクエストに対し、経路が異なる解析を実施し、
前記分散システムにおけるユーザリクエスト実行経路及びモジュールにおける実行時間を解析し、
前記分散システムにおいて前記モジュールにおける頻度解析を呼び出すように、又は
これらの任意の組み合わせを行うように、
構成されている、システム。
適用例11:非一時的なコンピュータ読み取り可能ストレージ媒体に埋め込まれた、分散システムにおいてユーザリクエストの実行を監視するためのコンピュータプログラム製品であって、
分散システムにおける複数のサーバによって受信されるユーザリクエストをサンプリングするためのコンピュータ命令と、
前記複数のサーバによってサンプリングされた前記ユーザリクエストに対応する識別子を生成するためのコンピュータ命令と、前記識別子は、前記ユーザリクエストによって呼び出された現スレッドへ変数として送信され、
前記分散システムにおける前記複数のサーバによって実行されるプロセスに、事前に追跡インターフェースをインジェクトするためのコンピュータ命令と、
前記現プロセスが前記ユーザリクエストに対応する前記識別子を含むか否かを判定するためのコンピュータ命令と、
前記現プロセスが前記追跡インターフェースを実行した際、前記現プロセスが前記ユーザリクエストに対応する前記識別子を含む場合に、前記追跡インターフェースによって示された関数に関係する前記識別子に対応する情報を記録し、ログを作成するためのコンピュータ命令と、
前記作成されたログを、前記対応する識別子に従って個々に収集するためのコンピュータ命令と、
を備えるコンピュータプログラム製品。
図1
図2
図3
図4
図5
図6
図7
図8
図9