(57)【要約】      （修正有）【課題】サーバレス・アプリケーションのサブセットのリホストを容易にするシステムを提供する。【解決手段】サーバレス・コンピューティング・コンポーネント１０２は、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、ブローカ・コンポーネント１０８を含む。インターフェース・コンポーネントは、コンピューティング・デバイス１１４から、サーバレス・アプリケーションのある部分を識別する識別子データを受け取る。リライタ・コンポーネントは、サーバレス・アプリケーションの第１の部分がコンピューティング・デバイスで実行され、別の部分がサーバレス・コンピューティング・コンポーネントで実行されるよう、サーバレス・アプリケーションをリライトする。インターフェース・コンポーネントは、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイスに経路変更して、デバッグ・セッションを容易にする。【選択図】図１
2018073405.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実行可能な複数のコンポーネントを格納するメモリと、
前記メモリ内に格納されるコンピュータ実行可能な複数のコンポーネントを実行するプロセッサと、
を備え、前記コンピュータ実行可能な複数のコンポーネントは、
コンピューティング・デバイスから、前記コンピューティング・デバイスによりリホストされるサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取るインターフェース・コンポーネントであって、前記コンピューティング・デバイスは、ネットワーク・デバイスを介してサーバレス・コンピューティング・システムと通信する、インターフェース・コンポーネントと、
前記サーバレス・アプリケーションの前記第１の部分が前記コンピューティング・デバイスにより実行され、前記サーバレス・アプリケーションの第２の部分が前記サーバレス・コンピューティング・システムにより実行されるのを可能にするように、前記サーバレス・アプリケーションをリライトするリライタ・コンポーネントであって、前記インターフェース・コンポーネントは、前記サーバレス・アプリケーションの前記第１の部分を前記コンピューティング・デバイスに経路変更し、前記コンピューティング・デバイスにより実行される前記サーバレス・アプリケーションの前記第１の部分についてのデバッグ・セッションを容易にする、リライタ・コンポーネントと、
を含む、システム。
【請求項２】
前記インターフェース・コンポーネントは、前記コンピューティング・デバイスから、前記サーバレス・アプリケーションの前記第１の部分の変更されたバージョンを受け取る、請求項１に記載のシステム。
【請求項３】
前記リライタ・コンポーネントは、前記サーバレス・アプリケーションの前記第１の部分の前記変更されたバージョンを、前記サーバレス・アプリケーションの前記第２の部分と結合する、請求項２に記載のシステム。
【請求項４】
前記サーバレス・コンピューティング・システムは、前記コンピューティング・デバイスが前記サーバレス・アプリケーションの前記第１の部分と関連した前記デバッグ・セッションを実行する間、前記サーバレス・アプリケーションの前記第２の部分と関連した処理スレッドのセットを実行する、請求項１に記載のシステム。
【請求項５】
前記サーバレス・アプリケーションの前記第１の部分は、関数のシーケンスにおける第１の関数であり、前記インターフェース・コンポーネントは、前記第１の関数を前記コンピューティング・デバイスに経路変更する、請求項１に記載のシステム。
【請求項６】
前記リライタ・コンポーネントは、命令の前記シーケンスにおける前記第１の関数の前に第２の関数を生成し、命令の前記シーケンスにおける前記第１の関数の後に第３の関数を生成し、かつ前記第１の関数が前記コンピューティング・デバイスに経路変更された後に前記第２の関数及び前記第３の関数を実行する、請求項５に記載のシステム。
【請求項７】
前記インターフェース・コンポーネントは、前記サーバレス・アプリケーションの前記第１の部分と関連する前記デバッグ・セッションと関連したリアルタイム・データを受け取る、請求項１に記載のシステム。
【請求項８】
前記リライタ・コンポーネントは、前記デバッグ・セッションと関連した前記リアルタイム・データに基づいて、前記サーバレス・アプリケーションの前記第２の部分を実行する、請求項７に記載のシステム。
【請求項９】
前記インターフェース・コンポーネントは、前記サーバレス・アプリケーションの前記第１の部分を前記コンピューティング・デバイスに経路変更して、前記サーバレス・アプリケーションの性能の改善を促進する、請求項７に記載のシステム。
【請求項１０】
プロセッサに動作的に結合されたシステムにより、コンピューティング・デバイスから、前記コンピューティング・デバイスによりリホストされるサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取ることであって、前記システムは、ネットワーク・デバイスを介して前記コンピューティング・デバイスと通信する、受け取ることと、
前記システムにより、前記サーバレス・アプリケーションの前記第１の部分を前記コンピューティング・デバイスに伝送することと、
前記システムにより、前記コンピューティング・デバイスを介して、前記サーバレス・アプリケーションの前記第１の部分と関連したデバッグ・セッションの性能を促進することと、
前記システムにより、前記サーバレス・アプリケーションの第２の部分を実行することと、
を含む、コンピュータにより実施される方法。
【請求項１１】
前記システムにより、前記コンピューティング・デバイスから、前記サーバレス・アプリケーションの前記第１の部分の変更されたバージョンを受け取ることをさらに含む、請求項１０に記載のコンピュータにより実施される方法。
【請求項１２】
前記システムにより、前記サーバレス・アプリケーションの前記第１の部分の前記変更されたバージョンを、前記サーバレス・アプリケーションの前記第２の部分と結合することをさらに含む、請求項１１に記載のコンピュータにより実施される方法。
【請求項１３】
前記システムにより、前記デバッグ・セッションと関連したリアルタイム・データに基づいて、前記サーバレス・アプリケーションの第２の部分を実行することをさらに含む、請求項１１に記載のコンピュータにより実施される方法。
【請求項１４】
前記実行することは、前記コンピューティング・デバイスが前記サーバレス・アプリケーションの前記第１の部分と関連した前記デバッグ・セッションを実行して、前記サーバレス・アプリケーションと関連したエラー数の低減を促進する間、前記サーバレス・アプリケーションの前記第２の部分を実行することを含む、請求項１３に記載のコンピュータにより実施される方法。
【請求項１５】
プロセッサに動作的に結合されたシステムにより、サーバレス・アプリケーションの第１の部分と関連した識別子データを判断することと、
前記システムにより、ネットワーク・デバイスを介して、前記識別子データをサーバレス・コンピューティング・システムに伝送することと、
前記システムにより、前記サーバレス・コンピューティング・システムから、前記サーバレス・アプリケーションの前記第１の部分を受け取ることと、
前記システムにより、前記サーバレス・コンピューティング・システムによる前記サーバレス・アプリケーションの第２の部分の実行とほぼ同時に、前記サーバレス・アプリケーションの前記第１の部分と関連したデバッグ・セッションを実行することと、
を含む、コンピュータにより実施される方法。
【請求項１６】
前記システムにより、ネットワーク・デバイスを介して前記サーバレス・コンピューティング・システムと通信することをさらに含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項１７】
前記システムにより、前記サーバレス・アプリケーションの前記第１の部分を前記サーバレス・コンピューティング・システムに伝送することをさらに含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項１８】
前記システムにより、前記デバッグ・セッションと関連したリアルタイム・データを前記サーバレス・コンピューティング・システムに伝送することをさらに含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項１９】
前記デバッグ・セッションを実行することは、ネットワーク・デバイスを介して前記サーバレス・コンピューティング・システムと通信するコンピューティング・デバイスによってデバッガ・アプリケーションを用いることを含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項２０】
サーバレス・アプリケーションをデバッグするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムはプログラム命令を有し、前記プログラム命令は、プロセッサにより実行可能であり、前記プロセッサに、
前記プロセッサにより、コンピューティング・デバイスから、サーバレス・コンピューティング・システムと関連したサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取ることと、
前記プロセッサにより、前記サーバレス・アプリケーションの前記第１の部分を前記コンピューティング・デバイスに伝送することと、
前記プロセッサにより、前記サーバレス・アプリケーションの前記第１の部分をデバッグする前記コンピューティング・デバイスによるデバッグ・セッションの間、前記サーバレス・アプリケーションの第２の部分を実行することと、
を行わせる、コンピュータ・プログラム。
【請求項２１】
前記プログラム命令は、前記プロセッサにより実行可能であり、さらに前記プロセッサに、
前記コンピューティング・デバイスから、前記サーバレス・アプリケーションの前記第１の部分の変更されたバージョンを受け取ることを行わせること、
を行わせる、請求項２０に記載のコンピュータ・プログラム。
【請求項２２】
前記プログラム命令は、前記プロセッサにより実行可能であり、さらに前記プロセッサに、
前記プロセッサにより、前記サーバレス・アプリケーションの前記第１の部分の前記変更されたバージョンを、前記サーバレス・アプリケーションの前記第２の部分と結合すること、
を行わせる、請求項２１に記載のコンピュータ・プログラム。
【請求項２３】
サーバレス・アプリケーションをデバッグするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムはプログラム命令を有し、前記プログラム命令は、プロセッサにより実行可能であり、前記プロセッサに、
前記プロセッサにより、サーバレス・アプリケーションの第１の部分と関連した識別子データをサーバレス・コンピューティング・システムに伝送することと、
前記プロセッサにより、前記サーバレス・コンピューティング・システムから、前記サーバレス・アプリケーションの前記第１の部分を受け取ることと、
前記プロセッサにより、前記サーバレス・アプリケーションの前記第１の部分と関連したデバッグ・セッションを実行することと、
を行わせる、コンピュータ・プログラム。
【請求項２４】
前記プログラム命令は、前記プロセッサにより実行可能であり、さらに前記プロセッサに、
前記プロセッサにより、前記サーバレス・アプリケーションの前記第１の部分の変更されたバージョンを前記サーバレス・コンピューティング・システムに伝送すること、
を行わせる、請求項２３に記載のコンピュータ・プログラム。
【請求項２５】
前記プログラム命令は、前記プロセッサにより実行可能であり、さらに前記プロセッサに、
前記プロセッサにより、前記デバッグ・セッションと関連したリアルタイム・データを前記サーバレス・コンピューティング・システムに伝送すること、
を行わせる、請求項２３に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、サーバレス・コンピューティング・システムに関し、より具体的には、サーバーレス・コンピューティング・システムと関連したサーバレス・アプリケーションのデバッグに関する。
【背景技術】
【０００２】
サーバレス・コンピューティング・アプリケーションのデバッグは、多数の課題を抱えている。例えば、サーバレス・コンピューティング・アプリケーションのデバッグは、一般に、関数にアタッチすること、サーバレス・コンピューティング・アプリケーションの実行を停止すること、及びデバッガのユーザがその関数の評価の速度を制御することを可能にすることを要する。しかしながら、これは一般に、１つ又は複数の重要な作業者リソースが、無期限独占されることを要する。さらに、ユーザは、デバッグ・セッションについて忘れ、何時間も又は何日もたってから再開することがある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
サーバレス・アプリケーションのサブセットのリホスト(re-host）を容易にするシステム、コンピュータ実施方法、及びコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【０００４】
以下は、本発明の１つ又は複数の実施形態の基本的理解を与えるための概要を提示する。この概要は、重要な若しくは重大な要素を特定すること、又は特定の実施形態のあらゆる範囲若しくはあらゆる特許請求の範囲を正確に説明することを意図するものではない。この概要の唯一の目的は、後述する詳細な説明の前置きとして本発明の概念を簡易的な形態で示すことである。本明細書に説明される１つ又は複数の実施形態において、サーバレス・アプリケーションのサブセットのリホストを容易にするデバイス、システム、コンピュータ実施方法、装置、及び／又はコンピュータ・プログラム製品が説明される。
【０００５】
１つの実施形態によると、システムは、インターフェース・コンポーネント、リライタ・コンポーネント、及びブローカ・コンポーネントを含むことができる。インターフェース・コンポーネントは、コンピューティング・デバイスから、該コンピューティング・デバイスによりリホストされるサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取る。コンピューティング・デバイスは、ネットワーク・デバイスを介して、サーバレス・コンピューティング・システムと通信する。リライタ・コンポーネントは、サーバレス・アプリケーションの第１の部分がコンピューティング・デバイスにより実行され、サーバレス・アプリケーションの第２の部分がサーバレス・コンピューティング・システムにより実行されるのを可能にするように、サーバレス・アプリケーションをリライト（rewrite）する。インターフェース・コンポーネントは、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイスに経路変更（re-route）し、コンピューティング・デバイスにより実行されるサーバレス・アプリケーションの第１の部分についてのデバッグ・セッションを容易にすることができる。
【０００６】
別の実施形態によると、コンピュータ実施方法が提供される。コンピュータ実施方法は、プロセッサに動作的に結合されたシステムにより、コンピューティング・デバイスから、コンピューティング・デバイスによりリホストされるサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取ることであって、システムは、ネットワーク・デバイスを介してコンピューティング・デバイスと通信する、受け取ることを含むことができる。コンピュータ実施方法はまた、システムにより、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイスに伝送することを含むこともできる。さらに、コンピュータ実施方法はまた、システムにより、コンピューティング・デバイスを介して、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションの性能を促進することを含むことができる。コンピュータ実施方法は、システムにより、サーバレス・アプリケーションの第２の部分を実行することを含むこともできる。
【０００７】
さらに別の実施形態によると、コンピュータ実施方法が提供される。コンピュータ実施方法は、プロセッサに動作的に結合されたシステムにより、サーバレス・アプリケーションの第１の部分と関連した識別子データを判断することとを含むことができる。コンピュータ実施方法はまた、システムにより、ネットワーク・デバイスを介して、識別子データをサーバレス・コンピューティング・システムに伝送することを含むこともできる。さらに、コンピュータ実施方法は、システムにより、サーバレス・コンピューティング・システムから、サーバレス・アプリケーションの第１の部分を受け取ることを含むことができる。コンピュータ実施方法はまた、システムにより、サーバレス・コンピューティング・システムによるサーバレス・アプリケーションの第２の部分の実行とほぼ同時に、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行することを含むこともできる。
【０００８】
更に別の実施形態によると、サーバレス・アプリケーションをデバッグするためのコンピュータ・プログラム・プログラム製品が、プログラム命令がそこに具体化されたコンピュータ可読ストレージ媒体を含むことができる。プログラム命令は、プロセッサにより実行可能であり、プロセッサに、プロセッサにより、コンピューティング・デバイスから、サーバレス・コンピューティング・システムと関連したサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取らせることができる。プログラム命令はまた、プロセッサに、プロセッサにより、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイスに伝送させることもできる。プログラム命令はまた、プロセッサに、プロセッサによりサーバレス・アプリケーションの第１の部分をデバッグするコンピューティング・デバイスによるデバッグ・セッションの間、サーバレス・アプリケーションの第２の部分を実行させることも可能である。
【０００９】
さらに別の実施形態によると、サーバレス・アプリケーションをデバッグするためのコンピュータ・プログラム・プログラム製品が、プログラム命令がそこに具体化されたコンピュータ可読ストレージ媒体を含むことができる。プログラム命令は、プロセッサにより実行可能であり、プロセッサに、プロセッサにより、コンピューティング・コンピューティング・システムからサーバレス・アプリケーションの第１の部分と関連した識別子データをサーバレス・コンピューティング・システムに伝送させることができる。プログラム命令はまた、プロセッサに、プロセッサにより、サーバレス・コンピューティング・システムから、サーバレス・アプリケーションの第１の部分を受け取らせることもできる。プログラム命令はまた、プロセッサに、プロセッサにより、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行させることもできる。
【図面の簡単な説明】
【００１０】
【図１】本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にするための、限定されない例示的システムのブロック図を示す。
【図２】本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にするための、別の限定されない例示的システムのブロック図を示す。
【図３】本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にするための、さらに別の限定されない例示的システムのブロック図を示す。
【図４】本明細書で説明される１つ又は複数の実施形態による、デバッグ・セッションを容易にする、限定されない例示的システムを示す。
【図５】本明細書で説明される１つ又は複数の実施形態による、デバッグ・セッションを容易にする、限定されない例示的システムを示す。
【図６】本明細書で説明される１つ又は複数の実施形態による、デバッグ・セッションを容易にするための、限定されない例示的コンピュータ実施方法のフロー図を示す。
【図７】本明細書で説明される１つ又は複数の実施形態による、デバッグ・セッションを容易にするための別の限定されない例示的コンピュータ実施方法のフロー図を示す。
【図８】本明細書で説明される１つ又は複数の実施形態を容易にすることができる、限定されない例示的動作環境のブロック図を示す。
【図９】本明細書で説明される１つ又は複数の実施形態による、限定されない例示的クラウド・コンピューティング環境のブロック図を示す。
【図１０】本明細書で説明される１つ又は複数の実施形態による、限定されない例示的抽象化モデル層のブロック図を示す。
【発明を実施するための形態】
【００１１】
以下の詳細な説明は例証にすぎず、実施形態及び／又は実施形態の用途若しくは使用を制限することを意図するものではない。さらに、前述の背景又は概要セクション、又は詳細な説明セクション内に提示されたいずれの表現された情報又は暗黙的（implied）情報にも制約されることを意図しない。
【００１２】
ここで、全体を通して同様の要素を指すために同様の参照番号が用いられる図面を参照して、１つ又は複数の実施形態を説明する。以下の説明において、説明のために、１つ又は複数の実施形態のより完全な理解を与えるために、多数の特定の詳細が説明される。しかしながら、様々の場合において、１つ又は複数の実施形態は、これらの特定の詳細なしに実施できることが明らかである。
【００１３】
クラウド・アプリケーションのデバッグは、通常、クラウド・アプリケーションに関連したログ、又はクラウド・アプリケーションの状態に対応するスナップショットを用いて達成される。例えば、ログを収集及び／又はキュレート(curate）して、クラウド・アプリケーションのデバッグを容易にすることができる。或いは、クラウド・アプリケーションの状態のスナップショットを分析して、クラウド・アプリケーションのデバッグを容易にすることができる。クラウド・アプリケーションのデバッグをさらに容易にするために、クラウド・プラットフォームは、ユーザにより利用できるログ収集及び分析ユーティリティを提供することができる。しかしながら、ログ収集及び分析は、特にデバッグに関して多数の欠点がある。例えば、高容量クラウド・アプリケーションは、膨大な量のデータを生成すること、及び／又は事前計画（例えば、ログすべきコンテンツのタイプに関する事前計画）を必要とすることがある。従って、ログ収集及び分析ユーティリティは、デバッガに共通するシングル・ステップのエクスペリエンスを提供することができない。また、ログ収集及び分析ユーティリティは、ユーザがクラウド・アプリケーションのコンピュータ・コードをトラバースするとき、プログラム状態を修正する能力を提供することができない。場合によっては、システムは、システムの状態のスナップショットの収集及び仮想化によりロギングを増強することができる。例えば、デバッガは、ユーザが、クラウド・アプリケーションの状態に関連したスナップショットをいつ収集するかを決定するのを可能にすることができる。その後ユーザは、完全なデバッグ・エクスペリエンスのサブセットをエミュレートするツールにおいてこれらを見ることができる。ツールは、瞬時（moment-in-time）スナップショットを利用することができ、それにより、ユーザが、メモリの構造、並びにスナップショットが撮られた瞬間におけるスレッドの呼び出しスタックを見ることが可能になる。しかしながら、瞬時スナップショットのタイミング情報（例えば、瞬時スナップショットをいつ撮るべきかなど）のエンコードは、通常、デバッグ目的で瞬時スナップショットの利用を容易にすることを要する。さらに、システムの状態のスナップショットを用いるとき、コードのステップ実行（stepping through code）及びプログラム状態の修正などのデバッグ・タスクが可能ではない。別の例において、開発者のローカル・マシン上で、完全なデバッグ環境を実行することができる。しかしながら、完全なデバッグ環境では、ユーザは通常、テストのパイプライン及び配備に変更を加える前に、局所的に開発及びデバッグすることを要する。さらに、これらのクラウド・プラットフォームにおいて実行されるアプリケーションは、一般に、長寿命（long-lived）プロセス又は長寿命仮想マシン（ＶＭ）により実行される。
【００１４】
クラウド・コンピューティングのランドスケープへの最近の追加は、サーバレス・コンピューティングのものである。サーバレス・コンピューティング・プラットフォームは一般に、イベント駆動型プログラミング（又は、出版購読型プログラミング）、自動スケーリング、及び細粒度（fine-grained）価格設定モデルを組み合わせる。例えば、プログラマは、イベント駆動型プログラムを一式のイベント・アクション対としてエンコードし、該イベント駆動型プログラムをサービスにアップロードすることができる。システムは、イベントをリッスンし（listen）、イベントの受信時にアクションを処理するために使用する作業者装置（workerdevice）のプールを維持することができる。このように、稼働時間ではなく使用に対してのみ課金しながら、制限されたセットのリソースを多数の間で共有することができる。つまり、サーバレス・コンピューティング・プラットフォーム上で実行されているサーバレス・コンピューティング・アプリケーションは、通常、アクティブ時にのみリソース（例えば、作業者装置）を消費する。対照的に、クラウド・ホスト型アプリケーションは、その配備期間中、価値あるリソース（例えば、特定の数の中央処理ユニット・サイクル）を消費する。サーバレス・コンピューティング・アプリケーションのデバッグは、多数の課題を抱えている。例えば、サーバレス・コンピューティング・アプリケーションのデバッグは、一般に、関数にアタッチすること、サーバレス・コンピューティング・アプリケーションの実行を停止すること、及びデバッガのユーザがその関数の評価の速度を制御することを可能にすることを要する。しかしながら、これは一般に、１つ又は複数の重要な作業者リソースが、無期限独占されることを要する。さらに、ユーザは、デバッグ・セッションについて忘れ、何時間も又は何日もたってから再開することがある。
【００１５】
クラウド・アプリケーションは、コンピューティング・デバイスから遠く離れて、通常はコンピューティング・デバイスにより直接アクセスできないプラットフォーム上で実行されるので、クラウド・アプリケーションのデバッグには問題のあることもある。クラウド・アプリケーションは通常、長期プロセス（long-running process）により供されるので、「アタッチ及び検査」（attach-and-inspect）スタイルのデバッガを用いて、クラウド・アプリケーションにアタッチし、及び／又はクラウド・アプリケーションのコードを検査することができる。その上、サーバレス・アプリケーションは通常、長期プロセスと関連付けられていないので、サーバレス・アプリケーションのデバッグは、デバッグ・プロセスをさらに複雑にする。さらに、サーバレス・アプリケーションをアタッチし、従って停止することが、サーバレス環境の性能に悪影響を与えることがある。例えば、ランタイムに、サービス要求のための制限されたサイズのスレッド・プール及び／又はコンテナが利用されることが多い。デバッガは、長期プロセスにアタッチし、その実行を停止し、ユーザがプロセスの状態を検査できるようにすることによって、動作することができる。「アタッチ及び停止（attach-and-halt）」デバッグは、トラップのようなオペレーティング・システムの機能を利用することが多い。多くの場合、アタッチ及び停止デバッグは、実行可能プログラムにパッチをあてて、細粒度ブレークポイントをサポートすることもできる。従って、サーバレス・アプリケーションのデバッグに対してアタッチ及び停止を用いることにより、サーバレス・アプリケーションと関連したサーバレス環境の性能が迅速に低下する。最後に、サーバレス・プラットフォームが複雑であるならば、サーバレス・アプリケーションと関連したランタイム・プロセスから、開発をシフトすること及び／又はタスクをデバッグすることが非常に望ましい。
【００１６】
これら及び／又は他の問題に対処するため、本明細書で説明される実施形態は、サーバレス・アプリケーションのサブセットのリホストを容易にするシステムを含む。例えば、サーバレス・クラウド・プラットフォームによりホストされるサーバレス・アプリケーションのサブセットは、ネットワークを介してサーバレス・クラウド・プラットフォームと通信するコンピューティング・デバイスによりリホストすることができる。サーバレス・アプリケーションのサブセットのリホストは、サーバレス・アプリケーションのデバッグの改善を容易にする。例えば、サーバレス・クラウド・プラットフォーム上で実行されているサーバレス・アプリケーションと関連したコンピュータ・コードの一部を、デバッガ・プログラムを用いてローカル・コンピューティング・デバイス上でリホストすること（例えば、サーバレス・クラウド・プラットフォームからオフロードすること）、及び／又はデバッグすることができる。付加的に又は代替的に、サーバレス・アプリケーションのサブセットのリホストは、サーバレス・クラウド・プラットフォームとは異なるコンピューティング・デバイスによるサーバレス・アプリケーションのサブセットの実行を容易にすることができる。従って、サーバレス・アプリケーションの性能を改善することができる。さらに、サーバレス・アプリケーションと関連したエラーの数の減少を達成することができる。さらに、サーバレス・アプリケーションのコアランタイムを変更することなく、サーバレス・アプリケーションのためのデバッガを用いることができる。
【００１７】
図１は、本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にする限定されない例示的システム１００のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
【００１８】
種々の実施形態において、システム１００は、サーバレス・クラウド・プラットフォーム・システムとすることができる。１つの態様において、システム１００は、サーバレス・アプリケーションのサブセットをリホストするためのシステムとすることができる。さらに、システム１００は、デバッグ・システム、サーバレス・コンピューティング・システム、ログ分析システム（例えば、リアルタイム・ログ分析システム）、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス（on-premise）システム、マシン学習システム、人工知能システム、及び／又は別のタイプのシステムと関連付けること、これらと共に用いること、又はその中に含ませることができる。システム１００は、ハードウェア及び／又はソフトウェアを用いて、本質的に非常に技術的な問題、抽象的でない問題、及び人間による精神的行為（mental act）のセットとして実行できない問題を解決することができる。さらに、実行されるプロセスの一部は、メモリ操作に関連する定義されたタスクを実行するための専用コンピュータ（例えば、サーバレス・コンピューティング・コンポーネントを有する専用コンピュータ）によって実行することができる。システム１００及び／又はシステムのコンポーネントを用いて、技術の進歩、コンピューティング・デバイスの利用、クラウド・プラットフォームの利用、サーバレス・アプリケーションのデバッグ、サーバレス・アプリケーションの実行、及び／又はコンピュータ・アーキテクチャ等によって生じる新しい問題を解決することができる。システム１００の１つ又は複数の実施形態は、サーバレス・クラウド・プラットフォーム・システム、デバッグ・システム、ログ分析システム（例えば、リアルタイム・ログ分析システム）、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス・システム、マシン学習システム、人工知能システム等の技術の改善を提供することができる。システム１００の１つ又は複数の実施形態はまた、コンピューティング・デバイスのデバッグ能力を改善することにより、コンピューティング・デバイスの技術の改善を提供することもできる。
【００１９】
図１に示される実施形態において、システム１００は、サーバレス・コンピューティング・コンポーネント１０２を含むことができる。サーバレス・コンピューティング・コンポーネント１０２は、サーバレス・コンピューティング・システムと関連付けることができる。例えば、特定の実施形態において、サーバは、サーバレス・コンピューティング・コンポーネント１０２をホストすることができる。図１に示されるように、サーバレス・コンピューティング・コンポーネント１０２は、インターフェース・コンポーネント１０４、リライタ（rewriter）コンポーネント１０６、及びブローカ（broker）コンポーネント１０８を含むことができる。サーバレス・コンピューティング・コンポーネント１０２の態様は、マシン内に具体化された、例えば１つ又は複数のマシンと関連した１つ又は複数のコンピュータ可読媒体（単数又は複数の）内に具体化された、マシン実行可能コンポーネントを構成することができる。こうしたコンポーネントは、例えば、コンピュータ、コンピューティング・デバイス、仮想マシン等などの１つ又は複数のマシンにより実行されるとき、マシンに、説明される動作を実行させることができる。１つの態様において、サーバレス・コンピューティング・コンポーネント１０２はまた、コンピュータ実行可能コンポーネント及び命令を格納するメモリ１１０を含むこともできる。さらに、サーバレス・コンピューティング・コンポーネント１０２は、サーバレス・コンピューティング・コンポーネント１０２による命令（例えば、コンピュータ実行可能コンポーネント及び対応する命令）の実行を容易にするためのプロセッサ１１２を含むことができる。示されるように、１つ又は複数の実施形態において、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、ブローカ・コンポーネント１０８、メモリ１１０、及び／又はプロセッサ１１２を互いに電気的に及び／又は通信可能に結合することができる。
【００２０】
サーバレス・コンピューティング・コンポーネント１０２は、ネットワーク１１６を介して、コンピューティング・デバイス１１４と通信することができる。コンピューティング・デバイス１１４は、１つ又は複数のプロセッサを含むハードウェア・デバイスとすることができる。例えば、コンピューティング・デバイスは、電子デバイス（例えば、コンシューマ電子デバイス）、ネットワーク・デバイス、クラウド・デバイス（例えば、クラウド・コンポーネント）、及び／又はサーバレス・アプリケーションの少なくとも一部を実行できる別のタイプのデバイスとすることができる。ネットワーク１１６は、１つ又は複数のネットワークを含むことができる。例えば、ネットワーク１１６は、これらに限定されるものではないが、広域ネットワーク（ＷＡＮ、例えばインターネット）、ローカル・エリア・ネットワーク（ＬＡＮ）、及び／又はセルラー・ネットワークを含む、１つ又は複数の無線ネットワーク及び／又は１つ又は複数の有線ネットワークを含むことができる。ネットワーク１１６はまた、少なくともコンピューティング・デバイス１１４とサーバレス・コンピューティング・コンポーネント１０２との間の通信及び／又は対話を容易にするために、１つ又は複数のネットワーク・デバイス（例えば、ネットワーク・ハードウェア、ネットワーク機器、コンピュータ・ネットワーキング・デバイス等）を含むこともできる。
【００２１】
１つの実施形態において、インターフェース・コンポーネント１０４は、コンピューティング・デバイス１１４から、識別子データ（図１に示される識別子データ）を受け取ることができる。例えば、コンピューティング・デバイス１１４は、コンピューティング・デバイス１１４によりリホストされるサーバレス・アプリケーションの第１の部分を識別することができる。サーバレス・アプリケーションは、ユーザのためのｆｕｎｃｔｉｏｎ  ａｓ  ａ  ｓｅｒｖｉｃｅ（ＦａａＳ）と関連付けることができるので、ユーザは、サーバレス・アプリケーションと関連したコンピュータ・コードを実行するために、サーバ又は仮想マシンを購入することも又は借りることもなく、サーバレス・アプリケーションを利用することができる。一例において、サーバレス・アプリケーションは、サーバレス・コンピューティング・コンポーネント１０２により（例えば、メモリ１１０により）格納することができる。別の例において、サーバレス・アプリケーションは、サーバレス・コンピューティング・コンポーネント１０２をホストするサーバ、及び／又はサーバレス・コンピューティング・コンポーネント１０２をホストする仮想マシン上に格納することができる。サーバレス・アプリケーションの第２の部分が、サーバレス・コンピューティング・コンポーネント１０２（例えば、サーバレス・コンピューティング・コンポーネント１０２と関連したサーバ及び／又は仮想マシン）により実行される間、コンピューティング・デバイス１１４は、該コンピューティング・デバイス１１４のサーバレス・アプリケーションの部分を実行することにより、サーバレス・アプリケーションの第１の部分をリホストすることができる。１つの態様において、リライタ・コンポーネント１０６は、サーバレス・アプリケーションの第１の部分がコンピューティング・デバイス１１４により実行され、サーバレス・アプリケーションの第２の部分がサーバレス・コンピューティング・コンポーネント１０２により実行されることを可能にするように、サーバレス・アプリケーションをリライトすることができる。例えば、リライタ・コンポーネント１０６は、サーバレス・アプリケーションを、サーバレス・アプリケーションのコアランタイムなしに、サーバレス・アプリケーションについてのデバッグ・プロセスを容易にする結合アクション（例えば、コンピュータ実行可能機能のグラフ）としてサーバレス・アプリケーションをリライトする。
【００２２】
１つの実施形態において、インターフェース・コンポーネント１０４は、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイス１１４に経路変更して、コンピューティング・デバイス１１４により実行されるサーバレス・アプリケーションの部分に対するデバッグ・セッションを容易にすること、及び／又は、コンピューティング・デバイス１１４によるサーバレス・アプリケーションの部分の実行を容易にすることができる。例えば、コンピューティング・デバイス１１４との直接通信が可能である（例えば、コンピューティング・デバイス１１４が、サーバレス・アプリケーションの第１の部分と関連した長期計算を実行するのにより適した別個のクラウド・デバイスである）との判断に応答して、インターフェース・コンポーネント１０４は、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイス１１４に経路変更することができる。
【００２３】
別の実施形態において、ブローカ・コンポーネント１０８は、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイス１１４に経路変更して、コンピューティング・デバイス１１４により実行されるサーバレス・アプリケーションの第１の部分に対するデバッグ・セッションを容易にすることができる。付加的に又は代替的に、ブローカ・コンポーネント１０８は、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイス１１４に経路変更して、コンピューティング・デバイス１１４によるサーバレス・アプリケーションの第１の部分の実行を容易にすることができる。例えば、サーバレス・コンピューティング・プラットフォームがコンピューティング・デバイス１１４と直接通信できない（例えば、コンピューティング・デバイス１１４は、サーバレス・コンピューティング・プラットフォームが通信することができるインターネット経路と関連付けられていない）との判断に応答して、インターフェース・コンポーネント１０４は、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイス１１４に経路変更することができる。１つの態様において、ユーザは、コンピューティング・デバイス１１４上のデバッガ・プログラムを用いて、デバッグ・セッション中のサーバレス・アプリケーションの第１の部分のデバッグを容易にすることができる。サーバレス・アプリケーションの第１の部分のデバッグ後、コンピューティング・デバイス１１４は、サーバレス・アプリケーションの第１の部分の変更されたバージョン（例えば、サーバレス・アプリケーションの第１の部分のデバッグされたバージョン）をサーバレス・コンピューティング・コンポーネント１０２に伝送することができる。例えば、インターフェース・コンポーネント１０４は、コンピューティング・デバイス１１４から、サーバレス・アプリケーションの第１の部分の変更されたバージョンを受け取ることができる。別の態様において、リライタ・コンポーネント１０６は、サーバレス・アプリケーションの第１の部分の変更されたバージョンを、デバッグ中にサーバレス・コンピューティング・コンポーネント１０２により実行されるサーバレス・アプリケーションの第２の部分と結合することができる。従って、改善された安定性、改善された信頼性、改善された精度、及び／又は改善された品質を有する更新されたサーバレス・アプリケーションを提供することができる。
【００２４】
別の実施形態において、コンピューティング・デバイス１１４は、サーバレス・アプリケーションのコアランタイムを修正することなく、デバッグ・プロセス中、サーバレス・アプリケーションの第１の部分を実行することができる。例えば、サーバレス・アプリケーションは、コンピューティング・デバイス１１４がサーバレス・アプリケーションの第１の部分を実行している間（例えば、コンピューティング・デバイスがサーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行する間）、サーバレス・アプリケーションの第２の部分と関連した処理スレッドのセットを実行し続けることができる。１つの態様において、サーバレス・アプリケーションは、少なくともサーバレス・プログラムについての機能を作成するために用いることができるプリミティブ・コード・セグメント（primitive code segment）のセットを含むことができる。プリミティブ・コード・セグメントのセットは、例えば、サーバレス・プログラムにより提供される呼び出し可能なアクションのセット、サーバレス・プログラムによるアクションのトリガされた呼び出し、及び／又はサーバレス・プログラムによるアクションのカリー化（curried）評価を含むことができる。１つの態様において、サーバレス・アプリケーションは、結合されたアクションのグラフとして処理することができ、そこでグラフは、デバッグをサポートする方法でリライトされる。１つの態様において、コンピューティング・デバイス１１４により実行されるデバッガ・プログラムは、トランポリン・スタイル（trampoline-style）のインストルメンテーションと関数型プログラミングのための継続渡しスタイル（continuation-passing style）の関数呼び出しとの組み合わせを用いることができる。特定の実施形態において、サーバレス・アプリケーションの第１の部分は、関数のシーケンスにおける第１の関数とすることができる。インターフェース・コンポーネント１０４は、例えば、第１の関数をコンピューティング・デバイス１１４に経路変更することができる。さらに、リライタ・コンポーネント１０６は、命令のシーケンスにおける第１の関数に先立って第２の関数を生成することができる。リライタ・コンポーネント１０６はまた、命令のシーケンスにおける第１の関数の後に第３の関数を生成することもできる。リライタ・コンポーネント１０６は、第１の関数がコンピューティング・デバイスに経路変更された後に）第２の関数及び第３の関数を実行することができる（例えば、リライタ・コンポーネント１０６は、コンピューティング・デバイス１１４がサーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行する間、第２の関数及び第３の関数を実行することができる）。特定の実施形態において、インターフェース・コンポーネント１０４は、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションに基づいて生成されたリアルタイム・データを受け取ることができる。さらに、リライタ・コンポーネント１０６は、デバッグ・セッションと関連したリアルタイム・データに基づいて、サーバレス・アプリケーションの第２の部分を実行することができる。
【００２５】
更に別の実施形態において、サーバレス・コンピューティング・コンポーネント１０２は、コンピューティング・デバイス１１４と組み合わせて、サーバレス・アプリケーションをデバッグするための種々の動作モードを提供することができる。例えば、サーバレス・アプリケーションをデバッグするための第１のモードは、コンピューティング・デバイス１１４、又はコンピューティング・デバイス１１４及び／又はサーバレス・コンピューティング・コンポーネント１０２と通信する別のデバイスに提供されるユーザデータに基づいて、実行することができる。ユーザデータは、サーバレス・アプリケーションに関連した１つ又は複数の処理点と関連付けられるアクションのセットを含むことができる。付加的に又は代替的に、ユーザデータは、サーバレス・アプリケーションのコンピュータ・コード内のプログラム可能演算子を手動で呼び出すための手動呼び出しを容易にすることができる。１つの態様において、第１のモードは、呼び出し信号をコンピューティング・デバイス１１４からサーバレス・コンピューティング・コンポーネント１０２へ（例えば、ブローカ・コンポーネント１０８へ）転送するトランポリン・コンピューティング・プロセスを用いることができる。呼び出し信号は、例えば、サーバレス・アプリケーションのコンピュータ・コード内のプログラム可能演算子を呼び出すための呼び出しに関するパラメータのセットを含むことができる。コンピューティング・デバイス１１４により実行されるデバッグ・プロセスが完了したとき、呼び出し信号を、呼び出されるトリガと共に伝送することができる。１つの態様において、コンピューティング・デバイス１１４は、コンピューティング・デバイス１１４により実行されるデバッグ・プロセスが完了したとの判断に応答して、デバッグされたアクションについてのデータ（例えば、戻り値）でトリガが生成されることを検証するデバッグ・クライアントとして用いることができる。特定の実施形態において、コンピューティング・デバイス１１４により実行されるデバッグ・プロセスがエラーと関連付けられる（例えば、コンピューティング・デバイス１１４により実行されるデバッグ・プロセスが異常終了した）との判断に応答して、コンピューティング・デバイス１１４は、デバッグ・プロセスと関連した既に実行されたアクション（例えば、オリジナル・アクション）についてのデータ（例えば、戻り値）でトリガを生成することができる。
【００２６】
付加的に又は代替的に、サーバレス・アプリケーションをデバッグするための第２のモードは、ユーザデータと、サーバレス・アプリケーションの第１の部分及び／又はユーザデータの分析に基づいて生成された分析データとに基づいて、実行することができる。例えば、第２のモードは、サーバレス・アプリケーションに関連する１つ又は複数の処理点と関連付けられたアクションのセットを提供することができる。さらに、第２のモードは、アクションのセットと交差するサーバレス・アプリケーションの第１の部分の１又は複数の部分をリライトすることもできる。一例では、第２のモードにおいて、アクションのセットに関連するエンクロージング使用（enclosing use）を探して、ユーザデータを走査することができる。Ａｋがデバッグされるアクションであるものとして、エンクロージング使用が、アクションＡ１、．．．Ａｋ、．．．Ａｎのシーケンスである場合、アクションのシーケンスを、シーケンスＳ１及び第２のシーケンスＳ２に分割することができる。第１のシーケンスＳ１は、Ａ１、．．．、Ｔであり、ここでＴは、Ａｋについてのトランポリンである。第２のシーケンスＳ２は、Ｃ、．．．、Ａｎとすることができ、ここでＣはＡｋについての継続（continuation）である。
【００２７】
付加的に又は代替的に、サーバレス・アプリケーションをデバッグするための第３のモードは、サーバレス・アプリケーションと関連したリアルタイム・データに基づいて実行することができる。例えば、リアルタイム・データは、サーバレス・アプリケーションの第１の部分及び／又はサーバレス・アプリケーションの第２の部分の実行に基づいて生成することができる。リアルタイム・データは、例えば、１又は複数のデータフローのリアルタイム活性化（activations）を含むことができる。１つの態様において、コンピューティング・デバイス１１４により実行されるデバッグ・プロセスの１又は複数のデータフローは、リアルタイム・データに基づいて更新することができる。例えば、サーバレス・アプリケーションの一部を異なるコンピュータ・コードに置換することができる。同様に、スプライス・ペア（splice pair）（例えば、上記の例におけるＳ１）についてのシーケンスを置換することもできる。
【００２８】
付加的に又は代替的に、サーバレス・アプリケーションをデバッグするための第４のモードは、増大した処理速度に基づいて実行することができる。例えば、第４のモードは、サーバレス・アプリケーションの第１の部分による、あらゆる発信要求を制限するような方法で１つ又は複数のアクションを実行しながら、コンピューティング・デバイス１１４により実行されるデバッグ・プロセスの１又は複数のデータフローが、増大した処理速度で（例えば、デバッグ・プロセスについてのほぼ最高処理速度で）実行されることを可能にする。第４のモードにおいて、ディスパッチャＤを作成し、該ディスパッチャＤを、第１のサーバレス・アプリケーションの１つ又は複数の部分の代わりに使用することができる。ディスパッチャＤは、両方のオリジナル・アクション（例えば、上記のＡｋ）に対する呼び出しの「ｔｅｅを行い（teeing）」、第１のサーバレス・アプリケーションと関連した別のアクションを呼び出すことによって、動作することができる。
【００２９】
サーバレス・コンピューティング・コンポーネント１０２（例えば、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、及び／又はブローカ・コンポーネント１０８）は、人間が実行できない（例えば、一人の人間の知性の能力を上回る）サーバレス・アプリケーションと関連した１つ又は複数のプロセスを実行することを理解されたい。例えば、特定の期間にわたって、サーバレス・アプリケーションの少なくとも一部を実行しているときに処理されるデータ量、サーバレス・アプリケーションの少なくとも一部を実行しているときのデータの処理速度、及び／又はサーバレス・コンピューティング・コンポーネント１０２（例えば、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、及び／又はブローカ・コンポーネント１０８）により処理できるデータのタイプは、同じ期間にわたって、一人の人間の知性により処理できる量、速度及びデータ・タイプと比べて大きく、速く、そして、それらとは異なり得る。サーバレス・コンピューティング・コンポーネント１０２（例えば、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、及び／又はブローカ・コンポーネント１０８）はまた、同じくサーバレス・アプリケーションと関連した上記の１つ又は複数のプロセスを実行しながら、１つ又は複数の他の機能の実行（例えば、完全に電源オンされる、完全に実行される等）に向けて完全に動作可能であり得る。さらに、サーバレス・コンピューティング・コンポーネント１０２（例えば、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、及び／又はブローカ・コンポーネント１０８）により生成される出力は、ユーザが手動で取得することができない情報を含むことがある。例えば、サーバレス・アプリケーションにより生成される情報の量、及び／又は、サーバレス・アプリケーションにより生成される種々の情報は、ユーザにより手動で取得される情報よりも複雑であり得る。
【００３０】
図２は、本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションのサブセットのリホストを容易にする、限定されない例示的システム２００のブロック図である。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
【００３１】
種々の実施形態において、システム２００は、サーバレス・クラウド・プラットフォーム・システムとすることができる。１つの態様においては、システム２００は、サーバレス・アプリケーションのサブセットをリホストするためのシステムとすることができる。さらに、システム２００は、デバッグ・システム、サーバレス・コンピューティング・システム、ログ分析システム（例えば、リアルタイム・ログ分析システム）、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス・システム、マシン学習システム、人工知能システム、及び／又は別のタイプのシステムと関連付け、これらと共に使用し、又はこれらの中に含ませることができる。システム２００は、本質的に非常に技術的な問題、抽象的ではない問題、及び人間による精神的行為のセットとして実行できない問題を解決するために、ハードウェア及び／又はソフトウェアを用いることができる。さらに、実行されるプロセスの一部は、メモリ操作に関連する定義されたタスクを実行するための特化したコンピュータ（例えば、サーバレス・コンピューティング・デバイス・コンポーネントを有する特化したコンピュータ）により実行することができる。システム２００及び／又はシステムのコンポーネントを、技術の進歩、コンピューティング・デバイスの利用、クラウド・プラットフォームの利用、サーバレス・アプリケーションのデバッグ、サーバレス・アプリケーションの実行、及び／又はコンピュータ・アーキテクチャ等によって生じる新しい問題を解決するために用いることができる。システム２００の１つ又は複数の実施形態は、サーバレス・クラウド・プラットフォーム・システム、デバッグ・システム、ログ分析システム（例えば、リアルタイム・ログ分析システム）、ログ管理システム、監視システム、オペレーショナル・インテリジェンス・システム、コンピューティング・デバイス・システム、アプリケーション管理システム、サーバ・システム、ネットワーク・システム、ウェブ・システム、オンプレミス・システム、マシン学習システム、人工知能システム等の技術の改善を提供することができる。システム２００の１つ又は複数の実施形態はまた、コンピューティング・デバイスのデバッグ能力を改善することにより、コンピューティング・デバイスの技術の改善を提供することもできる。
【００３２】
図２に示される実施形態において、システム２００は、サーバレス・コンピューティング・コンポーネント１０２及びコンピューティング・デバイス１１４を含むことができる。図２に示されるように、コンピューティング・デバイス１１４は、識別コンポーネント２０２及びデバッグ・コンポーネント２０４を含むことができる。付加的に、特定の実施形態において、サーバレス・コンピューティング・コンポーネント１０２は、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、及びブローカ・コンポーネント１０８を含むことができる。コンピューティング・デバイス１１４の態様は、例えば、１つ又は複数のマシンと関連した１つ又は複数のコンピュータ可読媒体（単数又は複数）内に具体化されるなど、マシン内に具体化されたマシン実行可能コンポーネントを構成することができる。こうしたコンポーネントは、例えば、コンピュータ、コンピューティング・デバイス、仮想マシン等などの１つ又は複数のマシンにより実行されるとき、マシンに、説明される動作を実行させることができる。１つの態様において、コンピューティング・デバイス１１４はまた、コンピュータ実行可能コンポーネント及び命令を格納するメモリ２０６を含むこともできる。さらに、コンピューティング・デバイス１１４は、該コンピューティング・デバイス１１４による命令（例えば、コンピュータ実行可能コンポーネント及び対応する命令）の実行を容易にするためにプロセッサ２０８を含むことができる。示されるように、１つ又は複数の実施形態において、識別コンポーネント２０２、デバッグ・コンポーネント２０４、メモリ２０６、及び／又はプロセッサ２０８を電気的に及び／又は通信可能に互いに結合することができる。
【００３３】
識別コンポーネント２０２は、コンピューティング・デバイス１１４によりリホストされるサーバレス・アプリケーションの第１の部分を識別する識別子データを生成することができる。例えば、識別コンポーネント２０２は、サーバレス・アプリケーションによる以前に生成された出力データを示す履歴データに基づいて、サーバレス・アプリケーションの第１の部分を識別することができる。付加的に又は代替的に、識別コンポーネント２０２は、サーバレス・アプリケーションと関連したメタデータに基づいて、サーバレス・アプリケーションの第１の部分を識別することができる。付加的に又は代替的に、識別コンポーネント２０２は、コンピューティング・デバイス１１４又は別のデバイスと関連したユーザにより与えられるユーザデータに基づいて、サーバレス・アプリケーションの第１の部分を識別することができる。
【００３４】
デバッグ・コンポーネント２０４は、サーバレス・アプリケーションの第１の部分と関連したデバッグ・プロセスを実行することができる。例えば、デバッグ・コンポーネント２０４は、デバッガ・アプリケーションに基づいて、サーバレス・アプリケーションの第１の部分を実行することができる。１つの実施形態において、デバッグ・コンポーネント２０４は、ネットワーク１１６を介して、サーバレス・コンピューティング・コンポーネント１０２からサーバレス・アプリケーションの第１の部分を受け取ることができる。付加的に又は代替的に、デバッグ・コンポーネント２０４は、デバッグ・プロセスに基づいて、サーバレス・アプリケーションの第１の部分の変更されたバージョンを生成することができる。デバッグ・コンポーネント２０４はまた、ネットワーク１１６を介して、サーバレス・アプリケーションの第１の部分の変更されたバージョンをサーバレス・コンピューティング・コンポーネント１０２に伝送することができる。付加的に又は代替的に、デバッグ・コンポーネント２０４は、デバッグ・セッションと関連したリアルタイム・データを生成することができる。リアルタイム・データは、デバッグ・プロセスにより生成される出力データ、及び／又は、デバッグ・プロセスと関連した統計データとすることができる。リアルタイム・データはまた、サーバレス・アプリケーションの第１の部分と関連した１つ又は複数のエラーを識別することもできる。デバッグ・コンポーネント２０４はまた、ネットワーク１１６を介して、リアルタイム・データをサーバレス・コンピューティング・コンポーネント１０２に伝送することもできる。１つの態様において、デバッグ・コンポーネント２０４は、サーバレス・コンピューティング・コンポーネント１０２（例えば、サーバ又はサーバレス・コンピューティング・コンポーネント１０２と関連したサーバレス・コンピューティング・システム）によるサーバレス・アプリケーションの第２の部分の実行とほぼ同時に、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行することができる。
【００３５】
コンピューティング・デバイス１１４（例えば、識別コンポーネント２０２及び／又はデバッグ・コンポーネント２０４）は、人間が実行できない（例えば、一人の人間の知性の能力を上回る）サーバレス・アプリケーションの少なくとも一部と関連したデバッグ・プロセスを実行することを理解されたい。例えば、特定の期間にわたって、サーバレス・アプリケーションの少なくとも一部と関連したデバッグ・プロセスを実行しているときに処理されるデータ量、サーバレス・アプリケーションの少なくとも一部と関連したデバッグ・プロセスを実行しているときのデータ処理速度、及び／又はコンピューティング・デバイス１１４（例えば、識別コンポーネント２０２及び／又はデバッグ・コンポーネント２０４）により処理されるデータ・タイプは、同じ期間にわたって、一人の人間の知性により処理できる量、速度及びデータ・タイプと比べて大きく、速く、そして、それらとは異なり得る。また、コンピューティング・デバイス１１４（例えば、識別コンポーネント２０２及び／又はデバッグ・コンポーネント２０４）は、サーバレス・アプリケーションと関連した上記の１つ又は複数のプロセスも実行しながら、１つ又は複数の他の機能（例えば、完全に電源オンする、完全に実行する等）の実行に向けて完全に動作可能でもあり得る。さらに、コンピューティング・デバイス１１４（例えば、識別コンポーネント２０２及び／又はデバッグ・コンポーネント２０４）により生成される出力は、ユーザにより手動で取得できない情報を含むことがある。例えば、デバッグ・プロセスにより生成される情報の量、及び／又は、サーバレス・アプリケーションにより生成される種々の情報は、ユーザにより手動で取得される情報よりも複雑である場合がある。
【００３６】
図３は、本明細書で説明される１つ又は複数の実施形態によるサーバレス・アプリケーションのサブセットのリホストを容易にする、限定されない例示的システム３００のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
【００３７】
システム３００は、コンピューティング・デバイス１１４及びサーバ３０２を含むことができる。コンピューティング・デバイス１１４は、ネットワーク１１６を介して、サーバ３０２と通信することができる。１つの実施形態において、サーバ３０２は、サーバレス・コンピューティング・コンポーネント１０２を含むことができる。代替的な実施形態において、サーバレス・コンピューティング・コンポーネント１０２は、サーバ３０２と通信する別のサーバ上に実装することができる。
【００３８】
システム３００は、サーバレス・アプリケーションの残りの部分がサーバ３０２と関連したクラウド・プラットフォームにより実行される間、デバッグされるサーバレス・アプリケーションの部分のみが、コンピューティング・デバイス１１４と関連したデバッグ経路を通して与えられる、ハイブリッド実行モデルを可能にするサーバレス・プラットフォームとすることができる。従って、サーバレス・プラットフォームの特性（例えば、サーバレス・アプリケーションを書くために通常用いられる特性）を利用して、デバッグのためにサーバレス・アプリケーションの１つ又は複数の関数を削除し、コンピューティング・デバイス１１４にオフロードすることが可能である。コンピューティング・デバイス１１４は、例えば、サーバレス・アプリケーションのためのオフロード・ターゲットとすることができる。本明細書で用いられる場合、「オフロード・ターゲット」とは、サーバレス・アプリケーションに対するデバッグ・セッションが実行されるマシンとすることができる。特定の実施形態において、サーバレス・デバッガをサーバレス・アプリケーションとして書くことができる。付加的に、サーバ３０２と関連したクラウド・プラットフォームからサーバレス・アプリケーションの１つ又は複数の関数をオフロードすることによって、コンピューティング・デバイス１１４を介するネイティブ・デバッグ経験をユーザに提供することができる。例えば、サーバ３０２と関連したサーバレス・アプリケーションの関数が特定のプログラミング言語で書かれる場合、コンピューティング・デバイス１１４と関連したデバッガのユーザは、ネイティブ・デバッガ又はユーザが好む別のデバッガを使用することができる。本明細書で用いられる場合、「関数」とは、イベントに応答して実行されるコンピュータ・コードとすることができる。特定の実施形態において、関数は、引数タプル形式の入力（ｘ１、．．．、ｘｎ）を受け取り、結果タプル（ｒ１、．．．、ｒｍ）を返すことができる。関数の実行はまた、関数により生成される戻り値とは別個のログ記録（ｌ１、．．．、ｌｔ）のシーケンスを生成することもできる。限定されない例において、サーバレス・アプリケーションが特定の関数ａ乃至ｆの出力を提供し、ｆの出力を別の関数ｂに提供する場合、関数シーケンスは、ａ→ｆ→ｂの関数シーケンスと考えることができる。さらに、シーケンスの結果は、関数シーケンスにおける最終関数の結果と考えることができる。別の限定されない例において、ｆの実行が、何らかのイベントｅによりトリガされるようにプログラミングされる場合、
【数１】
2018073405.tif 000003
を規則と考えることができ、ｆは、イベント・トリガ型アクションと考えることができる。
【００３９】
特定の実施形態において、サーバレス・プラットフォームのサーバレス・アプリケーションのサブセットを、コンピューティング・デバイス１１４上でリホストすることができる。例えば、サーバレス・アプリケーション３０４の第１の部分３０４ａは、コンピューティング・デバイス１１４により実行することができ、サーバレス・アプリケーション３０４の第１の部分３０４ｂは、サーバ３０２及び／又はサーバレス・コンピューティング・コンポーネント１０２により実行することができる。サーバレス・アプリケーション３０４の第１の部分３０４ａは、例えば、コンピューティング・デバイス１１４によりデバッグされるサービス・アプリケーション３０４の一部とすることができる。例えば、サーバレス・アプリケーション３０４の第１の部分３０４ａは、デバッグ目的で利用することができる。付加的に、サーバレス・アプリケーション３０４の第１の部分３０４ａが特定のサーバレス・プラットフォーム（例えば、サーバ３０２）による実行に適していないとの判断に応答して、代替的なコンピューティング環境において、サーバレス・アプリケーション３０４の第１の部分３０４ａを実行することができる（例えば、サーバレス・アプリケーション３０４の第１の部分３０４ａは、コンピューティング・デバイス１１４により実行することができ、サーバレス・アプリケーション３０４の第２の部分３０４ｂは、サーバ３０２により実行することができる）。
【００４０】
限定されない例において、コンピューティング・デバイス１１４は、デバッグされる関数ｆを識別することができる。コンピューティング・デバイス１１４を介して関数ｆをデバッグするとき、サーバ３０２の基本入力−出力期待値を保持することができる。従って、サーバ３０２により実行されるとき、関数ｆが（ｒ１、．．．、ｒｍ）を返し、ログ（ｌ１、．．．、ｌｔ）を生成する場合、コンピューティング・デバイス１１４により実行される関数ｆのデバッグされたバージョンは、同一の結果をもたらすことができる。さらに、関数ｆが、サーバ３０２により実行される他の構成子（construct）をもたらす場合、他の構成子は、あたかもデバッグ・セッションが進行中でなかったかのように、サーバ３０２を介して実行し続けることができる。例えば、関数ｆはが関数評価のシーケンスａ→ｆ→ｂの一部として実行される場合、又は、関数ｆがイベント・トリガ型アクション
【数２】
2018073405.tif 000004
である場合、両方の構成子は、あたかも関数ｆがデバッグされなかったかのように同じ結果を何度も実行することができる。
【００４１】
１つの実施形態において、コンピューティング・デバイス１１４及びサーバ３０２は、サーバレス実行環境として一緒に実装することができる。１つの態様において、サーバレス実行環境は、スタンドアロンの関数（例えば、いずれのトリガ・イベントにもリンクされないサブルーチン）の作成と関連したプリミティブ操作のセットをサポートすることができる。さらに、サーバレス実行環境はまた、アプリケーション定義のパラメータ化されたトリガの作成を容易にすることができる。サーバレス実行環境はまた、イベント・ソースのプログラマチック作成及び破壊も容易にすることができる。従って、トピックのセットを場当たり的方法で拡張及び減少することができる。付加的に、サーバレス・プラットフォームは、これらのトリガの発動をプログラムでサポートすることができる。イベントのプログラミングの発動に渡されるパラメータは、トリガと関連したイベント・トリガ型アクションのセットへの入力として渡すことができる。さらに、サーバレス実行環境は、こうしたアプリケーション定義のトリガを関数の実行に結合させるカスタム規則の作成を容易にすることができる。サーバレス実行環境はまた、コードのクローン化を回避するために、関数バインディング（function binding）のサポートを容易にすることもできる。１つの態様において、サーバレス実行環境は、カリー化形式の部分評価をサポートすることができ、それにより関数ｆ（ｘ１、ｘ２、．．．、ｘｎ）を新しい名前ｇにバインドすることができ、その結果、ｇ（ｘ２、．．．、ｘｎ）＝ｆ（ｘ１）となる。従って、コード・スキュー（code skew）のようなハザードを最小にすること、及び／又はサーバレス・アプリケーションの性能を向上させることができる。
【００４２】
別の実施形態において、コンピューティング・デバイス１１４は、サーバレス・アプリケーション３０４の第１の部分３０４ａの実行中、バインディング・プロセスを用いて、ｘ２、．．．、ｘｎだけが分かっている文脈において関数ｆの実行を可能にすることができる。例えば、サーバレス・アプリケーション３０４の第１の部分３０４ａと関連したデバッグ・プログラムが、デバッグ・プログラムの完了を容易にするために付加的なパラメータｘ１を必要とする場合、バインディングは、サーバレス・アプリケーション３０４の第１の部分３０４ａをクローン化及び変更する必要なしに、関数ｆを装うことができる関数ｇの作成を可能にする。別の実施形態において、サーバレス・アプリケーション３０４の第１の部分３０４ａは、サーバレス・アプリケーション３０４の単一の関数とすることができる。従って、サーバレス・アプリケーション３０４の単一の関数を、サーバ３０２から抽出し、コンピューティング・デバイス１１４上で実行することができる（例えば、サーバレス・アプリケーション３０４の単一の関数は、サーバレス実行プラットフォームとは別個のマシン上で実行することができる）。一例において、単一の関数から、構成子のセットを作成することができる。構成子のセットは、継続渡しを用いて単一の関数を実装することができる。このことは、コンピューティング・デバイス１１４により実行されるデバッグ・プロセスが、サーバレス実行プラットフォームにおける１つ又は複数の他の処理の機能なしに、単一の関数の実行をサスペンドすることを可能にする。
【００４３】
図４は、本明細書で説明される１つ又は複数の実施形態によるデバッグ・セッションを容易にする、限定されない例示的システム４００のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
【００４４】
システム４００は、インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、ブローカ・コンポーネント１０８、及びコンピューティング・デバイス１１４を含む。インターフェース・コンポーネント１０４、リライタ・コンポーネント１０６、及びブローカ・コンポーネント１０８は、サーバレス・クラウド・コンピューティング・プラットフォームと関連付けることができる。コンピューティング・デバイス１１４は、クライアント・プラットフォームと関連付けることができる。リライタ・コンポーネント１０６は、トリガ・コンポーネント４０２、プロキシ・コンポーネント４０４、ログ・コンポーネント４０６、及び／又はエラー条件コンポーネント４０８を含むことができる。トリガ・コンポーネント４０２、プロキシ・コンポーネント４０４、ログ・コンポーネント４０６、及び／又はエラー条件コンポーネント４０８は、コンピューティング・デバイス１１４により実行されるデバッグ・セッション４１０の実行を容易にすることができる。図４に示される実施形態において、システム４００は、本明細書で説明される１つ又は複数の実施形態による、サーバレス・クラウド・コンピューティング・プラットフォームに対する正常なデバッグ・セッションについてのプロセス・フローを示すことができる。図４に示される代替的な実施形態において、システム４００は、サーバレス・クラウド・コンピューティング・プラットフォームに対する異常終了（abort）のデバッグ・セッションについてのプロセス・フローを示すことができる。
【００４５】
１つの実施形態において、コンピューティング・デバイス１１４は、インターフェース・コンポーネント１０４及び／又はブローカ・コンポーネント１０８により容易にされるブローカリング（brokering）通信を介してリライタ・コンポーネント１０６と通信することができる。例えば、リライタ・コンポーネント１０６は、コンピューティング・デバイス１１４と間接的に通信することができる。１つの態様において、デバッグ・セッション４１０は、コンピューティング・デバイス１１４上に実装されるデバッガ・アプリケーションを介して、コンピューティング・デバイス１１４上で実行することができる。例えば、デバッグ・セッション４１０は、サーバレス・アプリケーション３０４の第１の部分３０４ａを実行することができる。別の態様において、ブローカ・コンポーネント１０８は、リライタ・コンポーネント１０６とコンピューティング・デバイス１１４との間の通信を容易にするためのサービス・ブローカとすることができる。一例において、ブローカ・コンポーネント１０８は、仮想プライベート・ネットワーク（ＶＰＮ）トンネリング・サービス（例えば、コモディティＶＰＮサービス）を用いて、リライタ・コンポーネント１０６とコンピューティング・デバイス１１４との間の通信を容易にすることができる。従って、リライタ・コンポーネント１０６とコンピューティング・デバイス１１４との間にセキュリティ保護（secure）トンネルを設けることができる。コンピューティング・デバイス１１４上でインストール・ステップを実行し、リライタ・コンポーネント１０６とコンピューティング・デバイス１１４との間のセキュリティ保護トンネルに関する１つ又は複数のＶＰＮ資格証明（credentials）を獲得することができる。特定の実施形態において、１つ又は複数のＶＰＮ資格証明の獲得は、例えば、オフロード・ターゲット登録要求、アップストリーム・ハンドオフ・デバッグ開始要求等のような要求について監視するクラウド・サービスを介して達成することができる。この要求は、例えば、コンピューティング・デバイス１１４と関連したユーザ識別の既存のサーバレス・プラットフォームの資格証明を伴うことがある。さらに、ブローカ・コンポーネント１０８は、１つ又は複数のＶＰＮ資格証明を用いて、リライタ・コンポーネント１０６とコンピューティング・デバイス１１４とをセキュリティ保護された方法で接続することができる。しかしながら、コンピューティング・デバイス１１４が、リライタ・コンポーネント１０６により直接アクセス可能である特定の実施形態においては、コンピューティング・デバイス１１４は、リライタ・コンポーネント１０６との直接通信を開始することができる（例えば、ブローカ・コンポーネント１０８を用いずに）。
【００４６】
１つの実施形態において、コンピューティング・デバイス１１４によりデバッグされるサーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、サーバレス・アプリケーションの１つ又は複数の関数）に基づいて、リライタ・コンポーネント１０６により、アーチファクトのセット（例えば、アセットのセット）を生成することができる。アーチファクトのセットは、例えば、トリガ・コンポーネント４０２により生成される第１のアーチファクトを含むことができる。第１のアーチファクトは、トリガ・コンポーネント４０２によって生成される完了時（ｏｎ−ｄｏｎｅ）トリガＴに関連し得る。例えば、デバッグされた関数は、トリガ・コンポーネント４０２によって生成される完了時トリガＴに基づいて生成することができる（例えば、デバッグ・セッションが完了したとき）。デバッグされた関数は、ログ記録（ｌ１、．．．、ｌｔ）を含み、結果（ｒ１、．．．、ｒｍ）を返すことができる。トリガ・コンポーネント４０２によって生成される完了時トリガＴは、Ｔ（ｒ１、．．．、ｒｔ、ｌ１、．．．，ｌｔ）として生成及び実行することができる。
【００４７】
付加的に又は代替的に、アーチファクトのセットは、プロキシ・コンポーネント４０４により生成される第２のアーチファクトを含むことができる。第２のアーチファクトは、プロキシ・コンポーネント４０４により生成されるアップストリーム・ハンドオフ関数Ｕに関連し得る。アップストリーム・ハンドオフ関数Ｕは、サーバ３０２とコンピューティング・デバイス１１４との間のプロキシとしての機能を果たすことができる。例えば、単一の関数ｆが、タイプ
【数３】
2018073405.tif 000005
を含む場合、アップストリーム・ハンドオフ関数Ｕは、タイプ
【数４】
2018073405.tif 000006
を含むことができる。アップストリーム・ハンドオフ関数Ｕは、完了時トリガＴ及びサーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）に基づいて、サーバレス・アプリケーション３０４の第１の部分３０４ａについてのソースを獲得することができる。アップストリーム・ハンドオフ関数Ｕはまた、コンピュータ・コード、完了時トリガＴ、及び／又はパラメータのセット（ｘ１、．．．、ｘｎ）をコンピューティング・デバイス１１４に送ることもできる。１つの態様において、アップストリーム・ハンドオフ関数Ｕは、バウンド形式（bound form）Ｕｆ＝Ｕ（Ｔ，ｆ）を作成することにより、あたかも単一の関数ｆであるかのようにコンピューティング・デバイス１１４に提示することができる。このように、アップストリーム・ハンドオフ関数のバウンド形式Ｕｆ及びサーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）は、対応するタイプのシグネチャを含むことができ、従って、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）を用いる構成子のセット（例えば、シーケンス又は規則のセット）として用いることができる。
【００４８】
付加的に又は代替的に、アーチファクトのセットは、ログ・コンポーネント４０６により生成される第３のアーチファクトを含むことができる。第３のアーチファクトは、ログ・コンポーネント４０６により生成されるダウンストリーム・ハンドオフ関数Ｄに関連し得る。サーバレス・アプリケーション３０４の第２の部分３０４ｂが、あたかもサーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）がコンピューティング・デバイス１１４によりデバッグされていないかのように実行されることを可能にするために、第３のアーチファクトを、ログ・コンポーネント４０６により生成することができる。第３のアーチファクトは、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）の実行の完了を表すことができる。従って、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）の呼び出しについての結果又はログ記録に関するあらゆる後のクエリを適切に供することができる。サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）が（ｒ１、．．．、ｒｍ）を戻し、ログ記録（ｌ１、．．．、ｌｔ）を作成する場合、ダウンストリーム・ハンドオフ関数Ｄは、Ｄ（ｒ１、．．．、ｒｍ、ｌ１、．．．、ｌｔ）と等しい。さらに、ダウンストリーム・ハンドオフ関数Ｄは、（ｒ１、．．．、ｒｍ、ｌ１、．．．、ｌｔ）と関連付けられた値を返す及び／又はログ記録する。付加的に又は代替的に、アーチファクトのセットは、ログ・コンポーネント４０６により生成される第４のアーチファクトを含むことができる。第４のアーチファクトは、ログ・コンポーネント４０６により生成される継続規則Ｒに関連し得る。継続規則Ｒは、サーバ３０２に、
【数５】
2018073405.tif 000007
を介して、ダウンストリーム・ハンドオフ関数Ｄをイベント・トリガ型アクションに変化させるよう、命令することができ、ここで、イベント・トリガ型アクションは、デバッグ・セッション４１０に関連したイベントと関連付けられる。
【００４９】
付加的に又は代替的に、アーチファクトのセットは、エラー条件コンポーネント４０８により生成される第５のアーチファクトを含むことができる。第５のアーチファクトは、エラー条件コンポーネント４０８により生成される回路ブレーカ関数Ｃに関連し得る。特定の実施形態において、第５のアーチファクトは、デバッグ・セッション４１０に関連したエラーと関連付けられた実行経路のために作成することができる。例えば、サーバレス・アプリケーション３０４の第１の部分３０４ａのデバッグが完了する前に、コンピューティング・デバイス１１４が、デバッグ・セッション４１０を早期に終了することがある。別の例において、デバッグ・セッション４１０と関連したデバッガにおいて、コンピューティング・デバイス１１４が、デバッグ・セッションがサーバレス・アプリケーション３０４の第１の部分３０４ａの実行を正常終了しないような方法で、サーバレス・アプリケーション３０４の第１の部分３０４ａを修正することがある。さらに別の例において、サーバレス・アプリケーション３０４の第１の部分３０４ａを実行するデバッグ・セッション４１０と関連付けられたオフロード・プロセスにおいてエラーが存在することがある。そうした場合、コンピューティング・デバイス１１４は、サーバレス・アプリケーション３０４の第１の部分３０４ａの正しい実行のファサード（facade）を保持するように１つ又は複数のアクションを実行することができ、その結果、サーバレス・クラウド・コンピューティング・プラットフォームは、サーバレス・アプリケーション３０４の第１の部分３０４ａが適切に実行されると判断する。例えば、アップストリーム・ハンドオフ関数Ｕと同じように、完了時トリガＴの入力、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）、及び引数のセット（ｘ１、．．．、ｘｎ）として利用する回路ブレーカ関数Ｃを作成することができる。回路ブレーカ関数Ｃは、引数のセット（ｘ１、．．．、ｘｎ）に対してサーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）をプログラムで呼び出すことができる。回路ブレーカ関数Ｃはまた、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）の出力を用いて、完了時トリガＴを実行することもできる。エラー条件の検出に応答して、コンピューティング・デバイス１１４は、回路ブレーカ関数Ｃと関連した第５のアーチファクトを呼び出すことができる。
【００５０】
特定の実施形態において、アップストリーム・ハンドオフ関数Ｕは、コンピューティング・デバイス１１４に、要求されるデバッグ・セッションを通知することができる。コンピューティング・デバイス１１４は、完了時トリガＴを、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）についての関数ソースにインジェクトすることができる。コンピューティング・デバイス１１４はまた、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）を処理することができるデバッグ・セッション４１０のデバッガ・アプリケーションを判断及び／又はコンパイルすることもできる。完了時トリガＴを、サーバレス・アプリケーション３０４の第１の部分３０４ａ（例えば、単一の関数ｆ）にインジェクトするために、コンピューティング・デバイス１１４は、完了時トリガ・アルゴリズムを実行することができる。サーバレス・アプリケーション３０４の第１の部分３０４ａと関連した関数がｆと呼ばれ、完了時トリガはＴと呼ばれ、関数ｆが特定のプラミング言語で書かれる例において、オフロード・ターゲット・アルゴリズムは、以下のコンピュータ・コードを生成することができる。
【数６】
2018073405.tif 000008
【００５１】
ｆｉｒｅ（発動）コマンド「ｆｉｒｅ（）」は、所定の記録により所定のトリガを発動するために、サーバ３０２との通信を容易にすることができる。ダウンストリーム・ハンドオフ関数Ｄを生成して、所定の結果とログ記録のセットの解釈を容易にすることができる。完了時トリガＴをインジェクトした後、コンピューティング・デバイス１１４上のデバッグ・セッション４１０と関連したコンパイラ及びデバッガは、関数ｆの呼び出しを決定することができる。例えば、サーバレス・アプリケーション３０４の第１の部分３０４ａが特定のプログラミング言語で書かれる場合、コンピューティング・デバイス１１４は、特定のプログラミング言語のためのコンパイラを用いて、サーバレス・アプリケーション３０４の第１の部分３０４ａをコンパイルし、次に、特定のプログラミング言語のためのデバッガを呼び出すことができる。回路ブレーカ関数Ｃを呼び出すべきかどうかを決定するために、コンピューティング・デバイス１１４は、特定のアクティビティ（例えば、デバッグ・プロセスからの予期しない終了、デバッグ・プロセスからの早期終了等）について、デバッグ・セッション４１０と関連したコンパイラ及びデバッガを監視することができる。
【００５２】
図５は、本明細書で説明される１つ又は複数の実施形態によるデバッグ・セッションを容易にする、限定されない例示的システム５００のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
【００５３】
図５に示される実施形態において、システム５００は、関数シーケンスＡ→Ｂ→Ｃに対するデバッグを示す。例えば、コンピューティング・デバイス１１４により生成される識別子データは、コンピューティング・デバイス１１４のデバッグ・セッション４１０を介してデバッグされるべき関数Ｂを識別することができる。関数Ｂは、少なくとも関数Ａ及び関数Ｃと関連付けることができる。例えば、関数Ｂは、関数Ａが情報を関数Ｂに提供し、関数Ｂがデータを関数Ｃに提供する関数シーケンスにおいて存在し得る。従って、リライタ・コンポーネント１０６は、関数Ａ及び関数Ｂがサーバレス・クラウド・コンピューティング・プラットフォーム（例えば、サーバ３０２と関連したサーバレス・クラウド・コンピューティング・プラットフォーム）により実行される間、コンピューティング・デバイス１１４により実行される関数Ｂをコンピューティング・デバイス１１４に提供することができる。
【００５４】
関数Ａ、関数Ｂ及び関数Ｃをコンピューティング・デバイスへオフロードするのではなく、コンピューティング・デバイス１１４と関連したオフロードを関数Ｂに限定することは、関数Ａ、関数Ｂ及び関数Ｃと関連したサーバレス・アプリケーションのコンピューティング性能の低下を最小にするのを助長することができる。さらに、特定の実施形態において、関数Ａ及び関数Ｃが、デバッグ・セッション４１０によりサポートされないプログラミング言語で書かれていることがある。例えば、関数Ｂは、第１のプログラミング言語で書かれ、関数Ａ及び関数Ｃは、第１のプログラミング言語とは異なる少なくとも第２のプログラミング言語で書かれることがある。
【００５５】
コンピューティング・デバイス１１４への関数Ｂのオフロードを容易にするために、リライタ・コンポーネント１０６により、アーチファクトのセットを生成することができる。例えば、リライタ・コンポーネント１０６は、関数Ａと関連した第１のシーケンスＳ１、及び関数Ｂと関連した第２のシーケンスＳ２を生成することができる。第１のシーケンスＳ１は、Ｓ１＝ａ→Ｕｂと等しくなることができ、ここでＵｂは、関数Ｂに対して作成される、プロキシ・コンポーネント４０４と関連したアップストリーム・ハンドオフ関数である。第２のシーケンスＳ２は、Ｓ２＝Ｄｂ→ｃと等しくなることができ、ここでＤｂは、関数Ｂに対して作成される、ログ・コンポーネント４０６と関連したダウンストリーム・ハンドオフ関数である。
【００５６】
関数Ｂをデバッグするとき、継続規則は、ダウンストリーム・ハンドオフ関数Ｄｂの呼び出しをトリガすることができる。関数Ｂと関連したシーケンスをスプライスするとき、継続規則は、代替的に、第２のシーケンスＳ２を呼び出すことができる。従って、第１のシーケンスＳ１及び第２のシーケンスＳ２を呼び出す正味の影響は、オリジナル・シーケンスＳが呼び出された場合と同じであり得る。従って、第２のシーケンスＳ２の出力は、オリジナル・シーケンスＳの出力と合致し、構成アクションについての呼び出しの全ての介在するログ及び記録を保持することができる。
【００５７】
１つの実施形態において、デバッグ・セッション４１０は、ログ記録及び／又は呼び出し記録を減らすことにより、さらに最適化することができる。例えば、デバッグ・セッション４１０は、ダウンストリーム・ハンドオフ関数Ｄｂなしに実行することができる。ダウンストリーム・ハンドオフ関数Ｄｂは、関数Ｂと関連した呼び出しの完了を反映するログ及びアクティブ化記録を提供するように作成できるので、関数Ｂについてのログ及び結果記録を最小限にし、第２のシーケンスＳ２を関数Ｃから始めることができる。第２のシーケンスＳ２を用いて、オリジナル・シーケンスＳによる出力の生成を容易にすることができる。従って、特定の実施形態において、デバッグ・セッション４１０は、ダウンストリーム・ハンドオフ関数Ｄｂなしに実行することができる。特定の実施形態において、関数Ｂは、規則のセットに基づいて、デバッグ・セッション４１０を介してデバッグすることができる。例えば、関数Ｂは、規則のセットに基づいてデバッグされるイベント駆動型関数とすることができる。限定されない例において、デバッグされる関数Ｂが規則
【数７】
2018073405.tif 000009
の一部である場合、アーチファクトのセットを作成することができる。新しい規則
【数８】
2018073405.tif 000010
を作成することができ、ここで、Ｕｆは、関数Ｂについて作成されたアップストリーム・ハンドオフ関数である。さらに、特定の実施形態において、デバッグ可能な関数を作成するとき、コンピューティング・デバイス１１４は、デバッグ可能な関数がオリジナル関数の名前を選択する（co-opt）かどうかを決定することができる。例えば、関数Ｂをデバッグするとき、コンピューティング・デバイス１１４は、一時的に、関数Ｂの名前を関数Ｂ’に変更し、アップストリーム・ハンドオフ関数Ｕｆを関数Ｂと命名するかどうかを決定する。１つの態様において、関数Ｂと対話するための既存のインターフェースが、関数Ｂ’を用いることができる。１つの態様において、デバッグ・セッション４１０は、アップストリーム・ハンドオフ関数Ｕｆに、関数Ｂの名前を用いるよう選択させることにより開始することができる。別の態様において、デバッグ・セッション４１０は、関数Ｂからアップストリーム・ハンドオフ関数Ｕｆへの内部マッピングを維持することができる。
【００５８】
図６は、本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションと関連したデバッグ・セッションを容易にするための、限定されない例示的コンピュータ実施方法６００のフロー図を示す。１つの実施形態において、方法６００は、サーバレス・コンピューティング・コンポーネント１０２と関連付けることができる。６０２において、コンピューティング・デバイスから、プロセッサに動作的に結合されたシステムにより（例えば、インターフェース・コンポーネント１０４により）、コンピューティング・デバイスによりリホストされるサーバレス・アプリケーションの第１の部分を識別する識別子データを受け取り、システムは、ネットワーク・デバイスを介してコンピューティング・デバイスと通信する。６０４において、システムにより（例えば、インターフェース・コンポーネント１０４又はブローカ・コンポーネント１０８により）、サーバレス・アプリケーションの第１の部分をコンピューティング・デバイスに伝送する。６０６において、システムにより（例えば、リライタ・コンポーネント１０６により）、コンピューティング・デバイスを介して、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションの性能を促進させる。６０８において、システムにより（例えば、リライタ・コンポーネント１０６により）、サーバレス・アプリケーションの第２の部分を実行する。付加的に又は代替的に、サーバ及び／又はシステムと関連したサーバレス・クラウド・コンピューティング・プラットフォームにより、サーバレス・アプリケーションの第２の部分を実行することができる。１つの実施形態において、方法６００は、システムにより（例えば、インターフェース・コンポーネント１０４により）、コンピューティング・デバイスから、サーバレス・アプリケーションの第１の部分の変更されたバージョンを受け取ることをさらに含むことができる。付加的に、方法６００は、システムにより（例えば、リライタ・コンポーネント１０６により）、サーバレス・アプリケーションの第１の部分の変更されたバージョンを、サーバレス・アプリケーションの第２の部分と結合することをさらに含むことができる。特定の実施形態において、方法６００は、システムにより（例えば、リライタ・コンポーネント１０６により）、デバッグ・セッションと関連したリアルタイム・データに基づいて、サーバレス・アプリケーションの第２の部分を実行することをさらに含むことができる。さらに、特定の実施形態において、方法６００は、（例えば、サーバレス・アプリケーションと関連したエラーの数の低減を促進するため、及び／又は、サーバレス・アプリケーションの性能の改善を促進するために）コンピューティング・デバイスがサーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行する間、サーバレス・アプリケーションの第２の部分を実行することをさらに含むことができる。
【００５９】
図７は、本明細書で説明される１つ又は複数の実施形態による、サーバレス・アプリケーションと関連したデバッグ・セッションを容易にするための、限定されない例示的コンピュータ実施方法７００のフロー図を示す。１つの実施形態において、方法７００は、コンピューティング・デバイス１１４と関連付けることができる。７０２において、プロセッサに動作的に結合されたシステムにより（例えば、識別コンポーネント２０２により）、サーバレス・アプリケーションの第１の部分と関連した識別子データを判断する。７０４において、システムにより（例えば、識別コンポーネント２０２により）、ネットワーク・デバイスを介して、識別子データをサーバレス・コンピューティング・システムに伝送する。７０６において、システムにより（例えば、デバッグ・コンポーネント２０４により）、サーバレス・コンピューティング・システムから、サーバレス・アプリケーションの第１の部分を受け取る。７０８において、システムにより（例えば、デバッグ・コンポーネント２０４により）、サーバレス・コンピューティング・システムによるサーバレス・アプリケーションの第２の部分の実行とほぼ同時に、サーバレス・アプリケーションの第１の部分と関連したデバッグ・セッションを実行する。１つの実施形態において、方法７００は、システムにより（例えば、識別コンポーネント２０２又はデバッグ・コンポーネント２０４により）、ネットワーク・デバイスを介して、サーバレス・コンピューティング・システムと通信することをさらに含むことができる。別の実施形態において、方法７００は、システムにより（例えば、デバッグ・コンポーネント２０４により）、サーバレス・アプリケーションの第１の部分の変更されたバージョンをサーバレス・コンピューティング・システムに伝送することをさらに含むことができる。さらに別の実施形態において、方法７００は、システムにより（例えば、デバッグ・コンポーネント２０４により）、デバッグ・セッションと関連したリアルタイム・データをサーバレス・コンピューティング・システムに伝送することをさらに含むことができる。特定の実施形態において、方法７００は、ネットワーク・デバイスを介してサーバレス・コンピューティング・システムと通信するコンピューティング・デバイスによってデバッグ・アプリケーションを用いることを含むことができる。
【００６０】
説明を簡単にするために、コンピュータ実施方法は、一連の動作として示され、説明される。本革新は、示される動作、及び/又は動作の順序に限定されるものではなく、例えば、動作は、様々な順序で及び／又は同時に行われ、他の動作は本明細書に提示及び説明されないことを認識及び理解されたい。さらに、開示される主題によるコンピュータ実施方法を実施するために、全ての示される動作を必要としないことがある。さらに、当業者であれば、コンピュータ実施方法を、状態図又はイベントを介して一連の相関状態として代替的に表すこともできることを理解及び認識するであろう。付加的に、以下に及び本明細書の全体を通して開示されるコンピュータ実施方法は、こうしたコンピュータ実施方法をコンピュータに伝送及び転送するのを容易にするために、物品上に格納することができる。本明細書で用いられる場合、物品という用語は、あらゆるコンピュータ可読デバイス又はストレージ媒体からアクセス可能なコンピュータ・プログラムを含むように意図される。
【００６１】
さらに、少なくともサーバレス・アプリケーションを実行し、ネットワーク（例えば、コンピューティング・デバイスとサーバとの間の通信）を介してサーバレス・アプリケーションの一部を伝送することは、電気的及び機械的コンポーネント及び回路の組み合わせから確立されるので、人間は、サーバレス・コンピューティング・コンポーネント（例えば、サーバレス・コンピューティング・コンポーネント１０２）及び／又はコンピューティング・デバイス（例えば、本明細書に開示されるコンピューティング・デバイス１１４）により実行される処理を再現又は実行することはできない。例えば、人間は、サーバレス・コンピューティング・コンポーネントを実行することができず、かつ、コンピューティング・デバイスとサーバ等との間のサーバレス・アプリケーションと関連したデータ及び／又はパケット化されたデータを通信することができない。
【００６２】
開示される主題の種々の態様についての文脈を与えるために、図８及び以下の説明は、開示される主題の種々の態様を実装できる適切な環境の一般的な説明を提供するように意図される。図８は、本明細書に説明される１つ又は複数の実施形態を容易にすることができる限定されない例示的動作環境のブロック図を示す。簡潔にするために、本明細書で説明される他の実施形態において用いられる同様の要素の反復的な説明は省略する。
【００６３】
図８を参照すると、本開示の種々の態様を実施するための好適な動作環境８００が、コンピュータ８１２を含むこともできる。コンピュータ８１２は、処理ユニット８１４、システム・メモリ８１６及びシステム・バス８１８を含むこともできる。システム・バス８１８は、これに限定されるものではないが、システム・メモリ８１６を含むシステム・コンポーネントを処理ユニット８１４に結合する。処理ユニット８１４は、種々の利用可能なプロセッサのいずれかとすることができる。二重マイクロプロセッサ及び他のマルチプロセッサ・アーキテクチャを処理ユニット８１４として用いることもできる。システム・バス８１８は、メモリ・バス又はメモリ・コントローラ、周辺バス又は外部バス、及び／又は、これらに限定されるものではないが、業界標準アーキテクチャ（ＩＳＡ）、マイクロ・チャネル・アーキテクチャ（ＭＳＡ）、拡張ＩＳＡ（ＥＩＳＡ）、Ｉｎｔｅｌｌｉｇｅｎｔ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ（ＩＤＥ）、ＶＥＳＡ  Ｌｏｃａｌ  Ｂｕｓ（ＶＬＢ）、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）、カード・バス、ユニバーサル・シリアル・バス（ＵＳＢ）、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）、Ｆｉｒｅｗｉｒｅ（ＩＥＥＥ１３９４）、及びＳｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）を含む任意の種々の利用可能なバス・アーキテクチャを用いたローカル・バスを含む、幾つかのタイプのバス構造体のいずれかとすることができる。
【００６４】
システム・メモリ８１６はまた、揮発性メモリ８２０及び不揮発性メモリ８２２を含むこともできる。起動の際などにコンピュータ８１２内の要素間で情報を転送するための基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）は、不揮発性メモリ８２２内に格納される。コンピュータ８１２はまた、取り外し可能／取り外し不能な揮発性／不揮発性コンピュータ・ストレージ媒体を含むこともできる。図８は、例えば、ディスク・ストレージ８２４を示す。ディスク・ストレージ８２４は、これらに限定されるものではないが、磁気ディスク・ドライブ、フロッピー・ディスク・ドライブ、テープ・ドライブ、Ｊａｚドライブ、Ｚｉｐドライブ、ＬＳ−１００ドライブ、フラッシュ・メモリ・カード、又はメモリ・スティックのようなデバイスを含むこともできる。ディスク・ストレージ８２４は、別個に又は他のストレージ媒体と組み合わせてストレージ媒体を含むこともできる。システム・バス８１８へのディスク・ストレージ８２４の接続を容易にするために、一般的に、インターフェース８２６のような、取り外し可能又は取り外し不能インターフェースが用いられる。図８は、ユーザと好適な動作環境８００において説明される基本コンピュータ・リソースとの間の媒介として働くソフトウェアも示す。そうしたソフトウェアは、例えば、オペレーティング・システム８２８を含むこともできる。ディスク・ストレージ８２４上に格納することができるオペレーティング・システム８２８は、コンピュータ８１２のリソースを制御し、割り当てるように働く。
【００６５】
システム・アプリケーション８３０は、例えばシステム・メモリ８１６内又はディスク・ストレージ８２４上に格納された、プログラム・モジュール８３２及びプログラム・データ８３４を通じたオペレーティング・システム８２８によるリソースの管理を利用する。この開示は、種々のオペレーティング・システム、又はオペレーティング・システムの組み合わせにより実施できることを認識されたい。ユーザは、入力デバイス８３６を通じてコマンド又は情報をコンピュータ８１２に入力する。入力デバイス８３６は、これらに限定されるものではないが、マウス、トラックボール、スタイラス、タッチ・パッドのようなポインティング・デバイス、キーボード、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星放送受信アンテナ、スキャナ、ＴＶチューナ・カード、デジタル・カメラ、デジタル・ビデオ・カメラ、ウェブ・カメラ等を含む。これら及び他の入力デバイスは、インターフェース・ポート８３８を介してシステム・バス８１８を通じて処理ユニット８１４に接続される。インターフェース・ポート８３８は、例えば、シリアル・ポート、パラレル・ポート、ゲーム・ポート及びユニバーサル・シリアル・バス（ＵＳＢ）を含む。出力デバイス８４０は、同じタイプのポートの一部を入力デバイス８３６として使用する。従って、例えば、ＵＳＢポートを用いて、コンピュータ８１２への入力を提供し、出力情報をコンピュータ８１２から出力デバイス８４０に提供することができる。出力アダプタ８４２は、特別なアダプタを必要とする他の出力デバイス８４０の中でも、モニタ、スピーカ及びプリンタのような幾つかの出力デバイス８４０があることを示すように提供される。出力アダプタ８４２は、限定ではなく例示として、出力デバイス８４０とシステム・バス８１８との間の接続手段を提供するビデオ及び音声カードを含む。遠隔コンピュータ８４４のような、他のデバイス及び／又はデバイスのシステムは、入力及び出力の機能の両方を提供することに留意されたい。
【００６６】
コンピュータ８１２は、遠隔コンピュータ８４４のような１つ又は複数の遠隔コンピュータへの論理接続を用いるネットワーク化環境で動作することができる。遠隔コンピュータ８４４は、コンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサ・ベースのアプライアンス、ピア・デバイス、又は他の共通ネットワーク・ノード等とすることができ、一般的に、コンピュータ８１２に関して記載される要素の多く又は全てを含むこともできる。簡潔にするために、メモリ・ストレージ・デバイス８４６だけが、遠隔コンピュータ８４４と共に示されている。遠隔コンピュータ８４４は、ネットワーク・インターフェース８４８を通じてコンピュータ８１２に論理的に接続され、次に、通信接続８５０を介して物理的に接続される。ネットワーク・インターフェース８４８は、ローカル・エリア・ネットワーク（ＬＡＮ）、広域エリア・ネットワーク（ＷＡＮ）、セルラー・ネットワーク等のような有線及び／又は無線通信ネットワークを含む。ＬＡＮ技術として、Ｆｉｂｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ（ＦＤＤＩ）、Ｃｏｐｐｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ（ＣＤＤＩ）、イーサネット、トークン・リング等が挙げられる。ＷＡＮ技術として、これらに限定されるものではないが、ポイント・ツー・ポイント・リンク、統合サービス・デジタル網（Ｉｎｔｅｇｒａｔｅｄ  Ｓｅｒｖｉｃｅ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋｓ：ＩＳＤＮ）及びその変形のような回路交換網、パケット交換網、及びデジタル加入者線（Ｄｉｇｉｔａｌ  Ｓｕｂｓｃｒｉｂｅｒ  Ｌｉｎｅ：ＤＳＬ）が挙げられる。通信接続８５０は、ネットワーク・インターフェース８４８をシステム・バス８１８に接続するために用いられるハードウェア／ソフトウェアに関する。通信接続８５０は、ネットワーク・インターフェース８４８をシステム・バス８１８に接続するために用いられるハードウェア／ソフトウェアを指す。通信接続８５０は、明確に示すためにコンピュータ８１２内部に示されるが、これはコンピュータ８１２の外部にあってもよい。ネットワーク・インターフェース８４８への接続のためのハードウェア／ソフトウェアは、例示のためだけに、正規電話グレード・モデム（ｒｅｇｕｌａｒ  ｔｅｌｅｐｈｏｎｅ  ｇｒａｄｅ  ｍｏｄｅｍ）、ケーブル・モデム及びＤＳＬモデム、ＩＳＤＮモデムを含むモデム、ＩＳＤＮアダプタ、及びイーサネット・カードのような内部及び外部技術を含むこともできる。
【００６７】
本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書に述べられる技術の実装は、クラウド・コンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在知られている又は後に開発される他のあらゆるタイプのコンピューティング環境と共に実装されることが可能である。
【００６８】
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス）の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、及び少なくとも４つの配備モデルを含むことができる。
【００６９】
特徴は、以下の通りである。
オンデマンド・セルフサービス：クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス：機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、及びＰＤＡ）による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化：プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置（例えば、国、州、又はデータセンタ）を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性：機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定：クラウド・システムは、サービスのタイプ（例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント）に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
【００７０】
サービス・モデルは以下の通りである。
Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）：クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ（例えば、ウェブ・ベースの電子メール）などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＰａａＳ）：プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＩａａＳ）：コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント（例えば、ホストのファイアウォール）選択の限定された制御を有する。
【００７１】
配備モデルは以下の通りである。
プライベート・クラウド：クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド：クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項（例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項）を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、オンプレミス又はオフプレミスに存在することができる。
パブリック・クラウド：クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術（例えば、クラウド間の負荷分散のためのクラウド・バースティング）によって結び付けられる２つ又はそれより多いクラウド（プライベート、コミュニティ、又はパブリック）の混成物である。
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【００７２】
ここで図９を参照すると、例証的なクラウド・コンピューティング環境９５０が示される。図示のように、クラウド・コンピューティング環境９５０は、例えば、携帯情報端末（ＰＤＡ）又は形態電話９５４Ａ、デスクトップ・コンピュータ９５４Ｂ、ラップトップ・コンピュータ９５４Ｃ、及び／又は自動車コンピュータ・システム９５４Ｎなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング・デバイスが通信することができる、１つ又は複数のクラウド・コンピューティング・ノード９１０を含む。ノード９１０は、互いに通信することができる。ノード９１０は、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、１つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる（図示せず）。これにより、クラウド・コンピューティング環境９５０は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び／又はソフトウェアを提供することが可能になる。図９に示されるコンピューティング・デバイス９５４Ａ〜Ｎのタイプは単に例示であることを意図し、コンピューティング・ノード９１０及びクラウド・コンピューティング環境９５０は、いずれのタイプのネットワーク及び／又はネットワーク・アドレス指定可能な接続上でも（例えば、ウェブ・ブラウザを用いて）、いずれのタイプのコンピュータ化された装置とも通信できることを理解されたい。
【００７３】
ここで図１０を参照すると、クラウド・コンピューティング環境９５０（図９）によって提供される機能抽象化層のセットが示される。図１０に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
【００７４】
ハードウェア及びソフトウェア層１０６０は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、メインフレーム１０６１と、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ（縮小命令セット・コンピュータ））アーキテクチャ・ベースのサーバ１０６２と、サーバ１０６３と、ブレード・サーバ１０６４と、ストレージ・デバイス１０６５と、ネットワーク及びネットワーキング・コンポーネント１０６６とが含まれる。幾つかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア１０６７及びデータベース・ソフトウェア１０６８を含む。
【００７５】
仮想化層１０７０は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ１０７１、仮想ストレージ１０７２、仮想プライベート・ネットワークを含む仮想ネットワーク１０７３、仮想アプリケーション及びオペレーティング・システム１０７４、並びに仮想クライアント１０７５を提供することができる。
【００７６】
一例においては、管理層１０８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング１０８１は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定１０８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、リソースの消費に対する課金又は請求とを提供する。１つの例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル１０８３は、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理１０８４は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント（Ｓｅｒｖｉｃｅ  Ｌｅｖｅｌ  Ａｇｒｅｅｍｅｎｔ、ＳＬＡ）の計画及び履行１０８５は、ＳＬＡに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
【００７７】
ワークロード層１０９０は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション１０９１、ソフトウェア開発及びライフサイクル管理１０９２、仮想教室教育配信１０９３、データ分析処理１０９４、トランザクション処理１０９５、及び本発明の１つ又は複数の実施形態のガベージ・コレクション処理１０９６が含まれる。
【００７８】
本発明は、統合のいずれかの可能な技術的詳細レベルにおける、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
【００７９】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジサーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体内に格納する。本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、又は、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて、電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
【００８０】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施する命令を含む製品を製造するようにすることもできる。コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００８１】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００８２】
本主題は、１つのコンピュータ及び／又は複数のコンピュータ上で実行されるコンピュータ・プログラム製品のコンピュータ実行可能命令の一般的な文脈で上述されたが、当業者であれば、本開示は、他のプログラム・モジュールと組み合わせて実装する又は実装されることも可能であることを認識するであろう。一般に、プログラム・モジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、コンポーネント、データ構造などを含むことができる。さらに、当業者であれば、本発明のコンピュータ実施方法は、シングル・プロセッサ又はマルチプロセッサ・コンピュータ・システム、ミニ・コンピューティング・デバイス、メインフレーム・コンピュータ、並びにコンピュータ、手持ち式コンピューティング・デバイス（例えば、ＰＤＡ、電話）、マイクロプロセッサ・ベースの又はプログラム可能なコンシューマ若しくは産業用電子機器等を含む、他のコンピュータ・システム構成で実施できることを理解するであろう。示される態様は、通信ネットワークを通じてリンクされる遠隔処理デバイスによってタスクが実行される分散型コンピューティング環境で実施することもできる。しかしながら、本開示の全てではないが一部の態様をスタンドアロン・コンピュータ上で実施することができる。分散型コンピューティング環境において、プログラム・モジュールは、ローカル及び遠隔両方のメモリ・ストレージ・デバイス内に配置することができる。
【００８３】
本出願において用いられるとき、「コンポーネント」、「システム」、「プラットフォーム」、「インターフェース」等の用語は、コンピュータに関連するエンティティ、又は１つ又は複数の特定の機能を有する動作マシンに関連するエンティティを指すこと、及び／又は含むことができる。本明細書に開示されるエンティティは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、又は実行中のソフトウェアとすることができる。例えば、コンポーネントは、これらに限定されるものではないが、プロセッサ上で実行されているプロセス、プロセッサ、オブジェクト、実行可能プログラム、実行のスレッド、プログラム、及び／又はコンピュータとすることができる。例証として、サーバ上で実行されているアプリケーション及びサーバの両方が、コンポーネントであり得る。１つ又は複数のコンポーネントは、プロセス及び／又は実行のスレッド内にあることができ、コンポーネントは、１つのコンピュータ上に局所化されること、及び／又は２つ又はそれより多いコンポーネント間で分散されることが可能である。別の例において、それぞれのコンポーネントは、種々のデータ構造がその上に格納された種々のコンピュータ可読媒体から実行することができる。コンポーネントは、１つ又は複数のデータ・パケットを有する信号（例えば、ローカル・システム、分散型システムにおいて、及び／又は信号を介する他のシステムと共にインターネットなどのネットワークにわたって、別のコンポーネントと対話する１つのコンポーネントからのデータ）などに従って、ローカル及び／又は遠隔プロセスを介して通信することができる。別の例において、コンポーネントは、電気若しくは電子回路により動作される機械的部品により与えられる特定の機能を有し、プロセッサにより実行されるソフトウェア又はファームウェア・アプリケーションにより動作される装置とすることができる。こうした場合において、プロセッサは、装置の内部にあっても又は外部にあってもよく、ソフトウェア又はファームウェア・アプリケーションの少なくとも一部を実行することができる。更に別の例として、コンポーネントは、機械的部品なしに電子コンポーネントを通じて特別な機能を提供する装置とすることができ、電子コンポーネントは、電子コンポーネントの機能を少なくとも部分的に与えるソフトウェア又はファームウェアを実行するためのプロセッサ又は他の手段を含むことができる。１つの態様において、コンポーネントは、例えば、クラウド・コンピューティング・システム内の仮想マシンを介して電子コンポーネントをエミュレートすることができる。
【００８４】
付加的に、用語「又は(or）」は、排他的「又は」ではなく包含的「又は」を意味するよう意図される。つまり、特に断らない限り又は文脈から明らかな場合、「ＸはＡ又はＢを用いる」は、自然の包含的順列（natural inclusive permutation）のいずれかを意味するように意図される。つまり、ＸはＡを用いる；ＸはＢを用いる；又は、ＸはＡ及びＢの両方を用いる場合、「ＸはＡ又はＢを用いる」は、上記の例のいずれかにおいて満たされる。さらに、本の明細書及び添付の図面において使用される冠詞「１つ（ａ及びａｎ）」は一般的に、特に断らない限り又は文脈から明らかな場合、「１つ又はそれ以上」を単数の形態に向けることを意味するように解釈すべきである。本明細書で用いられる場合、用語「例」及び／又は「例示的」は、例、事例、又は例証としての役割を果たすように用いられる。誤解を避けるために、本明細書に開示される主題は、こうした例に限定されない。さらに、用語「例」及び／又は「例示的」として本明細書に説明されるいずれの態様又は設計も、他の態様又は設計と比べて好ましい又は有利であるとは限らず、又は当業者には周知の同等の例示的構造及び技術を排除することを意味するものではない。
【００８５】
本明細書で用いられるとき、用語「プロセッサ」は、これらに限定されるものではないが、シングルコア・プロセッサ、ソフトウェア・マルチスレッド実行能力を有するシングル・プロセッサ、ハードウェア・マルチスレッド技術を有するマルチコア・プロセッサ、並列プラットフォーム、及び分散型共有メモリを有する並列プラットフォームを含む、実質的にあらゆるコンピューティング処理ユニット又はデバイスを指すことがある。付加的に、プロセッサは、集積回路、特定用途向け集積回路（ＡＳＩＣ）、デジタル・シグナル・プロセッサ（ＤＳＰ）、フィールド・プログラマブル、ゲート・アレイ（ＦＰＧＡ）、プロ具ラマブル論理コントローラ（ＰＬＣ）、結合プログラム可能論理回路（complex programmable logic device、ＣＰＬＤ）、ディスクリート・ゲート又はトランジスタ論理、ディスクリート・ハードウェア・コンポーネント、又は本明細書で説明される機能を実施するように設計されたそれらの任意の組み合わせを指すこともある。さらに、プロセッサは、空間使用量を最適化する又はユーザ機器の性能を高めるために、これらに限定されるものではないが、分子及び量子ドット・ベースのトランジスタン、スイッチ及びゲートのようなナノスケール・アーキテクチャを利用することができる。プロセッサはまた、コンピューティング処理ユニットの組み合わせとして実装することもできる。本開示において、「格納する（store）」、「ストレージ」、「データ・ストア」、「データ・ストレージ」、「データベース」、並びに動作及びコンポーネントの機能に関連した実質的に他のいずれかの情報ストレージ・コンポーネントのような用語は、「メモリ・コンポーネント」、「メモリ」内に具体化されたエンティティ、又はメモリを含むコンポーネントを指すために用いられる。本明細書で説明されるメモリ及び／又はメモリ・コンポーネントは、揮発性メモリ若しくは不揮発性メモリのいずれかとすることができ、又は揮発性メモリ及び不揮発性メモリの両方を含むことができることを認識されたい。限定ではなく例証として、不揮発性メモリは、読み取り専用メモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、電気的プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、又は不揮発性ランダム・アクセス・メモリ（ＲＡＭ）（例えば、強誘電体ＲＡＭ（ＦｅＲＡＭ））を含むことができる。揮発性メモリは、外部キャッシュ・メモリとして働くことができるＲＡＭを含むことができる。限定ではなく例証として、ＲＡＭは、シンクロナスＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブル・データ・レートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、エンハンストＳＤＲＡＭ（ＥＳＤＲＡＭ）、シンクリンク（Synchlink）ＤＲＡＭ（ＳＬＤＲＡＭ）、ダイレクト・ランバス（Rambus）・ダイナミックＲＡＭ（ＤＲＤＲＡＭ）、及びランバス・ダイナミックＲＡＭ（ＲＤＲＡＭ）のような多くの形態で利用可能である。さらに、システム又はコンピュータ実施方法の開示されたメモリ・コンポーネントは、これら及び他の何れかの好適なタイプのメモリを含むが、これらに限定されないことを意図する。
【００８６】
上述したものは、システム及びコンピュータ実施方法の単なる例を含む。もちろん、本開示を説明するためにコンポーネント又はコンピュータ実施方法のあらゆる考えられる組み合わせを説明することはできないが、当業者であれば、本開示の多くのさらなる組み合わせ及び順列が可能であることを認識することができる。さらに、用語「含む（include）」、「有する（have）」、「持っている（possess）」等が詳細な説明、特許請求の範囲、及び添付図面に用いられる範囲で、そうした用語は、用語「備える（comprising）」が特許請求の範囲中で移行語として用いられるときに解釈されるように用語「備える（comprising）」と同様に包括的であることが意図されている。
【００８７】
種々の実施形態の説明が例証のために提示されたが、網羅的であること又は開示される実施形態を制限することを意図するものではない。当業者には、説明される実施形態の範囲及び趣旨からいつ出すすることなく、多くの変更及び変形が明らかであろう。本明細書で用いられる用語は、実施形態の原理及び実際の用途、又は市場で見出される技術に優る技術の改善を最もよく説明するために、又は、当業者が本明細書で開示される実施形態を理解することができるように、選択された。
【符号の説明】
【００８８】
１００、２００、３００、４００、５００：システム
１０２：サーバレス・コンピューティング・コンポーネント
１０４：インターフェース・コンポーネント
１０６：リライタ・コンポーネント
１０８：ブローカ・コンポーネント
１１０：メモリ
１１２：プロセッサ
１１４：コンピューティング・デバイス
１１６：ネットワーク
２０２：識別コンポーネント
２０４：デバッグ・コンポーネント
３０２：サーバ
３０４：サーバレス・アプリケーション
３０４ａ：第１の部分
３０４ｂ：第２の部分
４０２：トリガ・コンポーネント
４０４：プロキシ・コンポーネント
４０６：ログ・コンポーネント
４０８：エラー条件コンポーネント
４１０：デバッグ・セッション
６００、７００：方法
８００：動作環境
８１２：コンピュータ
８１４：処理ユニット
８１６：システム・メモリ
８１８：システム・バス
８２０：揮発性メモリ
８２２：不揮発性メモリ
８２４：ディスク・ストレージ
８２８：オペレーティング・システム
８３０：システム・アプリケーション
８３６：入力デバイス
８３８：インターフェース・ポート
８４０：出力デバイス
８４２：出力アダプタ
８４４：遠隔コンピュータ
８５０：通信接続
【図１】
2018073405.tif 000011
【図２】
2018073405.tif 000012
【図３】
2018073405.tif 000013
【図４】
2018073405.tif 000014
【図５】
2018073405.tif 000015
【図６】
2018073405.tif 000016
【図７】
2018073405.tif 000017
【図８】
2018073405.tif 000018
【図９】
2018073405.tif 000019
【図１０】
2018073405.tif 000020