(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-10-02
(54)【発明の名称】スマート分散型追跡コンテキストの挿入
(51)【国際特許分類】
G06F 11/34 20060101AFI20230925BHJP
H04L 67/025 20220101ALI20230925BHJP
【FI】
G06F11/34 166
H04L67/025
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023516200
(86)(22)【出願日】2021-06-04
(85)【翻訳文提出日】2023-04-19
(86)【国際出願番号】 US2021036003
(87)【国際公開番号】W WO2022055585
(87)【国際公開日】2022-03-17
(32)【優先日】2020-09-13
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】シローン,ケビン・ジェイ
(72)【発明者】
【氏名】サリバン,ブレイク・ティ
(72)【発明者】
【氏名】バジパイ,ディパンカー
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042HH20
5B042HH30
5B042HH38
5B042MA05
5B042MA14
(57)【要約】
開示されたシステムは、分散ソフトウェアアプリケーションの全体に追跡を伝播することに関する。一例において、アプリケーションは、オリジナルサーバからのウェブページの追跡データを記録する。アプリケーションは、ウェブブラウザ上でオリジナルサーバからのウェブページがオリジナルサーバのドメインの外部に位置する外部サーバへの要求を必要とすると判断する。アプリケーションは、外部サーバに問い合わせることによって、外部サーバが要求中のヘッダを追跡することを許可するか否かを判断する。アプリケーションは、外部サーバがオリジナルサーバからの要求中のヘッダを追跡することを許可することを示すように、ウェブブラウザ上で許可リストを更新する。アプリケーションは、問い合わせの結果に基づいて追跡用ヘッダを要求に挿入する。アプリケーションは、追跡用ヘッダを含む要求をウェブブラウザから外部サーバに送信する。外部サーバは、追跡用ヘッダに基づいて追跡データを記録するように構成される。
【特許請求の範囲】
【請求項1】
分散ソフトウェアアプリケーションの全体に追跡を伝播する方法であって、
オリジナルサーバからのウェブページの追跡データを記録することを含み、前記ウェブページは、ウェブブラウザによって実行され、
前記ウェブブラウザ上で前記オリジナルサーバからの前記ウェブページが前記オリジナルサーバのドメインの外部に位置する外部サーバへの要求を必要とすると判断することと、
前記ウェブブラウザ上で前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを拒否するか否かを示す拒否リストを検索することと、
前記ウェブブラウザ上で前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを許可するか否かを示す許可リストを検索することと、
前記外部サーバに問い合わせることによって、前記外部サーバが要求中のヘッダを追跡することを許可するか否かを判断することとを含み、前記問い合わせは、前記拒否リストまたは前記許可リストの前記検索の否定的な結果に基づいており、
前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを許可することを示すように、前記ウェブブラウザ上で前記許可リストを更新することと、
前記問い合わせの結果に基づいて前記要求に追跡用ヘッダを挿入することと、
前記追跡用ヘッダを含む前記要求を前記ウェブブラウザから前記外部サーバに送信することとを含み、前記外部サーバは、前記追跡用ヘッダに基づいて追跡データを記録するように構成されている、方法。
【請求項2】
前記ウェブブラウザ上で前記オリジナルサーバからの前記ウェブページが前記外部サーバへの追加要求を必要とすると判断することと、
キャッシュが前記外部サーバに対応するエントリを含むと判断することと、
前記キャッシュから前記エントリに対応する応答を取得し、前記応答を前記追加要求に提供することとをさらに含む、請求項1に記載の方法。
【請求項3】
前記オリジナルサーバがCORS(Cross-Origin Resource Sharing)を実行していないという判断に応答して、前記追跡用ヘッダを前記要求に挿入し、前記追跡用ヘッダを含む前記要求を送信することをさらに含む、請求項1に記載の方法。
【請求項4】
前記要求は、ハイパーテキスト転送プロトコル(HTTP)要求である、請求項1に記載の方法。
【請求項5】
前記方法は、前記外部サーバから、スパンの性能測定値を受信することをさらに含み、
前記スパンは、前記要求にサービスを提供するために実行された動作を含み、
前記性能測定値は、(i)前記動作の実行に対応する処理サイクルの数または(ii)前記動作の実行時間のうち、1つ以上を含む、請求項1に記載の方法。
【請求項6】
前記外部サーバへの前記要求は、前記ウェブページとの対話によって開始されるイベントの実行によって引き起こされ、
前記方法は、前記イベントの実行に基づいて追加スパンを自動的に記録することをさらに含み、
前記スパンは、前記追加スパンの子スパンである、請求項5に記載の方法。
【請求項7】
前記外部サーバから、前記要求が拒否されたという通知を受信することと、
前記ウェブブラウザ上で前記外部サーバを前記拒否リストに追加することと、
前記追跡用ヘッダを含まない前記要求を前記ウェブブラウザから前記外部サーバに再送信することとをさらに含む、請求項1に記載の方法。
【請求項8】
システムであって、
コンピュータ実行可能なプログラム命令を記憶するための非一時的なコンピュータ可読媒体と、
前記非一時的なコンピュータ可読媒体に通信可能に接続され、前記コンピュータ実行可能なプログラム命令を実行するための少なくとも1つのプロセッサとを備え、
前記コンピュータ実行可能なプログラム命令は、
オリジナルサーバからのウェブページの追跡データを記録するための命令を含み、前記ウェブページは、ウェブブラウザによって実行され、
前記オリジナルサーバからの前記ウェブページが前記オリジナルサーバのドメインの外部に位置する外部サーバへの要求を必要とすると判断するための命令と、
前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを許可するか否かを示す許可リストを検索するための命令と、
前記検索の否定的な結果に基づいて追跡用ヘッダを前記要求に挿入するための命令と、
前記追跡用ヘッダを含む前記要求を前記外部サーバに送信するための命令とを含み、前記外部サーバは、前記追跡用ヘッダに基づいて追跡データを記録するように構成されている、システム。
【請求項9】
前記コンピュータ実行可能な命令は、
前記外部サーバから、前記要求が拒否されたという通知を受信するための命令と、
前記ウェブブラウザ上で前記外部サーバを拒否リストに追加するための命令と、
前記追跡用ヘッダを含まない前記要求を前記ウェブブラウザから前記外部サーバに送信するための命令とをさらに含む、請求項8に記載のシステム。
【請求項10】
前記要求は、ハイパーテキスト転送プロトコル(HTTP)要求である、請求項8に記載のシステム。
【請求項11】
前記コンピュータ実行可能な命令は、前記外部サーバから、スパンの性能測定値を受信するための命令をさらに含み、
前記スパンは、前記要求にサービスを提供するために実行された動作を含み、
前記性能測定値は、(i)前記動作の前記実行に対応する処理サイクルの数または(ii)前記動作の実行時間のうち、1つ以上を含む、請求項8に記載のシステム。
【請求項12】
前記外部サーバへの前記要求は、前記ウェブページとの対話によって開始されるイベントの実行によって引き起こされ、
前記コンピュータ実行可能な命令は、前記イベントの実行に基づいて追加スパンを自動的に記録するための命令をさらに含み、
前記スパンは、前記追加スパンの子スパンである、請求項11に記載のシステム。
【請求項13】
前記コンピュータ実行可能な命令は、
前記外部サーバから、前記要求が拒否されたという通知を受信するための命令と、
前記外部サーバを拒否リストに追加するための命令と、
前記追跡用ヘッダを含まない前記要求を前記外部サーバに再送信するための命令とをさらに含む、請求項8に記載のシステム。
【請求項14】
プロセッサによって実行されると以下の動作を実行するコンピュータ実行可能なプログラム命令を記憶するための非一時的なコンピュータ可読媒体であって、
前記動作は、
オリジナルサーバからのウェブページの追跡データを記録することを含み、前記ウェブページは、ウェブブラウザによって実行され、
前記ウェブブラウザ上で前記オリジナルサーバからの前記ウェブページが前記オリジナルサーバのドメインの外部に位置する外部サーバへの要求を必要とすると判断することと、
前記ウェブブラウザ上で前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを拒否するか否かを示す拒否リストを検索することと、
前記ウェブブラウザ上で前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを許可するか否かを示す許可リストを検索することと、
前記外部サーバに問い合わせることによって、前記外部サーバが要求中のヘッダを追跡することを許可するか否かを判断することとを含み、前記問い合わせは、前記拒否リストまたは前記許可リストの前記検索の否定的な結果に基づいており、
前記外部サーバが前記オリジナルサーバからの要求中のヘッダを追跡することを許可することを示すように、前記ウェブブラウザ上で前記許可リストを更新することと、
前記問い合わせの結果に基づいて追跡用ヘッダを前記要求に挿入することと、
前記追跡用ヘッダを含む前記要求を前記ウェブブラウザから前記外部サーバに送信することとを含み、前記外部サーバは、前記追跡用ヘッダに基づいて追跡データを記録するように構成されている、コンピュータ可読媒体。
【請求項15】
前記動作は、
前記ウェブブラウザ上で前記オリジナルサーバからの前記ウェブページが前記外部サーバへの追加要求を必要とすると判断することと、
キャッシュが前記外部サーバに対応するエントリを含むと判断することと、
前記キャッシュから前記エントリに対応する応答を取得し、前記応答を前記追加要求に提供することとをさらに含む、請求項14に記載のコンピュータ可読媒体。
【請求項16】
前記動作は、前記オリジナルサーバがCORS(Cross-Origin Resource Sharing)を実行していないという判断に応答して、前記追跡用ヘッダを前記要求に挿入し、前記追跡用ヘッダを含む前記要求を送信することをさらに含む、請求項14に記載のコンピュータ可読媒体。
【請求項17】
前記要求は、ハイパーテキスト転送プロトコル(HTTP)要求である、請求項1に記載の方法。
【請求項18】
前記動作は、前記外部サーバから、スパンの性能測定値を受信することをさらに含み、
前記スパンは、前記要求にサービスを提供するために実行された動作を含み、
前記性能測定値は、(i)前記動作の実行に対応する処理サイクルの数または(ii)前記動作の実行時間のうち、1つ以上を含む、請求項14に記載のコンピュータ可読媒体。
【請求項19】
前記外部サーバへの前記要求は、前記ウェブページとの対話によって開始されるイベントの実行によって引き起こされ、
前記動作は、前記イベントの実行に基づいて追加スパンを自動的に記録することをさらに含み、
前記スパンは、前記追加スパンの子スパンである、請求項18に記載のコンピュータ可読媒体。
【請求項20】
前記動作は、
前記外部サーバから、前記要求が拒否されたという通知を受信することと、
前記ウェブブラウザ上で前記外部サーバを前記拒否リストに追加することと、
前記追跡用ヘッダを含まない前記要求をウェブブラウザから外部サーバに再送信することとをさらに含む、請求項14に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の参照
【背景技術】
【0002】
背景
ウェブベースのアプリケーションのさらなる進歩につれて、従来の追跡アプリケーションは、サーバ、プラットフォーム、またはスレッドの正確な遠隔測定(telemetry)データを捕捉することができない場合がある。開示された解決策は、これらの欠点を克服し、遠隔測定能力および分析を容易に改善する。
【発明の概要】
【0003】
概要
一態様において、分散ソフトウェアアプリケーションの全体に追跡を伝播する方法は、オリジナルサーバからのウェブページの追跡データを記録することを含み、ウェブページは、ウェブブラウザによって実行される。方法は、ウェブブラウザ上でオリジナルサーバからのウェブページがオリジナルサーバのドメインの外部に位置する外部サーバへの要求を必要とすると判断することをさらに含む。方法は、ウェブブラウザ上で外部サーバがオリジナルサーバからの要求中のヘッダを追跡することを拒否するか否かを示す拒否リストを検索することをさらに含む。方法は、ウェブブラウザ上で外部サーバがオリジナルサーバからの要求中のヘッダを追跡することを許可するか否かを示す許可リストを検索することをさらに含む。方法は、外部サーバに問い合わせることによって、外部サーバが要求中のヘッダを追跡することを許可するか否かを判断することをさらに含む。問い合わせは、拒否リストまたは許可リストの検索の否定的な結果に基づいている。方法は、外部サーバがオリジナルサーバからの要求中のヘッダを追跡することを許可することを示すように、ウェブブラウザ上で許可リストを更新することをさらに含む。方法は、問い合わせの結果に基づいて追跡用ヘッダを要求に挿入することをさらに含む。方法は、追跡用ヘッダを含む要求をウェブブラウザから外部サーバに送信することをさらに含み、外部サーバは、追跡用ヘッダに基づいて追跡データを記録するように構成されている。
【0004】
一態様において、方法は、ウェブブラウザ上でオリジナルサーバからのウェブページが外部サーバへの追加要求を必要とすると判断することをさらに含む。方法は、キャッシュが外部サーバに対応するエントリを含むと判断することをさらに含む。方法は、キャッシュからエントリに対応する応答を取得し、応答を追加要求に提供することをさらに含む。
【0005】
一態様において、方法は、オリジナルサーバがCORS(Cross-Origin Resource Sharing)を実行していないという判断に応答して、追跡用ヘッダを要求に挿入し、追跡用ヘッダを含む要求を送信することをさらに含む。
【0006】
一態様において、要求は、ハイパーテキスト転送プロトコル(HTTP)要求である。
一態様において、方法は、外部サーバから、スパンの性能測定値を受信することをさらに含む。スパンは、要求にサービスを提供するために実行された動作を含む。性能測定値は、性能測定値は、(i)動作の実行に対応する処理サイクルの数または(ii)動作の実行時間のうち、1つ以上を含む。
【0007】
一態様において、外部サーバへの要求は、ウェブページとの対話によって開始されるイベントの実行によって引き起こされる。方法は、イベントの実行に基づいて追加スパンを自動的に記録することをさらに含む。スパンは、追加スパンの子スパンである。
【0008】
一態様において、方法は、外部サーバから、要求が拒否されたという通知を受信することをさらに含む。方法は、ウェブブラウザ上で外部サーバを拒否リストに追加することをさらに含む。方法は、追跡用ヘッダを含まない要求をウェブブラウザから外部サーバに再送信することをさらに含む。
【0009】
上記の方法は、有形のコンピュータ可読媒体として実装することができ、および/またはコンピュータプロセッサおよび付属のメモリ内で動作することができる。
【図面の簡単な説明】
【0010】
【
図1】本開示の一態様に従って、遠隔測定を用いて企業アプリケーションを自動的にインストルメント化するためのシステムの一例を示す図である。
【
図2】本開示の一態様に従って、遠隔測定データを収集するために使用されたプロセスの一例を示す図である。
【
図3】本開示の特定の態様に従って、スパンコンテキストを生成するためのインストルメント化アプリケーションの一例を示す図である。
【
図4】本開示の一態様に従って、スパン階層の一例を示す図である。
【
図5】本開示の特定の態様に従って、スパンコンテキストおよびログを生成するために使用されるインストルメント化アプリケーションの追跡コンポーネントを示す図である。
【
図6】本開示の特定の態様に従って、スパンのインストルメント化によって引き起こされた背圧(backpressure)を管理するために使用される追跡アーキテクチャの一例を示す図である。
【
図7】本開示の特定の態様に従って、優先順位を含むスパン階層の一例を示す図である。
【
図8】本開示の特定の態様に従って、スパンの優先順位を付けるためのプロセスの一例を示す図である。
【
図9】本開示の特定の態様に従って、追跡ワーカクライアントを含む分散追跡環境の一例を示す図である。
【
図10】本開示の特定の態様に従って、スレッドをインストルメント化するためのプロセスの一例を示す図である。
【
図11】本開示の特定の態様に従って、分散ソフトウェアアプリケーションの全体に追跡を伝播するためのプロセスの一例を示す図である。
【
図12】本開示の特定の態様に従って、分散システムのサービスの全体にスパンコンテキストを伝播するための一例を示す図である。
【
図13】本開示の特定の態様に従って、ヘッダの一例を示す図である。
【
図14】一態様を実現するための分散システムを示す簡略図である。
【
図15】一態様に従って、サービスをクラウドサービスとして提供することができるシステム環境のコンポーネントを示す簡略ブロック図である。
【
図16】本発明の様々な態様を実装することができる例示的なコンピュータシステムを示す図である。
【発明を実施するための形態】
【0011】
詳細な説明
本明細書に開示された技術は、遠隔測定(telemetry)機能を企業アプリケーションに自動的に提供するための解決策を提供する。遠隔測定とは、ソフトウェアのランタイム実行に関する性能報告データを収集することを指す。このようなデータの例は、ウェブページまたはアプリケーション上の特定の機能の使用頻度、起動時間または実行時間の測定値、プロセスのクラッシュの検出、故障情報、およびユーザ経験を含む。遠隔測定データは、アプリケーションベースで、またはウェブページの各プロセスの完了時間に関するランタイムメトリックなどのより細かいレベルで収集することができる。開示された解決策は、アプリケーションプログラマインターフェイス(API)機能を用いて、遠隔測定データにアクセスすることができる。
【0012】
上述したように、既存の解決策には欠陥がある。例えば、いくつかの既存の解決策は、手動で追跡ライブラリを導入してまたは追跡ライブラリにリンクして、インストルメント化データが望まれるコード部分に1つ以上の機能呼び出しを追加する必要がある。さらに、このような解決策では、開発者は、1つ以上のベンダからインストルメント化ライブラリを選択し、これらのライブラリを設定する必要がある。対照的に、開示された解決策は、コード中のイベントおよびサーバへの呼び出しを検出し、これらのイベントを自動的にインストルメント化することによって、ウェブベースのアプリケーションを自動的にインストルメント化する。
【0013】
一態様において、開示されたシステムは、ソフトウェア開発者からの入力を必要とすることなく、企業アプリケーションを自動的にインストルメントすることができる。本開示の特定の態様は、ソフトウェア開発者によって設計されたカスタムアプリケーションに自動的に統合することができるランタイム遠隔測定フレームワークを提供するためのソフトウェア開発ツールに関する。例えば、ソフトウェア開発ツールは、追跡機能を企業アプリケーションに自動的に挿入することができる。追跡機能は、ユーザ対話、ページナビゲーション、およびサーバコールなどの動作を自動的に追跡し、関連する論理トランザクションをグループ化することによって、バックエンドサービスを実装する(異種または他の)分散サーバシステムを含むウェブページ上のユーザのクリックからエンドツーエンド追跡を可能にする。
【0014】
別の態様において、開示されたシステムは、スパンおよびスパンに関連するメッセージの優先順位付けを可能にして、場合によっては大量のインストルメント化データによって引き起こされたネットワーク輻輳を最小限に抑える。例えば、実行時または実行前に、特定のスパンにより低い優先順位を指定することができる。これによって、インストルメント化は、特定のスパンの性能を測定しないが、開発者にとってより高い興味のある子スパンのデータを収集する。
【0015】
さらに別の態様において、開示された解決策は、1つ以上のプロセスが複数のスレッドを含むか否かに関わらず、ウェブベースのアプリケーションの開発者が企業アプリケーションの一部として実行されている1つ以上のプロセスに関するインストルメント化詳細を得ることを可能にする。アプリケーションのランタイム実行時に、遠隔測定フレームワークは、様々なプロセス、スレッド、およびサーバのインストルメント化を容易にする。このようにして、インストルメント化環境は、スレッドの全体に維持され、より粒度の細かいインストルメント化データをもたらす。
【0016】
別の態様において、開示されたシステムは、セキュリティ要件または他の理由により、追跡用ヘッダによって示されたインストルメント化を自動的に許可しない可能性がある分散サーバを含む分散システムの全体の遠隔測定を容易にする。より具体的には、特定の態様は、プロトコルサポートを自動的に発見し、プロトコルサポートに基づいて、異なる呼び出しに追跡情報の挿入を調整することができる。したがって、開示されたシステムは、遠隔サーバ上で、特にクロスドメイン要求によってアクセスされている遠隔サーバ上で実行されているプロセスの詳細な遠隔測定データを取得することができる。このようなサーバは、異なるドメイン内の異なるエンティティによって操作されてもよい。
【0017】
図1は、本開示の一態様に従って、遠隔測定を用いて企業アプリケーションを自動的にインストルメント化するためのシステムの一例を示している。
図1は、開発者コンピューティング装置110、エンドユーザコンピューティング装置130、ネットワーク150、およびサーバ140a~nを示している。
図1に示された例において、開発者コンピューティング装置110は、インストルメント化アプリケーション120を構築し、インストルメント化アプリケーション120をサーバ140aに配置する。サーバ140aは、このアプリケーションをエンドユーザコンピューティング装置140に提供する。
図2は、遠隔測定データを取得するためにインストルメント化アプリケーションによって使用されるプロセスの一例を示している。
図3は、インストルメント化アプリケーションの一例を示している。開発者コンピューティング装置110およびエンドユーザコンピューティング装置140として適切なコンピューティング装置の例は、
図14に示されたクライアントコンピューティング装置1402、1404、1406および1408を含み、適切なサーバの例は、
図14に示されたサーバ1412を含む。
【0018】
インストルメント化アプリケーション120の実行時または実行に関連して、エンドユーザコンピューティング装置140は、1つ以上のサーバ140b~nに接続して、異なるリソース(例えば、画像、スクリプトなど)を取得することができ、および/またはインストルメント化機能を実行することができる。インストルメント化アプリケーション120の実行時または実行後に、遠隔測定データ122は、開発者コンピューティング装置110に送信され、分析される。
【0019】
開発者コンピューティング装置110は、開発者統合開発環境(IDE)112、開発者バックエンドツール114、コンソール116、および遠隔測定データ122のうち、1つ以上を含む。開発者IDE112は、コンパイル、リンク、デバッグ、追跡、または他の機能を提供するグラフィカル開発ツールである。開発者バックエンドツール114は、1つ以上のコンパイラ、リンカ、デバッガ、シミュレータなどを含むことができる。コンソール116は、インストルメント化アプリケーション120の実行によって取得された遠隔測定データ122を閲覧するために使用される。図示のように、遠隔測定データ122は、「サーバ1」上で特定のウェブページの実行が0.5秒かかったこと、「サーバ2」上で画像のロードが0.4秒かかったこと、およびボタンクリックが0.2秒の処理を引き起こしたことを示すデータを含む。
【0020】
サーバ140a~nは、同じ機能、類似の機能または異なる機能を実行するように構成することができる。例えば、サーバ140a~nは、分散サーバシステムとして動作することができる。別の例において、サーバ140a~nは、ウェブページからの1つ以上のコンポーネントにサービスを提供することができるまたはデータベースクエリを受信し、結果を提供することができるウェブサーバ、ファイルサーバ、または他のサーバであってもよい。場合によっては、サーバ140a~nは、異なるエンティティ(会社または個人)によって制御されてもよく、および/または異なる場所に配置されてもよい。したがって、本明細書に記載された特定の態様は、スパンコンテキスト伝播を介して、異なるサーバから遠隔測定データを取得することに関する。開発者コンピューティング装置110、エンドユーザコンピューティング装置140、ネットワーク150、およびサーバ140a~nは、1つ以上の接続、例えばネットワーク150を介して接続されてもよい。ネットワーク150の例は、有線ネットワーク、無線ネットワーク、およびインターネットを含む。
【0021】
エンドユーザコンピューティング装置130は、ウェブアプリケーション134(例えば、ウェブページ)、ウェブブラウザ132、および追跡アプリケーション136を含む。ウェブアプリケーション134は、ウェブブラウザ132によってレンダリングすることができる。ウェブアプリケーション134の一部であり得る追跡アプリケーション136は、インストルメント化機能を提供する。例えば、追跡アプリケーション136は、定期的にまたはオンデマンドで外部装置にエクスポートすることができる遠隔測定データを収集する。遠隔測定データの例は、特定の特徴の使用頻度、起動時間または実行時間の測定値、プロセスのクラッシュの検出、故障情報、およびユーザ種類を含む。
【0022】
一例において、ソフトウェア開発者は、開発者IDE112および開発者バックエンドツール114を用いて、カスタムウェブベースのアプリケーションを構築する。具体的に、開発者コンピューティング装置110上で実行されているソフトウェアツールは、遠隔測定機能を提供するコード(例えば、追跡コード)を挿入し、インストルメント化アプリケーション120を生成する。場合によっては、インストルメント化アプリケーション120は、開発者コンピューティング装置110からエンドユーザコンピューティング装置140に直接に送信されてもよい。他の場合において、インストルメント化アプリケーション120は、サーバ140a~nに直接に送信され、サーバ140a~nによってホストされ、エンドユーザコンピューティング装置140によってダウンロードされてもよい。
【0023】
エンドユーザコンピューティング装置140は、例えば、ネットワーク150を介してサーバ140aからアプリケーションにアクセスする。エンドユーザコンピューティング装置140を操作するユーザは、アプリケーションと対話することによって、1つ以上のサーバ140a~nにアクセスする。1つ以上のサーバ140a~nは、アプリケーションの全部または一部をエンドユーザコンピューティング装置140に提供する。エンドユーザコンピューティング装置140は、遠隔測定機能を実行し、これは、ユーザとアプリケーションとの対話(例えば、クリック、リロード)によって直接的に引き起こされた動作または(例えば、ページにリンクされた画像をロードすることによって)間接的に引き起こされた動作をインストルメント化する。このようにして、以前の解決策よりも詳細な遠隔測定情報を得ることができる。遠隔測定データ122は、1つ以上のサーバ140a~nによって収集される。
【0024】
上述したように、特定の態様は、企業アプリケーションから遠隔測定情報を取得することに関する。遠隔測定を容易にするために、企業アプリケーションに1つ以上のスパンを作成する。本明細書に使用された場合、スパンは、一単位の作業を表す名前付き動作のセットを指す。特定のスパンは、プロセスを指すことができる。スパンは、スパンコンテキストを有する。本明細書に使用された場合、スパンコンテキストは、追跡識別子およびスパン識別子を含むことができる。したがって、第1のプロセスは、第1のスパンを有してもよく、第2のプロセスは、第2のスパンを有してもよい。第2のプロセスが第1のプロセスによって呼び出された場合、第1のスパンおよび第2のスパンは、親子関係を有する。すなわち、第1のスパンは、親スパンであり、第2のスパンは、子スパンである。異なるプロセスのスパンを追跡することは、より詳細なインストルメント化を容易にする。
【0025】
特定の図面および関連する説明は、特定の態様をさらに説明する。例えば、
図4~5は、スパンインストルメント化の異なる態様に関する。
図6~8は、インストルメント化中に様々なスパンの優先順位に関する。
図9および10は、スレッドのインストルメント化に関する。
図11~13は、スパンコンテキストを異なる装置間に伝播することに関する。
図14~16は、インストルメント化機能を実装することができる様々なコンピューティングシステムを示している。
【0026】
ウェブベースの企業アプリケーションのインストルメント化
図2は、本開示の一態様に従って、遠隔測定データを収集するために使用されたプロセス200の一例を示している。プロセス200は、開発者コンピューティング装置110およびサーバ140a~nのうち、1つ以上によって実行されてもよい。
【0027】
ブロック202において、プロセス200は、ウェブページアプリケーションをクライアント装置上のウェブブラウザに提供することを含む。例えば、サーバ140aは、ウェブアプリケーション134をウェブブラウザ132に提供する。ウェブアプリケーション134は、インストルメント化を提供するための追跡アプリケーション136を含む。ウェブアプリケーション134は、プロセス200の前に、追跡アプリケーション136を含むようにインストルメント化されている。
【0028】
ブロック204において、プロセス200は、ウェブページアプリケーションの開始を検出することを含む。ウェブブラウザ132は、ウェブアプリケーション134および追跡アプリケーション136の実行を開始する。サーバ140aは、ウェブブラウザ132が1つ以上のリソースを要求したと判断することによって、実行の開始を検出することができる。
【0029】
ブロック206において、プロセス200は、ウェブページアプリケーションの開始に基づいて、追跡アプリケーションをインスタンス化することを含む。追跡アプリケーション136は、ウェブアプリケーション134の追跡データを記録するように構成されている。
【0030】
ブロック208において、プロセス200は、ウェブページアプリケーションとの対話によって開始されたイベントを検出することを含む。ウェブアプリケーション134は、実行を継続し、イベントは、トリガされる。イベントの例は、ユーザインターフェイス対話、クリック、ナビゲーション、マウスオーバー(mouse-over)、リフレッシュなどを含む。さらに、イベントは、表現状態転送(REST)であってもよい。
【0031】
ブロック210において、プロセス200は、検出に基づいてスパンの開始を自動的に記録することを含み、この記録は、スパンを追跡アプリケーションに関連付ける。追跡アプリケーション136は、イベントに対応するスパンの記録を引き起こす。
【0032】
ブロック212において、プロセス200は、イベントに対応する動作を実行することを含む。ウェブブラウザ132は、画像またはリソースをロードすることなどのイベントに対応するコードを実行する。
【0033】
ブロック214において、プロセス200は、イベントに対応する動作の完了に基づいて、スパンの終了を自動的に記録することを含む。ブロック212で参照されたコードが完了すると、追跡アプリケーション136は、スパンの終了を記録する。収集されたデータは、実行された処理サイクル、スパンの実行時間、メモリ消費量などを含むことができる。
【0034】
本明細書に記載されたように、特定の態様は、複数のサーバまたは処理スレッドを横断するスパンまたは複数の別々に特定可能な動作を使用するスパンに関連するデータを測定することができる。例えば、ブロック210の実行は、各々がより細かい情報を提供する追加スパンを作成することができる。例えば、追跡アプリケーション136は、第1の動作に対応する第1の子スパンおよび第2の動作に対応する第2の子スパンを作成することができる。第1の子スパンおよび第2の子スパンは、スパンの子スパンであってもよい。
【0035】
例を続けると、追跡アプリケーション136は、第1の動作の完了に基づいて第1の子スパンの終了を自動的に記録し、第1の動作の完了に基づいて第1の子スパンの終了を自動的に記録する。したがって、追跡アプリケーション136は、スパンだけでなく、より細かい情報を取得する。第1の子スパンおよび第2の子スパンは、スパンに関連付けられる。
【0036】
以下の例は、ジャバスクリプトを用いてクライアント側スパンコンテキストを挿入するためのコードを示す。
【0037】
【0038】
図3は、本開示の特定の態様に従って、スパンコンテキストを生成するためのインストルメント化アプリケーションの一例を示している。インストルメント化アプリケーションは、開発者IDE112などのソフトウェア開発ツールによって構築およびインストルメント化されてもよく、コンピューティング装置上で実行されているブラウザによって実行されてもよい。
図3は、ウェブアプリケーション環境300を示している。ウェブアプリケーション環境300は、ウェブアプリケーション302、サーバ340、クエリ350、および応答352を含む。
図3に示された例において、追跡機能を備えたウェブアプリケーション302は、ウェブブラウザ上で実行され、サーバ340と通信することによって1つ以上のウェブページを提供する。ウェブアプリケーション302は、1つ以上のクエリ350を送信し、それに応答して、1つ以上の応答352を受信する。なお、
図3は、ウェブページに関して説明されているが、フローおよびコンポーネントは、モバイルアプリケーションまたは他のアプリケーションによって実行されてもよい。
【0039】
ウェブアプリケーション302は、コンポーネント314、316、および318を有するウェブページ312を含むフロー310を示している。これらのコンポーネントは、モバイルアプリケーション、ウェブアプリケーション、サービス接続、ビジネスオブジェクト、またはプロセスであってもよい。各コンポーネントは、ウェブページの一部として異なる機能を実行することができる。コンポーネント314、316、および318は、コンポーネントイベント315、317、および318を各々引き起こすことができる。コンポーネントイベント315、317、および318の各々は、遠隔測定ランタイム320において1つ以上の事件をトリガし、これにより、イベントを記録しながら、1つ以上の動作を実行させる。
【0040】
フロー310またはウェブページ312のモジュールは、互いに対話するまたは関係することができる。例えば、特定のウェブページの場合、コンポーネントは、ユーザインターフェイス(UI)コンポーネント、変数、動作チェーン、ウェブページフロー、ページナビゲーション、およびRESTエンドポイントを介したデータアクセスであってもよい。変数は、ブラウザの設定、クライアント装置の設定、ユーザ設定、または他のパラメータの状態を記憶および管理するために使用される機構であってもよい。ウェブページのコンポーネントは、各コンポーネントの様々なイベントを処理するための遠隔測定ランタイムと対話することができる。
【0041】
遠隔測定ランタイム320は、コンポーネントイベント315、317、および319に対応する動作または動作変更を生成することができる。例えば、ユーザは、ブラウザに表示されたウェブページの特定の視覚要素をクリックすることによって、コンポーネントイベントを引き起こすことができる。遠隔測定ランタイム320は、ウェブブラウザが新しいウェブページ330にナビゲートすべきであると判断することができる。遠隔測定ランタイム320は、ユーザクリックに関連する動作がウェブページ312のユーザインターフェイス(UI)の一部を更新することであると判断することができる。
【0042】
別の例において、遠隔測定ランタイム320は、UIの一部を更新することに対応する動作チェーン333を開始することができる。例えば、動作チェーンは、関連する1つ以上の個別の動作または連続の動作336のセットであってもよい。各動作チェーンは、イベントによってトリガされてもよい。例えば、ユーザクリックは、当該ユーザクリックを受信したブラウザ上の位置(例えば、ハイパーリンク、ナビゲーションボタンなど)に対応するページへのナビゲーションをトリガすることができる。動作チェーンは、その動作チェーンの範囲に利用可能な入力パラメータおよびローカル変数を定義することができ、アプリケーションの範囲内のパラメータおよび変数を含むことができる。遠隔測定ランタイムは、UIの一部を更新するためにサーバへの1つ以上のRESTコール338が必要であると判断することができる。
【0043】
RESTコール338に応答して、ウェブアプリケーション302は、クエリ350をサーバ340のRESTサービスエンドポイント332に送信する。クエリ350は、挿入スパンコンテキストを含むことができる。従って、サーバ340は、追加のHTTPヘッダを含む応答352をウェブアプリケーション302に送り返す。ウェブアプリケーション302は、この応答を用いて、コンポーネントイベントによって引き起こされた動作を完了する。
【0044】
ウェブページおよびページナビゲーションのフローは、第1のページと第2のページとの間の情報の通信を管理する。各ウェブページは、ブラウザに実行されている各アプリケーションと同様に、所定のライフサイクルを有する。ページへの進入またはページからの退出などの各ライフサイクルイベントは、動作チェーンをトリガすることができる。モバイルアプリケーションまたはウェブアプリケーションに入力される全てのデータは、RESTプロトコルに基づいている。このデータは、カスタムビジネスオブジェクトからまたはサービス接続によって提供されたビジネスオブジェクトから取得することができる。動作および変数は、モバイルアプリケーションまたはウェブアプリケーション内のRESTエンドポイントへのデータの送信およびRESTエンドポイントからのデータの送信を制御する。動作チェーンは、明確に定義されたコンテキストおよびコントラクトを有する。動作チェーンは、その基礎となる動作を編成し、状態フローおよび実行経路を調整する。動作チェーンは、そのコンテキストにのみ利用可能な入力パラメータおよびローカル変数を定義することができる。動作チェーンの例は、RESTコールを行い(第1の動作)、その結果を取得して変数に格納する(第2の動作)ものである。動作は、そのコンテキストに新しい状態をエクスポートすることができる。これは、同じ動作チェーンに沿った将来の動作のみに利用可能である。動作チェーンは、ページまたはアプリケーションのコンテキストにおいて作成することができ、ページまたはアプリケーションの範囲内に存在する。動作チェーンは、所定のインターフェイスおよびコントラクトを有し、そのIDを使用してイベントトリガによって呼び出すことができる。
【0045】
遠隔測定アプリケーションプログラマインターフェイス(API)322は、遠隔測定ランタイムの活動、任意の動作または動作チェーン、コンポーネントイベント、および他の関連活動(例えば、動作に対するサーバ応答)へのプログラマアクセスを可能にすることができる。遠隔測定API322は、追加処理のために、スパンログをデータベース、記憶媒体、別のサーバ、または別のブラウザに出力することができる。一例において、遠隔測定APIは、REST APIであってもよい。遠隔測定API322は、クラウドインフラストラクチャオブジェクト、例えば監査ログ、アプリケーションフローログ、または他のログファイルなどを記憶することができる。遠隔測定API322は、記憶されたクラウドインフラストラクチャオブジェクトを周期的にサンプリングして、遠隔測定データを共通分析取り込み部324またはクライアントログ取り込みエンドポイント326に出力することができる。
【0046】
共通分析取り込み部324は、遠隔測定API322からログデータを取り込むことができる。一例において、共通解析取り込み部324は、REST APIを用いて、クラウドインフラストラクチャオブジェクト記憶装置からログデータを取り込むことができる。一例において、共通分析取り込み部324は、収集されたログデータの記憶場所を決定することができる。共通分析取り込み部324は、ユーザレベル、グループレベル、または組織レベルで様々なログデータを取り込むことができる。いくつかの例において、共通分析取り込み部324は、ログデータを分析コンソールに対して可視化データに変換することができる。
【0047】
同様に、クライアントログ取り込みエンドポイント326は、遠隔測定API322からログデータを受信するように構成されてもよい。クライアントログ取り込みエンドポイント326は、ログデータを記憶し、ログデータを様々な可視化データに変換することができ、またはログデータに対して追加の処理を実行することができる。
【0048】
一般的に、分散追跡は、分散追跡アーキテクチャ内の追跡クライアントAPIを用いて実装されてもよい。追跡クライアントAPIは、アプリケーション内の操作の周りにスパンを作成するために使用されるトレーサから構成される。スパンは、対応する親スパンのより小さい粒度の動作を示す子スパンを有することができ、また、この子スパンは、第1の子スパンより小さい粒度の動作を示す子スパンを有することができる。単一の親から由来する一連のスパンは、トレース(trace)として見なすことができる。スパンは、いくつかの識別情報と共に、測定されている動作に関するメタデータを含む。プロセス外部呼び出しを行う動作を有するアプリケーション(例えば、RESTサービスへの呼び出しを行うクライアントアプリケーション)の場合、発信要求と共に(例えば、特別なHTTPヘッダの形で)スパンコンテキストを伝播することができる。受信アプリケーションまたは受信サーバは、スパンコンテキストを抽出し、それを用いてクライアント上で親スパンの子スパンを作成することができる。追跡クライアントAPIは、ログメッセージの形で、(スパンの開始時および終了時に各々1つの)スパン情報を様々なバックエンドサーバに出力する機能を有する。
【0049】
例示的なアプリケーションスパンは、単純なアプリケーションフローである。例えば、ユーザは、ウェブページにナビゲートし、ボタンをクリックする。ボタンクリックは、アプリケーションにイベントハンドラを呼び出させるイベントをトリガする。イベントハンドラは、REST(定義)要求を発行し、RESTサービスによって処理される。RESTサービスは、アプリケーションのユーザインターフェイスを更新するための応答を返す。この例は、
図4に示されている。
【0050】
図4は、本開示の一態様に従って、スパン階層の一例を示している。
図4は、スパン階層410およびスパンタイムライン430を示している。スパン階層410およびスパンタイムライン430は、共に、スパンコンテキスト内の様々なスパン間の関係を記述する。スパン階層410またはスパンタイムライン430において、親スパンと子スパンとは関係している。図示のように、スパン階層410は、ユーザクリック412、イベントハンドラ414、REST要求416、処理応答418、サーバ処理要求420、およびUI更新422などのイベントの階層を表す。スパンタイムライン430は、スパンA424、スパンB434、スパンC436、スパンD440、スパンE438、およびスパンF442を含む。
【0051】
一例において、ウェブブラウザ132は、ユーザクリック412を受信する。ユーザクリック412は、スパンA424の作成を引き起こす。これに応答して、ウェブブラウザ132は、ユーザクリックの動作によって表されたイベントを開始し、イベントハンドラ414の動作をトリガする。ウェブブラウザ132は、イベントハンドラ414を用いて、受信したユーザクリックに基づいて検出されたイベントに応答してとるべき1つ以上の動作を決定することができる。イベントハンドラ414のインスタンス化によって、スパンA424の子スパンであるスパンB434が生成される。
【0052】
この例を続けると、イベントハンドラ414は、REST要求416および処理応答418を生成する。REST要求の応答処理は、REST自体の後に行われるため、(REST要求に対応する)スパンC436は、スパンE438の前に生成される。REST要求は、サーバに要求を処理させる。REST応答の処理により、ユーザインターフェイス(UI)が更新される。したがって、図示のように、REST要求416は、サーバに要求を処理させ、UI422を更新させる。UIは、サーバが要求を処理するまで更新されないため、(サーバ処理要求に対応する)スパンD440は、(UIの更新に対応する)スパンF442の前に開始および完了する。したがって、スパンD440は、サーバによる要求の処理を表す。
【0053】
図面から分かるように、スパンD440は、スパンC436の間に生成され、スパンF442は、スパンE438の間に生成される。スパンE438は、サーバからの(ブラウザからのREST要求に対応する)応答のブラウザ処理を表す。スパンF442は、サーバからの応答の処理に基づいてブラウザがユーザインターフェイスを更新することを表す。スパンC436およびスパンE438は、スパンBの子スパンであり、順次に実行される。スパンD440は、スパンC436の子スパンであり、スパンF442は、スパンE438の子スパンである。
【0054】
図4に関して説明したようなスパンコンテキストは、インストルメント化ライブラリによって管理され、このインストルメント化ライブラリは、ソフトウェア開発ツール(例えば、開発者IDE112)によってカスタム企業アプリケーションに追加される。
【0055】
図5は、本開示の特定の態様に従って、スパンコンテキストおよびログを生成するために使用されるインストルメント化アプリケーションの追跡コンポーネントを示している。
図5に示された例において、ウェブアプリケーション522を実行するエンドユーザコンピューティング装置520は、様々なコマンドおよび/またはAPIコールを介してサーバ560と通信する。ウェブアプリケーション522は、開発者IDE112によって開発されてもよく、顧客開発ソフトウェアであってもよい。インストルメント化をサポートするためのコードは、開発者IDE112によって自動的に追加される。
【0056】
エンドユーザコンピューティング装置520は、1つ以上のモジュール、例えば、ウェブアプリケーション522(または任意の他の消費クライアント)、追跡モジュール524、追跡インターフェイス526、スパンインターフェイス528、トレーサ530、スパン532、スパン記録ライブラリ534(すなわち、Bunyanロガー)、スパンスタック536、ブラウザコンソール538、圧縮レイヤ544、追跡サーバストリーム546、送信者タスク548、メッセージキュー542、および追跡コンソールストリーム552を含む。トレーサ530は、ウェブアプリケーション上でインストルメント化を実行するように動作し、1つ以上のスパン532を作成し、アクティブスパンをスパンスタック536に追加する。サーバ560は、1つ以上のモジュール、例えばトレース収集サーブレット562を含む。
【0057】
その後、ウェブアプリケーション522は、ユーザからの対話(例えば、ユーザクリック)を受信または検出する。ウェブアプリケーション522は、追跡モジュール524および/または追跡インターフェイス526と対話して、1つ以上のトレーサ530を起動する。スパン記録ライブラリ534は、スパンインターフェイス528を介して、イベントの種類、イベントの名前、サーバ要求のURL、戻り値の状態コード、エラー、警告などの情報およびメタデータを記録する。
【0058】
様々なAPIコールが利用可能である。APIコールinitTracer()は、グローバルトレーサオブジェクトを初期化して返す。APIコールinitTracerは、アプリケーションコンテキストに対して一度呼び出され、Tracerオプションオブジェクトを返す。APIコールactiveTracerは、グローバルトレーサオブジェクトを返す。例えば、APIコールinject()は、スパンを要求に(例えば、サーバに)挿入する。返されるAPIコールextract()を用いてスパンを抽出することができる。
【0059】
複数のスパンを生成することができる。例えば、トレーサ530は、ウェブアプリケーション522のイベントまたはスレッドを表すスパンを作成することができる。トレーサ530は、トレーサがスパンを作成した特定の動作に基づいて、(例えば、
図4に関して説明したように)必要に応じて子スパンを作成することができる。本明細書にさらに討論したように、インストルメント化アプリケーションは、異なるスレッドおよび/またはアプリケーションのイベントのトリガによって引き起こされた要求にサービスを提供する異なるサーバから、情報を取得することができる。
【0060】
ウェブアプリケーション522は、追跡インターフェイス526を用いて、トレーサを制御することができ、またはスパンに対する挿入を受信することができる。また、トレーサは、親スパンを監視するために1つ以上のスパンをキャッシュするまたは利用することができるスパンスタック536を監視、書き込みまたは読み取ることができ、または新たに作成されたスパン、例えばスパン532などにスパンコンテキストを挿入することができる。ウェブアプリケーション522は、スパンインターフェイス528を利用して、スパン関連情報をスパン記録ライブラリ534に送信することができる。圧縮レイヤ544は、スパン関連情報をトレース収集サーブレット562に送信する前に最小化するように圧縮することができる。圧縮レイヤ544によって使用される例示的な圧縮技術は、zipおよびgzipを含む。一例において、追跡コンソールストリーム552は、エンドユーザコンピューティング装置140上に表示されているブラウザコンソールに、スパンログのストリームを出力することができる。次に、サーバ560は、エンドユーザコンピューティング装置520上でスパンログをストリーミングし、送信者タスク548からトレースを収集するトレース収集サーブレット562を実行することができる。
【0061】
スパンの優先順位
本開示の態様は、ウェブアプリケーションのインストルメント化に関する。いくつかの場合において、多くのイベント、結果として生じたスパンおよび/または子スパンをもたらしたコールによって、多数のスパンを管理するまたは優先順位を付けることが困難になり得る。このような場合、特定の態様は、スパンログの容量を低減しおよび遠隔測定データを効率化する目的で、スパンのペイロードを低減するための機能を提供する。
【0062】
デフォルトモードにおいて、インストルメント化は、全てのスパンを捕捉し、全てのスパンに基づいてメッセージをブラウザコンソールおよび任意のサービスに送信することができる。しかしながら、場合によっては、管理できないほどのスパンメッセージが存在することがあるため、関心のある関連の遠隔測定データを難読化する。したがって、1つ以上の基準に基づいて、スパンをフィルタリングすることができる。
【0063】
さらに、場合によっては、関心のあるスパンは、対応する親スパンよりも詳細な情報を提供する子スパンである。しかしながら、親スパンの情報は、スパンデータの輻輳を引き起こす可能性がある。したがって、特定の態様は、関心のある1つ以上の特定の子スパンのインストルメント化詳細のみを収集すると共に、スパンツリーを維持することを可能にするプロキシスパンという概念を導入する。
【0064】
図6は、本開示の特定の態様に従って、スパンのインストルメント化によって引き起こした背圧を管理するために使用された追跡アーキテクチャの一例を示す図である。
図6は、アプリケーションランタイム602、トレーサ実装604、スパンコントローラ606、ブラウザスパン記録ライブラリ634、コンソールストリーム610、クライアント記録サービス(CLS)ストリーム612、およびクライアント記録サービス614のうち、1つ以上を含む追跡アーキテクチャ600を示している。図示された例において、スパンコントローラ606は、1つ以上のパラメータに基づいて、スパンを管理し、優先順位を付ける。アプリケーションランタイム602は、
図3に関して説明した遠隔測定ランタイム320と同様であり、遠隔測定ランタイム320と同様の動作を実行することができる。
【0065】
第1の例において、トレーサ実装604は、アプリケーションランタイム602のスパンを開始する。トレーサ実装604は、スパンを実行すると同時に、スパン監視データをブラウザスパン記録ライブラリ634に通信することができる。ブラウザスパン記録ライブラリ634は、スパンログデータをコンソールストリーム610に出力する。これらのスパンログデータは、エンドユーザ装置のブラウザに表示されてもよい。また、ブラウザスパン記録ライブラリ634は、スパンログデータをCLSストリーム612に出力することもできる。CLSストリーム612は、クライアント記録サービス614に送信されるログデータのストリームであってもよい。クライアント記録サービス614は、追加処理のためにログデータを記憶することができる。
【0066】
別の例において、トレーサ実装604は、スパンコントローラ606によって作成されたスパンを受信する。また、トレーサ実装604は、スパンを生成させたイベントの完了時にスパンを返す(例えば、スパンを終了する)ことができる。さらに、トレーサ実装604は、アプリケーションランタイム602から、スパンを終了させるためのコマンドを受信することができる。スパンコントローラ606は、スパンの優先順位付けを実行することができる。各スパンは、優先度レベルを有することができる。例えば、スパンコントローラ606は、優先すべきスパンを示す1つ以上のパラメータを受信することができる。一例において、デフォルトのスパン優先度が設定される。所定のスパンの優先度レベルがデフォルト優先度未満である場合、当該スパンおよび関連する子スパンのデータを返さない。
【0067】
さらに別の例において、追跡アーキテクチャ600は、例えば、プロセス200に関して説明したように、スパンの初期セットを生成する。スパンの初期セット中の各スパンは、対応する優先度を有する。その後、実行時に、スパンの初期セット中のスパンは、プログラマまたはユーザの入力に基づいて、測定されてもよく、測定されなくてもよく、またはサブセットにプルーニングされてもよい。例えば、閾値優先度を設定することができる。実行時に、閾値優先度より大きい優先度を有する任意のスパンは、プロキシスパンに変換され、測定されない。
【0068】
プロキシスパンは、親スパンと子スパンとの間の関係を示すスパンツリーを維持する。しかしながら、プロキシスパンが測定されないため、スパンコントローラ606は、スパンのランタイムインストルメント化測定値を取得しないが、プロキシスパンではない任意の子スパンの測定値を取得する。プロキシスパンは、親スパンと子スパンとの間の関係を保存するため、ツリー内の特定のプロキシスパンがインストルメント化データを有しなくても、ツリー構造を維持する。したがって、このようにして、開発者にとって興味深いスパンのデータを維持するようにスパンツリーをプルーニングすることができる。
図7は、プロキシスパンを使用する例を提供する。
【0069】
図7は、本開示の特定の態様に従って、優先順位を含まないスパン階層および優先順位を含むスパン階層の一例を示す図である。具体的には、
図7は、優先順位を使用しないスパン階層700と、優先順位を使用するスパン階層730とを示している。
【0070】
スパン階層700において、スパンA702は、スパンB704の親スパンである。また、スパンB704は、スパンC706、スパンD708、およびスパンE710の親スパンである。スパン階層700において、全てのスパン、すなわち、スパンA702、スパンB704、スパンC706、スパンD708およびスパンE710のデータが収集される。
【0071】
対照的に、スパン階層730は、優先順位を有するスパン階層を示している。スパン階層730は、スパンA732と、スパンA732の子スパンであるスパンプロキシB734とを含む。スパンA732は、優先度1を有する。スパンプロキシB734は、スパンA732の優先度よりも大きい優先度2を有する。この例において、デフォルト優先度は、1に設定される。スパンBの優先度がデフォルト優先度より大きい2であることによって示されたように、スパンBからのインストルメント化データが不要であるため、スパンプロキシB734は、元のスパンBから変換されている。
【0072】
その結果、スパンC736、スパンD738、およびスパンE740は、全て優先度1を有するためプルーニングされないが、元の親スパンであるスパンBがプロキシであるため、親スパンA732を有するものとしてマークされる。したがって、実行時に、スパンA732、スパンプロキシB734、スパンD738、およびスパンE740のインストルメント化データが収集される。
【0073】
実装の観点から、スパンを作成するために使用されるスパンオプション(SpanOptions)オブジェクトは、優先度フィールドを含む。場合によっては、スパンの優先度を記載していない時に、ルートスパンは、暗黙の「高」優先度(1)を有し、子スパンは、暗黙の「中」優先度(2)を有する。(SpanImplによって特定される)スパンが作成され、返され、メッセージは、正常に送信される。スパンがプロキシされた場合、代わりにスパンプロキシ(SpanProxy)オブジェクトが生成される。任意の他のスパンオブジェクトと同様に、スパンプロキシ(SpanProxy)オブジェクトと対話することができるが、スパンプロキシ(SpanProxy)のフィールドおよびメソッドは、アクティブスパンに委任する。例えば、上記の例において、スパンプロキシB734は、スパンプロキシ(SpanProxy)オブジェクトに対応し、そのメソッドおよびフィールドは、デフォルトで、スパンA732のオブジェクトに対応する。このように、関わるアプリケーションが常にスパンを受信しているため、アプリケーションランタイム環境を調整する必要はない。
【0074】
いくつかの実装形態において、優先度値は、正の数によって表され、より高い値は、より低い優先度を示している。例えば、優先度レベル0は、最も高い優先度であり、次ぎにレベル1、次ぎにレベル2などであってもよい。したがって、この実装形態において、閾値優先度より高い値の優先度を有する任意のスパンは、プロキシスパンに変換される。しかしながら、異なる順位付け方式も可能である。例えば、より高い値は、より高い優先度を示している。場合によっては、優先度は、エイリアスとして表されてもよい。例えば、「クリティカル」は、レベル0に割り当てられ、「高」は、レベル1に割り当てられ、「中」は、レベル2に割り当てられ、「低」は、レベル3に割り当てられてもよい。デフォルトで、ルートスパンは、優先度1を有してもよく、子スパンは、優先度2を有してもよい。
【0075】
場合によっては、優先度閾値は、フリートワイド(fleetwide)サンプリングアルゴリズムによって修正されてもよい。このアルゴリズムは、百分率および1つの百分率に入るように選択された乱数を各優先度に割り当てることを必要とする。殆どのアプリケーションのユーザが(容量および性能の理由で)最小量の遠隔測定を送信することを確実にするために、典型的には、より高い百分率をより高い優先度に割り当てるであろう。より小さな百分率をより低い優先度に割り当ててもよい。これは、ユーザ行程に関するより深い情報または他のより高い粒度の情報を得るために、より少数のユーザがより多くの遠隔測定を送信することを示している。トレーサ構成またはサーバ側プロファイルオプションに従って、百分率を適用することができる。
【0076】
場合によっては、優先度ブースティングを行うことができる。優先度ブースティングは、実行時にプロキシスパンの優先度を増加させることを指す。これは、スパンが興味深いインストルメント化データを有することが判明した場合に起こり得る。例えば、持続時間が長すぎ、スパンがスパンの持続時間の大部分を形成する子スパンを有しない場合、またはエラーが生じた場合に、優先度ブースティングを行うことができる。
【0077】
追跡システムは、例えば、過度の要求が受信され、および/またはペイロードが大きすぎる(「取り込みサービス背圧」とも呼ばれる)場合に、優先度閾値を動的に調整するように構成することができる。例えば、スパンおよびログを収集するための取込みサービス(CLS)は、過度に多くのスパンおよび/またはログを送信したことを示す(例えば、「429」は、過度の要求を示し、「413」は、ペイロードが大きすぎることを示す)HTTPエラーコードで応答することができる。したがって、システムは、後続の要求により少ないログを送信するように、優先度閾値を動的に変更することによって応答することができる。
【0078】
以下の表は、異なるイベントのスパンの例示的な優先度を示す。
【0079】
【0080】
図8は、本開示の特定の態様に従って、スパンの優先順位を付けるためのプロセス800の一例を示している。プロセス800は、開発者コンピューティング装置110およびサーバ140a~nのうち、1つ以上によって実行されてもよい。
【0081】
ブロック802において、プロセス800は、ウェブアプリケーションのコードから、ウェブアプリケーションがユーザ対話によってトリガされたイベントを含むことを確認することを含む。例えば、インストルメント化中に、開発者コンピューティング装置110上で実行されている開発者IDE112は、ウェブアプリケーション134がユーザ対話によってトリガされるイベントを含むと判断する。
【0082】
ブロック804において、プロセス800は、イベントを第1のスパンに関連付けることを含む。開発者IDE112は、イベントによって引き起こされた(すなわち、その実行に対応する)第1セットの動作の実行に基づいて、追跡情報を記録するようにトレーサを構成する。トレーサは、第1のスパンの第1の性能測定値を取得するように構成されている。このスパンは、第1セットの動作を指す。性能測定値の例は、サイクル、処理時間、メモリ使用量、待ち時間などを含む。
【0083】
ブロック806において、プロセス800は、コードから、第1セットの動作の実行が要求をサーバに送信することを特定することを含む。例えば、第1セットの動作は、RESTコールを含むことができる。
【0084】
ブロック808において、プロセス800は、要求を第2のスパンに関連付けることを含む。特定された要求に基づいて、トレーサは、要求によって引き起こされた第2セットの動作の実行に基づいて追跡情報を記録するように構成される。トレーサは、第2のスパンの第2の性能測定値を取得するように構成される。第2のスパンは、第1のスパンの子スパンである。
【0085】
ブロック810において、プロセス800は、第1のスパンの優先度を受信することを含む。例えば、ウェブブラウザ132がウェブアプリケーション134を実行している実行時に、開発者は、第1のスパンの優先度を調整することができる。優先度は、上下に調整することができる。
【0086】
ブロック812において、プロセス800は、優先度が優先度許容範囲外にあると判断することを含む。場合によっては、許容範囲の代わりに閾値を使用することができる。
【0087】
ブロック814において、プロセス800は、この判断に基づいて、第1のスパンをプロキシスパンとして分類することを含む。例を続けると、ウェブブラウザ132は、第1のスパンをプロキシスパンとして分類して、インストルメント化データを収集しない。ウェブアプリケーションが実行されている実行時に、トレーサは、第1のスパンに対応する第1セットの動作の実行に基づいて、情報を記録しない。
【0088】
インストルメント化スレッド
従来、ウェブベースのアプリケーションは、ユーザインターフェイス動作を行うために、メインブラウザスレッドを使用することができる。例えば、非同期ジャバスクリプトプログラミングの改善によって、メインブラウザスレッドは、応答性であるアプリケーションを作成することができる。しかしながら、特定の長時間に実行されているバックグラウンドプロセスにおいて、アプリケーション開発者は、アプリケーションロジックを実行するための実際のネイティブスレッドを作成することを可能にするウェブワーカAPIを使用することを選択することができる。
【0089】
しかしながら、標準的な分散追跡アプリケーションにおいて、別個のスレッド(例えば、ワーカAPIを介したスレッド)は、プロセスから外れているとみなされるか、または少なくともメインスレッド上で実行しているトレーサとは異なる範囲にあるとみなされる。したがって、ワーカスレッド上で動作するように、コード内でトレーサを構成する必要がある。
【0090】
対照的に、特定の態様は、スレッドを自動的にインストルメント化することができる。例えば、追跡ワーカクラスは、トレーサを標準的なワーカクラスのサブクラスにカプセル化することによって、アプリケーションコード内でトレーサを構成する作業を抽象化する。追跡ワーカクラスは、アルゴリズムを用いて、ワーカスレッドを自動的に作成し、トレーサを構成し、次いで、アプリケーションコードをロードする。このアプリケーションコードは、自動的に遠隔測定対応になる。その後、必要に応じて、ネイティブウェブワーカAPIをオーバーライドするように、追跡ワーカを構成することができる。これによって、アプリケーションは、ワーカスレッドを作成するときに、標準的なワーカ機能をラッピングしている追跡ワーカになる。
【0091】
この手法の利点は、開発者およびユーザに対して明白な動作と、スレッド間のスパン階層を維持しながらスレッドから外れたコードの遠隔測定を可能にすることとを含む。さらに、各スレッドの構成データは、メインスレッドの構成を自動的に継承するため、構成データを重複させる必要はない。
【0092】
図9は、本開示の特定の態様に従って、追跡ワーカクライアントを含む分散追跡環境の一例を示す図である。
図9は、メインブラウザスレッド910と、ワーカスレッド920とを示している。
図9に示された例において、メインブラウザスレッド910は、ワーカスレッド920を呼び出し、ワーカスレッド920は、インストルメント化データをメインブラウザスレッド910に戻す。
【0093】
メインブラウザスレッド910は、メインアプリケーション912と、トレーサ914と、追跡ワーカクライアント917とを含む。ワーカスレッド920は、追跡ワーカシムコード922と、アプリケーションワーカスクリプト924と、トレーサ925とを含む。ワーカスレッド920は、追跡ワーカクライアント917を用いて作成されたオブジェクトであり、ジャバスクリプトで記述することができる。
【0094】
ワーカスレッド920は、ブラウザウィンドウなどのメインブラウザ動作とは異なる環境で実行することができる。このようにして、例えば、ワーカスレッド920によって実行されているタスクが時間を要するかまたは複雑である場合、より応答性の高いユーザインターフェイスを維持することができる。
【0095】
追跡ワーカクライアント917は、例えば、追跡ワーカシムコード922を用いてワーカスレッド920を構成することによって、ワーカスレッド920などのスレッドを管理することができる。追跡ワーカシムコード922を追加することは、スパンコンテキストおよび追跡コンテキストを取得することを容易にする。ラッパーのコンストラクタは、適用可能な場合、現在のスパンのコンテキストの子スパンでラップされる。ワーカスレッドは、作成されると実行するアプリケーションスクリプトを用いて初期化され、通信ポートを有する。
【0096】
追跡ワーカクライアント917は、以下の動作、すなわち、(1)メインスレッドからの全ての着信メッセージを処理するためにメッセージハンドラを一時的にインストールする動作、(2)全ての分散追跡依存関係をロードする動作、および(3)成功(または失敗)を示すメッセージで応答する動作を実行するシムコード922を生成して実行する。
【0097】
成功した場合、追跡ワーカクライアント917は、アクティブスパンコンテキストおよびトレーサ構成を取得し、シムに送信する。シムは、トレーサ構成を受信し、トレーサを初期化し、受信したスパンコンテキストの子スパンを作成する。次いで、シムは、アプリケーションワーカコードを挿入し、メッセージハンドラを除去する。次に、アプリケーションスレッドおよびワーカスレッドは、様々な動作を実行する。
【0098】
作成されると、ワーカスレッド920は、トレーサを作成し、1つ以上の構成パラメータをワーカスレッド920からトレーサ925にコピーすることができる。また、ワーカスレッド920は、メインアプリケーション912によって作成されたスパンに関連付けられたスパンコンテキストを抽出することができる。ワーカスレッド920は、メインアプリケーション912によって作成され、スパンコンテキストを含むスパンの子スパンを作成することができる。ワーカスレッド920によるアプリケーションワーカスクリプト924の実行中に、子スパンは、作成され、さらなる処理のためにトレーサ925によってキャプチャされてもよい。ワーカスレッド920は、アプリケーションワーカスクリプト924が成功に完了したことを追跡ワーカクライアント917に通信することができる。追跡ワーカクライアント917は、その後、ワーカスレッドが成功したことをメインアプリケーション912に通信することができる。メインアプリケーション912は、スパンが完了したことをトレーサ914に通信し、スパンを終了することができる。
【0099】
一例において、データは、両側がメッセージを送信するメッセージシステムを介して、ワーカスレッドとメインアプリケーションとの間で送信されてもよい。メッセージは、postMessage()などのメソッドを用いて送信されてもよく、受信したメッセージへの応答は、メッセージをメッセージイベントのデータプロパティに含むように、オンメッセージイベントハンドラを用いて通信されてもよい。この特定の構成において、メッセージデータは、メインアプリケーションとワーカスレッドとの間で共有されるのではなく、コピーされる。ワーカスレッドは、ワーカが親ページと同じ起源内でホストされる補助ワーカ(例えば、補助スレッド)を生成することができる。
【0100】
以下の例示的なコードは、開発者が追跡ワーカスレッドをどのように使用することができるかを示す。
【0101】
【0102】
図10は、本開示の特定の態様に従って、スレッドをインストルメント化するためのプロセス1000の一例を示している。プロセス1000は、開発者コンピューティング装置110およびサーバ140a~nのうちの1つ以上によって実行されてもよい。
【0103】
ブロック1002において、プロセス1000は、ウェブページアプリケーションをクライアント装置上のウェブブラウザに提供することを含む。例えば、サーバ140aは、ウェブアプリケーション134をエンドユーザコンピューティング装置130上のウェブブラウザ132に提供する。
【0104】
ブロック1004において、プロセス1000は、ウェブページアプリケーションから、ウェブページアプリケーションの追跡データを記録するように構成されたグローバルトレーサを作成することを含む。プロセス200のブロック206に関して説明したものと同様に、グローバルトレーサが作成される。
【0105】
ブロック1006において、プロセス1000は、ウェブページアプリケーションから、補助スレッドのラッパーをインスタンス化することを含む。ラッパーは、補助スレッドを実行する前にシムコードを実行するように設定されている。
【0106】
ブロック1008において、プロセス1000は、グローバルトレーサの構成データをラッパーからシムコードに渡すことを含む。
【0107】
ブロック1010において、プロセス1000は、シムコードから補助トレーサを作成することを含む。補助トレーサは、補助スレッドの追跡データを記録するように設定されている。ウェブページアプリケーションの追跡データとサブスレッドの追跡データは、グローバルトレーサの設定データを介して関連付けられる。
【0108】
ブロック1012において、プロセス1000は、シムコードから補助スレッドを実行することを含む。
【0109】
サーバコール全体のスパンのインストルメント化
図11は、本開示の特定の態様に従って、分散ソフトウェアアプリケーションの全体に追跡を伝播するためのプロセス1100の一例を示している。プロセス1100は、エンドユーザコンピューティング装置140などのコンピューティングシステムによって実装されてもよく、追跡アプリケーション136の一部であってもよい。プロセス1100は、リソース(例えば、ウェブページ、画像、またはファイル)を取得するためにリモートサーバに対する適切な要求を作成することを含む。要求は、ハイパーテキスト転送プロトコル(HTTP)であってもよい。例示の目的で、プロセス1100は、
図12と併せて説明される。
【0110】
図12は、本開示の特定の態様に従って、分散システムのサービスの全体にスパンコンテキストを伝播するための一例を示す図である。サービスの例は、サーバへのRESTコールを含む。例えば、特定のウェブページをレンダリングすることは、それぞれが特定の目的を有する複数のRESTコールを必要とする場合がある。第1のRESTコールは、ウェブブラウザにページをレンダリングさせてもよく、第2のRESTコールは、サーバ(RESTエンドポイント)上に位置し、ページ上に表示される画像を取得してもよく、または第3のRESTコールは、従業員の管理者の名前などの情報を取得するためのデータベースクエリであってもよい。また、RESTコールは、1つ以上の子RESTコールを実行させることができる。
【0111】
RESTコールは、クロスオリジンコール(cross-origin call)であってもよい。クロスオリジンコールは、オリジナルサーバではないサーバ(例えば、ウェブページを提供するサーバ)からの要求情報を呼び出す。例えば、オリジナルサーバは、oracle.com上にあってもよく、第2のサーバは、google.com上にあってもよい。場合によっては、プロセス1100は、オリジナルサーバからのウェブページがオリジナルサーバのドメインの外部に位置する外部サーバへの要求を必要とすると決定した後に実行される。決定は、クロスオリジンリソース共有(CORS)と互換性があってもよい。
【0112】
図12は、サービス1210と、サービス1220とを含む。サービス1210は、ブラウザを実行することができ、サービス1220は、RESTエンドポイントによって特定されたサーバ上で実行する。サービス1210は、親スパン1212と、子スパン1214と、子スパン1216とを含む。サービス1220は、RESTコールの後の子スパン1222を含む。一例において、子スパン1214および1216は、RESTコールの前に行う必要の処理を表す。子スパン1222のコンテキストは、ネットワークを介してサーバに送信される。次に、サーバは、そのスパンコンテキストを、このような要求を行った別のサーバに伝播することができる。各サーバは、各自のトレースを収集し、適切な場所に送信する。
【0113】
説明したように、スパンコンテキストは、ルートスパンまたは追跡識別子を含み、ルートスパンまたは追跡識別子は、達成する(例えば、ページをロードする)全体的な目的を示している。完全なスパンコンテキストは、典型的には128ビットの表現である追跡識別子(ID)と、典型的には64ビットの乱数である子IDとを含む。各スパンコンテキストから、すなわち、各々の親を指し示す全てのスパンコンテキストから、グラフを構築することができる。
【0114】
図11に戻ると、ブロック1101において、プロセス1100が開始される。追跡アプリケーション136は、オリジナルサーバからのウェブページの追跡データを記録することができる。追跡データは、以前の要求、これらの要求の成功および失敗を含むことができる。追跡アプリケーション136は、追跡データから、追跡用ヘッダを含む要求を拒否する宛先サーバを含む拒否リスト、および/または追跡用ヘッダを含む要求を許可する宛先サーバを含む許可リストを形成することができる。場合によっては、プロセス1100は、ドメイン間要求が検出された場合に実行される。
【0115】
インストルメント化は、(例えば、ウェブページの読み込みの一部として)リソースを要請するためのサーバ要求に追跡用ヘッダを挿入することによって達成することができる。しかしながら、追跡用ヘッダは、例えばセキュリティの理由から、しばしば拒否されることがある。したがって、プロセス1100は、遠隔測定を容易にするために、このようなセキュリティ対策を回避することを含む。例えば、
図12を考慮すると、サービス1210は、オリジナルサーバ上で実行され、サービス1220は、外部サーバ上で実行される。したがって、(例えば、第1のプロセスの)親スパン1212は、オリジナルサーバ上で実行される。追跡アプリケーション136は、本明細書に開示された技術を用いて、親スパン1212だけでなく、子スパン1214から派生した子スパン1214および子スパン1216も分析することができる。しかしながら、図示のように、親スパン1212は、サービス1220上で(したがって、外部サーバ上で)実行される子スパン1222にも関連している。プロセス1100を用いて、親スパン1212から子スパン1222にスパンコンテキストを伝播することができるため、インストルメント化を容易にすることができる。
【0116】
ブロック1102において、プロセス1100は、CORSがアクティブであるか否か(例えば、クロスドメイン要求が検出されたか否か)を判断することを含む。CORSがアクティブである場合、プロセス1100は、ブロック1103に進む。この場合、CORSが必要でない場合、プロセス1100は、ブロック1108に進み、ヘッダを挿入する。
【0117】
ブロック1103において、プロセス1100は、リソースに対する要求に冪等性がある(idempotent)か否かを決定することを含む。冪等性があるとは、そのメソッドによるサーバの複数の同一の要求に対する意図的な効果が、単一のこのような要求に対する効果と同じであることを意味する。したがって、サーバの要求に対する意図的な効果に冪等性がない場合、すなわち、前の要求と同じではない場合、プロセス1100は、ブロック1104に進む。逆に、要求に冪等性がある場合、プロセス1100は、ブロック1115に進む。
【0118】
ブロック1104において、プロセス1100は、要求の宛先が拒否リストにあるサーバであるか否かを判断することを含む。例えば、追跡アプリケーション136は、拒否リストを検索することによって、外部サーバがオリジナルサーバからの要求の追跡用ヘッダを拒否するか否かを判断する。サーバ拒否リストは、(例えば、プロセス1100のブロック1112によって特定された要求によって作成された)余分なヘッダを含む拒否するとして特定されたサーバを含む。RESTコールが失敗することと、単に遠隔測定情報を持たないこととを選択する場合、単に遠隔測定情報を持たないことが好ましいため、拒否サーバリストは、有用である。
【0119】
サービスへの要求が伝播ヘッダをサポートしない場合、この要求は、拒否リストに追加され、このユーザセッションのコンテキストを挿入するさらなる自動試行を阻止し、挿入ヘッダなしでこの要求を実行する。一態様において、拒否リストは、ローカル記憶装置にキャッシュされないため、不完全な設定が将来の要求のブロックを引き起こさない。宛先が許可リストおよび拒否リストの両方に存在する可能性があるが、この場合、拒否リストは、優先される。
【0120】
検索時間を改善するために、許可リストおよび拒否リストは、連想配列として実装される。リストは、失敗した要求のURL発信元(パラメータなし)または個々のサービスによって暗号化される。これは、要求の設定によって決定されてもよい。マップの値は、ゼロであってもよいが、後で実際の失敗またはリストに追加された理由に関する他のメタデータを含むことができる。
【0121】
コールの例は、以下を含む。
【0122】
【0123】
サーバが拒否リストにある場合、プロセス1100は、ブロック1114に進む。サーバが拒否リストにない場合、プロセス1100は、ブロック1105に進む。
【0124】
ブロック1105において、プロセス1100は、要求の宛先が許可リストにあるサーバであるか否かを判断することを含む。例えば、追跡アプリケーション136は、許可リストを検索することによって、外部サーバがオリジナルサーバからの要求の追跡用ヘッダを許可するか否かを判断する。許可リストは、(例えば、プロセス1100のブロック1112によって特定された要求によって作成された)余分なヘッダを含む要求を受け入れるとして特定されたサーバを含む。
【0125】
伝播ヘッダがサポートされていると判断された場合、特定の宛先が許可リストに追加される。追加のオプションコールを実行する必要がないように、許可リストをローカル記憶装置にキャッシュすることができる。この手法は、サービスエンドポイントのリストを明示的に許可するためのユーザインターフェイスをサポートする必要性を排除する。宛先が許可リスト上にある場合、プロセス1100は、ブロック1108においてヘッダを挿入する。宛先が許可リスト上にない場合、プロセス1100は、ブロック1106に進む。
【0126】
ブロック1106において、プロセス1100は、HTTPオプションコールを実行することを含む。オプションコールは、サーバから、許可された通信オプションを要求する。CORSプロトコルにおいて、プリフライト要求がオプションメソッドと共に送信されため、サーバは、要求を送信するか否かに応答することができる。オプションコールによって、追跡用ヘッダを挿入することを許可するか否かが判断される。場合によっては、ブロック1106において、プロセス1100は、ブラウザがこのようなチェックを自動的に実行する前に、プリフライト要求を実行することを含む。プロセス1100は、ブロック1107に進む。
【0127】
ブロック1107において、プロセス1100は、オプションコールの結果から、追跡用ヘッダがサーバによってサポートされているか否かを判断することを含む。場合によっては、オプションコールは、許容される(または受け入れられる)ヘッダのリストを送り返すことができる。追跡用ヘッダがサポートされている場合、プロセス1100は、ブロック1108に進み、ヘッダを挿入する。追跡用ヘッダがサポートされていない場合、プロセス1100は、ブロック1113に進み、サーバをサーバ拒否リストに追加する。
【0128】
以下は、いくつかの例示的なオプション要求/応答を示す(簡潔にするために、いくつかのヘッダが省略されている)。例えば、以下は、伝播を検出するためのオプション要求を示している。
【0129】
【0130】
別の例は、サービスエンドポイントが伝播のために構成された場合の応答を示している。
【0131】
【0132】
別の例は、伝搬が設定されていない応答を示している。
【0133】
【0134】
ブロック1108において、プロセス1100は、ヘッダを要求に挿入することを含む。追跡用ヘッダを要求に挿入することは、外部サーバが要求の追跡用ヘッダを許可するという判断結果に基づいている。一例として、追跡用ヘッダの内容は、スパンコンテキストを含む。
【0135】
一例として、ジプキン(Zipkin)および/またはECID(Execution Context)を用いて、2組のヘッダを発信要求に挿入する。これらのプロトコルは、サービス開発者側の最小限の作業で、コンテキストを保持するためのカバレッジを提供する。
【0136】
一例において、ジプキンB3HTTPヘッダスキームは、幅広いサポートを有するため、使用される。B3ヘッダの例は、以下のものを含む。
【0137】
【0138】
追跡ID(TraceId)は、固有の32文字のUUID文字列であり、スパンID(SpanId)は、スパンを囲む固有の16文字列であり、親スパンID(ParentSpanId)は、親スパン(該当する場合)の固有のIDであり、サンプル済み(Sampled)は、スパン遠隔測定を報告するか否かを示すフラグである。
【0139】
別の例において、オラクル固有のECIDコンテスト(ECID-Context)ヘッダが使用される。
【0140】
【0141】
RIDは、コンテキストの経路を示す符号化文字列バイトである。ブラウザからのこの文字列は、「kXjE」であり、復号されると要求のルートを示す。
【0142】
ヘッダを挿入できると判断されると、Tracer.inject()APIコールを用いて、挿入を実行する。このコールは、発信要求をサーバに送信する前に、HTTPヘッダを発信要求に挿入する。
【0143】
図13は、本開示の特定の態様に従って、ヘッダの一例を示す図である。
図13は、インストルメント化を有しないHTTPヘッダであるヘッダ1310と、ヘッダ1310と同じHTTPヘッダであるが、(太字のテキストで示された)追加のインストルメント化を有するヘッダ1320とを示している。
【0144】
図11に戻り、プロセス1100は、ブロック1109に進む。
ブロック1109において、プロセス1100は、要求をサーバに送信することを含む。ウェブブラウザは、追跡用ヘッダを含む要求を外部ヘッダに送信する。外部サーバは、追跡用ヘッダに基づいて、追跡データを記録するように構成される。
【0145】
ブロック1110において、プロセス1100は、サーバへの要求が成功したか否かを判断することを含む。要求が成功した場合、プロセス1100は、ブロック1111に進み、プロセスを終了する。要求が成功しなかった場合、プロセス1100は、ブロック1112に進む。
【0146】
ブロック1111において、プロセス1100は、要求を行うためのプロセスを終了することを含む。ブロック1111において、余分なヘッダは、サーバに首尾よく送信され、その結果、スパンコンテキストが宛先サーバに伝播され、宛先サーバがインストルメント化を支援する。
【0147】
ブロック1112において、プロセス1100は、ブロック1110において特定された失敗が、何らかの他のエラーとは異なり、ヘッダによるものであるか否かを判断することを含む。失敗がヘッダによるものではなかった場合、プロセス1100は、ブロック1116に進み、通常のフェイルオーバ/リトライ手順を実行することができる。故障がヘッダによるものであった場合、プロセス1100は、ブロック1113に進み、サーバをサーバ拒否リストに追加する。
【0148】
ブロック1113において、プロセス1100は、宛先サーバをサーバ拒否リストに追加することを含む。このようにして、同じ宛先サーバを有する要求が特定された場合、プロセス1100は、追跡用ヘッダを有する要求を、それを拒否した同じサーバに送信することを試みない。ブロック1113の完了後、プロセス1100は、ブロック1114に進み、未挿入の要求を作成する。
【0149】
ブロック1114において、プロセス1100は、未挿入の要求、例えば、追跡用ヘッダを持たない通常のRESTコールを行うことを含む。場合によっては、要求を処理するタイミングが、遠隔測定のために使用されてもよい。ブロック1114の後、プロセス1100は、ブロック1118に進み、応答を通常に処理する。
【0150】
ブロック1115において、プロセス1100は、要求がキャッシュされた要求リスト内にあるか否かを判断することを含む。性能を改善し、故障を低減するために、要求をキャッシュに記憶することができる。要求がキャッシュされている場合、プロセス1100は、ブロック1117に進む。要求がキャッシュされていない場合、プロセス1100は、ブロック1104に進む。要求は、スパンコンテキストを含むことができる。
【0151】
ブロック1116において、プロセス1100は、フェイルオーバプロセスを実行すること、または要求を再試行することを含む。この場合、ページのロードまたは完了に失敗したことが最適ではないユーザエクスペリエンスであることを考えると、プロセス1100は、ブロック1116において、追跡用ヘッダ挿入の試みが失敗を引き起こしていないことを保証するために、失敗した動作を再試行することを含む。場合によっては、開発者は、充分なエラーチェックまたはグレースフルエグジット(graceful exit)を追加していないことがある。したがって、この点において、ブロック1116は、カスタムアプリケーションが遠隔測定によって失敗しないことを保証するのに役立つ。要求は、スパンコンテキストを含むことができる。
【0152】
ブロック1117において、プロセス1100は、キャッシュされた応答で進むことを含む。キャッシュされた応答を用いて、要求を処理する。要求は、スパンコンテキストを含むことができる。
図4および5に関して説明したように、スパンおよびログは、スパン記録ライブラリに送信される。
【0153】
図14は、態様のうちの1つを実現するための分散システム1400を示す簡略図である。図示の態様において、分散システム1400は、1つ以上のネットワーク1410を介して、ウェブブラウザまたは専用クライアント(例えば、オラクルフォーム)などのようなクライアントアプリケーションを実行および作動するように構成された1つ以上のクライアントコンピューティング装置1402、1404、1406および1408を含む。サーバ1412は、ネットワーク1410を介して、リモートクライアントコンピューティング装置1402、1404、1406および1408と通信可能に接続されてもよい。
【0154】
様々な態様において、サーバ1412は、システムの1つ以上のコンポーネントによって提供される1つ以上のサービスまたは1つ以上のソフトウェアアプリケーションを実行するように構成されてもよい。サービスまたはソフトウェアアプリケーションは、非仮想環境および仮想環境を含むことができる。仮想環境は、仮想イベント、展示会、模擬実験装置、教室、ショッピング取引所、および企業のために使用されるもの、2次元または3次元(4D)表現、ページベースの論理環境などを含むことができる。特定の態様において、これらのサービスは、ウェブサービスまたはクラウドサービスとして、またはSaaS(Software as a Service)モデルに基づいて、クライアントコンピューティング装置1402、1404、1406および/または1408のユーザに提供されてもよい。よって、クライアントコンピューティング装置1402、1404、1406および/または1408を操作するユーザは、1つ以上のクライアントアプリケーションを用いて、サーバ1412と情報を交換することによって、これらのコンポーネントによって提供されたサービスを利用することができる。
【0155】
図示の構成において、システム1400のソフトウェア要素1418、1420および1422は、サーバ1412上に実装されている。他の態様において、システム1400の1つ以上の構成要素および/またはこれらのコンポーネントによって提供されたサービスは、1つ以上のクライアントコンピューティング装置1402、1404、1406および/または1408によって実現されてもよい。クライアントコンピューティング装置を操作するユーザは、1つ以上のクライアントアプリケーションを用いて、これらのコンポーネントによって提供されたサービスを利用することができる。これらの構成要素は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせで実現されてもよい。理解すべきことは、分散システム1400と異なる様々なシステム構成が可能であることである。したがって、図示された態様は、態様のシステムを実現するための分散システムの一例であり、限定することを意図していない。
【0156】
クライアントコンピューティング装置1402、1404、1406および/または1408は、例えば、Microsoft Windows Mobile(登録商標)のようなソフトウェア、および/またはiOS、Windowsフォン、アンドロイド(登録商標)、ブラックベリー15およびパームOSなどの様々なモバイルオペレーティングシステムを実行することができ、インターネット、電子メール、ショートメッセージサービス(SMS)、ブラックベリー(登録商標)または他の通信プロトコルが有効化された手持ち式携帯装置(例えば、iPhone(登録商標)、携帯電話、Ipad(登録商標)、タブレット、携帯情報端末(PDA)または着用できる装置(Google Glass(登録商標)ヘッドマウントディスプレイ)であってもよい。クライアントコンピューティング装置は、例示として、Microsoft Windows(登録商標)オペレーティングシステム、Apple Macintosh(登録商標)オペレーティングシステムおよび/またはLinux(登録商標)オペレーティングシステムの様々なバージョンを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを含む汎用のパーソナルコンピュータであってもよい。クライアントコンピューティング装置は、例えば、様々なGNU/Linuxオペレーティングシステム、例えば、Google Chrome OSを含むがこれに限定されない市販のUNIX(登録商標)またはUNIXに類似する様々なオペレーティングシステムを動かすワークステーションコンピュータであってもよい。代替的にまたは追加的には、クライアントコンピューティング装置1402、1404、1406および1408は、ネットワーク1410を介して通信可能なシンクライアントコンピュータ、インターネット対応のゲームシステム(例えば、Kinect(登録商標)ジェスチャ入力装置を備えるまたは備えないMicrosoft Xboxゲームコンソール)、および/またはパーソナルメッセージング装置などの他の電子機器であってもよい。
【0157】
分散システム1400は、4つのクライアントコンピューティング装置を備えると示されているが、任意の数のクライアントコンピューティング装置をサポートすることができる。他の装置、例えばセンサを有する装置は、サーバ1412と情報を交換することができる。
【0158】
分散システム1400のネットワーク1410は、TCP/IP(伝送制御プロトコル/インターネットプロトコル)、SNA(システムネットワークアーキテクチャ)、IPX(インターネットパケット交換)、Apple(登録商標)Talkなどを含むがこれらに限定されない様々な市販プロトコルのいずれかを使用してデータ通信をサポートすることができ、当業者に熟知される任意種類のネットワークであってもよい。単なる例示として、ネットワーク1410は、イーサネット(登録商標)、トークンリングおよび/またはその他に基づくローカルエリアネットワーク(LAN)であってもよい。ネットワーク1410は、広域ネットワークまたはインターネットであってもよい。ネットワーク1410は、仮想プライベートネットワーク(VPN)を含むがこれに限定されない仮想ネットワーク、イントラネット、エクストラネット、公衆交換電話ネットワーク(PSTN)、赤外線ネットワーク、無線ネットワーク(例えば、IEEE(Institute of Electrical and Electronic Engineers)802.14プロトコルスイート、Bluetooth(登録商標)、および/または任意の他の無線プロトコルの下で動作するネットワーク)および/またはこれらのネットワークと他のネットワークの組み合わせを含むことができる。
【0159】
サーバ1412は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(例示として、PC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバを含む)、サーバファーム、サーバクラスタ、または任意の他の適切な構成および/または組み合わせから構成されてもよい。サーバ1412は、仮想オペレーティングシステムを実行する1つ以上の仮想マシン、または仮想化を必要とする他のコンピューティングアーキテクチャを含むことができる。論理記憶装置の1つ以上のフレキシブルプールを仮想化して、サーバの仮想記憶装置を維持することができる。サーバ1412は、ソフトウェア定義ネットワーキングを用いて、仮想ネットワークを制御することができる。様々な態様において、サーバ1412は、前述の開示に記載された1つ以上のサービスまたはソフトウェアアプリケーションを動かすように構成することができる。例えば、サーバ1412は、本開示の実施形態に従って上記に説明した処理を実行するためのサーバに対応することができる。
【0160】
サーバ1412は、上述したものいずれかを含むオペレーティングシステム、および任意の市販サーバオペレーティングシステムを動かすことができる。また、サーバ1412は、HTTP(ハイパーテキスト転送プロトコル)サーバ、FTP(ファイル転送プロトコル)サーバ、CGI(共通ゲートウェイインターフェイス)サーバ、Java(登録商標)サーバ、データベースサーバなどを含む様々な追加サーバアプリケーションおよび/または中間層アプリケーションのいずれかを動かすことができる。例示的なデータベースサーバは、Oracle(登録商標)、Microsoft(登録商標)、Sybase(登録商標)、IBM(登録商標)などの会社から市販されているものを含むがこれらに限定されない。
【0161】
いくつかの実現例において、サーバ1412は、クライアントコンピューティング装置1402、1404、1406、および1408のユーザから受信したデータフィードおよび/またはイベント更新を分析および統合する1つ以上のアプリケーションを含んでもよい。例示として、データフィードおよび/またはイベント更新は、Twitter(登録商標)フィード、Facebook(登録商標)更新または1つ以上の第3情報源および連続データストリームから受信したリアルタイム更新を含むがこれらに限定されない。リアルタイム更新は、センサデータアプリケーション、金融相場表示機、ネットワーク性能測定ツール(例えば、ネットワーク監視およびトラフィック管理アプリケーション)、ページ遷移(Clickstream)解析ツール、自動車交通監視装置などに関連するリアルタイムイベントを含むことができる。また、サーバ1412は、クライアントコンピューティング装置1402、1404、1406および1408の1つ以上の表示装置を介して、データフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションを含むこともできる。
【0162】
また、分散システム1400は、1つ以上のデータベース1414および1416を含むこともできる。データベース1414および1416は、様々な場所に常駐することができる。例示として、1つ以上のデータベース1414および1416は、サーバ1412の近く(および/またはその中)の非一時記憶媒体に常駐することができる。代替的には、データベース1414および1416は、リモートサーバ1412から離れており、ネットワークに基づく接続または専用接続を介して、サーバ1412と通信している。一組の態様において、データベース1414および1416は、記憶領域ネットワーク(SAN)に常駐することができる。同様に、サーバ1412に寄与する機能を実行するための任意の必要なファイルは、必要に応じて、サーバ1412上に/またはサーバ1412から離れた場所に保存されてもよい。一組の態様において、データベース1414および1416は、例えば、Oracleにより提供されるデータベースなどの関係データベースを含むことができる。これらの関係データベースは、SQLフォーマット命令に応じて、データを取得、保存および更新するように構成されている。
【0163】
図15は、本開示の態様に従ったシステム環境1500の1つ以上のコンポーネントを示す簡略ブロック図である。態様に従ったシステムの1つ以上のコンポーネントによって提供されるサービスは、クラウドサービスとして提供されることができる。図示の態様において、システム環境1500は、1つ以上のクライアント装置1504、1506および1508を含む。ユーザは、クライアントコンピューティング装置を用いて、クラウドサービスを提供するクラウドインフラストラクチャシステム1502と情報を交換することができる。クライアントコンピューティング装置は、ウェブブラウザ、専用クライアントアプリケーション(例えば、オラクルフォーム)または他のアプリケーションなどのクライアントアプリケーションを作動するように構成されることができる。ユーザは、クライアントアプリケーションを用いてクラウドインフラストラクチャシステム1502と情報を交換することによって、クラウドインフラストラクチャシステム1502により提供されたサービスを利用することができる。
【0164】
理解すべきことは、図示のクラウドインフラストラクチャシステム1502は、図示されたコンポーネント以外のコンポーネントを備えてもよいことである。さらに、図示の態様は、本発明の態様を組み込むことができるクラウドインフラストラクチャシステムの一例に過ぎない。いくつかの他の態様において、クラウドインフラストラクチャシステム1502は、図示よりも多いまたは少ないコンポーネントを有してもよく、2つ以上のコンポーネントを組み合わせてもよく、または異なる構成または配置のコンポーネントを有してもよい。
【0165】
クライアント装置1504、1506および1508は、上述したクライアントコンピューティング装置1402、1404、1406および1408と同様であってもよい。
【0166】
例示的なシステム環境1500は、3つのクライアントコンピューティング装置を備えると示されているが、任意の数のクライアントコンピューティング装置をサポートすることができる。他の装置、例えばセンサを有する装置は、クラウドインフラストラクチャシステム1502と情報を交換することができる。
【0167】
ネットワーク1510は、クライアント装置1504、1506および1508とクラウドインフラストラクチャシステム1502との間のデータの通信および交換を促進することができる。各ネットワークは、上記でネットワーク1410に関して説明したプロトコルを様々な市販プロトコルのいずれかを用いてデータ通信をサポートすることができ、当業者に熟知する任意の種類のネットワークであってもよい。
【0168】
クラウドインフラストラクチャシステム1502は、上記でサーバ1412に関して説明したコンポーネントを含み得る1つ以上のコンピュータおよび/またはサーバを含むことができる。
【0169】
特定の態様において、クラウドインフラストラクチャシステムによって提供されたサービスは、需要に応じて、クラウドインフラストラクチャシステムからユーザに提供できるオンラインデータの記憶およびバックアップ、ウェブベースの電子メールサービス、ホストされたオフィススイートおよび文章連携サービス、データベース処理、管理できる技術サポートサービスなどの多くのサービスを含んでよい。クラウドインフラストラクチャシステムによって提供されるサービスは、ユーザのニーズを満たすように動的に拡張できる。クラウドインフラストラクチャシステムによって提供されたサービスの特定の例示は、本明細書において、「サービスインスタンス」と呼ばれる。一般的には、インターネットなどの通信ネットワークを介して、クラウドサービスプロバイダのシステムからユーザに提供できる任意のサービスは、「クラウドサービス」と呼ばれる。典型的には、パブリッククラウド環境において、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客のオンプレミスサーバおよびシステムとは異なる。例えば、クラウドサービスプロバイダのシステムは、アプリケーションを提供することができ、ユーザは、必要に応じて、インターネットなどの通信ネットワークを介して、アプリケーションを注文し、使用することができる。
【0170】
いくつかの例において、コンピュータネットワーククラウドインフラストラクチャ内のサービスは、保護されたコンピュータネットワークのストレージアクセス、ホストされたデータベース、ホストされたウェブサーバ、ソフトウェアアプリケーション、またはクラウドベンダによってユーザに提供された他のサービス、または当該技術分野に知られている他のサービスを含むことができる。例えば、サービスは、インターネットを介して、クラウド上のリモートストレージに対して、パスワードにより保護されたアクセスを含むことができる。別の例として、サービスは、ウェブサービスにホストされている関係データベースおよびネットワーク上の開発者により私的使用のためのスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダのウェブサイト上でホストされている電子メールソフトウェアアプリケーションに対するアクセスを含むことができる。
【0171】
特定の態様において、クラウドインフラストラクチャシステム1502は、セルフサービスのサブスクリプションに基づく、柔軟なスケーラビリティ、信頼性、高可用性および安全性を有する方法で、顧客に提供できる一連のアプリケーション、ミドルウェアおよびデータベースサービスを含むことができる。このようなクラウドインフラストラクチャシステムの例示として、本願譲受人により提供されたオラクルパブリッククラウドが挙げられる。
【0172】
ビッグデータと呼ばれることもある大量のデータは、インフラストラクチャシステムによって、多くのレベルかつ異なる規模でホストおよび/または操作されてもよい。このようなデータは、典型的なデータベース管理ツールまたは従来のデータ処理アプリケーションを使用して処理することが困難であり得るほど大きく複雑なデータセットを含むことができる。例えば、テラバイトのデータは、パーソナルコンピュータまたはそれらのラック型パーソナルコンピュータを用いて保存、検索、および処理することが困難であろう。このようなサイズのデータは、最新のリレーショナルデータベース管理システム、デスクトップ統計データおよび可視化パッケージを用いて処理することが困難であろう。許容可能な経過時間内にこのようなサイズのデータを取得、取りまとめ、管理および処理するためには、一般的に使用されているソフトウェアツールの構造では対応できない数千台のサーバコンピュータを実行する大規模並列処理ソフトウェアを必要とする。
【0173】
分析者または研究者は、極めて大規模なデータセットを保存および操作することによって、大量のデータを可視化することができ、傾向を検出することができ、および/または他の方法で当該データと相互作用することができる。このようなデータを提示するため、またはこのデータに対する外力または当該データが表すものをシミュレーションするために、並列にリンクされた何十、何百、または何千ものプロセッサがこのようなデータに作用することができる。これらのデータセットは、データベースに編成された構造化データもしくは構造化モデルに応じて編成された構造化データ、および/または非構造化データ(例えば、電子メール、画像、データブロブ(Binary Large Objects)、ウェブページ、複雑なイベント処理)を含むことができる。より多くの(またはより少ない)コンピューティングリソースを比較的迅速に目的に集中させる態様の能力を活用することによって、クラウドインフラストラクチャシステムは、企業、政府機関、研究機関、私人、同じ意見を持つ個人同士のグループもしくは組織、または他のエンティティからの要求に基づいて、大きなデータセットに対してタスクを実行するためにより利用可能である場合がある。
【0174】
様々な態様において、クラウドインフラストラクチャシステム1502は、顧客から申込んだクラウドインフラストラクチャシステム1502のサービスを自動的に提供、管理および追跡するように構成されることができる。クラウドインフラストラクチャシステム1502は、様々な展開モデルを介して、クラウドサービスを提供することができる。例えば、サービスは、クラウドサービスを販売する組織に所有された(例えば、Oracleに所有された)クラウドインフラストラクチャシステム1502を有するパブリッククラウドモデルで提供され、一般人または異なる業界の企業に利用されることができる。別の例として、サービスは、単一の組織に専用されたクラウドインフラストラクチャシステム1502を有するプライベートクラウドモデルで提供され、組織内の1つ以上の実体に利用されることができる。また、クラウドサービスは、集団クラウドモデルで提供されてもよい。よって、クラウドインフラストラクチャシステム1502およびクラウドインフラストラクチャシステム1502により提供されたサービスは、関連する集団内の複数の組織によって共有される。また、クラウドサービスは、2つ以上の異なるモデルの組み合わせからなるハイブリッドクラウドモデルで提供されてもよい。
【0175】
特定の態様において、クラウドインフラストラクチャシステム1502によって提供されたサービスは、SaaS(Software as a Service)カテゴリ、PaaS(Platform as a Service)カテゴリ、IaaS(Infrastructure as a Service)カテゴリ、またはハイブリッドサービスを含む他のカテゴリのサービスに準拠して提供された1つ以上のサービスを含むことができる。顧客は、サブスクリプションの申込みによって、クラウドインフラストラクチャシステム1502によって提供された1つ以上のサービスを注文することができる。これに応じて、クラウドインフラストラクチャシステム1502は、顧客のサブスクリプション申込書に含まれたサービスを提供する処理を行う。
【0176】
特定の態様において、クラウドインフラストラクチャシステム1502によって提供されたサービスは、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含むがこれらに限定されない。いくつかの例において、アプリケーションサービスは、SaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。SaaSプラットフォームは、SaaSカテゴリに準拠するクラウドサービスを提供するように構成されてもよい。例えば、SaaSプラットフォームは、統合の開発および展開プラットフォーム上でオンデマンドアプリケーションのスイートを構築し、提供するように、機能することができる。SaaSプラットフォームは、SaaSサービスを提供するために、基礎のソフトウェアおよびインフラストラクチャを管理し、制御することができる。SaaSプラットフォームにより提供されたサービスを利用することによって、顧客は、クラウドインフラストラクチャシステム上で動作するアプリケーションを利用することができる。顧客は、別々のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得することができる。様々な異なるSaaSサービスを提供することができる。例示としては、販売実績管理、企業統合、および大規模組織のビジネス柔軟性に対する解決策を提供するサービスを含むがこれらに限定されない。
【0177】
特定の態様において、プラットフォームサービスは、PaaSプラットフォームを介してクラウドインフラストラクチャシステムによって提供されてもよい。PaaSプラットフォームは、PaaSカテゴリに準拠するクラウドサービスを提供するように構成されてもよい。プラットフォームサービスの例としては、共有されている共通アーキテクチャ上で既存のアプリケーションを統合する能力、およびプラットフォームにより提供された共有サービスを活用する新規アプリケーションを構築する能力を組織(例えば、Oracle)に与えるサービスを含むがこれに限定されない。PaaSプラットフォームは、PaaSサービスを提供するために、基礎のソフトウェアおよびインフラストラクチャを管理し、制御することができる。顧客は、クラウドインフラストラクチャシステム上で動作するアプリケーションを利用することができる。顧客は、別々のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得することができる。様々な異なるSaaSサービスを提供することができる。プラットフォームサービスの例としては、oracle Javaクラウドサービス(JCS)、Oracleデータベースクラウドサービス(DBCS)およびその他を含むがこれらに限定されない。
【0178】
PaaSプラットフォームにより提供されたサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムにサポートされているプログラミング言語およびツールを利用することができ、展開されたサービスを制御することができる。特定の態様において、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(例えば、Oracle Fusionミドルウェアサービス)、およびJavaクラウドサービスを含むことができる。一態様において、データベースクラウドサービスは、データベースリソースを蓄積する能力を組織に与えることができる共有サービス展開モデルをサポートすることができ、DBaaS(Database as a Service)をクラウドデータベースとして顧客に提供することができる。ミドルウェアクラウドサービスは、クラウドインフラストラクチャシステム上で様々なビジネスアプリケーションを開発および展開するためのプラットフォームを顧客に提供することができ、Javaクラウドサービスは、クラウドインフラストラクチャシステム上でJavaアプリケーションを展開するためのプラットフォームを顧客に提供することができる。
【0179】
様々な異なるインフラストラクチャサービスは、IaaSプラットフォームによって、クラウドインフラストラクチャシステムに提供されてもよい。これらのインフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームにより提供されたサービスを利用する顧客のために、ストレージ、ネットワークおよびその他の基本的なコンピューティングリソースとしての基礎コンピューティングリソースの管理と制御を容易にする。
【0180】
また、特定の態様において、クラウドインフラストラクチャシステム1502は、クラウドインフラストラクチャシステムを利用する顧客に、様々なサービスを提供するために使用されるリソースを提供するためのインフラストラクチャリソース1530を含むことができる。一実施形態において、インフラストラクチャリソース1530は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されたサービスを実行するために、事前に統合され且つ最適化されたサーバリソース、ストレージリソースおよびネットワークリソースなどのハードウェアの組み合わせを含んでもよい。
【0181】
特定の態様において、クラウドインフラストラクチャシステム1502内のリソースは、複数のユーザに共有されることができ、各々の需要に応じて動的に再割当てることができる。また、リソースは、異なるタイムゾーンでユーザに割当てることができる。例えば、クラウドインフラストラクチャシステム1530は、指定時間内でクラウドインフラストラクチャシステムのリソースを第一時間帯における第一グループのユーザに利用させ、その後、同様のリソースを異なる時間帯における別のグループのユーザに再配分することができ、リソースを最大に利用する。
【0182】
特定の態様において、複数の内部共有サービス1532は、提供され、クラウドインフラストラクチャシステム1502の異なる構成要素またはモジュールに共有されおよびクラウドインフラストラクチャシステム1502によって提供されたサービスに共有されることができる。これらの内部共有サービスは、安全性および識別サービス、統合サービス、企業リポジトリサービス、企業管理サービス、ウイルススキャンおよびホワイトリストサービス、高可用性のバックアップおよびリカバリサービス、クラウドサポートを可能にするサービス、メールサービス、通知サービス、およびファイル転送サービスなどを含むがこれらに限定されない。
【0183】
特定の態様において、クラウドインフラストラクチャシステム1502は、クラウドインフラストラクチャシステム内のクラウドサービス(例えば、SaaSサービス、PaaSサービスおよびIaaSサービス)を包括的に管理する機能を提供することができる。一態様において、クラウド管理機能は、クラウドインフラストラクチャシステム1502などによって受信した顧客のサブスクリプションを提供、管理、および追跡する機能を含んでもよい。
【0184】
一態様において、図示のように、クラウド管理機能は、1つ以上のモジュール、例えば、オーダー管理モジュール1520、オーダーオーケストレーションモジュール1522、オーダー支給モジュール1524、オーダー管理および監視モジュール1526、およびID管理モジュール1528によって提供される。これらのモジュールは、1つ以上のコンピュータおよび/またはサーバを含んでもよく、これらを用いて形成されてもよい。これらのコンピュータおよび/またはサーバは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、または任意の他の適切な配置および/またはこれらの組み合わせであってもよい。
【0185】
例示的な操作1534において、顧客は、クライアント装置、例えば、クライアント装置1504、1506または1508を使用して、クラウドインフラストラクチャシステム1502により提供された1つ以上のサービスを要求し、クラウドインフラストラクチャシステム1502によって提供された1つ以上のサービスをオーダーすることによって、クラウドインフラストラクチャシステム1502と情報を交換することができる。特定の実施形態において、顧客は、クラウドユーザインターフェイス(UI)、クラウドUI1512、クラウドUI1514および/またはクラウドUI1516にアクセスし、これらのUIを介して、サブスクリプションをオーダーすることができる。クラウドインフラストラクチャシステム1502が顧客のオーダーに応答して受信したオーダー情報は、顧客と、クラウドインフラストラクチャシステム1502により提供され、顧客が購読しようとする1つ以上のサービスとを特定する情報を含むことができる。
【0186】
顧客がオーダーした後、オーダー情報は、クラウドUI1512、1514および/または1516を介して受信される。
【0187】
操作1536において、オーダーは、オーダーデータベース1518に保存される。オーダーデータベース1518は、クラウドインフラストラクチャシステム1518によって操作され、または他のシステム要素と連動して操作されるいくつかのデータベースのうち1つであってもよい。
【0188】
操作1538において、オーダー情報は、オーダー管理モジュール1520に転送される。いくつかの例において、オーダー管理モジュール1520は、オーダーに関連する請求および会計機能、例えば、オーダーの確認、および確認後オーダーの記入を実行するように構成されてもよい。
【0189】
操作1540において、オーダーに関する情報は、オーダーオーケストレーションモジュール1522に送信される。オーダーオーケストレーションモジュール1522は、オーダー情報を利用して、顧客がオーダーしたサービスおよびリソースの提供を用意する。いくつかの例において、オーダーオーケストレーションモジュール1522は、オーダー支給モジュール1524のサービスを用いて、オーダーしたサービスをサポートするように、リソースの提供を用意することができる。
【0190】
特定の態様において、オーダーオーケストレーションモジュール1522は、各オーダーに関連したビジネスプロセスを管理することができ、ビジネスロジックを適用することによって、オーダーに対して支給をするか否かを判断することができる。操作1542において、新規サブスクリプションのオーダーを受信すると、オーダーオーケストレーションモジュール1522は、リソースを割当て、サブスクリプションオーダーを満たすために必要なリソースを構成するように、要求をオーダー支給モジュール1524に送信する。オーダー支給モジュール1524は、顧客がオーダーしたサービス用のリソースを割当てることができる。オーダー支給モジュール1524は、システム環境1500により提供されたクラウドサービスと、要求されたサービスを提供するためのリソースを供給するために使用される物理的な実装層との間の抽象化レベルを形成する。このように、オーダーオーケストレーションモジュール1522は、例えば、サービスおよびリソースをその場で支給するかまたは事前に支給するか、要求に応じて割当てる/与えるかなどの実装詳細から単離することができる。
【0191】
操作1544において、サービスおよびリソースを支給した後、クラウドインフラストラクチャシステム1502のオーダー支給モジュール1524は、提供されるサービスの通知を、クライアント装置1504、1506および/または1508を操作する顧客に送信することができる。
【0192】
操作1546において、オーダー管理および監視モジュール1526は、顧客のサブスクリプションオーダーを管理および追跡することができる。いくつかの例において、オーダー管理および監視モジュール1526は、サブスクリプションオーダー内のサービスの利用統計、例えば、ストレージの使用量、データの転送量、ユーザの数、システムの起動時間およびシステムの停止時間を収集するように構成されることができる。
【0193】
特定の態様において、クラウドインフラストラクチャシステム1500は、ID管理モジュール1528を含むことができる。ID管理モジュール1528は、クラウドインフラストラクチャシステム1500に、識別サービス、例えば、アクセス管理および認可サービスを提供するように構成することができる。特定の態様において、ID管理モジュール1528は、クラウドインフラストラクチャシステム1502によって提供されたサービスを利用したい顧客に関する情報を制御することができる。このような情報は、顧客のIDを承認する情報、および様々なシステムリソース(例えば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対して許可された顧客の実行権限を記載する情報を含むことができる。ID管理モジュール1528は、各顧客に関する記述情報、記述情報にアクセスおよび変更する方法、および記述情報にアクセスおよび変更した顧客に対する管理を含むことができる。
【0194】
図16は、本発明の様々な態様を実現することができるコンピュータシステム1600の一例を示す図である。コンピュータシステム1600を用いて、上述したコンピュータシステムのいずれかを実現することができる。図示のように、コンピュータシステム1600は、バスサブシステム1602を介して、複数の周辺サブシステムと連通する処理ユニット1604を含む。周辺サブシステムは、処理加速ユニット1606と、I/Oサブシステム1608と、記憶サブシステム1618と、通信サブシステム1624とを含むことができる。記憶サブシステム1618は、有形コンピュータ可読記憶媒体1622と、システムメモリ1610とを含む。
【0195】
バスサブシステム1602は、コンピュータシステム1600の様々な構成要素およびサブシステムが必要に応じて相互通信させるための機構を形成する。図示には、バスサブシステム1602を単一のバスとして概略的に示しているが、代替的な態様において、バスサブシステムは、複数のバスを利用してもよい。バスサブシステム1602は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを備えるいくつかの種類のバス構造のいずれかを有してもよい。例えば、このようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオエレクトロニクス規格協会(VESA)ローカルバス、および周辺構成要素相互接続(PCI)バスを含むことができる。これらのバスは、IEEE P1686.1規格に準拠した製造されたメザニンバスとして実現することができる。
【0196】
1つ以上の集積回路(例えば、従来のマイクロプロセッサまたはマイクロコントローラ)として実装することができる処理ユニット1604は、コンピュータシステム1600の操作を制御する。処理ユニット1604は、1つ以上のプロセッサを含むことができる。これらのプロセッサは、シングルコアプロセッサであってもよく、マルチコアプロセッサであってもよい。特定の態様において、処理ユニット1604は、各々シングルコアプロセッサまたはマルチコアプロセッサを備える1つ以上の独立した処理ユニット1632および/または1634として実装されてもよい。他の態様において、処理ユニット1604は、2つのデュアルコア(dual-core)プロセッサを単一のチップに集積することにより形成されたクアッドコア(Quad-core)処理ユニットとして実装されてもよい。
【0197】
様々な態様において、処理ユニット1604は、プログラムコードに応じて様々なプログラムを実行することができ、複数のプログラムまたはプロセスを同時に実行することができる。任意の時点で、実行されるプログラムコードの一部または全てを処理ユニット1604および/または記憶サブシステム1618に常駐することができる。適切なプログラミングによって、処理ユニット1604は、上述した様々な機能を提供することができる。コンピュータシステム1600は、デジタルシグナルプロセッサ(DSP)および専用プロセッサなどを含むことができる処理加速ユニット1606をさらに備えてもよい。
【0198】
I/Oサブシステム1608は、ユーザインターフェイス入力装置と、ユーザインターフェイス出力装置とを含むことができる。ユーザインターフェイス入力装置は、キーボード、マウスまたはトラックボールなどのポインティング装置、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声命令認識システムを備える音声入力装置、マイクロフォン、および他の種類の入力装置を含んでもよい。また、ユーザインターフェイス入力装置は、例えば、Microsoft Kinect(登録商標)モーションセンサのようなモーション検知および/またはジェスチャ認識装置を含んでもよい。Microsoft Kinect(登録商標)モーションセンサは、ジェスチャおよび音声命令を利用する自然ユーザインターフェース(NUI)を介して、Microsoft Xbox(登録商標)460ゲームコントローラなどの入力装置を制御することができ、それと対話することができる。また、ユーザインターフェイス入力装置は、Google Glass(登録商標)瞬き検出器のような眼球ジェスチャ認識装置を含むことができる。Google Glass(登録商標)瞬き検出器は、ユーザの眼球活動(例えば、写真を撮るときおよび/またはメニューを選択するときの「瞬き」)を検出し、眼球活動を入力装置(例えば、Google Glass(登録商標))に入力する入力に変換する。さらに、ユーザインターフェイス入力装置は、音声命令を介してユーザと音声認識システム(例えば、Siri(登録商標)ナビゲータ)との対話を可能にする音声認識検出装置を含んでもよい。
【0199】
また、ユーザインターフェイス入力装置は、三次元(4D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッド、グラフィックタブレット、スピーカなどのオーディオ/ビジュアル装置、デジタルカメラ、デジタルビデオカメラ、ポータブルメディアプレーヤ、ウェブカメラ、イメージスキャナ、指紋スキャナ、バーコードリーダ、4Dスキャナ、4Dプリンタ、レーザ距離計、および視線追跡装置を含むがこれらに限定されない。さらに、ユーザインターフェイス入力装置は、例えば、コンピュータ断層撮影装置、磁気共鳴像装置、超音波放射断層撮影装置、および医療用超音波装置などのような医用画像入力装置を含んでもよい。また、ユーザインターフェイス入力装置は、例えば、MIDIキーボードおよび電子楽器などの音声入力装置を含んでもよい。
【0200】
ユーザインターフェイス出力装置は、ディスプレイサブシステム、インジケータライト、またはオーディオ出力装置などの非視覚ディスプレイを含んでもよい。ディスプレイサブシステムは、例えば、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使用するフラットパネル装置、投射装置またはタッチスクリーンであってもよい。一般に、「出力装置」という用語を使用する場合、コンピュータシステム1600から情報をユーザまたは他のコンピュータに出力するためのすべての可能な種類の装置および機構を含むことを意図している。例えば、ユーザインターフェイス出力装置は、文字、画像およびオーディオ/ビデオ情報を視覚的に伝達する様々な表示装置、例えば、モニタ、プリンタ、スピーカ、ヘッドフォン、カーナビゲーションシステム、プロッタ、音声出力装置、およびモデムを含むがこれらに限定されない。
【0201】
コンピュータシステム1600は、記憶サブシステム1618を含むことができる。記憶サブシステム1618は、ソフトウェア要素を備え、図示では、これらのソフトウェア要素は、システムメモリ1610内に配置されている。システムメモリ1610は、処理ユニット1604にロード可能かつ実行可能なプログラム命令、およびこれらのプログラムの実行により生成されたデータを記憶することができる。
【0202】
コンピュータシステム1600の構成およびタイプに応じて、システムメモリ1610は、揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory:RAM))であってもよく、および/または、不揮発性メモリ(例えば、読取り専用メモリ(read-only memory:ROM)、フラッシュメモリ)であってもよい。一般に、RAMは、処理ユニット1604がすぐにアクセス可能なデータおよび/またはプログラムモジュール、および/または、処理ユニット1604によって現在操作および実行されているデータおよび/またはプログラムモジュールを収容する。いくつかの実現例では、システムメモリ1610は、スタティックランダムアクセスメモリ(static random access memory:SRAM)またはダイナミックランダムアクセスメモリ(dynamic random access memory:DRAM)などの複数の異なるタイプのメモリを含み得る。いくつかの実現例では、始動中などにコンピュータシステム1600内の要素間で情報を転送することを助ける基本ルーチンを含む基本入力/出力システム(basic input/output system:BIOS)が、一般にROMに格納されてもよい。一例としておよび非限定的に、システムメモリ1610は、クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム(relational database management system:RDBMS)などを含み得るアプリケーションプログラム1612、プログラムデータ1614およびオペレーティングシステム1616も示す。一例として、オペレーティングシステム1616は、マイクロソフトウィンドウズ(登録商標)、Apple Macintosh(登録商標)および/もしくはLinux(登録商標)オペレーティングシステムの様々なバージョン、様々な市販のUNIX(登録商標)もしくはUNIXライクオペレーティングシステム(様々なGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むが、これらに限定されるものではない)、ならびに/または、iOS、Windows(登録商標)フォン、アンドロイド(登録商標)OS、ブラックベリー(登録商標)15 OSおよびパーム(登録商標)OSオペレーティングシステムなどのモバイルオペレーティングシステムを含むことができる。
【0203】
また、記憶サブシステム1618は、いくつかの実施例の機能を提供する基本的なプログラミングおよびデータ構造を格納するための有形のコンピュータ可読記憶媒体を提供することができる。プロセッサによって実行されたときに上記の機能を提供するソフトウェア(プログラム、コードモジュール、命令)が記憶サブシステム1618に記憶されてもよい。これらのソフトウェアモジュールまたは命令は、処理ユニット1604によって実行されてもよい。また、記憶サブシステム1618は、本発明に従って使用されるデータを記憶するためのリポジトリを提供することができる。
【0204】
また、記憶サブシステム1610は、コンピュータ可読記憶媒体1642にさらに接続可能なコンピュータ可読記憶媒体リーダ1620を含むことができる。コンピュータ可読記憶媒体1642は、システムメモリ1610と共に、または必要に応じてシステムメモリ1610と組み合わせて、コンピュータ可読情報を一時的および/または永久に収容、格納、送信および検索するための記憶媒体に加えて、リモート記憶装置、ローカル記憶装置、固定的な記憶装置および/または取外し可能な記憶装置を包括的に表すことができる。
【0205】
また、コードまたはコードの一部を含むコンピュータ可読記憶媒体1642は、当該技術分野において公知のまたは使用される任意の適切な媒体を含み得て、当該媒体は、情報の格納および/または送信のための任意の方法または技術において実現される揮発性および不揮発性の、取外し可能および取外し不可能な媒体などであるが、これらに限定されるものではない記憶媒体および通信媒体を含む。これは、RAM、ROM、電子的消去・プログラム可能ROM(electronically erasable programmable ROM:EEPROM)、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(digital versatile disk:DVD)、または他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または他の有形のコンピュータ可読媒体などの有形の非一時的なコンピュータ可読記憶媒体を含むことができる。また、指定される場合、これは、データ信号、データ送信などの無形の一時的なコンピュータ可読媒体、または、所望の情報を送信するために使用可能であり且つコンピュータシステム1600によってアクセス可能なその他の媒体を含むことができる。
【0206】
一例として、コンピュータ可読記憶媒体1622は、取外し不可能な不揮発性磁気媒体から読取るまたは当該媒体に書込むハードディスクドライブ、取外し可能な不揮発性磁気ディスクから読取るまたは当該ディスクに書込む磁気ディスクドライブ、ならびに、CD ROM、DVDおよびブルーレイ(登録商標)ディスクまたは他の光学式媒体などの取外し可能な不揮発性光学ディスクから読取るまたは当該ディスクに書込む光学式ディスクドライブを含むことができる。コンピュータ可読記憶媒体1622は、ジップ(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(universal serial bus:USB)フラッシュドライブ、セキュアデジタル(secure digital:SD)カード、DVDディスク、デジタルビデオテープなどを含み得るが、これらに限定されるものではない。また、コンピュータ可読記憶媒体1622は、フラッシュメモリベースのSSD、企業向けフラッシュドライブ、ソリッドステートROMなどの不揮発性メモリに基づくソリッドステートドライブ(solid-state drive:SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAMなどの揮発性メモリに基づくSSD、DRAMベースのSSD、磁気抵抗RAM(magnetoresistive RAM:MRAM)SSD、およびDRAMとフラッシュメモリベースのSSDとの組み合わせを使用するハイブリッドSSDを含むことができる。ディスクドライブおよびそれらの関連のコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータの不揮発性記憶装置をコンピュータシステム1600に提供することができる。
【0207】
通信サブシステム1624は、他のコンピュータシステムおよびネットワークとのインターフェイスを提供する。通信サブシステム1624は、他のシステムからデータを受信し、コンピュータシステム1600から他のシステムにデータを送信するためのインターフェイスの役割を果たす。例えば、通信サブシステム1624は、コンピュータシステム1600がインターネットを介して1つ以上の装置に接続することを可能にすることができる。特定の態様において、通信サブシステム1624は、(例えば4G、4GまたはEDGE(enhanced data rates for global evolution)などの携帯電話技術、高度データネットワーク技術を用いて)無線音声および/またはデータネットワークにアクセスするための無線周波数(radio frequency:RF)トランシーバ構成要素、WiFi(IEEE802.28ファミリ標準または他のモバイル通信技術またはそれらの任意の組み合わせ)、全地球測位システム(global positioning system:GPS)レシーバ構成要素、および/または、他の構成要素を含むことができる。特定の態様において、通信サブシステム1624は、無線インターフェイスに加えて、または無線インターフェイスの代わりに、有線ネットワーク接続(例えば、イーサネット)を提供することができる。
【0208】
また、特定の態様において、通信サブシステム1624は、コンピュータシステム1600を使用し得る1人以上のユーザを代表して、構造化および/または非構造化データフィード1626、イベントストリーム1628、イベント更新1630などの形態で入力通信を受信することができる。
【0209】
一例として、通信サブシステム1624は、ツイッター(登録商標)フィード、フェースブック(登録商標)更新、リッチ・サイト・サマリ(Rich Site Summary:RSS)フィードなどのウェブフィードなどの非構造化データフィード1626をリアルタイムでソーシャルメディアネットワークおよび/または他の通信サービスのユーザから受信し、および/または、1つ以上の第三者情報源からリアルタイム更新を受信するように構成され得る。
【0210】
また、通信サブシステム1624は、連続的なデータストリームの形態でデータを受信するように構成され得て、当該データは、連続的である場合もあれば本質的に明確な端部を持たない状態で境界がない場合もあるリアルタイムイベントのイベントストリーム1628および/またはイベント更新1630を含むことができる。連続的なデータを生成するアプリケーションの例としては、例えばセンサデータアプリケーション、金融ティッカ、ネットワーク性能測定ツール(例えばネットワークモニタリングおよびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通モニタリングなどを含むことができる。
【0211】
また、通信サブシステム1624は、構造化されたおよび/または構造化されていないデータフィード1626、イベントストリーム1628、イベント更新1630などを、コンピュータシステム1600に結合された1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに出力するように構成されてもよい。
【0212】
コンピュータシステム1600は、手持ち式携帯機器(例えばiPhone(登録商標)携帯電話、Ipad(登録商標)計算タブレット、PDA)、ウェアラブル装置(例えばGoogle Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラックまたはその他のデータ処理システムを含む様々なタイプのうちの1つであってもよい。
【0213】
コンピュータおよびネットワークが絶え間なく進化し続けるため、図示されているコンピュータシステム1600の説明は、特定の例として意図されているにすぎない。図に示されているシステムよりも多くのまたは少ない数の構成要素を有する多くの他の構成が可能である。例えば、ハードウェア、ファームウェア、(アプレットを含む)ソフトウェア、または組み合わせにおいて、カスタマイズされたハードウェアも使用されてもよく、および/または、特定の要素が実装されてもよい。さらに、ネットワーク入力/出力装置などの他の計算装置への接続が利用されてもよい。本明細書で提供される開示および教示に基づいて、当業者は、様々な態様を実現するための他の手段および/または方法を理解するであろう。
【0214】
上記の明細書では、本発明の態様は、その具体的な態様を参照して記載されているが、本発明はこれに限定されるものではないことを当業者は認識するであろう。上記の発明の様々な特徴および局面は、個々にまたは一緒に使用されてもよい。さらに、態様は、明細書のより広い精神および範囲から逸脱することなく、本明細書に記載されているものを越えたどのような環境およびアプリケーションでも利用可能である。したがって、明細書および図面は、限定的ではなく例示的であるものとみなされるべきである。
【国際調査報告】