(57)【特許請求の範囲】
【請求項１】
低遅延算出能力を提供するためのシステムであって、
少なくともユーザのプログラムコードを記憶するように構成される電子データ記憶部と、
具体的なコンピュータ実行可能命令を実行する１つ以上のハードウェアコンピューティングデバイスを備える仮想算出システムと、を備え、前記仮想算出システムは、前記データ記憶部と通信し、少なくとも、
１つ以上の物理コンピューティングデバイス上に複数の仮想マシンインスタンスを維持し、前記複数の仮想マシンインスタンスは、
前記仮想マシンインスタンス上にロードされた１つ以上のソフトウェアコンポーネントを有し及びユーザに割り当てられることを待機する第１量の前記仮想マシンインスタンスを備える、ウォーミングプールと、
１人以上のユーザに現在割り当てられている仮想マシンインスタンスを備える、アクティブプールと、を備え、
着信コード実行要請を監視し、前記仮想算出システム上でプログラムコードを実行し、前記着信コード実行要請の少なくとも一部は、周期性の程度を提示し、
前記着信コード実行要請の前記少なくとも一部に関連付けられる前記周期性の程度を判定し、前記判定された周期性の程度は、前記着信コード実行要請の前記少なくとも一部が前記仮想算出システムによって受信されることが予想される期間を示し、
前記着信コード実行要請の前記少なくとも一部に関連付けられる前記周期性の程度を判定したことに応答して、前記仮想マシンインスタンスを前記第１量から減少した第２量を前記ウォーミングプール内で維持させ、前記第２量は、前記着信コード実行要請の前記少なくとも一部の数及び前記判定された周期性の程度に基づいて判定され、
少なくとも一部の仮想マシンインスタンスを前記期間の前に前記アクティブプールに追加させ、前記着信コード実行要請の前記少なくとも一部に関連付けられるプログラムコードを前記少なくとも１つの仮想マシンインスタンス上にロードさせ、
前記着信コード実行要請の前記少なくとも一部に関連付けられる要請を受信したことに応答して、前記少なくとも１つの仮想マシンインスタンス上にロードされたプログラムコードを実行させるように構成される、前記システム。
【請求項２】
前記仮想算出システムは、さらに、
第１の要請を受信し、第１の期間において第１のプログラムコードを実行し、
第２の要請を受信し、第２の期間において第２のプログラムコードを実行し、前記第２の期間は、少なくとも部分的に、前記第１の期間に重複し、
前記第１のプログラムコードの第１の実行及び前記第２のプログラムコードの第２の実行をスケジュールすることにより、前記第１及び第２の実行が重複しないように構成される、請求項１に記載のシステム。
【請求項３】
前記第１の期間は、（ｉ）前記仮想算出システムが前記第１のプログラムコードを実行することが要請されるまでの時間、（ｉｉ）前記仮想算出システムが前記第１のプログラムコードを実行することが要請された後の時間、または、（ｉｉｉ）前記仮想算出システムが前記第１のプログラムコードを実行することが要請される時間的ウィンドウ、のうちの１つを備える、請求項２に記載のシステム。
【請求項４】
システムであって、
具体的なコンピュータ実行可能命令を実行する１つ以上のハードウェアコンピューティングデバイスを備える仮想算出システムを備え、前記仮想算出システムは、少なくとも、
１つ以上の物理コンピューティングデバイス上に第１量の仮想マシンインスタンスを維持し、
着信コード実行要請を監視し、前記仮想算出システム上でプログラムコードを実行し、
前記着信コード実行要請の少なくとも一部が周期性を提示するかどうかを判定し、前記着信コード実行要請の前記少なくとも一部は、１つ以上の実行パラメータに関連付けられ、
前記着信コード実行要請の前記少なくとも一部が周期性を提示したことを判定したことに応答して、前記第１量から余剰算出能力を減少した第２量を前記仮想算出システム上で維持させ、前記第２量は、前記周期性に基づいて判定され、
前記着信コード実行要請の前記少なくとも一部と同じ周期性を提示する追加周期的要請が前記仮想算出システムによって受信される前に、前記１つ以上の実行パラメータに基づいて、追加仮想マシンインスタンスを構成する、前記システム。
【請求項５】
前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記仮想算出システムは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請し、
前記追加仮想マシンインスタンスを前記アクティブプールに追加させ、
前記追加仮想マシンインスタンス上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることによって、
前記１つ以上の実行パラメータに基づいて、前記追加仮想マシンインスタンスを構成する、請求項４に記載のシステム。
【請求項６】
前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのウォーミングプールを備え、前記仮想算出システムは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請し、
前記追加仮想マシンインスタンスを前記ウォーミングプールに追加させ、
前記追加仮想マシンインスタンス上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることによって、
前記１つ以上の実行パラメータに基づいて、前記追加仮想マシンインスタンスを構成する、請求項４に記載のシステム。
【請求項７】
前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記仮想算出システムは、
前記アクティブプール内の空の仮想マシンインスタンスを特定し、前記空の仮想マシンインスタンスは、十分に利用されず、
前記空の仮想マシンインスタンス上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることによって、
前記１つ以上の実行パラメータに基づいて、前記追加仮想マシンインスタンスを構成する、請求項４に記載のシステム。
【請求項８】
前記複数の仮想マシンインスタンスは、前記仮想マシンインスタンス上にロードされた１つ以上のソフトウェアコンポーネントを有し及びユーザに割り当てられることを待機する、仮想マシンインスタンスのウォーミングプールを備え、
前記仮想算出システムは、ウォーミングプール内の仮想マシンインスタンスの数が前記第２量に対応する数に到達するまで、前記追加仮想マシンインスタンスを前記ウォーミングプールに追加することを自制することによって、前記第２量を前記仮想算出システム上で維持させるように構成される、請求項４に記載のシステム。
【請求項９】
前記仮想算出システムは、さらに、前記追加周期的要請を受信したことに応答して、前記追加周期的要請に関連付けられるプログラムコードを前記追加仮想マシンインスタンス上に作成されたコンテナ内で実行させるように構成され、
前記プログラムコードは、前記追加周期的要請が前記仮想算出システム上によって受信される前に、前記コンテナ内にロードされる、請求項４に記載のシステム。
【請求項１０】
前記仮想算出システムは、さらに、
第１のプログラムコードに関連付けられる第１のジョブ要請、前記第１のプログラムコードを実行するための第１の最大期間、及び前記第１のプログラムコードを実行するための第１の時間フレームを受信し、
第２のプログラムコードに関連付けられる第２のジョブ要請及び前記第２のプログラムコードを実行するための第２の時間フレームを受信し、前記第２の時間フレームは、少なくとも部分的に、前記第１の時間フレームに重複し、
第１の実行時間が少なくとも第１の最大期間だけ第２の実行時間に先行するように、前記第１のプログラムコードが実行される前記第１の実行時間及び前記第２のプログラムコードが実行される前記第２の実行時間を判定する
ように構成される、請求項４に記載のシステム。
【請求項１１】
前記仮想算出システムは、さらに、ユーザインターフェースを介して、第１のコストに関連付けられる時間的柔軟性の第１の程度と、前記第１の程度よりも大きく及び第２のコストに関連付けられる時間的柔軟性の第２の程度との間で選択する選択肢を提供するように構成され、前記第１のコストは、前記第２のコストよりも大きい、請求項１０に記載のシステム。
【請求項１２】
コンピュータ実施方法であって、
具体的な実行可能命令で構成される１つ以上のコンピューティングデバイスによって実施されるように、
１つ以上の物理コンピューティングデバイス上に第１量の仮想マシンインスタンスを維持することと、
着信コード実行要請を監視し、仮想算出システム上でプログラムコードを実行することと、
前記着信コード実行要請の少なくとも一部が周期性を提示するかどうかを判定することであって、前記着信コード実行要請の前記少なくとも一部は、１つ以上の実行パラメータに関連付けられる、前記判定することと、
前記着信コード実行要請の前記少なくとも一部が周期性を提示したことを判定したことに応答して、前記第１量から減少した未割付算出能力の第２量を前記仮想算出システム上で維持させることとであって、前記第２量は、前記周期性に基づいて判定される、前記維持させることと、
前記着信コード実行要請の前記少なくとも一部が時間閾値以内で受信されることが予想されることを判定することと、
前記着信コード実行要請の前記少なくとも一部と同じ周期性を提示する追加周期的要請が前記仮想算出システムによって受信される前に、前記１つ以上の実行パラメータに基づいて、追加仮想マシンインスタンスを構成させることと、
を含む、前記コンピュータ実施方法。
【請求項１３】
前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記追加仮想マシンインスタンスを１つ以上の実行パラメータに基づいて構成させることは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請することと、
前記追加仮想マシンインスタンスを前記アクティブプールに追加させることと、
前記追加仮想マシンインスタンス上にコンテナを作成し、前記着信コード実行要請の少なくとも一部に関連付けられるプログラムコードを前記コンテナ内にロードさせることと、
を含む、請求項１２に記載のコンピュータ実施方法。
【請求項１４】
前記第１量の仮想マシンインスタンスは、仮想マシンインスタンスのウォーミングプールを備え、前記追加仮想マシンインスタンスを１つ以上の実行パラメータに基づいて構成させることは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請することと、
前記追加仮想マシンインスタンスを前記ウォーミングプールに追加させることと、
前記追加仮想マシンインスタンス上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることと、
を含む、請求項１２に記載のコンピュータ実施方法。
【請求項１５】
実行要求の第１のセットに関連付けられる第１のジョブを実行する要請を受信することと、
実行要求の第２のセットに関連付けられる第２のジョブを実行する要請を受信することと、
前記実行要求の第１及び第２のセットに基づいて、１つ以上のスケジューリング基準を判定することと、
前記１つ以上のスケジューリング基準を満たすように、前記第１のジョブを実行するための第１の実行時間及び前記第２のジョブを実行するための第２の実行時間を判定することと、
を含む、請求項１２に記載のコンピュータ実施方法。
【発明の詳細な説明】
【背景技術】
【０００１】
本願の出願者は、以前に、以下の米国特許出願を２０１４年９月３０日に申請したことがある。
出願番号  １４／５０２，７１４
発明の名称  低遅延算出能力の自動管理
上記に参照された出願の開示は、参照することによってその全体が本明細書に組み込まれる。
【０００２】
一般的に記載すると、コンピューティングデバイスは、通信ネットワーク、または一連の通信ネットワークを利用して、データを交換する。企業及び組織は、いくらかのコンピューティングデバイスを相互接続して、運用をサポートする、または、第三者にサービスを提供する、コンピュータネットワークを運用する。コンピューティングシステムは、単一の地理的場所にあり、または複数の異なる地理的場所にある可能性がある（例えば、プライベートまたは公衆通信ネットワークを介して相互接続される）。具体的には、本明細書では一般的に「データセンタ」と呼ばれるデータセンタまたはデータ処理センタは、コンピューティングリソースをデータセンタのユーザに提供するために、いくらかの相互接続されたコンピューティングシステムを含んでもよい。データセンタは、組織の代わりに運用されるプライベートデータセンタ、または一般公衆の代わりに、もしくはそのために運用される公衆データセンタであってもよい。
【０００３】
データセンタリソースの利用の増加を容易にするために、仮想化技術は、単一の物理的コンピューティングデバイスが、データセンタのユーザに対して独立したコンピューティングデバイスとして現れ及び動作する、仮想マシンの１つ以上のインスタンスをホストすることを可能にし得る。仮想化によって、単一の物理コンピューティングデバイスは、動的な様式で、仮想マシンを作成、維持、削除、または別様に、管理することができる。同様に、ユーザは、単一のコンピューティングデバイス、またはネットワーク化されたコンピューティングデバイスの構成を含む、コンピュータリソースを、データセンタから要請し、種々の数の仮想マシンリソースが提供されることができる。
【０００４】
いくつかのシナリオでは、仮想マシンインスタンスは、具体的な機能性を提供するために、いくらかの仮想マシンインスタンスタイプによって構成されてもよい。例えば、様々なコンピューティングデバイスは、コンピューティングデバイスが、異なる所望の機能性を提供すること、または同様の機能性をより効率的に提供することを可能にするために、オペレーティングシステムまたはオペレーティングシステム構成、仮想ハードウェアリソース、及びソフトウェアアプリケーションの異なる組み合わせに関連付けられてもよい。これらの仮想マシンインスタンスタイプの構成は、多くの場合、デバイス画像内に含有され、そのデバイス画像は、開始すると仮想マシンが起動するソフトウェア（例えば、それらの構成及びデータファイルと一体のＯＳ及びアプリケーション等）を含有する静的データを含む。デバイス画像は、通常、インスタンスを作成または初期化するために使用されるディスク上に記憶される。従って、コンピューティングデバイスは、所望のソフトウェア構成を実施するために、デバイス画像を処理してもよい。
【０００５】
上述の態様及び本開示の多くの付随する利点は、添付の図面と併せ読むとき、以下の詳細な説明を参照すれば、同じものがより良好に理解されるように、より容易に認識されるようになるであろう。
【図面の簡単な説明】
【０００６】
【図１】例示的態様によって、低遅延算出能力を提供するための例示的環境を示すブロック図である。
【図２】例示的態様によって、ウォーミングプールの例示的構成を示すブロック図である。
【図３】例示的態様によって、アクティブプールの例示的構成を示すブロック図である。
【図４】例示的態様によって、コード実行要請を監視及びスケジュールするためのスケジューリングマネージャを提供する、コンピューティングデバイスの一般的アーキテクチャを示す。
【図５】例示的態様によって、スケジューリングマネージャによって実施される周期的ジョブ管理ルーチンを例示するフローチャートである。
【図６】例示的態様によって、スケジューリングマネージャによって実施されるジョブスケジューリングルーチンを例示するフローチャートである。
【図７】例示的態様によって、スケジューリングマネージャによって実施される別のジョブスケジューリングルーチンを例示するフローチャートである。
【発明を実施するための形態】
【０００７】
企業及び組織は、コンピューティング動作（例えば、スレッド、プログラム、機能、ソフトウェア、ルーチン、サブルーチン、プロセスを含む実行コード等）を行うために、自社のデータセンタを獲得及び管理する必要はもうない。クラウドコンピューティングの出現により、従来、ハードウェアコンピューティングデバイスによって提供される記憶スペース及び算出能力は、現在、インターネットを通して、数分で取得及び構成されることができる。従って、開発者は、物理マシンの獲得について心配する必要なしで、所望量のコンピューティングリソースを迅速に購入することができる。そのようなコンピューティングリソースは、通常、仮想コンピューティングリソースまたは仮想マシンインスタンスの形態で購入されることができる。これらの仮想マシンのインスタンスは、物理コンピューティングデバイス上でホストされる物理マシン（例えば、コンピュータ）のソフトウェア実装であり、従来、物理マシン上で提供されるオペレーティングシステム及びアプリケーションを含有してもよい。これらの仮想マシンインスタンスは、仮想マシンインスタンス上で起動するアプリケーションが要請し及び物理コンピュータと同じ様式で活用されることができる、一式のコンピューティングリソース（例えば、メモリ、ＣＰＵ、ディスク、ネットワーク等）で構成される。
【０００８】
しかしながら、仮想コンピューティングリソースを購入するときでさえ、開発者は、さらに、仮想マシンインスタンスを購入する個数及び種類、ならびに、それを継続して使用する期間を決定する必要がある。例えば、仮想マシンインスタンスを使用するコストは、レンタルされる種類及び時間に応じて、変化し得る。加えて、仮想マシンがレンタルされ得る最短時間は、通常、約数時間である。その上、開発者は、仮想マシン上でインストールするハードウェア及びソフトウェア（例えば、オペレーティングシステム及び言語ランタイムの種類等）を具体化する必要がある。ユーザが約数秒またはさらには数ミリ秒の算出能力を望んだとしても、他の懸念事項として、過度の利用（例えば、かなり少ないコンピューティングリソースの獲得及び性能問題の悩み等）、少ない利用（例えば、コードを起動するために必要なものよりも大きいコンピューティングリソースを獲得することによる必要以上の支払い等）、トラフィックの変化の予測（例えば、スケールアップまたはスケールダウンする時期を把握するようなこと等）、ならびにインスタンス及び言語ランタイム開始遅れ（３〜１０分またはそれ以上かかる可能性がある）が挙げられる。
【０００９】
いくつかの場合、そのような仮想コンピューティングリソースを獲得及び管理し、ならびに要請毎にユーザに算出能力を提供する、仮想算出システムであってもよい。しかしながら、そのようなユーザの要望に応じて、仮想算出システムによって受信される作業負荷の量及びタイミングは、予測不可能である。予測不可能は、最悪のシナリオ（例えば、１回で入ってくる大量の要請）だけに対処することが可能であるように十分に利用されない大量の算出能力（高価である可能性がある）を維持する仮想算出システムを要求し得る。仮想算出システムが大量の同時の要請に対処することが可能であるような十分な能力を近くで維持しない場合、ユーザは、遅れ増加、エラー率の増加、または他の性能関連問題を経験し得る。従って、維持される必要がある余剰能力を減らす改善方法が望まれる。
【００１０】
本開示の態様によると、ユーザ要請が受信されるとすぐに、使用のために準備された事前初期化された仮想マシンインスタンスのプールを維持することによって及び着信要請を使用可能にするためにプール内で利用可能である能力量を自動的に維持することによって、ユーザコード（例えば、インスタンス及び言語ランタイム開始時間）を実行することに関連付けられる遅れ（時々、「遅延」と称される）は、著しく減らされることができ、利用を改善することができる。
【００１１】
一般的に記載されるように、本開示の態様は、仮想マシンインスタンスの管理及びその中に形成されるコンテナに関する。具体的には、仮想算出システム内の仮想マシンインスタンスの管理を容易にするシステム及び方法が開示される。仮想算出システムは、そこにロードされた１つ以上のソフトウェアコンポーネント（例えば、オペレーティングシステム、言語ランタイム、ライブラリ等）を有する仮想マシンインスタンスのプールを維持する。仮想マシンインスタンスのプールを維持することは、新しいインスタンスを作成することと、新しいインスタンスを外部のインスタンスプロビジョニングサービスから獲得することと、インスタンスを破壊することと、インスタンスをユーザに割り当てる／再割り当てすることと、インスタンス（例えば、その中にコンテナまたはリソースがある）を修正すること等を含有し得る。プール内の仮想マシンインスタンスは、ユーザ要請を使用可能にしてプログラムコードを実行するために指定されることができる。本開示では、語句「プログラムコード」、「ユーザコード」、及び「クラウド機能」は、時々、互換的に使用されてもよい。プログラムコードは、仮想マシンインスタンス上で作成された分離したコンテナ内で実行されることができる。プール内の仮想マシンインスタンスが特有のオペレーティングシステムで既にブートかつロードされ、要請が受信された時間までに言語ランタイムが受信されるため、（例えば、仮想マシンインスタンス上で作成される１つ以上のコンテナ内のユーザコードを実行することによって）要請に対処することができる算出能力を発見することに関連する遅れは、著しく減らされる。
【００１２】
別の態様では、仮想算出システムは、着信要請を監視し仮想算出システム上でユーザコードを実行してもよく、要請の傾向（例えば、要請のタイミング、要請の量、要請の周期性等）を識別してもよい。識別された傾向を考慮して、仮想算出システムは、一定のコード実行要請を予期してもよい。また、仮想算出システムは、ユーザが、そのコードを起動することを願う、より柔軟な時間フレームを具体化することを可能にし得、それにより、仮想算出システムは、コード実行を展開してもよく、仮想算出システムが対処することが可能であることが予期されるバースト能力量を減らし得る。仮想算出システムによって維持される算出能力は、仮想マシンインスタンス上にロードされた１つ以上のソフトウェアコンポーネントを有する及び着信要請に対処するために使用されることを待機する仮想マシンインスタンスのウォーミングプールと、１つ以上の要請に対処するために現在使用される仮想マシンインスタンスのアクティブプールとを含んでもよい。
【００１３】
新しいコード実行要請が受信される時期を把握すると（または予期すると）、仮想算出システムは、ウォーミングプールをバイパスするか、またはウォーミングプール内で余剰能力を減らすことができる。加えて、仮想算出システムは、ユーザ機能を実行する要請が受信されるとき（またはその直前に）、ユーザ機能を実行するように事前構成及び準備された仮想マシンインスタンスを有することによって、ユーザの感知の遅延を少なくすることができる。その上、仮想算出システムは、仮想マシンインスタンス及び／またはコンテナの数／サイズならびに使用／必要とされる予定の期間の認識を有することによって、フリートレベル管理及び負荷バランシングの改善を達成することができる。
【００１４】
本開示の具体的実施形態及び例示的適用を、ここで、図面を参照して説明する。これらの実施形態及び例示的適用は、本開示を限定するのではなく、例示することを意図する。
仮想算出システムを含む例示的環境
【００１５】
図１を参照して、仮想環境１００の実施形態を例示するブロック図が説明される。図１に示される例は、ユーザコンピューティングデバイス１０２のユーザ（例えば、開発者等）が仮想算出システム１１０によって提供される仮想コンピューティングリソースを使用して、種々のプログラムコードを起動し得る、仮想環境１００を含む。
【００１６】
例示によって、デスクトップコンピュータ、ラップトップ、及び携帯電話を含む、仮想算出システム１１０と通信する様々な例示的ユーザコンピューティングデバイス１０２が示される。概して、ユーザコンピューティングデバイス１０２は、デスクトップ、ラップトップ、携帯電話（またはスマートフォン）、タブレット、キオスク、無線デバイス、及び他の電子デバイス等の任意のコンピューティングデバイスであることができる。加えて、ユーザコンピューティングデバイス１０２は、同じまたは異なるデータセンタ上で起動するウェブサービスを含んでもよく、そこでは、例えば、異なるウェブサービスが相互にプログラムで通信し、本明細書に記載される１つ以上の技術を行ってもよい。その上、ユーザコンピューティングデバイス１０２は、インターネット家電及び接続デバイス等のモノのインターネット（ＩｏＴ）デバイスを含んでもよい。仮想算出システム１１０は、１つ以上のユーザインターフェース、コマンドラインインターフェース（ＣＬＩ）、アプリケーションプログラミングインターフェース（ＡＰＩ）、及び／またはユーザコードを生成及びアップロードするための他のプログラマチックインターフェースを伴うユーザコンピューティングデバイス１０２を提供し、ユーザコードを呼び出し（例えば、仮想算出システム１１０上でユーザコードを実行する要請を提出する）、イベント毎のジョブもしくは時限ジョブをスケジュールし、ユーザコードを追跡し、ならびに／またはそれらの要請及び／もしくはユーザコードに関連する情報をロギングするもしくは管理する他のものを観察してもよい。１つ以上の実施形態がユーザインターフェースを使用して本明細書に説明され得るが、そのように実施形態が、付加的または代替的に、ＣＬＩ、ＡＰＩ、または他のプログラマチックインターフェースを使用し得ることを理解されたい。
【００１７】
ユーザコンピューティングデバイス１０２は、ネットワーク１０４を通して、仮想算出システム１１０にアクセスする。ネットワーク１０４は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組み合わせであってもよい。加えて、ネットワーク１０４は、パーソナルエリアネットワーク、ローカルエリアネットワーク、広域ネットワーク、無線放送ネットワーク（例えば、ラジオまたはテレビ）、ケーブルネットワーク、衛星ネットワーク、移動電話ネットワーク、またはそれらの組み合わせであってもよい。例えば、ネットワーク１０４は、インターネット等の様々な異なる関係者によって運用される可能性がある、リンクされたネットワークの公共的にアクセス可能なネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、企業または大学のイントラネット等のプライベートまたはセミプライベートネットワークであってもよい。ネットワーク１０４は、グローバルシステムフォーモバイルコミュニケーションズ（ＧＳＭ）ネットワーク、符号分割多元接続（ＣＤＭＡ）ネットワーク、ロングタームエボリューション（ＬＴＥ）ネットワーク、または任意の他の種類の無線ネットワーク等の１つ以上の無線ネットワークを含んでもよい。ネットワーク１０４は、インターネットまたは他の前述の種類のネットワークのいずれかを介して通信するためのプロトコル及びコンポーネントを使用することができる。例えば、ネットワーク１０４に使用されるプルトコルは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ハイパーテキスト転送プロトコル保全（ＨＴＴＰＳ）、メッセージ待ち行列テレメトリートランスポート（ＭＱＴＴ）、制約アプリケーションプルトコル（ＣｏＡＰ）、及び同等物を含んでもよい。インターネットまたは他の前述の種類の通信ネットワークのいずれかを介して通信するためのプロトコル及びコンポーネントは、当業者に周知であるため、本明細書により詳細に記載されない。
【００１８】
１つ以上のコンピュータネットワークを使用して相互接続される数個のコンピュータシステムを含む、分散コンピューティング環境内で動作するような仮想算出システム１１０が図１に示される。仮想算出システム１１０は、また、図１に例示されるものよりも少ないまたは多い数のデバイスを有するコンピューティング環境内で動作し得る。従って、図１の仮想算出システム１１０の描写は、例示的であり、本開示に限定されるものではないと見なされるべきである。例えば、仮想算出システム１１０またはその様々な構成要素は、様々なウェブサービスコンポーネント、ホストもしくは「クラウド」コンピューティング環境、及び／またはピアツーピアネットワーク構成を実装し、本明細書に説明されるプロセスの少なくとも一部を実施し得る。
【００１９】
その上、仮想算出システム１１０は、ハードウェア及び／またはソフトウェア内で実施されてもよく、例えば、本明細書に説明される様々な機能を行うために、コンピュータ実行可能命令を実行するように構成される物理コンピュータハードウェア上で実施される１つ以上の物理または仮想サーバを含んでもよい。１つ以上のサーバは、例えば、１つ以上のデータセンタ内に、地理的に分配され、または地理的に同一場所に置かれてもよい。
【００２０】
図１に例示される環境では、仮想環境１００は、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカーマネージャ１４０、及びスケジューリングマネージャ１５０を含む、仮想算出システム１１０を含む。示された例では、仮想マシンインスタンス（例えば、インスタンス）１５２、１５４は、ウォーミングプールマネージャ１３０によって管理されるウォーミングプール１３０Ａ内に示され、インスタンス１５６、１５７、１５８、１５９は、ワーカーマネージャ１４０によって管理されるアクティブプール１４０Ａ内に示される。仮想算出システム１１０内の様々なコンポーネントの例示は、実際に論理的であり、１つ以上のコンポーネントは、単一のコンピューティングデバイスまたは複数のコンピューティングデバイスによって実施されることができる。例えば、インスタンス１５２、１５４、１５６、１５７、１５８、１５９は、異なる様々な地理的領域内に１つ以上の物理コンピューティングデバイス上で実施されることができる。同様に、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカーマネージャ１４０、スケジューリングマネージャ１５０のそれぞれは、複数のコンピューティングデバイスにわたって実施されることができる。代替として、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカーマネージャ１４０、及びスケジューリングマネージャ１５０のうちの１つ以上のものは、単一のコンピューティングデバイス上で実施されることができる。いくつかの実施形態では、仮想算出システム１１０は、複数のフロントエンド、複数のウォーミングプールマネージャ、複数のワーカーマネージャ、及び／または複数のキャパシティマネージャを備えてもよい。６つの仮想マシンインスタンスが図１の例に示されるが、本明細書に説明される実施形態は、それ自体限定されるものではなく、当業者は、仮想算出システム１１０が任意の数の物理コンピューティングデバイスを使用して実施される任意の数の仮想マシンインスタンスを備えてもよいことを理解するであろう。同様に、単一のウォーミングプール及び単一のアクティブプールが図１の例に示されるが、本明細書に説明される実施形態は、それ自体限定されるものではなく、当業者は、仮想算出システム１１０が任意の数のウォーミングプール及びアクティブプールを備えてもよいことを理解するであろう。
【００２１】
図１の例では、仮想算出システム１１０は、ネットワーク１０４に接続されるように例示される。いくつかの実施形態では、仮想算出システム１１０内のコンポーネントのいずれかは、ネットワーク１０４を介して、仮想環境１００の他のコンポーネント（例えば、ユーザコンピューティングデバイス１０２及び補助サービス１０６（監視／ロギング／請求サービス１０７、ストレージサービス１０８、インスタンスプロビジョニングサービス１０９を含み得る）、ならびに／または仮想算出システム１１０と通信し得る他のサービス）と通信してもよい。他の実施形態では、仮想算出システム１１０内の全てのコンポーネントは、仮想環境１００の他のコンポーネントと通信可能であるとは限らない。一例では、フロントエンド１２０だけが、ネットワーク１０４に接続されてもよく、仮想算出システム１１０の他のコンポーネントは、フロントエンド１２０を介して、仮想環境１００の他のコンポーネントと通信してもよい。
【００２２】
ユーザは、仮想算出システム１１０を使用し、その上でユーザコードを実行してもよい。例えば、ユーザは、ユーザが開発したウェブまたはモバイルアプリケーションと通信する数個のコードを起動することを願い得る。コードを起動する１つの方法は、仮想マシンインスタンスを、サービスとしてインフラストラクチャを提供するサービスプロバイダから獲得し、ユーザの要望に合わせるように仮想マシンインスタンスを構成し、コードを起動するように構成された仮想マシンインスタンスを使用するためのものであろう。代替として、ユーザは、コード実行要請を仮想算出システム１１０に送信してもよい。仮想算出システム１１０は、コード実行要請に基づいて、算出能力（例えば、下記により詳細に説明される、コンテナ、インスタンス等）の獲得及び構成に対処でき、算出能力を使用して、コードを実行できる。仮想算出システム１１０は、量に基づいて、自動的にスケールアップ及びスケールダウンしてもよく、過度の利用（例えば、かなり少ないコンピューティングリソースの獲得及び性能問題の悩み等）、少ない利用（例えば、コードを起動するために必要なものよりも大きいコンピューティングリソースを獲得することによる必要以上の支払い等）について心配しなければならない負担から、ユーザを解放する。
フロントエンド
【００２３】
フロントエンド１２０は、全ての要請を処理し、仮想算出システム１１０上でユーザコードを実行する。一実施形態では、フロントエンド１２０は、仮想算出システム１１０によって提供される他の全てのサービスに対するフロントドアとして役割を果たす。フロントエンド１２０は要請を処理し、要請が適切に許可されたことを確認する。例えば、フロントエンド１２０は、要請に関連付けられるユーザが、要請の具体化されたユーザコードにアクセスすることが許可されたかどうかを判定してもよい。
【００２４】
本明細書で使用されるユーザコードは、具体的なプログラミング言語で書き込まれた任意のプログラムコード（例えば、プログラム、ルーチン、サブルーチン、スレッド等）を指してもよい。本開示では、用語「コード」、「ユーザコード」、及び「プログラムコード」は、互換的に使用されてもよい。そのようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションと通信する特定のタスクを達成するために実行されてもよい。例えば、ユーザコードは、ＪａｖａＳｃｒｉｐｔ（ｎｏｄｅ．ｊｓ）、Ｊａｖａ、Ｐｙｔｈｏｎ、及び／またはＲｕｂｙで書き込まれてもよい。要請は、ユーザコード（または、その場所）と、ユーザコードを実行するために使用される１つ以上の引数とを含んでもよい。例えば、ユーザは、要請と一緒にユーザコードを提供し、ユーザコードを実行してもよい。別の例では、要請は、その名前または固有ＩＤによって、（例えば、コードをアップロードするためのＡＰＩを使用して）事前にアップロードされたプログラムコードを識別してもよい。さらに別の例では、コードは要請に含まれてもよく、同様に、要請が仮想算出システム１１０によって受信される前に、別個の場所（例えば、ストレージサービス１０８、または仮想算出システム１１０の内部のストレージシステム）にアップロードされてもよい。仮想算出システム１１０は、要請が処理されるときのコードが利用可能である場所に基づいて、そのコード実行戦略を変化させ得る。
【００２５】
フロントエンド１２０は、ユーザからのハイパーテキスト転送プロトコル保全（例えば、ＨＴＴＰＳ）要請に応答して、そのようなユーザコードを実行する要請を受信してもよい。また、ＨＴＴＰＳ要請に含まれる任意の情報（例えば、ヘッダ及びパラメータ）も、ユーザコードを実行するときに処理及び利用されてもよい。上記で説明されたように、例えば、ＨＴＴＰ、ＭＱＴＴ、及びＣｏＡＰを含む、任意の他のプルトコルは、コード実行要請を含有するメッセージをフロントエンド１２０に転送するために使用されてもよい。フロントエンド１２０は、また、ユーザが自動要請生成をトリガするために登録しているイベント等のイベントが検出されるときに、そのようなユーザコードを実行する要請を受信してもよい。例えば、ユーザは、補助サービス１０６でユーザコードを登録してもよく、特定のイベントが発生するとき（例えば、新しいファイルがアップロードされるとき）はいつでも、ユーザコードを実行する要請は、フロントエンド１２０に送信される。代替として、ユーザは、時限ジョブを登録してもよい（例えば、２４時間毎にユーザコードを実行する）。そのような例では、スケジュール時間が時限ジョブに達するとき、ユーザコードを実行する要請は、フロントエンド１２０に送信されてもよい。さらに別の例では、フロントエンド１２０は、着信コード実行要請のキューを有してもよく、ユーザのバッチジョブが仮想算出システムのワークキューから除去されるとき、フロントエンド１２０は、ユーザ要請を処理してもよい。さらに別の例では、要請は、仮想算出システム１１０内の別のコンポーネントまたは図１に例示されない他のサーバまたはサービスが起源であってもよい。
【００２６】
ユーザ要請は、ユーザコードと一緒に使用される１つ以上の第三者ライブラリ（ネイティブライブラリを含む）を具体化してもよい。一実施形態では、ユーザ要請は、ユーザコード及び任意のライブラリ（及び／またはそれらの記憶場所の識別）を含有するＺＩＰファイルである。いくつかの実施形態では、ユーザ要請は、実行されるプログラムコードを示すメタデータ、プログラムコードが書き込まれた言語、要請に関連付けられるユーザ、及び／またはプログラムコードを実行するために保有されるコンピューティングリソース（例えば、メモリ等）を含む。例えば、プログラムコードは、要請とともに提供され、ユーザによって事前にアップロードされ、仮想算出システム１１０（例えば、標準ルーチン）によって提供され、及び／または第三者によって提供されてもよい。いくつかの実施形態では、そのようなリソースレベル制約（例えば、どれくらいのメモリが特定のユーザコードを実行するために割り付けられるか等）は、特定のユーザコードのために具体化され、ユーザコードのそれぞれの実行にわたって変化しない場合がある。そのような場合、仮想算出システム１１０は、各個別要請が受信される前に、そのようなリソースレベル制約にアクセスしてもよく、個別要請は、そのようなリソースレベル制約を具体化しない場合がある。いくつかの実施形態では、ユーザ要請は、要請がユーザコードを実行する必要がある許可の種類が何かを示す許可データ等の他の制約を具体化してもよい。そのような許可データは、プライベートリソース（例えば、プライベートネットワーク上）にアクセスするために、仮想算出システム１１０によって使用されてもよい。
【００２７】
いくつかの実施形態では、ユーザ要請は、ユーザ要請に対処するために採用されるべき挙動を具体化してもよい。そのような実施形態では、ユーザ要請は、ユーザ要請に関連付けられるユーザコードが実行される１つ以上の実行モードを有効にするためのインジケータを含んでもよい。例えば、要請は、ユーザコードの実行に関連して生成され得るデバック及び／またはログ出力が（コンソールユーザインターフェースを介して）ユーザに戻すように提供されるデバッグモードでユーザコードが実行されるべきかどうかを示すためのフラグまたはヘッダを含んでもよい。そのような例では、仮想算出システム１１０は、要請を点検し、フラグまたはヘッダを探してもよく、それが存在する場合、仮想算出システム１１０は、ユーザコードが実行されるコンテナの挙動（ロギング機能）を修正し、出力データをユーザに戻すように提供させる。いくつかの実施形態では、挙動／モードインジケータは、仮想算出システム１１０によってユーザに提供されるユーザインターフェースによって、要請に追加される。ソースコードプロファイリング、リモートデバッグ等の他の特徴は、また、要請に提供された指示に基づいて、有効または無効にされてもよい。
【００２８】
いくつかの実施形態では、仮想算出システム１１０は、複数のフロントエンド１２０を含んでもよい。そのような実施形態では、ロードバランサは、例えば、ラウンドロビン方式で、着信要請を複数のフロントエンド１２０に分散するように提供されてもよい。いくつかの実施形態では、ロードバランサが着信要請を複数のフロントエンド１２０に分散する様式は、ウォーミングプール１３０Ａ及び／またはアクティブプール１４０Ａの状態に基づいて行われてもよい。例えば、ウォーミングプール１３０Ａの能力は、十分であると思われる場合、要請は、フロントエンド１２０の個別能力に基づいて（例えば、１つ以上のロードバランシング制限に基づいて）、複数のフロントエンド１２０に分散されてもよい。他方では、ウォーミングプール１３０Ａの能力が閾値未満である場合、ウォーミングプール１３０Ａから取り出された仮想マシンインスタンスの数を減らすか、または最小限にする様式で、要請が複数のフロントエンド１２０に分散され得るように、そのようなロードバランシング制限の１つ以上のものが除去されてもよい。例えば、ロードバランシング制限によって要請がフロントエンドＡに送られるべき場合であっても、フロントエンドＡが要請を使用可能にするためにインスタンスをウォーミングプール１３０Ａから取り出す必要があるが、フロントエンドＢが同じ要請を使用可能にするためにアクティブプール内のインスタンスの１つを使用できる場合、要請がフロントエンドＢに送られてもよい。
ウォーミングプールマネージャ
【００２９】
仮想算出システム１１０が仮想算出システム１１０上のユーザコードを実行する要請を受信するとき、ウォーミングプールマネージャ１３０は、仮想マシンインスタンスがワーカーマネージャ１４０によって使用される準備ができたことを確実にする。図１に例示される例では、ウォーミングプールマネージャ１３０は、ウォーミングプール１３０Ａを管理し、それは、着信ユーザコード実行要請を使用可能にするために使用され得る事前初期化及び事前構成された仮想マシンインスタンスのグループ（「プール」と称されることもある）である。いくつかの実施形態では、ウォーミングプールマネージャ１３０は、仮想マシンインスタンスを、仮想算出システム１１０内の１つ以上の物理コンピューティングマシン上でブートさせ、ウォーミングプール１３０Ａに追加させる。他の実施形態では、ウォーミングプールマネージャ１３０は、補助仮想マシンインスタンスサービス（例えば、図１のインスタンスプロビジョニングサービス１０９）と通信し、新しいインスタンスを作成し、それをウォーミングプール１３０Ａに追加する。いくつかの実施形態では、ウォーミングプールマネージャ１３０は、仮想算出システム１１０内の物理コンピューティングデバイスと１つ以上の仮想マシンインスタンスサービスとの両方を利用して、フロントエンド１２０によって受信されたコード実行要請を使用可能にするために使用されることができる算出能力を獲得及び維持してもよい。いくつかの実施形態では、仮想算出システム１１０は、ウォーミングプール１３０Ａ内で利用可能な能力を制御する（例えば、増加または減少させる）ための１つ以上の論理ノブまたはスイッチを備えてもよい。例えば、システム管理者は、そのようなノブまたはスイッチを使用して、ピーク時間中、ウォーミングプール１３０Ａ内で利用可能である能力（例えば、事前にブートされるインスタンスの数）を増加させてもよい。いくつかの実施形態では、ウォーミングプール１３０Ａ内の仮想マシンインスタンスは、ユーザのコードを実行するために、具体化なユーザ要請から独立した既定の構成のセットに基づいて構成されることができる。既定の構成のセットは、ユーザコードを実行する各種仮想マシンインスタンスに対応することができる。ウォーミングプールマネージャ１３０は、現在または事前のユーザコード実行に関連する１つ以上の測定基準に基づいて、ウォーミングプール１３０Ａ内の仮想マシンインスタンスの種類及び数を最適化することができる。
【００３０】
図１に示されるように、インスタンスは、オペレーティングシステム（ＯＳ）及び／またはそのインスタンスにロードされた言語ランタイムを有してもよい。例えば、ウォーミングプールマネージャ１３０によって管理されるウォーミングプール１３０Ａは、インスタンス１５２、１５４を備える。インスタンス１５２は、ＯＳ  １５２Ａ及びランタイム１５２Ｂを含む。インスタンス１５４は、ＯＳ  １５４Ａを含む。いくつかの実施形態では、ウォーミングプール１３０Ａ内のインスタンスは、また、下記により詳細に説明される、（オペレーティングシステム、ランタイム、ユーザコード等のコピーをさらに含有し得る）コンテナを含んでもよい。単一のランタイムを含むインスタンス１５２が図１に示されるが、他の実施形態では、図１に示されるインスタンスは、２つ以上のランタイムを含んでもよく、ランタイムのそれぞれは、異なるユーザコードを実行するために使用されてもよい。いくつかの実施形態では、ウォーミングプールマネージャ１３０は、ウォーミングプール１３０Ａ内のインスタンスのリストを維持してもよい。インスタンスのリストは、さらに、インスタンスの構成（例えば、ＯＳ、ランタイム、コンテナ等）を具体化してもよい。
【００３１】
いくつかの実施形態では、ウォーミングプール１３０Ａ内の仮想マシンインスタンスは、任意のユーザの要請を果たすために使用されてもよい。一実施形態では、ウォーミングプール１３０Ａ内の全ての仮想マシンインスタンスは、同じまたは実質的に同類の様式で構成されてもよい。別の実施形態では、ウォーミングプール１３０Ａ内の仮想マシンインスタンスは、異なるユーザの要望に合わせるように、異なるように構成されてもよい。例えば、仮想マシンインスタンスは、異なるオペレーティングシステム、異なる言語ランタイム、及び／またはそれにロードされた異なるライブラリを有してもよい。さらに別の実施形態では、ウォーミングプール１３０Ａ内の仮想マシンインスタンスは、（例えば、同じＯＳ、言語ランタイム、及び／またはライブラリで）同じまたは実質的に同類の様式で構成されてもよいが、それらのインスタンスの一部は、異なるコンテナ構成を有してもよい。例えば、２つのインスタンスは、ＰｙｔｈｏｎとＲｕｂｙ（登録商標）との両方のランタイムを有し得るが、他方のインスタンスは、Ｐｙｔｈｏｎコードを実行するように構成されるコンテナを有してもよく、他のインスタンスはＲｕｂｙコードを実行するように構成されるコンテナを有してもよい。いくつかの実施形態では、複数のウォーミングプール１３０Ａ（それぞれが同等に構成された仮想マシンインスタンスを有する）が提供される。
【００３２】
ウォーミングプールマネージャ１３０は、ウォーミングプール１３０Ａ内に仮想マシンインスタンスを事前構成してもよく、それにより、各仮想マシンインスタンスは、仮想算出システム１１０上でプログラムコードを実行するために、ユーザ要請によって要請または具体化され得る少なくとも１つの動作条件を満たすように構成される。一実施形態では、動作条件は、潜在的ユーザコードが書き込まれ得るプログラミング言語を含んでもよい。例えば、そのような言語は、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎ（登録商標）、Ｒｕｂｙ（登録商標）、及び同等物を含んでもよい。いくつかの実施形態では、ユーザコードが書き込まれ得る言語のセットは、ユーザコードを実行する要請を満たすことができる仮想マシンインスタンスの事前初期化を容易にするために、既定のセット（例えば、４言語のセット、ただし、いくつかの実施形態では、５言語以上または３言語以下のセットが提供される）に限定され得る。例えば、ユーザが仮想算出システム１１０によって提供されるユーザインターフェースを介して要請を構成するとき、ユーザインターフェースは、ユーザが、ユーザコードを実行するための既定の動作条件の１つを具体化することを促し得る。別の例では、仮想算出システム１１０によって提供されるサービスを利用するためのサービス内容合意（ＳＬＡ）は、ユーザ要請が満たすべき条件のセット（例えば、プログラミング言語、コンピューティングリソース等）を具体化してもよく、仮想算出システム１１０は、要請に対処する際に条件のセットを満たしていると仮定し得る。別の例では、要請に具体化される動作条件は、要請を処理するために使用される算出能力の量、要請の種類（例えば、ＨＴＴＰ対トリガイベント）、要請に関するタイムアウト（例えば、要請が終了され得る閾値時間）、セキュリティポリシ（ウォーミングプール１３０Ａ内のどのインスタンスがどのユーザによって使用可能であるかを制御し得る）、スケジュール情報（例えば、仮想算出システムがプログラムコードを実行することが要請されるまでの時間、仮想算出システムがプログラムコードを実行することが要請された後の時間、仮想算出システムがプログラムコードを実行することが要請される時間的ウィンドウ等）等を含んでもよい。
ワーカーマネージャ
【００３３】
ワーカーマネージャ１４０は、着信コード実行要請を使用可能にするために使用されるインスタンスを管理する。図１に例示される例では、ワーカーマネージャ１４０は、１人以上のユーザに現在割り当てられた仮想マシンインスタンスのグループ（「プール」と称されることもある）ウォーミングプール１４０Ａを管理する。仮想マシンインスタンスが特定のユーザに割り当てられるように本明細書に説明されるが、いくつかの実施形態では、インスタンスがユーザのグループに割り当てられることにより、インスタンスがユーザのグループに関係付けられ、グループの任意のメンバーがインスタンス上のリソースを利用することができる。例えば、同じグループ内のユーザは、（例えば、そのセキュリティ証明書に基づいて）同じセキュリティグループに属してもよく、それにより、別のメンバーのコードが同じインスタン上の別のコンテナ内で実行された後で特定のインスタンス上のコンテナ内の一方のメンバーのコードを実行することにより、危険な状況を引き起こすわけではない。同様に、ワーカーマネージャ１４０は、１つ以上のポリシに従って、インスタンス及びコンテナを割り当ててもよく、そのポリシは、どの要請がどのコンテナ内で実行できるか、どのインスタンスがどのユーザに割り当てられるかを指図する。例示的ポリシは、同じアカウント（例えば、仮想算出システム１１０によって提供されるサービスにアクセスするためのアカウント）を共有するユーザのコレクションに割り当てられることを具体化してもよい。いくつかの実施形態では、同じユーザグループに関係付けられる要請は、同じコンテナを共有してもよい（例えば、それに関連するユーザコードが同一である場合）。いくつかの実施形態では、要請は、グループの異なるユーザの違いを区別せず、要請に関連付けられるユーザが属するグループを単に示す。
【００３４】
図１に例示される例では、ユーザコードは、コンテナと称される分離した算出システム内に実行される。コンテナは、インスタンス上で利用可能なリソースを使用して、仮想マシンインスタンス内で作成された論理ユニットである。例えば、ワーカーマネージャ１４０は、ユーザコードを実行する要請の具体化された情報に基づいて、新しいコンテナを作成するか、またはアクティブプール１４０Ａ内のインスタンスの１つの既存のコンテナを特定し、及びコンテナを要請に割り当て、その要請に関連付けられるユーザコードの実行に対処する。一実施形態では、そのようなコンテナは、Ｌｉｎｕｘコンテナとして実装される。アクティブプール１４０Ａ内の仮想マシンインスタンスは、それに作成された１つ以上のコンテナを有してもよく、（例えば、１つのコンテナ内またはインスタンスのローカルキャッシュ内のいずれかに）それにロードされたユーザに関連付けられる１つ以上のプログラムコードを有してもよい。
【００３５】
図１に示されるように、インスタンスは、オペレーティングシステム（ＯＳ）、言語ランタイム、及びコンテナを有してもよい。コンテナは、ＯＳ及び言語ランタイム及びそれにロードされたユーザコードの個別コピーを有してよい。図１の例では、ワーカーマネージャ１４０によって管理されるアクティブプール１４０Ａは、インスタンス１５６、１５７、１５８、１５９を含む。インスタンス１５６は、コンテナ１５６Ａ、１５６Ｂを含む。コンテナ１５６Ａは、ＯＳ  １５６Ａ−１、ランタイム１５６Ａ−２、及びそれにロードされたコード１５６Ａ−３を有する。示された例では、コンテナ１５６Ａは、それ自体のＯＳ、ランタイム、それにロードされたコードを有する。一実施形態では、ＯＳ  １５６Ａ−１（例えば、そのカーネル）、ランタイム１５６Ａ−２、及び／または１５６Ａ−３は、コンテナ１５６Ａ、１５６Ｂ（及び図１に例示されない任意の他のコンテナ）の間で共有される。別の実施形態では、ＯＳ  １５６Ａ−１（例えば、カーネルの外で起動する任意のコード）、ランタイム１５６Ａ−２、及び／またはコード１５６Ａ−３は、コンテナ１５６Ａ用に作成され及びインスタンス１５６上の他のコンテナと共有されない独立コピーである。さらに別の実施形態では、ＯＳ  １５６Ａ−１、ランタイム１５６Ａ−２、及び／またはコード１５６Ａ−３のいくつかの部分は、インスタンス１５６上のコンテナ間で共有され、その他の部分は、コンテナ１５６Ａに対して具体的である独立コピーである。インスタンス１５７は、コンテナ１５７Ａ、１５７Ｂ、１５７Ｃを含む。インスタンス１５８は、コンテナ１５８Ａ、１５８Ｂを含む。インスタンス１５９は、コンテナ１５９Ａを含む。
【００３６】
図１の例では、図１に示されたコンテナのサイズは、コンテナの実サイズに比例してもよい。例えば、コンテナ１５６Ａは、インスタンス１５６上のコンテナ１５６Ｂよりも大きいスペースを占有する。同様に、コンテナ１５７Ａ、１５７Ｂ、１５７Ｃは、等しいサイズであってもよく、コンテナ１５８Ａ、１５８Ｂ、１５９Ａは、等しいサイズであってもよい。インスタンス１５８、１５９に示される「Ｃ」と表示された点状ボックスは、新しいインスタンスを作成するために使用され得るインスタンス上の残りのスペースを表す。いくつかの実施形態では、コンテナのサイズは、６４ＭＢまたはそのいずれかの倍量であってもよい。他の実施形態では、コンテナのサイズは、コンテナが作成されるインスタンスのサイズよりも小さい、またはそれに等しい任意のサイズのいずれかであってもよい。いくつかの実施形態では、コンテナのサイズは、コンテナが作成されるインスタンスのサイズよりも小さい、それに等しい、またはそれよりも大きい任意のサイズのいずれかであってもよい。コンテナのサイズがインスタンスのサイズを超えることができる量は、そのコンテナがインスタンスによって提供される能力をどれくらい上回って利用され得るかに基づいて、判定されてもよい。
【００３７】
コンテナ１５６Ｂ、１５７Ａ、１５７Ｂ、１５７Ｃ、１５８Ａ、１５８Ｂ、１５９Ａの内側のコンポーネントは図１の例に例示されていないが、これらのコンテナのそれぞれが、様々なオペレーティングシステム、言語ランタイム、ライブラリ、及び／またはコードを有してもよい。いくつかの実施形態では、インスタンスは、それ（例えば、インスタンスレベルキャッシュ）にロードされたユーザコードを有してもよく、そのインスタンス内のコンテナは、また、その中にロードされたユーザコードを有してもよい。いくつかの実施形態では、ワーカーマネージャ１４０は、アクティブプール１４０Ａ内のインスタンスのリストを維持してもよい。インスタンスのリストは、インスタンスの構成（例えば、ＯＳ、ランタイム、コンテナ等）をさらに具体化してもよい。いくつかの実施形態では、ワーカーマネージャ１４０は、ウォーミングプール１３０Ａ内のインスタンスのリスト（例えば、インスタンスの数及び種類を含む）へのアクセスを有してもよい。他の実施形態では、ワーカーマネージャ１４０は、ウォーミングプール１３０Ａ内の仮想マシンインスタンスの認識を有することなく、算出能力をウォーミングプールマネージャ１３０から要請する。
【００３８】
フロントエンド１２０によって要請が正常に処理された後、ワーカーマネージャ１４０は、仮想算出システム１１０上のユーザコードを実行する要請を使用可能にする能力を発見する。例えば、仮想マシンインスタンス上にロードされた同じユーザコード（例えば、コンテナ１５６Ａ内に示されるコード１５６Ａ−３）を有するアクティブプール１４０Ａ内の特定の仮想マシンインスタンスが存在する場合、ワーカーマネージャ１４０は、コンテナを要請に対して割り当て、ユーザコードをコンテナ内で実行させてもよい。代替として、ユーザコードが仮想マシンインスタンス（例えば、インスタンス１５８上に記憶されるが、任意の個別コンテナに属さない）の１つのローカルキャッシュ内で利用可能である場合、ワーカーマネージャ１４０は、そのようなインスタンス上の新しいコンテナを作成し、要請に対してコンテナを割り当て、ユーザコードをコンテナ内でロード及び実行させてもよい。
【００３９】
ワーカーマネージャ１４０が、要請に関連付けられるユーザコードがアクティブプール１４０Ａ内のインスタンスのいずれか（例えば、コンテナ内またはインスタンスのローカルキャッシュ内のいずれか）に発見されないことを判定する場合、ワーカーマネージャ１４０は、現在、アクティブプール１４０Ａ内のインスタンスのいずれかが要請に関連付けられるユーザに割り当てられているかどうか及び現在の要請を対処する算出能力を有しているかどうかを判定してもよい。そのようなインスタンスがある場合、ワーカーマネージャ１４０は、インスタンス上に新しいコンテナを作成し、コンテナを要請に割り当てられてもよい。代替として、ワーカーマネージャ１４０は、さらに、ユーザに割り当てられたインスタンス上の既存のコンテナを構成し、コンテナを要請に対して割り当ててもよい。例えば、現在のユーザ要請によって求められる特定のライブラリがコンテナ上にロードされる場合、ワーカーマネージャ１４０は、既存のコンテナがユーザコードを実行するために使用されてもよい。そのような場合、ワーカーマネージャ１４０は、特定のライブラリ及びユーザコードをコンテナ上にロードし、コンテナを使用してユーザコードを実行してもよい。
【００４０】
アクティブプール１４０Ａが、現在、ユーザに割り当てられる任意のインスタンスを含有しない場合、ワーカーマネージャ１４０は、新しい仮想マシンインスタンスをウォーミングプール１３０Ａから引き出し、インスタンスを要請に関連付けられるユーザに割り当て、新しいコンテナをインスタンス上に作成し、コンテナを要請に対して割り当て、ユーザコードをコンテナ上でダウンロード及び実行させる。
【００４１】
いくつかの実施形態では、ユーザコードが（例えば、フロントエンド１２０によって）受信された直後に、仮想算出システム１１０は、ユーザコードの実行を始めるように適合される。期間は、ユーザコードの実行の初期化（例えば、ユーザに関連付けられる仮想マシンインスタンス上のコンテナ内で行われる）と、ユーザコードを実行する要請の受信（例えば、フロントエンドによって受信される）との間の時間差として定義されることができる。仮想算出システム１１０は、既定の期間よりも短い期間内でユーザコードの実行を始めるように適合される。一実施形態では、既定の期間は５００ｍｓである。別の実施形態では、既定の期間は３００ｍｓである。別の実施形態では、既定の期間は１００ｍｓである。別の実施形態では、既定の期間は５０ｍｓである。別の実施形態では、既定の期間は１０ｍｓである。別の実施形態では、既定の期間は、１０ｍｓ〜５００ｍｓの範囲から選ばれた任意の値であってもよい。いくつかの実施形態では、１つ以上の条件が満たされる場合、仮想算出システム１１０は、既定の期間よりも短い期間内のユーザコードの実行を始めるように適合される。例えば、１つ以上の条件は、次の（１）〜（４）のいずれか１つを含んでもよい。（１）要請が受信されたとき、ユーザコードは、アクティブプール１４０Ａ内のコンテナ上にロードされる、（２）要請が受信されたとき、ユーザコードは、アクティブプール１４０Ａ内のインスタンスのコードキャッシュ内に保存される、（３）要請が受信されたとき、アクティブプール１４０Ａは、要請に関連付けられるユーザに割り当てられるインスタンスを含有する、または（４）要請が受信されたとき、ウォーミングプール１３０Ａは、要請に対処する能力を有する。いくつかの実施形態では、コード実行要請が受信されるとすぐに要請されたコード実行を初期化する代わりに、仮想算出システム１１０は、要請によって提供されたスケジュール情報によって、コード実行をスケジュールしてもよい。例えば、要請は、仮想算出システム１１０がコード実行を行うことを要請される時間的ウィンドウ（例えば、次週の月曜日のＡＭ３：００〜ＡＭ４：００）を具体化してもよく、仮想算出システム１１０は、ある性能考察（例えば、作業負荷、遅延等）に基づいて、コード実行をスケジュールしてもよい。スケジュールプロセスは、図６及び７を参照して、下記により詳細に説明される。
【００４２】
ユーザコードは、図１のストレージサービス１０８等の補助サービス１０６からダウンロードされてもよい。図１に例示されるデータ１０８Ａは、１つ以上のユーザによってアップロードされたユーザコード、そのようなユーザコードに関連付けられるメタデータ、または本明細書に説明される１つ以上の技術を行うために仮想算出システム１１０によって利用される任意の他のデータを備えてもよい。ストレージサービス１０８だけが図１の例に示されるが、仮想環境１００は、ユーザコードがダウンロードされ得る他のレベルのストレージシステムを含んでもよい。例えば、各インスタンスは、物理的（例えば、インスタンスが実行する物理コンピューティングシステム上に常駐するローカルストレージ）または論理的（例えば、インスタンスとネットワーク通信し、ならびに仮想算出システム１１０の内部または外側に提供される、ネットワーク付属ストレージシステム）のいずれかで、コンテナが作成されるインスタンスと関連付けられる１つ以上のストレージシステムを有してもよい。代替として、コードは、ストレージサービス１０８によって提供されるウェブベース記憶部からダウンロードされてもよい。
【００４３】
ワーカーマネージャ１４０がユーザコード実行要請を果たすために使用されることができるウォーミングプール１３０Ａ内の仮想マシンインスタンスの１つを特定すると、ウォーミングプールマネージャ１３０またはワーカーマネージャ１４０は、インスタンスをウォーミングプール１３０Ａから取り出し、それを要請に関連付けられるユーザに割り当てる。割り当てられた仮想マシンインスタンスは、ウォーミングプール１３０Ａから取り出され、アクティブプール１４０Ａ内にセットされる。いくつかの実施形態では、いったん仮想マシンインスタンスが特定のユーザに割り当てられると、同じ仮想マシンインスタンスは、任意の他のユーザの要請を使用可能にするために使用されることができない。これは、ユーザリソースの混合の可能性を防ぐことによって、セキュリティの利点をユーザに提供する。代替として、いくつかの実施形態では、異なるユーザに属する（または異なるユーザに関連付けられる要請に割り当てられる）複数のコンテナは、単一の仮想マシンインスタンス上で共存してもよい。そのようなアプローチは、利用可能である算出能力の利用を改善し得る。いくつかの実施形態では、仮想算出システム１１０は、ユーザコードが、仮想マシンインスタンスのローカルキャッシュとウェブベースネットワークストレージ（例えば、ネットワーク１０４を介してアクセス可能である）との間で、キャッシングシステムの中間レベルとして役割を果たすように記憶される、別個のキャッシュを維持してもよい。
ユーザコードが実行された後、ワーカーマネージャ１４０は、ユーザコードを実行するためにコンテナを壊し、インスタンス内の他のコンテナのために使用されるために占有されるリソースを自由にしてもよい。代替として、ワーカーマネージャ１４０は、コンテナを稼働状態に保ち、それを使用し同じユーザからの追加要請を使用可能にし得る。例えば、コンテナ内に既にロードされている同じユーザコードに関連付けられる別の要請が受信される場合、要請は同じコンテナに割り当てることができ、それによって、新しいコンテナを作成することに関連付けられる遅れを取り除き、ユーザコードをコンテナ内にロードすることができる。いくつかの実施形態では、ワーカーマネージャ１４０は、ユーザコードを実行するために使用されるコンテナが作成されたインスタンスを壊してもよい。代替として、ワーカーマネージャ１４０は、インスタンスの稼働状態を保ち、それを使用し同じユーザからの追加要請を使用可能にし得る。ユーザコードが実行された後にコンテナ及び／またはインスタンスの稼働状態を継続するかどうかの判定は、閾値時間、ユーザの種類、ユーザの平均要請量、周期性情報（例えば、コンテナ／インスタンス上のユーザコードを現在実行していないアクティブプール１４０Ａ内のコンテナ／インスタンスは、（ｉ）周期性情報が、追加要請がすぐに到着することが予想されることを示す場合、起動したままにすることができ、または（ｉｉ）周期性情報が、コンテナ／インスタンスを起動したままにすることを十分に正当化するために追加要請がすぐに到着しそうにないことを示す場合、終了することができる）、及び／または他の動作条件に基づいて行われてもよい。例えば、任意の活動（例えば、コードの起動）なしで、閾値時間が経過した後（例えば、５分、３０分、１時間、２４時間、３０日等）、コンテナ及び／または仮想マシンインスタンスは、シャットダウン（例えば、削除、終了等）され、それに割り当てられたリソースは、解放される。いくつかの実施形態では、コンテナが壊される前の経過閾値時間が、インスタンスが壊される前の経過閾値時間よりも短い。
【００４４】
いくつかの実施形態では、仮想算出システム１１０は、着信コード実行要請が使用可能であるように、データを補助サービス１０６の１つ以上のものに提供してもよい。例えば、仮想算出システム１１０は、監視／ロギング／請求サービス１０７と通信してもよい。監視／ロギング／請求サービス１０７は、仮想算出システム１１０上のコンテナ及びインスタンスの状況等の仮想算出システム１１０から受信された監視情報を管理するための監視サービスと、仮想算出システム１１０上のコンテナ及びインスタンスによって行われた活動等の仮想算出システム１１０から受信されたログ情報を管理するためのログサービスと、（例えば、監視サービス及びログサービスによって管理される監視情報及び／またはログ情報に基づいて）仮想算出システム１１０上のユーザコードの実行と関連付けられる請求情報を生成するための請求サービスとを含んでもよい。上記に説明されるような（例えば、仮想算出システム１１０に代わりに）監視／ロギング／請求サービス１０７によって行われる場合があるシステムレベル活動に加えて、監視／ロギング／請求サービス１０７は、仮想算出システム１１０上で実行されるユーザコードの代わりに、アプリケーションレベルのサービスを提供してもよい。例えば、監視／ロギング／請求サービス１０７は、仮想算出システム１１０上で実行されるユーザコードの代わりに、様々な入力、出力、または他のデータ及びパラメータを監視及び／またはロギングしてもよい。単一のブロックとして示されるが、監視、ロギング、請求サービス１０７は、別個のサービスとして提供されてもよい。
【００４５】
いくつかの実施形態では、ワーカーマネージャ１４０は、ワーカーマネージャ１４０によって管理されるインスタンス及びコンテナ（例えば、アクティブプール１４０Ａ内のもの）でヘルスチェックを行ってもよい。例えば、ワーカーマネージャ１４０によって行われるヘルスチェックは、ワーカーマネージャ１４０によって管理されるインスタンス及びコンテナが、（１）過って構成されたネットワーク及び／または開始構成、（２）メモリの消耗、（３）ファイルシステムの破損、（４）互換性のないカーネル、及び／またはインスタンス及びコンテナの性能を悪くし得る他の課題のいずれかのうちの、いずれかの問題があるかどうかを判定することを含んでもよい。一実施形態では、ワーカーマネージャ１４０は、周期的（例えば、５分毎、３０分毎、１時間毎、２４時間毎等）に、ヘルスチェックを行う。いくつかの実施形態では、ヘルスチェックの頻度は、ヘルスチェックの結果に基づいて、自動的に調整されてもよい。他の実施形態では、ヘルスチェックの頻度は、ユーザ要請に基づいて調整されてもよい。いくつかの実施形態では、ワーカーマネージャ１４０は、ウォーミングプール１３０Ａ内のインスタンス及び／またはコンテナ上で同様のヘルスチェックを行ってもよい。ウォーミングプール１３０Ａ内のインスタンス及び／またはコンテナは、アクティブプール１４０Ａ内のそのインスタンス及びコンテナと一緒または別個のいずれかで、管理されてもよい。いくつかの実施形態では、ウォーミングプール１３０Ａ内のインスタンス及び／またはコンテナのヘルスが、アクティブプール１４０Ａから別個に管理される場合、ウォーミングプールマネージャ１３０は、ワーカーマネージャ１４０の代わりに、ウォーミングプール１３０Ａ内のインスタンス及び／またはコンテナ上で上記に説明されたヘルスチェックを行ってもよい。
スケジューリングマネージャ
【００４６】
スケジューリングマネージャ１５０は、（例えば、フロントエンド１２０を介して）仮想算出システム１１０によって受信されるコード実行要請を監視し、対応するコード実行をスケジュールする。例えば、スケジューリングマネージャ１５０は、フロントエンド１２０、ウォーミングプールマネージャ１３０、及び／もしくはワーカーマネージャ１４０と通信し、ジョブのスケジュールを決める（例えば、仮想算出システム１１０上のユーザコードの実行）ならびに／またはウォーミングプール１３０Ａ及び／もしくはアクティブプール１４０Ａ内の算出能力を管理してもよい。スケジューリングマネージャ１５０が仮想算出システム１１０内の異なるコンポーネントとして例示されるが、スケジューリングマネージャ１５０の一部または全ての機能は、フロントエンド１２０、ウォーミングプールマネージャ１３０、及び／またはワーカーマネージャ１４０によって行われてもよい。例えば、スケジューリングマネージャ１５０は、仮想算出システム１１０の他のコンポーネントのうちの１つの内部で全体的に、または仮想算出システム１１０の他のコンポーネントにわたる分散様式で、実施されてもよい。図１の例では、スケジューリングマネージャ１５０は、スケジュール管理データ１５０Ａを含む。スケジュール管理データ１５０Ａは、着信要請の履歴に関するデータ、ウォーミングプール１３０Ａ内の能力、アクティブプール１４０Ａ内の能力、特定のプログラムコード及び／もしくはユーザアカウントに関連付けられる周期性、ならびに、仮想算出システム上で行われることが要請されたジョブを予期、スケジュール、及び再スケジュールし、それに応じて、仮想算出システム１１０によって管理及び使用される能力を調整及び／または最適化するために、スケジューリングマネージャ１５０によって使用され得る任意の他の測定基準を含んでもよい。スケジュール管理データ１５０Ａは、また、仮想算出システム１１０によって受信された着信要請をスケジュール及び管理するために、ユーザによって具体化された、または、スケジューリングマネージャ１５０によって判定された、いずれかの管理ポリシ（例えば、所定のユーザに関連付けられるジョブをスケジュールするためにスケジューリングマネージャ１５０に提供された柔軟性の量）を含んでもよい。スケジュール管理データ１５０Ａは、仮想算出システム１１０の内部のストレージデバイス内に記憶されてもよく、または外部のストレージデバイス（例えば、ストレージサービス１０８）内に記憶され、周期的にバックアップされてもよい。
【００４７】
スケジューリングマネージャ１５０は、仮想算出システム１１０によって受信されたコード実行要請を監視し、着信コード実行要請によって提示されたいずれかの周期性を識別する。例えば、スケジューリングマネージャ１５０は、特定のユーザアカウントまたはユーザ機能に関連付けられるコード実行要請が受信された具体的時間のパターンを探してもよい。例えば、スケジューリングマネージャ１５０は、特定のユーザアカウントに関連付けられる要請がＡＭ３：００とＡＭ３：１５との間の期間のみに受信されたことを判定してもよい（例えば、そのような要請は、毎日のメンテナンス動作を含んでもよい）。別の例では、スケジューリングマネージャ１５０は、特定のプログラムコードに関連付けられる要請が日曜日のみに受信されたことを判定してもよい（例えば、そのような要請は、週１回のバックアップ動作を含んでもよい）。別の例では、スケジューリングマネージャ１５０は、システム全体のトラフィックがＰＭ７：００からＰＭ９：００までの期間で、ほぼ最高であることを判定してもよい。いくつかの場合、あるユーザアカウントまたはユーザ機能に関連付けられる着信コード実行要請は、一日を通して、または、任意の識別可能な周期性を提示することなく、受信されてもよい。
【００４８】
いくつかの実施形態では、スケジューリングマネージャ１５０は、着信トラフィックパターンの登録モデルを使用して、周期性を判定する。他の実施形態では、着信コード実行要請に関連付けられるパラメータ（例えば、受信時間、関連ユーザアカウント、関連ユーザ機能、最大期間、割り当てられたリソース量等）に基づいて、周期性をスケジューリングマネージャ１５０によって生成されたログデータ（例えば、スケジュール管理データ１５０Ａ）からリバースエンジニアリングをしてもよい。例えば、スケジューリングマネージャ１５０は、スケジュール管理データ１５０Ａを周期的（例えば、１日１回、週１回、月１回、年１回等）に分析し、着信コード実行要請によって提示された周期性を識別してもよい。いくつかの実施形態では、人間オペレータは、着信コード実行要請の周期性に気付き、ある周期性パラメータを仮想算出システム１１０（例えば、予想受信時間、関連ユーザアカウント、関連ユーザ機能等）に入力してもよい。識別された周期的に基づいて、スケジューリングマネージャ１５０は、仮想算出システム１１０上で維持される能力を調整してよい。周期性を識別するプロセス及び仮想算出システム１１０上で維持される能力を調整するプロセスは、図５を参照して下記により詳細に説明される。
【００４９】
スケジューリングマネージャ１５０は、また、仮想算出システム１１０上のコード実行をスケジュール及び管理してもよい。コード実行のバッチは、同時に、または短い時間スパン内で行われることを要請される場合、スケジューリングマネージャ１５０は、ユーザコードを実行するための具体的な時間フレームによって提供される柔軟性の程度に応じて、コード実行の一部を再スケジュールしてもよい。実行のタイミングで柔軟性を取得するための１つの方法は、ある範囲を要請に組み込みことにより、具体的な時間で実行されるクラウド機能をスケジュールする任意の要請は、クラウド機能が具体的な時間の前後の期間内で実行されるであろうことを実際に意味する。例えば、プログラムコードがＰＭ３：００で実行されることを要請される場合、仮想算出システム１１０は、デフォルト設定により、ＰＭ２：５０とＰＭ３：１０との間の任意の時間に、コードを実行する柔軟性を有してもよい。仮想算出システム１１０のユーザは、この範囲を通知されてもよい。その範囲は、実施に応じて変化し得る。
【００５０】
いくつかの実施形態では、仮想算出システム１１０上のユーザ機能を実行することに関連付けられるコストは、要請によって具体化される時間的柔軟性の程度に応じて変化し得る。例えば、ユーザが、プログラムコードがＰＭ１１：００とＡＭ１：００との間で起動されることを要請した場合、コストは、１回の実行当たり０．０１セントであり得る。ユーザが、プログラムコードがＰＭ１１：５５とＡＭ１：０５との間で起動されることを要請した場合、コストは、１回の実行当たり０．０２セントであり得る。ユーザが、プログラムコードがＡＭ１２：００ちょうどに起動されることを要請した場合、コストは、１回の実行当たり０．０５セントであり得る。仮想算出システム１１０に多くの柔軟性を提供する別の例は、要請到着率、処理中の同時ジョブの数、または他の機構（ウィンドウを具体化するよりも高価ではない場合があるもの）によって判定されるように、ユーザが、常にトラフィックが低いときいつでも、ユーザ機能が起動されることができることを具体化することを可能にするものである。
【００５１】
算出システム１１０は、ユーザに、（例えば、ユーザにコード実行をスケジュールすることを可能にするグラフィカルユーザインターフェースを介して）、コード実行要請のために具体化されることができる様々な範囲に関連付けられるコストを提示してもよい。開始時間の柔軟性は、着信トラフィックが低いとき、仮想算出システム１１０に、コード実行をスケジュールする能力を提供することにより、仮想算出システム１１０が提供する必要があるバースト能力量を減らす。
【００５２】
いくつかの実施形態では、柔軟性を取得した範囲を使用するよりはむしろ、ユーザは、仮想算出システム１１０がプログラムを起動することが要請される前後の時点を具体化してもよい。例えば、要請は、仮想算出システム１１０が１０月１０日の後（例えば、指定日以降）に時々、プログラムコードを起動するべきことを具体化してもよい。別の例では、要請は、仮想算出システム１１０が１０月８日の前のどこかで、プログラムコードの起動を終えるべきことを具体化してもよい（例えば、１０月８日以前に、プログラムコードの実行を終える）。そのような例では、仮想算出システム１１０は、コード実行が少なくとも指定期限前の最長期間に等しい時間量で初期化されることを確実にしてもよい。さらに別の例では、要請は、仮想算出システム１１０が１０月８日の前のどこかで、プログラムコードの起動を開始するべきことを具体化してもよい（例えば、１０月８日以前にプログラムコードの実行を初期化するが、１０月８日以前に終える必要はない）。いくつかの実施形態では、各コード実行要請は、プログラムコードの実行がタイムアウトされることが考慮されるべき最長期間を具体化する。そのような実施形態では、仮想算出システム１１０が具体的な最長期間を利用し仕事負荷を分散させてもよく、それにより、仮想算出システム１１０は、任意の時点において過重負荷がかからない。柔軟様式でのコード実行をスケジュールするプロセスは、図６を参照して下記により詳細に説明される。
【００５３】
スケジューリングマネージャ１５０は、仮想算出システム１１０によって受信された要請を監視するための要請及び能力管理ユニットと、仮想算出システム１１０上のコード実行及び能力をスケジュール及び管理するためのスケジュール及び能力調整ユニットとを含む。スケジューリングマネージャ１５０の例示的構成は、図４を参照して下記により詳細に説明される。
周期的ジョブの処理説明例
【００５４】
図２を参照すると、右側にはスケジューリングマネージャ１５０があり、左側にはスケジューリングマネージャ１５０がない、仮想算出システム１１０内のウォーミングプールマネージャ１３０が説明される。図２の例では、周期的要請２１０は、仮想算出システム１１０によって受信される。
【００５５】
図２の左側の例は、周期的要請２１０の周期性を認識する場合がないシステムを例示する。図２の例では、周期的要請２１０の５本の矢印は、それぞれ、具体的時間（例えば、Ｘ＋Ｔ、Ｘ＋２Ｔ、Ｘ＋３Ｔ、Ｘ＋４Ｔ、及びＸ＋５Ｔ、式中、Ｔは周期である）で受信されたコード実行要請を表してもよい。本例では、仮想算出システム１１０は、仮想マシンインスタンス２２０、２３０、２４０、及び２５０（それぞれが適切なＯＳ及びそれにロードされたランタイムを有する）を含む、ウォーミングプール１３０Ａを含む。コード実行要請が受信されるときの認識を有することなく、仮想算出システム１１０は、例えば、並行して、これらのジョブの全てを起動するために構成することによって、任意のバーストトラフィックに適合するために、そのウォーミングプール１３０Ａ内で大量の算出能力を維持する必要があり得る。
【００５６】
図２の右側の例は、周期的要請２１０の周期性を識別しているシステムを例示する。本例では、仮想算出システム１１０は、仮想マシンインスタンス２２０（ＯＳ  ２２０Ａ及びそれにロードされたランタイム２２０Ｂを伴う）を含む、ウォーミングプール１３０Ａを含む。周期的要請２１０が受信される時期を把握することで、仮想算出システム１１０は、そのウォーミングプール１３０Ａ内の能力の減少量を維持することができ、要請が受信される直前に周期的要請２１０を処理するために必要な算出能力を獲得することができる。例えば、５個のジョブが周期的であるため重複しないことを把握することで、（並行して、５個のジョブを十分に行う能力を維持することに比較して）８０％だけ余剰能力量を減少させ得る。別の例では、仮想算出システム１１０が１日平均１０個の要請を受信し、半分だけウォーミングプール能力を減らすであろう、ウォーミングプール１３０Ａ内でどれくらい能力が維持するかを判定する目的のために、要求のうちの５個（例えば、これらの要請はそれぞれ、１日１回、ＰＭ１：００、ＰＭ２：００、ＰＭ３：００、ＰＭ４：００、及びＰＭ５：００に受信する）の周期性を把握することは、仮想算出システム１１０が、（例えば、それらの要請が到着するとき、能力が到着予期時間の直前に追加され得ることを把握するため、）これらの要請を無視することを可能にし得る。従って、着信コード実行要請の周期性の追跡を識別及び維持することによって、仮想算出システム１１０は、そのウォーミングプール１３０Ａ内で維持する必要がある仮想マシンインスタンスの数の減少に関連付けられるコスト節約を実現することができる。
ジョブスケジュールの説明例
【００５７】
図３を参照すると、スケジューリングマネージャ１５０がジョブをスケジュール（または再スケジュール）する前後の仮想算出システム１１０内のワーカーマネージャ１４０が説明される（右側はスケジュール前、左側はスケジュール後）。図３の例では、ジョブ３０１〜３０４は、仮想算出システム１１０のユーザによって要請され、例えば、仮想算出システム１１０のスケジューリングマネージャ１５０によってスケジュールされる。
【００５８】
図３の左側の例は、ＡＭ１２：００に始まるようにスケジュールされるジョブ３０１〜３０４の全てを例示する。ジョブ３０１〜３０４の全てを起動するために、アクティブプール１４０Ａは、４つの仮想マシンインスタンス（例えば、インスタンス３１０、３２０、３３０、及び３４０、それぞれに、適切なＯＳ、ランタイム、コードがロードされる）またはコンテナを起動することが必要となり得る。ジョブ３０１〜３０４をスケジュールする際に柔軟性がなければ、仮想算出システム１１０は、同時に、大量の仮想マシンインスタンスを起動することが必要となり得、結果として、遅延増加及び／またはいずれかの他の問題を経験し得る。
【００５９】
図３の右側の例は、スケジューリングマネージャ１５０がスケジュール済ジョブ３０１〜３０４を展開することにより単一のジョブだけが所定の時間で行われている、システムを例示する。ジョブをスケジュールする際に柔軟性があり、その柔軟性に基づいて作業負荷を分散することによって、仮想算出システム１１０は、より少ない数の仮想マシンインスタンスを使用して動作し、それ自体に、大量の同時のジョブを処理すること、またはコストを節約することが必要になることによって、過度な負荷がかからないようにすることが可能であり得る。
スケジューリングマネージャの一般的アーキテクチャ
【００６０】
図４は、仮想算出システム１１０内の仮想マシンインスタンスを管理するコンピューティングシステム（スケジューリングマネージャ１５０として参照される）の一般的アーキテクチャを示す。図４に示されるスケジューリングマネージャ１５０の一般的アーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェア及びソフトウェアモジュールの配列を含む。スケジューリングマネージャ１５０は、図４に示されるものよりも多い（または少ない）要素を含んでもよい。しかしながら、有効な開示を提供するために、これらの一般的従来型要素の全てが示されることは必要ではない。例示されるように、スケジューリングマネージャ１５０は、処理ユニット１９０、ネットワークインターフェース１９２、コンピュータ可読媒体ドライブ１９４、入力／出力デバイスインターフェース１９６を含み、それらの全てが、通信バスを経由して、相互に通信してもよい。ネットワークインターフェース１９２は、１つ以上のネットワークまたはコンピューティングシステムへの接続性を提供してもよい。従って、処理ユニット１９０は、ネットワーク１０４を介して、情報及び命令を他のコンピューティングシステムまたはサービスから受信してもよい。処理ユニット１９０は、また、メモリ１８０に往復するように通信し、さらに、入力／出力デバイスインターフェース１９６を介して、選択式ディスプレイ（図示しない）用の出力情報を提供してもよい。入力／出力デバイスインターフェース１９６は、また、入力を選択式入力デバイス（図示しない）から受け取ってもよい。
【００６１】
メモリ１８０は、処理ユニット１９０が本開示の１つ以上の態様を実施するために実行する、コンピュータプログラム命令（いくつかの実施形態では、モジュールとしてグループ化される）を含有してもよい。メモリ１８０は、概して、ＲＡＭ、ＲＯＭ、及び／または他の持続的補助装置もしくは非一過性コンピュータ可読媒体を含む。メモリ１８０は、スケジューリングマネージャ１５０の一般管理及び動作における処理ユニット１９０による使用のために、コンピュータプログラム命令を提供するオペレーティングシステム１８４を記憶してもよい。メモリ１８０は、さらに、コンピュータプログラム命令と、本開示の態様を実施するための他の情報とを含んでもよい。例えば、一実施形態では、メモリ１８０は、例えば、ナビゲーションを介して、コンピューティングデバイス上の表示のためのユーザインターフェース（及び／または、そのための命令）と、及び／またはコンピューティングデバイス上にインストールされたブラウザもしくはアプリケーション等のブラウジングインターフェースとを生成する、ユーザインターフェースユニット１８２を含む。加えて、メモリ１８０は、１つ以上のデータリポジトリ（図示しない）を含み、及び／またはそれと通信し、例えば、ユーザプログラムコード及び／またはライブラリにアクセスしてもよい。
【００６２】
ユーザインターフェースユニット１８２に加えて及び／またはそれに通信し、メモリ１８０は、要請及び能力監視ユニット１８６と、処理ユニット１９０によって実行され得るスケジュール及び能力調整ユニット１８８とを含んでもよい。一実施形態では、ユーザインターフェースユニット１８２、要請及び能力監視ユニット１８６、ならびにスケジュール及び能力調整ユニット１８８は、個別または集合的に、本開示の様々な態様を実施する、例えば、下記にさらに説明されるように、着信コード実行要請を監視し、着信コード実行要請がいずれかの周期性を提示するかどうか判定し、余剰能力の減少量をウォーミングプール１３０Ａ内で維持させ、（例えば、その周期性に基づいて）そのような着信コード実行要請が受信される直前に着信コード実行要請に対処するための算出能力を獲得し、相互に重ならないように複数のジョブをスケジュールする。
【００６３】
要請及び能力監視ユニット１８６は、着信コード実行要請を監視する。例えば、要請及び能力監視ユニット１８６は、着信コード実行要請を監視し、仮想算出システム１１０上の能力を良好に管理する（例えば、ウォーミングプール１３０Ａ内で維持される能力の数を減少させる）ために使用され得る着信コード実行要請の一部または全てによって提示される、いくつかの周期性を識別する。要請及び能力監視ユニット１８６は、着信コード実行要請のそれぞれが受信された時間と、要請された実際の期間またはメモリ等の他のリソース消費と一緒にそのような要請に関連付けられるユーザアカウント及び／またはユーザ機能とを記録してもよい。
【００６４】
スケジュール及び能力調整ユニット１８８は、ジョブをスケジュールし、ウォーミングプール１３０Ａ及び／またはアクティブプール１４０Ａ内の能力を調整する。例えば、要請及び能力監視ユニット１８６によって識別された周期性に基づいて、スケジュール及び能力調整ユニット１８８は、ウォーミングプール１３０Ａ内で維持される能力の量を減少させ得る。さらに、スケジューリング能力調整ユニット１８８は、周期的であるものとして識別されるコード実行要請が仮想算出システム１１０によって受信されることが予想される時間の直前に、追加能力をアクティブプール１４０Ａに追加させてもよく、または、周期性分析／予測に基づいて予期された今後の要請を使用可能にするために、アクティブプール１４０Ａ内の能力を通常よりも長く保持させてもよい。
【００６５】
要請及び能力監視ユニット１８６とスケジュール及び能力調整ユニット１８８とが、スケジューリングマネージャ１５０の一部として、図４に示される一方、他の実施形態では、要請及び能力監視ユニット１８６とスケジュール及び能力調整ユニット１８８との全てまたは一部は、仮想算出システム１１０の他のコンポーネント及び／または別のコンピューティングデバイスによって実施されてもよい。例えば、本開示のある実施形態では、仮想算出システム１１０に通信する別のコンピューティングデバイスは、スケジューリングマネージャ１５０の一部として例示されるようなモジュール及びコンポーネントと同様に動作する数個のモジュールまたはコンポーネントを含んでもよい。
スケジュールコード実行要請を管理するための例示的ルーチン
【００６６】
ここで、図５を参照すると、仮想算出システム１１０の１つ以上のコンポーネント（例えば、スケジューリングマネージャ１５０）によって実施されるルーチン５００が説明される。ルーチン５００がスケジューリングマネージャ１５０による実施態様に関して説明されるが、関連技術分野の当業者であれば、代替のコンポーネントがルーチン５００を実施してもよく、または、１つ以上のブロックが異なるコンポーネントによって、もしくは、分散様式で、実施されてもよいことを理解するであろう。
【００６７】
例示的ルーチン５００のブロック５０２において、スケジューリングマネージャ１５０は、仮想算出システム１１０によって受信される着信コード実行要請を監視し、例えば、着信要請によって提示されるいずれかの周期性（例えば、着信要請の少なくとも一部が、実際、周期的である、いずれかの指示）を識別する。スケジューリングマネージャ１５０は、要請に関連付けられるプログラムコードの識別情報、要請に関連付けられるユーザアカウント、要請に関連付けられる最長期間、及び／または要請に関連付けられる任意の他のパラメータと一緒に、また、起動連携（期間）、メモリ使用量、適用されたスロットル、合格または不合格のセキュリティテスト等を含む実際のリソース消費量と一緒に、各要請がデータベース（例えば、スケジューリング管理データ１５０Ａ）内で仮想算出システム１１０によって受信される時間を記録してもよい。
【００６８】
次に、ブロック５０４において、スケジューリングマネージャ１５０は、いずれかの周期性が仮想算出システム１１０によって受信された着信コード実行要請の少なくとも一部によって提示されたかどうかを判定する。例えば、スケジューリングマネージャ１５０は、特定のユーザアカウントに関連付けられる要請がＡＭ３：００とＡＭ３：１５との間の期間のみに受信されたことを判定してもよい（例えば、そのような要請は、毎日のメンテナンス動作を含んでもよい）。別の例では、スケジューリングマネージャ１５０は、特定のプログラムコードに関連付けられる要請が日曜日のみに受信されたことを判定してもよい（例えば、そのような要請は、週１回のバックアップ動作を含んでもよい）。別の例では、スケジューリングマネージャ１５０は、システム全体のトラフィックがＰＭ７：００からＰＭ９：００までの期間で、ほぼ最高であることを判定してもよい。いくつかの場合、あるユーザアカウントまたはユーザ機能に関連付けられる着信コード実行要請は、一日を通して、または、任意の識別可能な周期性を提示することなく、受信されてもよい。そのような場合でさえ、識別可能な周期性を提示する少なくとも一部のコード実行要請を識別することによって、仮想算出システム１１０は、スケジュール済要請として、そのようなコード実行要請を扱うことが可能であり得る。そのような周期的またはスケジュール済要請は、仮想算出システム１１０にコスト節約をもたらす。その理由として、要請が受信されるとき、仮想算出システム１１０は、予測不可能なバーストトラフィックに単に対処することができるように（費用がかかり得る）余剰算出能力を維持する必要がないことと；要請が仮想算出システム１１０に到着するときに（または、その直前に）、単に算出能力を獲得することができることと、が挙げられる。いくつかの実施形態では、スケジューリングマネージャ１５０は、着信コード実行要請に基づいて、仮想算出システム１１０によって生成されたログ及び／または測定基準を処理し、いずれかの周期性がそのようなコード実行要請のいずれかによって提示されたかどうかを判定してもよい。
【００６９】
スケジューリングマネージャ１５０は、仮想算出システム１１０によって受信されるコード実行要請の少なくとも一部が周期性の程度を提示することを判定した場合、ルーチン５００は、ブロック５０６に進み、そこでは、スケジューリングマネージャ１５０は、余剰算出能力の減少量（または、特定のユーザアカウントに割り当てられない、またはジョブ間の未割付算出能力）を（例えば、ウォーミングプール１３０Ａ内）で維持させる。例えば、減少量は、周期的であるものとして識別されるコード実行要請の数に比例してもよい。コード実行要請がどれも周期的であるものとして識別されない場合、ウォーミングプール１３０Ａ内で維持される余剰算出能力は、全く減少されない場合がある。一方、コード実行要請の全てが周期的であるものとして識別される場合、ウォーミングプール１３０Ａ内で維持される全ての余剰算出能力は取り除かれる場合がある。同様に、コード実行要請の半分が周期的であるものとして識別される場合、ウォーミングプール１３０Ａ内で維持される余剰算出能力量は、ウォーミングプール１３０Ａ内で正常に維持される量の半分まで減らされてもよい。スケジューリングマネージャ１５０が、コード実行要請がどれもいずれかの周期性を提示しないことを判定する場合、ルーチン５００はブロック５０２に進み、スケジューリングマネージャ１５０は、着信コード実行要請を監視することを継続する。いくつかの実施形態では、スケジューリングマネージャ１５０（またはウォーミングプールマネージャ１３０等の仮想算出システム１１０の他のコンポーネント）は、ウォーミングプール１３０Ａ内の仮想マシンインスタンスの数が減少量に対応する数に到達するまで、追加仮想マシンインスタンスをウォーミングプール１３０Ａに追加することを自制することによって、余剰算出能力の減少量を維持させる。例えば、スケジューリングマネージャ１５０が、ウォーミングプール１３０Ａ内で維持される余剰能力が着信コード実行要請によって提示される周期性に基づいて半分まで減少されるべきであることを判定する場合、スケジューリングマネージャ１５０は、ウォーミングプール１３０Ａ内の能力量がウォーミングプール１３０Ａ内で事前に維持された量の半分になるまで、追加能力をウォーミングプール１３０Ａに追加することを自制してもよい。いくつかの場合、スケジューリングマネージャ１５０は、ウォーミングプール１３０Ａ内の仮想マシンインスタンスの一部を能動的にシャットダウンし、減少数に到達し得る。他の場合、スケジューリングマネージャ１５０は、インスタンスをウォーミングプール１３０Ａからアクティブプール１４０Ａまで、より自由に（または、積極的に）移動させてもよい。いくつかの実施形態では、余剰算出能力量の減少は、アクティブプール１４０Ａに起因し得る。例えば、アクティブプール１４０Ａ内にセットされた仮想マシンインスタンス（ただし、アクティブプール１４０Ａ内の余剰状態で（例えば、周期性情報なしで）別様に存続するであろう、仮想マシンインスタンス上のユーザコードを現在実行しない）は、ブロック５０４で検出された周期性（例えば、アクティブプール１４０Ａ内の余剰インスタンスを現在使用するであろう要請が近いうちに到着することが予想されないことの判定）に基づいて、スピンダウンされ得る。
【００７０】
ブロック５０８において、スケジューリングマネージャ１５０は、追加算出能力を、着信コード実行要請（または、ある程度の周期性を提示するために判定された着信コード実行要請と同じ周期性を提示する次の要請）に対処するために獲得させてもよく、それらの要請は、受信の予期時間において周期性があるものとして識別される。例えば、識別された周期性に基づいて、仮想算出システム１１０がＰＭ３：００にコード実行要請のバッチを受信することが予想される場合、スケジューリングマネージャ１５０は、要請のバッチが到着することが予測される時間の前のどこかで（例えば、ＰＭ２：５９、または仮想算出システム１１０がＰＭ３：００までに要請のバッチに対処する算出能力を構成することを可能にするであろう時間）、（例えば、要請をインスタンスプロビジョニングサービス１０９に送信することによって、または、それをするように仮想算出システム１１０の別のコンポーネントに命令することによって）、コード実行要請のバッチに対処するために十分な追加算出能力（または、１つ以上の仮想マシンインスタンス）を獲得させてもよい。例えば、追加算出能力が獲得及び事前初期化される前の時間閾値は、プログラムコード、ユーザアカント、または要請に基づいて変化し得る。いくつかの場合、獲得された算出能力は、アクティブプール１４０Ａに直接追加されてもよい。例えば、コード実行要請のバッチが、ユーザの実行設定を把握するユーザに関連付けられる場合、獲得された算出能力はアクティブプール１４０内に事前初期化及びセットされてもよく、それにより、算出能力は要請が到着するとすぐに使用されることができる。いくつかの実施形態では、追加算出能力は、周期であるものとして識別されるコード実行要請を予期して、アクティブプール１４０Ａ内にセットされた１つ以上の仮想マシンインスタンス（ただし、アクティブプール１４０Ａ内の余剰状態で（例えば、周期性情報なしで）別様に終了されるであろう、仮想マシンインスタンス上のユーザコードを現在実行しない）を存続することによって追加されてもよい。他の場合、獲得された算出能力は、ウォーミングプール１３０Ａに追加されてもよい。例えば、スケジューリングマネージャ１５０が、着信コード実行要請のシステム全体の増加が１０分以内に予想されたことを判定する場合、スケジューリングマネージャ１５０は、追加能力を獲得し、そのような能力をウォーミングプール１３０Ａに追加してもよく、それにより、追加された能力は、より多様な要請のグループに対処するために使用されてもよい。いくつかの実施形態では、スケジューリングマネージャ１５０（またはワーカーマネージャ１４０等の仮想算出システム１１０の他のコンポーネント）は、要請のバッチに関連付けられるユーザ機能を実行するために獲得された仮想マシンインスタンス（複数可）上の１つ以上のコンテナを作成し、要請のバッチが仮想算出システム１１０によって受信される前に、ユーザ機能をコンテナ（複数可）上にロードしてもよい。それをすることによって、スケジューリングマネージャ１５０は、仮想マシンインスタンスを最初に獲得する必要はなく、要請のバッチが受信されるとすぐに、ユーザ機能が実行させることを可能にし、１つ以上のコンテナを仮想マシンインスタンス上に作成し、１つ以上のユーザ機能をコンテナ上にロードし、それにより、仮想算出システム１１０上のユーザ機能を実行することに関連付けられる遅れを減らす。
【００７１】
図５のルーチン５００がブロック５０２〜５０８を参照して上記に説明される一方、本明細書に説明される実施形態は、それ自体限定されるものではなく、１つ以上のブロックは、本開示の主旨から逸脱することなく、省略、修正、または交換されてもよい。
時間的基準に基づいて、コード実行要請をスケジュールするための例示的ルーチン
【００７２】
ここで、図６を参照すると、仮想算出システム１１０の１つ以上のコンポーネント（例えば、スケジューリングマネージャ１５０）によって実施されるルーチン６００が説明される。ルーチン６００がスケジューリングマネージャ１５０による実施態様に関して説明されるが、関連技術分野の当業者であれば、代替のコンポーネントがルーチン６００を実施してもよく、または、１つ以上のブロックが異なるコンポーネントによって、もしくは、分散様式で、実施されてもよいことを理解するであろう。
【００７３】
例示ルーチン６００のブロック６０２において、スケジューリングマネージャ１５０は、第１のプログラムコードを実行するための第１の時間フレームを有する第１のジョブ要請を受信する。例えば、第１のジョブは、バックアップルーチンを明日ＡＭ３：００に実行されることを要請してもよい。いくつかの実施形態では、要請によって具体化される時間フレームは、以下の（ｉ）〜（ｉｉｉ）のうちの１つであってもよい。（ｉ）仮想算出システムが第１のプログラムコードを実行することが要請されるまでの時間（例えば、「ＡＭ３：００までにバックアップルーチンを実行するが、その前のどこかでスタートすることができる」）、（ｉｉ）仮想算出システムが第１のプログラムコードを実行することが要請された後の時間（例えば、「ＡＭ３：００の後にバックアップルーチンを実行するが、しかしながら、バックアップルーチンを初期化する前にたくさん時間がかかる可能性がある」）、または、（ｉｉｉ）仮想算出システムが第１のプログラムコードを実行することが要請される時間的ウィンドウ（例えば、「ＡＭ２：３０とＡＭ３：００との間にバックアップルーチンを実行する、またはＡＭ３：００の３０分前または３０分後にバックアップルーチンを実行する」）。いくつかの実施形態では、時間フレームがそれ自体の要請に提供されてもよい。他の実施形態では、スケジューリングマネージャ１５０は、要請に関連付けられるユーザアカウントもしくは要請に関連付けられるプログラムコードを使用して時間フレームを調べることによって、またはシステム全体設定もしくは発行されたシステム全体、アカウント毎、もしくは機能毎のＳＬＡを使用することによって、要請に関連付けられる時間フレームを判定してもよい。いくつかの実施形態では、スケジューリングマネージャ１５０は、ユーザインターフェースを介して、時間的柔軟性の様々な程度の範囲内で選択する選択肢（上記に記載された選択肢（ｉ）〜（ｉｉｉ））を提供するように構成される。いくつかの実施形態では、時間的柔軟性の様々な程度は、仮想算出システム１１０上のユーザ機能を実行することに関連付けられる様々な量のコストに関連付けられてもよい。例えば、ユーザが、要請されたユーザ機能が実行される範囲内の２時間の範囲を具体化する場合、ユーザに実行１回毎に０．０１セントがかかり得るが、ユーザが、要請されたユーザ機能が実行される正確な時点を具体化する場合、ユーザに実行１回毎に０．１セントを生じさせ得る。
【００７４】
ブロック６０４において、スケジューリングマネージャ１５０は、第２のプログラムコードを実行するための第２の時間フレームを有する第２のジョブ要請を受信する。例えば、第２のジョブは、ファイル圧縮ルーチンが明日ＡＭ３：００に実行されることを要請してもよい。上記に説明されるように、要請によって具体化される時間フレームは、以下の（ｉ）〜（ｉｉｉ）のうちの１つであってもよい。（ｉ）仮想算出システムが第１のプログラムコードを実行することが要請されるまでの時間（例えば、「ＡＭ３：００までにファイル圧縮ルーチンを実行するが、その前のどこかでスタートすることができる」）、（ｉｉ）仮想算出システムが第１のプログラムコードを実行することが要請された後の時間（例えば、「ＡＭ３：００の後にファイル圧縮ルーチンを実行するが、しかしながら、ファイル圧縮を初期化する前にかなりの時間がかかる可能性がある」）、または、（ｉｉｉ）仮想算出システムが第１のプログラムコードを実行することが要請される時間的ウィンドウ（例えば、「ＡＭ２：３０とＡＭ３：００との間にファイル圧縮ルーチンを実行する、またはＡＭ３：００の３０分前または３０分後にファイル圧縮ルーチンを実行する」）。バックアップルーチン及びファイル圧縮ルーチンが例として本明細書で使用されるが、任意の他のプログラムコード、ユーザ機能等が使用されてもよい。いくつかの実施形態では、要請は、また、対応するコード実行がタイムアウトされることが考慮されるべき後の最長期間を具体化する。例えば、そのような最長期間は、スケジューリングマネージャ１５０を、ユーザ機能の実行が初期化された時間から最長期間に等しい期間が経過した後、さらに、ユーザ機能は起動しないであろうという保証を提供し得る。
【００７５】
ブロック６０６において、スケジューリングマネージャ１５０が第１及び第２のジョブをスケジュールすることにより、第１及び第２のジョブが相互に重複しなくなる。上記の例では、第１及び第２のジョブ要請毎に具体的な時間フレームがＡＭ３：００を参照し得るが、ジョブをスケジュールする際にある程度の柔軟性があってもよい。両方のジョブ要請が、対応するルーチンがＡＭ３：００またはその後のどこかで実行されるべきであることを具体化する場合、スケジューリングマネージャ１５０は、バックアップルーチンをＡＭ３：００に実行されるように、及びファイル圧縮ルーチンをＡＭ３：１０に実行されるようにスケジュールしてもよい。両方のジョブ要請が、対応するルーチンがＡＭ３：００またはその前のどこかで実行を終えるべきことを具体化する場合、スケジューリングマネージャ１５０は、バックアップルーチンをＡＭ２：４０に実行されるように、及びファイル圧縮ルーチンをＡＭ２：５０に実行されるようにスケジュールしてもよい。両方のジョブ要請が、対応するルーチンがＡＭ２：３０とＡＭ３：３０との間に実行されるべきことを具体化する場合、スケジューリングマネージャ１５０は、バックアップルーチンをＡＭ２：５０に実行されるように、及びファイル圧縮ルーチンをＡＭ３：００に実行されるようにスケジュールしてもよい。いくつかの実施形態では、両方のジョブ要請が、対応するルーチンがＡＭ３：００の前に実行を終えなければならないことを具体化する場合、どちらのジョブもＡＭ３：００（それぞれのジョブの最長期間）の後にスケジュールされることができない。
【００７６】
図６のルーチン６００がブロック６０２〜６０６を参照して上記に説明される一方、本明細書に説明される実施形態は、それ自体限定されるものではなく、１つ以上のブロックは、本開示の主旨から逸脱することなく、省略、修正、または交換されてもよい。
実行要求に基づいて、ジョブをスケジュールするための例示的ルーチン
【００７７】
ここで、図７を参照すると、仮想算出システム１１０の１つ以上のコンポーネント（例えば、スケジューリングマネージャ１５０）によって実施されるルーチン７００が説明される。ルーチン７００がスケジューリングマネージャ１５０による実施態様に関して説明されるが、関連技術分野の当業者であれば、代替のコンポーネントがルーチン７００を実施してもよく、または、１つ以上のブロックが異なるコンポーネントによって、もしくは、分散様式で、実施されてもよいことを理解するであろう。
【００７８】
例示ルーチン７００のブロック７０２において、スケジューリングマネージャ１５０は、実行要求の第１のセットを有する第１のジョブを実行する要請を受信する。例えば、実行要求の第１のセットは、第１のジョブを実行するために使用される、ある量のコンピューティングリソース（例えば、メモリ、ＣＰＵ、ネットワーク等）を含んでもよい。別の例では、実行要求の第１のセットは、第１のジョブを実行するために必要である時間の量及び第１のジョブを実行するために必要である算出能力の量等の時間的または空間的リソースを含んでもよい。例えば、第１のジョブは、１２８ＭＢのメモリを使用するファイル圧縮ルーチンであってもよい。
【００７９】
ブロック７０４において、スケジューリングマネージャ１５０は、実行要求の第２のセットを有する第２のジョブを実行する要請を受信する。例えば、実行要求の第２のセットは、第２のジョブを実行するために使用される、ある量のコンピューティングリソース（例えば、メモリ、ＣＰＵ、ネットワーク等）を含んでもよい。別の例では、実行要求の第２のセットは、第２のジョブを実行するために必要である時間の量及び第２のジョブを実行するために必要である算出能力の量等の時間的または空間的リソースを含んでもよい。例えば、第２のジョブは、５１２ＭＢのメモリを使用する画像処理ルーチンであってもよい。
【００８０】
ブロック７０６において、スケジューリングマネージャ１５０は、実行要求の第１及び第２のセットに基づいて、１つ以上のスケジューリング基準を判定する。例えば、第１のジョブが１２８ＭＢのメモリを使用し、第２のジョブが５１２ＭＢのメモリを使用すると判定している、スケジューリングマネージャ１５０は、さらに、同時に実行される（または、ジョブが時間的に重複するように実行される）第１及び第２のジョブのために、少なくとも６４０ＭＢのメモリが必要であることを判定してもよい。言い換えれば、スケジューリング基準は、（ｉ）仮想算出システム１１０が少なくとも１２８ＭＢの空メモリを有する限り、第１のジョブが実行されるようにスケジューリングされることができること、（ｉｉ）仮想算出システム１１０が少なくとも５１２ＭＢの空メモリを有する限り、第２のジョブが実行されるようにスケジューリングされることができること、及び（ｉｉｉ）仮想算出システム１１０が少なくとも６４０ＭＢの空メモリを有する限り、第１及び第２のジョブが時間的重複様式で実行されるようにスケジューリングされることができること、であってもよい。
【００８１】
ブロック７０８において、スケジューリングマネージャ１５０は、スケジューリング基準を満たすように、第１及び第２のジョブをスケジュールする。上記に説明される例では、スケジューリングマネージャ１５０は、仮想算出システムが第１のジョブ及び第２のジョブが実行される時間で１ＧＢのメモリを有する場合、第１のジョブ及び第２のジョブを同時に実行されるようにスケジュールしてもよい。仮想算出システム１１０が利用可能である６００ＭＢのみを有する場合、スケジューリングマネージャ１５０は、実行が重複しないように、第１及び第２のジョブをスケジュールしてもよい。メモリは第１のジョブと第２のジョブとの間のリソース競合を例示するために使用されるが、当該技術は、第１のジョブと第２のジョブとの両方によって利用され得る任意の他のリソースにまで及ぶことができる。
【００８２】
図７のルーチン７００がブロック７０２〜７０８を参照して上記に説明される一方、本明細書に説明される実施形態は、それ自体限定されるものではなく、１つ以上のブロックは、本開示の主旨から逸脱することなく、省略、修正、または交換されてもよい。
他の考察
【００８３】
本開示に説明される機能の全てが、開示されたコンポーネント及びモバイル通信デバイスの１つ以上の物理プロセッサによって実行されるソフトウェア内で具現化されてもよいことを、当業者及び他によって理解されるであろう。ソフトウェアは、任意の種類の不揮発性ストレージ内に持続的に記憶されてもよい。
【００８４】
別途具体的に記述されない限りまたは使用される文脈内で別様に理解されない限り、とりわけ、「ｃａｎ（することができる）」、「ｃｏｕｌｄ（できるであろう）」、「ｍｉｇｈｔ（かもしれない）」、または「ｍａｙ（してもよい）」等の条件的言語は、概して、ある特徴、要素、及び／またはステップを、ある実施形態が含むが、一方で他の実施形態が含まないことを伝えることが意図される。したがって、そのような条件的言語は、概して、特徴、要素、及び／またはステップが、１つ以上の実施形態に任意の方法で要求されるか、または１つ以上の実施形態が、ユーザ入力もしくはプロンプトを用いて、もしくは用いずに、これらの特徴、要素、及び／もしくはステップが含まれるか、もしくは任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。
【００８５】
前述の事項は、以下の条項を鑑みてより良く理解され得る。
１．低遅延算出能力を仮想算出フリートから提供するためのシステムであって、
少なくともユーザのプログラムコードを記憶するように構成される電子データ記憶部と、
具体的なコンピュータ実行可能命令を実行する１つ以上のハードウェアコンピューティングデバイスを備える仮想算出システムとを備え、前記仮想算出システムは、前記データ記憶部と通信し、少なくとも、
１つ以上の物理コンピューティングデバイス上に複数の仮想マシンインスタンスを維持し、前記複数の仮想マシンインスタンスは、
前記仮想マシンインスタンス上にロードされた１つ以上のソフトウェアコンポーネントを有し及びユーザに割り当てられることを待機する前記仮想マシンインスタンスを備える、ウォーミングプールと、
１人以上のユーザに現在割り当てられている仮想マシンインスタンスを備える、アクティブプールとを備え、
着信コード実行要請を監視し、前記仮想算出システム上でプログラムコードを実行し、前記着信コード実行要請の少なくとも一部は、周期性の程度を提示し、
前記着信コード実行要請の前記少なくとも一部に関連付けられる前記周期性の程度を判定し、前記判定された周期性の程度は、前記着信コード実行要請の前記少なくとも一部が前記仮想算出システムによって受信されることが予想される時間周期を示し、
前記着信コード実行要請の前記少なくとも一部に関連付けられる前記周期性の程度を判定したことに応答して、仮想マシンインスタンスの減少数を前記ウォーミングプール内で維持させ、前記減少数は、前記着信コード実行要請の前記少なくとも一部の数及び前記判定された周期性の程度に基づいて判定され、
少なくとも一部の仮想マシンインスタンスを前記時間周期の前に前記アクティブプールに追加させ、前記着信コード実行要請の前記少なくとも一部に関連付けられるプログラムコードを前記少なくとも１つの仮想マシンインスタンス上にロードさせ、
前記着信コード実行要請の前記少なくとも一部に関連付けられる要請を受信したことに応答して、前記少なくとも１つの仮想マシン上にロードされたプログラムコードを実行させるように構成される、前記システム。
【００８６】
２．前記仮想算出システムは、さらに、
第１の要請を受信し、第１の時間周期において第１のプログラムコードを実行し、
第２の要請を受信し、第２の時間周期において第２のプログラムコードを実行し、前記第２の時間周期は、少なくとも部分的に、前記第１の時間周期に重複し、
前記第１のプログラムコードの第１の実行及び前記第２のプログラムコードの第２の実行をスケジュールすることにより、前記第１及び第２の実行が重複しないように構成される、条項１に記載のシステム。
【００８７】
３．前記第１の時間周期は、（ｉ）前記仮想算出システムが前記第１のプログラムコードを実行することが要請されるまでの時間、（ｉｉ）前記仮想算出システムが前記第１のプログラムコードを実行することが要請された後の時間、または、（ｉｉｉ）前記仮想算出システムが前記第１のプログラムコードを実行することが要請される時間的ウィンドウ、のうちの１つを備える、条項２に記載のシステム。
【００８８】
４．システムであって、
具体的なコンピュータ実行可能命令を実行する１つ以上のハードウェアコンピューティングデバイスを備える仮想算出システムを備え、前記仮想算出システムは、少なくとも、
１つ以上の物理コンピューティングデバイス上に複数の仮想マシンインスタンスを維持し、
着信コード実行要請を監視し、前記仮想算出システム上でプログラムコードを実行し、
前記着信コード実行要請の少なくとも一部が周期性を提示するかどうかを判定し、前記着信コード実行要請の前記少なくとも一部は、１つ以上の実行パラメータに関連付けられ、
前記着信コード実行要請の前記少なくとも一部が周期性を提示したことを判定したことに応答して、余剰算出能力の減少量を前記仮想算出システム上で維持させ、前記減少量は、前記周期性に基づいて判定され、
前記着信コード実行要請の前記少なくとも一部と同じ周期性を提示する追加周期的要請が前記仮想算出システムによって受信される前に、前記１つ以上の実行パラメータに基づいて、追加仮想マシンインスタンスを事前初期化させるように構成される、前記システム。
【００８９】
５．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記仮想算出システムは、プログラムコードを実行するために事前に使用されたが、プログラムコードを現在実行していないインスタンスをアクティブプールから除去することによって、前記余剰算出能力の減少量を生じさせるように構成される、条項４に記載のシステム。
【００９０】
６．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記仮想算出システムは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請し、
前記追加仮想マシンインスタンスを前記アクティブプールに追加させ、
前記追加仮想マシン上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることによって、
前記１つ以上の実行パラメータに基づいて、前記追加仮想マシンインスタンスを事前初期化させるように構成される、条項４に記載のシステム。
【００９１】
７．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのウォーミングプールを備え、前記仮想算出システムは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請し、
前記追加仮想マシンインスタンスを前記ウォーミングプールに追加させ、
前記追加仮想マシン上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることによって、
前記１つ以上の実行パラメータに基づいて、前記追加仮想マシンインスタンスを事前初期化させるように構成される、条項４に記載のシステム。
【００９２】
８．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記仮想算出システムは、
前記アクティブプール内の空の仮想マシンインスタンスを特定し、前記空の仮想マシンインスタンスは、十分に利用されず、
前記空の仮想マシンインスタンス上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることによって、
前記１つ以上の実行パラメータに基づいて、前記追加仮想マシンインスタンスを事前初期化させるように構成される、条項４に記載のシステム。
【００９３】
９．前記複数の仮想マシンインスタンスは、前記仮想マシンインスタンス上にロードされた１つ以上のソフトウェアコンポーネントを有し及びユーザに割り当てられることを待機する、仮想マシンインスタンスのウォーミングプールを備え、前記仮想算出システムは、ウォーミングプール内の仮想マシンインスタンスの数が前記減少量に対応する数に到達するまで、前記追加仮想マシンインスタンスを前記ウォーミングプールに追加することを自制することによって、余剰算出能力の減少量を前記仮想算出システム上で維持させるように構成される、条項４に記載のシステム。
【００９４】
１０．前記仮想算出システムは、さらに、前記追加周期的要請を受信したことに応答して、前記追加周期的要請に関連付けられるプログラムコードを前記追加仮想マシンインスタンス上に作成されたコンテナ内で実行させるように構成され、前記プログラムコードは、前記追加周期的要請が前記仮想算出システム上によって受信される前に、前記コンテナ内にロードされる、条項４に記載のシステム。
【００９５】
１１．前記仮想算出システムは、さらに、
第１のプログラムコードに関連付けられる第１のジョブ要請、前記第１のプログラムコードを実行するための第１の最大期間、及び前記第１のプログラムコードを実行するための第１の時間フレームを受信し、
第２のプログラムコードに関連付けられる第２のジョブ要請及び前記第２のプログラムコードを実行するための第２の時間フレームを受信し、前記第２の時間フレームは、少なくとも部分的に、前記第１の時間フレームに重複し、
第１の実行時間が少なくとも第１の最大期間だけ前記第２の実行時間に先行するように、前記第１のプログラムコードが実行される第１の実行時間及び前記第２のプログラムコードが実行される第２の実行時間を判定するように構成される、条項４に記載のシステム。
【００９６】
１２．前記仮想算出システムは、さらに、ユーザインターフェースを介して、第１のコストに関連付けられる時間的柔軟性の第１の程度と、前記第１の程度よりも大きく及び第２のコストに関連付けられる時間的柔軟性の第２の程度との間で選択する選択肢を提供するように構成され、前記第１のコストは、前記第２のコストよりも大きい、条項１１に記載のシステム。
【００９７】
１３．前記仮想算出システムは、前記着信コード実行要請の少なくとも一部が、前記着信コード実行要請に基づいて生成されたログデータを周期的に分析することによって、周期性を提示するかどうかを判定するように構成される、条項４に記載のシステム。
【００９８】
１４．コンピュータ実施方法であって、
具体的な実行可能命令で構成される１つ以上のコンピューティングデバイスによって実施されるように、
１つ以上の物理コンピューティングデバイス上に複数の仮想マシンインスタンスを維持することと、
着信コード実行要請を監視し、前記仮想算出システム上でプログラムコードを実行することと、
前記着信コード実行要請の少なくとも一部が周期性を提示するかどうかを判定することであって、前記着信コード実行要請の前記少なくとも一部は、１つ以上の実行パラメータに関連付けられる、前記判定することと、
前記着信コード実行要請の前記少なくとも一部が周期性を提示したことを判定したことに応答して、未割付算出能力の減少量を前記仮想算出システム上で維持させることとであって、前記減少量は、前記周期性に基づいて判定される、前記維持させることと、
前記着信コード実行要請の前記少なくとも一部が時間閾値以内で受信されることが予想されることを判定することと、
前記着信コード実行要請の前記少なくとも一部と同じ周期性を提示する追加周期的要請が前記仮想算出システムによって受信される前に、前記１つ以上の実行パラメータに基づいて、追加仮想マシンインスタンスを構成させることと、
を含む、前記コンピュータ実施方法。
【００９９】
１５．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記追加仮想マシンインスタンスを１つ以上の実行パラメータに基づいて構成させることは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請することと、
前記追加仮想マシンインスタンスを前記アクティブプールに追加させることと、
前記追加仮想マシン上にコンテナを作成し、前記着信コード実行要請の少なくとも一部に関連付けられるプログラムコードを前記コンテナ内にロードさせることと、
を含む、条項１４に記載のコンピュータ実施方法。
【０１００】
１６．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのウォーミングプールを備え、前記追加仮想マシンインスタンスを１つ以上の実行パラメータに基づいて構成させることは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請することと、
前記追加仮想マシンインスタンスを前記ウォーミングプールに追加させることと、
前記追加仮想マシン上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることと、
を含む、条項１４に記載のコンピュータ実施方法。
【０１０１】
１７．実行要求の第１のセットに関連付けられる第１のジョブを実行する要請を受信することと、
実行要求の第２のセットに関連付けられる第２のジョブを実行する要請を受信することと、
前記実行要求の第１及び第２のセットに基づいて、１つ以上のスケジューリング基準を判定することと、
前記１つ以上のスケジューリング基準を満たすように、前記第１のジョブを実行するための第１の実行時間及び前記第２のジョブを実行するための第２の実行時間を判定することと、
をさらに含む、条項１４に記載のコンピュータ実施方法。
【０１０２】
１８．非一過性物理コンピュータストレージであって、１つ以上のコンピューティングデバイスによって実行されるとき、前記１つ以上のコンピューティングデバイスを構成し、
１つ以上の物理コンピューティングデバイス上に複数の仮想マシンインスタンスを維持し、
着信コード実行要請を監視し、前記仮想算出システム上でプログラムコードを実行し、
前記着信コード実行要請の少なくとも一部が周期性を提示するかどうかを判定し、前記着信コード実行要請の前記少なくとも一部は、１つ以上の実行パラメータに関連付けられ、
前記着信コード実行要請の前記少なくとも一部が周期性を提示したことを判定したことに応答して、未割付算出能力の減少量を前記仮想算出システム上で維持させ、前記減少量は、前記周期性に基づいて判定され、
前記着信コード実行要請の前記少なくとも一部が時間閾値以内で受信されることが予想されることを判定し、
前記着信コード実行要請の前記少なくとも一部と同じ周期性を提示する追加周期的要請が前記仮想算出システムによって受信される前に、前記１つ以上の実行パラメータに基づいて、追加仮想マシンインスタンスを構成させる、命令を含む、前記非一過性物理コンピュータストレージ。
【０１０３】
１９．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、追加仮想マシンインスタンスを１つ以上の実行パラメータに基づいて構成させることは、
前記追加仮想マシンインスタンスを、前記仮想算出システムとネットワーク通信するインスタンスプロビジョニングサービスから要請することと、
前記追加仮想マシンインスタンスを前記アクティブプールに追加させることと、
前記追加仮想マシン上にコンテナを作成し、前記着信コード実行要請の少なくとも一部と同じ周期性を提示する追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることと、
を含む、条項１８に記載の非一過性物理コンピュータストレージ。
【０１０４】
２０．前記複数の仮想マシンインスタンスは、仮想マシンインスタンスのアクティブプールを備え、前記追加仮想マシンインスタンスを１つ以上の実行パラメータに基づいて構成させることは、
前記アクティブプール内の空の仮想マシンインスタンスを特定することであって、前記空の仮想マシンインスタンスは、十分に利用されない、前記特定することと、
前記空の仮想マシンインスタンス上にコンテナを作成し、前記追加周期的要請に関連付けられるプログラムコードを前記コンテナ内にロードさせることと、
を含む、条項１８に記載の非一過性物理コンピュータストレージ。
【０１０５】
２１．前記命令は、さらに、前記１つ以上のコンピューティングデバイスを構成し、
実行要求の第１のセットに関連付けられる第１のジョブを実行する要請を受信し、
実行要求の第２のセットに関連付けられる第２のジョブを実行する要請を受信し、
前記実行要求の第１及び第２のセットに基づいて、１つ以上のスケジューリング基準を判定し、
前記１つ以上のスケジューリング基準を満たすように、前記第１のジョブを実行するための第１の実行時間及び前記第２のジョブを実行するための第２の実行時間を判定する、条項１８に記載の非一過性物理コンピュータストレージ。
【０１０６】
本明細書に記載される、及び／または添付の図面に示されるフロー図のいずれのプロセスの記述、要素、またはブロックも、プロセスにおける具体的な論理的機能またはステップを実施するための１つ以上の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されたい。代替的な実施態様は、本明細書に記載される実施形態の範囲内に含まれ、要素または機能が、当業者によって理解されるように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるものとは異なる順序で、削除、実行、または説明され得る。さらに、上記に説明されるデータ及び／またはコンポーネントは、コンピュータ可読媒体上に記憶され、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはネットワークインターフェース等のコンピュータ実行可能コンポーネントを記憶するコンピュータ可読媒体に関連付けられるドライブ機構を使用するコンピューティングデバイスのメモリ内にロードされ得ることが理解されるであろう。さらに、コンポーネント及び／またはデータは、単一のデバイスに含まれる、または任意の様式で分散されることができる。その結果、汎用コンピューティングデバイスは、上記に説明される様々なデータ及び／またはコンポーネントの処理及び／または実行とともに、本開示のプロセス、アルゴリズム、及び手順を実施するように構成され得る。
【０１０７】
多くの変形及び改変が上記の実施形態に対して行われ得、それらの要素が他の許容される例にあるものとして理解されることを強調されたい。全てのそのような修正及び変形は、本開示の範囲内で本明細書に含有され、以下の請求項によって保護されることが意図される。
【図１】
0006559338.tif 000002
【図２】
0006559338.tif 000003
【図３】
0006559338.tif 000004
【図４】
0006559338.tif 000005
【図５】
0006559338.tif 000006
【図６】
0006559338.tif 000007
【図７】
0006559338.tif 000008