(57)【要約】  複数のグループに編成されたコンピュータシステムなどの、複数のコンピュータシステム上のプログラムの実行を管理するための技術が、説明される。プログラム実行サービスが、複数の顧客、または他のユーザのためにプログラム実行を管理し、実行されるべきプログラムのコピーが獲得されることが可能な、プログラムの以前に格納された１つまたは複数のコピーのロケーションに或る程度、基づいて、プログラムの１つまたは複数のインスタンスを実行すべき適切なコンピュータシステムを選択する。例えば、一部の状況において、プログラムのインスタンスを実行すべき適切なコンピュータシステムの選択は、そのプログラムの格納されたコピー、そのプログラムの実行中のコピー、及び／または利用可能なコンピュータシステムなどの、他のリソースに対する物理的近さ、または論理的近さに或る程度、基づく。
2009532771.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータシステムによるプログラムの実行を管理する方法であって、
前記方法は、
プログラムに関する複数のプログラム実行要求を受信するステップと、
各要求に関して、
複数のコンピュータシステムを有する第１のグループからコンピュータシステムを選択するステップと、
前記選択されたコンピュータシステムが、前記プログラムをローカルで格納しておらず、コンピュータシステムの前記第１のグループが、前記プログラムの格納された１つまたは複数のコピーを有する場合に、前記第１のグループ内の別のコンピュータシステムから前記プログラムのコピーを獲得するよう、前記選択されたコンピュータシステムに命令するステップと、
コンピュータシステムの前記第１のグループが、前記プログラムの格納されたコピーを全く有さない場合に、リモートコンピュータシステムから前記プログラムのコピーを獲得するよう、前記選択されたコンピュータシステムに命令するステップと、
前記獲得されたプログラムコピーの実行を開始するよう、前記選択されたコンピュータシステムに命令するステップと
を行うことによって前記プログラムのインスタンスを実行するステップと
を含むことを特徴とする方法。
【請求項２】
コンピュータシステムを前記選択するステップは、グループの１つまたは複数のコンピュータシステム上にローカルで格納された前記プログラムのコピーをそれぞれが有するコンピュータシステムの１つまたは複数のグループを識別することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
選択されたコンピュータシステム上で前記プログラムのインスタンスを実行するステップは、前記選択されたコンピュータシステム上に前記プログラムのコピーを格納することを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記複数のプログラム実行要求について前記コンピュータシステムを前記選択するステップは、ポリシーに従って実行されることを特徴とする請求項１に記載の方法。
【請求項５】
前記ポリシーは、
前記プログラムの複数のインスタンスの実行のために複数のグループのコンピュータシステムを選択するステップと、
前記プログラムの複数のインスタンスの実行のために複数のコンピュータシステムを選択するステップと、
前記プログラムのインスタンスの実行のために、前記プログラムのローカルコピーを格納しているコンピュータシステムを選択するステップと、
前記プログラムの格納されたローカルコピーを有する少なくとも１つのメンバを有する、コンピュータシステムのグループのメンバを選択するステップと、
実行リソースに基づいてコンピュータシステムを選択するステップと
の少なくとも１つを実行することによって実施されることを特徴とする請求項４に記載の方法。
【請求項６】
前記プログラム実行要求を前記受信するステップの前に、
前記プログラムに関する実行要求を満たす際に後に使用するために、複数のグループにおけるコンピュータシステム上に前記プログラムのコピーを格納するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記第１のグループは、前記複数のコンピュータシステムの物理的近さに基づくことを特徴とする請求項１に記載の方法。
【請求項８】
前記第１のグループは、前記複数のコンピュータシステムの論理的近さに基づくことを特徴とする請求項１に記載の方法。
【請求項９】
前記第１のグループは、共通データ交換媒体を有することを特徴とする請求項１に記載の方法。
【請求項１０】
前記共通データ交換媒体は、前記第１のグループの前記コンピュータシステム間で高い帯域幅の通信を提供するラックバックプレーン（rack backplane）であることを特徴とする請求項９に記載の方法。
【請求項１１】
前記複数のプログラム実行要求の少なくとも１つは、
実行されるべき前記プログラムのインスタンスの数のインジケーション、
前記プログラムのインスタンスの実行を開始すべき時刻のインジケーション、
前記プログラムを実行する際に使用するためのハードウェアリソースのインジケーション、
前記プログラムを実行することと関係する地理的情報のインジケーション
の少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記プログラムは、実行に関する関連するハードウェアリソース基準を有し、
獲得されたプログラムコピーの実行を開始するよう、選択されたコンピュータシステムに前記命令するステップは、前記関連するハードウェアリソース基準を満たすように前記選択されたコンピュータシステムにハードウェアリソースを割り当てるステップを含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記関連するハードウェアリソース基準は、
メモリの指示される量、
プロセッサ使用の指示される量、
ネットワーク帯域幅の指示される量、
ディスクスペースの指示される量、
スワップスペースの指示される量
の少なくとも１つを含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
コンピュータシステムを前記選択するステップは、前記プログラムのコピーを現在、実行している前記第１のグループ内のコンピュータシステムが存在するかどうかに基づいて、前記第１のグループ内のコンピュータシステムを選択すべきかどうかを判定するステップを含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
前記第１のグループの前記複数のコンピュータシステムのいずれかが、前記プログラムのコピーを格納するかどうかを判定するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１６】
前記第１のグループに関するマネージャモジュールは、前記プログラムの実行を制御することを特徴とする請求項１５に記載の方法。
【請求項１７】
前記第１のグループの前記コンピュータシステムの少なくとも１つが、前記プログラムのコピーを格納する場合に、共通データ交換媒体を介して前記少なくとも１つのコンピュータシステムから前記ローカルコピーを獲得するステップと、
前記第１のグループの前記コンピュータシステムのいずれも、前記プログラムのコピーを格納しない場合に、前記共通データ交換媒体とは別個のデータ交換媒体を介して、外部コンピュータシステムから前記ローカルコピーを獲得するステップと
によって、実行のための前記プログラムのローカルコピーを自動的に獲得するステップをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
前記要求の少なくとも１つに関して、前記プログラムの複数のインスタンスの実行を開始するステップをさらに含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記複数のインスタンスの１つまたは複数に関するステータス情報を、プログラム実行サービスを管理する際に使用するためにリモートシステムマネージャに送信するステップをさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記ステータス情報は、
前記少なくとも１つのコンピュータシステム上に格納された１つまたは複数のプログラムコピーのインジケーション、
前記プログラムの実行の開始のインジケーション、
前記複数のコンピュータシステムの少なくとも１つのシステム上で現在、実行されている１つまたは複数のプログラムのインジケーション、
リソース利用率のインジケーション
の少なくとも１つを含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記第１のグループの前記コンピュータシステムはすべて、単一の物理的ロケーションに配置され、
前記物理的ロケーションは、単一のハードウェアラック、単一のデータセンタ、単一のローカルエリアネットワークによるサービスを受けるエリア、及び単一のネットワークスイッチによるサービスを受けるエリアの１つであることを特徴とする請求項１９に記載の方法。
【請求項２２】
前記プログラム実行サービスは、プログラムを実行するのに、前記第１のグループ以外のコンピュータシステムの複数のグループをさらに使用し、前記その他のグループのそれぞれは、他の物理的ロケーションにおける他の複数のコンピュータシステムを有することを特徴とする請求項２１に記載の方法。
【請求項２３】
前記第１のグループの前記コンピュータシステムは、前記単一の物理的ロケーションにおける前記コンピュータシステム間の物理的データ接続である共通データ交換媒体を共有し、前記物理的データ接続は、前記第１のグループの外部のコンピュータシステムと共有されていないことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記第１のグループの前記コンピュータシステムは、互いに論理的に近いことを特徴とする請求項２２に記載の方法。
【請求項２５】
前記第１のグループの前記コンピュータシステムの少なくとも１つが、前記プログラムのコピーを格納するかどうかを、前記プログラムの格納されたコピーと関係する情報を求める要求を、前記第１のグループの前記コンピュータシステムに送信することによって判定するステップをさらに含むことを特徴とする請求項２２に記載の方法。
【請求項２６】
前記プログラムの前記ローカルコピーを前記自動的に獲得することは、他のプログラムの格納された１つまたは複数のコピーを含む前記第１のグループの前記コンピュータシステムの１つのシステムのローカルプログラムリポジトリの中に、前記獲得されたローカルコピーを格納するステップを含むことを特徴とする請求項２２に記載の方法。
【請求項２７】
前記ローカルプログラムリポジトリの中に前記プログラムの前記獲得されたローカルコピーを前記格納するステップは、前記獲得されたローカルコピーのための格納スペースを提供するために、他の少なくとも１つのプログラムの少なくとも１つの格納されたコピーを除去するステップを含むことを特徴とする請求項２６に記載の方法。
【請求項２８】
前記他の少なくとも１つのプログラムの前記除去される少なくとも１つのコピーは、それらのコピーが、前記他の少なくとも１つのプログラムの実行のために、どれだけ最近使用されたかに少なくとも或る程度、基づいて、除去のために選択されることを特徴とする請求項２７に記載の方法。
【請求項２９】
前記プログラムの前記ローカルコピーを前記自動的に獲得するステップは、前記プログラムの格納されたコピーへのアクセスを有する複数のコンピュータシステムのそれぞれから前記ローカルコピーの一部分を獲得するステップを含むことを特徴とする請求項２２に記載の方法。
【請求項３０】
前記複数のコンピュータシステムのそれぞれから前記ローカルコピーの前記部分を前記獲得するステップは、以前の１つまたは複数の要求に対して受信された応答に基づいて、前記複数のコンピュータシステムのそれぞれから前記ローカルコピーの一部分を要求するステップと、前記複数のコンピュータシステムのサブセットから前記ローカルコピーのさらなる部分を要求するステップをさらに含むことを特徴とする請求項２９に記載の方法。
【請求項３１】
要求に関する前記プログラムの前記インスタンスを前記実行するステップは、前記第１のグループの現在の条件に基づいてコンピュータシステムの複数のグループから前記第１のグループを選択するステップを含むことを特徴とする請求項２２に記載の方法。
【請求項３２】
前記第１のグループの前記現在の条件は、前記第１のグループの少なくとも１つのコンピュータシステムが、前記プログラムを実行するのに利用可能であること、前記第１のグループの少なくとも１つのコンピュータシステムが、前記プログラムのコピーを現在、実行中であること、及び前記選択されたグループの少なくとも１つのコンピュータシステムが、前記プログラムの格納されたコピーを有することの少なくとも１つを含むことを特徴とする請求項３１に記載の方法。
【請求項３３】
前記プログラムの前記ローカルコピーを獲得するステップの後に、
前記プログラムのインスタンスを実行するステップと、
前記プログラムの前記ローカルコピーを後の使用のために格納するステップと、
前記ローカルコピーを格納した後、前記プログラムの新たなバージョンを実行する指示を受信するステップと、
実行のための前記プログラムの前記新たなバージョンの新たなローカルコピーを自動的に獲得するステップと、
前記格納されたローカルコピーの代わりに、後の使用のために前記プログラムの前記新たなバージョンの前記新たなローカルコピーを格納するステップと
をさらに含むことを特徴とする請求項２２に記載の方法。
【請求項３４】
前記第１のグループの前記複数のコンピュータシステムの少なくともいくつかは、少なくとも１つのプログラムをそれぞれが実行することができる複数の仮想マシンをホストし、
前記プログラムは、前記仮想マシンの少なくとも１つによって実行されるべき仮想マシンイメージであることを特徴とする請求項２２に記載の方法。
【請求項３５】
前記選択されたコンピュータシステムは、複数の仮想マシンをホストし、
前記複数の仮想マシンのそれぞれは、個別のプログラムのインスタンスを同時に実行することができることを特徴とする請求項３４に記載の方法。
【請求項３６】
請求項１乃至３５のいずれかに記載の方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項３７】
プログラムの実行を管理するように構成されたシステムであって、
メモリと、
指示されたプログラムの少なくとも１つのインスタンスを実行する決定に応答して、前記指示されたプログラムの１つまたは複数のインスタンスを実行するための１つまたは複数の計算機を自動的に選択するように構成されたシステムマネージャモジュールであって、前記選択された計算機は、複数のグループのうちの１つまたは複数のグループにあり、計算機を前記選択することは、前記選択された計算機が、前記指示されたプログラムの格納されたコピーを有する１つまたは複数のマシンを含むグループのメンバであることに少なくとも或る程度、基づく、システムマネージャモジュールと
を含むことを特徴とするシステム。
【請求項３８】
各グループが、前記グループに外部の計算機によって共有されていない共通物理データ接続を共有する複数の計算機を含むように、計算機の複数のグループをさらに含み、各計算機は、少なくとも１つのプログラムを実行するように構成され、各グループの少なくとも１つのマシンは、複数のプログラムのコピーを格納するように構成されることを特徴とする請求項３７に記載のシステム。
【請求項３９】
前記複数のグループの前記複数の計算機によって共有される前記共通物理データ接続はそれぞれ、別個のネットワークスイッチによって提供されることを特徴とする請求項３８に記載のシステム。
【請求項４０】
前記複数のグループの１つにそれぞれが関連し、前記関連するグループの前記マシンの少なくとも１つが格納されたコピーを有する、指示されたプログラムの少なくとも１つのインスタンスを実行する決定に応答して、前記関連するグループの前記複数の計算機によって共有される前記共通物理データ接続を介して前記少なくとも１つのマシンの１つまたは複数から、実行のための前記指示されたプログラムのコピーを獲得することを円滑にするようにそれぞれが構成された複数のマシンマネージャモジュールをさらに含むことを特徴とする請求項３８に記載のシステム。
【請求項４１】
前記システムは、プログラム実行サービスによって運用され、
前記複数のグループの前記複数のマシンがアクセスすることができ、前記プログラム実行サービスの顧客から複数のプログラムのコピーを格納し、受信された要求に応答して前記複数のプログラムのうちの１つのプログラムのコピーを提供するように構成されたリモートストレージモジュールをさらに含むことを特徴とする請求項４０に記載のシステム。
【請求項４２】
前記複数のマシンマネージャモジュールはそれぞれ、前記マシンマネージャモジュールに関する前記関連するグループのマシンのいずれも格納されたコピーを有さないプログラムの指示の後、前記リモートストレージモジュールから前記指示されたプログラムのコピーを獲得することを円滑にするようにさらに構成されることを特徴とする請求項４１に記載のシステム。
【請求項４３】
前記複数のマシンマネージャモジュールはそれぞれ、前記マシンマネージャモジュールに関する前記関連するグループの前記マシンのいずれも格納されたコピーを有さないプログラムの指示の後、前記指示されたプログラムの少なくとも１つのインスタンスを実行する決定に応答して、計算機の前記複数のグループのいずれかが、前記指示されたプログラムのコピーを格納する少なくとも１つのマシンを有するかどうかを判定し、いずれかが、前記指示されたプログラムのコピーを格納すると判定された場合、前記複数のグループの１つまたは複数のグループの１つまたは複数のマシンから、前記指示されたプログラムのコピーを獲得することを円滑にするようにさらに構成されることを特徴とする請求項４２に記載のシステム。
【請求項４４】
前記リモートストレージモジュールから指示されたプログラムのコピーを前記獲得することを前記円滑にすることは、計算機の前記複数のグループのいずれも、前記指示されたプログラムのコピーを格納する少なくとも１つのマシンを有さないと判定された場合に限って、実行されることを特徴とする請求項４３に記載のシステム。
【請求項４５】
前記複数のマシンマネージャモジュールはそれぞれ、前記マシンマネージャモジュールに関する前記関連するグループの前記計算機の少なくとも１つのマシン上でプログラムの獲得されたコピーの実行を開始するようにさらに構成されることを特徴とする請求項４０に記載のシステム。
【請求項４６】
前記システムマネージャモジュールは、指示されたプログラムのインスタンスを実行するための前記複数のグループの１つのグループの計算機を選択した後、前記指示されたプログラムの少なくとも１つのインスタンスを実行する決定をしたことを提供し、さらに前記１つのグループの前記マシンの少なくとも１つが、前記指示されたプログラムの格納されたコピーを有するかどうかを判定することを円滑にする情報を提供するよう、前記１つのグループに関連するマシンマネージャモジュールに命令を送信するようにさらに構成されることを特徴とする請求項４５に記載のシステム。
【請求項４７】
前記複数のマシンマネージャモジュールのそれぞれは、別個の計算機上で実行され、
マシンマネージャモジュールによって、指示されるプログラムのコピーを前記獲得することを前記円滑にすることは、前記指示されるプログラムコピーを獲得することを含み、各マシンマネージャモジュールは、前記マシンマネージャモジュールを実行する前記計算機上で、獲得されたプログラムコピーの実行を開始するようにさらに構成されることを特徴とする請求項４０に記載のシステム。
【請求項４８】
前記システムマネージャモジュール及び前記複数のマシンマネージャモジュールはそれぞれ、システムの１つまたは複数の計算機のメモリの中に実行のためのソフトウェア命令を含むことを特徴とする請求項４０に記載のシステム。
【請求項４９】
前記システムマネージャモジュールは、指示されたプログラムの少なくとも１つのインスタンスを実行する決定に応答して、前記指示されたプログラムの１つまたは複数のインスタンスを実行するための１つまたは複数の計算機を自動的に選択するための手段から成り、前記選択された計算機は、複数のグループの１つまたは複数にあり、計算機を前記選択することは、前記選択された計算機が、前記指示されたプログラムの格納されたコピーを有する１つまたは複数のマシンを含むグループのメンバであることに少なくとも或る程度、基づくことを特徴とする請求項３７に記載のシステム。
【請求項５０】
前記選択された計算機の少なくともいくつかはそれぞれ、少なくとも１つのプログラムをそれぞれ実行することができる複数の仮想マシンをホストし、前記指示されたプログラムは、前記仮想マシンの少なくとも１つによって実行されるべき仮想マシンイメージであることを特徴とする請求項３７に記載のシステム。
【請求項５１】
前記システムマネージャモジュールは、
第２のプログラムに関する複数のプログラム実行要求を受信するため、並びに
各要求に関して、
複数のコンピュータシステムを有する第１のグループからコンピュータシステムを選択することと、
前記選択されたコンピュータシステムが、前記第２のプログラムをローカルで格納しておらず、コンピュータシステムの前記第１のグループが、前記第２のプログラムの格納された１つまたは複数のコピーを有する場合に、前記第１のグループ内の別のコンピュータシステムから前記第２のプログラムのコピーを獲得するよう、前記選択されたコンピュータシステムに命令することと、
コンピュータシステムの前記第１のグループが、前記第２のプログラムの格納されたコピーを全く有さない場合に、リモートコンピュータシステムから前記第２のプログラムのコピーを獲得するよう、前記選択されたコンピュータシステムに命令することと、
前記獲得されたプログラムコピーの実行を開始するよう、前記選択されたコンピュータシステムに命令すること
によって前記第２のプログラムのインスタンスを実行するためにさらに構成されることを特徴とする請求項３７に記載のシステム。
【請求項５２】
前記システムマネージャモジュールは、ポリシーに従ってプログラムインスタンスを実行するためのコンピュータシステムを選択するためにさらに構成されることを特徴とする請求項５１に記載のシステム。
【請求項５３】
前記システムマネージャモジュールは、
前記第２のプログラムの複数のインスタンスの実行のために複数のグループのコンピュータシステムを選択することと、
前記第２のプログラムの複数のインスタンスの実行のために複数のコンピュータシステムを選択することと、
前記第２のプログラムのインスタンスの実行のために前記第２のプログラムのローカルコピーを格納しているコンピュータシステムを選択することと、
前記第２のプログラムの格納されたローカルコピーを有する少なくとも１つのメンバを有するコンピュータシステムのグループのメンバを選択することと、
実行リソースに基づいてコンピュータシステムを選択すること
の少なくとも１つを実行することによって前記ポリシーを実施するようにさらに構成されることを特徴とする請求項５２に記載のシステム。
【請求項５４】
プログラム実行サービスマネージャから、プログラムのインスタンスを実行する指示を含む情報を、プログラム実行サービスマネージャから受信する手段と、
前記プログラムが前記コンピュータシステム上にローカルで格納されているかどうかを判定し、前記プログラムが前記コンピュータシステム上にローカルで格納されていない場合に別のコンピュータシステムから前記プログラムのコピーを獲得する手段と、
前記プログラムの実行を開始する手段と
を含むことを特徴とするコンピュータシステム。
【請求項５５】
情報を受信するための前記手段は、
前記プログラムが前記コンピュータシステム上にローカルで格納されていない場合に、別のコンピュータシステムから前記プログラムのコピーを獲得する命令を前記プログラム実行サービスマネージャから受信するようにさらに適合されることを特徴とする請求項５４に記載のコンピュータシステム。
【請求項５６】
複数の仮想マシンを実施するための手段をさらに含むことを特徴とする請求項５４に記載のコンピュータシステム。
【請求項５７】
前記プログラムの実行を開始する前記手段は、前記仮想マシンのうちの複数の仮想マシン上で前記プログラムの複数のインスタンスの実行を開始するためにさらに適合されることを特徴とする請求項５６に記載のコンピュータシステム。
【請求項５８】
前記コンピュータシステムは、第１のグループの一部であり、
前記プログラムがローカルで格納されているかどうかを判定する前記手段は、前記プログラムが、前記第１のグループ内のいずれかのコンピュータシステム上にローカルで格納されているかどうかを判定するためにさらに適合されることを特徴とする請求項５４に記載のコンピュータシステム。
【請求項５９】
前記第１のグループの前記コンピュータシステムは、共通データ交換媒体を有することを特徴とする請求項５８に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プログラムコピーの効率的な獲得が実行されることを可能にするようにコンピュータシステムのグループの間でプログラムのコピーを実行することなどの、複数のコンピュータシステム上でのプログラムの実行を管理することに関する。
【背景技術】
【０００２】
単一の組織によって、さらに単一の組織に代行して運用される私設データセンタや、様々なビジネスモデルの下で顧客に、コンピュータリソースへのアクセスを提供する公衆データセンタなどの、相当な数の互いに接続されたコンピュータシステムを収容するデータセンタが、一般的になっている。例えば、一部の公衆データセンタ事業者は、様々な顧客によって所有されるハードウェアのためのネットワークアクセス施設、電力施設及びセキュアな設置施設を提供するのに対して、他の公衆データセンタ事業者は、顧客によって使用される実際のハードウェアリソースも含む「完全サービス」施設を提供する。しかし、従来のデータセンタの規模及び範囲が増大するにつれ、物理的コンピュータリソースを提供し、管理し、運営する作業は、ますます複雑になっている。
【０００３】
商品ハードウェアに関する仮想化技術の到来により、多様なニーズを有する多くの顧客のために大規模なコンピュータリソースを管理することの問題の部分的な解決がもたらされた。一般的に説明すると、仮想化技術は、様々なコンピュータリソースが、複数の顧客の間で効率的に、かつセキュアに共有されることを可能にする。例えば、ＶＭＷａｒｅ、ＸＥＮ、またはＵｓｅｒ−Ｍｏｄｅ  Ｌｉｎｕｘによって提供されるような仮想化技術は、単一の物理的な計算機（computing machine）のリソースが、複数のユーザの間で共有されることを可能にすることができる。より具体的には、各ユーザには、単一の物理的な計算機によってホストされる１つまたは複数の仮想マシンが提供されることが可能であり、それぞれのそのような仮想マシンは、別個の論理コンピュータシステムの役割をするソフトウェアシミュレーションである。各仮想マシンは、ユーザが、所与のハードウェアコンピュータリソースの単独の運用者及び管理者であるという体験をユーザに提供する一方で、様々な仮想マシンの間でアプリケーションアイソレーション及びアプリケーションセキュリティも提供する。さらに、実際には複数の別々の物理的コンピュータシステムにまたがる複数の仮想プロセッサを有する単一の仮想マシンなどの一部の仮想化技術は、１つまたは複数の物理的リソースにまたがる仮想リソースを提供することができる。
【０００４】
しかし、多様なユーザ群のために多数のアプリケーションまたはシステムを仮想的に、または物理的にホストするデータセンタのコンテキストにおいて生じる１つの問題には、ソフトウェアアプリケーションのコピーの格納、配布及び獲得を管理することが関わる。アプリケーションは、例えば、サイズが極めて大きく、データセンタ内のすべてのコンピュータシステム上に、ホストされるすべてのアプリケーションのローカルコピーを格納する十分なストレージリソースを有することが（不可能ではないにしても）高コストになる可能性がある。しかし、アプリケーションのコピーが、当該アプリケーションを実行すべきデータセンタ内のすべてのコンピュータシステムに頻繁に伝送される集中ストレージロケーションが、代替手段として、維持される場合、ネットワーク帯域幅リソースの点でやはり高コストである。そのような代替手段において、ネットワーク帯域幅は、アプリケーションコピー伝送のために独占され、実行されるアプリケーションが、アプリケーションの動作のために十分なネットワーク帯域幅を受け取ることを妨げる可能性がある。さらに、アプリケーションコピー伝送が達せられるのを待つ間などに、アプリケーション実行に関する相当な起動待ち時間が生じる可能性もある。そのような困難は、実行されるべき新たなアプリケーションの頻繁な導入、及び／またはアプリケーションの相次ぐバージョンの頻繁な展開などの様々な要因によってさらに深刻になる可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このため、上記問題に対処するため、アプリケーションのコピーを、当該アプリケーションを実行するコンピュータシステムに効率的に配布するとともに、他の様々な利点を提供するための技術を提供することが有益であろう。
【課題を解決するための手段】
【０００６】
複数のコンピュータシステム上でのプログラムの実行を管理する技術が説明される。一部の実施形態では、説明される技術は、サービスの複数のユーザ（例えば、顧客）のために複数のプログラムを実行するためのプログラム実行サービスのために実行される。一部の実施形態では、プログラム実行サービスは、様々な要因を使用して、プログラムのインスタンスを実行すべき適切なコンピュータシステムを選択することができる。その要因には、選択されたコンピュータシステムが、プログラムインスタンスの実行のために、実行されるべきプログラムのコピー、及び／または利用可能なコンピュータシステムリソースのコピーを獲得することができる、プログラムの以前に格納された１つまたは複数のコピーのロケーションなどの情報が含まれる。例えば、一部の実施形態では、プログラムのインスタンスを実行すべき適切なコンピュータシステムの選択は、そのプログラムのローカルコピーを既に格納しているコンピュータシステムを特定することに基づくことが或る程度可能である。別の例では、適切なコンピュータシステムの選択は、特定されたコンピュータシステムと共通のグループ内の他の１つまたは複数のコンピュータシステムなどの、そのようなローカルコピーをそれぞれ格納する他の１つまたは複数のコンピュータシステムに十分に近い（地理的及び／または論理的にかかわらず）コンピュータシステムを特定することに基づくことが或る程度可能である。
【０００７】
一部の実施形態では、プログラムを実行するのに利用可能な複数のコンピュータシステムには、計算機間でデータを伝送することができる１つまたは複数のネットワーク、または他のデータ交換媒体を介して互いに接続された複数の物理的な計算機を含めることが可能である。複数のコンピュータシステムは、例えば、或る物理的ロケーション（例えば、データセンタ）内に配置することが可能であり、また、複数のグループに分けることが可能であり、また、それらの複数のコンピュータシステムを全体として担う１つまたは複数のシステムマネージャモジュールによって管理することが可能であり、また、グループのコンピュータシステムを管理するために、グループの１つにそれぞれが関連付けられた複数のマシンマネージャモジュールによって管理することが可能である。計算機の少なくともいくつかはそれぞれ、複数のプログラムを同時に実行するのに十分なリソース（例えば、十分な書き込み可能メモリ、及び／または十分なストレージ、十分なＣＰＵサイクルもしくは他のＣＰＵ使用指標、十分なネットワーク帯域幅、十分なスワップスペースなどの１つまたは複数）を含むことが可能である。例えば、一部のそのような実施形態における計算機の少なくともいくつかは各々、別個のユーザのために１つまたは複数のプログラムをそれぞれが実行することができる複数の仮想マシンノードをホストすることができる。前述したとおり、少なくとも一部の実施形態では、プログラム実行サービスによって管理される複数のコンピュータシステムは、物理的近さもしくは論理的近さ、または共通データ交換媒体を有することを含む基準などに基づいて、複数の別個のグループに編成される（例えば、各コンピュータシステムが単一のグループに属する）ことが可能である。一例では、グループに関する共通データ交換媒体は、グループのコンピュータシステム間で高い帯域幅の通信を提供する単一のネットワークスイッチ及び／またはラックバックプレーンによって提供されることが可能である（例えば、ネットワークスイッチまたはラックバックプレーンに接続されたコンピュータシステムの一部または全てがグループのメンバである）。また、コンピュータシステムの各グループは、グループの共通データ交換媒体と比べて低い帯域幅を有する他のデータ交換媒体などの、他の１つまたは複数のデータ交換媒体（例えば、イーサネット（登録商標）ベースの配線、無線接続、または他のデータ接続）によって他のコンピュータシステム（例えば、他のグループのコンピュータシステム、またはプログラム実行サービスによって管理されていないリモートコンピュータシステム）に接続されることも可能である。さらに、少なくとも一部の実施形態では、コンピュータシステムの一部または全てがそれぞれ、プログラムの実行前またはプログラムの実行時などに、実行プログラムのローカルコピーを格納するのに使用可能なローカルプログラムリポジトリ（例えば、ハードディスク、または他のローカルストレージ機構）をそれぞれ有することが可能である。さらに、少なくとも一部の実施形態では、複数のコンピュータシステムの各グループは、そのグループの１つまたは複数のコンピュータシステムを使用して、そのグループの他のコンピュータシステムによって使用されるようにプログラムのローカルコピーを格納することができる。
【０００８】
例示される実施形態では、プログラム実行サービスは、プログラムの実行を管理するために１つまたは複数のコンピュータシステム上で実行されるソフトウェアファシリティを含むことができる。ソフトウェアファシリティは、１つまたは複数のコンピュータシステムの各グループのために、そのグループのコンピュータシステムによるプログラムの取得、格納及び実行を管理する１つまたは複数のマシンマネージャモジュールを含むことができる。例えば、別個の計算機それぞれに、その計算機の複数の仮想マシンの少なくとも１つの仮想マシン上で実行されている、計算機のためのマシンマネージャモジュールなどの、別個のマシンマネージャモジュールが提供されることが可能である。さらに、一部の実施形態では、ソフトウェアファシリティは、１つまたは複数のコンピュータシステム上で実行されている１つまたは複数のシステムマネージャモジュールを含むことが可能だが、当該システムマネージャモジュールは、プログラムを実行するのに使用される複数のコンピュータシステムのすべてのためにプログラムの取得、格納及び実行を管理する。システムマネージャモジュールは、後述するとおり、適宜、マシンマネージャモジュールと対話することができる。
【０００９】
少なくとも一部の実施形態では、１つまたは複数のコンピュータシステム上でのプログラムの１つまたは複数のインスタンスの実行は、それらのプログラムインスタンスの即時の実行を求める現在の実行要求に応答して開始可能である。あるいは、この実行開始は、スケジューリングされた、または現時点での将来のプログラムインスタンスの実行を予約した、以前に受信されたプログラム実行要求に基づいてもよい。プログラム実行要求は、様々なやり方で受信可能である。例えば、ユーザから直接に（例えば、対話型コンソールを介して、またはプログラム実行サービスによって提供される他のＧＵＩを介して）でも良いし、または他のプログラム、またはそのプログラム自体の１つまたは複数のインスタンスの実行を自動的に開始するユーザの実行中のプログラムから（例えば、Ｗｅｂサービスを使用するＡＰＩなどの、プログラム実行サービスによって提供されるＡＰＩ（Application Program Interface）を介して）でも良い。
【００１０】
プログラム実行要求は、プログラムの１つまたは複数のインスタンスの実行開始の際に使用されるべき様々な情報を含むことが可能であるが、このような情報には、例えば、将来の実行のために以前に登録された、またはそれ以外で供給されたプログラムの指示及び同時に実行されるべきプログラムのインスタンスの数（例えば、所望されるインスタンスの最小数及び最大数などとして、インスタンスの単一の所望される数として表現される）などがある。加えて、一部の実施形態では、プログラム実行要求は、他の様々なタイプの情報を含むことが可能である。例えば、当該情報には、ユーザアカウントの指示、または以前に登録されたユーザの他の指示（例えば、以前に格納されたプログラムを識別する際、さらに／または要求されたプログラムインスタンス実行が許可されているかどうかを判定する際に使用するための指示）、プログラムインスタンス実行の代金の支払いをプログラム実行サービスに提供する際に使用するための支払いソースの指示、プログラムインスタンス実行に関する以前の支払い許可、または他の許可の指示（例えば、或る時間にわたって、或る数のプログラム実行インスタンスに関して、或る量のリソース利用に関して有効であるなどの、以前に購入された契約）、及び／または即時に実行されるべき、さらに／または後の実行のために格納されるべきプログラムの実行可能なコピー、または他のコピーなどがある。さらに、一部の実施形態では、プログラム実行要求は、１つまたは複数のプログラムインスタンスの実行に関する様々な他のタイプのプリファレンス及び／または要件をさらに含むことが可能である。そのようなプリファレンス及び／または要件は、使用可能な複数の計算機を収容する複数のデータセンタの１つにおいて、互いに近い複数のコンピュータシステム上で、さらに／または他の１つまたは複数の指示されたプログラムインスタンス（例えば、同一のプログラムのインスタンス、または別のプログラムのインスタンス）を実行するコンピュータシステムに近い１つまたは複数のコンピュータシステム上でなど、プログラムインスタンスの一部または全てが、指示された地理的ロケーション及び／または論理的ロケーションにおいて実行されるべきであるという指示を含むことが可能である。そのようなプリファレンス及び／または要件は、プログラムインスタンスの一部または全ては、実行中に、指示されたリソースをそれぞれ割り当てられるべきであるという指示をさらに含むことが可能である。
【００１１】
指示された時点でプログラムの１つまたは複数のインスタンスを実行する要求を受信した後、プログラム実行サービスは、それらのプログラムインスタンスを実行する際に使用すべき１つまたは複数のコンピュータシステムを決定する。一部の実施形態では、使用されるべきコンピュータシステムの決定は、将来の実行のためである場合でも、要求の時点で実行される。他の実施形態では、１つまたは複数のプログラムインスタンスの将来の実行のために使用されるべきコンピュータシステムの決定は、その時に利用可能な情報に基づいて、将来の実行時などの、後の時点まで延期することが可能である。各プログラムインスタンスの実行のためにいずれのコンピュータシステムが使用されるべきかという決定は、プログラム要求の中で指定された、あるいはプログラム及び／または関連するユーザに関して、それ以外で指定された（例えば、以前の登録の時点で）任意のプリファレンス及び／または要件に基づくことを含め、様々な仕方で行うことが可能である。例えば、プログラムインスタンスの実行のための好ましいリソース、及び／または要求されるリソースに関する基準が決定された場合、プログラムインスタンスを実行すべき適切なコンピュータシステムの決定は、コンピュータシステムが、それらのリソース基準を満たすのに十分なリソースを利用できるかどうかに少なくとも基づくことが或る程度可能である。
【００１２】
一部の実施形態では、プログラム実行サービスは、実行されるべきプログラムを実行するのにいずれのコンピュータシステムが利用されるべきかという決定を、実行されるべきプログラムの以前に格納された１つまたは複数のコピーのロケーションに基づかせることができる。特に、前述したとおり、少なくとも一部の実施形態では、プログラムを実行するのに利用可能である様々なコンピュータシステムは、グループに編成されることが可能である（各コンピュータシステムが、複数のグループの１つに属するなどして）。したがって、或るコンピュータシステムが、或るプログラムのインスタンスを実行するのに適切であるかどうかの決定は、そのコンピュータシステムのグループの１つまたは複数のコンピュータシステムが、プログラムのローカルコピーを格納するかどうかに少なくとも基づくことが或る程度可能である。プログラムのインスタンスを実行するのに、そのプログラムのローカルで格納されたコピーを既に有するコンピュータシステム、またはローカルで格納された１つまたは複数のコピーを有するグループに属するコンピュータシステムを選択することにより、プログラムのコピーを獲得することに基づくプログラム実行起動待ち時間を短縮するなどの、様々な利益が獲得可能である。或るグループ内の或るコンピュータシステムが、実行されるべきプログラムのローカルコピーを格納すると、プログラム実行サービスは、例えば、ローカルで格納されたコピーを有するコンピュータシステムが、プログラムのインスタンスを実行するのに十分なリソースを現在有していない場合や、ローカルで格納されたコピーを有するコンピュータシステムが、プログラムの１つまたは複数のインスタンスを既に実行している場合などの、様々な理由で、プログラムのインスタンスを現在実行するのに、そのグループ内の他の１つまたは複数のコンピュータシステムを選択することが可能である。
【００１３】
さらなる実施形態において、プログラム実行サービスは、他の様々な要因で、プログラムのインスタンスを実行するのに１つまたは複数のコンピュータシステムを選択できる。例えば、ユーザが、指示されたプログラムの複数のインスタンスが同時に実行されるべきことを要求すると、プログラム実行サービスは、これらのプログラムインスタンスの実行を、異なるグループのメンバであるコンピュータシステムの間に分散させて、グループ固有のネットワーク停止、または他の問題に直面して、より高い信頼性をもたらすようにすることを選ぶことができる。同様に、一部の実施形態では、プログラムの複数のインスタンスが、単一のコンピュータシステム上ではなく、複数のコンピュータシステム上で実行されることが可能である（その単一のコンピュータシステムが、それらの複数のインスタンスを実行するのに十分なリソースを有する場合でさえ）。プログラムインスタンスのそのような分散により、例えば、プログラムインスタンスのすべてを代わりに実行する単一のコンピュータシステムの障害、またはその単一のコンピュータシステムに対する接続が失われたことに直面しても、より高い信頼性がもたらされることが可能である。さらに、プログラム実行サービスによって管理されるコンピュータシステムが、物理的に（例えば、地理的に）分離している場合、プログラム実行サービスは、単一のデータセンタ内に配置されたコンピュータシステム上でプログラムの複数のインスタンスを実行して、実行中のプログラムのインスタンス間の通信のために比較的高いネットワーク帯域幅を提供するようにするよう、ユーザによって命令されることが可能であり、または、それ以外で選ぶことが可能である。あるいは、プログラム実行サービスは、プログラムインスタンスが、相互通信をほとんど、または全く行わない場合、さらに／または様々なプログラムインスタンスが、地理的に分散している数名の別個のエンドユーザまたはいくつかの別個のアプリケーションをサポートする場合など、複数の別個のデータセンタにおいて複数のプログラムインスタンスを実行するよう命令されることが可能であり、またはそれ以外で選ぶことが可能である。
【００１４】
プログラム実行サービスは、プログラムのインスタンスを実行する際に使用すべき１つまたは複数のコンピュータシステムを決定した後、それらのプログラムインスタンスの実行を様々な仕方で開始することができる。例えば、システムマネージャモジュールが、選択されたコンピュータシステムに命令及び他の様々な実行情報を与えることができる。他のそのような情報には、例えば、プログラムのローカルコピーを格納する、または格納することが可能な他の１つまたは複数のコンピュータシステムの指示が含まれることが可能である。選択されたコンピュータシステムに与えられる他のタイプの情報には、どれだけの時間、プログラムインスタンスを実行するかに関する指示、プログラムインスタンスに割り当てられるべきリソースに関する指示、プログラムインスタンスに与えられるべきアクセス権の指示、プログラムインスタンスの実行をどのように管理すべきかに関する制限の指示（例えば、どのようなタイプの通信を、プログラムインスタンスが送信する、または受信するのが許されるべきか）が含まれることが可能である。
【００１５】
選択されたコンピュータシステムが、指示されたプログラムの１つまたは複数のインスタンスを実行するように通知された後、選択されたコンピュータシステムは、受信された命令または他の関連する情報（例えば、事前定義されたプリファレンスまたは要件）に従ってプログラムインスタンス実行を実行しようと試みる。このプログラム実行通知は、少なくとも一部の実施形態では、選択されたコンピュータシステムに関連するマシンマネージャモジュール（例えば、選択されたコンピュータシステム上で実行されるマシンマネージャモジュール、または選択されたコンピュータシステムが属するグループのために実行されるマシンマネージャモジュール）によって受信されることが可能である。そのような実施形態において、マシンマネージャモジュールは、プログラムインスタンスの実行を管理するように動作することが可能である。例えば、選択されたコンピュータシステムが、実行されるべき指示されたプログラムのローカルコピーを既に格納しているのではない状況において、マシンマネージャモジュールは、実行のため、ならびにオプションのローカルの格納のためにプログラムのコピーを入手する、またはそれ以外で獲得するように動作することが可能である。プログラムコピーの獲得には、例えば、通知の中で指示される、またはプログラムのコピーを要求もしくは取得するためにプログラムのローカルコピーを少なくとも格納している可能性があることが知られている１つまたは複数のコンピュータシステムまたは他のシステム（例えば、データストレージシステム）と連絡をとることが含まれることが可能である。プログラムコピーの獲得は、後述されるとおり、プログラムのコピーを、プログラムインスタンスを実行するよう受信される通知と一緒に受信することによることを含め、様々な実施形態において様々な仕方で実行可能である。後述されるとおり、プログラム実行サービスは、少なくとも一部の実施形態において、プログラムの実行を管理する様々な他のアクションを行うことができる。
【００１６】
別の態様では、他のプログラムが、プログラムインスタンスを実行する要求をプログラムで開始すること、ならびに、場合により、様々な他のタイプの管理動作、提供動作、及び運営動作をプログラムで実行することを可能にするＡＰＩが、提供されることが可能である。そのような動作には、ユーザアカウントの作成、実行リソースの予約、実行されるべき新たなプログラムの登録、グループ及びアクセスポリシーの管理、実行中のプログラムインスタンスの監視及び管理などが含まれるが、これらに限定されることはない。ＡＰＩによって提供される機能は、例えば、プログラム実行サービスのコンピュータシステム上で実行されるプログラムインスタンスによることを含め、ユーザのためにクライアントコンピュータシステム及びクライアントデバイスによって呼び出すことが可能である。
【００１７】
特定のタイプのコンピュータシステム上での特定のタイプのプログラムの実行が、特定の仕方で管理されるいくつかの実施形態が例示のため後段で説明される。これらの例は、例示のために提供され、かつ簡明さのために簡略化されている。本発明の技術は、いくつかが後段で説明される多種多様な他の状況においても使用可能であり、これらの技術は、仮想マシン、データセンタ、または他の特定のタイプのコンピュータシステムもしくはコンピュータシステム構成で使用されることに限定されない。
【発明を実施するための最良の形態】
【００１８】
図１は、複数のコンピュータシステムが、プログラム実行サービスの制御下などで、プログラムを交換し、実行する例示的な実施形態を示すネットワーク図である。特に、この例では、プログラム実行サービスが、データセンタ１００内に配置された様々なコンピュータシステム上のプログラムの実行を管理する。データセンタ１００は、複数のラック１０５を含み、各ラックは、複数のコンピュータシステム１１０ａ〜ｃを含むとともに、この例示的な実施形態では、ラックサポートコンピュータシステム１２２も含む。コンピュータシステム１１０ａ〜ｃはそれぞれ、１つまたは複数の仮想マシン１２０をホストするとともに、これらの仮想マシンを管理する別個のノードマネージャ１１５もホストする。各仮想マシン１２０は、プログラムのインスタンスを実行するための独立したコンピュータ環境を提供するように使用されることが可能である。ラックサポートコンピュータシステム１２２は、ラック、ならびに、場合により、データセンタ内に配置された他のコンピュータシステムにローカルの他のコンピュータシステムに、様々なユーティリティサービスを提供することができる。ユーティリティサービスには、例えば、他のコンピュータシステムのためのデータ格納及び／またはプログラム格納、他のコンピュータシステムをサポートする１つまたは複数のマシンマネージャモジュールの実行などが含まれることが可能である。各コンピュータシステム１１０は、代替として、別個のマシンマネージャモジュール（例えば、コンピュータシステムのノードマネージャの一部として提供される）を有することが可能であり、さらに／またはプログラムのローカルコピーを格納するローカルストレージ（図示せず）を有することが可能である。コンピュータシステム１１０ａ〜ｃ及びラックサポートコンピュータシステム１２２はすべて、共通データ交換媒体を共有し、すべて、単一のグループの一部であることが可能である。この共通データ交換媒体は、例えば、データセンタ１００内の他のラックまたはコンピュータシステムによって共有される１つまたは複数の外部データ交換媒体に接続されることが可能である。
【００１９】
さらに、例示的なデータセンタ１００は、ノードマネージャ１２５と共通データ交換媒体を共有するコンピュータシステム１３０ａ〜ｂ及び１３５をさらに含み、ノードマネージャ１２５は、コンピュータシステム１３０ａ〜ｂ及び１３５を管理する。また、コンピュータシステム１３５は、１名または複数名のユーザのためにプログラムインスタンスを実行する際に使用するための実行環境として、複数の仮想マシンをホストする一方で、コンピュータシステム１３０ａ〜ｂは、別個の仮想マシンをホストしない。オプションのコンピュータシステム１４５が、データセンタ１００と外部ネットワーク１７０の相互接続地点において存在する。オプションのコンピュータシステム１４５は、ネットワークプロキシの役割をする、着信するデータ伝送及び／または発信されるデータ伝送を管理するなどの、いくつかのサービスを提供することができる。さらに、データセンタ内に配置された他のコンピュータシステム上（または、オプションとして、他の１つまたは複数のデータセンタ１６０において配置されたコンピュータシステム上）のプログラムの実行を管理することを支援するオプションのシステムマネージャコンピュータシステム１４０も、図示される。オプションのシステムマネージャコンピュータシステム１４０は、システムマネージャモジュールを実行することができる。前述したとおり、システムマネージャモジュールは、プログラムの実行を管理することに加えて、ユーザアカウントの管理（例えば、作成、削除、料金請求など）、実行されるべきプログラムの登録、格納、及び配布、プログラムの実行と関係するパフォーマンスデータ及び監査データの収集及び処理、プログラムの実行の代金の支払いを顧客、または他のユーザから得ることなどを含む、様々なサービスを提供することができる。
【００２０】
データセンタ１００は、ネットワーク１７０（例えば、インターネット）を介して、データセンタ１００の運営者または第三者によって運用されることが可能なコンピュータシステム１８０及びデータセンタ１６０、並びにオプションのシステムマネージャ１５０を含む、他のいくつかのシステムに接続される。システムマネージャ１４０と同様の仕方で、システムマネージャ１５０は、様々な他のサービスを提供することに加えて、１つまたは複数のデータセンタ１００及び／または１６０において配置されたコンピュータシステム上のプログラムの実行を管理することができる。例示的なシステムマネージャ１５０は、いずれの特定のデータセンタに対しても外部にあるものとして示されるものの、他の実施形態では、システムマネージャ１５０は、データセンタ１６０の１つなどの、データセンタ内に配置されてもよい。
【００２１】
図２は、プログラム実行サービスなどのために、プログラムのコピーを格納し、交換するコンピュータシステムの２つのグループの例を示す。実際の実施形態では、グループ、コンピュータシステム、及びプログラムの数は、図２に示されるグループよりはるかに多くてもよいことが理解されよう。例えば、１つの例示的な実施形態として、１グループ当たり４０のコンピュータシステムが存在し、１つのデータセンタ当たり１００のグループが存在して、１つのデータセンタ当たり４０００のコンピュータシステムとなることが可能であり、各コンピュータシステムは、顧客のプログラムインスタンスを実行する１５の仮想マシンをホストすることが可能である。さらに、各グループが、２テラバイト（ＴＢ）のストレージを有する専用のコンピュータシステムを含む場合、１グループ当たり２０００の１ＧＢの仮想マシンイメージプログラムコピーが格納可能であり、その場合１つのデータセンタ当たり合計で２０万のコピーとなる。あるいは、１グループ当たり４０のコンピュータシステムのそれぞれが、１００ＧＢのローカルストレージを有する場合、１グループ当たり４０００の１ＧＢの仮想マシンイメージプログラムコピーが格納可能であり、その場合１つのデータセンタ当たり合計で４０万のコピーとなる。ホストされる各仮想マシンが、１つのプログラムを実行する場合、そのようなデータセンタは、同時に６０００ものプログラムインスタンスを実行することができる。他の実施形態では、他の数のグループ、他の数のコンピュータシステム、及び他の数のプログラムが使用されることが可能であること、ならびにはるかに小さいサイズ及び／または可変サイズのプログラムが、格納され、実行されることが可能であることを理解されたい。
【００２２】
図２は、２つのグループ、グループＡ２００及びグループＢ２５０を示す。グループＡは、ＭＡ１、ＭＡ２及びＭＡ３とそれぞれ名付けられた３つの計算機２１０ａ〜ｃを含む。グループＢ２５０は、ＭＢ１、ＭＢ２及びＭＢ３とそれぞれ名付けられた３つの計算機２６０ａ〜ｃを同様に含む。各グループは、異なるタイプの異なる数の計算機を有してもよく、一部の実施形態では、計算機は、複数のグループのメンバであることも、いずれのグループのメンバでもないことも可能である。別の箇所で詳述されるように、各グループの計算機は、そのグループ（図示せず）に関する共通のデータ交換媒体を共有する。
【００２３】
例示的な例において、図２の各計算機は、ローカルプログラムリポジトリ（例えば、ハードディスクまたは他のストレージデバイスによって提供される永続ストレージの一部としてのリポジトリ）の中に１つまたは複数のローカルプログラムコピーを格納できる。計算機ＭＡ１は、計算機ＭＡ１のプログラムリポジトリ２２０ａの中に格納されたプログラムＰ１、Ｐ２、Ｐ３、Ｐ５及びＰ９のローカルコピーを有し、ボックス２３０ａの中に示されるとおり、プログラムＰ１のインスタンスを現在、実行している。各計算機上のプログラムリポジトリの記憶容量は、最大で５つまでのプログラムコピーに限られ、各コンピュータシステムの実行リソースは、最大で同時に実行される２つまでのプログラムインスタンスに限られる。この例において用いられるプログラムリポジトリのサイズ、及び実行されるプログラムの数の限度は単なる例示であり、他の実施形態では、各コンピュータシステムは、別個のリソースをさらに有することが可能である。さらに、プログラムリポジトリのサイズは、多くの実施形態において、プログラムインスタンスを実行する際に使用するのに利用可能なメモリのサイズより、１桁または数桁大きい大きさであることが可能であるが、そうであることは、必ずしも当てはまるわけではない。他の実施形態では、同時に実行されるプログラムインスタンスの最大数は、プログラムリポジトリの中にローカルで格納可能なプログラムコピーの数より多くてもよいし、少なくてもよいし、またはそのような数と同一であってもよい。したがって、少なくとも一部の計算機または他のシステムは、ローカルプログラムリポジトリと、プログラムインスタンスを実行する利用可能なリソースのいずれかだけを提供してもよい。最後に、別の箇所で詳述するとおり、一部の実施形態では、プログラムのうち少なくともいくつかのプログラムのローカルで格納されたコピーは、プログラムリポジトリが容量に達した後、他のプログラムコピーのためのスペースをあけるなどのために、いくつかの状況下で、ストレージから強制退去させられてもよいし、または除外されてもよい。一部の実施形態は、プログラムのうち少なくともいくつかのプログラムの実行中のインスタンスは、プログラム実行リソースが容量に達した後、他の実行されるプログラムインスタンスのためのスペースをあけるなどのために、いくつかの状況下で、実行を終了してもよいし、または実行から除外されてもよい。
【００２４】
複数の例示的なシナリオが、プログラム実行サービスの一実施形態のいくつかのタイプの動作の例を与えるように例示的な目的で本明細書において提示される。プログラム実行サービスは、指定され、事前定義され、さらに／または学習された１つまたは複数のポリシーを使用して、計算機上の実行されるプログラムインスタンスの配置に影響を与えることができ、以下のとおり、簡略化されたポリシーセットが、この例において使用される。第１に、プログラムの複数のインスタンスは、可能な場合、複数のグループの計算機上で実行される。第２に、プログラムの複数のインスタンスは、可能な場合、複数の計算機上で実行される。第３に、プログラムのインスタンスは、可能な場合、プログラムリポジトリの中にそのプログラムのコピーを既に格納している計算機上で実行される。第４に、プログラムのインスタンスは、可能な場合、プログラムリポジトリの中にそのプログラムのローカルコピーを格納している少なくとも１つの計算機を有するグループのメンバである計算機上で実行される。最後に、プログラムのインスタンスは、可能な場合、最も多くの利用可能な実行リソースを有する計算機上で実行される。
【００２５】
これら６つのコンピュータシステムに関するプログラム実行を管理する例示的な例から、プログラム実行サービスのクライアントが、プログラムＰ７の２つのインスタンスの実行を要求したものと想定されたい。この場合、前述したポリシーを所与として、プログラム実行サービスの例示的な実施形態は、グループＡの中でＰ７の１つのインスタンスを実行し、グループＢの中でＰ７の１つのインスタンスを実行することを選択する可能性が高い。なぜなら、そのような配置が、複数のグループにわたってコピーを分散させる傾向にあるためである。グループＡの計算機間では、このグループの計算機のいずれも、このプログラムのローカルコピーを格納しないので、プログラム実行サービスは、計算機ＭＡ３が、２つのプログラム（Ｐ８及びＰ９）を既に実行しているので、計算機ＭＡ３上でＰ７のコピーを実行することを選択しない可能性が高い。計算機ＭＡ１と計算機ＭＡ２の間では、ＭＡ２が現在プログラムを全く実行していないため、ＭＡ２が実行のために選択される。一実施形態において、計算機ＭＡ２は、実行のため、ならびに、オプションとして、リポジトリ２２０ｂの中にローカルで格納するために、グループＡの外部の１つまたは複数のコンピュータシステムからプログラムＰ７のコピーを獲得する。例えば、計算機ＭＡ２は、プログラム実行サービスの計算機のすべてに関するリモートプログラムリポジトリ、及び／またはプログラム実行サービスに外部のロケーションから、プログラムＰ７のコピーを獲得することが可能である。グループＢの計算機に関して、プログラム実行サービスは、Ｐ７プログラムインスタンスを実行するのに３つの計算機のいずれを選択することも可能である。なぜなら、これらのコンピュータシステムのいずれも、このプログラムのローカルコピーを格納しておらず、これらの計算機のそれぞれが、１つのプログラムを実行しているからである。しかし、プログラム実行サービスは、計算機ＭＢ３が、現在、計算機ＭＢ３のプログラムリポジトリの中に１つのプログラムコピーしか格納していないため、計算機ＭＢ３を選択することができる。したがって、計算機ＭＢ３は、計算機ＭＢ３のプログラムリポジトリから格納されたプログラムコピーを強制退去させる必要なしに、所望される場合、プログラムＰ７のローカルコピーを格納することができる。
【００２６】
次に、やはり、図２に示される初期条件から始めて、プログラム実行サービスのクライアントが、プログラムＰ６の２つのインスタンスの実行を要求したものと想定されたい。この場合、前述したポリシーを所与として、プログラム実行サービスの例示的な実施形態は、グループＡの中でＰ６の１つのインスタンスを実行し、グループＢの中のＰ６の１つのインスタンスを実行することを選択する可能性が高い。なぜなら、そのような配置が、複数のグループにわたってインスタンスを分散させるからである。グループＡの計算機の間では、計算機ＭＡ２がやはり選択される可能性が、これらのコンピュータシステムのいずれも、プログラムＰ６のローカルコピーを格納しておらず、計算機ＭＡ２が、ビジーである度合いが最も低いため、高い。グループＢの同等にビジーである計算機の間では、グループ内の複数の計算機にわたって単一のプログラムのコピーを分散させることを選好するポリシーのため、ＭＢ２だけが、そのプログラムのローカルコピーを格納しているという事実にもかかわらず、計算機ＭＢ２は選択されないことがある。しかし、信頼性より効率を重んじることを反映する異なるポリシーを有する他の実施形態は、Ｐ６のコピーがＭＢ２のプログラムリポジトリの中に既に格納されているために、計算機ＭＢ２上でＰ６を実行することを実際に選択することが可能であることに留意されたい。残りの候補の計算機ＭＢ３とＭＢ１の間では、プログラム実行サービスは、ＭＢ３のプログラムリポジトリからプログラムのコピーを可能性として強制退去させる必要が全くないため、計算機ＭＢ３を選好することが可能である。したがって、ＭＢ３が、この実施形態では、実行のため、ならびにローカルリポジトリ２７０ｃの中に場合により格納するため、ＭＢ２からプログラムＰ６のコピーを獲得する。
【００２７】
次に、やはり、図２に示される初期条件から始めて、プログラム実行サービスのクライアントが、プログラムＰ４の１つのインスタンスの実行を要求したものと想定されたい。この場合、前述したポリシーを所与として、プログラム実行サービスの例示的な実施形態は、計算機ＭＢ１上でＰ４を実行することを選択する可能性が高い。特に、既に実行されているＰ４のインスタンスは、全く存在せず、１つのインスタンスだけしか、実行されるように要求されなかったので、複数のグループの間でプログラムインスタンスを分散させることを選好するポリシー、及びプログラムの複数の実行されるインスタンスを単一の計算機上に配置することを回避することを選好するポリシーは、適用されない。したがって、ＭＢ１は、プログラムＰ４のローカルコピーをＭＢ１のプログラムリポジトリの中に既に格納しているので、ＭＢ１が、Ｐ４を実行するように選択される可能性が高い。
【００２８】
次に、やはり、図２に示される初期条件から始めて、プログラム実行サービスのクライアントがプログラムＰ１０の１つのインスタンスの実行を要求したものと想定されたい。この場合、前述したポリシーを所与として、プログラム実行サービスの例示的な実施形態は、ＭＡ２上でＰ１０を実行することを選択する可能性が高い。前述の例の場合と同様に、複数のグループの間で実行のためのプログラムのインスタンスを分散させることを選好するポリシー、及びプログラムの複数のインスタンスを単一の計算機上に配置することを回避するポリシーは、適用されない。計算機ＭＡ３は、計算機ＭＡ３のリポジトリの中にＰ１０のコピーを既に格納しているため、魅力的な候補であるが、２つの実行されるプログラム（Ｐ８及びＰ９）という計算機ＭＡ３の限度に既に達しているため、Ｐ１０を現在、実行する容量を有さない。このことにより、計算機ＭＡ１及びＭＡ２が、リポジトリの中にプログラムＰ１０の格納されたローカルコピーを有する計算機（ＭＡ３）と同一のグループに入っているため、グループＢ内のいずれの計算機よりも好ましいものとして残される。ＭＡ１とＭＡ２の間では、ＭＡ２が、ビジーである度合いが最も低いため、選択される可能性が高く、ＭＡ２は、ＭＡ３からプログラムＰ１０のコピーを獲得する。
【００２９】
次に、やはり、図２に示される初期条件から始めて、プログラム実行サービスの例示的な実施形態のクライアントが、プログラムＰ３のさらなる６つのインスタンスの実行を要求したものと想定されたい。この場合、前述したポリシーを所与として、プログラム実行サービスは、計算機ＭＡ２上で２つのインスタンスを、計算機ＭＡ１、ＭＢ１、ＭＢ２及びＭＢ３の各マシン上で１つのインスタンスを実行する可能性が高い。計算機ＭＡ３は、２つの実行されるプログラム（Ｐ８及びＰ９）という計算機ＭＡ３の限度に既に達しているため、インスタンスは、この計算機上で全く実行されない可能性が高い。この場合、一部の実施形態は、プログラムＰ３のローカルコピーを格納するために、余分の容量を有さないプログラムリポジトリを有する計算機から、プログラムの格納されたローカルコピーを強制退去させることが可能であることに留意されたい。例えば、実行されるべきプログラムのコピーを、実行に先立ってローカルプログラムリポジトリの中に常に格納することを選択する実施形態において、計算機ＭＡ１及びＭＢ１が、それぞれのプログラムリポジトリから１つのローカルプログラムコピーを強制退去させることが可能である。この場合、実行されるプログラムの複数のインスタンスを複数の計算機にわたって分散させることを選好するポリシーに反して、計算機ＭＡ２及びＭＢ３がそれぞれ、Ｐ３の２つのインスタンスを実行することになることにも留意されたい。しかし、この所与の例においてＰ３プログラムインスタンスを実行するためのさらなる計算機は存在しないため、プログラム実行サービスは、その要求が満たされるとすれば、Ｐ３の複数のインスタンスを単一の計算機上で実行することを選択することになる。代替として、一部の実施形態では、プログラム実行サービスは、異なるウェイトをポリシーに適用して、プログラム実行サービスが、計算機ＭＡ１、ＭＡ２、ＭＢ１及びＭＢ３の各マシン上で単一のインスタンスを実行するなど、要求された数未満のインスタンスを実行することを代わりに選択することが可能である。同様に、一部の実施形態では、プログラムＰ３の６つを超えるさらなるインスタンスが、要求され、プログラム及び／または要求側が、十分に高い優先度である場合、プログラム実行サービスは、別のプログラムインスタンス（例えば、ＭＡ３上のプログラムＰ８及び／またはＰ９のインスタンス）の実行を終了させること、及び／または現在、実行されているプログラムインスタンスの１つが自然に終了した後、Ｐ３のために次に利用可能なプログラムインスタンス実行を予約することになどにより、Ｐ３のさらなるインスタンスを実行することを代わりに選択してもよい。
【００３０】
現在の例を引き続き参照すると、計算機ＭＢ１は、グループＢからのＭＢ２とＭＢ３がともに、プログラムのローカルコピーを格納し、グループＡの計算機ＭＡ１及びＭＡ２も同様であるので、実行のためにプログラムＰ３のコピーを獲得する複数の利用可能なリソースを有する。この実施形態では、ＭＢ１は、ＭＢ１自らのグループのＭＢ２とＭＢ３がともに、プログラムＰ３の一部分（例えば、Ｘが、プログラム実行サービスによって選択される数である、最初のＸバイト及び第２のＸバイト）を提供することを要求する。次に、計算機ＭＢ１は、応答が、それらの計算機からどれだけ迅速に受信されるかを監視し、プログラムの残りの部分の少なくとも大半（さらに、場合により、すべて）を供給するよう、より応答性に優れた計算機に要求する。他の実施形態では、計算機ＭＢ１のためのプログラムＰ３のコピーの獲得は、計算機ＭＢ２とＭＢ３のいずれかだけからプログラムコピーを要求すること、グループＡ内の計算機ＭＡ１及び／またはＭＡ２（グループＢのＭＢ２及びＭＢ３に加えてであれ、ＭＢ２及びＭＢ３の代わりにであれ）からプログラムコピーの少なくともいくつかの部分を要求することなどによって、他の仕方で実行されてもよい。
【００３１】
図３は、プログラム実行サービスシステムの或る実施形態を実行することなどによって、管理されている複数のコンピュータシステム上のプログラムの実行を管理するのに適した例示的なコンピュータシステムを示すブロック図である。この例において、コンピュータシステム３００は、システムマネージャモジュールの或る実施形態を実行して、管理されている複数のコンピュータシステム上のプログラムの実行を調整する。一部の実施形態では、コンピュータシステム３００は、図１のシステムマネージャ１４０または１５０に対応することが可能である。さらに、１つまたは複数のマシンマネージャコンピュータシステム３７０がそれぞれマシンマネージャモジュール３８２を実行して、関連する１つまたは複数のコンピュータシステムによるプログラムの獲得及び実行を円滑にする。一部の実施形態では、この１つまたは複数のマシンマネージャモジュール３８２のそれぞれは、図１のノードマネージャ１１５または１２５のいずれかに対応することが可能である。この例では、複数のマシンマネージャコンピュータシステム３７０が提供され、各システム３７０が、システムマネージャモジュールによって管理されているプログラム実行サービスの複数のコンピュータシステムの１つとして動作する。図示される例では、コンピュータシステム３７０の各システム上で、別個のマシンマネージャモジュール３８２が実行される。他の実施形態では、マシンマネージャコンピュータシステム３７０の各システム上のマシンマネージャモジュール３８２は、他の１つまたは複数のコンピュータシステム（例えば、他のコンピュータシステム３８８）を代わりに管理することが可能である。
【００３２】
この例示的な実施形態では、コンピュータシステム３００には、「ＣＰＵ」（中央処理装置）３３５と、ストレージ３４０と、メモリ３４５と、様々な「Ｉ／Ｏ」（入出力）デバイス３０５とを含み、図示されるＩ／Ｏデバイスには、ディスプレイ３１０、ネットワーク接続３１５、コンピュータ可読媒体ドライブ３２０、及び他のＩ／Ｏデバイス３３０が含まれる。図示されていない他のＩ／Ｏデバイスには、キーボード、マウスもしくは他のポインティングデバイス、マイクロホン、スピーカなどが含まれてもよい。図示される実施形態では、システムマネージャモジュール３５０が、他のコンピュータシステム上のプログラムの実行を管理するためにメモリ３４５の中で実行されており、他の１つまたは複数のプログラム３５５が、オプションとして、メモリ３４５の中で実行されてもよい。コンピュータシステム３００とコンピュータシステム３７０は、互いに接続されるとともに、ネットワーク３８６を介して他のコンピュータシステム３８８にも接続される。
【００３３】
各コンピュータシステム３７０は、ＣＰＵ３７４と、様々なＩ／Ｏデバイス３７２と、ストレージ３７６と、メモリ３８０とを同様に含む。図示される実施形態では、マシンマネージャモジュール３８２が、プログラム実行サービスの顧客のためなど、プログラム実行サービスのためにコンピュータシステム上の他の１つまたは複数のプログラム３８４の実行を管理するために、メモリ３８０の中で実行されている。一部の実施形態では、コンピュータシステム３７０の一部または全ては、複数の仮想マシンをホストすることが可能である。そうである場合、実行されるプログラム３８４のそれぞれは、ホストされる別個の仮想マシン上で実行される仮想マシンイメージ全体（例えば、オペレーティングシステム、及び１つまたは複数のアプリケーションプログラムを有する）であってもよい。マシンマネージャモジュール３８２は、その他のホストされる仮想マシンを監視することができる特権的仮想マシンなどの、別のホストされる仮想マシン上で同様に実行されることが可能である。他の実施形態では、実行されるプログラムインスタンス３８４及びマシンマネージャモジュール３８２は、コンピュータシステム３７０上で実行される単一のオペレーティングシステム（図示せず）上で別々のプロセスとして実行可能である。このため、この例示的な実施形態では、プログラム実行サービスの能力は、ネットワーク３８６を介して通信して、管理されているコンピュータシステム上のプログラムの分散、獲得及び実行を共同で管理するシステムマネージャ３５０とマシンマネージャモジュール３８２との対話（interaction）によって提供される。
【００３４】
コンピュータシステム３００及び３７０などのコンピュータシステムは、単に例示的であり、本発明の範囲を限定することは意図していないことが理解されよう。コンピュータシステム３００及び３７０は、ネットワークアクセス可能なデータベースシステムまたは他のデータストレージデバイスを含む、図示されていない他のデバイスに接続可能である。より一般的に、計算機またはコンピュータシステムまたはデータストレージシステムは、限定なしに、デスクトップコンピュータもしくはラップトップコンピュータ、データベースサーバ、ネットワークストレージデバイス及び他のネットワークデバイス、ＰＤＡ、セル電話機、無線電話機、ページャ、電子オーガナイザ、インターネット機器、テレビベースのシステム（例えば、セットトップボックス及び／またはパーソナル／デジタルビデオレコーダを使用する）、ならびに適切な相互通信能力を含む他の様々な消費者製品を含む、対話し、説明されたタイプの機能を実行することができるハードウェアまたはソフトウェアの任意の組合せを含んでもよい。さらに、例示されるシステムモジュールによって提供される機能は、一部の実施形態では、より少ないモジュールに組み合わされても、さらなるモジュールに分散されてもよい。同様に、一部の実施形態では、例示されるモジュールのうちいくつかのモジュールの機能は、提供されなくてもよく、さらに／または他のさらなる機能が、利用可能であってもよい。
【００３５】
また、様々なアイテムが、使用されている間、メモリ内、またはストレージ上に格納されているものとして例示されるが、これらのアイテム、及びこれらのアイテムの部分は、メモリ管理及びデータ完全性の目的で、メモリと他のストレージデバイスとの間で転送されることが可能であることも理解されよう。代替として、他の実施形態では、ソフトウェア構成要素及び／またはソフトウェアモジュールのいくつか、またはすべては、別のデバイス上のメモリの中で実行されて、コンピュータ間通信を介して、例示されるコンピュータシステムと通信してもよい。システムモジュールまたはデータ構造のいくつか、またはすべては、ハードディスク、メモリ、ネットワーク、適切なドライブによって、または適切な接続を介して読み取られるべきポータブルメディア製品などのコンピュータ可読媒体上に格納されることも可能である（例えば、ソフトウェア命令、または構造化されたデータとして）。また、システムモジュール及びデータ構造は、無線ベースの媒体及び有線／ケーブルベースの媒体を含め、様々なコンピュータ可読伝送媒体上で、生成されたデータ信号として（例えば、搬送波、または他のアナログもしくはデジタルの伝搬される信号の一部として）伝送されることも可能であり、様々な形態（例えば、単一のアナログ信号、もしくは多重化されたアナログ信号の一部として、または複数の離散的なデジタルパケットもしくはデジタルフレームとして）をとることが可能である。また、そのようなコンピュータプログラム製品は、他の実施形態の他の形態をとることも可能である。したがって、本発明は、他のコンピュータシステム構成で実施されてもよい。
【００３６】
図４Ａ〜図４Ｂは、システムマネージャモジュールルーチン４００の一実施形態の流れ図を示す。このルーチンは、例えば、プログラム実行サービスのために複数のコンピュータシステム上の複数のプログラムの実行を管理するようになど、図１のシステムマネージャモジュール１４０及び／または図３のシステムマネージャモジュール３５０の実行によって提供されることが可能である。
【００３７】
このルーチンは、ステップ４０５で始まり、ステータスメッセージ、または１つまたは複数のプログラムの実行と関係する要求を受信する。ルーチンは、次に、ステップ４１０に進み、受信したメッセージまたは要求のタイプを特定する。指示された１つまたは複数のプログラムの１つまたは複数のインスタンスを実行する要求が受信されたと判定された場合、ルーチンは、ステップ４１５に進む。ステップ４１５で、ルーチンは、指示されたプログラムを実行すべきコンピュータシステムの１つまたは複数のグループを識別する。ステップ４２０で、ルーチンは、指示されたプログラムのインスタンスを実行すべき識別された１つまたは複数のグループの各グループ内の１つまたは複数のコンピュータシステムを選択する。この１つまたは複数のグループの選択は、グループが、そのプログラムの１つまたは複数のローカルコピーを格納する１つまたは複数のコンピュータシステムを有するかどうか、適切なコンピュータリソースの利用可能性、及びそれらのグループのコンピュータシステムのロケーションなどの、様々な要因に基づくことが可能である。識別されたグループ内の１つまたは複数のコンピュータシステムの選択は、同様に、そのグループのコンピュータシステムの間におけるプログラムの格納されたローカルコピーのロケーション、及びコンピュータリソース利用可能性などの、様々な要因に基づいてもよい。前述したとおり、ユーザ、または他の要求者によって指定された基準を含め、様々な指定されたポリシー及び他の基準が、様々な実施形態におけるグループ及びコンピュータシステムの選択の一環として使用可能である。さらに、他の実施形態において、グループ及び特定のコンピュータシステムは、グループにかかわらず（例えば、グループが全く使用されない場合）、１つまたは複数の最も適切なコンピュータシステムを単に選択するようになど、個々に選択されないことが可能である。
【００３８】
次に、ステップ４２５で、ルーチンは、実行されるべきプログラムの指示を、それらのプログラムインスタンスを実行する命令を含むメッセージを送信することなどによって、選択されたコンピュータシステム、及び／またはそれらのコンピュータシステムに関連するマシンマネージャモジュールに与える。例示される実施形態では、個別のマシンマネージャモジュールが、コンピュータシステムの各システム上で実行され、当該メッセージを受信する。前述したとおり、実行されるべきプログラムのコピーが獲得されるべき１つまたは複数のコンピュータシステムをどのように識別するかの指示を含め、様々なタイプの情報が、マシンマネージャモジュールに与えられることが可能である。代替として、一部の実施形態では、システムマネージャは、指示されたプログラムのコピーをコンピュータシステムに直接に供給し、さらに／またはマシンマネージャモジュールまたは他のさらなるモジュールの介入なしに、コンピュータシステム上でプログラムの実行を開始することが可能である。
【００３９】
ステップ４１０で、代わりに、ユーザからなど、新たなプログラムを登録する要求が受信されたと判定された場合、ルーチンは、ステップ４４０に進み、そのプログラムの指示、ならびにそのプログラムを登録したユーザの身元などの任意の関連する管理情報を格納する。次に、ステップ４４５で、ルーチンは、オプションとして、１つまたは複数のコンピュータシステムの指示されたプログラムのコピーの配信を開始する。例えば、一部の実施形態では、システムマネージャは、後のプログラム実行開始の効率を高めるために、指示されたプログラムの格納されたコピーを有する１つまたは複数のデータセンタ内の１つまたは複数のコンピュータシステム、及び／または１つまたは複数のリポジトリの中に入れる（seed）ことを選択することができる。
【００４０】
ステップ４１０で、代わりに、管理されるコンピュータシステムの１つまたは複数のシステムの動作を反映するステータスメッセージが受信されたと判定された場合、ルーチンは、ステップ４５０に進み、その１つまたは複数のコンピュータシステムに関するステータス情報を更新する。例えば、マシンマネージャモジュールは、関連するコンピュータシステムが、実行されているプログラムインスタンス、及び／または格納されているローカルプログラムコピーを変更したと判定することができ、それに応じて、ステータスメッセージをシステムマネージャに与えることができる。一部の実施形態では、ステータスメッセージは、プログラムを実行すべき適切なコンピュータシステムの選択の際に使用するために、管理されるコンピュータシステムの動作上のステータスについてシステムマネージャに常に知らせておくために、マシンマネージャモジュールによって定期的に送信される。他の実施形態では、ステータスメッセージは、他の時点で（例えば、関係のある変化が生じた場合にはいつでも）送信可能である。他の実施形態では、システムマネージャモジュールは、代わりに、所望に応じて、マシンマネージャモジュールから情報を要求することができる。ステータスメッセージは、或る特定のコンピュータシステム上で現在、実行されているプログラムの数及びＩＤ、或る特定のコンピュータシステム上のローカルプログラムリポジトリの中に現在、格納されているプログラムのコピーの数及びＩＤ、或るコンピュータシステムに関するパフォーマンス関連の情報、及びリソース関連の情報（例えば、ＣＰＵ、ネットワーク、ディスク、メモリなどの利用率）、或るコンピュータシステムに関する構成情報、及び或る特定のコンピュータシステム上のハードウェアまたはソフトウェアと関係する誤りまたは障害のレポートなどの、様々なタイプの情報を含むことが可能である。
【００４１】
ステップ４１０で、代わりに、他の何らかのタイプの要求が受信されたと判定された場合、ルーチンは、ステップ４５５に進み、適宜、他の指示された動作を実行する。そのような動作には、例えば、システム内の他の構成要素からのステータスクエリに応答すること、現在、実行されている１つまたは複数のプログラムの実行を一時停止する、または終了すること、現在、実行されているプログラムを１つのコンピュータシステムから別のコンピュータシステムに移すこと、システムマネージャをシャットダウンすること、または再起動することなどが含まれることが可能である。
【００４２】
ステップ４２５、４４５、４５０及び４５５の後、ルーチンは、ステップ４３０に進み、ユーザに関する料金請求情報を計算すること、表示情報を更新すること、ノードマネージャまたは他の構成要素に定期的クエリを送信すること、ログまたは他の情報を交替させることなどの任意のハウスキーピングタスクをオプションとして実行する。次に、ルーチンは、ステップ４９５に進み、続けるかどうかを判定する。続ける場合、ルーチンは、ステップ４０５に戻り、続けない場合、ステップ４９９に進み、リターンする。
【００４３】
図５は、マシンマネージャモジュールルーチン５００の流れ図を示す。ルーチンは、管理されている関連する１つまたは複数のコンピュータシステムのためのプログラムコピーの獲得、及びプログラムインスタンスの実行を円滑にするためなどに、例えば、図３のマシンマネージャモジュール３８２、及び／または図１のノードマネージャ１１５または１２５の実行によって提供されることが可能である。例示される実施形態では、各マシンマネージャモジュールルーチンは、１つまたは複数のプログラムインスタンスを実行するとともに、１つまたは複数のローカルプログラムコピーを格納するようにも構成された単一のコンピュータシステムのために実行され、マシンマネージャモジュールは、図４Ａ〜図４Ｂに関連して説明されるシステムマネージャモジュールルーチンと協調して動作して、プログラム実行サービスのために、管理されるコンピュータシステムに関するプログラムの実行を管理する。
【００４４】
ルーチンは、ステップ５０５で始まり、システムマネージャモジュールなどから、１つまたは複数のプログラムの実行と関係する要求を受信する。ルーチンは、ステップ５１０に進み、指示されるプログラムを実行する、または格納する要求が受信されたかどうかを判定する。受信された場合、ルーチンは、ステップ５１５に進み、指示されたプログラムが、管理されているコンピュータシステムのローカルプログラムリポジトリの中に現在、格納されているかどうかを判定する。格納されていない場合、ルーチンは、ステップ５４０に進み、ローカルプログラムリポジトリが、指示されたプログラムを格納する十分な容量を有するかどうかを判定する。十分な容量を有さない場合、ルーチンは、ステップ５４５に進み、ステップ５０５で受信された要求の中で示されるとおり、またはそれ以外でマシンマネージャモジュールによって使用される強制退去ポリシーに基づいて、ローカルプログラムリポジトリから１つまたは複数のプログラムを強制退去させる。ステップ５４５の後、またはステップ５４０で、代わりに、ローカルプログラムリポジトリが、指示されるプログラムのローカルコピーを格納する十分な容量を有すると判定された場合、ルーチンは、ステップ５５０に進み、他の特定された１つまたは複数のコンピュータシステムから、指示されたプログラムのコピーを獲得する。ルーチンは、ステップ５０５で受信された要求の一部として受信された情報に基づくことを含め、様々な仕方でプログラムの格納されたローカルコピーを有する他のコンピュータシステムを特定することができる。さらに、近隣コンピュータシステムへのブロードキャスト、中央ディレクトリに対する要求、及び／またはピアツーピアデータ交換などの他の１つまたは複数の技術を使用することも可能である。他の実施形態では、プログラムのコピーは、ステップ５０５で、代わりに、要求と一緒に提供可能である。次に、ルーチンは、ステップ５５５に進み、指示されたプログラムの獲得されたコピーをローカルプログラムリポジトリの中に格納する。ステップ５５５の後、またはステップ５１５で、指示されたプログラムが、リポジトリの中に既に入っていたと判定された場合、ルーチンは、ステップ５２０に進み、実行されるべきプログラムの指示が受信されたかどうかを判定する。受信された場合、ルーチンは、ステップ５２５に進み、指示されたプログラムの実行を開始する。
【００４５】
ステップ５１０で、代わりに、プログラムを格納する、または実行する要求が、受信されなかったと判定された場合、ルーチンは、ステップ５３５に進み、適宜、他の指示された動作を実行する。例えば、他の動作には、受信された要求に応答して、さらに／または、プログラムが不規則に、またはリソースを過度に利用して動作していたことなどの、プログラムのパフォーマンスに関して収集された情報に基づいてなど、１つまたは複数のプログラムの実行を一時停止する、または終了することが含まれてもよい。さらに、他の動作には、現在、実行されているプログラムに関するステータス情報、またはローカルプログラムリポジトリの内容などを求める要求に応答することが含まれてもよい。
【００４６】
ステップ５３５、ステップ５２５の後、またはステップ５２０で、代わりに、実行されるべきプログラムの指示が受信されなかった場合、ルーチンは、ステップ５３０に進み、１つまたは複数のシステムマネージャモジュールにステータス情報メッセージを送信する。例示される実施形態では、ルーチンは、ノードマネージャによって管理されるコンピュータシステムの状態をシステムマネージャに常に知らせておくために、動作が行われると毎回、システムマネージャモジュールにステータス情報メッセージを送信する。他の実施形態では、ステータス情報は、他の時点で、他の仕方で送信可能である。ステップ５３０の後、ルーチンは、ステップ５９５に進み、続けるかどうかを判定する。続ける場合、ルーチンは、ステップ５０５に戻り、一方、続けない場合ステップ５９９に進み、リターンする。本明細書で示されていないが、ルーチンは、必要に応じて、様々な時点で様々なハウスキーピング動作を実行することもできる。
【００４７】
図６は、プログラム実行サービスクライアントルーチンの実施形態の流れ図を示す。ルーチンは、例えば、人間のユーザがプログラム実行サービスと対話することを可能にする対話型コンソールを提供するなどの、図１に示されるコンピュータシステム１８０の１つのシステム１８０上に常駐するアプリケーションによって提供されることが可能である。ルーチンは、代替として、プログラム実行サービスによって、ユーザにインタラクティブに、さらに／またはユーザのプログラムにプログラムで提供される能力を反映してもよい。代替として、このルーチンは、管理されるコンピュータシステムの１つのシステム上のプログラム実行サービスによって実行されているプログラムの１つの一部であって、そのようなプログラムが、負荷平衡化、増加または低減したデマンドを満たすなどの目的で、さらなるプログラムインスタンスを動的に実行できるようにすることなどが可能である。
【００４８】
ルーチンは、ステップ６０５で始まり、１つまたは複数のプログラムの実行と関係する要求を受信する。ステップ６１０で、ルーチンは、受信したメッセージのタイプを特定する。この要求が、新たなプログラム（または以前に登録されたプログラムの新たなバージョン）の登録と関係する場合、ルーチンは、ステップ６２５に進み、プログラム実行サービス（例えば、システムマネージャモジュール）に登録されるべき新たなプログラムの指示を送信する。この指示は、プログラムのコピー、またはプログラムをどのように獲得すべきかの命令を含むことが可能である。要求が、ステップ６１０で、代わりに、プログラムの実行と関係すると判定された場合、ルーチンは、ステップ６１５に進み、実行されるべきプログラムの１つまたは複数のインスタンスを実行する要求をプログラム実行サービスに（例えば、システムマネージャモジュールに）送信する。例えば、ルーチンは、プログラム実行サービスから以前に受信した指示を使用して、プログラムインスタンスを実行してもらうプログラム及び／またはユーザを識別することができる。ステップ６１０で、代わりに、他の何らかのタイプの要求が受信されたと判定された場合、ルーチンは、ステップ６２５に進み、適宜、他の指示された動作を実行する。例えば、ルーチンは、指示された１つまたは複数のプログラムインスタンスを或る将来の時点で実行するコンピュータリソースを予約する要求をプログラム実行サービスに送信し、１つまたは複数のプログラムの現在または以前の実行に関するステータスクエリをプログラム実行サービスに送信し、ユーザ関連の情報を（例えば、プログラム実行サービスにユーザを登録することの一環として）提供・変更し、以前に登録されたプログラムを登録解除もしくは除去し、１つまたは複数のプログラムインスタンスの実行を一時停止または終了することができる。
【００４９】
ステップ６１５、６２５または６３０の後、ルーチンは、ステップ６２０に進み、オプションとして表示情報を更新したり、ステップ６１５、６２５または６３０に応答してプログラム実行サービス（図示せず）から戻された情報を格納したり、プログラム実行サービスの定期的ステータスクエリを行ったりなどの、さらなるハウスキーピングタスクを実行する。ステップ６２０の後、ルーチンは、ステップ６９５に進み、処理を続けるかどうかを判定する。ルーチンは、続ける場合ステップ６０５に戻り、続けない場合ステップ６９９に進み、戻る。
【００５０】
また、一部の実施形態では、前述したルーチンによって提供される機能は、より多くのルーチンに分割される、またはより少ないルーチンに統合されるなどの、代替の仕方で提供可能であることも、当業者には理解されよう。同様に、一部の実施形態では、例示されるルーチンは、説明されるよりも多くの機能、または説明されるよりも少ない機能を提供することが、他の例示されるルーチンが、代わりに、そのような機能を欠く場合、または含む場合、あるいは提供される機能の量が変更される場合などに、可能である。さらに、様々な動作が、或る特定の仕方で（例えば、順次に、または並行に）、さらに／または或る特定の順序で実行されるように例示されることが可能であるが、他の実施形態では、動作は、他の順序及び他の仕方で実行可能であることが、当業者には理解されよう。また、前述したデータ構造は、単一のデータ構造を複数のデータ構造に分割すること、または複数のデータ構造を単一のデータ構造に統合することによってなど、様々な仕方で構造化することが可能であることも、当業者には理解されよう。同様に、一部の実施形態では、例示されるデータ構造は、説明されるよりも多くの情報または少ない情報を格納することが、他の例示されるデータ構造がそのような情報を欠く場合または含む場合、あるいは格納されている情報の量またはタイプが変更される場合に、可能である。
【００５１】
前述したとおり、様々な実施形態は、プログラムの実行と関係するポリシーの実施を円滑にするために、プログラム実行サービスのコンピュータシステムを１つまたは複数のグループに編成する。さらに、コンピュータシステムは、グループの階層を用いてなど、他の仕方で編成されることも可能である。例えば、最小のグループはそれぞれ、単一のコンピュータシステムを含むことが可能であり、各コンピュータシステムは、そのシステム独自のグループに割り当てられる。その場合、単一のネットワークスイッチによって接続された単一マシングループは、単一のネットワークスイッチによって物理的に接続されたコンピュータシステムのすべてを含むスイッチレベルグループにさらに含まれることが可能である。その場合、スイッチレベルグループは、所与のデータセンタ内のコンピュータシステムのすべてを含むデータセンタレベルグループにさらに含まれることが可能である。その場合、データセンタレベルグループは、複数のデータセンタ内のコンピュータシステムのすべてを含むユニバーサルグループにさらに含まれることが可能である。そのような編成において、各レベルにおけるグループは、一般に、グループ内の他のコンピュータシステム上に配置されているプログラムのコピーに順々に遅くなるアクセスを有し、単一マシングループが、最も迅速なアクセスを提供し、ユニバーサルグループが、最も遅いアクセスを提供する。そのような編成は、プログラム実行サービスが、実行されるべき或る特定のプログラムのコピーを格納しているとともに、そのプログラムを実行するのに必要とされるリソース利用可能性を有する最小のグループを探すことが可能であるので、実行されるプログラムの最適な配置を導く様々なポリシーの適用の効率的な実施を可能にすることができる。代替として、他の実施形態は、グループによってプログラム実行サービスにおけるコンピュータシステムをモデル化することは全くしない可能性がある。そのような実施形態は、例えば、ネットワークスイッチのいくつか、またはすべてに接続された、あるいはいくつかのハードウェアラック上、またはすべてのハードウェアラック上に配置された専用のデータストレージコンピュータシステムまたは他のシステムに、プログラムのうちいくつかのプログラム、またはすべてのプログラムのコピーを配置し、次に、実行されるべきプログラムを、ランダムに選択されたコンピュータシステムに、単に割り当てることができる。
【００５２】
前述したとおり、様々な実施形態は、プログラムを実行すべき、さらに／またはプログラムコピーの配信を受けるべき候補としてのコンピュータシステム及び／またはグループの選択に関して、様々なポリシーを実施することができる。多くの場合、様々なプログラム配置ポリシーには、信頼性や効率（例えば、起動待ち時間、ネットワーク待ち時間、またはスループットなど）などの要因の間のトレードオフが必然的に伴う可能性がある。配置ポリシーは、１つまたは複数のプログラムの実行を要求するユーザのプリファレンス、現在、実行されているプログラムの数、ＩＤ、及びロケーション、現在、実行が要求されているプログラムの数及びＩＤ、将来、実行がスケジュールされているプログラムの数及びＩＤ、プログラムの以前に格納されたコピーのロケーション、ネットワークアーキテクチャ、地理的ロケーションなどの要因を考慮に入れることが可能である。さらに、ポリシーのデフォルトの適用が、一部の場合、一部の実施形態において、ユーザ要求、または他の要因に基づいて無効にされる、または変更されることが可能である。例えば、或る特定の実施形態が、１つまたは複数のプログラムの実行を求めるユーザの要求の中で表現されたユーザ選好によって無効にされることが可能であるデフォルトポリシーのセットを提供することが可能である。
【００５３】
プログラム実行サービスによって管理されているコンピュータシステムが、複数のデータセンタにわたる実施形態において、プログラム実行サービスは、同一のデータセンタ内で単一のプログラムの複数のインスタンスを実行し、さらに／または同一のデータセンタ内で同一のユーザのための複数の別々のプログラムのインスタンスを実行することを選好することが可能である。そのようなポリシーは、そのようなプログラムが、プログラムインスタンス間の通信のために比較的高い帯域幅のデータセンタ内データ交換を利用することを許す傾向にある。他方、一部の実施形態は、複数のデータセンタにわたってそのようなプログラムインスタンスを分散させることを、データセンタ全体を機能停止させることが可能な停電、ネットワーク停止、または他の大規模な停止の場合に信頼性を保証するために、他のそのようなプログラムインスタンスとの通信をほとんど、または全く実行しないプログラムインスタンスなどに関して、選好する可能性がある。そのようなプログラムインスタンスを分散させる、または統合するそのような選好は、物理的サブネットワーク、グループ、及び個々のコンピュータシステムに関してなど、コンピュータシステム編成の他の様々なレベルで同様に適用可能である。さらに、一部の実施形態は、プログラム実行サービスの配置ポリシーの下で、さもなければ区別がつかない複数の候補コンピュータシステムの間で、選択を行うのに使用されることが可能なポリシーを使用することが可能である。例えば、一実施形態は、同等に良好な候補コンピュータシステムのセットから或るコンピュータシステムをランダムに選択することが可能であるのに対して、別の実施形態は、最低のリソース利用率を有するコンピュータシステムを選択することが可能であり、一方、異なる実施形態は、そのようなコンピュータシステムをラウンドロビン順に選択することが可能である。
【００５４】
さらに、様々な実施形態は、プログラムの実行に関して、ローカルプログラムストレージリポジトリの中にプログラムのコピーを格納することに関する様々なポリシーを実施することが可能である。例えば、一部の実施形態は、ローカルプログラムストレージリポジトリを収容するコンピュータシステム上の実行に先立って（または実行中、もしくは実行後に）、ローカルプログラムストレージリポジトリ上にプログラムのローカルコピーを常に格納することが可能である。代替として、他の実施形態では、いくつかのプログラムだけしか、そのようなローカルプログラムストレージリポジトリの中に格納されない。さらに、様々な実施形態は、プログラムストレージリポジトリが、所与のプログラムのローカルコピーを格納する十分な容量を有さない場合、異なるアプローチをとることが可能である。例えば、一部の実施形態は、最近、最も使用されていないコピー、最も古いコピー、ランダムなコピー、異なる仕方で選択されたコピー、共通グループ内の他の１つまたは複数のグループのプログラムリポジトリなどの、何らかの他の関連するプログラムリポジトリの中に依然として格納されているプログラムのコピーなどを強制退去させるなど、新たなプログラムを格納するためのスペースをあけるために、プログラムリポジトリの中に格納されていたプログラムの１つまたは複数のコピーを強制退去させる、またはそれ以外で除去することを選択する。他の実施形態では、所与のプログラムリポジトリが一杯である場合、強制退去は全く実行されない（例えば、代わりに、毎日、再起動後、その他など、プログラムリポジトリからすべてのプログラムを定期的に除去することによって、またはプログラムが、プログラム実行サービスから登録解除された場合に限って、プログラムを除去することになどによって）。
【００５５】
一部の実施形態では、プログラムは、複数の、場合により、固定サイズのデータブロックに分解可能である。このようにプログラムを分解することにより、そのプログラムのコピーを獲得中であるコンピュータシステムは、プログラムリポジトリの中に、その要求されるプログラムを格納している他の複数のコンピュータシステムに要求を配信することができる。これらの他の複数のコンピュータシステムのいくつかは、プログラムブロックを求める要求に応答するので、獲得するコンピュータシステムは、それらの応答するコンピュータシステムからさらなるプログラムブロックを要求することができる。したがって、十分なリソースが利用可能であるコンピュータシステムが、それほど応答性のよくない、または応答しないコンピュータシステムより、プログラムブロックを供給するのに優先される。
【００５６】
一部の実施形態は、ローカルプログラムリポジトリの中に既に格納されている可能性がある他のプログラムと異なるプログラムの部分だけしか転送しないことなどにより、プログラムの転送効率を向上させる最適化を行うことができる。そのようなアプローチは、同一のプログラム、あるいはコードまたはデータの相当な部分を共有する異なるプログラムの複数のインクリメンタルバージョンを考えると、有利な場合がある。例えば、プログラムが、複数の、場合により、固定サイズのブロックに分解された場合、プログラムが、プログラム実行サービスに最初に登録されると、チェックサムが、各ブロックに関して計算されて、格納されることができる。後に、プログラムが、実行のために獲得されるべき際に、コンピュータシステムは、１つまたは複数のプログラムリポジトリの中に存在するプログラムのブロックに関連するチェックサムに対してプログラムブロックチェックサムを比較し、既に格納されてはいないプログラムブロックだけを獲得することができる。代替として、一部の実施形態は、実行可能ファイル、データファイル、及びライブラリファイルなどの、１つまたは複数のファイルの集合としてプログラムを表すことができる。そのような場合、２つのプログラムは、１つまたは複数のファイル（例えば、ライブラリファイル）を共通で有することが可能であり、所与のコンピュータシステムは、実行のために獲得されるべきプログラムの、コンピュータシステムのプログラムリポジトリの中に既に格納されているファイルとは異なるファイルだけを獲得することを選択することができる。
【００５７】
一部の実施形態は、すべて固定サイズのプログラムを提供するのに対して、他の実施形態は、様々なサイズのプログラムを許す。固定サイズのプログラムは、メモリまたはプログラムリポジトリなどのシステムリソースのプログラム利用率を計算するコンテキストにおいて、プログラムの扱いを簡単にすることができる。様々なサイズのプログラムを提供する実施形態において、最良適合、最初適合などの様々なビンパッキングアルゴリズムを含め、固定サイズのリソース（メモリまたはディスクスペースなどの）の利用率を最適化して、プログラムのローカルコピーを格納する際、及び／またはプログラムインスタンスを実行する際にフラグメンテーションを制限する様々なアルゴリズムが適用可能である。
【００５８】
さらに、一部の実施形態は、プログラムを実行する要求に先立って、管理されるコンピュータシステムの様々なシステムの中にプログラムのコピーを入れるため、またはそれ以外で配信するための機能を提供することができる。一部の実施形態は、プログラムが最初に登録される際にプログラムを格納するための少なくとも１つのユニバーサルプログラムリポジトリを提供するが、これらの実施形態は、プログラムが最初に実行される際、プログラムが、そのプログラムが実行されるべきコンピュータシステムに比較的ローカルであるいずれのプログラムリポジトリの中でも見つからないので、長い待ち時間を被る可能性がある。そのような実施形態が、ローカルプログラムリポジトリの中に実行されるプログラムのローカルコピーを格納するように構成される場合、その後の実行は、最初の実行と比べると、比較的短い起動待ち時間を被る。プログラムの最初の実行に関する比較的長い起動待ち時間という問題は、プログラムを実行する要求に先立って、プログラムのコピーを入れること、またはそれ以外で配信することによって対処可能である。そのような実施形態は、プログラム実行サービスを提供する１つまたは複数のデータセンタにローカルであるプログラムリポジトリにプログラムの１つまたは複数のコピーを配信することが可能である。そのような仕方で、プログラムが、最初に実行されるように要求されると、プログラムは、一般に、プログラムを実行するように選択されたコンピュータシステム、または複数のコンピュータシステムに比較的ローカルである（少なくとも同一のデータセンタ内の）プログラムリポジトリの中で見つかる。
【００５９】
さらに、一部の実施形態は、単一のプログラムの複数のインスタンスの実行の同時の、つまり、重なり合う開始の場合に、最適化を行うことができる。そのような状況において、実行されるべきプログラムのコピーは、ほぼ同時に複数の別々のコンピュータシステムによって獲得される必要がある可能性がある。各コンピュータシステムが、リモートプログラムリポジトリからプログラムのコピーを独立に獲得する場合、各コンピュータシステムが、ネットワークを介して同一のデータの転送を同時に開始するので、ネットワーク、及びその他のリソースの過度の利用がもたらされる可能性がある。一部の状況において、複数のコンピュータシステムが、システムリソースをよりよく利用するように（例えば、不必要なネットワーク使用を最小限に抑えることによって）、プログラムの１つまたは複数のコピーの獲得を同期する、またはそれ以外で順序付けることが、有益な場合がある。例えば、プログラムを実行するように選択された複数のコンピュータシステムが、同一のグループの一部であり、そのグループの外部の１つまたは複数のコンピュータシステムからプログラムコピーを獲得すべき場合、その複数のコンピュータシステムの第１のコンピュータシステムが、そのグループの外部のコンピュータシステムからプログラムのコピーを最初に獲得する（さらに、ローカルプログラムリポジトリの中に格納する）ことが、有益な場合がある。第１のコンピュータシステムが、プログラムのコピーを獲得した後、その複数のコンピュータシステムの残りのシステムが、そのグループに関する共通データ交換媒体を介して、第１のコンピュータシステムからコピーを獲得することができる。
【００６０】
さらに、複数のコンピュータシステムがそれぞれ、プログラムのコピーを獲得すべき場合に、ネットワーク及び／または他のコンピュータリソースを効率的に利用するさらなる様々な技術が、使用可能である。例えば、複数のコンピュータシステムの第１のシステムが、その複数のコンピュータシステムのその他のシステムへのプログラムの配信を管理するように選択可能である。複数のコンピュータシステムのいずれも、ローカルプログラムリポジトリの中にプログラムの格納されたコピーを有さない場合、選択されたコンピュータシステムが、リモートロケーションからプログラムの少なくとも一部分（例えば、ブロック）の転送を開始することができる。プログラムの一部分が、選択されたコンピュータシステムによって受信されるにつれ、選択されたコンピュータシステムは、その複数のコンピュータシステムのその他のシステムに、受信した部分をマルチキャストすることができる。そのようなマルチキャストは、その複数のコンピュータシステムを接続するネットワークに、より少ない冗長なデータパケットが送信されるため、他のネットワーク通信機構（例えば、その複数のコンピュータシステムのそれぞれによるＴＣＰベースの転送）と比べて、向上したネットワーク利用をもたらすことができる。代替として、複数のコンピュータシステムの１つまたは複数が、ローカルプログラムリポジトリの中にプログラムの格納されたコピーを有する場合、選択されたコンピュータシステムは、その複数のコンピュータシステムの他のシステムにプログラムの少なくとも部分（例えば、ブロック）をマルチキャストして、ブロックを転送する負荷を分散させ、他のコンピュータシステム、及び／またはネットワークの部分に対する影響を最小限に抑えるよう、プログラムの格納されたコピーを有する１つまたは複数のコンピュータシステムの少なくともいくつかに指示することができる。プログラムのそのようなマルチキャストベースの配信の後、複数のコンピュータシステムの１つまたは複数は、受信されなかった（例えば、ドロップされたネットワークパケットのために）プログラムの部分を獲得するために、代替の通信機構（例えば、ＴＣＰ）を利用することができる。代替の配信機構は、その複数のコンピュータシステムのその他のシステム上、及び／またはネットワークのいくつかの部分の上に負荷を分散させるラウンドロビンの仕方で、または他の仕方で、部分を求める配信要求を含むことが可能である。
【００６１】
一部の実施形態では、さらなる技術が使用可能である。例えば、マルチキャストベースの配信機構が、或るグループのコンピュータシステムに、そのグループ内の別のコンピュータシステムからプログラムの部分を配信するのに使用される場合、様々な技術を使用して、マルチキャストによってグループの外部のネットワークトラフィックが防止される、または制限されることが可能である。例えば、スイッチが、自身に接続されていないコンピュータシステムにマルチキャストパケットを伝送しないように、短い有効期間が、マルチキャストパケット及び／またはパケットアドレス指定技術を使用することに関して指定可能である。さらに、一部の実施形態は、ネットワークリソース使用を最小限に抑えるため、実行のためのプログラムのコピーの転送または実行に関与しないコンピュータシステムにかかる負荷を最小限に抑えるため、さらに／またはネットワークリソース及び／またはコンピュータリソースの予測可能なパフォーマンスを提供するために、様々なポリシーを実施することが可能である。例えば、一部の実施形態は、マルチキャスト伝送のためであれ、さらに／またはポイントツーポイント伝送のためであれ、コンピュータシステムが、他のコンピュータシステムにプログラムのコピーを転送することができるレートを制限することが可能である。さらに、一部の実施形態は、中間ネットワークデバイス（例えば、スイッチ、ルータなど）が、サブネットワーク間でプログラムのコピーの部分を伝送するデータパケットを転送する際、中間ネットワークデバイスによって利用されることが可能な転送レートを制限し、さらに／またはネットワーク帯域幅の割合を制限することが可能である。そのようなデータパケットは、例えば、特定のタイプであること、及び／または特定のアドレス（例えば、或る特定の範囲内のマルチキャストＩＰアドレス）であることに基づいて、中間ネットワークデバイスによって識別されることが可能である。一部の実施形態では、前述した機構などの複数の機構が、様々なネットワーク利用ポリシーを実施するように組み合わされることが可能である。
【００６２】
一部の実施形態では、１つまたは複数のコンピュータシステムから他の１つまたは複数のコンピュータシステムに実行される１つまたは複数のプログラムインスタンスを移す様々な技術が、使用されることも可能である。一態様では、この移行は、プログラムインスタンスが実行されている最初のコンピュータシステムと関係する問題（例えば、コンピュータシステム、及び／またはコンピュータシステムへのネットワークアクセスの障害）を反映することが可能である。別の態様において、移行は、高い優先度のプログラム実行のため、または限られた数のコンピュータシステム上にプログラムインスタンスの実行を統合して、プログラムインスタンスを実行する元のコンピュータシステムが、メンテナンス、エネルギー節約などの理由でシャットダウンされることを可能にするようになど、最初のコンピュータシステム上で実行されるべき他のプログラムインスタンスに対処することができる。１つの特定の例として、コンピュータシステム上で実行される１つまたは複数のプログラムインスタンスが、そのコンピュータシステムから利用可能であるより多くのリソースを必要とする場合、これらのプログラムインスタンスの１つまたは複数は、さらなるリソースを有する他の１つまたは複数のコンピュータシステムに移される必要がある可能性がある。１つまたは複数のコンピュータシステムが、予期されるよりも少ないリソースを有する、コンピュータシステムの１つまたは複数が、予期される（または許される）よりも多くのリソースを使用するなどの様々な理由で、または１つまたは複数のコンピュータシステムの利用可能なリソースが、予約された、もしくは実行中の１つまたは複数のプログラムインスタンスの可能なリソースニーズと比べて、意図的に過度にコミットされている実施形態において、利用可能なリソースの過度の使用が生じる可能性がある。例えば、プログラムインスタンスの予期されるリソースニーズが、利用可能なリソースの範囲内にある場合、最大のリソースニーズは、利用可能なリソースを超える可能性がある。また、プログラムインスタンス実行のために必要とされる実際のリソースが、利用可能なリソースを超える場合、利用可能なリソースの過度の使用が生じる可能性もある。プログラムの移行は、最初のコンピュータシステム上にローカルで格納されたプログラムのコピーをターゲット宛先コンピュータシステムに転送するように、さらに／または最初のコンピュータシステム上で実行されるプログラムのターゲット宛先コンピュータシステム上で新たなインスタンスを実行することを始めるようになど、様々な仕方で実行されることが可能である。移行は、現在の実行状態情報が、新たな実行されるプログラムインスタンスに転送されるように、さらに／または最初のプログラムインスタンスと新たなプログラムインスタンスの間の他の調整を可能にするようになど、可能な場合、最初に実行されるプログラムインスタンスが終了する前に行われることが可能である。
【００６３】
一部の実施形態は、料金と引き換えに複数の顧客にプログラム実行サービスを提供することができる。そのような状況において、顧客は、プログラム実行サービスにプログラムを登録し、またはそれ以外で提供し、料金と引き換えにそのようなプログラムの実行を要求することができる。顧客が、時間ベース（例えば、分数、時間数、日数など）でプログラム実行サービスリソース（例えば、ネットワーク帯域幅、メモリ、ストレージ、プロセッサ）の様々な構成へのアクセスを購入するように、１つまたは複数の所定の仮想の、または物理的ハードウェア構成へのアクセスを購入するように、追加料金でプレミアムサービス（例えば、プレミアムでない顧客のプログラムに先立って、プレミアム顧客のプログラムの実行を開始する、プレミアム顧客のプログラムに先立って、プレミアムでない顧客に属するプログラムを強制退去させるようになど、優先プログラムリポジトリ配置をもたらすなど、優先実行を提供する）を購入するように、インスタンス実行ごとに指定された期間にわたってプログラムインスタンスを実行する能力を購入するようになど、様々な料金請求モデルが、使用可能である。
【００６４】
前述したとおり、一部の実施形態は、仮想コンピュータシステムを使用することが可能であり、そうである場合、プログラム実行サービスによって実行されるべきプログラムは、仮想計算機イメージ全体を含むことが可能である。そのような実施形態において、実行されるべきプログラムは、オペレーティングシステム全体、ファイルシステム、及び／または他のデータ、及び、場合により、１つまたは複数のユーザレベルプロセスを含むことが可能である。他の実施形態において、実行されるべきプログラムは、何らかの機能を提供するように相互動作する他の１つまたは複数のタイプの実行可能ファイルを含むことが可能である。さらに他の実施形態において、実行されるべきプログラムは、提供されるコンピュータシステム上においてネイティブで、あるいは仮想コンピュータシステム、インタプリタ、または他のソフトウェアによって実施されるハードウェア抽象化を使用して間接的に実行可能な命令及びデータの物理的集合または論理的集合を含むことが可能である。より一般的に、一部の実施形態において、実行されるべきプログラムには、１つまたは複数のアプリケーションプログラム、アプリケーションフレームワーク、ライブラリ、アーカイブ、クラスファイル、スクリプト、構成ファイル、データファイルなどが含まれてもよい。
【００６５】
プログラム実行サービス内のプログラムの実行を管理するのに相互通信システムマネージャモジュールとマシンマネージャモジュールとの組合せを利用する実施形態が、説明されてきたが、様々なプログラム実行サービスモジュール間の責任の他の実施及び割り当ても企図される。例えば、一部の実施形態では、単一のモジュール、または単一の構成要素が、管理される物理的なコンピュータシステムまたは仮想マシンのいくつか、またはすべてのシステム上、またはマシン上のプログラムの実行を管理することを担うことが可能である。例えば、プログラムは、様々なリモート実行技術（例えば、ｒｅｘｅｃ、ｒｓｈなど）によってターゲットコンピュータシステム上で直接に実行可能である。
【００６６】
また、前述した例示的な実施形態は、プログラム実行サービスを提供するのに使用されるデータセンタのコンテキストにおいて使用されたが、他の実施シナリオも可能であることも、当業者には認識されよう。例えば、説明されるファシリティは、ビジネス、または他の機関（例えば、大学）によって、そのビジネスまたは機関の従業員及び／または他のメンバの利益のために運営される組織全体のイントラネットのコンテキストにおいて使用されてもよい。または、説明される技術は、分散された仕方で大規模な（例えば、科学的な）コンピューティングタスクを実行する目的で、様々な第三者によって個々に管理され、運用されるノードを含む分散コンピュータシステムによって使用されてもよい。
【００６７】
以上から、例示の目的で特定の実施形態が、本明細書で説明されてきたが、本発明の趣旨及び範囲を逸脱することなく、様々な変更の実施が可能であることが理解されよう。従って、本発明は、添付の特許請求の範囲、及び特許請求の範囲に記載される要素による以外は、限定されない。さらに、本発明のいくつかの態様が、いくつかの請求項で提示されるが、本発明者らは、任意の請求項において本発明の様々な態様を企図する。例えば、本発明のいくつかの態様だけが、コンピュータ可読媒体において実現されるものとして述べられる可能性があるが、他の態様も同様に、そのように実現されることが可能である。
【図面の簡単な説明】
【００６８】
【図１】複数のコンピュータシステムがプログラムを交換し、実行する例示的な実施形態を示すネットワーク図である。
【図２】プログラムのコピーを格納し、交換するコンピュータシステムのグループの例を示す図である。
【図３】複数のコンピュータシステム上のプログラムの実行を管理するのに適した例示的なコンピュータシステムを示すブロック図である。
【図４Ａ】システムマネージャモジュールルーチンの実施形態を示す流れ図である。
【図４Ｂ】システムマネージャモジュールルーチンの実施形態を示す流れ図である。
【図５】マシンマネージャモジュールルーチンの実施形態を示す流れ図である。
【図６】プログラム実行サービスクライアントルーチンの実施形態を示す流れ図である。
【図１】
2009532771.tif 000003
【図２】
2009532771.tif 000004
【図３】
2009532771.tif 000005
【図４Ａ】
2009532771.tif 000006
【図４Ｂ】
2009532771.tif 000007
【図５】
2009532771.tif 000008
【図６】
2009532771.tif 000009
【国際調査報告】
2009532771.tif 000010