(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-10-11
(54)【発明の名称】差し込みサービスバックプレッシャーに基づくスマートなスパン優先順位付け
(51)【国際特許分類】
G06F 11/34 20060101AFI20231003BHJP
【FI】
G06F11/34 176
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023516156
(86)(22)【出願日】2021-06-04
(85)【翻訳文提出日】2023-04-11
(86)【国際出願番号】 US2021036007
(87)【国際公開番号】W WO2022055586
(87)【国際公開日】2022-03-17
(32)【優先日】2020-09-13
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】シローン,ケビン・ジェイ
(72)【発明者】
【氏名】サリバン,ブレイク・ティ
(72)【発明者】
【氏名】バジパイ,ディパンカー
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GB02
5B042HH30
5B042MA08
5B042MC40
(57)【要約】
開示する技術は、ウェブアプリケーションを自動的にインストルメント化することに関する。ある態様では、方法が、ウェブアプリケーションがユーザーインタラクションによってトリガされるイベントを含むことを特定する。この方法は、イベントによって引き起こされる第1操作セットの実行に基づいてトレーシング情報のログを取り、第1スパンのパフォーマンスの第1測定値を取得するように構成されるトレーサーに、イベントを対応付ける。方法は、第1操作セットの実行がサーバーへのリクエストを行わせることをコードにおいて特定する。方法は、リクエストをトレーサーと対応付ける。トレーサーは、リクエストによって引き起こされる第2操作セットの実行に基づいてトレーシング情報のログを取り、第1スパンの子スパンである第2スパンのパフォーマンスの第2測定値を取得するように構成される。
【特許請求の範囲】
【請求項1】
ウェブアプリケーションを自動的にインストルメント化する方法であって、
前記ウェブアプリケーションのコードから、前記ウェブアプリケーションがユーザーインタラクションによってトリガされるイベントを含むことを特定することと、
前記イベントをトレーサーと対応付けることとを含み、前記トレーサーは、前記イベントによって引き起こされる第1操作セットの実行に基づいてトレーシング情報のログを取り、第1スパンのパフォーマンスの第1測定値を取得するように構成され、前記第1スパンは、第1操作セットを含み、前記パフォーマンスの第1測定値は、(i)前記第1操作セットを実行するための処理サイクルの数および(ii)前記第1操作セットの実行時間のうち、1つ以上を含み、前記方法は、さらに、
前記第1操作セットの実行がサーバーへのリクエストを行わせることを前記コードにおいて特定することと、
前記リクエストを前記トレーサーと対応付けることとを含み、前記トレーサーは、前記リクエストによって引き起こされる第2操作セットの実行に基づいてトレーシング情報のログを取り、第2スパンのパフォーマンスの第2測定値を取得するように構成され、前記第2スパンは、前記第2操作セットを含み、前記第2スパンは、前記第1スパンの子スパンであり、前記パフォーマンスの第2測定値は、(i)前記第2操作セットを実行するための処理サイクルの数および(ii)前記第2操作セットの実行時間のうち、1つ以上を含む、方法。
【請求項2】
前記第1スパンの優先順位を受信することと、
前記優先順位が優先順位許容範囲外であると判断することと、
前記判断することに基づいて前記第1スパンをプロキシスパンとみなすこととをさらに含み、前記第1スパンをプロキシスパンとみなすことは、前記トレーサーに、前記第1操作セットの実行に基づいて情報のログを取らせないようにする、請求項1に記載の方法。
【請求項3】
更新された前記第1スパンの優先順位にアクセスすることと、
更新された前記優先順位が前記優先順位許容範囲内であると判断したことに応答して、前記トレーサーをインスタンス化し、前記第1スパンをスパンと新たにみなすこととをさらに含む、請求項2に記載の方法。
【請求項4】
前記ウェブアプリケーションの開始に基づいて前記トレーサーおよび前記トレーサーをインスタンス化することと、
前記イベントのトリガに基づいて前記第1スパンの開始のログを自動的に取ることと、
前記リクエストのトリガに基づいて前記第2スパンの開始のログを自動的に取ることと、
前記第2操作セットの完了に基づいて前記第2スパンの終了のログを自動的に取ることと、
前記第1操作セットの完了に基づいて前記第1スパンの終了のログを自動的に取ることとをさらに含む、請求項1に記載の方法。
【請求項5】
前記リクエストのトリガに基づいて前記リクエストを外部サーバーに送ることと、
前記送ることに基づいて前記外部サーバー上で前記第2スパンの開始のログを自動的に取ることと、
前記外部サーバー上で前記第2操作セットを実行することと、
前記外部サーバー上で前記第2スパンの終了のログを自動的に取ることと、
前記第2スパンの終了の指示を前記外部サーバーから受信することとをさらに含む、請求項1に記載の方法。
【請求項6】
前記第1スパンの優先順位にアクセスすることと、
前記第1スパンの優先順位および前記ウェブアプリケーションの開始に基づいて前記トレーサーをインスタンス化することと、
前記リクエストのトリガに基づいて前記第2スパンの開始のログを自動的に取ることと、
前記第2操作セットの完了に基づいて前記第2スパンの終了のログを自動的に取ることとをさらに含む、請求項1に記載の方法。
【請求項7】
前記リクエストは、前記サーバーに前記第2操作セットを実行させ、
前記第2スパンの終了のログを自動的に取ることは、前記第2スパンに関する情報を含むヘッダを前記サーバーから受信することを含む、請求項6に記載の方法。
【請求項8】
システムであって、
コンピュータ実行可能なプログラム命令を格納した非一時的なコンピュータ読み取り可能な媒体と、
前記非一時的なコンピュータ読み取り可能な媒体に通信可能に連結され、前記コンピュータ実行可能なプログラム命令を実行する少なくとも1つのプロセッサとを備え、前記コンピュータ実行可能なプログラム命令は、
ウェブアプリケーションのコードから、前記ウェブアプリケーションがユーザーインタラクションによってトリガされるイベントを含むことを特定するための命令と、
前記イベントをトレーサーと対応付けるための命令とを含み、前記トレーサーは、前記イベントによって引き起こされる第1操作セットの実行に基づいてトレーシング情報のログを取り、第1スパンのパフォーマンスの第1測定値を取得するように構成され、前記第1スパンは、第1操作セットを含み、前記パフォーマンスの第1測定値は、(i)前記第1操作セットを実行するための処理サイクルの数および(ii)前記第1操作セットの実行時間のうち、1つ以上を含み、前記コンピュータ実行可能なプログラム命令は、さらに、
前記第1操作セットの実行がサーバーへのリクエストを行わせることを前記コードにおいて特定するための命令と、
前記リクエストを前記トレーサーと対応付けるための命令とを含み、前記トレーサーは、前記リクエストによって引き起こされる第2操作セットの実行に基づいてトレーシング情報のログを取り、第2スパンのパフォーマンスの第2測定値を取得するように構成され、前記第2スパンは、前記第2操作セットを含み、前記第2スパンは、前記第1スパンの子スパンであり、前記パフォーマンスの第2測定値は、(i)前記第2操作セットを実行するための処理サイクルの数および(ii)前記第2操作セットの実行時間のうち、1つ以上を含む、システム。
【請求項9】
前記コンピュータ実行可能なプログラム命令は、
前記第1スパンの優先順位を受信するための命令と、
前記優先順位が優先順位許容範囲外であると判断するための命令と、
前記判断することに基づいて前記第1スパンをプロキシスパンとみなすための命令とを含み、前記第1スパンをプロキシスパンとみなすための命令は、前記トレーサーに、前記第1操作セットの実行に基づいて情報のログを取らせないようにする、請求項8に記載のシステム。
【請求項10】
前記コンピュータ実行可能なプログラム命令は、
更新された前記第1スパンの優先順位にアクセスするための命令と、
更新された前記優先順位が前記優先順位許容範囲内であると判断したことに応答して、前記トレーサーをインスタンス化し、前記第1スパンをスパンと新たにみなすための命令とを含む、請求項9に記載のシステム。
【請求項11】
前記コンピュータ実行可能な命令は、
前記リクエストのトリガに基づいて前記リクエストを外部サーバーに送るための命令と、
前記送ることに基づいて前記外部サーバー上で前記第2スパンの開始のログを自動的に取るための命令と、
前記外部サーバー上で前記第2操作セットを実行するための命令と、
前記外部サーバー上で前記第2スパンの終了のログを自動的に取るための命令と、
前記第2スパンの終了の指示を前記外部サーバーから受信するための命令とを含む、請求項8に記載のシステム。
【請求項12】
前記コンピュータ実行可能な命令は、
前記ウェブアプリケーションの開始に基づいて前記トレーサーおよび前記トレーサーをインスタンス化するための命令と、
前記イベントのトリガに基づいて前記第1スパンの開始のログを自動的に取るための命令と、
前記リクエストのトリガに基づいて前記第2スパンの開始のログを自動的に取るための命令と、
前記第2操作セットの完了に基づいて前記第2スパンの終了のログを自動的に取るための命令と、
前記第1操作セットの完了に基づいて前記第1スパンの終了のログを自動的に取るための命令とを含む、請求項8に記載のシステム。
【請求項13】
前記コンピュータ実行可能な命令は、
前記第1スパンの優先順位にアクセスするための命令と、
前記第1スパンの優先順位および前記ウェブアプリケーションの開始に基づいて前記トレーサーをインスタンス化するための命令と、
前記リクエストのトリガに基づいて前記第2スパンの開始のログを自動的に取るための命令と、
前記第2操作セットの完了に基づいて前記第2スパンの終了のログを自動的に取るための命令とを含む、請求項8に記載のシステム。
【請求項14】
前記コンピュータ実行可能な命令は、
前記リクエストは、前記サーバーに前記第2操作セットを実行させる命令を含み、
前記第2スパンの終了のログを自動的に取ることは、前記第2スパンに関する情報を含むヘッダを前記サーバーから受信することを含む、請求項13に記載のシステム。
【請求項15】
コンピュータ実行可能なプログラム命令を格納した非一時的なコンピュータ読み取り可能な媒体であって、前記コンピュータ実行可能なプログラム命令は、プロセッサによって実行されると、動作を実行し、前記動作は、
ウェブアプリケーションのコードから、前記ウェブアプリケーションがユーザーインタラクションによってトリガされるイベントを含むことを特定することと、
前記イベントをトレーサーと対応付けることとを含み、前記トレーサーは、前記イベントによって引き起こされる第1操作セットの実行に基づいてトレーシング情報のログを取り、第1スパンのパフォーマンスの第1測定値を取得するように構成され、前記第1スパンは、第1操作セットを含み、前記パフォーマンスの第1測定値は、(i)前記第1操作セットを実行するための処理サイクルの数および(ii)前記第1操作セットの実行時間のうち、1つ以上を含み、前記動作は、さらに、
前記第1操作セットの実行がサーバーへのリクエストを行わせることを前記コードにおいて特定することと、
前記リクエストを前記トレーサーと対応付けることとを含み、前記トレーサーは、前記リクエストによって引き起こされる第2操作セットの実行に基づいてトレーシング情報のログを取り、第2スパンのパフォーマンスの第2測定値を取得するように構成され、前記第2スパンは、前記第2操作セットを含み、前記第2スパンは、前記第1スパンの子スパンであり、前記パフォーマンスの第2測定値は、(i)前記第2操作セットを実行するための処理サイクルの数および(ii)前記第2操作セットの実行時間のうち、1つ以上を含む、非一時的なコンピュータ読み取り可能な媒体。
【請求項16】
前記動作は、
前記第1スパンの優先順位を受信することと、
前記優先順位が優先順位許容範囲外であると判断することと、
前記判断することに基づいて前記第1スパンをプロキシスパンとみなすこととをさらに含み、前記第1スパンをプロキシスパンとみなすことは、前記トレーサーに、前記第1操作セットの実行に基づいて情報のログを取らせないようにする、請求項15に記載の非一時的なコンピュータ読み取り可能な媒体。
【請求項17】
前記動作は、
更新された前記第1スパンの優先順位にアクセスすることと、
更新された前記優先順位が前記優先順位許容範囲内であると判断したことに応答して、前記トレーサーをインスタンス化し、前記第1スパンをスパンと新たにみなすこととをさらに含む、請求項16に記載の非一時的なコンピュータ読み取り可能な媒体。
【請求項18】
前記動作は、
前記リクエストのトリガに基づいて前記リクエストを外部サーバーに送ることと、
前記送ることに基づいて前記外部サーバー上で前記第2スパンの開始のログを自動的に取ることと、
前記外部サーバー上で前記第2操作セットを実行することと、
前記外部サーバー上で前記第2スパンの終了のログを自動的に取ることと、
前記第2スパンの終了の指示を前記外部サーバーから受信することとをさらに含む、請求項15に記載の非一時的なコンピュータ読み取り可能な媒体。
【請求項19】
前記動作は、
前記ウェブアプリケーションの開始に基づいて前記トレーサーおよび前記トレーサーをインスタンス化することと、
前記イベントのトリガに基づいて前記第1スパンの開始のログを自動的に取ることと、
前記リクエストのトリガに基づいて前記第2スパンの開始のログを自動的に取ることと、
前記第2操作セットの完了に基づいて前記第2スパンの終了のログを自動的に取ることと、
前記第1操作セットの完了に基づいて前記第1スパンの終了のログを自動的に取ることとをさらに含む、請求項15に記載の非一時的なコンピュータ読み取り可能な媒体。
【請求項20】
前記動作は、
前記第1スパンの優先順位にアクセスすることと、
前記第1スパンの優先順位および前記ウェブアプリケーションの開始に基づいて前記トレーサーをインスタンス化することと、
前記リクエストのトリガに基づいて前記第2スパンの開始のログを自動的に取ることと、
前記第2操作セットの完了に基づいて前記第2スパンの終了のログを自動的に取ることとをさらに含む、請求項15に記載の非一時的なコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
背景
ウェブベースのアプリケーションが進歩するにつれて、従来のトレーサーアプリケーションは、複数のサーバー、複数のプラットフォーム、または複数のスレッドをまたいで正確なテレメトリデータをキャプチャすることができなくなるであろう。開示する解決策は、テレメトリ機能の向上と、これらの不備を克服するアナリティクスとを容易にする。
【発明の概要】
【0002】
概要
ある態様では、ウェブアプリケーションを自動的にインストルメント化するための方法は、ウェブアプリケーションのコードから、ウェブアプリケーションがユーザーインタラクションによってトリガされるイベントを含むことを特定することを含む。方法は、イベントをトレーサーと対応付けることとをさらに含む。トレーサーは、イベントによって引き起こされる第1操作セットの実行に基づいてトレーシング情報のログを取り、第1スパンのパフォーマンスの第1測定値を取得するように構成される。第1スパンは、第1操作セットを含む。パフォーマンスの第1測定値は、(i)第1操作セットを実行するための処理サイクルの数および(ii)第1操作セットの実行時間のうち、1つ以上を含む。方法は、第1操作セットの実行がサーバーへのリクエストを行わせることをコードにおいて特定することをさらに含む。方法は、リクエストをトレーサーと対応付けることとを含む。トレーサーは、リクエストによって引き起こされる第2操作セットの実行に基づいてトレーシング情報のログを取り、第2スパンのパフォーマンスの第2測定値を取得するように構成される。第2スパンは、第2操作セットを含む。第2スパンは、第1スパンの子スパンである。パフォーマンスの第2測定値は、(i)第2操作セットを実行するための処理サイクルの数および(ii)第2操作セットの実行時間のうち、1つ以上を含む。
【0003】
ある態様では、方法は、第1スパンの優先順位を受信することと、優先順位が優先順位許容範囲外であると判断することと、判断することに基づいて第1スパンをプロキシスパンとみなすこととをさらに含む。第1スパンをプロキシスパンとみなすことは、トレーサーに、第1操作セットの実行に基づいて情報のログを取らせないようにする。
【0004】
ある態様では、方法は、更新された第1スパンの優先順位にアクセスすることと、更新された優先順位が優先順位許容範囲内であると判断したことに応答して、トレーサーをインスタンス化し、第1スパンをスパンと新たにみなすこととをさらに含む。
【0005】
ある態様では、方法は、ウェブアプリケーションの開始に基づいてトレーサーおよびトレーサーをインスタンス化することを含む。方法は、イベントのトリガに基づいて第1スパンの開始のログを自動的に取ることをさらに含む。方法は、リクエストのトリガに基づいて第2スパンの開始のログを自動的に取ることをさらに含む。方法は、第2操作セットの完了に基づいて第2スパンの終了のログを自動的に取ることをさらに含む。方法は、第1操作セットの完了に基づいて第1スパンの終了のログを自動的に取ることをさらに含む。
【0006】
ある態様では、方法は、リクエストのトリガに基づいてリクエストを外部サーバーに送ることをさらに含む。方法は、送ることに基づいて外部サーバー上で第2スパンの開始のログを自動的に取ることをさらに含む。外部サーバー上で第2操作セットを実行することをさらに含む。方法は、外部サーバー上で第2スパンの終了のログを自動的に取ることをさらに含む。方法は、第2スパンの終了の指示を外部サーバーから受信することをさらに含む。
【0007】
ある態様では、方法は、第1スパンの優先順位にアクセスすることを含む。方法は、第1スパンの優先順位およびウェブアプリケーションの開始に基づいてトレーサーをインスタンス化することをさらに含む。方法は、リクエストのトリガに基づいて第2スパンの開始のログを自動的に取ることをさらに含む。方法は、第2操作セットの完了に基づいて第2スパンの終了のログを自動的に取ることとをさらに含む。
【0008】
ある態様では、リクエストは、サーバーに第2操作セットを実行させる。方法は、第2スパンの終了のログを自動的に取ることは、第2スパンに関する情報を含むヘッダをサーバーから受信することをさらに含む。
【0009】
上記方法は、有形のコンピュータ読み取り可能な媒体として実装でき、および/またはコンピュータプロセッサおよび取り付けられたメモリ内で動作可能である。
【図面の簡単な説明】
【0010】
【
図1】本開示の態様に係る、テレメトリを有するエンタープライズアプリケーションを自動的にインストルメント化するためのシステムの例を示す。
【
図2】本開示の態様に係る、テレメトリデータを集めるために用いられるプロセスの例を示す。
【
図3】本開示の特定の態様に係る、スパンコンテキストを生成するための、インストルメント化されたアプリケーションの例を示す。
【
図4】本開示の態様に係る、スパン階層の例を示す。
【
図5】本開示の特定の態様に係る、インストルメント化されたアプリケーション内にある、スパンコンテキストとログとを生成するために使われるトレーサー構成要素を示す。
【
図6】本開示の特定の態様に係る、スパンのインストルメンテーションによって引き起こされるバックプレッシャーを管理するために用いられるトレーシングアーキテクチャの例を示す。
【
図7】本開示の特定の態様に係る、優先順位付けされたスパン階層の例を示す。
【
図8】本開示の特定の態様に係る、スパンを優先順位付けするためのプロセスの例を示す。
【
図9】本開示の特定の態様に係る、traceworkerクライアントを有する分散トレーシング環境の例を示す。
【
図10】本開示の特定の態様に係る、スレッドをインストルメント化するためのプロセスの例を示す。
【
図11】本開示の特定の態様に係る、分散ソフトウェアアプリケーション全体にトレーシングを伝播するプロセスの例である。
【
図12】本開示の特定の態様に係る、分散システムにおけるサービス全体にスパンコンテキストを伝播する例を示す。
【
図13】本開示の特定の態様に係る、ヘッダの例を示す。
【
図14】態様のうち1つを実装するための分散システムの簡略図を示す。
【
図15】ある態様に係る、ある態様のシステムの構成要素が提供するサービスがクラウドサービスとして提供され得るシステム環境の構成要素の簡略ブロック図である。
【
図16】本発明の様々な態様が実装され得る例示的なコンピューティングサブシステムを示す。
【発明を実施するための形態】
【0011】
詳細な説明
本明細書に開示する技術は、エンタープライズアプリケーションのテレメトリ機能を自動的に提供するための解決策を提供する。テレメトリは、ソフトウェアのランタイム実行についてのパフォーマンスデータの報告を集めることを指す。このようなデータとして、ウェブページまたはアプリケーション上の特定の機能がどれくらい頻繁に利用されるか、起動時間または実行時間の測定値、処理がクラッシュしたかどうか、失敗情報、およびユーザーエクスペリエンスなどが挙げられる。テレメトリデータは、アプリケーション単位で集めることができ、あるいは、ウェブページの各処理が完了するまでどれくらいの時間がかかったかについてのランタイムメトリクスなど、より細かいレベルで集めることができる。開示する解決策は、API(アプリケーションプログラマーインタフェース)機能を用いて、テレメトリデータへのアクセスを可能にする。
【0012】
述べたように、既存の解決策には不備がある。たとえば、既存の解決策によっては、トレーシングライブラリを手作業でインポートまたはリンクした後、インストルメンテーションデータが所望されるコードの一部で1つ以上の関数呼び出しを追加する必要がある場合がある。これに加えて、このような解決策では、開発者が1つ以上のベンダーからインストルメンテーションライブラリを選択し、これらのライブラリを構成する必要がある。これとは対照的に、開示する解決策では、コードにあるイベントおよびサーバーへの呼び出しを検出し、これらのイベントを自動的にインストルメント化することによってウェブベースのアプリケーションを自動的にインストルメント化する。
【0013】
ある態様では、開示のシステムは、ソフトウェア開発者による入力を必要とせずに、エンタープライズアプリケーションを自動的にインストルメント化できる。本開示の特定の態様は、ソフトウェア開発者が設計したカスタムアプリケーションに自動的に組み込み可能なランタイムテレメトリフレームワークを提供するソフトウェア開発ツールに関する。たとえば、ソフトウェア開発ツールは、エンタープライズアプリケーションにトレーシング機能を自動的に差し込むことができる。トレーシング機能は、ユーザーインタラクション、ページナビゲーション、およびサーバー呼び出しなどの操作を自動的に追跡し、バックエンドサービスを実装する分散サーバーシステム(異機種間またはその他)を含む、ウェブページ上のユーザーのクリックからのエンドツーエンドトレーシングを可能にするように関連する論理トランザクションを1つにまとめる。
【0014】
別の態様では、開示のシステムは、1つ以上のスパン、およびこれらのスパンに関する1つ以上のメッセージの優先順位付けを可能にし、大量のインストルメンテーションデータによって引き起こされることもあるネットワーク輻輳を最小限に抑える。たとえば、ランタイムまたはその前に、特定のスパンに低い優先順位を付けることができ、これにより、インストルメンテーションは、開発者にとって大きな関心であるであろう子スパンに関するデータを引き続き集めつつ、この特定のスパンのパフォーマンスの測定を行わせないようにする。
【0015】
さらに別の態様では、開示する解決策は、エンタープライズアプリケーションの一部として実行中の1つ以上のプロセスについての詳細なインストルメンテーションを、これらのプロセスが複数のスレッドを含むか否かに関係なくウェブベースのアプリケーションの開発者が取得できるようにすることを含む。アプリケーションランタイム実行時、テレメトリフレームワークは、様々なプロセス、様々なスレッド、および様々なサーバーをまたいだインストルメンテーションを容易にする。こうすることで、インストルメンテーションコンテキストはスレッドをまたいで維持され、より細かいインストルメンテーションデータが得られるようになる。
【0016】
別の態様では、開示のシステムは、セキュリティ要件またはその他の理由でトレーシングヘッダが示すインストルメンテーションを自動的に許可できない分散サーバーを含む、分散システム全体でのテレメトリを容易にする。より具体的には、特定の態様は、プロトコルサポートを自動的に発見し、それぞれ異なる呼び出しへのトレーシング情報の差し込みをプロトコルサポートに基づいて調整できる。そのため、開示のシステムは、リモートサーバー、特に、クロスドメインリクエストがアクセスするリモートサーバー上で動作するプロセスについての詳細なテレメトリデータを取得できるようになる。このようなサーバーは、異なるドメインにある異なるエンティティによって操作できる。
【0017】
図1は、本開示の態様に係る、テレメトリを有するエンタープライズアプリケーションを自動的にインストルメント化するためのシステムの例を示す。
図1は、開発者のコンピューティングデバイス110、エンドユーザーのコンピューティングデバイス130、ネットワーク150、およびサーバー140a~140nを示す。
図1に示す例では、開発者のコンピューティングデバイス110は、インストルメント化されたアプリケーション120を構築してサーバー140aに展開する。サーバー140aは、次に、エンドユーザーのコンピューティングデバイス140にアプリケーションを供給する。インストルメント化されたアプリケーションがテレメトリデータを取得するために用いるプロセスの例を
図2に示す。インストルメント化されたアプリケーションの例を
図3に示す。開発者のコンピューティングデバイス110およびエンドユーザーのコンピューティングデバイス140用に適したコンピューティングデバイスとして、クライアントコンピューティングデバイス1402、1404、1406、および1408で示したコンピューティングデバイスなどを挙げることができ、適したサーバーとして、
図14に示すサーバー1412などが挙げられる。
【0018】
インストルメント化されたアプリケーション120の実行中またはインストルメント化されたアプリケーション120と関連して、エンドユーザーのコンピューティングデバイス140は、1つ以上のサーバー140b~140nと接続して各種リソース(たとえば、画像、スクリプなど)を取得するおよび/またはインストルメンテーション機能を実行してもよい。インストルメント化されたアプリケーション120の実行中または実行後、テレメトリデータ122は、解析のために開発者のコンピューティングデバイス110に返される。
【0019】
開発者のコンピューティングデバイス110は、開発者のIDE(統合開発環境)112、バックエンドデベロッパーツール114、コンソール116、およびテレメトリデータ122のうち、1つ以上を含む。開発者のIDE112は、コンパイル、リンク、デバッグ、トレーシング、またはその他の機能を提供するグラフィカル開発ツールである。バックエンドデベロッパーツール114は、1つ以上のコンパイラ、1つ以上のリンカ、1つ以上のデバッガ、1つ以上のシミュレータなどを含み得る。インストルメント化されたアプリケーション120を実行することによって取得したテレメトリデータ122を見るために、コンソール116が使われる。図示したように、テレメトリデータ122は、特定のウェブページが「サーバー1」上で実行され0.5秒かかったこと、画像読み込みが「サーバー2」上で実行され0・4秒かかったこと、およびボタンクリックが引き起こされ処理に0.2秒かかったことを示すデータを含む。
【0020】
サーバー140a~140nを、同じ機能、同様の機能、または異なる機能を実行するように構成できる。たとえば、サーバー140a~140nは、1つの分散サーバーシステムとして動作できる。別の例では、サーバー140a~140nは、ウェブサーバー、ファイルサーバー、またはウェブページからの1つ以上のコンポーネントを供給できる、または、データベースのクエリを受信してその結果を提供できるその他のサーバーであり得る。場合によっては、サーバー140a~140nは、それぞれ異なるエンティティ(会社または個人)の管理下に置くことができる、および/またはそれぞれ異なる場所に位置することができる。したがって、本明細書において説明する特定の態様は、スパンコンテキスト伝播を介して、異なるサーバーをまたいでテレメトリデータを取得することに関する。開発者のコンピューティングデバイス110、エンドユーザーのコンピューティングデバイス140、ネットワーク150、およびサーバー140a~140nは、ネットワーク150など1つ以上の接続をまたいで接続できる。ネットワーク150として、有線ネットワーク、ワイヤレスネットワーク、およびインターネットなどが挙げられる。
【0021】
エンドユーザーのコンピューティングデバイス130は、ウェブアプリケーション134(たとえば、ウェブページ)と、ウェブブラウザ132と、トレーサーアプリケーション136とを備える。ウェブアプリケーション134は、ウェブブラウザ132によって描画できる。ウェブアプリケーション134の一部であるトレーサーアプリケーション136は、インストルメンテーション機能を提供する。たとえば、トレーサーアプリケーション136がテレメトリデータを収集する。テレメトリデータは、定期的または要求に応じて外部装置にエクスポートできる。テレメトリデータとして、特定の機能がどれくらい頻繁に利用されるのか、起動時間または実行時間の測定値、処理がクラッシュしたかどうか、失敗情報、およびユーザータイプなどが挙げられる。
【0022】
ある例では、ソフトウェア開発者は、開発者のIDE112およびバックエンドデベロッパーツール114を用いて、カスタムウェブベースアプリケーションを構築する。特に、開発者のコンピューティングデバイス110上で実行中のソフトウェアツールは、テレメトリ機能を提供するコード(たとえば、トレーサーコード)を挿入して、インストルメント化されたアプリケーション120を生成する。場合によっては、開発者のコンピューティングデバイス110からエンドユーザーのコンピューティングデバイス140にインストルメント化されたアプリケーション120を直接送ることができる。その他の場合、インストルメント化されたアプリケーション120は、サーバー140a~140nに直接送られる。サーバー140a~140nでは、インストルメント化されたアプリケーション120がホストされ、後にエンドユーザーのコンピューティングデバイス140によってダウンロードされる。
【0023】
エンドユーザーのコンピューティングデバイス140は、たとえばネットワーク150をまたいでサーバー140aからアプリケーションにアクセスする。エンドユーザーのコンピューティングデバイス140を操作しているユーザーは、アプリケーションとやり取りし、これにより、エンドユーザーのコンピューティングデバイス140は、サーバー140a~140nのうち1つ以上にアクセスすることになる。当該1つ以上のサーバーは、次に、アプリケーションのすべてまたは一部をエンドユーザーのコンピューティングデバイス140に供給する。エンドユーザーのコンピューティングデバイス140は、テレメトリ機能を実行する。テレメトリ機能は、アプリケーションとのユーザーインタラクションによって直接引き起こされた操作(たとえば、クリック、再読み込み)または間接的に引き起こされた操作(たとえば、ページからリンクする画像が読み込まれるなど)をインストルメント化させる。こうすることで、これまでの解決策よりも詳細なテレメトリ情報が利用可能になる。テレメトリデータ122は、1つ以上のサーバー140a~140nによって集められる。
【0024】
述べたように、特定の態様は、エンタープライズアプリケーションからテレメトリ情報を取得することに関する。テレメトリを容易にするために、エンタープライズアプリケーション内で1つ以上のスパンが作成される。本明細書において使用するとき、スパンとは、1つの作業単位を表す命名された操作の集合を指す。特定のスパンはプロセスを指し得る。スパンは、スパンコンテキストを有する。本明細書において使用するとき、スパンコンテキストは、トレース識別子と、スパン識別子とを含み得る。したがって、第1プロセスは、第1スパンを有し得、第2プロセスは、第2スパンを有し得る。第1プロセスによって第2プロセスが呼び出された場合、第1スパンが親となり、第2の子となるように、第1スパンと第2スパンは親子関係によって関係付けられる。それぞれ異なるプロセスのスパンを追跡することにより、より詳細なインストルメンテーションが容易になる。
【0025】
特定の図面およびそれに関連する説明は、特定の態様についてさらに説明する。たとえば、
図4~
図5は、スパンインストルメンテーションのそれぞれ異なる態様に関する図である。
図6~
図8は、インストルメンテーション中に様々なスパンを優先順位付けすることに関する図である。
図9および
図10は、スレッドをインストルメント化することに関する図である。
図11~
図13は、異なるデバイスをまたいでスパンコンテキストを伝播することに関する図である。
図14~
図16は、インストルメンテーション機能を実装できる様々なコンピューティングシステムを示す図である。
【0026】
ウェブベースのエンタープライズアプリケーションのインストルメンテーション
図2は、本開示の態様に係る、テレメトリデータを集めるために用いられるプロセス200の例を示す。プロセス200は、開発者のコンピューティングデバイス110およびサーバー140a~140nのうち、1つ以上によって実行できる。
【0027】
ブロック202では、プロセス200は、クライアントデバイス上のウェブブラウザにウェブページアプリケーションを提供する。たとえば、サーバー140aは、ウェブブラウザ132にウェブアプリケーション134を供給する。ウェブアプリケーション134は、インストルメンテーションを提供するトレーサーアプリケーション136を含む。ウェブアプリケーション134は、プロセス200よりも前にトレーサーアプリケーション136でインストルメント化されている。
【0028】
ブロック204では、プロセス200は、ウェブページアプリケーションの開始を検出することを含む。ウェブブラウザ132は、ウェブアプリケーション134およびトレーサーアプリケーション136の実行を開始する。サーバー140aは、ウェブブラウザ132が1つ以上のリソースを要求したと判断することによって実行の開始を検出できる。
【0029】
ブロック206では、プロセス200は、ウェブページアプリケーションの開始に基づいてトレーサーアプリケーションをインスタンス化することを含む。トレーサーアプリケーション136は、ウェブアプリケーション134のトレーシングデータのログを取るように構成される。
【0030】
ブロック208では、プロセス200は、ウェブページアプリケーションとのインタラクションによって開始されたイベントを検出することを含む。ウェブアプリケーション134は実行を継続し、イベントがトリガされる。イベントとして、ユーザーインタフェースインタラクション、クリック、ナビゲーション、マウスオーバー、更新などが挙げられる。これに加えて、イベントは、REST(Representational State Transfer)であり得る。
【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】
以下の例は、Javascriptを用いたクライアント側のスパンコンテキストを挿入するためのコードを示す。
【0037】
【0038】
図3は、本開示の特定の態様に係る、スパンコンテキストを生成するための、インストルメント化されたアプリケーションの例を示す。インストルメント化されたアプリケーションは、開発者のIDE112などのソフトウェア開発ツールによって構築およびインストルメント化され得、コンピューティングデバイス上で実行中のブラウザによって実行され得る。
図3は、ウェブアプリケーション302と、サーバー340と、クエリ350と、レスポンス352とを含むウェブアプリケーション環境300を示す。
図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つ以上の出現回数をトリガする。テレメトリランタイム320は、次に、イベントのログを取っている間に、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は、サーバー340のRESTサービスエンドポイント332にクエリ350を送る。クエリ350は、差し込みスパンコンテキストを含み得る。次に、サーバー340は、追加のHTTPヘッダを含み得るレスポンス352を返す。その後、ウェブアプリケーション302は、このレスポンスを用いて、コンポーネントイベント(複数可)が引き起こしたアクションを完了する。
【0044】
ウェブページおよびページナビゲーションのフローが第1のページから第2のページへの情報の伝送を管理している。ブラウザにおいて動作中の各アプリケーションと同様に、各ウェブページには予め定められたライフサイクルがある。ページに入るまたはページから出るなどの各ライフサイクルイベントは、アクションチェーンをトリガできる。モバイルアプリケーションまたはウェブアプリケーションに入るすべてのデータは、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】
一般に、分散トレーシングは、分散トレーシングアーキテクチャ内でTrace-Client APIを用いて実装され得る。Trace-Client APIは、1つのアプリケーション内の複数の操作まわりのスパンを作成するために使われるトレーサーから構成される。スパンは、子スパンを有することができる。子スパンは、それぞれの親スパンよりも粒度が小さい操作を示す。そして、親スパンは、最初の子スパンよりも粒度が小さい操作を示す子を有することができる。1つの親から生じるスパンの集合は、トレースとみなされ得る。これらのスパンは、スパンが測定する操作についてのメタデータを、識別情報とともに含んでいる。アウトプロセス呼び出しを行う操作(たとえば、クライアントアプリケーションがRESTサービスに呼び出しを行う)を有するアプリケーションの場合、スパンコンテキストを(たとえば、特定のHTTPヘッダの形式の)送信リクエストとともに伝播できる。受信側のアプリケーションまたはサーバーは、スパンコンテキストを抽出し、それを用いてクライアント上で親スパンの子スパンを作成できる。Trace-Client APIは、スパン情報をログメッセージ(スパンの開始と終了のそれぞれに1つずつ)の形式で様々なバックエンドサーバーに出力する機能を有する。
【0049】
アプリケーションスパンの例は、簡単なアプリケーションフローである。たとえば、ユーザーがウェブページに移動してボタンをクリックする。このボタンクリックは、イベントをトリガし、イベントは、アプリケーションにイベントハンドラを呼び出しさせる。イベントハンドラは、RESTサービスによって処理されるREST(define)リクエストを行う。サービスは、アプリケーションのユーザーインタフェースを更新させるレスポンスを返す。この例は
図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は、サーバー処理リクエストと、UI更新422とを引き起こす。サーバーがリクエストを処理するまでUIは更新されないので、(サーバー処理リクエストに対応する)スパンD440は、(UIの更新に対応する)スパンF442よりも前に開始して完了する。そのため、スパンD440は、サーバーのリクエストの処理を表す。
【0053】
見て分かる通り、スパンD440はスパンC436の間に生じ、スパンF442はスパンE438の間に生じる。スパンE438は、ブラウザから行われたRESTリクエストに対応するサーバーからのレスポンスのブラウザ処理を表す。スパンF442は、サーバーからのレスポンスの処理に基づいてブラウザがユーザーインタフェースを更新することを表す。スパンC436およびE438は、スパンBの子であるが、順次動作する。スパンD440およびF442は、それぞれスパンC436およびE438の子である。
【0054】
図4で説明したようなスパンコンテキストは、ソフトウェア開発ツール(たとえば、開発者のIDE112)によってカスタムエンタープライズアプリケーションに追加されるインストルメンテーションライブラリによって管理される。
【0055】
図5は、本開示の特定の態様に係る、インストルメント化されたアプリケーション内にある、スパンコンテキストとログとを生成するために用いられるトレーサー構成要素を示す。
図5に示す例では、ウェブアプリケーション522を実行するエンドユーザーのコンピューティングデバイス520は、様々なコマンドおよび/またはAPI呼び出しによってサーバー560と通信する。ウェブアプリケーション522は、開発者のIDE112によって開発でき、顧客が開発したソフトウェアでもあり得る。インストルメンテーションをサポートするためのコードが開発者のIDE112によって自動的に追加される。
【0056】
エンドユーザーのコンピューティングデバイス520は、ウェブアプリケーション522(または、その他のコンシューミングクライアント)、トレースモジュール524、トレーサーインタフェース526、スパンインタフェース528、トレーサー530、スパン532、スパンログライブラリ534(すなわち、Bunyanロガー)、スパンスタック536、ブラウザコンソール538、圧縮層544、トレーサーサーバーストリーム546、送信者タスク548、メッセージキュー542、およびトレーサーコンソールストリーム552など、1つ以上のモジュールを備える。次に、トレーサー530は、ウェブアプリケーションに対してインストルメンテーションを実行し、1つ以上のスパン532を作成し、スパンスタック536にアクティブスパンを追加するよう動作する。サーバー560は、トレースコレクタサーブレット562など、1つ以上のモジュールを備える。
【0057】
続いて、ウェブアプリケーション522は、ユーザーからインタラクション(たとえば、ユーザークリック)を受けるまたは検出する。ウェブアプリケーション522は、トレースモジュール524および/またはトレーサーインタフェース526とやり取りして、1つ以上のトレーサー530を開始する。次に、スパンログライブラリ534は、スパンインタフェース528を介して、イベントタイプ、イベントの名称、サーバーリクエストのURL、戻り値のステータスコード、エラー、警告などの情報およびメタデータのログを取る。
【0058】
様々なAPI呼び出しが利用可能である。API呼び出しであるinitTracer()は、グローバルトレーサーオブジェクトを初期化して返す。API呼び出しであるinitTracerは、1つのアプリケーションコンテキストにつき一度呼び出され、TracerOptionsオブジェクトを返す。API呼び出しであるactiveTracerは、グローバルトレーサーオブジェクトを返す。たとえば、API呼び出しであるinject()は、(たとえば、サーバーへの)リクエストにスパンを差し込ませる。処理を戻す際に、API呼び出しであるextract()を用いてスパンを抽出できる。
【0059】
複数のスパンを生成できる。たとえば、トレーサー530は、ウェブアプリケーション522のイベントまたはスレッドを表すためのスパンを作成できる。トレーサー530は、トレーサーがスパンを作成した特定の操作に基づいて、適宜(たとえば、
図4で説明するように)、子スパンを作成できる。本明細書においてさらに説明するが、インストルメント化されたアプリケーションは、アプリケーションにあるイベントをトリガすることによって生じたリクエストの要求に応えるそれぞれ異なるスレッドおよび/または異なるサーバーから情報を取得できる。
【0060】
ウェブアプリケーション522は、トレーサーインタフェース526を用いて、トレーサーを制御する、またはスパンの挿入を受け得る。また、トレーサーは、スパンスタック536への書き込みまたは読み出しを監視し得る。スパンスタック536では、トレーサーは、1つ以上のスパンをキャッシュもしくはアクセスして親スパンを監視する、またはスパン532など新しく作成されたスパン内にスパンコンテキストを挿入できる。ウェブアプリケーション522は、スパンインタフェース528を用いて、スパンログライブラリ534にスパン関連情報を伝送し得る。圧縮層544は、スパン関連情報がトレースコレクタサーブレット562に送られる前に、最小限に圧縮できる。圧縮層544が利用する圧縮技術として、zipおよびgzipが挙げられる。一例において、トレーサーコンソールストリーム552は、エンドユーザーのコンピューティングデバイス140上に提示されているブラウザコンソールにスパンログのストリームを出力し得る。次に、サーバー560は、トレースコレクタサーブレット562を実行し得る。トレースコレクタサーブレット562は、スパンログのストリーム、およびエンドユーザーのコンピューティングデバイス520上の送信者タスク548からトレースを収集する。
【0061】
スパンの優先順位付け
本開示の態様は、ウェブアプリケーションをインストルメント化することに関する。場合によっては、イベントの数が多いこと、ならびに結果として得られるスパンおよび/または呼び出しが子スパンをもたらすことが原因で、スパンの数を管理したり優先順位付けしたりすることが難しくなり得る。このような場合、特定の態様は、スパンログのための容量を低減するおよびテレメトリデータを合理化する目的でスパンのペイロードを低減するための機能を提供する。
【0062】
デフォルトモードでは、インストルメンテーションは、すべてのスパンをキャプチャし、これらすべてのスパンに基づいてブラウザコンソールおよび任意のサービスにメッセージを発信できる。しかしながら、場合によっては、管理できない数のスパンメッセージが存在している場合があり、関連する対象のテレメトリデータの全容を分かり難くしてしまう。そのため、スパンを1つ以上の基準に基づいてフィルタリングすることができる。
【0063】
さらには、場合によっては、対象のスパンは、子スパンであり、対応する親スパンよりも詳細な情報を提供する。しかし、親スパンの情報は、スパンデータの輻輳に寄与し得る。したがって、特定の態様は、プロキシスパンの概念を採用し、対象の1つ以上の具体的な子スパンに関するインストルメンテーションの詳細のみを集めつつ、スパンツリーを維持することを可能にする。
【0064】
図6は、本開示の特定の態様に係る、スパンのインストルメンテーションによって引き起こされるバックプレッシャーを管理するために用いられるトレーシングアーキテクチャの例を示す。
図6は、アプリケーションランタイム602、トレーサー実装604、スパンコントローラ606、ブラウザスパンログライブラリ634、コンソールストリーム610、CLS(クライアントログサービス)ストリーム612、およびクライアントログサービス614のうち、1つ以上を備えるトレーシングアーキテクチャ600を示す。図示した例では、スパンコントローラ606は、1つ以上のパラメータに基づいてスパンを管理および優先順位付けする。アプリケーションランタイム602は、テレメトリランタイム320と類似していてもよく、
図3で説明したテレメトリランタイム320と同様の操作を行ってもよい。
【0065】
第1の例では、トレーサー実装604がアプリケーションランタイム602のスパンを開始する。トレーサー実装604は、スパンを実行しながら、同時に、ブラウザスパンログライブラリ634にスパン監視データを通信し得る。ブラウザスパンログライブラリ634は、コンソールストリーム610にスパンログデータを出力する。コンソールストリーム610は、エンドユーザーデバイスのブラウザ内に提示され得る。ブラウザスパンログライブラリ634は、CLSストリーム612にもスパンログデータを出力できる。CLSストリーム612は、クライアントログサービス614に伝送されたログデータのストリームであってもよい。クライアントログサービス614は、さらなる処理のためのログデータを格納し得る。
【0066】
別の例では、トレーサー実装604は、スパンコントローラ606が作成したスパンを受信する。また、トレーサー実装604は、スパンが生成されたイベントが完了するとスパンを返す(たとえば、スパンを終了する)ことができる。また、トレーサー実装604は、スパンを終了するためのコマンドをアプリケーションランタイム602から受信してもよい。スパンコントローラ606は、スパンの優先順位付けを実施できる。各スパンは、優先順位レベルを有し得る。たとえば、スパンコントローラ606は、どのスパン(複数可)を優先するかを示す1つ以上のパラメータを受信できる。ある例では、デフォルトのスパン優先順位が設定される。所与のスパンの優先順位がデフォルトの優先順位よりも低い場合、このスパンおよび関連する子スパンのデータは返されない。
【0067】
さらに別の例では、たとえば、プロセス200で説明したように、トレーシングアーキテクチャ600がスパンの初期セットの生成を可能にする。スパンの初期セットにある各スパンには、対応する優先順位を与えることができる。続いて、ランタイムでは、プログラマ入力またはユーザー入力に基づいて、スパンの初期セットにあるスパンを測定することも測定しないこともでき、剪定(prune)してまたはサブセットにすることもできる。たとえば、しきい値優先順位を設定できる。ランタイムでは、しきい値優先順位よりも高い優先順位のスパンは、いずれもプロキシスパンに変換され、測定されない。
【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に設定される。スパンプロキシB734は、元のスパンBから変換されている。なぜならば、スパンBの優先順位がデフォルトの優先順位よりも大きい2であることによって示されているように、スパン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)は、送られたスパンおよび/またはログが多すぎることを示すHTTPエラーコード(たとえば、「429 Too Many Requests」または「413 Payload Too Large」)で応答できる。そのとき、システムは、後続のリクエストではより少ないログが送られるように優先順位しきい値を動的に変更することによって応答できる。
【0078】
下記の表は、イベントごとのスパンの優先順位の例を示す。
【0079】
【0080】
図8は、本開示の特定の態様に係る、スパンを優先順位付けするためのプロセス800の例を示す。開発者のコンピューティングデバイス110およびサーバー140a~140nのうち、1つ以上がプロセス800を実行できる。
【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】
スレッドのインストルメント化
従来、ウェブベースのアプリケーションは、ユーザーインタフェースの操作にメインブラウザスレッドを利用できる。たとえば、非同期Javascriptプログラミングに対する改良により、メインブラウザスレッドは、応答性のあるアプリケーションの作成を実行可能にする方法になった。しかしながら、長期間動作している特定のバックグラウンドプロセスの場合、アプリケーション開発者は、アプリケーションロジックを実行するための実際のネイティブスレッドを作成することを可能にするWeb Worker APIを利用することを選択するであろう。
【0089】
しかしながら、標準分散トレーシングアプリケーションでは、別個のスレッド(Worker APIを介してなど)は、プロセス外であるまたは少なくともメインスレッド上で実行中のトレーサーとはスコープが異なると考えられる。その結果、ワーカースレッド上で動作するために、トレーサーは、コード内で構成される必要がある。
【0090】
これとは対照的に、特定の態様は、スレッドを自動的にインストルメント化できる。たとえば、Traceworkerクラスは、標準Workerクラスのサブクラスにトレーサーをカプセル化することによって、トレーサーをアプリケーションコードで構成する作業を抽象化する。Traceworkerクラスは、ワーカースレッドを自動的に作成し、トレーサーを構成し、その後アプリケーションコードを読み込むアルゴリズムを使用する。その後、アプリケーションコードのテレメトリは自動的に有効になる。その後、アプリケーションがワーカースレッドの作成を試行する度に標準Workerの機能をラッピングするTraceworkerになるよう、ネイティブWeb Worker APIをオーバーライドするようにTraceworkerをオプションで構成できる。
【0091】
この手法にとっての利点は、開発者およびユーザーにとって透明性のある操作であること、そして、複数のスレッドをまたいだスパン階層を維持しつつ、スレッド外のコードのテレメトリを有効にできることである。これに加えて、スレッドごとの構成データがメインスレッドの構成を自動的に受け継ぐので、重複する構成データには要件がない。
【0092】
図9は、本開示の特定の態様に係る、traceworkerクライアントを有する分散トレーシング環境の例を示す。
図9は、メインブラウザスレッド910と、ワーカースレッド920とを示す。
図9に示す例では、メインブラウザスレッド910は、ワーカースレッド920を呼び出す。ワーカースレッド920は、メインブラウザスレッド910にインストルメンテーションデータを返す。
【0093】
メインブラウザスレッド910は、メインアプリケーション912と、トレーサー914と、Traceworkerクライアント917とを含む。ワーカースレッド920は、Traceworkerシム(shim)コード922と、アプリケーションワーカースクリプト924と、トレーサー925とを含む。ワーカースレッド920は、Traceworkerクライアント917を用いて作成されるオブジェクトであり、Javascriptで書くことができる。
【0094】
ワーカースレッド920は、ブラウザウィンドウなどメインブラウザ操作とは異なる状況で実行できる。こうすることで、たとえば、ワーカースレッド920によって実行されるタスクが時間のかかるタスクであったり複雑なタスクであったりする場合、より応答性のあるユーザーインタフェースを維持できる。
【0095】
Traceworkerクライアント917は、traceworkerシムコード922を用いてワーカースレッド920を構成するなどして、ワーカースレッド920などのスレッドを管理できる。traceworkerシムコード922を追加することにより、スパンコンテキストおよびトレースコンテキストの取得が容易になる。ラッパーのコンストラクタは、スパンでラッピングされ、スパンは、該当する場合、現在のスパンのコンテキストの子になる。ワーカースレッドは、作成時に動作する、通信ポートを有するアプリケーションスクリプトを用いて初期化される。
【0096】
Traceworkerクライアント917は、次のアクションを実行するシムコード922を生成して実行する。(1)メッセージハンドラを一時的にインストールしてメインスレッドから来るすべての受信メッセージを処理する、(2)すべての分散トレーシング依存関係を読み込む、(3)成功(または失敗)を示すメッセージで返答する。
【0097】
成功した場合、Traceworkerクライアント917は、アクティブスパンコンテキストおよびトレーサー構成を取得し、シムに送る。シムは、トレーサー構成を受信し、トレーサーを初期化し、受信したスパンコンテキストの子スパンを作成する。シムは、その後、アプリケーションワーカーコードを差し込み、そのメッセージハンドラを除去する。次に、アプリケーションおよびワーカースレッドが様々な操作を実行する。
【0098】
作成されると、ワーカースレッド920は、トレーサーを作成し、ワーカースレッド920からトレーサー925に1つ以上の構成パラメータを複製し得る。また、ワーカースレッド920は、メインアプリケーション912が作成したスパンに対応付けられたスパンコンテキストを抽出する。ワーカースレッド920は、スパンコンテキストを含むメインアプリケーション912が作成したスパンの子スパンを作成し得る。ワーカースレッド920によるアプリケーションワーカースクリプト924の実行中、子スパンが作成され、さらなる処理のためにトレーサー925によってキャプチャされる。ワーカースレッド920は、アプリケーションワーカースクリプト924が正常に完了したとTraceworkerクライアント917に伝え得る。続いて、Traceworkerクライアント917は、ワーカースレッドが成功したとメインアプリケーション912に伝え得る。メインアプリケーション912は、スパンが完了したことをトレーサー914に伝え、スパンを終了し得る。
【0099】
一例において、ワーカースレッドとメインアプリケーションとの間で、両側がメッセージを送るメッセージのシステムを介してデータが送られ得る。メッセージは、postMessage()などのメソッドを用いて送られ得、受信メッセージへの応答は、メッセージイベントのデータプロパティ内にメッセージが含まれるよう、オンメッセージ(on message)イベントハンドラを用いて伝送され得る。この特定の構成では、メッセージデータは、メインアプリケーションとワーカースレッドとの間で共有されるのではなく、複製される。ワーカースレッドは、ワーカーが親ページと同じオリジン内でホストされる補助ワーカー(たとえば、補助スレッド)を生成し得る。
【0100】
下記のサンプルコードは、開発者がどのようにトレースワーカースレッドを利用し得るかを示す。
【0101】
【0102】
図10は、本開示の特定の態様に係る、スレッドをインストルメント化するためのプロセス1000の例を示す。開発者のコンピューティングデバイス110およびサーバー140a~140nのうち、1つ以上がプロセス1000を実行できる。
【0103】
ブロック1002では、プロセス1000は、クライアントデバイス上のウェブブラウザにウェブページアプリケーションを提供することを含む。たとえば、サーバー140aは、エンドユーザーのコンピューティングデバイス130上のウェブブラウザ132にウェブアプリケーション134を提供する。
【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(Hypertext Transfer Protocol)に含めることができる。例示の目的で、プロセス1100を
図12と合わせて説明する。
【0110】
図12は、本開示の特定の態様に係る、分散システムにおけるサービス全体にスパンコンテキストを伝播する例を示す。サービスとして、サーバーへのREST呼び出しなどが挙げられる。たとえば、特定のウェブページを描画するには、各々が特定の目的を有する複数のREST呼び出しが必要とされ得る。第1のREST呼び出しがウェブブラウザにページを描画させ得、第2のREST呼び出しがページに表示されるサーバー(RESTエンドポイント)上に位置する画像を取得し得、第3のREST呼び出しが従業員の管理者の指名などの情報を取得するためのデータベースのクエリであり得る。また、REST呼び出しにより、1つ以上の子のREST呼び出しを実行させることができる。
【0111】
REST呼び出しは、オリジン間呼び出しであり得る。オリジン間呼び出しは、元サーバー(たとえば、ウェブページを提供するサーバー)ではないサーバーに情報を要求する。たとえば、元サーバーはoracle.com上にあり得、第2サーバーはgoogle.com上にあり得る。場合によっては、プロセス1100は、元サーバーからのウェブページが元サーバーのドメイン外にある外部サーバーに対するリクエストを要求すると判断した後に実行される。この判断は、CORS(オリジン間リソース共有)と互換性があり得る。
【0112】
図12は、サービス1210と、サービス1220とを含む。サービス1210は、ブラウザを実行でき、サービス1220は、RESTエンドポイントが特定したサーバー上で動作する。サービス1210は、親スパン1212と、子スパン1214と、子スパン1216とを含む。サービス1220は、子スパン1222を含む。これは、REST呼び出しの後である。ある例では、子スパン1214および1216は、REST呼び出しよりも前に発生する必要のあった処理を表し、子スパン1222のコンテキストは、ネットワークによってサーバーに送られる。次に、サーバーは、このようなリクエストを行えるのであれば、そのスパンコンテキストを別のサーバーに伝播し得る。各サーバーは、それぞれのトレースを収集し、適切な場所に送る。
【0113】
述べたように、スパンコンテキストは、達成しようとしている全体的な目的(たとえば、ページを読み込むこと)を示すルート(root)スパンまたはトレース識別子を含む。完全なスパンコンテキストは、通常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に進む。ブロック1108では、ヘッダを差し込む。
【0117】
ブロック1103では、プロセス1100は、リソースを求めるリクエストが、べき等性を有するかどうかを判断することを含む。べき等性とは、そのメソッドを用いた場合の、サーバーに対する、複数の同じリクエストの目的とする結果が1つのリクエストの結果と同じであることを意味する。したがって、サーバーに対するリクエストの目的とする結果がべき等性を有さない、すなわち、以前のリクエストとは同じではない場合、プロセス1100は、ブロック1104に進む。そうでない場合、リクエストがべき等性を有する場合、プロセス1100は、ブロック1115に進む。
【0118】
ブロック1104では、プロセス1100は、リクエストの宛先がサーバー拒否リストにある宛先であるかどうかを判断することを含む。たとえば、トレーサーアプリケーション136は、拒否リストを検索して、元サーバーからのリクエストにあるトレーシングヘッダを外部サーバーが禁止しているかどうかを判断する。サーバー拒否リストは、追加のヘッダ(たとえば、プロセス1100のブロック1112で特定されたリクエストによって作成されるようなヘッダ)を有するリクエストを拒否すると確認されたサーバーを含む。拒否サーバーリストは、有効である。なぜならば、REST呼び出しが失敗するか、単にテレメトリ情報を有していないかを選ぶことができるのであれば、単にテレメトリ情報を有していないほうが好ましいためである。
【0119】
サービスに対するリクエストが伝播ヘッダをサポートしない場合、このリクエストは拒否リストに追加される。これにより、このユーザーセッションに関するコンテキストを差し込む自動試行がこれ以上行われなくなり、ヘッダが差し込まれていないリクエストが実行される。ある態様では、拒否リストはローカルストレージにキャッシュされず、その結果、不完全な構成によって今後のリクエストがブロックされることがなくなる。宛先は、許可リストおよび拒否リストの両方に有る場合があるが、その場合、拒否リストが優先される。
【0120】
許可リストおよび拒否リストを連想配列として実装して、ルックアップ時間を改善する。これらのリストは、(パラメータを有さない)失敗リクエストのURLオリジンまたは個々のサービスによって指定される。これは、リクエストの構成によって判断され得る。マップの値は、NULLであり得るが、その後、実際の失敗、またはリストに追加された理由についてのその他のメタデータを含み得る。
【0121】
呼び出しの例として、以下を含む。
【0122】
【0123】
サーバーが拒否リストに入れられた場合、プロセス1100は、ブロック1114に進む。サーバーが拒否リストに入れられなかった場合、プロセス1100は、ブロック1105に移動する。
【0124】
ブロック1105では、プロセス1100は、リクエストの宛先が許可リストにあるサーバーであるかどうかを判断することを含む。たとえば、トレーサーアプリケーション136は、許可リストを検索して、元サーバーからのリクエストにあるトレーシングヘッダを外部サーバーが許可しているかどうかを判断する。許可リストは、追加のヘッダ(たとえば、プロセス1100のブロック1112においてリクエストによって作成されるようなヘッダ)を有するリクエストを許可すると確認されたサーバーを含む。
【0125】
伝播ヘッダがサポートされていると判断されると、許可リストに特定の宛先が追加される。OPTIONS呼び出しをこれ以上行わなくて済むよう、ローカルストレージに許可リストをキャッシュできる。この手法によって、明確な許可リストのサービスエンドポイントに対するユーザーインタフェースのサポートが必要なくなる。宛先が許可リストにある場合、プロセス1100は、ブロック1108において、引き続きヘッダを差し込む。宛先が許可リストにない場合、プロセス1100は、ブロック1106に続く。
【0126】
ブロック1106では、プロセス1100は、HTTP OPTIONS呼び出しを実行することを含む。OPTIONS呼び出しは、許可された通信オプションをサーバーに要求する。CORSプロトコルのもとでは、プリフライトリクエストは、リクエストを送ることを許容できるかどうかについてサーバーが応答できるよう、OPTIONSメソッドとともに送られる。OPTIONS呼び出しによって、トレーシングヘッダの差し込みが受け付けられるかどうかが判断される。場合によっては、ブロック1106において、プロセス1100は、このようなチェックをブラウザが自動的に実行する前にプリフライトリクエストを実行することを含む。プロセス1100は、ブロック1107に続く。
【0127】
ブロック1107では、プロセス1100は、OPTIONS呼び出しの結果から、トレーシングヘッダがサーバーによってサポートされるかどうかを判断することを含む。場合によっては、OPTIONS呼び出しは、許可可能な(または許可された)ヘッダのリストを返し得る。トレーシングヘッダがサポートされている場合、プロセス1100は、ブロック1108に移動する。ブロック1108では、ヘッダを差し込む。トレーシングヘッダがサポートされていない場合、プロセス1100は、ブロック1113に移動する。ブロック1113では、サーバーは、サーバー拒否リストに追加される。
【0128】
以下は、いくつかの簡単なOPTIONSリクエスト/レスポンスである(なお、説明が煩雑になるのを防ぐため、一部のヘッダは省略されている)。たとえば、伝播を検出するOPTIONSリクエストを、以下に示す。
【0129】
【0130】
別の例では、伝播用にサービスエンドポイントが構成されたときのレスポンスを示す。
【0131】
【0132】
別の例では、伝播が構成されていないレスポンスを示す。
【0133】
【0134】
ブロック1108では、プロセス1100は、リクエストにヘッダを差し込むことを含む。リクエストにトレーシングヘッダを差し込むことは、リクエストにトレーシングヘッダがあることを外部サーバーが許可するという判断結果に基づく。トレーシングヘッダのコンテンツとして、スパンコンテキストなどが挙げられる。
【0135】
ある例では、Zipkinおよび/または実行コンテキスト(ECID)を用いて、送信リクエストに2つのヘッダセットが差し込まれる。これらのプロトコルは、サービス開発者側の作業を最小限に抑えつつコンテキストを維持する範囲を提供する。
【0136】
ある例では、サポートが幅広いので、Zipkin B3 HTTPヘッダスキームが使われる。B3ヘッダとして、以下などが挙げられる。
【0137】
【0138】
TraceIdは、一意の32文字のUUID文字列であり、SpanIdは、内包するスパンを示す一意の16文字の文字列であり、ParentSpanIdは、スパンの親(該当する場合)の一意のIDであり、Sampledは、スパンテレメトリを報告するかどうかを示すフラグである。
【0139】
別の例では、Oracle固有のECID-Contextヘッダを使用する。
【0140】
【0141】
RIDは、コンテキストのパスを示すエンコードされたバイトの文字列であり、ブラウザからは、この文字列は「kXjE」となり、デコードされた場合、リクエストのルート(root)を示す。
【0142】
ヘッダを差し込むことができると判断されると、Tracer.inject()API呼び出しを用いて差し込みが行われる。この呼び出しによって、サーバーに送られる前に送信リクエストにHTTPヘッダが差し込まれる。
【0143】
図13は、本開示の特定の態様に係る、ヘッダの例を示す。
図13は、インストルメンテーションのないHTTPヘッダであるヘッダ1310と、ヘッダ1310と同じHTTPヘッダであるがインストルメンテーション(太字で示されている)が追加されているヘッダ1320とを示す。
【0144】
図11に戻ると、プロセス1100は、ブロック1109に続く。
ブロック1109では、プロセス1100は、サーバーにリクエストを行う。ウェブブラウザは、トレーシングヘッダを有するリクエストを外部ヘッダに送る。外部サーバーは、トレーシングヘッダに基づいてトレーシングデータのログを取るように構成される。
【0145】
ブロック1110では、プロセス1100は、サーバーに対するリクエストが成功したかどうかを判断することを含む。リクエストが成功した場合、プロセス1100は、ブロック1111に移動する。ブロック1111では、プロセスが終了する。リクエストが成功しなかった場合、プロセス1100は、ブロック1112に移動する。
【0146】
ブロック1111では、プロセス1100は、リクエストについての処理を終了することを含む。ブロック1111では、追加のヘッダがサーバーに正常に送られ、その結果、宛先サーバーにスパンコンテキストが伝播される。その後、宛先サーバーは、インストルメンテーションを支援する。
【0147】
ブロック1112では、プロセス1100は、ブロック1110において特定された失敗が、他のエラーではなくヘッダを原因とする失敗であったかどうかを判断することを含む。この失敗がヘッダを原因とする失敗ではなかった場合、プロセス1100は、ブロック1116に移動する。この間、通常のフェイルオーバー/再試行プロシージャが実行され得る。失敗がヘッダを原因とする失敗であった場合、プロセス1100は、ブロック1113に移動し、サーバーをサーバー拒否リストに追加する。
【0148】
ブロック1113では、プロセス1100は、サーバー拒否リストに宛先サーバーを追加することを含む。こうすることで、リクエストの宛先サーバーが同じであると特定された場合、プロセス1100は、拒否した同じサーバーにトレーシングヘッダを有するリクエストを送る試行は行わない。ブロック1113の完了後、プロセス1100は、ブロック1114に移動する。ブロック1114では、差し込みが行われていないリクエストを行う。
【0149】
ブロック1114では、プロセス1100は、差し込みが行われていないリクエスト、たとえば、トレーシングヘッダを有さない通常のREST呼び出しを行うことを含む。場合によっては、リクエストを処理するタイミングをテレメトリのために用いることができる。ブロック1114の後、プロセス1100は、ブロック1118に続く。ブロック1118は、レスポンスを通常処理することを含む。
【0150】
ブロック1115では、プロセス1100は、このリクエストがキャッシュされたリクエストリストにあるかどうかを判断することを含む。リクエストをキャッシュに格納してパフォーマンスを向上させて失敗を減らし得る。リクエストがキャッシュされている場合、プロセス1100は、ブロック1117に進む。リクエストがキャッシュされていない場合、プロセス1100は、ブロック1104に進む。リクエストは、スパンコンテキストを含み得る。
【0151】
ブロック1116では、プロセス1100は、フェイルオーバー処理を実行するまたはリクエストを再試行することを含む。この場合、ページの読み込み失敗または完了失敗は最良のユーザーエクスペリエンスではないことを考えると、ブロック1116において、プロセス1100は、失敗した操作を再試行して、トレーシングヘッダ差し込み試行が失敗を引き起こさないようにすることを含む。場合によっては、開発者が十分なエラーチェックを付加していなかったり、上手に終了できなかったりする場合がある。そのため、この点に関して、ブロック1116は、テレメトリが原因でカスタムアプリケーションが失敗しないようにするのを助ける。リクエストは、スパンコンテキストを含み得る。
【0152】
ブロック1117では、プロセス1100は、キャッシュされたレスポンスを続行することを含む。キャッシュされたレスポンスを用いてリクエストを処理する。リクエストは、スパンコンテキストを含み得る。
図4および
図5で説明するが、スパンおよびログがスパンログライブラリに送られる。
【0153】
図14は、態様のうちの1つを実施するための分散システム1400の簡略図である。図示する態様では、分散システム1400は、1つ以上のクライアントコンピューティングデバイス1402、1404、1406、および1408を含む。クライアントコンピューティングデバイス1402、1404、1406、および1408は、ウェブブラウザ、プロプライエタリクライアント(たとえば、Oracle Forms)など、クライアントアプリケーションを1つ以上のネットワーク(複数可)1410で実行および操作するように構成される。サーバー1412は、ネットワーク1410を介して、リモートクライアントコンピューティングデバイス1402、1404、1406、および1408と通信可能に接続されてもよい。
【0154】
様々な態様では、サーバー1412は、システムの構成要素のうちの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを実行するようになされてもよい。サービスまたはソフトウェアアプリケーションは、非仮想環境および仮想環境を含み得る。仮想環境は、2次元表現であれ3次元(4D)表現であれ、仮想イベント、見本市、シミュレータ、教室、品物の売買、および企業のための仮想環境、ページベースの論理的環境、または上記以外のその他のものを含み得る。いくつかの態様では、これらのサービスは、クライアントコンピューティングデバイス1402、1404、1406、および/または1408のユーザーに対して、ウェブベースのサービスもしくはクラウドサービスとして提供されてもよく、または、SaaS(Software as a Service)モデル下で提供されてもよい。クライアントコンピューティングデバイス1402、1404、1406、および/または1408を操作するユーザーは、1つ以上のクライアントアプリケーションを利用してサーバー1412とやり取りして、これらの構成要素が提供するサービスを利用できる。
【0155】
図に示す構成では、分散システム1400のソフトウェアコンポーネント1418、1420、および1422がサーバー1412上に実装されたものとして示される。その他の態様では、分散システム1400の構成要素のうちの1つ以上および/またはこれらの構成要素が提供するサービスのうちの1つ以上は、クライアントコンピューティングデバイス1402、1404、1406、および/または1408のうちの1つ以上によって実現されてもよい。次に、クライアントコンピューティングデバイスを操作しているユーザーは、1つ以上のクライアントアプリケーションを利用して、これらの構成要素が提供するサービスを使用してもよい。これらの構成要素は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。様々な異なるシステム構成が可能であり、これらは、分散システム1400とは異なってもよいことを理解されたい。よって、図に示す態様は、例示的なシステムを実現するための分散システムの一例であって、限定を意図したものではない。
【0156】
クライアントコンピューティングデバイス1402、1404、1406、および/または1408は、は、Microsoft Windows Mobile(登録商標)などのソフトウェアおよび/またはiOS、Windows Phone、Android、BlackBerry15、Palm OSなどのいろいろなモバイルオペレーティングシステムを実行し、かつ、インターネット、電子メール、SMS(Short Message Service)、Blackberry(登録商標)、または他の通信プロトコルに対応する手のひらサイズのポータブルデバイス(たとえば、iPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、PDA(Personal Digital Assistant))またはウェアラブルデバイス(たとえば、Google Glass(登録商標)ヘッドマウントディスプレイ)であってもよい。クライアントコンピューティングデバイスは、例として、様々なバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinux(登録商標)オペレーティングシステムを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを含む、汎用パーソナルコンピュータであり得る。クライアントコンピューティングデバイスは、たとえば、Google Chrome OSなどいろいろなGNU/Linuxオペレーティングシステムを含む各種市販のUNIX(登録商標)またはUNIXに似たオペレーティングシステムを実行するワークステーションコンピュータであり得るが、これに限定されない。これに代えて、またはこれに加えて、クライアントコンピューティングデバイス1402、1404、1406、および1408は、シン・クライアントコンピュータ、インターネット対応のゲーミングシステム(たとえば、Kinect(登録商標)ジェスチャ入力装置付きまたは無しのMicrosoft Xboxのゲーミングコンソール)、および/またはパーソナルメッセージングデバイスなど、ネットワーク(複数可)1410で通信可能なその他の電子機器であってもよい。
【0157】
分散システム1400は、4台のクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサ付きデバイスなど、他のデバイスがサーバー1412とやり取りを行ってもよい。
【0158】
分散システム1400におけるネットワーク(複数可)1410は、TCP/IP(Transmission Control Protocol/Internet Protocol)、SNA(Systems Network Architecture)、IPX(Internet Packet Exchange)、AppleTalkなどを含む、各種市販のプロトコルを使用したデータ通信をサポートできる、当業者にとってなじみのある任意の種類のネットワークであってもよいが、これに限定されない。単に一例として、ネットワーク(複数可)1110は、Ethernet(登録商標)および/またはトークンリングなどに基づいたLAN(Local Area Network)などのLANであり得る。ネットワーク(複数可)1410は、ワイドエリアネットワークおよびインターネットであり得る。ネットワーク(複数可)1410は、VPN(Virtual Private Network)、イントラネット、エクストラネット、PSTN(Public Switched Telephone Network)、赤外線ネットワーク、ワイヤレスネットワーク(たとえば、IEEE(Institute of Electrical and Electronics)802.14スイートのプロトコル、Bluetooth(登録商標)、および/またはその他のワイヤレスプロトコルのうちのいずれかの下で動作するネットワーク)、および/もしくはこれらの任意の組合せを含む仮想ネットワーク、ならびに/または他のネットワークを含み得るが、これに限定されない。
【0159】
サーバー1412は、1つ以上の汎用コンピュータ、専用サーバーコンピュータ(一例として、PC(Personal Computer)サーバー、UNIX(登録商標)サーバー、ミッドレンジ・サーバー、メインフレーム・コンピュータ、ラックマウント式サーバーなどを含む)、サーバーファーム、サーバー・クラスタ、またはその他の適切な配置および/もしくは組合せから構成されてもよい。サーバー1412は、仮想オペレーティングシステムを実行している1つ以上の仮想マシン、または仮想化を伴う他のコンピューティングアーキテクチャを含み得る。論理記憶装置の1つ以上のフレキシブルプールを仮想化して、サーバー用の仮想記憶装置を維持することができる。仮想ネットワークは、SDN(Software-Defined Networking)を用いて、サーバー1412によって制御され得る。様々な態様では、サーバー1412は、上記の開示において説明した1つ以上のサービスまたはソフトウェアアプリケーションを実行するようになされてもよい。たとえば、サーバー1412は、本開示の態様に従って上述した処理を行うためのサーバーに対応してもよい。
【0160】
サーバー1412は、上述のオペレーティングシステムのいずれか、および任意の市販のサーバーオペレーティングシステムを実行してもよい。また、サーバー1412は、HTTP(Hypertext Transport Protocol)サーバー、FTP(File Transfer Protocol)サーバー、CGI(Common Gateway Interface)サーバー、JAVA(登録商標)サーバー、データベースサーバーなどを含む、各種追加サーバーアプリケーションおよび/またはミッドティア・アプリケーションを実行してもよい。例示的なデータベースサーバーとして、Oracle、Microsoft、Sybase、IBM(International Business Machines)などが販売するデータベースサーバーが挙げられるが、これに限定されない。
【0161】
いくつかの実装形態において、サーバー1412は、クライアントコンピューティングデバイス1402、1404、1406、および1408のユーザーから受信したデータフィードおよび/またはイベント更新を分析するおよび1つにまとめるための1つ以上のアプリケーションを含んでもよい。例として、データフィードおよび/またはイベント更新は、Twitter(登録商標)フィード、Facebook(登録商標)更新、または1つ以上のサードパーティ情報ソースおよび連続したデータストリームから受信されるリアルタイム更新を含んでもよいが、これに限定されない。データフィードおよび/またはイベント更新は、センサーデータアプリケーション、チッカー(financial ticker)、ネットワークパフォーマンス測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通量監視などに関するリアルタイムイベントを含み得る。また、サーバー1412は、クライアントコンピューティングデバイス1402、1404、1406、および1408の1つ以上の表示装置を介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションを含んでもよい。
【0162】
また、分散システム1400は、1つ以上のデータベース1414および1416を含んでもよい。データベース1414および1416は、いろいろな場所に存在してもよい。一例として、データベース1414および1416のうちの1つ以上は、サーバー1412のローカルにある(および/または存在する)非一時的な記憶媒体上に存在してもよい。これに代えて、データベース1414および1416は、サーバー1412から遠隔の場所に存在し、ネットワークベースまたは専用の接続を通してサーバー1412と通信していてもよい。一組の態様では、データベース1414および1416は、SAN(Storage-Area Network)に存在してもよい。同様に、サーバー1412に起因する機能を実行するための必要なファイルは、いずれも、サーバー1412上のローカルな場所および/またはサーバー12から遠隔の場所に、適宜、格納されてもよい。一組の態様では、データベース1414および1416は、SQLフォーマットのコマンドにレスポンスしてデータ格納、更新、および取り出すようになされたOracleが提供するデータベースなど、リレーショナルデータベースを含んでもよい。
【0163】
図15は、本開示の一態様に係る、一態様のシステムの1つ以上の構成要素が提供するサービスがクラウドサービスとして提供され得るシステム環境1500の1つ以上の構成要素の簡略ブロック図である。図示した態様では、システム環境1500は、1つ以上のクライアントデバイス1504、1506、および1508を含む。1つ以上のクライアントデバイス1504、1506、および1508は、ユーザーによって、クラウドサービスを提供するクラウドインフラストラクチャシステム1502とやり取りするために使用されもよい。クライアントコンピューティングデバイスは、ウェブブラウザ、プロプライエタリ・クライアントアプリケーション(たとえば、Oracle Forms)、または他のアプリケーションなど、クライアントアプリケーションを操作するように構成されてもよい。クライアントアプリケーションは、クライアントコンピューティングデバイスのユーザーによって、クラウドインフラストラクチャシステム1502とやり取りを行ってクラウドインフラストラクチャシステム1502が提供するサービスを利用するために使用され得る。
【0164】
図に示したクラウドインフラストラクチャシステム1502が、図示された構成要素以外の構成要素を有し得ることを理解されたい。さらに、図に示す態様は、本発明の態様を組み込み得るクラウドインフラストラクチャシステムの一例に過ぎない。その他のいくつかの態様では、クラウドインフラストラクチャシステム1502は、図に示す構成要素よりも多いまたは少ない数の構成要素を有してもよく、2つ以上の構成要素を組み合わせてもよく、または構成要素の構成もしくは配置が異なっていてもよい。
【0165】
クライアントデバイス1504、1506、および1508は、1402、1404、1406、および1408に関して上述したクライアントデバイスと同様のデバイスであってもよい。
【0166】
例示的なシステム環境1500は、3つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサ付きデバイスなど、他のデバイスがクラウドインフラストラクチャシステム1502とやり取りを行ってもよい。
【0167】
ネットワーク(複数可)1510は、クライアントデバイス1504、1506、および1508とクラウドインフラストラクチャシステム1502との間の通信およびデータのやり取りを容易にしてもよい。各ネットワークは、ネットワーク(複数可)1510に関して上述したプロトコルを含む各種市販のプロトコルのいずれかを用いたデータ通信をサポートできる、当業者にとってなじみのある任意の種類のネットワークであってもよい。
【0168】
クラウドインフラストラクチャシステム1502は、サーバー1412に関して上述したコンピュータおよびサーバーを含み得る1台以上のコンピュータおよび/またはサーバーから構成されてもよい。
【0169】
特定の態様では、クラウドインフラストラクチャシステムが提供するサービスは、オンラインのデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィススイートドキュメント連携サービス、データベース処理、管理されたテクニカルサポートサービスなど、クラウドインフラストラクチャシステムのユーザーがリクエストすれば利用可能になるサービスのホストを含んでもよい。クラウドインフラストラクチャシステムが提供するサービスは、動的にスケール変更してそのユーザーのニーズを満たすことができる。クラウドインフラストラクチャシステムが提供するサービスを具体的にインスタンス化したものは、本明細書において、「サービスインスタンス」と称される。一般に、インターネットなどの通信ネットワークを介してユーザーが利用できるようになる、クラウドサービスプロバイダのシステムからのいずれのサービスも、「クラウドサービス」と称される。通常、パブリッククラウド環境において、クラウドサービスプロバイダのシステムを構成するサーバーおよびシステムは、顧客所有のオンプレミス・サーバーおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムは、アプリケーションをホストしてもよく、ユーザーは、インターネットなどの通信ネットワークを介して、リクエストに基づいてアプリケーションを注文および使用すればよい。
【0170】
いくつかの例において、コンピュータネットワークのクラウドインフラストラクチャにおけるサービスは、ストレージ、ホストされたデータベース、ホストされたウェブサーバー、ソフトウェアアプリケーションへの保護されたコンピュータネットワークアクセス、もしくはクラウドベンダーがユーザーに提供するその他のサービス、または、当技術分野で周知の上記以外のその他のサービスを含んでもよい。たとえば、サービスは、インターネットを通した、クラウド上のリモートストレージへのパスワード保護されたアクセスを含み得る。別の例として、サービスは、ネットワークで結ばれた開発者が私的使用するための、ウェブサービスベースのホストされたリレーショナルデータベースおよびスクリプト言語のミドルウェアエンジンを含み得る。別の例として、サービスは、クラウドベンダーのウェブサイト上にホストされた電子メールソフトウェア・アプリケーションへのアクセスを含み得る。
【0171】
特定の態様では、クラウドインフラストラクチャシステム1502は、顧客にセルフサービスでサブスクリプション方式で伸縮自在にスケーラブルで信頼性があり、かつ高い可用性を有するセキュアな方法で届けられるアプリケーション一式、ミドルウェア、およびデータベースサービス提供物を含んでもよい。このようなクラウドインフラストラクチャシステムの例が、本願の譲受人が提供するオラクルパブリッククラウド(Oracle Public Cloud)である。
【0172】
ビッグデータと呼ばれることもある大容量のデータは、インフラストラクチャシステムによって、多くのレベルかつ異なる規模でホストおよび/または操作され得る。このようなデータは、大規模かつ複雑過ぎるために通常のデータベース管理ツールまたは旧来のデータ処理アプリケーションを用いて処理することが難しいデータセットを含み得る。たとえば、パーソナルコンピュータまたはそれらのラック式パーソナルコンピュータを用いてテラバイトのデータを格納、取り出し、および処理することは、難しいだろう。最新のリレーショナルデータベース管理システムおよびデスクトップ統計データならびに可視化パッケージを用いてこのようなサイズのデータを扱うのは難しいだろう。許容可能な経過時間内でこのようなサイズのデータを取得、取りまとめ、管理、および処理するためには、よく用いられるソフトウェアツールの構造では対応できない何千ものサーバーコンピュータを実行する大規模並列処理ソフトウェアを必要とし得る。
【0173】
大量のデータを可視化する、トレンドを検出する、および/または当該データを用いてやり取りするために、極めて大きなデータセットが格納されてアナリストおよび研究者によって操作され得る。このようなデータを提示する、またはこのデータに対する外力または当該データが表すものをシミュレーションするために、並列にリンクされた何十、何百、または何千ものプロセッサがこのデータに作用し得る。これらのデータセットは、データベースに編成された構造化データもしくは構造化モデルに応じて編成された構造化データ、および/または非構造化データ(たとえば、Eメール、画像、データBLOB(Binary Large Objects)、ウェブページ、複雑なイベント処理)を伴い得る。比較的素早くより多くの(または、より少ない)コンピューティングリソースを目標に集中させる態様の能力を活用することによって、クラウドインフラストラクチャシステムは、事業、政府関係機関、研究機関、私人、同じ意見を持った個人同士のグループもしくは組織、または他のエンティティからのリクエストに基づいて大きなデータセットに対してタスクを実行するためにさらに利用できるようになってもよい。
【0174】
様々な態様では、クラウドインフラストラクチャシステム1502は、クラウドインフラストラクチャシステム1502が提供するサービスへの顧客のサブスクリプションを自動的にプロビジョニング、管理、および追跡するようになされてもよい。クラウドインフラストラクチャシステム1502は、それぞれ異なるデプロイメントモデルを介してクラウドサービスを提供してもよい。たとえば、サービスは、クラウドサービス(たとえば、オラクルコーポレーション所有)を販売する組織がクラウドインフラストラクチャシステム1502を所有してサービスが一般大衆またはそれぞれ異なる産業企業に利用可能になるパブリッククラウドモデル下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム1502が1つの組織のためだけに動かされてクラウドインフラストラクチャシステム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など)が共有の共通アーキテクチャ上に1つにまとめることを可能にするサービス、およびプラットフォームが提供する共有サービスを活用する新しいアプリケーションを作る能力などが挙げられるが、これに限定されない。PaaSプラットフォームは、PaaSサービスを提供するための基礎となるソフトウェアおよびインフラストラクチャを管理および制御してもよい。顧客は、PaaSクラウドインフラストラクチャシステムが提供するサービスを、ライセンスおよびサポートを別に購入する必要なしに、入手できる。プラットフォームサービスとして、JCS(Oracle Java Cloud Service)、DBCS(Oracle Database Cloud Service)、およびその他が挙げられるが、これに限定されない。
【0178】
PaaSプラットフォームが提供するサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムがサポートするプログラミング言語およびツールを採用でき、また、デプロイされたサービスを管理できる。いくつかの態様では、クラウドインフラストラクチャシステムが提供するプラットフォームサービスは、データベース・クラウドサービス、ミドルウェアクラウドサービス(たとえば、Oracle Fusion Middlewareサービス)、およびJavaクラウドサービスを含んでもよい。一態様では、データベース・クラウドサービスは、組織がデータベースリソースをプールすることと、サービスとしてのデータベース(Database as a Service)をデータベース・クラウドの形で顧客に提供することとを可能にする共有サービスデプロイメントモデルをサポートしてもよい。クラウドインフラストラクチャシステムにおいて、ミドルウェアクラウドサービスは、顧客が様々なビジネスアプリケーションを開発およびデプロイするためのプラットフォームを提供してもよく、Javaクラウドサービスは、顧客がJavaアプリケーションをデプロイするためのプラットフォームを提供してもよい。
【0179】
クラウドインフラストラクチャシステムでは、IaaSプラットフォームによって様々な異なるインフラストラクチャサービスが提供されてもよい。インフラストラクチャサービスによって、ストレージ、ネットワークなど基礎となるコンピューティングリソース、および、SaaSプラットフォームおよびPaaSプラットフォームが提供するサービスを利用している顧客のためのその他の基本的なコンピューティングリソースの管理および制御が容易になる。
【0180】
特定の態様では、クラウドインフラストラクチャシステム1502は、クラウドインフラストラクチャシステムの顧客に様々なサービスを提供するために使用されるリソースを提供するためのインフラストラクチャ・リソース1530を含んでもよい。一態様では、インフラストラクチャ・リソース1530は、PaaSプラットフォームおよびSaaSプラットフォームが提供するサービスを実行するための、サーバーなどのハードウェアと、ストレージと、ネットワーキング・リソースとの予め統合された最適な組合せを含んでもよい。
【0181】
いくつかの態様では、クラウドインフラストラクチャシステム1502におけるリソースは、複数のユーザーによって共有され、リクエストに応じて動的に再割り当てされてもよい。これに加えて、リソースは、それぞれ異なるタイムゾーンのユーザーに割り当てられてもよい。たとえば、クラウドインフラストラクチャシステム1502は、第1のタイムゾーンにいる第1セットのユーザーがクラウドインフラストラクチャシステムのリソースを指定された時間利用することを可能にした後、異なるタイムゾーンに位置する別のセットのユーザーに同じリソースを再割り当てすることを可能にし、リソースの利用を最大限に活用できるようになる。
【0182】
特定の態様では、クラウドインフラストラクチャシステム1502のそれぞれ異なる構成要素またはモジュールによって、およびクラウドインフラストラクチャシステム1502が提供するサービスによって共有されるいくつかの内部共有サービス1532が提供されてもよい。これらの内部共有サービスは、セキュリティ/アイデンティティサービス、統合サービス、企業リポジトリサービス、企業マネージャサービス、ウイルススキャン/ホワイトリストサービス、可用性の高いバックアップ・リカバリサービス、クラウドサポートを可能にするためのサービス、Eメールサービス、通知サービス、ファイル転送サービスなどを含み得るが、これに限定されない。
【0183】
特定の態様では、クラウドインフラストラクチャシステム1502は、クラウドインフラストラクチャシステムにおけるクラウドサービス(たとえば、SaaSサービス、PaaSサービス、およびIaaSサービス)の包括的な管理を提供してもよい。一態様では、クラウド管理機能は、クラウドインフラストラクチャシステム1502が受信した顧客のサブスクリプションなどをプロビジョニング、管理、および追跡するための機能を含んでもよい。
【0184】
一態様では、図に示すように、クラウド管理機能は、注文管理モジュール1520、注文オーケストレーションモジュール1522、注文プロビジョニングモジュール1524、注文管理/監視モジュール1526、およびアイデンティティ管理モジュール1528など、1つ以上のモジュールによって提供されてもよい。これらのモジュールは、1つ以上のコンピュータおよび/またはサーバーを含んでもよく、または、これらを使用して提供されてもよい。1つ以上のコンピュータおよび/またはサーバーは、汎用コンピュータ、専用サーバーコンピュータ、サーバーファーム、サーバー・クラスタ、またはその他の適切な配置および/もしくは組合せであり得る。
【0185】
動作1534において、クライアントデバイス1504、1506、または1508などのクライアントデバイスを使用している顧客は、クラウドインフラストラクチャシステム1502が提供する1つ以上のサービスをリクエストし、クラウドインフラストラクチャシステム1502が提供する1つ以上のサービスのサブスクリプションを注文することによって、クラウドインフラストラクチャシステム1502とやり取りしてもよい。特定の態様では、顧客は、クラウドUI(ユーザーインタフェース)、クラウドUI1512、クラウドUI1514および/またはクラウドUI1516にアクセスし、これらのUIを介してサブスクリプションの注文を行ってもよい。顧客が注文をすることにレスポンスしてクラウドインフラストラクチャシステム1502が受信する注文情報は、この顧客を特定する情報、および、クラウドインフラストラクチャシステム1502が提供する、顧客がサブスクリプションをする目的の1つ以上のサービスを含んでもよい。
【0186】
顧客によって注文が実行された後、クラウドUI、1512、1514および/または1516を介して注文情報が受け付けられる。
【0187】
動作1536において、この注文は、注文データベース1518に格納される。注文データベース1518は、クラウドインフラストラクチャシステム1502によって操作され、かつ、他のシステム要素と共に操作されるいくつかのデータベースのうちの1つであり得る。
【0188】
動作1538において、注文情報が注文管理モジュール1520に転送される。場合によっては、注文管理モジュール1520は、注文の確認、確認後の注文の登録など、注文に関する課金機能および会計機能を実行するように構成されてもよい。
【0189】
動作1540において、注文に関する情報が注文オーケストレーションモジュール1522に伝送される。注文オーケストレーションモジュール1522は、この注文情報を利用して、顧客が行った注文に関するサービスおよびリソースのプロビジョニングをオーケストレーションしてもよい。場合によっては、注文オーケストレーションモジュール1522は、リソースのプロビジョニングをオーケストレーションして、注文プロビジョニングモジュール1524のサービスを使用してサブスクリプションされているサービスをサポートしてもよい。
【0190】
特定の態様では、注文オーケストレーションモジュール1522は、各注文に関連する業務の流れの管理を可能にし、ビジネスロジックを適用して、注文がプロビジョニングに進むべきかどうかを判断する。動作1542において、新しいサブスクリプションの注文を受けると、注文オーケストレーションモジュール1522は、サブスクリプションの注文を満たすために必要なリソースを割り当ててこれらのリソースを構成するリクエストを注文プロビジョニングモジュール1524に送信する。注文プロビジョニングモジュール1524は、顧客が申し込んだサービスのためのリソースの割り当てを有効にする。注文プロビジョニングモジュール1524は、システム環境1500が提供するクラウドサービスと、リクエストされたサービスを提供するためのリソースをプロビジョニングするために使用される物理実施層との間に抽象度を設ける。よって、サービスおよびリソースがオンザフライで実際にプロビジョニングされたかどうか、または予めプロビジョニングされてリクエストされた場合にのみ割り当てられたかどうかなどの実装の詳細から注文オーケストレーションモジュール1522を切り離すことができる。
【0191】
動作1542おいて、サービスおよびリソースがプロビジョニングされると、クラウドインフラストラクチャシステム1502の注文プロビジョニングモジュール1524によって、クライアントデバイス1504、1506および/または1508上の顧客に、提供されたサービスについての通知が送信されてもよい。
【0192】
動作1546において、注文管理/監視モジュール1526よって顧客のサブスクリプションの注文が管理および追跡されてもよい。場合によっては、注文管理/監視モジュール1526は、サブスクリプションの注文におけるサービスに関する使用統計データ、たとえば、使用されたストレージの量、転送されたデータの量、ユーザーの数、ならびにシステムの稼働時間およびシステムの休止時間などを収集するように構成されてもよい。
【0193】
特定の態様では、クラウドインフラストラクチャシステム1502は、アイデンティティ管理モジュール1528を備えてもよい。アイデンティティ管理モジュール1528は、クラウドインフラストラクチャシステム1502におけるアクセス管理およびアクセス認可サービスなどのアイデンティティサービスを提供するように構成されてもよい。いくつかの態様では、アイデンティティ管理モジュール1528は、クラウドインフラストラクチャシステム1502が提供するサービスを利用したい顧客についての情報を制御/管理してもよい。このような情報は、このような顧客のアイデンティティを認証する情報、および、様々なシステムリソース(たとえば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してそれらの顧客がどのような操作を行うことが承認されているのかを記述する情報を含み得る。また、アイデンティティ管理モジュール1528は、各顧客についての記述情報の管理、およびその記述情報が誰によってどのようにアクセスおよび変更され得るかについての管理を含んでもよい。
【0194】
図16は、本発明の様々な態様が実施され得る例示的なコンピュータシステム1600を示す図である。システム1600を使用して、上述したコンピュータシステムのいずれかを実現してもよい。図に示すように、コンピュータシステム1600は、バス・サブシステム1602を介していくつかの周辺サブシステムと通信する処理装置1604を備える。これらの周辺サブシステムは、処理高速化装置1606と、I/Oサブシステム1608と、ストレージサブシステム1618と、通信サブシステム1624とを含んでもよい。ストレージサブシステム1618は、有形のコンピュータ読み取り可能な記憶媒体1622と、システムメモリ1610とを含む。
【0195】
バス・サブシステム1602は、コンピュータシステム1600の様々な構成要素およびサブシステムを互いに意図した通りに通信させるためのメカニズムを提供する。バス・サブシステム1602は、1つのバスとして図示されているが、バス・サブシステムの別の態様は、複数のバスを利用してもよい。バス・サブシステム1602は、各種のバスアーキテクチャを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかの種類のバス構造のうちのいずれかであってもよい。たとえば、このようなアーキテクチャは、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびPCI(Peripheral Component Interconnect)バスを含んでもよく、これらは、IEEE P1686.1標準規格に準拠して製造されるMezzanineバスとして実現され得る。
【0196】
1つ以上の集積回路(たとえば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現され得る処理装置1604は、コンピュータシステム1600の動作を制御する。処理装置1604には、1つ以上のプロセッサが含まれてもよい。これらのプロセッサは、シングルコアプロセッサまたはマルチコアプロセッサを含んでもよい。特定の態様では、処理装置1604は、シングルコアプロセッサまたはマルチコアプロセッサを各々が含んだ1つ以上の独立した処理装置1632および/または1634として実現されてもよい。また、その他の態様では、処理装置1604は、2つのデュアルコアプロセッサを1つのチップに組み込むことによって形成されるクアッドコア処理装置として実現されてもよい。
【0197】
様々な態様では、処理装置1604は、プログラムコードにレスポンスしていろいろなプログラムを実行でき、複数の同時に実行しているプログラムまたはプロセスを維持することができる。いつでも、実行されるプログラムコードの一部またはすべては、処理装置1604に、および/またはストレージサブシステム1618に存在し得る。適したプログラミングによって、処理装置1604は、上述した様々な機能を提供できる。コンピュータシステム1600は、処理高速化装置1606をさらに備えてもよい。処理高速化装置1606は、DSP(Digital Signal Processor)および/または専用プロセッサなどを含み得る。
【0198】
I/Oサブシステム1608は、ユーザーインタフェース入力装置と、ユーザーインタフェース出力装置とを含んでもよい。ユーザーインタフェース入力装置は、キーボード、マウスもしくはトラックボールなどのポインティングデバイス、タッチパッドもしくはディスプレイに組み込まれたタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、ボイスコマンド認識システムを有する音声入力装置、マイクロホン、および他の種類の入力装置を含んでもよい。また、ユーザーインタフェース入力装置は、たとえば、ジェスチャコマンドおよび音声コマンドを用いた自然なユーザーインタフェースによってユーザーがMicrosoft Xbox(登録商標)460ゲームコントローラなどの入力装置を制御およびそれとやり取りすることを可能にするMicrosoft Kinect(登録商標)モーションセンサなどの動き検知デバイスおよび/またはジェスチャ認識デバイスを含んでもよい。また、ユーザーインタフェース入力装置は、ユーザーの目の行動(たとえば、写真を撮影しているおよび/またはメニュー選択を行っている間の「まばたき」)を検出し、目の仕草(eye gesture)を変換して入力装置(たとえば、Google Glass(登録商標))への入力とするGoogle Glass(登録商標)まばたき検出装置などのアイジェスチャ認識デバイスを含んでもよい。これに加えて、ユーザーインタフェース入力装置は、ユーザーがボイスコマンドによって音声認識システム(たとえば、Siri(登録商標)ナビゲータ)とやり取りすることを可能にする音声認識検知デバイスを含んでもよい。
【0199】
また、ユーザーインタフェース入力装置は、4D(3次元)マウス、ジョイスティックもしくはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびに、スピーカ、デジタルカメラ、デジタルカムコーダー、ポータブルメディアプレーヤ、ウェブカム、イメージスキャナ、指紋スキャナ、バーコードリーダー4Dスキャナ、4Dプリンタ、レーザー測距器、および視線追跡装置などのオーディオ/ビジュアル装置を含むが、これに限定されない。これに加えて、ユーザーインタフェース入力装置は、たとえば、コンピュータ断層撮影法、磁気共鳴画像、陽電子放出断層撮影装置、超音波検査デバイスなど、医用画像入力装置を含んでもよい。また、ユーザーインタフェース入力装置は、たとえば、MIDIキーボード、デジタル楽器などのオーディオ入力装置を含んでもよい。
【0200】
ユーザーインタフェース出力装置は、表示サブシステム、インジケーターライト、または音声出力装置などの非視覚的表示装置などを含んでもよい。表示サブシステムは、CRT(ブラウン管)、LCD(液晶ディスプレイ)またはプラズマディスプレイを使用するものなどのフラットパネル表示装置、投影装置、タッチスクリーンなどであってもよい。一般に、「出力装置」という用語の使用は、コンピュータシステム1600からユーザーまたは他のコンピュータに情報を出力するためのあらゆる種類のデバイスおよびメカニズムを含むことを意図する。たとえば、ユーザーインタフェース出力装置は、モニタ、プリンタ、スピーカ、ヘッドホン、自動車ナビゲーションシステム、作図装置、音声出力装置、およびモデムなど、文字、図形、および音声/映像情報を視覚的に伝えるいろいろな表示装置を含み得るが、これに限定されない。
【0201】
コンピュータシステム1600は、システムメモリ1610内に現在位置していると図示されているソフトウェア要素を含むストレージサブシステム1618から構成されてもよい。システムメモリ1610は、処理装置1604上でロード可能かつ実行可能なプログラム命令、およびこれらのプログラムの実行中に生成されるデータを格納してもよい。
【0202】
コンピュータシステム1600の構成および種類によっては、システムメモリ1610は、揮発性メモリであってもよく(RAM(ランダムアクセスメモリ)など)、および/または不揮発性メモリ(ROM(読み出し専用メモリ)、フラッシュメモリなど)であってもよい。RAMは、通常、処理装置1604がすぐにアクセスできる、ならびに/または現在操作および実行しているデータおよび/もしくはプログラムモジュールを含む。いくつかの実装形態において、システムメモリ1610は、SRAM(スタティックRAM)またはDRAM(ダイナミックRAM)など、複数の異なる種類のメモリを含んでもよい。いくつかの実装形態において、起動中などで、コンピュータシステム1600内の要素間で情報を転送することを助ける基本ルーチンを含むBIOS(Basic Input/Output System)は、通常、ROMに格納されてもよい。また、一例として、システムメモリ1610は、クライアントアプリケーション、ウェブブラウザ、ミッドティア・アプリケーション、RDBMS(リレーショナルデータベース管理システム)などを含み得るアプリケーションプログラム1612と、プログラムデータ1614と、オペレーティングシステム1616とを含む。一例として、オペレーティングシステム1616は、様々なバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/もしくはLinuxオペレーティングシステム、いろいろな市販のUNIX(登録商標)もしくはUNIXに似たオペレーティングシステム(いろいろなGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むが、これに限定されない)、ならびに/またはiOS、Windows(登録商標)Phone、Android(登録商標)OS、BlackBerry(登録商標)15OS、およびPalm(登録商標)OSオペレーティングシステムなど、モバイルオペレーティングシステムを含んでもよい。
【0203】
また、ストレージサブシステム1618は、いくつかの態様の機能を提供する基本プログラミング構成およびデータ構成を格納するための有形のコンピュータ読み取り可能な記憶媒体を提供してもよい。プロセッサによって実行されると上述の機能を提供するソフトウェア(プログラム、コードモジュール、命令)がストレージサブシステム1618に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理装置1604によって実行されてもよい。また、ストレージサブシステム1618は、本発明に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【0204】
また、ストレージサブシステム1600は、コンピュータ読み取り可能な記憶媒体1622にさらに接続され得るコンピュータ読み取り可能な記憶媒体リーダー1620を含んでもよい。システムメモリ1610と合わせて、必要に応じてシステムメモリ1610と組み合わせて、コンピュータ読み取り可能な記憶媒体1622は、遠隔の記憶装置、ローカル記憶装置、固定記憶装置、および/またはリムーバブル記憶装置、ならびにコンピュータ読み取り可能な情報を一時的におよび/またはさらに永続して含み、格納し、送信し、および取り出すための記憶媒体を包括的に表してもよい。
【0205】
コードまたはコードの一部を含んだコンピュータ読み取り可能な記憶媒体1622は、情報の格納および/または伝送のための任意の方法および技術で実現される揮発性媒体および不揮発性媒体、取り外し可能な媒体および固定型媒体などの記憶媒体および通信媒体を含む、当技術分野で知られているまたは使われている任意の適切な媒体も含んでもよいが、これに限定されない。これは、RAM、ROM、EEPROM(Electronically Erasable Programmable ROM)、フラッシュメモリ、もしくは他のメモリテクノロジー、CD-ROM、DVD(Digital Versatile Disk)、もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置などの有形の非一時的コンピュータ読み取り可能な記憶媒体、またはその他の有形のコンピュータ読み取り可能な媒体を含み得る。明示的に述べると、これは、データ信号、データ伝送など無形の一時的コンピュータ読み取り可能な媒体、または所望の情報を伝送するために使用され得るその他の媒体、およびコンピュータシステム1600によってアクセスされ得るその他の媒体なども含み得る。
【0206】
一例として、コンピュータ読み取り可能な記憶媒体1622は、固定型不揮発性磁気媒体から読み出しまたは書き込みを行うハードディスクドライブ、取外し可能な不揮発性磁気ディスクから読み出しまたは書き込みを行う磁気ディスクドライブ、ならびに、CD ROM、DVD、およびBlu-Ray(登録商標)ディスクなどの取外し可能な不揮発性光ディスクもしくは他の光学媒体から読み出しまたは書き込みを行う光ディスクドライブを含んでもよい。コンピュータ読み取り可能な記憶媒体1622は、Zip(登録商標)ドライブ、フラッシュメモリーカード、USB(Universal Serial Bus)フラッシュドライブ、SD(Secure Digital)カード、DVDディスク、デジタルビデオテープなどを含み得るが、これに限定されない。また、コンピュータ読み取り可能な記憶媒体1622は、フラッシュメモリベースのSSD(Solid-State Drives)、エンタープライズフラッシュドライブ、ソリッドステートROMなど、不揮発性メモリに基づくSSD(ソリッドステートドライブ)と、ソリッドステートRAM、動的RAM、静的RAM、DRAMベースのSSDなど、揮発性メモリに基づくSSDと、MRAM(Magnetoresistive RAM)SSDと、DRAMとフラッシュメモリとの組合せベースのSSDを使用するハイブリッドSSDとを含んでもよい。これらのディスクドライブおよびそれらの関連するコンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、およびその他のコンピュータシステム1600用データの不揮発性ストレージを提供してもよい。
【0207】
通信サブシステム1624は、他のコンピュータシステムおよびネットワークへのインタフェースを提供する。通信サブシステム1624は、コンピュータシステム1600からデータを受信し、コンピュータシステム1600から他のシステムにデータを送信するためのインタフェースとして機能する。たとえば、通信サブシステム1624は、コンピュータシステム1600がインターネットを介して1つ以上のデバイスに接続することを可能にしてもよい。いくつかの態様では、通信サブシステム1624は、(たとえば、携帯電話技術、4G、4G、もしくはEDGE(Enhanced Data Rates For Global Evolution)などの次世代データネットワークテクノロジー、WiFi(IEEE802.28ファミリー標準規格)、他の移動体通信技術、またはそれらの任意の組合せを使用する)ワイヤレス音声ネットワークもしくは/またはデータネットワークにアクセスするためのRF(Radio Frequency)トランシーバコンポーネント、GPS(Global Positioning System)レシーバコンポーネント、および/または他の構成要素を含み得る。いくつかの態様では、通信サブシステム1624は、ワイヤレスインタフェースに加えて、またはワイヤレスインタフェースの代わりに、有線ネットワーク接続性(たとえば、Ethernet)を提供できる。
【0208】
いくつかの態様では、通信サブシステム1624は、コンピュータシステム1600を利用し得る1人以上のユーザーに代わって、構造化データフィードおよび/または非構造化データフィード1626、イベントストリーム1628、イベントアップデート1630などの形で入力通信文を受信してもよい。
【0209】
一例として、通信サブシステム1624は、Twitter(登録商標)フィード、Facebook(登録商標)の更新、RSS(Rich Site Summary)フィードなどのwebフィード、および/もしくは1つ以上のサードパーティ情報ソースからのリアルタイム更新など、ソーシャルメディアネットワークならびに/または他のコミュニケーションサービスのユーザーから非構造化データフィード1626をリアルタイムで受信するように構成されてもよい。
【0210】
また、これに加えて、通信サブシステム1624は、連続したデータストリームの形でデータを受信するように構成されてもよく、連続したデータストリームは、本質的にはっきりとした終端がない、連続または無限の、リアルタイムイベントおよび/またはイベントアップデート1630のイベントストリーム1628を含んでもよい。連続データを生成するアプリケーションとして、たとえば、センサーデータアプリケーション、チッカー、ネットワークパフォーマンス測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通量監視などが挙げられてもよい。
【0211】
また、通信サブシステム1624は、コンピュータシステム1600に接続された1つ以上のストリーミングデータソースコンピュータと通信中であり得る1つ以上のデータベースに、構造化データフィードおよび/または非構造化データフィード1626、イベントストリーム1628、イベントアップデート1630などを出力するように構成されてもよい。
【0212】
コンピュータシステム1600は、手のひらサイズのポータブルデバイス(たとえば、iPhone(登録商標)携帯電話、IPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえば、Google Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバーラック、またはその他のデータ処理システムを含む、様々な種類のうちの1つであり得る。
【0213】
変わり続けるというコンピュータおよびネットワークの性質のため、図に示すコンピュータシステム1600の説明は、具体例にすぎない。図に示すシステムよりも多いまたは少ない数の構成要素を有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアが使用されてもよく、および/または、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、もしくはそれらの組合せで特定の要素が実現されてもよい。さらに、ネットワーク入出力装置など、他のコンピューティングデバイスへの接続を採用してもよい。本明細書に記載の開示および教示に基づいて、当業者であれば、様々な態様を実現するための他のやり方および/または方法が分かるであろう。
【0214】
上記の明細書において、本発明の態様をその具体例を参照しながら説明したが、当業者は本発明がこれに限定されないことが分かるだろう。上述した発明のさまざまな特徴および態様は、個々に、または共同で用いられてもよい。さらに、態様は、本明細書のより広義の趣旨および範囲から逸脱することなく、本明細書において記載した環境およびアプリケーションの数を上回る任意の数の環境およびアプリケーションにおいて利用され得る。したがって、明細書および添付の図面は、限定ではなく例示とみなされる。
【国際調査報告】