以下の詳細な説明は例証にすぎず、実施形態及び/又は実施形態の用途若しくは使用を制限することを意図するものではない。さらに、前述の背景又は概要セクション、又は詳細な説明セクション内に提示されたいずれの表現された情報又は暗黙的(implied)情報にも制約されることを意図しない。
ここで、全体を通して同様の要素を指すために同様の参照番号が用いられる図面を参照して、1つ又は複数の実施形態を説明する。以下の説明において、説明のために、1つ又は複数の実施形態のより完全な理解を与えるために、多数の特定の詳細が説明される。しかしながら、様々の場合において、1つ又は複数の実施形態は、これらの特定の詳細なしに実施できることが明らかである。
クラウド・アプリケーションのデバッグは、通常、クラウド・アプリケーションに関連したログ、又はクラウド・アプリケーションの状態に対応するスナップショットを用いて達成される。例えば、ログを収集及び/又はキュレート(curate)して、クラウド・アプリケーションのデバッグを容易にすることができる。或いは、クラウド・アプリケーションの状態のスナップショットを分析して、クラウド・アプリケーションのデバッグを容易にすることができる。クラウド・アプリケーションのデバッグをさらに容易にするために、クラウド・プラットフォームは、ユーザにより利用できるログ収集及び分析ユーティリティを提供することができる。しかしながら、ログ収集及び分析は、特にデバッグに関して多数の欠点がある。例えば、高容量クラウド・アプリケーションは、膨大な量のデータを生成すること、及び/又は事前計画(例えば、ログすべきコンテンツのタイプに関する事前計画)を必要とすることがある。従って、ログ収集及び分析ユーティリティは、デバッガに共通するシングル・ステップのエクスペリエンスを提供することができない。また、ログ収集及び分析ユーティリティは、ユーザがクラウド・アプリケーションのコンピュータ・コードをトラバースするとき、プログラム状態を修正する能力を提供することができない。場合によっては、システムは、システムの状態のスナップショットの収集及び仮想化によりロギングを増強することができる。例えば、デバッガは、ユーザが、クラウド・アプリケーションの状態に関連したスナップショットをいつ収集するかを決定するのを可能にすることができる。その後ユーザは、完全なデバッグ・エクスペリエンスのサブセットをエミュレートするツールにおいてこれらを見ることができる。ツールは、瞬時(moment-in-time)スナップショットを利用することができ、それにより、ユーザが、メモリの構造、並びにスナップショットが撮られた瞬間におけるスレッドの呼び出しスタックを見ることが可能になる。しかしながら、瞬時スナップショットのタイミング情報(例えば、瞬時スナップショットをいつ撮るべきかなど)のエンコードは、通常、デバッグ目的で瞬時スナップショットの利用を容易にすることを要する。さらに、システムの状態のスナップショットを用いるとき、コードのステップ実行(stepping through code)及びプログラム状態の修正などのデバッグ・タスクが可能ではない。別の例において、開発者のローカル・マシン上で、完全なデバッグ環境を実行することができる。しかしながら、完全なデバッグ環境では、ユーザは通常、テストのパイプライン及び配備に変更を加える前に、局所的に開発及びデバッグすることを要する。さらに、これらのクラウド・プラットフォームにおいて実行されるアプリケーションは、一般に、長寿命(long-lived)プロセス又は長寿命仮想マシン(VM)により実行される。
クラウド・コンピューティングのランドスケープへの最近の追加は、サーバレス・コンピューティングのものである。サーバレス・コンピューティング・プラットフォームは一般に、イベント駆動型プログラミング(又は、出版購読型プログラミング)、自動スケーリング、及び細粒度(fine-grained)価格設定モデルを組み合わせる。例えば、プログラマは、イベント駆動型プログラムを一式のイベント・アクション対としてエンコードし、該イベント駆動型プログラムをサービスにアップロードすることができる。システムは、イベントをリッスンし(listen)、イベントの受信時にアクションを処理するために使用する作業者装置(workerdevice)のプールを維持することができる。このように、稼働時間ではなく使用に対してのみ課金しながら、制限されたセットのリソースを多数の間で共有することができる。つまり、サーバレス・コンピューティング・プラットフォーム上で実行されているサーバレス・コンピューティング・アプリケーションは、通常、アクティブ時にのみリソース(例えば、作業者装置)を消費する。対照的に、クラウド・ホスト型アプリケーションは、その配備期間中、価値あるリソース(例えば、特定の数の中央処理ユニット・サイクル)を消費する。サーバレス・コンピューティング・アプリケーションのデバッグは、多数の課題を抱えている。例えば、サーバレス・コンピューティング・アプリケーションのデバッグは、一般に、関数にアタッチすること、サーバレス・コンピューティング・アプリケーションの実行を停止すること、及びデバッガのユーザがその関数の評価の速度を制御することを可能にすることを要する。しかしながら、これは一般に、1つ又は複数の重要な作業者リソースが、無期限独占されることを要する。さらに、ユーザは、デバッグ・セッションについて忘れ、何時間も又は何日もたってから再開することがある。
クラウド・アプリケーションは、コンピューティング・デバイスから遠く離れて、通常はコンピューティング・デバイスにより直接アクセスできないプラットフォーム上で実行されるので、クラウド・アプリケーションのデバッグには問題のあることもある。クラウド・アプリケーションは通常、長期プロセス(long-running process)により供されるので、「アタッチ及び検査」(attach-and-inspect)スタイルのデバッガを用いて、クラウド・アプリケーションにアタッチし、及び/又はクラウド・アプリケーションのコードを検査することができる。その上、サーバレス・アプリケーションは通常、長期プロセスと関連付けられていないので、サーバレス・アプリケーションのデバッグは、デバッグ・プロセスをさらに複雑にする。さらに、サーバレス・アプリケーションをアタッチし、従って停止することが、サーバレス環境の性能に悪影響を与えることがある。例えば、ランタイムに、サービス要求のための制限されたサイズのスレッド・プール及び/又はコンテナが利用されることが多い。デバッガは、長期プロセスにアタッチし、その実行を停止し、ユーザがプロセスの状態を検査できるようにすることによって、動作することができる。「アタッチ及び停止(attach-and-halt)」デバッグは、トラップのようなオペレーティング・システムの機能を利用することが多い。多くの場合、アタッチ及び停止デバッグは、実行可能プログラムにパッチをあてて、細粒度ブレークポイントをサポートすることもできる。従って、サーバレス・アプリケーションのデバッグに対してアタッチ及び停止を用いることにより、サーバレス・アプリケーションと関連したサーバレス環境の性能が迅速に低下する。最後に、サーバレス・プラットフォームが複雑であるならば、サーバレス・アプリケーションと関連したランタイム・プロセスから、開発をシフトすること及び/又はタスクをデバッグすることが非常に望ましい。
これら及び/又は他の問題に対処するため、本明細書で説明される実施形態は、サーバレス・アプリケーションのサブセットのリホストを容易にするシステムを含む。例えば、サーバレス・クラウド・プラットフォームによりホストされるサーバレス・アプリケーションのサブセットは、ネットワークを介してサーバレス・クラウド・プラットフォームと通信するコンピューティング・デバイスによりリホストすることができる。サーバレス・アプリケーションのサブセットのリホストは、サーバレス・アプリケーションのデバッグの改善を容易にする。例えば、サーバレス・クラウド・プラットフォーム上で実行されているサーバレス・アプリケーションと関連したコンピュータ・コードの一部を、デバッガ・プログラムを用いてローカル・コンピューティング・デバイス上でリホストすること(例えば、サーバレス・クラウド・プラットフォームからオフロードすること)、及び/又はデバッグすることができる。付加的に又は代替的に、サーバレス・アプリケーションのサブセットのリホストは、サーバレス・クラウド・プラットフォームとは異なるコンピューティング・デバイスによるサーバレス・アプリケーションのサブセットの実行を容易にすることができる。従って、サーバレス・アプリケーションの性能を改善することができる。さらに、サーバレス・アプリケーションと関連したエラーの数の減少を達成することができる。さらに、サーバレス・アプリケーションのコアランタイムを変更することなく、サーバレス・アプリケーションのためのデバッガを用いることができる。
図1は、本明細書で説明される1つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にする限定されない例示的システム100のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
種々の実施形態において、システム100は、サーバレス・クラウド・プラットフォーム・システムとすることができる。1つの態様において、システム100は、サーバレス・アプリケーションのサブセットをリホストするためのシステムとすることができる。さらに、システム100は、デバッグ・システム、サーバレス・コンピューティング・システム、ログ分析システム(例えば、リアルタイム・ログ分析システム)、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス(on-premise)システム、マシン学習システム、人工知能システム、及び/又は別のタイプのシステムと関連付けること、これらと共に用いること、又はその中に含ませることができる。システム100は、ハードウェア及び/又はソフトウェアを用いて、本質的に非常に技術的な問題、抽象的でない問題、及び人間による精神的行為(mental act)のセットとして実行できない問題を解決することができる。さらに、実行されるプロセスの一部は、メモリ操作に関連する定義されたタスクを実行するための専用コンピュータ(例えば、サーバレス・コンピューティング・コンポーネントを有する専用コンピュータ)によって実行することができる。システム100及び/又はシステムのコンポーネントを用いて、技術の進歩、コンピューティング・デバイスの利用、クラウド・プラットフォームの利用、サーバレス・アプリケーションのデバッグ、サーバレス・アプリケーションの実行、及び/又はコンピュータ・アーキテクチャ等によって生じる新しい問題を解決することができる。システム100の1つ又は複数の実施形態は、サーバレス・クラウド・プラットフォーム・システム、デバッグ・システム、ログ分析システム(例えば、リアルタイム・ログ分析システム)、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス・システム、マシン学習システム、人工知能システム等の技術の改善を提供することができる。システム100の1つ又は複数の実施形態はまた、コンピューティング・デバイスのデバッグ能力を改善することにより、コンピューティング・デバイスの技術の改善を提供することもできる。
図1に示される実施形態において、システム100は、サーバレス・コンピューティング・コンポーネント102を含むことができる。サーバレス・コンピューティング・コンポーネント102は、サーバレス・コンピューティング・システムと関連付けることができる。例えば、特定の実施形態において、サーバは、サーバレス・コンピューティング・コンポーネント102をホストすることができる。図1に示されるように、サーバレス・コンピューティング・コンポーネント102は、インターフェース・コンポーネント104、リライタ(rewriter)コンポーネント106、及びブローカ(broker)コンポーネント108を含むことができる。サーバレス・コンピューティング・コンポーネント102の態様は、マシン内に具体化された、例えば1つ又は複数のマシンと関連した1つ又は複数のコンピュータ可読媒体(単数又は複数の)内に具体化された、マシン実行可能コンポーネントを構成することができる。こうしたコンポーネントは、例えば、コンピュータ、コンピューティング・デバイス、仮想マシン等などの1つ又は複数のマシンにより実行されるとき、マシンに、説明される動作を実行させることができる。1つの態様において、サーバレス・コンピューティング・コンポーネント102はまた、コンピュータ実行可能コンポーネント及び命令を格納するメモリ110を含むこともできる。さらに、サーバレス・コンピューティング・コンポーネント102は、サーバレス・コンピューティング・コンポーネント102による命令(例えば、コンピュータ実行可能コンポーネント及び対応する命令)の実行を容易にするためのプロセッサ112を含むことができる。示されるように、1つ又は複数の実施形態において、インターフェース・コンポーネント104、リライタ・コンポーネント106、ブローカ・コンポーネント108、メモリ110、及び/又はプロセッサ112を互いに電気的に及び/又は通信可能に結合することができる。
サーバレス・コンピューティング・コンポーネント102は、ネットワーク116を介して、コンピューティング・デバイス114と通信することができる。コンピューティング・デバイス114は、1つ又は複数のプロセッサを含むハードウェア・デバイスとすることができる。例えば、コンピューティング・デバイスは、電子デバイス(例えば、コンシューマ電子デバイス)、ネットワーク・デバイス、クラウド・デバイス(例えば、クラウド・コンポーネント)、及び/又はサーバレス・アプリケーションの少なくとも一部を実行できる別のタイプのデバイスとすることができる。ネットワーク116は、1つ又は複数のネットワークを含むことができる。例えば、ネットワーク116は、これらに限定されるものではないが、広域ネットワーク(WAN、例えばインターネット)、ローカル・エリア・ネットワーク(LAN)、及び/又はセルラー・ネットワークを含む、1つ又は複数の無線ネットワーク及び/又は1つ又は複数の有線ネットワークを含むことができる。ネットワーク116はまた、少なくともコンピューティング・デバイス114とサーバレス・コンピューティング・コンポーネント102との間の通信及び/又は対話を容易にするために、1つ又は複数のネットワーク・デバイス(例えば、ネットワーク・ハードウェア、ネットワーク機器、コンピュータ・ネットワーキング・デバイス等)を含むこともできる。
1つの実施形態において、インターフェース・コンポーネント104は、コンピューティング・デバイス114から、識別子データ(図1に示される識別子データ)を受け取ることができる。例えば、コンピューティング・デバイス114は、コンピューティング・デバイス114によりリホストされるサーバレス・アプリケーションの第1の部分を識別することができる。サーバレス・アプリケーションは、ユーザのためのfunction as a service(FaaS)と関連付けることができるので、ユーザは、サーバレス・アプリケーションと関連したコンピュータ・コードを実行するために、サーバ又は仮想マシンを購入することも又は借りることもなく、サーバレス・アプリケーションを利用することができる。一例において、サーバレス・アプリケーションは、サーバレス・コンピューティング・コンポーネント102により(例えば、メモリ110により)格納することができる。別の例において、サーバレス・アプリケーションは、サーバレス・コンピューティング・コンポーネント102をホストするサーバ、及び/又はサーバレス・コンピューティング・コンポーネント102をホストする仮想マシン上に格納することができる。サーバレス・アプリケーションの第2の部分が、サーバレス・コンピューティング・コンポーネント102(例えば、サーバレス・コンピューティング・コンポーネント102と関連したサーバ及び/又は仮想マシン)により実行される間、コンピューティング・デバイス114は、該コンピューティング・デバイス114のサーバレス・アプリケーションの部分を実行することにより、サーバレス・アプリケーションの第1の部分をリホストすることができる。1つの態様において、リライタ・コンポーネント106は、サーバレス・アプリケーションの第1の部分がコンピューティング・デバイス114により実行され、サーバレス・アプリケーションの第2の部分がサーバレス・コンピューティング・コンポーネント102により実行されることを可能にするように、サーバレス・アプリケーションをリライトすることができる。例えば、リライタ・コンポーネント106は、サーバレス・アプリケーションを、サーバレス・アプリケーションのコアランタイムなしに、サーバレス・アプリケーションについてのデバッグ・プロセスを容易にする結合アクション(例えば、コンピュータ実行可能機能のグラフ)としてサーバレス・アプリケーションをリライトする。
1つの実施形態において、インターフェース・コンポーネント104は、サーバレス・アプリケーションの第1の部分をコンピューティング・デバイス114に経路変更して、コンピューティング・デバイス114により実行されるサーバレス・アプリケーションの部分に対するデバッグ・セッションを容易にすること、及び/又は、コンピューティング・デバイス114によるサーバレス・アプリケーションの部分の実行を容易にすることができる。例えば、コンピューティング・デバイス114との直接通信が可能である(例えば、コンピューティング・デバイス114が、サーバレス・アプリケーションの第1の部分と関連した長期計算を実行するのにより適した別個のクラウド・デバイスである)との判断に応答して、インターフェース・コンポーネント104は、サーバレス・アプリケーションの第1の部分をコンピューティング・デバイス114に経路変更することができる。
別の実施形態において、ブローカ・コンポーネント108は、サーバレス・アプリケーションの第1の部分をコンピューティング・デバイス114に経路変更して、コンピューティング・デバイス114により実行されるサーバレス・アプリケーションの第1の部分に対するデバッグ・セッションを容易にすることができる。付加的に又は代替的に、ブローカ・コンポーネント108は、サーバレス・アプリケーションの第1の部分をコンピューティング・デバイス114に経路変更して、コンピューティング・デバイス114によるサーバレス・アプリケーションの第1の部分の実行を容易にすることができる。例えば、サーバレス・コンピューティング・プラットフォームがコンピューティング・デバイス114と直接通信できない(例えば、コンピューティング・デバイス114は、サーバレス・コンピューティング・プラットフォームが通信することができるインターネット経路と関連付けられていない)との判断に応答して、インターフェース・コンポーネント104は、サーバレス・アプリケーションの第1の部分をコンピューティング・デバイス114に経路変更することができる。1つの態様において、ユーザは、コンピューティング・デバイス114上のデバッガ・プログラムを用いて、デバッグ・セッション中のサーバレス・アプリケーションの第1の部分のデバッグを容易にすることができる。サーバレス・アプリケーションの第1の部分のデバッグ後、コンピューティング・デバイス114は、サーバレス・アプリケーションの第1の部分の変更されたバージョン(例えば、サーバレス・アプリケーションの第1の部分のデバッグされたバージョン)をサーバレス・コンピューティング・コンポーネント102に伝送することができる。例えば、インターフェース・コンポーネント104は、コンピューティング・デバイス114から、サーバレス・アプリケーションの第1の部分の変更されたバージョンを受け取ることができる。別の態様において、リライタ・コンポーネント106は、サーバレス・アプリケーションの第1の部分の変更されたバージョンを、デバッグ中にサーバレス・コンピューティング・コンポーネント102により実行されるサーバレス・アプリケーションの第2の部分と結合することができる。従って、改善された安定性、改善された信頼性、改善された精度、及び/又は改善された品質を有する更新されたサーバレス・アプリケーションを提供することができる。
別の実施形態において、コンピューティング・デバイス114は、サーバレス・アプリケーションのコアランタイムを修正することなく、デバッグ・プロセス中、サーバレス・アプリケーションの第1の部分を実行することができる。例えば、サーバレス・アプリケーションは、コンピューティング・デバイス114がサーバレス・アプリケーションの第1の部分を実行している間(例えば、コンピューティング・デバイスがサーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションを実行する間)、サーバレス・アプリケーションの第2の部分と関連した処理スレッドのセットを実行し続けることができる。1つの態様において、サーバレス・アプリケーションは、少なくともサーバレス・プログラムについての機能を作成するために用いることができるプリミティブ・コード・セグメント(primitive code segment)のセットを含むことができる。プリミティブ・コード・セグメントのセットは、例えば、サーバレス・プログラムにより提供される呼び出し可能なアクションのセット、サーバレス・プログラムによるアクションのトリガされた呼び出し、及び/又はサーバレス・プログラムによるアクションのカリー化(curried)評価を含むことができる。1つの態様において、サーバレス・アプリケーションは、結合されたアクションのグラフとして処理することができ、そこでグラフは、デバッグをサポートする方法でリライトされる。1つの態様において、コンピューティング・デバイス114により実行されるデバッガ・プログラムは、トランポリン・スタイル(trampoline-style)のインストルメンテーションと関数型プログラミングのための継続渡しスタイル(continuation-passing style)の関数呼び出しとの組み合わせを用いることができる。特定の実施形態において、サーバレス・アプリケーションの第1の部分は、関数のシーケンスにおける第1の関数とすることができる。インターフェース・コンポーネント104は、例えば、第1の関数をコンピューティング・デバイス114に経路変更することができる。さらに、リライタ・コンポーネント106は、命令のシーケンスにおける第1の関数に先立って第2の関数を生成することができる。リライタ・コンポーネント106はまた、命令のシーケンスにおける第1の関数の後に第3の関数を生成することもできる。リライタ・コンポーネント106は、第1の関数がコンピューティング・デバイスに経路変更された後に)第2の関数及び第3の関数を実行することができる(例えば、リライタ・コンポーネント106は、コンピューティング・デバイス114がサーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションを実行する間、第2の関数及び第3の関数を実行することができる)。特定の実施形態において、インターフェース・コンポーネント104は、サーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションに基づいて生成されたリアルタイム・データを受け取ることができる。さらに、リライタ・コンポーネント106は、デバッグ・セッションと関連したリアルタイム・データに基づいて、サーバレス・アプリケーションの第2の部分を実行することができる。
更に別の実施形態において、サーバレス・コンピューティング・コンポーネント102は、コンピューティング・デバイス114と組み合わせて、サーバレス・アプリケーションをデバッグするための種々の動作モードを提供することができる。例えば、サーバレス・アプリケーションをデバッグするための第1のモードは、コンピューティング・デバイス114、又はコンピューティング・デバイス114及び/又はサーバレス・コンピューティング・コンポーネント102と通信する別のデバイスに提供されるユーザデータに基づいて、実行することができる。ユーザデータは、サーバレス・アプリケーションに関連した1つ又は複数の処理点と関連付けられるアクションのセットを含むことができる。付加的に又は代替的に、ユーザデータは、サーバレス・アプリケーションのコンピュータ・コード内のプログラム可能演算子を手動で呼び出すための手動呼び出しを容易にすることができる。1つの態様において、第1のモードは、呼び出し信号をコンピューティング・デバイス114からサーバレス・コンピューティング・コンポーネント102へ(例えば、ブローカ・コンポーネント108へ)転送するトランポリン・コンピューティング・プロセスを用いることができる。呼び出し信号は、例えば、サーバレス・アプリケーションのコンピュータ・コード内のプログラム可能演算子を呼び出すための呼び出しに関するパラメータのセットを含むことができる。コンピューティング・デバイス114により実行されるデバッグ・プロセスが完了したとき、呼び出し信号を、呼び出されるトリガと共に伝送することができる。1つの態様において、コンピューティング・デバイス114は、コンピューティング・デバイス114により実行されるデバッグ・プロセスが完了したとの判断に応答して、デバッグされたアクションについてのデータ(例えば、戻り値)でトリガが生成されることを検証するデバッグ・クライアントとして用いることができる。特定の実施形態において、コンピューティング・デバイス114により実行されるデバッグ・プロセスがエラーと関連付けられる(例えば、コンピューティング・デバイス114により実行されるデバッグ・プロセスが異常終了した)との判断に応答して、コンピューティング・デバイス114は、デバッグ・プロセスと関連した既に実行されたアクション(例えば、オリジナル・アクション)についてのデータ(例えば、戻り値)でトリガを生成することができる。
付加的に又は代替的に、サーバレス・アプリケーションをデバッグするための第2のモードは、ユーザデータと、サーバレス・アプリケーションの第1の部分及び/又はユーザデータの分析に基づいて生成された分析データとに基づいて、実行することができる。例えば、第2のモードは、サーバレス・アプリケーションに関連する1つ又は複数の処理点と関連付けられたアクションのセットを提供することができる。さらに、第2のモードは、アクションのセットと交差するサーバレス・アプリケーションの第1の部分の1又は複数の部分をリライトすることもできる。一例では、第2のモードにおいて、アクションのセットに関連するエンクロージング使用(enclosing use)を探して、ユーザデータを走査することができる。Akがデバッグされるアクションであるものとして、エンクロージング使用が、アクションA1、...Ak、...Anのシーケンスである場合、アクションのシーケンスを、シーケンスS1及び第2のシーケンスS2に分割することができる。第1のシーケンスS1は、A1、...、Tであり、ここでTは、Akについてのトランポリンである。第2のシーケンスS2は、C、...、Anとすることができ、ここでCはAkについての継続(continuation)である。
付加的に又は代替的に、サーバレス・アプリケーションをデバッグするための第3のモードは、サーバレス・アプリケーションと関連したリアルタイム・データに基づいて実行することができる。例えば、リアルタイム・データは、サーバレス・アプリケーションの第1の部分及び/又はサーバレス・アプリケーションの第2の部分の実行に基づいて生成することができる。リアルタイム・データは、例えば、1又は複数のデータフローのリアルタイム活性化(activations)を含むことができる。1つの態様において、コンピューティング・デバイス114により実行されるデバッグ・プロセスの1又は複数のデータフローは、リアルタイム・データに基づいて更新することができる。例えば、サーバレス・アプリケーションの一部を異なるコンピュータ・コードに置換することができる。同様に、スプライス・ペア(splice pair)(例えば、上記の例におけるS1)についてのシーケンスを置換することもできる。
付加的に又は代替的に、サーバレス・アプリケーションをデバッグするための第4のモードは、増大した処理速度に基づいて実行することができる。例えば、第4のモードは、サーバレス・アプリケーションの第1の部分による、あらゆる発信要求を制限するような方法で1つ又は複数のアクションを実行しながら、コンピューティング・デバイス114により実行されるデバッグ・プロセスの1又は複数のデータフローが、増大した処理速度で(例えば、デバッグ・プロセスについてのほぼ最高処理速度で)実行されることを可能にする。第4のモードにおいて、ディスパッチャDを作成し、該ディスパッチャDを、第1のサーバレス・アプリケーションの1つ又は複数の部分の代わりに使用することができる。ディスパッチャDは、両方のオリジナル・アクション(例えば、上記のAk)に対する呼び出しの「teeを行い(teeing)」、第1のサーバレス・アプリケーションと関連した別のアクションを呼び出すことによって、動作することができる。
サーバレス・コンピューティング・コンポーネント102(例えば、インターフェース・コンポーネント104、リライタ・コンポーネント106、及び/又はブローカ・コンポーネント108)は、人間が実行できない(例えば、一人の人間の知性の能力を上回る)サーバレス・アプリケーションと関連した1つ又は複数のプロセスを実行することを理解されたい。例えば、特定の期間にわたって、サーバレス・アプリケーションの少なくとも一部を実行しているときに処理されるデータ量、サーバレス・アプリケーションの少なくとも一部を実行しているときのデータの処理速度、及び/又はサーバレス・コンピューティング・コンポーネント102(例えば、インターフェース・コンポーネント104、リライタ・コンポーネント106、及び/又はブローカ・コンポーネント108)により処理できるデータのタイプは、同じ期間にわたって、一人の人間の知性により処理できる量、速度及びデータ・タイプと比べて大きく、速く、そして、それらとは異なり得る。サーバレス・コンピューティング・コンポーネント102(例えば、インターフェース・コンポーネント104、リライタ・コンポーネント106、及び/又はブローカ・コンポーネント108)はまた、同じくサーバレス・アプリケーションと関連した上記の1つ又は複数のプロセスを実行しながら、1つ又は複数の他の機能の実行(例えば、完全に電源オンされる、完全に実行される等)に向けて完全に動作可能であり得る。さらに、サーバレス・コンピューティング・コンポーネント102(例えば、インターフェース・コンポーネント104、リライタ・コンポーネント106、及び/又はブローカ・コンポーネント108)により生成される出力は、ユーザが手動で取得することができない情報を含むことがある。例えば、サーバレス・アプリケーションにより生成される情報の量、及び/又は、サーバレス・アプリケーションにより生成される種々の情報は、ユーザにより手動で取得される情報よりも複雑であり得る。
図2は、本明細書で説明される1つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にする、限定されない例示的システム200のブロック図である。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
種々の実施形態において、システム200は、サーバレス・クラウド・プラットフォーム・システムとすることができる。1つの態様においては、システム200は、サーバレス・アプリケーションのサブセットをリホストするためのシステムとすることができる。さらに、システム200は、デバッグ・システム、サーバレス・コンピューティング・システム、ログ分析システム(例えば、リアルタイム・ログ分析システム)、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス・システム、マシン学習システム、人工知能システム、及び/又は別のタイプのシステムと関連付け、これらと共に使用し、又はこれらの中に含ませることができる。システム200は、本質的に非常に技術的な問題、抽象的ではない問題、及び人間による精神的行為のセットとして実行できない問題を解決するために、ハードウェア及び/又はソフトウェアを用いることができる。さらに、実行されるプロセスの一部は、メモリ操作に関連する定義されたタスクを実行するための特化したコンピュータ(例えば、サーバレス・コンピューティング・デバイス・コンポーネントを有する特化したコンピュータ)により実行することができる。システム200及び/又はシステムのコンポーネントを、技術の進歩、コンピューティング・デバイスの利用、クラウド・プラットフォームの利用、サーバレス・アプリケーションのデバッグ、サーバレス・アプリケーションの実行、及び/又はコンピュータ・アーキテクチャ等によって生じる新しい問題を解決するために用いることができる。システム200の1つ又は複数の実施形態は、サーバレス・クラウド・プラットフォーム・システム、デバッグ・システム、ログ分析システム(例えば、リアルタイム・ログ分析システム)、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス・システム、マシン学習システム、人工知能システム等の技術の改善を提供することができる。システム200の1つ又は複数の実施形態はまた、コンピューティング・デバイスのデバッグ能力を改善することにより、コンピューティング・デバイスの技術の改善を提供することもできる。
図2に示される実施形態において、システム200は、サーバレス・コンピューティング・コンポーネント102及びコンピューティング・デバイス114を含むことができる。図2に示されるように、コンピューティング・デバイス114は、識別コンポーネント202及びデバッグ・コンポーネント204を含むことができる。付加的に、特定の実施形態において、サーバレス・コンピューティング・コンポーネント102は、インターフェース・コンポーネント104、リライタ・コンポーネント106、及びブローカ・コンポーネント108を含むことができる。コンピューティング・デバイス114の態様は、例えば、1つ又は複数のマシンと関連した1つ又は複数のコンピュータ可読媒体(単数又は複数)内に具体化されるなど、マシン内に具体化されたマシン実行可能コンポーネントを構成することができる。こうしたコンポーネントは、例えば、コンピュータ、コンピューティング・デバイス、仮想マシン等などの1つ又は複数のマシンにより実行されるとき、マシンに、説明される動作を実行させることができる。1つの態様において、コンピューティング・デバイス114はまた、コンピュータ実行可能コンポーネント及び命令を格納するメモリ206を含むこともできる。さらに、コンピューティング・デバイス114は、該コンピューティング・デバイス114による命令(例えば、コンピュータ実行可能コンポーネント及び対応する命令)の実行を容易にするためにプロセッサ208を含むことができる。示されるように、1つ又は複数の実施形態において、識別コンポーネント202、デバッグ・コンポーネント204、メモリ206、及び/又はプロセッサ208を電気的に及び/又は通信可能に互いに結合することができる。
識別コンポーネント202は、コンピューティング・デバイス114によりリホストされるサーバレス・アプリケーションの第1の部分を識別する識別子データを生成することができる。例えば、識別コンポーネント202は、サーバレス・アプリケーションによる以前に生成された出力データを示す履歴データに基づいて、サーバレス・アプリケーションの第1の部分を識別することができる。付加的に又は代替的に、識別コンポーネント202は、サーバレス・アプリケーションと関連したメタデータに基づいて、サーバレス・アプリケーションの第1の部分を識別することができる。付加的に又は代替的に、識別コンポーネント202は、コンピューティング・デバイス114又は別のデバイスと関連したユーザにより与えられるユーザデータに基づいて、サーバレス・アプリケーションの第1の部分を識別することができる。
デバッグ・コンポーネント204は、サーバレス・アプリケーションの第1の部分と関連したデバッグ・プロセスを実行することができる。例えば、デバッグ・コンポーネント204は、デバッガ・アプリケーションに基づいて、サーバレス・アプリケーションの第1の部分を実行することができる。1つの実施形態において、デバッグ・コンポーネント204は、ネットワーク116を介して、サーバレス・コンピューティング・コンポーネント102からサーバレス・アプリケーションの第1の部分を受け取ることができる。付加的に又は代替的に、デバッグ・コンポーネント204は、デバッグ・プロセスに基づいて、サーバレス・アプリケーションの第1の部分の変更されたバージョンを生成することができる。デバッグ・コンポーネント204はまた、ネットワーク116を介して、サーバレス・アプリケーションの第1の部分の変更されたバージョンをサーバレス・コンピューティング・コンポーネント102に伝送することができる。付加的に又は代替的に、デバッグ・コンポーネント204は、デバッグ・セッションと関連したリアルタイム・データを生成することができる。リアルタイム・データは、デバッグ・プロセスにより生成される出力データ、及び/又は、デバッグ・プロセスと関連した統計データとすることができる。リアルタイム・データはまた、サーバレス・アプリケーションの第1の部分と関連した1つ又は複数のエラーを識別することもできる。デバッグ・コンポーネント204はまた、ネットワーク116を介して、リアルタイム・データをサーバレス・コンピューティング・コンポーネント102に伝送することもできる。1つの態様において、デバッグ・コンポーネント204は、サーバレス・コンピューティング・コンポーネント102(例えば、サーバ又はサーバレス・コンピューティング・コンポーネント102と関連したサーバレス・コンピューティング・システム)によるサーバレス・アプリケーションの第2の部分の実行とほぼ同時に、サーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションを実行することができる。
コンピューティング・デバイス114(例えば、識別コンポーネント202及び/又はデバッグ・コンポーネント204)は、人間が実行できない(例えば、一人の人間の知性の能力を上回る)サーバレス・アプリケーションの少なくとも一部と関連したデバッグ・プロセスを実行することを理解されたい。例えば、特定の期間にわたって、サーバレス・アプリケーションの少なくとも一部と関連したデバッグ・プロセスを実行しているときに処理されるデータ量、サーバレス・アプリケーションの少なくとも一部と関連したデバッグ・プロセスを実行しているときのデータ処理速度、及び/又はコンピューティング・デバイス114(例えば、識別コンポーネント202及び/又はデバッグ・コンポーネント204)により処理されるデータ・タイプは、同じ期間にわたって、一人の人間の知性により処理できる量、速度及びデータ・タイプと比べて大きく、速く、そして、それらとは異なり得る。また、コンピューティング・デバイス114(例えば、識別コンポーネント202及び/又はデバッグ・コンポーネント204)は、サーバレス・アプリケーションと関連した上記の1つ又は複数のプロセスも実行しながら、1つ又は複数の他の機能(例えば、完全に電源オンする、完全に実行する等)の実行に向けて完全に動作可能でもあり得る。さらに、コンピューティング・デバイス114(例えば、識別コンポーネント202及び/又はデバッグ・コンポーネント204)により生成される出力は、ユーザにより手動で取得できない情報を含むことがある。例えば、デバッグ・プロセスにより生成される情報の量、及び/又は、サーバレス・アプリケーションにより生成される種々の情報は、ユーザにより手動で取得される情報よりも複雑である場合がある。
図3は、本明細書で説明される1つ又は複数の実施形態によるサーバレス・アプリケーションのサブセットのリホストを容易にする、限定されない例示的システム300のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
システム300は、コンピューティング・デバイス114及びサーバ302を含むことができる。コンピューティング・デバイス114は、ネットワーク116を介して、サーバ302と通信することができる。1つの実施形態において、サーバ302は、サーバレス・コンピューティング・コンポーネント102を含むことができる。代替的な実施形態において、サーバレス・コンピューティング・コンポーネント102は、サーバ302と通信する別のサーバ上に実装することができる。
システム300は、サーバレス・アプリケーションの残りの部分がサーバ302と関連したクラウド・プラットフォームにより実行される間、デバッグされるサーバレス・アプリケーションの部分のみが、コンピューティング・デバイス114と関連したデバッグ経路を通して与えられる、ハイブリッド実行モデルを可能にするサーバレス・プラットフォームとすることができる。従って、サーバレス・プラットフォームの特性(例えば、サーバレス・アプリケーションを書くために通常用いられる特性)を利用して、デバッグのためにサーバレス・アプリケーションの1つ又は複数の関数を削除し、コンピューティング・デバイス114にオフロードすることが可能である。コンピューティング・デバイス114は、例えば、サーバレス・アプリケーションのためのオフロード・ターゲットとすることができる。本明細書で用いられる場合、「オフロード・ターゲット」とは、サーバレス・アプリケーションに対するデバッグ・セッションが実行されるマシンとすることができる。特定の実施形態において、サーバレス・デバッガをサーバレス・アプリケーションとして書くことができる。付加的に、サーバ302と関連したクラウド・プラットフォームからサーバレス・アプリケーションの1つ又は複数の関数をオフロードすることによって、コンピューティング・デバイス114を介するネイティブ・デバッグ経験をユーザに提供することができる。例えば、サーバ302と関連したサーバレス・アプリケーションの関数が特定のプログラミング言語で書かれる場合、コンピューティング・デバイス114と関連したデバッガのユーザは、ネイティブ・デバッガ又はユーザが好む別のデバッガを使用することができる。本明細書で用いられる場合、「関数」とは、イベントに応答して実行されるコンピュータ・コードとすることができる。特定の実施形態において、関数は、引数タプル形式の入力(x1、...、xn)を受け取り、結果タプル(r1、...、rm)を返すことができる。関数の実行はまた、関数により生成される戻り値とは別個のログ記録(l1、...、lt)のシーケンスを生成することもできる。限定されない例において、サーバレス・アプリケーションが特定の関数a乃至fの出力を提供し、fの出力を別の関数bに提供する場合、関数シーケンスは、a→f→bの関数シーケンスと考えることができる。さらに、シーケンスの結果は、関数シーケンスにおける最終関数の結果と考えることができる。別の限定されない例において、fの実行が、何らかのイベントeによりトリガされるようにプログラミングされる場合、
を規則と考えることができ、fは、イベント・トリガ型アクションと考えることができる。
特定の実施形態において、サーバレス・プラットフォームのサーバレス・アプリケーションのサブセットを、コンピューティング・デバイス114上でリホストすることができる。例えば、サーバレス・アプリケーション304の第1の部分304aは、コンピューティング・デバイス114により実行することができ、サーバレス・アプリケーション304の第1の部分304bは、サーバ302及び/又はサーバレス・コンピューティング・コンポーネント102により実行することができる。サーバレス・アプリケーション304の第1の部分304aは、例えば、コンピューティング・デバイス114によりデバッグされるサービス・アプリケーション304の一部とすることができる。例えば、サーバレス・アプリケーション304の第1の部分304aは、デバッグ目的で利用することができる。付加的に、サーバレス・アプリケーション304の第1の部分304aが特定のサーバレス・プラットフォーム(例えば、サーバ302)による実行に適していないとの判断に応答して、代替的なコンピューティング環境において、サーバレス・アプリケーション304の第1の部分304aを実行することができる(例えば、サーバレス・アプリケーション304の第1の部分304aは、コンピューティング・デバイス114により実行することができ、サーバレス・アプリケーション304の第2の部分304bは、サーバ302により実行することができる)。
限定されない例において、コンピューティング・デバイス114は、デバッグされる関数fを識別することができる。コンピューティング・デバイス114を介して関数fをデバッグするとき、サーバ302の基本入力−出力期待値を保持することができる。従って、サーバ302により実行されるとき、関数fが(r
1、...、r
m)を返し、ログ(l
1、...、l
t)を生成する場合、コンピューティング・デバイス114により実行される関数fのデバッグされたバージョンは、同一の結果をもたらすことができる。さらに、関数fが、サーバ302により実行される他の構成子(construct)をもたらす場合、他の構成子は、あたかもデバッグ・セッションが進行中でなかったかのように、サーバ302を介して実行し続けることができる。例えば、関数fはが関数評価のシーケンスa→f→bの一部として実行される場合、又は、関数fがイベント・トリガ型アクション
である場合、両方の構成子は、あたかも関数fがデバッグされなかったかのように同じ結果を何度も実行することができる。
1つの実施形態において、コンピューティング・デバイス114及びサーバ302は、サーバレス実行環境として一緒に実装することができる。1つの態様において、サーバレス実行環境は、スタンドアロンの関数(例えば、いずれのトリガ・イベントにもリンクされないサブルーチン)の作成と関連したプリミティブ操作のセットをサポートすることができる。さらに、サーバレス実行環境はまた、アプリケーション定義のパラメータ化されたトリガの作成を容易にすることができる。サーバレス実行環境はまた、イベント・ソースのプログラマチック作成及び破壊も容易にすることができる。従って、トピックのセットを場当たり的方法で拡張及び減少することができる。付加的に、サーバレス・プラットフォームは、これらのトリガの発動をプログラムでサポートすることができる。イベントのプログラミングの発動に渡されるパラメータは、トリガと関連したイベント・トリガ型アクションのセットへの入力として渡すことができる。さらに、サーバレス実行環境は、こうしたアプリケーション定義のトリガを関数の実行に結合させるカスタム規則の作成を容易にすることができる。サーバレス実行環境はまた、コードのクローン化を回避するために、関数バインディング(function binding)のサポートを容易にすることもできる。1つの態様において、サーバレス実行環境は、カリー化形式の部分評価をサポートすることができ、それにより関数f(x1、x2、...、xn)を新しい名前gにバインドすることができ、その結果、g(x2、...、xn)=f(x1)となる。従って、コード・スキュー(code skew)のようなハザードを最小にすること、及び/又はサーバレス・アプリケーションの性能を向上させることができる。
別の実施形態において、コンピューティング・デバイス114は、サーバレス・アプリケーション304の第1の部分304aの実行中、バインディング・プロセスを用いて、x2、...、xnだけが分かっている文脈において関数fの実行を可能にすることができる。例えば、サーバレス・アプリケーション304の第1の部分304aと関連したデバッグ・プログラムが、デバッグ・プログラムの完了を容易にするために付加的なパラメータx1を必要とする場合、バインディングは、サーバレス・アプリケーション304の第1の部分304aをクローン化及び変更する必要なしに、関数fを装うことができる関数gの作成を可能にする。別の実施形態において、サーバレス・アプリケーション304の第1の部分304aは、サーバレス・アプリケーション304の単一の関数とすることができる。従って、サーバレス・アプリケーション304の単一の関数を、サーバ302から抽出し、コンピューティング・デバイス114上で実行することができる(例えば、サーバレス・アプリケーション304の単一の関数は、サーバレス実行プラットフォームとは別個のマシン上で実行することができる)。一例において、単一の関数から、構成子のセットを作成することができる。構成子のセットは、継続渡しを用いて単一の関数を実装することができる。このことは、コンピューティング・デバイス114により実行されるデバッグ・プロセスが、サーバレス実行プラットフォームにおける1つ又は複数の他の処理の機能なしに、単一の関数の実行をサスペンドすることを可能にする。
図4は、本明細書で説明される1つ又は複数の実施形態によるデバッグ・セッションを容易にする、限定されない例示的システム400のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
システム400は、インターフェース・コンポーネント104、リライタ・コンポーネント106、ブローカ・コンポーネント108、及びコンピューティング・デバイス114を含む。インターフェース・コンポーネント104、リライタ・コンポーネント106、及びブローカ・コンポーネント108は、サーバレス・クラウド・コンピューティング・プラットフォームと関連付けることができる。コンピューティング・デバイス114は、クライアント・プラットフォームと関連付けることができる。リライタ・コンポーネント106は、トリガ・コンポーネント402、プロキシ・コンポーネント404、ログ・コンポーネント406、及び/又はエラー条件コンポーネント408を含むことができる。トリガ・コンポーネント402、プロキシ・コンポーネント404、ログ・コンポーネント406、及び/又はエラー条件コンポーネント408は、コンピューティング・デバイス114により実行されるデバッグ・セッション410の実行を容易にすることができる。図4に示される実施形態において、システム400は、本明細書で説明される1つ又は複数の実施形態による、サーバレス・クラウド・コンピューティング・プラットフォームに対する正常なデバッグ・セッションについてのプロセス・フローを示すことができる。図4に示される代替的な実施形態において、システム400は、サーバレス・クラウド・コンピューティング・プラットフォームに対する異常終了(abort)のデバッグ・セッションについてのプロセス・フローを示すことができる。
1つの実施形態において、コンピューティング・デバイス114は、インターフェース・コンポーネント104及び/又はブローカ・コンポーネント108により容易にされるブローカリング(brokering)通信を介してリライタ・コンポーネント106と通信することができる。例えば、リライタ・コンポーネント106は、コンピューティング・デバイス114と間接的に通信することができる。1つの態様において、デバッグ・セッション410は、コンピューティング・デバイス114上に実装されるデバッガ・アプリケーションを介して、コンピューティング・デバイス114上で実行することができる。例えば、デバッグ・セッション410は、サーバレス・アプリケーション304の第1の部分304aを実行することができる。別の態様において、ブローカ・コンポーネント108は、リライタ・コンポーネント106とコンピューティング・デバイス114との間の通信を容易にするためのサービス・ブローカとすることができる。一例において、ブローカ・コンポーネント108は、仮想プライベート・ネットワーク(VPN)トンネリング・サービス(例えば、コモディティVPNサービス)を用いて、リライタ・コンポーネント106とコンピューティング・デバイス114との間の通信を容易にすることができる。従って、リライタ・コンポーネント106とコンピューティング・デバイス114との間にセキュリティ保護(secure)トンネルを設けることができる。コンピューティング・デバイス114上でインストール・ステップを実行し、リライタ・コンポーネント106とコンピューティング・デバイス114との間のセキュリティ保護トンネルに関する1つ又は複数のVPN資格証明(credentials)を獲得することができる。特定の実施形態において、1つ又は複数のVPN資格証明の獲得は、例えば、オフロード・ターゲット登録要求、アップストリーム・ハンドオフ・デバッグ開始要求等のような要求について監視するクラウド・サービスを介して達成することができる。この要求は、例えば、コンピューティング・デバイス114と関連したユーザ識別の既存のサーバレス・プラットフォームの資格証明を伴うことがある。さらに、ブローカ・コンポーネント108は、1つ又は複数のVPN資格証明を用いて、リライタ・コンポーネント106とコンピューティング・デバイス114とをセキュリティ保護された方法で接続することができる。しかしながら、コンピューティング・デバイス114が、リライタ・コンポーネント106により直接アクセス可能である特定の実施形態においては、コンピューティング・デバイス114は、リライタ・コンポーネント106との直接通信を開始することができる(例えば、ブローカ・コンポーネント108を用いずに)。
1つの実施形態において、コンピューティング・デバイス114によりデバッグされるサーバレス・アプリケーション304の第1の部分304a(例えば、サーバレス・アプリケーションの1つ又は複数の関数)に基づいて、リライタ・コンポーネント106により、アーチファクトのセット(例えば、アセットのセット)を生成することができる。アーチファクトのセットは、例えば、トリガ・コンポーネント402により生成される第1のアーチファクトを含むことができる。第1のアーチファクトは、トリガ・コンポーネント402によって生成される完了時(on−done)トリガTに関連し得る。例えば、デバッグされた関数は、トリガ・コンポーネント402によって生成される完了時トリガTに基づいて生成することができる(例えば、デバッグ・セッションが完了したとき)。デバッグされた関数は、ログ記録(l1、...、lt)を含み、結果(r1、...、rm)を返すことができる。トリガ・コンポーネント402によって生成される完了時トリガTは、T(r1、...、rt、l1、...,lt)として生成及び実行することができる。
付加的に又は代替的に、アーチファクトのセットは、プロキシ・コンポーネント404により生成される第2のアーチファクトを含むことができる。第2のアーチファクトは、プロキシ・コンポーネント404により生成されるアップストリーム・ハンドオフ関数Uに関連し得る。アップストリーム・ハンドオフ関数Uは、サーバ302とコンピューティング・デバイス114との間のプロキシとしての機能を果たすことができる。例えば、単一の関数fが、タイプ
を含む場合、アップストリーム・ハンドオフ関数Uは、タイプ
を含むことができる。アップストリーム・ハンドオフ関数Uは、完了時トリガT及びサーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)に基づいて、サーバレス・アプリケーション304の第1の部分304aについてのソースを獲得することができる。アップストリーム・ハンドオフ関数Uはまた、コンピュータ・コード、完了時トリガT、及び/又はパラメータのセット(x
1、...、x
n)をコンピューティング・デバイス114に送ることもできる。1つの態様において、アップストリーム・ハンドオフ関数Uは、バウンド形式(bound form)U
f=U(T,f)を作成することにより、あたかも単一の関数fであるかのようにコンピューティング・デバイス114に提示することができる。このように、アップストリーム・ハンドオフ関数のバウンド形式U
f及びサーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)は、対応するタイプのシグネチャを含むことができ、従って、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)を用いる構成子のセット(例えば、シーケンス又は規則のセット)として用いることができる。
付加的に又は代替的に、アーチファクトのセットは、ログ・コンポーネント406により生成される第3のアーチファクトを含むことができる。第3のアーチファクトは、ログ・コンポーネント406により生成されるダウンストリーム・ハンドオフ関数Dに関連し得る。サーバレス・アプリケーション304の第2の部分304bが、あたかもサーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)がコンピューティング・デバイス114によりデバッグされていないかのように実行されることを可能にするために、第3のアーチファクトを、ログ・コンポーネント406により生成することができる。第3のアーチファクトは、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)の実行の完了を表すことができる。従って、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)の呼び出しについての結果又はログ記録に関するあらゆる後のクエリを適切に供することができる。サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)が(r
1、...、r
m)を戻し、ログ記録(l
1、...、l
t)を作成する場合、ダウンストリーム・ハンドオフ関数Dは、D(r
1、...、r
m、l
1、...、l
t)と等しい。さらに、ダウンストリーム・ハンドオフ関数Dは、(r
1、...、r
m、l
1、...、l
t)と関連付けられた値を返す及び/又はログ記録する。付加的に又は代替的に、アーチファクトのセットは、ログ・コンポーネント406により生成される第4のアーチファクトを含むことができる。第4のアーチファクトは、ログ・コンポーネント406により生成される継続規則Rに関連し得る。継続規則Rは、サーバ302に、
を介して、ダウンストリーム・ハンドオフ関数Dをイベント・トリガ型アクションに変化させるよう、命令することができ、ここで、イベント・トリガ型アクションは、デバッグ・セッション410に関連したイベントと関連付けられる。
付加的に又は代替的に、アーチファクトのセットは、エラー条件コンポーネント408により生成される第5のアーチファクトを含むことができる。第5のアーチファクトは、エラー条件コンポーネント408により生成される回路ブレーカ関数Cに関連し得る。特定の実施形態において、第5のアーチファクトは、デバッグ・セッション410に関連したエラーと関連付けられた実行経路のために作成することができる。例えば、サーバレス・アプリケーション304の第1の部分304aのデバッグが完了する前に、コンピューティング・デバイス114が、デバッグ・セッション410を早期に終了することがある。別の例において、デバッグ・セッション410と関連したデバッガにおいて、コンピューティング・デバイス114が、デバッグ・セッションがサーバレス・アプリケーション304の第1の部分304aの実行を正常終了しないような方法で、サーバレス・アプリケーション304の第1の部分304aを修正することがある。さらに別の例において、サーバレス・アプリケーション304の第1の部分304aを実行するデバッグ・セッション410と関連付けられたオフロード・プロセスにおいてエラーが存在することがある。そうした場合、コンピューティング・デバイス114は、サーバレス・アプリケーション304の第1の部分304aの正しい実行のファサード(facade)を保持するように1つ又は複数のアクションを実行することができ、その結果、サーバレス・クラウド・コンピューティング・プラットフォームは、サーバレス・アプリケーション304の第1の部分304aが適切に実行されると判断する。例えば、アップストリーム・ハンドオフ関数Uと同じように、完了時トリガTの入力、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)、及び引数のセット(x1、...、xn)として利用する回路ブレーカ関数Cを作成することができる。回路ブレーカ関数Cは、引数のセット(x1、...、xn)に対してサーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)をプログラムで呼び出すことができる。回路ブレーカ関数Cはまた、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)の出力を用いて、完了時トリガTを実行することもできる。エラー条件の検出に応答して、コンピューティング・デバイス114は、回路ブレーカ関数Cと関連した第5のアーチファクトを呼び出すことができる。
特定の実施形態において、アップストリーム・ハンドオフ関数Uは、コンピューティング・デバイス114に、要求されるデバッグ・セッションを通知することができる。コンピューティング・デバイス114は、完了時トリガTを、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)についての関数ソースにインジェクトすることができる。コンピューティング・デバイス114はまた、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)を処理することができるデバッグ・セッション410のデバッガ・アプリケーションを判断及び/又はコンパイルすることもできる。完了時トリガTを、サーバレス・アプリケーション304の第1の部分304a(例えば、単一の関数f)にインジェクトするために、コンピューティング・デバイス114は、完了時トリガ・アルゴリズムを実行することができる。サーバレス・アプリケーション304の第1の部分304aと関連した関数がfと呼ばれ、完了時トリガはTと呼ばれ、関数fが特定のプラミング言語で書かれる例において、オフロード・ターゲット・アルゴリズムは、以下のコンピュータ・コードを生成することができる。
fire(発動)コマンド「fire()」は、所定の記録により所定のトリガを発動するために、サーバ302との通信を容易にすることができる。ダウンストリーム・ハンドオフ関数Dを生成して、所定の結果とログ記録のセットの解釈を容易にすることができる。完了時トリガTをインジェクトした後、コンピューティング・デバイス114上のデバッグ・セッション410と関連したコンパイラ及びデバッガは、関数fの呼び出しを決定することができる。例えば、サーバレス・アプリケーション304の第1の部分304aが特定のプログラミング言語で書かれる場合、コンピューティング・デバイス114は、特定のプログラミング言語のためのコンパイラを用いて、サーバレス・アプリケーション304の第1の部分304aをコンパイルし、次に、特定のプログラミング言語のためのデバッガを呼び出すことができる。回路ブレーカ関数Cを呼び出すべきかどうかを決定するために、コンピューティング・デバイス114は、特定のアクティビティ(例えば、デバッグ・プロセスからの予期しない終了、デバッグ・プロセスからの早期終了等)について、デバッグ・セッション410と関連したコンパイラ及びデバッガを監視することができる。
図5は、本明細書で説明される1つ又は複数の実施形態によるデバッグ・セッションを容易にする、限定されない例示的システム500のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
図5に示される実施形態において、システム500は、関数シーケンスA→B→Cに対するデバッグを示す。例えば、コンピューティング・デバイス114により生成される識別子データは、コンピューティング・デバイス114のデバッグ・セッション410を介してデバッグされるべき関数Bを識別することができる。関数Bは、少なくとも関数A及び関数Cと関連付けることができる。例えば、関数Bは、関数Aが情報を関数Bに提供し、関数Bがデータを関数Cに提供する関数シーケンスにおいて存在し得る。従って、リライタ・コンポーネント106は、関数A及び関数Bがサーバレス・クラウド・コンピューティング・プラットフォーム(例えば、サーバ302と関連したサーバレス・クラウド・コンピューティング・プラットフォーム)により実行される間、コンピューティング・デバイス114により実行される関数Bをコンピューティング・デバイス114に提供することができる。
関数A、関数B及び関数Cをコンピューティング・デバイスへオフロードするのではなく、コンピューティング・デバイス114と関連したオフロードを関数Bに限定することは、関数A、関数B及び関数Cと関連したサーバレス・アプリケーションのコンピューティング性能の低下を最小にするのを助長することができる。さらに、特定の実施形態において、関数A及び関数Cが、デバッグ・セッション410によりサポートされないプログラミング言語で書かれていることがある。例えば、関数Bは、第1のプログラミング言語で書かれ、関数A及び関数Cは、第1のプログラミング言語とは異なる少なくとも第2のプログラミング言語で書かれることがある。
コンピューティング・デバイス114への関数Bのオフロードを容易にするために、リライタ・コンポーネント106により、アーチファクトのセットを生成することができる。例えば、リライタ・コンポーネント106は、関数Aと関連した第1のシーケンスS1、及び関数Bと関連した第2のシーケンスS2を生成することができる。第1のシーケンスS1は、S1=a→Ubと等しくなることができ、ここでUbは、関数Bに対して作成される、プロキシ・コンポーネント404と関連したアップストリーム・ハンドオフ関数である。第2のシーケンスS2は、S2=Db→cと等しくなることができ、ここでDbは、関数Bに対して作成される、ログ・コンポーネント406と関連したダウンストリーム・ハンドオフ関数である。
関数Bをデバッグするとき、継続規則は、ダウンストリーム・ハンドオフ関数Dbの呼び出しをトリガすることができる。関数Bと関連したシーケンスをスプライスするとき、継続規則は、代替的に、第2のシーケンスS2を呼び出すことができる。従って、第1のシーケンスS1及び第2のシーケンスS2を呼び出す正味の影響は、オリジナル・シーケンスSが呼び出された場合と同じであり得る。従って、第2のシーケンスS2の出力は、オリジナル・シーケンスSの出力と合致し、構成アクションについての呼び出しの全ての介在するログ及び記録を保持することができる。
1つの実施形態において、デバッグ・セッション410は、ログ記録及び/又は呼び出し記録を減らすことにより、さらに最適化することができる。例えば、デバッグ・セッション410は、ダウンストリーム・ハンドオフ関数D
bなしに実行することができる。ダウンストリーム・ハンドオフ関数D
bは、関数Bと関連した呼び出しの完了を反映するログ及びアクティブ化記録を提供するように作成できるので、関数Bについてのログ及び結果記録を最小限にし、第2のシーケンスS
2を関数Cから始めることができる。第2のシーケンスS
2を用いて、オリジナル・シーケンスSによる出力の生成を容易にすることができる。従って、特定の実施形態において、デバッグ・セッション410は、ダウンストリーム・ハンドオフ関数D
bなしに実行することができる。特定の実施形態において、関数Bは、規則のセットに基づいて、デバッグ・セッション410を介してデバッグすることができる。例えば、関数Bは、規則のセットに基づいてデバッグされるイベント駆動型関数とすることができる。限定されない例において、デバッグされる関数Bが規則
の一部である場合、アーチファクトのセットを作成することができる。新しい規則
を作成することができ、ここで、U
fは、関数Bについて作成されたアップストリーム・ハンドオフ関数である。さらに、特定の実施形態において、デバッグ可能な関数を作成するとき、コンピューティング・デバイス114は、デバッグ可能な関数がオリジナル関数の名前を選択する(co-opt)かどうかを決定することができる。例えば、関数Bをデバッグするとき、コンピューティング・デバイス114は、一時的に、関数Bの名前を関数B’に変更し、アップストリーム・ハンドオフ関数U
fを関数Bと命名するかどうかを決定する。1つの態様において、関数Bと対話するための既存のインターフェースが、関数B’を用いることができる。1つの態様において、デバッグ・セッション410は、アップストリーム・ハンドオフ関数U
fに、関数Bの名前を用いるよう選択させることにより開始することができる。別の態様において、デバッグ・セッション410は、関数Bからアップストリーム・ハンドオフ関数U
fへの内部マッピングを維持することができる。
図6は、本明細書で説明される1つ又は複数の実施形態による、サーバレス・アプリケーションと関連したデバッグ・セッションを容易にするための、限定されない例示的コンピュータ実施方法600のフロー図を示す。1つの実施形態において、方法600は、サーバレス・コンピューティング・コンポーネント102と関連付けることができる。602において、コンピューティング・デバイスから、プロセッサに動作的に結合されたシステムにより(例えば、インターフェース・コンポーネント104により)、コンピューティング・デバイスによりリホストされるサーバレス・アプリケーションの第1の部分を識別する識別子データを受け取り、システムは、ネットワーク・デバイスを介してコンピューティング・デバイスと通信する。604において、システムにより(例えば、インターフェース・コンポーネント104又はブローカ・コンポーネント108により)、サーバレス・アプリケーションの第1の部分をコンピューティング・デバイスに伝送する。606において、システムにより(例えば、リライタ・コンポーネント106により)、コンピューティング・デバイスを介して、サーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションの性能を促進させる。608において、システムにより(例えば、リライタ・コンポーネント106により)、サーバレス・アプリケーションの第2の部分を実行する。付加的に又は代替的に、サーバ及び/又はシステムと関連したサーバレス・クラウド・コンピューティング・プラットフォームにより、サーバレス・アプリケーションの第2の部分を実行することができる。1つの実施形態において、方法600は、システムにより(例えば、インターフェース・コンポーネント104により)、コンピューティング・デバイスから、サーバレス・アプリケーションの第1の部分の変更されたバージョンを受け取ることをさらに含むことができる。付加的に、方法600は、システムにより(例えば、リライタ・コンポーネント106により)、サーバレス・アプリケーションの第1の部分の変更されたバージョンを、サーバレス・アプリケーションの第2の部分と結合することをさらに含むことができる。特定の実施形態において、方法600は、システムにより(例えば、リライタ・コンポーネント106により)、デバッグ・セッションと関連したリアルタイム・データに基づいて、サーバレス・アプリケーションの第2の部分を実行することをさらに含むことができる。さらに、特定の実施形態において、方法600は、(例えば、サーバレス・アプリケーションと関連したエラーの数の低減を促進するため、及び/又は、サーバレス・アプリケーションの性能の改善を促進するために)コンピューティング・デバイスがサーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションを実行する間、サーバレス・アプリケーションの第2の部分を実行することをさらに含むことができる。
図7は、本明細書で説明される1つ又は複数の実施形態による、サーバレス・アプリケーションと関連したデバッグ・セッションを容易にするための、限定されない例示的コンピュータ実施方法700のフロー図を示す。1つの実施形態において、方法700は、コンピューティング・デバイス114と関連付けることができる。702において、プロセッサに動作的に結合されたシステムにより(例えば、識別コンポーネント202により)、サーバレス・アプリケーションの第1の部分と関連した識別子データを判断する。704において、システムにより(例えば、識別コンポーネント202により)、ネットワーク・デバイスを介して、識別子データをサーバレス・コンピューティング・システムに伝送する。706において、システムにより(例えば、デバッグ・コンポーネント204により)、サーバレス・コンピューティング・システムから、サーバレス・アプリケーションの第1の部分を受け取る。708において、システムにより(例えば、デバッグ・コンポーネント204により)、サーバレス・コンピューティング・システムによるサーバレス・アプリケーションの第2の部分の実行とほぼ同時に、サーバレス・アプリケーションの第1の部分と関連したデバッグ・セッションを実行する。1つの実施形態において、方法700は、システムにより(例えば、識別コンポーネント202又はデバッグ・コンポーネント204により)、ネットワーク・デバイスを介して、サーバレス・コンピューティング・システムと通信することをさらに含むことができる。別の実施形態において、方法700は、システムにより(例えば、デバッグ・コンポーネント204により)、サーバレス・アプリケーションの第1の部分の変更されたバージョンをサーバレス・コンピューティング・システムに伝送することをさらに含むことができる。さらに別の実施形態において、方法700は、システムにより(例えば、デバッグ・コンポーネント204により)、デバッグ・セッションと関連したリアルタイム・データをサーバレス・コンピューティング・システムに伝送することをさらに含むことができる。特定の実施形態において、方法700は、ネットワーク・デバイスを介してサーバレス・コンピューティング・システムと通信するコンピューティング・デバイスによってデバッグ・アプリケーションを用いることを含むことができる。
説明を簡単にするために、コンピュータ実施方法は、一連の動作として示され、説明される。本革新は、示される動作、及び/又は動作の順序に限定されるものではなく、例えば、動作は、様々な順序で及び/又は同時に行われ、他の動作は本明細書に提示及び説明されないことを認識及び理解されたい。さらに、開示される主題によるコンピュータ実施方法を実施するために、全ての示される動作を必要としないことがある。さらに、当業者であれば、コンピュータ実施方法を、状態図又はイベントを介して一連の相関状態として代替的に表すこともできることを理解及び認識するであろう。付加的に、以下に及び本明細書の全体を通して開示されるコンピュータ実施方法は、こうしたコンピュータ実施方法をコンピュータに伝送及び転送するのを容易にするために、物品上に格納することができる。本明細書で用いられる場合、物品という用語は、あらゆるコンピュータ可読デバイス又はストレージ媒体からアクセス可能なコンピュータ・プログラムを含むように意図される。
さらに、少なくともサーバレス・アプリケーションを実行し、ネットワーク(例えば、コンピューティング・デバイスとサーバとの間の通信)を介してサーバレス・アプリケーションの一部を伝送することは、電気的及び機械的コンポーネント及び回路の組み合わせから確立されるので、人間は、サーバレス・コンピューティング・コンポーネント(例えば、サーバレス・コンピューティング・コンポーネント102)及び/又はコンピューティング・デバイス(例えば、本明細書に開示されるコンピューティング・デバイス114)により実行される処理を再現又は実行することはできない。例えば、人間は、サーバレス・コンピューティング・コンポーネントを実行することができず、かつ、コンピューティング・デバイスとサーバ等との間のサーバレス・アプリケーションと関連したデータ及び/又はパケット化されたデータを通信することができない。
開示される主題の種々の態様についての文脈を与えるために、図8及び以下の説明は、開示される主題の種々の態様を実装できる適切な環境の一般的な説明を提供するように意図される。図8は、本明細書に説明される1つ又は複数の実施形態を容易にすることができる限定されない例示的動作環境のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
図8を参照すると、本開示の種々の態様を実施するための好適な動作環境800が、コンピュータ812を含むこともできる。コンピュータ812は、処理ユニット814、システム・メモリ816及びシステム・バス818を含むこともできる。システム・バス818は、これに限定されるものではないが、システム・メモリ816を含むシステム・コンポーネントを処理ユニット814に結合する。処理ユニット814は、種々の利用可能なプロセッサのいずれかとすることができる。二重マイクロプロセッサ及び他のマルチプロセッサ・アーキテクチャを処理ユニット814として用いることもできる。システム・バス818は、メモリ・バス又はメモリ・コントローラ、周辺バス又は外部バス、及び/又は、これらに限定されるものではないが、業界標準アーキテクチャ(ISA)、マイクロ・チャネル・アーキテクチャ(MSA)、拡張ISA(EISA)、Intelligent Drive Electronics(IDE)、VESA Local Bus(VLB)、Peripheral Component Interconnect(PCI)、カード・バス、ユニバーサル・シリアル・バス(USB)、Advanced Graphics Port(AGP)、Firewire(IEEE1394)、及びSmall Computer Systems Interface(SCSI)を含む任意の種々の利用可能なバス・アーキテクチャを用いたローカル・バスを含む、幾つかのタイプのバス構造体のいずれかとすることができる。
システム・メモリ816はまた、揮発性メモリ820及び不揮発性メモリ822を含むこともできる。起動の際などにコンピュータ812内の要素間で情報を転送するための基本ルーチンを含む基本入力/出力システム(BIOS)は、不揮発性メモリ822内に格納される。コンピュータ812はまた、取り外し可能/取り外し不能な揮発性/不揮発性コンピュータ・ストレージ媒体を含むこともできる。図8は、例えば、ディスク・ストレージ824を示す。ディスク・ストレージ824は、これらに限定されるものではないが、磁気ディスク・ドライブ、フロッピー・ディスク・ドライブ、テープ・ドライブ、Jazドライブ、Zipドライブ、LS−100ドライブ、フラッシュ・メモリ・カード、又はメモリ・スティックのようなデバイスを含むこともできる。ディスク・ストレージ824は、別個に又は他のストレージ媒体と組み合わせてストレージ媒体を含むこともできる。システム・バス818へのディスク・ストレージ824の接続を容易にするために、一般的に、インターフェース826のような、取り外し可能又は取り外し不能インターフェースが用いられる。図8は、ユーザと好適な動作環境800において説明される基本コンピュータ・リソースとの間の媒介として働くソフトウェアも示す。そうしたソフトウェアは、例えば、オペレーティング・システム828を含むこともできる。ディスク・ストレージ824上に格納することができるオペレーティング・システム828は、コンピュータ812のリソースを制御し、割り当てるように働く。
システム・アプリケーション830は、例えばシステム・メモリ816内又はディスク・ストレージ824上に格納された、プログラム・モジュール832及びプログラム・データ834を通じたオペレーティング・システム828によるリソースの管理を利用する。この開示は、種々のオペレーティング・システム、又はオペレーティング・システムの組み合わせにより実施できることを認識されたい。ユーザは、入力デバイス836を通じてコマンド又は情報をコンピュータ812に入力する。入力デバイス836は、これらに限定されるものではないが、マウス、トラックボール、スタイラス、タッチ・パッドのようなポインティング・デバイス、キーボード、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星放送受信アンテナ、スキャナ、TVチューナ・カード、デジタル・カメラ、デジタル・ビデオ・カメラ、ウェブ・カメラ等を含む。これら及び他の入力デバイスは、インターフェース・ポート838を介してシステム・バス818を通じて処理ユニット814に接続される。インターフェース・ポート838は、例えば、シリアル・ポート、パラレル・ポート、ゲーム・ポート及びユニバーサル・シリアル・バス(USB)を含む。出力デバイス840は、同じタイプのポートの一部を入力デバイス836として使用する。従って、例えば、USBポートを用いて、コンピュータ812への入力を提供し、出力情報をコンピュータ812から出力デバイス840に提供することができる。出力アダプタ842は、特別なアダプタを必要とする他の出力デバイス840の中でも、モニタ、スピーカ及びプリンタのような幾つかの出力デバイス840があることを示すように提供される。出力アダプタ842は、限定ではなく例示として、出力デバイス840とシステム・バス818との間の接続手段を提供するビデオ及び音声カードを含む。遠隔コンピュータ844のような、他のデバイス及び/又はデバイスのシステムは、入力及び出力の機能の両方を提供することに留意されたい。
コンピュータ812は、遠隔コンピュータ844のような1つ又は複数の遠隔コンピュータへの論理接続を用いるネットワーク化環境で動作することができる。遠隔コンピュータ844は、コンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサ・ベースのアプライアンス、ピア・デバイス、又は他の共通ネットワーク・ノード等とすることができ、一般的に、コンピュータ812に関して記載される要素の多く又は全てを含むこともできる。簡潔にするために、メモリ・ストレージ・デバイス846だけが、遠隔コンピュータ844と共に示されている。遠隔コンピュータ844は、ネットワーク・インターフェース848を通じてコンピュータ812に論理的に接続され、次に、通信接続850を介して物理的に接続される。ネットワーク・インターフェース848は、ローカル・エリア・ネットワーク(LAN)、広域エリア・ネットワーク(WAN)、セルラー・ネットワーク等のような有線及び/又は無線通信ネットワークを含む。LAN技術として、Fiber Distributed Data Interface(FDDI)、Copper Distributed Data Interface(CDDI)、イーサネット、トークン・リング等が挙げられる。WAN技術として、これらに限定されるものではないが、ポイント・ツー・ポイント・リンク、統合サービス・デジタル網(Integrated Service Digital Networks:ISDN)及びその変形のような回路交換網、パケット交換網、及びデジタル加入者線(Digital Subscriber Line:DSL)が挙げられる。通信接続850は、ネットワーク・インターフェース848をシステム・バス818に接続するために用いられるハードウェア/ソフトウェアに関する。通信接続850は、ネットワーク・インターフェース848をシステム・バス818に接続するために用いられるハードウェア/ソフトウェアを指す。通信接続850は、明確に示すためにコンピュータ812内部に示されるが、これはコンピュータ812の外部にあってもよい。ネットワーク・インターフェース848への接続のためのハードウェア/ソフトウェアは、例示のためだけに、正規電話グレード・モデム(regular telephone grade modem)、ケーブル・モデム及びDSLモデム、ISDNモデムを含むモデム、ISDNアダプタ、及びイーサネット・カードのような内部及び外部技術を含むこともできる。
本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書に述べられる技術の実装は、クラウド・コンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在知られている又は後に開発される他のあらゆるタイプのコンピューティング環境と共に実装されることが可能である。
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、及び少なくとも4つの配備モデルを含むことができる。
特徴は、以下の通りである。
オンデマンド・セルフサービス:クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、及びPDA)による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化:プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置(例えば、国、州、又はデータセンタ)を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性:機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント)に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
サービス・モデルは以下の通りである。
Software as a Service(SaaS):クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Platform as a Service(PaaS):プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Infrastructure as a Service(IaaS):コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント(例えば、ホストのファイアウォール)選択の限定された制御を有する。
配備モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド:クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項(例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、オンプレミス又はオフプレミスに存在することができる。
パブリック・クラウド:クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術(例えば、クラウド間の負荷分散のためのクラウド・バースティング)によって結び付けられる2つ又はそれより多いクラウド(プライベート、コミュニティ、又はパブリック)の混成物である。
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで図9を参照すると、例証的なクラウド・コンピューティング環境950が示される。図示のように、クラウド・コンピューティング環境950は、例えば、携帯情報端末(PDA)又は形態電話954A、デスクトップ・コンピュータ954B、ラップトップ・コンピュータ954C、及び/又は自動車コンピュータ・システム954Nなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング・デバイスが通信することができる、1つ又は複数のクラウド・コンピューティング・ノード910を含む。ノード910は、互いに通信することができる。ノード910は、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、1つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる(図示せず)。これにより、クラウド・コンピューティング環境950は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び/又はソフトウェアを提供することが可能になる。図9に示されるコンピューティング・デバイス954A〜Nのタイプは単に例示であることを意図し、コンピューティング・ノード910及びクラウド・コンピューティング環境950は、いずれのタイプのネットワーク及び/又はネットワーク・アドレス指定可能な接続上でも(例えば、ウェブ・ブラウザを用いて)、いずれのタイプのコンピュータ化された装置とも通信できることを理解されたい。
ここで図10を参照すると、クラウド・コンピューティング環境950(図9)によって提供される機能抽象化層のセットが示される。図10に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
ハードウェア及びソフトウェア層1060は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、メインフレーム1061と、RISC(Reduced Instruction Set Computer(縮小命令セット・コンピュータ))アーキテクチャ・ベースのサーバ1062と、サーバ1063と、ブレード・サーバ1064と、ストレージ・デバイス1065と、ネットワーク及びネットワーキング・コンポーネント1066とが含まれる。幾つかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア1067及びデータベース・ソフトウェア1068を含む。
仮想化層1070は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ1071、仮想ストレージ1072、仮想プライベート・ネットワークを含む仮想ネットワーク1073、仮想アプリケーション及びオペレーティング・システム1074、並びに仮想クライアント1075を提供することができる。
一例においては、管理層1080は、以下で説明される機能を提供することができる。リソース・プロビジョニング1081は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定1082は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、リソースの消費に対する課金又は請求とを提供する。1つの例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル1083は、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理1084は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント(Service Level Agreement、SLA)の計画及び履行1085は、SLAに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
ワークロード層1090は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション1091、ソフトウェア開発及びライフサイクル管理1092、仮想教室教育配信1093、データ分析処理1094、トランザクション処理1095、及び本発明の1つ又は複数の実施形態のガベージ・コレクション処理1096が含まれる。
本発明は、統合のいずれかの可能な技術的詳細レベルにおける、システム、方法、及び/又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジサーバを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体内に格納する。本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、又は、「C」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネットサービスプロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて、電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施する命令を含む製品を製造するようにすることもできる。コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
本主題は、1つのコンピュータ及び/又は複数のコンピュータ上で実行されるコンピュータ・プログラム製品のコンピュータ実行可能命令の一般的な文脈で上述されたが、当業者であれば、本開示は、他のプログラム・モジュールと組み合わせて実装する又は実装されることも可能であることを認識するであろう。一般に、プログラム・モジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、コンポーネント、データ構造などを含むことができる。さらに、当業者であれば、本発明のコンピュータ実施方法は、シングル・プロセッサ又はマルチプロセッサ・コンピュータ・システム、ミニ・コンピューティング・デバイス、メインフレーム・コンピュータ、並びにコンピュータ、手持ち式コンピューティング・デバイス(例えば、PDA、電話)、マイクロプロセッサ・ベースの又はプログラム可能なコンシューマ若しくは産業用電子機器等を含む、他のコンピュータ・システム構成で実施できることを理解するであろう。示される態様は、通信ネットワークを通じてリンクされる遠隔処理デバイスによってタスクが実行される分散型コンピューティング環境で実施することもできる。しかしながら、本開示の全てではないが一部の態様をスタンドアロン・コンピュータ上で実施することができる。分散型コンピューティング環境において、プログラム・モジュールは、ローカル及び遠隔両方のメモリ・ストレージ・デバイス内に配置することができる。
本出願において用いられるとき、「コンポーネント」、「システム」、「プラットフォーム」、「インターフェース」等の用語は、コンピュータに関連するエンティティ、又は1つ又は複数の特定の機能を有する動作マシンに関連するエンティティを指すこと、及び/又は含むことができる。本明細書に開示されるエンティティは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、又は実行中のソフトウェアとすることができる。例えば、コンポーネントは、これらに限定されるものではないが、プロセッサ上で実行されているプロセス、プロセッサ、オブジェクト、実行可能プログラム、実行のスレッド、プログラム、及び/又はコンピュータとすることができる。例証として、サーバ上で実行されているアプリケーション及びサーバの両方が、コンポーネントであり得る。1つ又は複数のコンポーネントは、プロセス及び/又は実行のスレッド内にあることができ、コンポーネントは、1つのコンピュータ上に局所化されること、及び/又は2つ又はそれより多いコンポーネント間で分散されることが可能である。別の例において、それぞれのコンポーネントは、種々のデータ構造がその上に格納された種々のコンピュータ可読媒体から実行することができる。コンポーネントは、1つ又は複数のデータ・パケットを有する信号(例えば、ローカル・システム、分散型システムにおいて、及び/又は信号を介する他のシステムと共にインターネットなどのネットワークにわたって、別のコンポーネントと対話する1つのコンポーネントからのデータ)などに従って、ローカル及び/又は遠隔プロセスを介して通信することができる。別の例において、コンポーネントは、電気若しくは電子回路により動作される機械的部品により与えられる特定の機能を有し、プロセッサにより実行されるソフトウェア又はファームウェア・アプリケーションにより動作される装置とすることができる。こうした場合において、プロセッサは、装置の内部にあっても又は外部にあってもよく、ソフトウェア又はファームウェア・アプリケーションの少なくとも一部を実行することができる。更に別の例として、コンポーネントは、機械的部品なしに電子コンポーネントを通じて特別な機能を提供する装置とすることができ、電子コンポーネントは、電子コンポーネントの機能を少なくとも部分的に与えるソフトウェア又はファームウェアを実行するためのプロセッサ又は他の手段を含むことができる。1つの態様において、コンポーネントは、例えば、クラウド・コンピューティング・システム内の仮想マシンを介して電子コンポーネントをエミュレートすることができる。
付加的に、用語「又は(or)」は、排他的「又は」ではなく包含的「又は」を意味するよう意図される。つまり、特に断らない限り又は文脈から明らかな場合、「XはA又はBを用いる」は、自然の包含的順列(natural inclusive permutation)のいずれかを意味するように意図される。つまり、XはAを用いる;XはBを用いる;又は、XはA及びBの両方を用いる場合、「XはA又はBを用いる」は、上記の例のいずれかにおいて満たされる。さらに、本の明細書及び添付の図面において使用される冠詞「1つ(a及びan)」は一般的に、特に断らない限り又は文脈から明らかな場合、「1つ又はそれ以上」を単数の形態に向けることを意味するように解釈すべきである。本明細書で用いられる場合、用語「例」及び/又は「例示的」は、例、事例、又は例証としての役割を果たすように用いられる。誤解を避けるために、本明細書に開示される主題は、こうした例に限定されない。さらに、用語「例」及び/又は「例示的」として本明細書に説明されるいずれの態様又は設計も、他の態様又は設計と比べて好ましい又は有利であるとは限らず、又は当業者には周知の同等の例示的構造及び技術を排除することを意味するものではない。
本明細書で用いられるとき、用語「プロセッサ」は、これらに限定されるものではないが、シングルコア・プロセッサ、ソフトウェア・マルチスレッド実行能力を有するシングル・プロセッサ、ハードウェア・マルチスレッド技術を有するマルチコア・プロセッサ、並列プラットフォーム、及び分散型共有メモリを有する並列プラットフォームを含む、実質的にあらゆるコンピューティング処理ユニット又はデバイスを指すことがある。付加的に、プロセッサは、集積回路、特定用途向け集積回路(ASIC)、デジタル・シグナル・プロセッサ(DSP)、フィールド・プログラマブル、ゲート・アレイ(FPGA)、プロ具ラマブル論理コントローラ(PLC)、結合プログラム可能論理回路(complex programmable logic device、CPLD)、ディスクリート・ゲート又はトランジスタ論理、ディスクリート・ハードウェア・コンポーネント、又は本明細書で説明される機能を実施するように設計されたそれらの任意の組み合わせを指すこともある。さらに、プロセッサは、空間使用量を最適化する又はユーザ機器の性能を高めるために、これらに限定されるものではないが、分子及び量子ドット・ベースのトランジスタン、スイッチ及びゲートのようなナノスケール・アーキテクチャを利用することができる。プロセッサはまた、コンピューティング処理ユニットの組み合わせとして実装することもできる。本開示において、「格納する(store)」、「ストレージ」、「データ・ストア」、「データ・ストレージ」、「データベース」、並びに動作及びコンポーネントの機能に関連した実質的に他のいずれかの情報ストレージ・コンポーネントのような用語は、「メモリ・コンポーネント」、「メモリ」内に具体化されたエンティティ、又はメモリを含むコンポーネントを指すために用いられる。本明細書で説明されるメモリ及び/又はメモリ・コンポーネントは、揮発性メモリ若しくは不揮発性メモリのいずれかとすることができ、又は揮発性メモリ及び不揮発性メモリの両方を含むことができることを認識されたい。限定ではなく例証として、不揮発性メモリは、読み取り専用メモリ(ROM)、プログラム可能ROM(PROM)、電気的プログラム可能ROM(EPROM)、電気的消去可能ROM(EEPROM)、フラッシュ・メモリ、又は不揮発性ランダム・アクセス・メモリ(RAM)(例えば、強誘電体RAM(FeRAM))を含むことができる。揮発性メモリは、外部キャッシュ・メモリとして働くことができるRAMを含むことができる。限定ではなく例証として、RAMは、シンクロナスRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブル・データ・レートSDRAM(DDR SDRAM)、エンハンストSDRAM(ESDRAM)、シンクリンク(Synchlink)DRAM(SLDRAM)、ダイレクト・ランバス(Rambus)・ダイナミックRAM(DRDRAM)、及びランバス・ダイナミックRAM(RDRAM)のような多くの形態で利用可能である。さらに、システム又はコンピュータ実施方法の開示されたメモリ・コンポーネントは、これら及び他の何れかの好適なタイプのメモリを含むが、これらに限定されないことを意図する。
上述したものは、システム及びコンピュータ実施方法の単なる例を含む。もちろん、本開示を説明するためにコンポーネント又はコンピュータ実施方法のあらゆる考えられる組み合わせを説明することはできないが、当業者であれば、本開示の多くのさらなる組み合わせ及び順列が可能であることを認識することができる。さらに、用語「含む(include)」、「有する(have)」、「持っている(possess)」等が詳細な説明、特許請求の範囲、及び添付図面に用いられる範囲で、そうした用語は、用語「備える(comprising)」が特許請求の範囲中で移行語として用いられるときに解釈されるように用語「備える(comprising)」と同様に包括的であることが意図されている。
種々の実施形態の説明が例証のために提示されたが、網羅的であること又は開示される実施形態を制限することを意図するものではない。当業者には、説明される実施形態の範囲及び趣旨からいつ出すすることなく、多くの変更及び変形が明らかであろう。本明細書で用いられる用語は、実施形態の原理及び実際の用途、又は市場で見出される技術に優る技術の改善を最もよく説明するために、又は、当業者が本明細書で開示される実施形態を理解することができるように、選択された。