(57)【特許請求の範囲】
【請求項１】
分散型プログラム実行サービスを提供するように構成された１または複数のコンピューティングシステムによって実行される方法であって、前記方法は、
複数のコンピューティングノード上のプログラムの分散型実行を開始するステップであって、前記プログラムは前記複数のコンピューティングノード上で実行する複数の実行ジョブを有し、前記複数の実行ジョブの各々は、実行されることになる１または複数の操作を有する、ステップと、
前記複数の実行ジョブの１または複数について完了した操作から生成された中間結果をトラッキングするステップであって、前記複数の実行ジョブは、実行が第１の時刻に終了し、および前記第１の時刻に完了した１または複数の第１の操作を有し、および前記第１の時刻に完了しない１または複数の他の第２の操作を有する第１の実行ジョブを含み、ならびに前記中間結果の前記トラッキングするステップは、少なくとも前記完了した１または複数の第１の操作からの中間結果を永続的に記憶するステップを含む、ステップと、
前記第１の時刻の後で、前記第２の操作のうちの少なくとも１つの再開された実行の間の入力として、前記永続的に記憶された中間結果のうちの少なくとも一部を取り出しおよび使用することを含む前記第１の実行ジョブの前記１または複数の第２の操作の前記再開された実行を開始することにより、前記プログラムの前記分散型実行を継続するステップと、
前記プログラムの前記分散型実行が完了した後で、前記分散型実行の最終結果の表示を提供するステップと
を備えたことを特徴とする方法。
【請求項２】
前記複数のコンピューティングノードは前記分散型プログラム実行サービスにより提供され、かつ前記分散型プログラム実行サービスのユーザに対してプログラムの分散型実行を実行するように構成され、前記プログラムの前記分散型実行は、前記分散型プログラム実行サービスの第１のユーザのために開始され、かつ前記第１のユーザにより指定されたプログラムに対する入力データを用いることを特徴とする請求項１に記載の方法。
【請求項３】
前記第１の実行ジョブの前記実行は、前記実行が終了する前に前記第１の実行ジョブについて用いられた前記複数のコンピューティングノードの１または複数の、前記第１の時刻における失敗に基づいて終了することを特徴とする請求項１に記載の方法。
【請求項４】
前記第１の実行ジョブの前記実行を終了することを前記第１の時刻に決定するステップと、前記中間結果を前記永続的に記憶するステップを開始するステップとをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項５】
前記第１の実行ジョブの前記実行を終了して、前記第１の時刻より前に前記第１の実行ジョブを実行する１または複数のコンピューティングノードから、前記再開された実行が発生する１または複数の他のコンピューティングノードへの前記第１の実行ジョブの実行を移動することを可能にするステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項６】
前記プログラムの実行を一時停止する要求に少なくとも部分的に基づいて前記第１の実行ジョブの前記実行を終了することを決定するステップと、前記要求に応答して、実行が完了していない前記複数の実行ジョブの全ての実行を終了するステップとをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項７】
前記再開された実行が発生する１または複数の第１のコンピューティングノードは、前記第１の時刻より前に前記第１の実行ジョブの前記実行が発生した１または複数の第２のコンピューティングノードとは別個であることを特徴とする請求項６に記載の方法。
【請求項８】
前記分散型実行が発生するコンピューティングノードの数は、前記複数のコンピューティングノードの数とは別個であることを特徴とする請求項６に記載の方法。
【請求項９】
前記複数のコンピューティングノードは、前記分散型プログラム実行サービスにより提供され、前記プログラムの前記分散型実行は、前記分散型プログラム実行サービスの第１のユーザのために実行され、前記要求は、前記第１のユーザとは別個の第２のユーザから受信されることを特徴とする請求項６に記載の方法。
【請求項１０】
前記第１の実行ジョブを前記第１の時刻より前に実行する１または複数のコンピューティングノード上の管理動作を実行することの決定に少なくとも部分的に基づいて前記第１の実行ジョブの前記実行を終了するよう決定するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１１】
前記第１の実行ジョブを前記第１の時刻より前に実行している１または複数のコンピューティングノード上の１または複数の他のプログラムを実行することの決定に少なくとも部分的に基づいて、前記第１の実行ジョブの前記実行を終了するステップをさらに備え、前記終了することの決定は、前記プログラムより優先順位が高い前記１または複数の他のプログラムに基づくことを特徴とする請求項１に記載の方法。
【請求項１２】
前記複数のコンピューティングノード上のプログラムの前記分散型実行は、マスタノード上で実行するソフトウェアにより管理され、前記中間結果のトラッキングは、前記分散型実行の状態について前記マスタノードに情報を保持することを含み、前記第１の実行ジョブの前記実行の終了は、前記マスタノードの失敗に少なくとも部分的に基づき、前記第１の実行ジョブの再開された実行の開始は、第２のマスタノードの実行を開始し、前記第２のマスタノード上で、前記マスタノードの前記保持された情報を復元することを含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記プログラムは、複数の入力データサブセットの各々で１または複数のマップ関数を実行し、前記１または複数のマップ関数の結果に関する１または複数のリデュース関数を実行するように設計され、前記方法は、各々が前記マップ関数および前記リデュース関数を含むグループからの少なくとも１つの関数を実装する前記複数の実行ジョブを生成するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１４】
１または複数のプロセッサと、
複数のコンピューティングノード上のプログラムの分散型実行を開始する手段であって、前記プログラムは前記複数のコンピューティングノード上で実行する複数の実行ジョブを有し、前記複数の実行ジョブの各々は、実行されることになる１または複数の操作を有する、手段と、
前記複数の実行ジョブの１または複数について完了した操作から生成された中間結果をトラッキングする手段であって、前記複数の実行ジョブは、実行が第１の時刻に終了し、および前記第１の時刻に完了した１または複数の第１の操作を有し、および前記第１の時刻に完了しない１または複数の他の第２の操作を有する第１の実行ジョブを含み、ならびに前記中間結果の前記トラッキングすることは、少なくとも前記完了した１または複数の第１の操作からの中間結果を永続的に記憶することを含む、手段と、
前記第１の時刻の後で、前記第２の操作のうちの少なくとも１つの再開された実行の間に前記永続的に記憶された中間結果のうちの少なくとも一部を取り出しおよび使用することを含む前記第１の実行ジョブの前記１または複数の第２の操作の再開された実行を開始することにより、前記プログラムの前記分散型実行を継続する手段と、
前記プログラムの前記分散型実行が完了した後で、前記分散型実行の最終結果の表示を提供する手段と
を備えたことを特徴とするコンピューティングシステム。
【請求項１５】
前記複数のコンピューティングノードは分散型プログラム実行サービスにより提供され、かつ前記分散型プログラム実行サービスのユーザに対してプログラムの分散型実行を実行するように構成され、前記プログラムの前記分散型実行は、前記分散型プログラム実行サービスの第１のユーザのために開始され、かつ前記第１のユーザにより指定されたプログラムに対する入力データを用いることを特徴とする請求項１４に記載のコンピューティングシステム。
【請求項１６】
前記第１の実行ジョブの前記実行は、前記実行が終了する前に前記第１の実行ジョブについて用いられた前記複数のコンピューティングノードの１または複数の、前記第１の時刻における失敗に基づいて終了することを特徴とする請求項１４に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行状態の保存に関する。
【背景技術】
【０００２】
多数の会社及び他の組織は、多数のコンピューティングシステムを相互接続するコンピュータネットワークを作動し、例えば同じ位置に（例えば、ローカルネットワークの一部として）配置されているか又はその代わりに多数の明確な地理的な場所（例えば１つ以上の個人的若しくは公共の中間ネットワークを経た接続）に位置しているコンピューティングシステムでそれらの動作を支えている。例えば、多数の相互接続コンピューティングシステムを収容するデータセンターが一般的なものとなり、そのデータセンターには単一組織が運用するか又はその単一組織に代わって運用されるプライベートデータセンター、及びコンピューティングリソースを顧客に提供するビジネスとして事業体により運用されるパブリックデータセンター等がある。
【０００３】
畿つかのパブリックデータセンターの運用者は様々な顧客が所有するハードウェアに対してネットワークアクセス、電力及び安全な設置ファシリティを提供し、一方で他のパブリックデータセンターの運用者は、自身の顧客が使用する実際のハードウェアリソースを含む「完全サービス型」ファシリティを提供する。しかしながら、一般的なデータセンターの規模と範囲が増大したので、物理的なコンピューティングリソースの準備、運営及び管理作業は益々複雑になった。
【０００４】
商用ハードウェアに対する仮想化技術の出現により、多様なニーズを有する多数の顧客に対して大規模なコンピューティングリソースを管理する問題に部分的な解決方法が与えられ、様々なコンピューティングリソースを効率的、かつ安全に複数の顧客間で共有されることが可能になった。例えばＶＭＷａｒｅ、ＸＥＮまたはＵｓｅｒ−Ｍｏｄｅ  Ｌｉｎｕｘ（登録商標）が提供するもののような仮想化技術により、単一の物理的なコンピューティングマシンによりホストされる１つ以上の仮想マシンをそれぞれのユーザに提供することで、その単一の物理的なコンピューティングマシンを多数のユーザ間で共有することができる。それぞれの上記仮想マシンは、相違する論理的コンピューティングシステムとして動作するソフトウェアシミュレーションであり、そのソフトウェアシミュレーションによりユーザには、自身が所与のハードウェアコンピューティングリソースの唯一の運用者及び管理者であるという錯覚が与えられ、一方で様々な仮想マシン間でアプリケーションの隔離及びセキュリティが提供される。さらに、幾つかの仮想化技術により、実際に複数の相違する物理的コンピューティングシステムに及ぶ多数の仮想プロセッサを伴う単一の仮想マシンのような、１つ以上の物理リソースに及ぶ仮想リソースを提供することができる。
【図面の簡単な説明】
【０００５】
【図１Ａ】リモートユーザによる分散型プログラム実行サービスの使用の例示的な実施形態を例示するネットワーク図である。
【図１Ｂ】リモートユーザによる分散型プログラム実行サービスの使用の例示的な実施形態を例示するネットワーク図である。
【図２Ａ】複数のコンピューティングノード上の分散型プログラム実行を管理するための技術の例示的な実施形態の例示図である。
【図２Ｂ】本発明の複数のコンピューティングノード上の分散型プログラム実行を管理するための技術の例示的な実施形態の例示図である。
【図３】分散型プログラム実行を管理するためのコンピューティングシステムの例示的な実施形態を例示するブロック図である。
【図４Ａ】分散型プログラム実行サービスシステムマネージャルーチンの例示的な実施形態のフロー図である。
【図４Ｂ】分散型プログラム実行サービスシステムマネージャルーチンの例示的な実施形態のフロー図である。
【図５】コンピューティングノードマネージャルーチンの例示的な実施形態のフロー図である。
【発明を実施するための形態】
【０００６】
プログラムの分散型実行を管理するための技術を記載する。少なくとも幾つかの実施形態では、プログラムの分散型実行を管理するための技術は、プログラム用入力データの相違するサブセットを使用する各々の実行ジョブと並列または他の分散型式の如き相違したコンピューティングノードに各々実行ができる複数の相違した実行ジョブにプログラム実行を分解若しくは分割することを含む。
【０００７】
その上、実行終了前に実行ジョブの部分的な実行の中間状態を永続的に格納する如き少なくとも幾つかの実行ジョブを一時的に終了し、後に再開し、その後に、その実行ジョブの実行を再開する間の中間状態情報を検索して使用することを本技術が含み得る。更に、少なくとも幾つかの状況において、多数のコンピューティングノード（例えば１つ以上の物理的コンピューティングシステムにてホストされる多数の物理的コンピューティングシステム及び／又は仮想マシン）を提供するサービスの如き多数の顧客又は他のサービス利用者の為の多数のプログラムを実行するサービスを、分散方式でのプログラム実行で使用する為に分散型プログラム実行（「ＤＰＥ」）サービスの実施形態と共に本技術を利用できる。少なくとも幾つかの実施形態では、分散型プログラム実行サービスシステムマネージャモジュールの実施形態によって、以下により詳細に説明する通り、本技術の幾つかまたは全てが自動的に実行され得る。
【０００８】
プログラムの分散型実行は、プログラムの実行を要求するためにＤＰＥサービスと対話するＤＰＥサービスの実施形態のユーザによって等のように、様々な実施形態の様々な方式にて始められる。例えば、ＤＰＥサービスはリモートユーザが要求を行うために使用し得るグラフィカルユーザーインタフェース（「ＧＵＩ」）（例えばユーザがユーザのクライアントデバイスで実行するウェブブラウザの如きクライアントアプリケーションを経て対話するウェブベースＧＵＩ）を提供しても良く、及び／又は、ＤＰＥサービスは、要求を行うためにユーザのコンピューティングデバイスがプログラム的にＤＰＥサービスと対話する１つ以上のＡＰＩ（「アプリケーションプログラミングインタフェース」（例えば、提供されるＧＵＩによって利用できる１つ以上のＡＰＩ）を提供しても良い。
【０００９】
ユーザは、実行すべきプログラムの指示（例えば、プログラムの実行可能なコピーの供給による、ユーザによってＤＰＥサービスにて以前に登録したプログラムを示すことによる、ユーザによる使用のためのＤＰＥサービスで利用できるようにしたプログラムを示すことによる）や、実行プログラム（例えば、入力データを供給することによる、または入力データが得られるアクセス可能な位置を示すことによる）による使用のための入力データの指示の如きこの種の要求の一部として、さまざまな情報を特定することができる。さらに、ユーザは更に以下の１つ以上の如き少なくとも幾つかの実施形態における分散型プログラム実行のための他の構成情報を特定できる：要求された実行用でプログラムの特定例を構成するために用いられる構成情報、要求された実行用で大量のコンピューティングノードの指示、要求された実行用で１種のコンピューティングノードの指示（例えば、ＤＰＥサービスが、異なる量のメモリ、保管及び／又は処理パワーの如き異なる能力を持つ異なる種類のコンピューティングノードを提供する場合）、及び／又は要求された実行を実施する際に使う１つ以上の他の実行基準（例えば、要求された実行と関連してユーザが特定するＱｏＳ（「サービスの品質」）レベル、要求された実行が完了されるべき時間の指示、等）、示されたプログラムの実行が並列または他の分散型実行のために分離されるべき多数の実行ジョブの指示、又は、その代わりの、ＤＰＥサービスが自動的にそれら多数の実行ジョブをどのように判定するかの指示（例えば、示されたプログラムを定義した方式で分離可能に設計して相違した実行ジョブとする場合）、等。
【００１０】
プログラムの実行が要請されるかまたは別段に開始された後、ユーザによってまたは他の様式によって、そのプログラムの実行は様々な様式で様々な実施形態で並列若しくは他の分散型実行用の多数の実行ジョブに分割しても良い。例えば、上述の通り、プログラムは定義された様式で相違した実行ジョブ（例えば、タスクレベル並列性を支持する様に）に分割可能に設計されていても良く、そして、もしそうであれば、ユーザは多数の実行ジョブを生成する方法を指示できる、及び／又は、ＤＰＥサービスは多数の実行ジョブを自動的に生成することができる。なおその上、数種類のプログラムは、多量の入力データのそれぞれに様々な動作を実施でき、そしてかかる状況では、データ並列技術をプログラムの実行に用いて入力データのグループを、相違した実行ジョブにそれぞれ供給される多数のサブセットに分割して使用しても良い（例えば、その実行ジョブのために使用される入力データサブセットの同一動作の全て又は幾つかを実施している実行ジョブのそれぞれで）。一単純例として、特定のプログラムの実行は、二つの特定の項目用の多数のウェブページを検索することを含んでも良く（又は代替的に、後の検索での使用のために、ウェブページにインデックスを付けて）、プログラムの実行は、各々が事項の一方又は両方のためのウェブページ（例えば、単一のウェブページまたは少数のウェブページ）の相違したサブセットを検索（またはインデックス付け）するために、平行して同時に実行する多数の実行ジョブに分割されてもよい。（例えば、タスク並列性及び／又はデータ並列性を支持するために）多数の実行ジョブに分割できるプログラムのタイプの非排他的な実例には、大きなデータセットを処理し、生成するためのマップリデュースプログラム、マップリデュース技術のハドゥーププログラム実装、様々なタイプの映像、画像及び音声処理、様々なタイプの解析及び入力データの原文のデータセット又は他のタイプによる探索等が含まれる。マップリデュースプログラムに関する付加的詳細は、Ｊｅｆｆｒｅｙ  ＤｅａｎとＳａｎｊａｙ  Ｇｈｅｍａｗａｔによる“ＭａｐＲｅｄｕｃｅ：  Ｓｉｍｐｌｉｆｉｅｄ  Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ  ｏｎ  Ｌａｒｇｅ  Ｃｌｕｓｔｅｒｓ”、２００４年１２月、ＯＳＤＩ’０４の会報：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎの第６回シンポジウム、に含まれ、これは出願時にＩａｂｓ＜ｄｏｔ＞ｇｏｏｇｌｅ＜ｄｏｔ＞ｃｏｍ＜ｓｌａｓｈ＞ｐａｐｅｒｓ＜ｓｉａｓｈ＞ｍａｐｒｅｄｕｃｅ−ｏｓｄｉ０４．ｐｄｆ（「＜ｄｏｔ＞」および「＜ｓｌａｓｈ＞」は、対応する文字「．」及び「／」と置換できる）で利用でき、これは、完全に本願明細書に引用される。
【００１１】
さらに、少なくとも幾つかの実施形態において、プログラムの分散型実行の管理には、特定の実行ジョブが実行を開始し、実行を完了する時間を決定する如きプログラムのための実行ジョブの幾つか又は全ての進行中の実行を監視若しくは別段に追尾することが含まれる。実行ジョブの実行のこの種の追尾は、様々な便益を提供でき、例えば、後でいつ他の実行ジョブの実行を開始するべきかについて決定できる（例えば、第１実行ジョブによって生成される出力データが少なくとも第２実行ジョブのための幾つかの入力データである場合、いつ第２実行ジョブを実行するべきかについて決定する際の補助として）及び／又は、プログラムの実行ジョブの全てがいつ完了したかについて判定できる。さらにまた、少なくとも幾つかの実施形態において、幾つか又は全ての実行ジョブは、実行されるべき多数の相違した動作（それはまた、畿つかの状況の「タスク」と称してもよい）を例えば順次及び／又は並行で有しても良く、この種の実行ジョブの進行中の実行の監視又は他の追尾が更にこの種の動作の幾つか又は全ての部分的な実施の状態についての情報を決定すること、いくつかのそういった動作の完了された実施によって生成される中間データを反映することをそれぞれ含んでも良い。実行ジョブのための特定の動作の実施のこの種の追尾は、下記により詳細に説明するように、実行ジョブの部分的な実行から、進行中の中間の実行及びデータ状態を追尾し、使用することを可能にしたり等、更に様々な便益を提供できる。監視又は他の追尾は、特定のコンピューティングノード上の実行ジョブの実行を開始するためにシステムマネージャコンポーネントを使用することによって、及びその後コンピューティングノードからの状態情報を得る等、様々な方式において実行できる（例えば、状態情報をコンピューティングノードから引き出しているシステムマネージャコンポーネントによって、コンピューティングノードからの状態情報を周期的に要請することによって及び／又は周期的に又は特定の出来事が起こる時にシステムマネージャコンポーネントに状態情報を押しつけているコンピューティングノードによって）。
【００１２】
コンピューティングノードのプログラムのための実行ジョブを実行するときに、実行に関連した様々な情報は様々な風に格納しても良い。例えば、実行を開始するときに、実行ジョブによって使われる入力データは実行の間、その入力データにアクセスを容易にするためにコンピューティングノード（例えば、局所的なハードディスクまたは他の局所的な格納デバイス上）に局所的に格納され得て、実行ジョブのために実行されるどのソフトウェア命令も、同様にコンピューティングノードに局所的に格納できる。局所的に格納されるべきこの種の情報は、ＤＰＥサービスのシステムマネージャコンポーネントの制御の下で、プログラムを実行するために用いる多数のコンピューティングノードから離隔したＤＰＥサービスのための高度に利用可能な長期格納場所（例えばネットワークアクセス可能なリモート格納サービスから入手可能な長期格納場所）からコンピューティングノードに供給できる。さらに、実行ジョブの実行が完了され、実行から出力データが生成された後、同様にコンピューティングノードに他の実行ジョブ用に又は別にプログラム実行用に最終的出力結果を生成するためにＤＰＥサービス用の長期格納場所へその出力データを一時的にコピーし戻すまで、その出力データは同じく局所的に格納される。プログラムの実行ジョブの実行が完了された後、コンピューティングノードでの局部的格納装置は、幾つかの実施形態において、実行からのどの出力データもがＤＰＥサービスの長期格納場所にコピーし戻された後、例えばコンピューティングノード上の他の実行ジョブの実行開始の準備又は一部（例えば、異なるユーザのための異なるプログラムの他の実行ジョブ）として消去されるかまたは別に取り除かれても良い。他の実施形態において、実行ジョブの実行が完了された後でも、コンピューティングノード上の局部格納装置は代わりに維持されても良い（例えば、プログラム実行の完了まで）。
【００１３】
さらにまた、少なくとも幾つかの実施形態において、コンピューティングノードの実行ジョブの部分的実行からの様々な中間出力データおよび他の中間結果は、実行の間、局所的にコンピューティングノードに一時的に格納されていてもよく、例えば、実施が完了される実行ジョブの動作のサブセットによって生成される出力データと一致する、及び／又は、実施が始められるが、完了されなかった１つ以上の動作によって生成された、部分的または不完全な出力データと一致する。ＤＰＥサービスの長期格納場所が使われる少なくとも幾つかの実施形態において、この種の中間結果はＤＰＥサービスの長期格納場所に（例えば、実行遅延及びこの種の中間結果をＤＰＥサービスの長期格納場所へコピーする際に関係するネットワークトラフィックを最小化する為に）格納されず、他の実施形態では、この種の中間結果の幾つかまたは全てはＤＰＥサービスの長期格納場所に格納されても良い。
【００１４】
中間結果の一例として、二つの項目のための多数のウェブページによる探索を含む実行ジョブの従来の簡略化例を参照すると、実行ジョブのそれぞれの動作は単一の項目のための単一のウェブページで検索することと一致し、この種の動作の実施からの中間の出力データについては、そのウェブページ中のその項目のどの発生項目についての情報であっても良い（例えば、その項目が所在する累積的な時間や、そのウェブページにおける所在等の如き、そのウェブページにおけるその項目発生それぞれについての情報）。代替的に、他の例として、特定の実行ジョブは、特定の項目のための多数のエントリ（例えば、エントリを表示しているウェブログのそれぞれの行）を有するウェブログまたは他のトランザクション記録による探索を含んでも良く、実行ジョブの動作のそれぞれは、その期間の特定の入力データエントリを検索することを含んでも良く、この種の動作の実施からの中間出力データは同様に入力データエントリがその項目を含むかどうかについての情報を含んでも良い。
【００１５】
ＤＰＥサービスの長期格納場所の実行ジョブの完了した実行からの出力データを格納することによって、その出力データの可用性は特定のコンピューティングノードがその後失敗するか、または別に利用できなくなる場合であっても、維持され得る。しかしながら、実行ジョブの部分的実行からの中間結果がＤＰＥサービスの長期格納場所に格納されない場合、実行ジョブが後で再び最初から実行されることを必要とするように、完了前のその実行ジョブの実行の終了は消失しているそれらの中間結果に帰結し得る（例えば、実行ジョブの幾つかの動作が以前に完了された場合であっても、全ての動作の繰返し実施）。
【００１６】
従って、記載技術は完了前に終了される実行ジョブの部分的実行からのこの種の中間結果を格納し、使用するこの種の様式でのプログラムの管理分散型実行を含み、その結果、実行ジョブの実行の後の再開は終了前の部分的実行の中間点又はその近くでの再開であっても良い。例えば、それらの実行ジョブの実行完了前に、１つ以上のコンピューティングノードでのプログラムの１つ以上の実行ジョブの実行を終了する決定がなされる場合、システムマネージャコンポーネントは、それらの実行ジョブの部分的実行から、コンピューティングノードから離隔した場所等での中間結果の永続的な格納を開始しても良い。それらの実行ジョブの実行が後に再開される場合、同一コンピューティングノードであろうと別のコンピューティングノードであろうと、先行の部分的実行からの永続的に格納された中間結果は検索され、再開された実行で様々な風に使用し得る。例えば、特定の終了された実行ジョブの多数の動作が終了前に完了された場合、それらの動作の実施からの中間結果は再開実行のために検索されるので、それらの完了動作は再開実行のために再び最初から実行される必要はない。
【００１７】
部分的に完了した実行ジョブの終了は、様々な実施形態の様々な理由で実施され得る。例えば、幾つかの実施形態でプログラムの実行を要求したユーザは、指示した期間又はユーザが後にプログラム保留の再開を要求する迄、プログラムのための実行ジョブの幾つか又全てを保留することを要求しても良い。他の実施形態において、ＤＰＥサービスはプログラムの１つ以上の実行ジョブの実行の終了を開始できる。例えば、第１コンピューティングノードでの実行ジョブの実行は、第１コンピューティングノードがメンテナンスのために運転停止となる、他の実行ジョブ又は他のプログラム（例えば、他の実行ジョブ又は優先順位の高い他のプログラム）用に使用される、過大利用となる、起こり得る失敗の微候を示している等で終了されて他の第２コンピューティングノードへ移動することができる。また、指示されたユーザ要求に対すると同様に、ＤＰＥサービスは、一定期間プログラムの全ての実行を保留することを決定できる。
【００１８】
上述の通り、様々な情報は実行ジョブの実行中にコンピューティングノードに局所的に格納されても良く、局所的に格納された情報は様々な風に格納される。例えば、幾つかの実施形態において、分散ファイルシステム又は他の分散データ格納装置は、プログラムの分散型実行のために使用される多数のコンピューティングノードで創成できて、特定のコンピューティングノードの局所的に格納されたデータは分散したデータ格納装置の局所的な部分に格納されている。さらにまた、特定の実施形態の分散データ格納は、失敗する又は別に利用できなくなる特定のコンピューティングノードに局所的に格納されるデータの回復を考慮に入れる重複データを含む場合、実行ジョブの実行からの出力データの利用可能性は、ＤＰＥサービス用の分割した長期格納を用いずとも、その実施形態のための多くの状況で維持できる。他の実施形態において、ＤＰＥサービスの長期格納場所を使用しないような、幾つかまたは全ての情報は他様に（例えば、プログラムのための全ての実行が完了される迄コンピューティングノードでの局所的格納データを維持することによって）及び／又は、選択されるコンピューティングノードでの局所的格納装置を使用せずにプログラムの分散型実行を補助することによって格納できる（例えば、ＤＰＥサービスの長期格納場所の如き遠隔地で、コンピューティングノードでの揮発性メモリにおいてロードされないどの情報も格納することによって）。
【００１９】
さらに、コンピューティングノードでの部分的実行の中間結果がコンピューティングノードから離隔して永続的に格納されるときに、中間結果は様々な風に格納される。ＤＰＥサービスが長期格納場所を使用する幾つかの実施形態において、中間結果は完了された実行ジョブの他の完了された結果とともに、ＤＰＥサービスの長期格納場所に格納できる。代替的に、幾つかの実施形態において、特定のコンピューティングノードのための中間結果も一緒に格納できるが、他のコンピューティングノードの中間の及び／又は完了された結果とは別の様式で格納される。例えば、幾つかの実施形態において、離隔した論理的格納容積は、分散ファイルシステム又は他の分散データ格納装置の局所的な部分を含めて中間結果を格納するために用いたコンピューティングノード用の局所的なハードディスク又は他のブロックデータ格納装置の幾つか又は全てを映すために創成されても良い。コンピューティングノードのための実行ジョブの部分的実行が後で再開されるときに、この種の離隔した論理的格納容積は再開された実行が発生すべきコンピューティングノードに取り付けても良く、取り付けた論理的格納容積の情報は、再開された実行の間に使用するコンピューティングノードの物理的ブロック格納装置へコピーできて、または、取り付けた論理的格納容積は、その代わりに、再開された実行の間にコンピューティングノードのいずれかの物理的ブロック格納装置の代わりに使用しても良い。論理的格納容積が使用可能なかかる実施形態において、論理的格納容積は、コンピューティングノードでの実行ジョブの終了の時点で創成されても良く、一方他の実施形態では、実行ジョブのための論理的格納容積はコンピューティングノードでの実行ジョブの初期の実行の当初に創成されても良く、たとえ実行ジョブの実行が終了し、１回以上再開しても全ての実行の全体にわたって使用できる（例えば、そのコンピューティングノードのどの物理的ブロック格納装置の代わりにも）。
【００２０】
永続的にプログラム状態情報及び／又は論理的格納容積を含む他の情報を格納するために用いてもよい離隔した格納サービスの実例の動作に関連した付加的詳細は、米国特許出願番号第１２／１８８，９４３号、２００８年８月８日出願、表題：“Ｐｒｏｖｉｄｉｎｇ  Ｅｘｅｃｕｔｉｎｇ  Ｐｒｏｇｒａｍｓ  Ｗｉｔｈ  Ｒｅｌｉａｂｌｅ  Ａｃｃｅｓｓ  Ｔｏ  Ｎｏｎ−Ｌｏｃａｌ  Ｂｌｏｃｋ  Ｄａｔａ  Ｓｔｏｒａｇｅ”、米国特許出願番号第１１／３７１  ，３０４号、２００６年３月８日出願、表題：“Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ  Ｗｉｔｈ  Ｗｅｂ  Ｓｅｒｖｉｃｅｓ  Ｃｌｉｅｎｔ  Ｉｎｔｅｒｆａｃｅ”及び米国仮特許出願番号第６０／７５４，７２６号、２００５年１２月２９日出願の優先権請求、により利用可能で、いずれもが完全に本願明細書に引用されるものとする。さらに、異なる時間での異なる優先順位の異なるプログラムを実行する実施形態に関した付加的詳細は、米国特許出願番号（弁理士整理番号１２０１３７．５９８）、並行出願、表題：“Ｍａｎａｇｉｎｇ  Ｕｓｅ  Ｏｆ  Ｐｒｏｇｒａｍ  Ｅｘｅｃｕｔｉｏｎ  Ｃａｐａｃｉｔｙ”、に含まれ、それらは完全に本願明細書に引用されるものとする。
【００２１】
説明目的で、幾つかの実例及び実施形態が以下に記載され、分散型プログラム実行の管理の特定のタイプが特定様式で提供される。これらの実例は説明目的で提供され、簡潔さのために簡略化されており、発明の技術が多種多様な他の状況において利用できることはいうまでもなく、その幾つかは更に詳細に以下に記載されている。例えば、分散型式でのプログラム実行方法や部分的実行から中間結果を格納して使用する方法の特定の実例が記載されると共に、分散型実行の他のタイプや、中間結果の格納と使用の他のタイプが、他の実施形態において使用できる。さらに、幾つかの実施形態でユーザが指示されたプログラムを分散型式で実行する要求を提出する一方で、他の実施形態では、ＤＰＥサービスの実施形態はこの種の指示されたプログラムの実行を開始しても良く、及び／又はユーザによって指示されたプログラムを分散型式で実行することを（例えば、ユーザについての知識なしに）決定しても良い。さらにまた、少なくとも幾つかの実施形態において、分散型式で実行されない少なくとも幾つかのプログラムと共に、少なくとも幾つかの記載されている技術を使用しても良く、中間結果を格納し、格納された中間結果をプログラムの部分的実行の再開に使用することによってこの種の非分散プログラム実行の部分的実行を終了しても良い。
【００２２】
図１Ａは、多数のユーザによる管理分散型プログラム実行の例を示すネットワーク図である。図１Ａの実例において、多くのユーザ１４０は、ネットワーク１００を通じて分散型プログラム実行サービスシステムマネージャ（「ＤＰＥ  サービス  ＳＭ」又は「ＤＰＥＳＳＭ」）モジュール１１０とＤＰＥサービス（図示せず）の特定の実施形態の機能の幾つか又は全てを提供するＤＰＥＳＳＭモジュール１１０の如きユーザのプログラム実行に利用可能な１つ以上のコンピューティングノード１２０にプログラムの分散型実行を開始すべく相互に作用する。ネットワーク１００は、例えば、リンクしたネットワークの公的なアクセス可能なネットワークであってもよく、インターネットの如き様々な相違した関係者によって、おそらく作動される。他の実施形態において、ネットワーク１００は例えば、非特権ユーザには完全にまたは部分的にアクセス不能な会社や大学ネットワークの如き私的なネットワークであってもよい。更に他の実施形態において、ネットワーク１００はインターネットに及び／又はインターネットからアクセスできる１つ以上の私的なネットワークを含んでも良い。図示した実施形態では、ＤＰＥＳＳＭモジュール１１０及びコンピューティングノード１２０はＤＰＥサービスの一部として、ＤＰＥサービス提供者１０５によって１つ以上のオプションの他の保管ノード１３０と同様に提供され、ＤＰＥＳＳＭモジュール１１０は１つ以上の他のコンピューティングシステム（図示せず）に実行し得る。
【００２３】
幾つかの実施形態において、図示したコンピューティングノード１２０は、ユーザの為のプログラムの分散型実行のためのＤＰＥサービスプロバイダ１０５によって提供され、１つ以上の物理的コンピューティングシステム（例えば、１実施形態の図１Ｂについてより詳細に記載されているような）にホストされる多数の物理的コンピューティングシステム及び／又は多数の仮想マシンを含み得る。各々のコンピューティングノード１２０は１つ以上のプログラムを実行するために利用可能な畿つかの量のコンピューティングリソースを有し、例えば、１つ以上の処理容量（例えば演算処理装置の数及び／又は大きさ）、記憶容量、格納容量、ネットワーク帯域幅容量、その他の組合せで測定できる。幾つかの実施形態において、ＤＰＥサービスプロバイダ１０５は、ユーザの為にプログラムを実行する為に利用可能な同様及び／又は同量のリソースを有する各予め設定されたコンピューティングノードで予め設定されたコンピューティングノードを提供しても良く、他の実施形態においては、ＤＰＥサービスプロバイダ１０５は例えば変動する量及び／又はタイプのコンピューティングリソース（例えば寸法、速度及び／又は演算処理装置のタイプ、演算処理装置の数、メモリ及び／又は格納の量、３２ビット又は６４ビットの如きプラットホーム構成）を有する選択の如き様々な異なるコンピューティングノードの選択を提供する。
【００２４】
図示した実施形態では、様々なユーザ１４０は、ＤＰＥＳＳＭモジュール１１０と相互に作用して要求を作り、様々な情報を特定しても良い。様々な実施形態において、この種の要求及び仕様は、ユーザがＤＰＥサービスのサービスを登録する時点及び／又は後の時間での利用の如く、様々な時間に作られる。幾つかの実施形態において、ＤＰＥＳＳＭモジュール１１０は、ユーザの為に実行する１つ以上のプログラム（例えばプログラム、ソースコード、１つ以上のプログラムのアドレス可能位置、その他）、アカウント情報（例えばユーザー名、課金情報、その他）、使用条件、に関係した情報をユーザが特定できるように、１以上のユーザに対して予約及び／又は登録サービスを提供しても良い。幾つかの実施形態において、ユーザがサービスを予約及び／又は登録するＤＰＥＳＳＭモジュール１１０と相互に対話した後、ユーザはユーザと関連して、及びユーザの為のプログラム実行と共同で使われるべき１つ以上の識別子（例えばキー、トークン、ユーザ名、その他）を発行される。他の実施形態において、ＤＰＥＳＳＭモジュール１１０以外のモジュールは、ＤＰＥサービスの予約及び／又は登録サービスに関連した様々な動作を実行するために提供される。
【００２５】
更に、ユーザはプログラム実行のためのコンピューティングノードの数及び／又はタイプ、最小数及び／又は最大数の使用するコンピューティングノード、要求の失効時間、好適な実行時間及び／又は実行の期間、実行のための多数の優先順位の選択（例えば優先順位の増加と共に増加する関連した手数料）等を特定するなどして、例えば様々な実施形態で様々な方式でプログラムの実行のための要求を構成するためにＤＰＥＳＳＭモジュール１１０と相互に作用しても良い。さらに又、幾つかの実施形態において、ユーザはＤＰＥＳＳＭモジュール１１０と対話して特定の数のコンピューティングノードでの１つ以上のプログラムの即時の実行を要求し、及び／又は１つ以上の未来時間でこの種の実行を予定ができ、ＤＰＥＳＳＭモジュール１１０は、特定の時間で又は１つ以上の特定の基準が満たされる（例えば、指定の数のコンピューティングノードが利用できると決定される）時の特定の数のコンピューティングノードでの要求された実行を開始する。
【００２６】
図示した実施形態において、ＤＰＥサービスは、コンピューティングノード１２０での多数のユーザのためのプログラムの分散型実行を管理するために様々な機能性を提供する。例えば、先述の通り、特定のユーザは、モジュール１１０が提供するＧＵＩ又はＡＰＩを利用しても良く、示された入力データを使用して示されたプログラムの実行のための要求を提出し、オプションによって様々な構成情報を併用しても良い。プログラムの実行のための要求が受信された後、ＤＰＥＳＳＭモジュール１１０は様々な方式の要請された実行のために用いる利用可能なコンピューティングノード１２０のどれかを選択することができる。例えば、幾つかの実施形態において、モジュール１１０は例えば利用可能なコンピューティングノードのプールから無作為に選択して充分なリソースを伴う利用可能なコンピューティングノードのいずれからでも、適当な数のコンピューティングノードを単純に選べる。他の実施形態において、例えば１つ以上のコンピューティングノードの永続的利用可能性の予測長及び／又は尤度、１つ以上の特定のコンピューティングノードと１つ以上の他のコンピューティングノードとの物理的な近接度、１つ以上の特定のコンピューティングノード及び／又は１つ以上の他のコンピューティングノードの地理的な所在の如き、１つ以上の他の因子を基礎として１つ以上の特定のコンピューティングノードが選択されても良い。更に、要求が受信された後、ユーザより供給される情報を使用して及び／又は示されたプログラムの設計について前もって得られた情報に基づく自動方式によって、モジュール１１０は更に示されたプログラムをどのように分割して複数の選択されたコンピューティングノードで実行すべき複数の実行ジョブとするかを決定できる。同様に、少なくとも幾つかの実施形態及び状況において、モジュール１１０は示された入力データをどのように分割して多数の実行ジョブ用の多数のサブセットとするかを決定できる。例えば、幾つかの状況において、各実行ジョブは示されたプログラムの完全なコピーの実行を含むが、入力データの特定のサブセットでは、一方で、他の実行ジョブは同様に他の入力データサブセットで全プログラムコピー機能を実行する。
【００２７】
実行ジョブが様々なコンピューティングノードで実行するように、実行ジョブは少なくとも幾つかの実施形態中のコンピューティングノードに、様々な情報を局所的に格納する。更に、ＤＰＥサービスは、プログラムの実行及び／又は他の目的と関連した情報を格納するためにＤＰＥサービスにより利用される１つ以上の格納ノード１３０をオプションとして提供しても良い。更に詳細に他の場所で議論されるように、格納ノード１３０に格納されるこの種の情報は、様々なプログラムのための様々な実行ジョブの部分的実行の中間状態に関する状態情報を含んでも良く、幾つかの実施形態では、完了した実行ジョブによって生成される出力データをオプションとして含んでも良い。更に又、より詳細に他の場所で議論されるように、幾つかの実施形態において、モジュール１１０は１つ以上の実行ジョブの部分的実行の中間状態を、実行ジョブの部分的な実行が終了する前に永続的に格納するべく指示作用を提供しても良い。部分的な実行用のこの種の中間状態情報は、部分的な実行が発生したコンピューティングノードから離隔して、この種の中間状態情報を任意の格納ノード１３０の１つ以上へコピーすることによって及び／又はネットワーク１００を経てアクセス可能な１つ以上の任意のリモート格納サービス１５０を使用することによって様々な方式で格納できる。幾つかの実施形態において、モジュール１１０はコンピューティングノードから、離隔した永続的格納場所への中間状態情報の格納を、モジュール１１０が部分的な実行の中間状態について追尾する情報を使用することによってコーディネートし、他の実施形態において、中間状態情報の永続的な格納を実施する際のアクティビティは局所的に実行ジョブの実行を管理するためのコンピューティングノードで実行しているマネジメントソフトウェアによって、代わりに実行できる。代替的に、実行ジョブの実行がそれ自身の中間実行状態を格納できる場合、モジュール１１０は代わりに実行ジョブを通知して、それ自身の実行を遮断する前にそれ自身の中間実行状態格納活動を実施できる。
【００２８】
実行ジョブの部分的実行の中間状態が永続的に格納され、部分的実行が終了すると、時間をおいて、実質的には直後にでも（例えば、実行ジョブの実行が第１コンピューティングノードから第２コンピューティングノードまでの移動である場合、中間状態情報を格納し、検索するのと同程度に急速に）部分的実行はその中間状態から再開されても良く、または、その代わりにより長い期間を経た後、再開しても良い（例えば、予定時間後、１つ以上の指定された基準が満たされた後の時点、等）。実行再開の時点で、格納された中間状態情報は永続的な格納場所から検索され、実行ジョブ実行が再開できるコンピューティングノードに局所的に格納されても良く、別に利用可能としても良い。また、実行ジョブの部分的実行は様々な形で再開しても良く、前以って完了した動作のサブセットを不実施と指示しても良く（例えば、実行ジョブがこの種の機能を支持する場合）、以前には完了しなかった動作のサブセットを実施するのみのために実行ジョブを改良しても良い。実行ジョブ実行の保留と再開に関連した付加的な詳細は、他の場所に記載する。
【００２９】
図１Ｂは、ＤＰＥサービスが多数の物理的コンピューティングシステムを含む１つ以上のデータセンターを使用して提供し得る１実施形態を例示している。特に、図１Ｂは、ＤＰＥサービスのＤＰＥＳＳＭモジュール１８０が実例データセンター１７０のユーザの為にプログラムの分散型実行を管理する実施形態を例示するネットワーク図である。実例データセンター１７０は、データセンター１７０の外部のインターネット１９６に接続され、この例では例えば私的ネットワーク１９４を経たコンピューティングシステム１９０及びコンピューティングシステム１９２の如き様々な外部のコンピューティングシステムへのアクセスを提供する。私的ネットワーク１９４は、例えば、私的ネットワーク１９４外部の非特権的なコンピューティングシステムからは完全に又は部分的にアクセスできない共同ネットワークであってもよい。コンピューティングシステム１９２は、例えば、直接インターネットに（例えば、電話又は電線モデム、デジタル加入者線（「ＤＳＬ」）、その他を経て）接続するホームコンピューティングシステムを含んでも良い。また、１つ以上の他のデータセンター１９８がインターネット１９６を経てデータセンター１７０に接続していることが例示され、少なくとも幾つかの実施形態ではＤＰＥサービスによって使われても良い。例えば、特定のプログラムの分散型実行は、多数のデータセンター又は他の相違した地理的な場所でのコンピューティングノードを使用した同時実行及び／又は順次実行を含み得るが、実行ジョブの実行を、或る地理的な場所でのコンピューティングノードから他の地理的な場所でのコンピューティングノードへ移動することも含む。
【００３０】
実例データセンター１７０は、多数の物理的ホストコンピューティングシステム１７５、物理的コンピューティングシステム１８２、オプションの格納システム１６０及びＤＰＥサービスの１実施形態のＤＰＥＳＳＭモジュール１８０を含む。この例では、ホストコンピューティングシステム１７５は、それぞれ複数の仮想マシン１７７を提供し、それらの仮想マシン（例えばハイパバイザー又は他の仮想マシンモニタ）を管理するために仮想マシン（「ＶＭ」）マネージャコンポーネント１７９を有し、コンピューティングシステム１８２の幾つか又は全部は、同様に１つ以上のこの種の仮想マシン及び／又はＶＭマネージャコンポーネント（図示せず）を持ち得る。代替的に、他の実施形態において、データセンターでの物理的ホストコンピューティングシステムの幾つか又は全てはいかなる仮想マシンも提供せず、代わりにＤＰＥサービスの末端ユーザ顧客の為に、直接１つ以上のプログラムを実行しても良い。また、幾つかの実施形態において、物理的ホストコンピューティングシステム１７５及び／又は物理的コンピューティングシステム１８２は、コンピューティングシステムでの実行ジョブの実行を管理するためにそれぞれ他のマネジメントソフトウェア（例えばＤＰＥサービスの管理モジュール）を含んでも良い。更にまた、幾つかの実施形態において、多様なコンピューティングシステム１７５及び１８２は、異なる能力を持ち、使用のための異なる関連した手数料を有し、異なるタイプのユーザープログラム（例えば、異なるサイズの仮想マシンソフトウェアイメージインスタンス、異なるパターンのＩ／Ｏ、メモリアクセス及びネットワーク利用の如き異なるタイプのリソース規格及び／又はコンピューティングリソース使用プログラム）をサポートしても良い。そうであれば、１つ以上のこの種のファクタは、特定のプログラムを実行するためにどのコンピューティングシステムを選択するかについて、制約及び／又は優先として更に利用し得る。オプションの格納システム１６０は、また、付加的格納（例えば、時々コンピューティングノードとして使える）付きのコンピューティングシステム、コンピューティングノードとして使わないネットワーク格納装置、その他の如き様々な形態を有しても良い。実例データセンター１７０は、内部ネットワーク１７２を更に含むが、内部ネットワーク１７２はスイッチ、エッジルーター、コアルータ、及び内部ネットワーク１７２に接続しているコンピューティングシステム１７５及び１８２、格納システム１６０及びＤＰＥＳＳＭモジュール１８０の如き多数のネットワーキングデバイス（図示せず）を含んでも良い。
【００３１】
図示したＤＰＥＳＳＭモジュール１８０は、コンピューティングシステム１７５及び１８２を使用してプログラムの分散型実行を管理するために少なくとも幾つかの記載した技術を実行し、オプションとして格納システム１６０に少なくとも幾つかのプログラム実行結果を永続的に格納する。特定のコンピューティングノード又はシステムがプログラムの１つ以上の実行ジョブを実行する為に選択される場合、ＤＰＥＳＳＭモジュール１８０は幾つかの実施形態において、選択されたコンピューティングノード／システム用プログラムの実行を制御するＶＭマネージャコンポーネント又は他のマネージャコンポーネントと対話して実行ジョブの実行を開始しても良く、代替的には直接選択されたコンピューティングノード／システムで実行ジョブを実行しても良い。ＤＰＥサービスのユーザは、コンピューティングシステム１９０又は１９２、若しくは他のデータセンター１９８中のコンピューティングシステムの如き様々なコンピューティングシステムを使用してＤＰＥＳＳＭモジュール１８０と対話しても良い。また、コンピューティングシステム１９０又は１９２の幾つか若しくは他のデータセンター１９８の一つは、ＤＰＥサービスによってアクセス可能で、少なくとも永続的に幾つかの中間結果または他の情報を格納する為に使われる１つ以上のネットワークでアクセス可能なリモート格納サービス（図示せず）の提供のために用いてもよい。
【００３２】
当然のことながら、図１Ｂのデータセンターは図示の目的だけで提供され、ＤＰＥサービス及び他のソフトウェア実行サービスの実施形態は他の実施形態の他の様式において提供され得る。例えば、ＤＰＥＳＳＭモジュール１８０は、代わりにコンピューティングシステム１９０、１９２又はデータセンター１９８の如きデータセンター１７０外部の１つ以上の他のコンピューティングシステムを使用して提供され得る。さらに、少なくとも幾つかの実施形態において、分散型実行が提供されるプログラムは、１つ以上の仮想マシンコンピューティングノードで起動可能又はロード可能な仮想マシンイメージの如き実行可能なソフトウェアイメージを含んでも良く、それぞれオペレーティングシステムソフトウェア、１つ以上のアプリケーションプログラムのためのソフトウェア及び／又は構成情報、その他を含んでも良い。少なくとも幾つかのそのようなプログラムは、ＤＰＥサービス及び／又は格納システム１６０のユーザによって格納されても良く、及び／又はリモート格納サービスを使用して格納されても良く、もしそうならば、それらがユーザの為に実行され又は別に始められる場合は、ＤＰＥサービスによって検索されるかまたはＤＰＥサービスに供給される。
【００３３】
図２Ａ及び２Ｂは、ＤＰＥＳＳＭモジュールの実施形態によって自動的に実行できるような多数のコンピューティングノードでの分散型プログラム実行を管理する特定の例を図示している。例えば、図２Ａに関して、幾つかのコンピューティングノード２０５及び２３０を例示しているが、これらはプログラムＸとして言及しているプログラム例の分散型実行に現時点で関連している。この例では、ＤＰＥサービス（図示せず）はマスターノード２０５を創成し、プログラムＸ（例えば、マスターノード２０５又は他の場所で、対応する図示せぬソフトウェアモジュールの管理下で実行）の進行中の実行に関して、様々なステータス情報を格納するためにプログラムＸの分散型実行を管理する際の補助を図った。コンピューティングノード２３０は、この例では、プログラムＸの分散型実行に使われるべく選択される複数のコンピューティングノードであり、４種のコンピューティングノード２３０ａ〜２３０ｄがこの例で図示されている。
【００３４】
この例では、マスターノード２０５は、プログラムＸの分散型実行に関して様々な実行状態情報２１０を維持し、各コンピューティングノード２３０での実行ジョブの実行状態等を追尾する。特に、この例では、それぞれの線又は情報２１０の記載は、特定のコンピューティングノードでの特定の実行ジョブのための特定の動作の実施に対応し、この例で追尾中の情報はコンピューティングノードの識別２１０ａ、実行ジョブ２１０ｂ、動作２１０ｃ、動作の実施状態２１０ｆ、動作によって使われるべき入力データ２１０ｄ、動作の実施によって生成されるべき出力データ２１０ｅ、及びオプションとして様々な他の情報２１０ｇを含む。このような他のステータス情報は、例えば、動作（例えば、動作Ｂは動作Ａの完了後まで実行不可で、動作Ｃ及びＤは同時に実行されるべきである等）間の依存度または他の相互関連性についての情報、実施中の動作の実施完了予測情報（例えば、予測完了時刻、完了までの予測時間、動作の完了パーセンテージ、実施されるべく残存している動作のパーセンテージ等）、未だ実施されていない動作の実施開始予測についての情報を含んでも良い。
【００３５】
この例では、複数のコンピューティングノード２３０はノードＡ  ２３０ａを含み、実例実行ジョブＪ−Ａの実行はコンピューティングノード２３０ａで開始している。この例では、実行ジョブＪ−Ａは、少なくとも実例動作Ａ０１、Ａ０２、Ａ０３及びＡ０４を含む実行すべき動作を含み、状態情報２１０の最初の４記載はこの実行ジョブ及びコンピューティングノード用の動作と一致する。この例では、動作Ａ０１は既に完了し、その実施のための入力データＤ−Ａ０１を使用して、出力データＤ−Ａ１１を生成した。動作Ａ０３は入力データとしてその出力データＤ−Ａ１１を使用し、出力データＤ−Ａ２１を生成するために実施されることで進行中であるが、その出力データは未完成である。同様に、動作Ａ０２は進行中で、入力データＤ−Ａ０２を使用し、ゆくゆくは出力データＤ−Ａ１２を生成する。動作Ａ０４は入力データとしてその出力データＤ−Ａ１２を使用するので、その入力データ及びコンピューティングノード２３０ａがその実施のために利用可能時には動作Ａ０４は待ち行列中で、実施準備状態であるが、動作Ａ０４の実施はまだ開始していない。
【００３６】
コンピューティングノード２３０ａに表示される実例情報は、状態情報２１０と対応する。特に、この例では、コンピューティングノード２３０はノードに局所的に格納される様々な情報を図示するが、他の情報はこの例では図示されず（例えば、実行中の実行ジョブや実施中の動作についての局所的に格納された情報）、局部格納がどの様に実行されるかに関する詳細は示されない。特に、ノード２３０ａで局所的に格納された情報例は、データ２３５ａ及び２３５ｂを含む実行ジョブＪ−Ａの実行のために供給される入力データを含む。さらに、実施された動作からの出力であった中間データ結果は、完了した動作Ａ０１によって生成されるＤ−Ａ１１出力データ２４０ａを含む。さらに、幾つかの実施形態において、部分的出力データ２４５ａ及び２４５ｂは、ノード２３０ａで生成され、同様に進行中の動作（例えば、この例では動作Ａ０２及びＡ０３）の実施を反映するために格納されても良いが、他の実施形態では、この種の部分的な出力データは対応する動作の実施が完了する迄、この様にはノード２３０ａに格納されない。
【００３７】
状態情報２１０の他の記載は、他のコンピューティングノード２３０ｂ、２３０ｃ及び２３０ｄの状態と対応する。特に、ノードＢ  ２３０ｂに関して、ここには入力データ２３５ｃ及び２３５ｄ、完了した動作Ｂ０１からの出力データ２４０ｃ及び進行中の動作Ｂ０２の実施に対応するオプションの部分的出力データ結果２４５ｃを格納する。同様に、ノードＣ  ２３０ｃは、入力データ２３５ｅ及び２３５ｆ、実施が完了する動作Ｃ０１からの出力データ２４０ｅ及びオプションとして部分的な中間出力結果２４５ｅを格納する。ノードＤ  ２３０ｄは、同様に入力情報２３５ｇ及び２３５ｈを格納し、オプションとして部分的な中間の出力結果２４５ｇ及び２４５ｈを格納するが、この例では、完了されていない実行ジョブＪ−Ｄの動作に基づいたいかなる完成出力データも含まない。
【００３８】
さらに、この例では、マスターノード２０５も、完成した出力データ２４０ａ、２４０ｃ及び２４０ｅのコピー２２０ａ、２２０ｂ及び２２０ｃをオプションとしてそれぞれ含み、例えば完成した出力データの永続的な格納を提供する。他の実施形態において、この種の中間出力データは、コンピューティングノード２３０の外部には格納されず、若しくは代わりにマスターノード２０５以外の場所のコンピューティングノード２３０の外部に格納しても良い。
【００３９】
図２Ｂは、図２Ａの実例に続くもので、特に実例コンピューティングノード２３０に関して起こり得る時間上の変更を図示する。特に、図２Ｂの実例において、コンピューティングノード２３０ａ、２３０ｂ、２３０ｃ及び２３０ｄは、図２Ａにおいて図示した時間の直後と対応する最初の時間１で左側に示され、コンピューティングノードの後のバージョンは右側の遅い時間３で図示されている。
【００４０】
この例では、コンピューティングノードＮｏｄｅ  Ａ  ２３０ａは時間１と時間３との間の実行を継続し、実行ジョブＪ−Ａの動作Ａ０２は時間３で完了してノード２３０ａに格納すべき出力データ２４０ｂを惹起する。例えば、部分的なデータ２４５ａが時間１でノード２３０ａにオプションとして格納される場合、出力データ２４０ｂは時間１と時間３との間で発生する動作Ａ０２の付加的実施を反映するためにその部分的なデータ２４５ａの改質によって生成し得る。さらに、時間３でのコンピューティングノード２３０ａは、オプションの部分的出力データ２４５ｊを含み、一旦出力データ２４０ｂが利用できるならば、実施され始めていた動作Ａ０４に対応する。さらに、時間１でのノード２３０ａのバージョンに関して、入力データ２３５ａはオプションとして示され、特定の入力データは動作Ａ０１の実施で使われたことを反映し、それが実行ジョブＪ−Ａの他の動作によってもはや必要でない場合、オプションとしてノード２３０ａから削除され得る。同様に、時間３でのノード２３０ａのバージョンに関して、その時の動作Ａ０２の更なる完了に基づいて、入力データ２３５ａと２３５ｂの両方はノード２３０ａからオプションとして除去されるとして示されている。
【００４１】
ノードＡ  ２３０ａが時間１と時間３との間の期間に実行ジョブＪ−Ａの実行を継続する場合、他のコンピューティングノード２３０ｂ、２３０ｃ及び２３０ｄは他のアクティビティに従事しているものとして図示している。例えば、ノードＤ  ２３０ｄに関して、ＤＰＥサービスは、時間１でのノード２３０ｄから実行ジョブＪ−Ｄの実行を、時間３での相違したコンピューティングノードＺ  ２３０ｚに移動することを決定する（この例では時間１に関して実質的に即時、数秒後又は数分後でもよく、若しくは代わりに数時間又は数日後でも良い）。特に、この例では、ノード２３０ｄは実行ジョブＪ−Ｄを他のコンピューティングノード２３０より遅い速度で実行しており（例えば、過利用による）、これは急いで実行ジョブのより敏速な実行を実施できる他のコンピューティングノード２３０ｚへ移動した。例えば、図２Ａで図示した時点では、ノード２３０ｄは実行ジョブＪ−Ｄの動作のいずれもの実施を未だ完了してなかった。この例では、しかしながら、実行ジョブＪ−Ｄの実行を終了するために決定される時間（例えば、時間１も直前の時点で）、状態情報２１０ｇ（図示せず）は利用可能で動作Ｄ０２の実施が完了に近いことを示し、（例えば、動作の実施の完了割合若しくは完了迄の予測時間に基づく）、一方動作Ｄ０１の実施は完了に近くはない。従って、ＤＰＥサービスは動作Ｄ０２の実施の完了を避けるために実行ジョブＪ−Ｄの終了遅延を決定するので、時間１でのノード２３０ｄは、動作Ｄ０２の実施の完了と対応するノード２３０ｄからの中間出力データ２４０ｈを含む。
【００４２】
時間１でノード２３０ｄの実行ジョブＪ−Ｄの実行を終了するために、時間１でノード２３０ｄに局所的に格納され、少なくとも幾つかのデータは、ノード２３０ｄ及びノード２３０ｚから隔れた場所に永続的に格納され、その結果データは時間３でノード２３０ｚへ移動する。特に、この例では、移動すべき情報は格納容積２５０ｂに一時的に格納し、格納容積２５０ｂに格納されるデータはノード２３０ｄからの中間出力データ２４０ｈのコピー２５０ｈを含む。同様に、ノード２３０ｄが動作Ｄ０１の進行中の実施と対応するオプションの部分的出力情報２４５ｇを含む場合、その部分的出力情報のコピー２５０ｇは、幾つかの実施形態の格納容積２５０ｂにオプションとして格納され、コンピューティングノード２３０ｚで動作Ｄ０１の再開が可能な場合、部分的出力データを使用して、動作の実施が停止した時点からその実施を続行する。さらに、格納容積２５０ｂはこの例では図示しないノード２３０ｈからオプションとして他の情報を格納することができ、再開された実行用に使われるノード２３０ｄ上の入力データ（例えば入力データ２３５ｇ）及び／又は実行ジョブＪ−Ｄについてのソフトウェア命令または他の情報（例えば、残存する動作の如き、ジョブの動作の幾つか又は全てを実施するために用いるべき実行ジョブの部分）も利用できる。
【００４３】
ノード２３０ｄからの中間出力データが論理的格納容積２５０ｂに格納された後、時間３でコンピューティングノード２３０ｚにデータの局所的バージョンを創成する為にそれを利用し、実行ジョブＪ−Ｄの再開実行を容易にし得る。論理的格納容積２５０ｂが実行ジョブＪ−Ｄについて及び／又は入力データ２３５ｇについての情報を格納しない場合、この種の情報は検索され、実行ジョブＪ−Ｄの実行が開始された時にかかる情報をノード２３０ｄに供給する為の元のソースの如き他のソースからのノード２３０ｚに局所的に格納され得る。代替的に、他の実施形態において、ノード２３０ｚがノード２３０ｄと並行して利用可能な場合、先述の情報の幾つか又は全ては中間論理的格納容積２５０ｂを使用せずにノード２３０ｄから直接ノード２３０ｚにコピーできる。
【００４４】
ノード２３０ｄと同様に、ＤＰＥサービスは、時間１でノード２３０ｃからの実行ジョブＪ−Ｃの実行を保留することを決定し、後の時間でノード２３０ｃ又は他のノードでの実行を再開させ得る。この例では、実行ジョブＪ−Ｃの実行の再開は、時間３では起こらなかった。実行を保留するために、類似のアクションをノード２３０ｄに関して先述したようにノード２３０ｃに施し、ノード２３０ｃ用に創成した論理的格納容積２５０ａのノード２３０ｃからの中間出力データ２４０ｅのコピー２５０ｅを格納することも含めて行われた。論理的格納容積２５０と同様に、論理的格納容積２５０ａは、部分的出力データ２４５ｆのコピー２５０ｆ、実行ジョブＪ−Ｃについての情報及びノード２３０ｃによって使用した入力データの幾つか又は全てを更にオプションとして格納できる。実行ジョブＪ−Ｃの実行が後で再開されるときに、実行を再開するために用いるコンピューティングノードは格納容積２５０ａに格納した様々な情報及び他のソースからのオプションの情報の局所的コピーを同様に受信する。
【００４５】
この例では図示されていないが、時間１でのノード２３０ｃの実行ジョブＪ−Ｃの保留は、その時のプログラムＸの全ての実行ジョブを保留することの一部として実施できる。もしそうであれば、プログラムＸの実行ジョブを現在実行している他のコンピューティングノード２３０のそれぞれのための部分的な実行状態情報を永続的に格納することに同様のアクションを施す。さらにまた、マスターノード２０５からの状態情報２１０は、プログラムＸの実行の再開の為に後の使用に備えて同様に永続的に格納しても良い。さらに、プログラムＸの実行のこの種の後の再開が起こるときに、様々な様式で実施しても良い。例えば、プログラムＸの実行の再開は、以前の使用と同一のノード２３０の幾つか又は全てに実施し、或いは代わりに完全に異なるコンピューティングノードに実施しても良い。さらに、再開した実行の為に使用するコンピューティングノードの数及び／又は能力は、実行の終了前に使用するノード２３０とは異なり、より多くのノード又はより少ないノードを含んでも良い（例えば、再開した実行の為に使用するコンピューティングノードの規模を変更することの一部として、従来の実行速度より高速か低速で再開した実行を継続する）。さらにまた、この例では図示されていないが、幾つかの実施形態及び状況において、第１ユーザにプログラムの分散型実行を開始させ、第２ユーザにそのプログラムの実行の第１保留を開始させ、第３ユーザにそのプログラムの第１再開実行を開始させる等、異なるユーザ又は他の加入者はプログラムの分散型実行の異なる部分に関係しても良い。この種の２以上の異なるユーザは、例えば、単一の加入者を代表し、同一の加入者を代表せず、１つ以上の他の様式において合併し（例えば、共同作業に基づく）、他のユーザ等のための特定のアクションを実施することを認可しても良い。
【００４６】
ノードＢ  ２３０ｂは、対応する格納容積にノード２３０ｂの少なくとも幾つかの情報を永続的に格納する機会が無く、ノードＢが実行の期間に失敗する如く、早期に終了した実行ジョブＪ−Ｂの実行の例を例示する。この例では、時間１で動作Ｂ０１は完了し、出力データＤ−Ｂ１１  ２４０ｃを生成し、図２Ａの実例ではノード２３０ｂからマスターノード２０５にコピー２２０ｂをオプションとして遠くに格納させる。従って、ノード２０５の表現はそのコピー２２０ｂを格納する図２Ｂにて示され、その格納した情報は時間３で他のコンピューティングノードＹ  ２３０ｙの実行ジョブＪ−Ｂの実行を再開するために用いてもよい。しかしながら、時間１で部分的出力データ２４５ｃがノード２３０ｂに存在して、動作Ｂ０２の部分的な実施に該当する場合、この種の情報はこの例では保存されず、そしてこのように、部分的な出力データを再生させる実行再開の間に対応する動作Ｂ０２を最初から再実施する必要があり、ノード２３０ｙでのオプションの出力データ２４５ｌと共に図示する。同様に、実行ジョブＪ−Ｃの命令又は他の部分についての入力データ２３５ｄ及び情報の如き、対応する格納容積２５０ａ及び２５０ｂに格納できるノード２３０ｂに格納された他の情報は保存できず、そしてこのように、時間３でのノード２３０ｙ上の入力データ２３５ｄ及び実行ジョブ情報（図示せず）は、実行ジョブＪ−Ｂの実行が元来開始した時のノード２３０ｂと同様に外部ソースから得られる。
【００４７】
図２Ｂの例では図示されていないが、その実行の管理された終了（例えば、或る期間プログラムＸの実行の保留を反映する如き、プログラムＸによってまたはＤＰＥサービスによる自動的決定に関連するユーザからの要求に応答）に基づくか、又はマスターノードの失敗に起因して、マスターノード２０５も時々利用できなくなることがあると更に認められる。マスターノード２０５が利用できなくなると、それが他の場所で永続的に格納されない場合、現在の実行状態情報２１０もまた利用できなくなることがある。従って、少なくとも幾つかの実施形態において、状態情報２１０も、マスターノード２０５のこの種の実行の終了又は他の利用不能の前に、ノード２３０ｃと２３０ｄ及び格納容積２５０ａと２５０ｂ用に先述したと同様に、リモート論理容積又は他の永続的格納場所に格納できる。さらにまた、置換マスターノードがプログラムＸの再開した分散型実行を管理するために開始される時、この種の格納された状態情報２１０は後に（従来のマスターノード２０５と同一のコンピューティングシステムで若しくは代わりに異なるコンピューティングノードで）検索され、使用されても良く、状態情報２１０が格納された時の中間の部分的な実行状態からプログラムＸの実行の再開を容易にする。
【００４８】
図２Ａ及び図２Ｂの実例の情報が図示の目的だけに提供され、様々な詳細は、要約様式で示されるか又は理解のために図示されなかったことは言うまでも無い。さらにまた、４種のコンピューティングノード２３０及び４種の実行ジョブだけを例示したが、実際の実施形態では実際の数量が非常に大きく、何百、何千又は何百万ものコンピューティングノード及び／又は実行ジョブを含むことも言うまでも無い。
【００４９】
さらに、前述のように、プログラムの分散型実行の管理は、様々な実施形態の様々な様式で実施しても良い。例えば、プログラムの実行にどのコンピューティングノードを使用するかは、要求で特定されるいかなる優先及び／又は要求若しくは別段に特定されるプログラム及び／又は関連したユーザ（例えば、登録等の時間）を含み様々な方式で決定される。例えば、プログラムの実行のための好適な及び／又は必要なリソース（例えば、メモリ及び／又は格納、ＣＰＵのタイプ、周期又は他の計量的特性、ネットワーク容量、プラットホームのタイプ等）のために規準を定める際、使用する適当なコンピューティングノードの選択は、少なくとも部分的にはコンピューティングノードがそれらのリソース規準を満たすために利用できる充分なリソースを有するかどうかに基いて行われる。プログラム実行サービスを実行する計画を実行し、構成することに関連した付加的詳細は係属中の米特許出願番号第１１／３９５，４６３号、２００６年３月３１日出願、表題：”Ｍａｎａｇｉｎｇ  Ｅｘｅｃｕｔｉｏｎ  ｏｆ  Ｐｒｏｇｒａｍｓ  ｂｙ  Ｍｕｌｔｉｐｌｅ  Ｃｏｍｐｕｔｉｎｇ  Ｓｙｓｔｅｍｓ”、に全部含まれており、これは本願明細書に引用される。
【００５０】
さらに、先述の通り、少なくとも幾つかの実施形態において、自動的に終了される実行ジョブの実行はＤＰＥサービスによって後の時間に自動的に再開されても良い。例えば、そういったケースにおいて、ＤＰＥサービスは、実行が取り消されるか又はユーザによって明示的に終了されるまで、要請された実行の完了まで、特定時間の発生まで（例えば、失効時間の発生まで、蓄積実行時間の発生まで等）、特定数の実行の発生まで、際限なく等、この種の実行ジョブを実行し続けることができる。さらに、少なくとも幾つかのこれらの実施形態において、自動的に終了される少なくとも幾つかの実行ジョブはユーザの為にプログラムの実行容量の充分な量が実行の継続のために再び利用可能となる将来時間に自動的に再開され得る。
【００５１】
幾つかの実施形態において、料金はＤＰＥサービスの利用と関連し、ＤＰＥサービスはそのユーザによる１つ以上の料金の支払いと引きかえにユーザの為にプログラムの分散型実行を実施しても良い。たとえば、幾つかの実施形態において、料金は１つ以上のプログラムを実行する為に割り当てられる分散型プログラムの実行容量の量及び／又はタイプに基づいて、例えば１つ以上の演算処理装置、メモリの量、格納の量、ユーザのプログラム実行に割り当てられる、ネットワークリソースの量等に基づいて、ユーザに課金されても良い。幾つかの実施形態において、料金は、プログラム実行のために用いるコンピューティングリソースの様々な特性の如き他の要因、ＣＰＵ能力或いは性能、プラットホームのタイプ（例えば３２ビット、６４ビット等）等に基づいてもよい。幾つかの実施形態において、料金はサービスの使用当たりの価格、コンピューティングサービスが利用される１時間当たりの価格、使用する格納当たりの価格、内及び／又は外へ転送されるデータ当たりの価格等様々な使用要因を基礎として課金されてもよい。少なくとも幾つかの実施形態において、ＤＰＥサービスのプロバイダは、複数ユーザの為に１つ以上の様々なプログラムの分散型実行のためのサービスの階層、タイプ及び／又はレベル若しくは機能性を提案しても良く、幾つかのそういった実施形態において、様々な料金は、さまざまな階層、タイプ及び／又はサービスのレベルと関連し得る。分散型プログラム実行サービスに関する様々な料金に関連した付加的詳細は係属中の米特許出願番号第１１／９６３，３３１号、２００７年１２月２１日出願、表題：”Ｐｒｏｖｉｄｉｎｇ  Ｃｏｎｆｉｇｕｒａｂｌｅ  Ｐｒｉｃｉｎｇ  ｆｏｒ  Ｅｘｅｃｕｔｉｏｎ  ｏｆ  Ｓｏｆｔｗａｒｅ  Ｉｍａｇｅｓ”、に全部含まれており、これは本願明細書に引用される。
【００５２】
さらにまた、更に詳細に他の場所で議論されるように、機能性の様々な他のタイプは、様々な実施形態のＤＰＥサービスによって提供され、利用されても良い。
【００５３】
図３は、分散型プログラム実行を管理するための技術実施に適切なシステムの実施例を例示するブロック図である。特に、図３は分散型プログラム実行サービスシステムマネージャモジュールの実施形態の実行に適しているサーバコンピューティングシステム３００を、様々なユーザコンピューティングシステム３５０、コンピューティングノード３６０及び他のコンピューティングシステム３８０と同様に例示している。図示した実施形態において、サーバコンピューティングシステム３００は、ＣＰＵ  ３０５、様々なＩ／Ｏコンポーネント３１０、格納装置３２０及びメモリ３３０を含むコンポーネントを有する。図示したＩ／Ｏコンポーネントは、ディスプレイ３１１、ネットワーク接続３１２、コンピュータ可読のメディアドライブ３１３及び他の入出力デバイス３１５（例えばキーボード、マウス、スピーカ等）を含む。さらに、図示したユーザコンピューティングシステム３５０はサーバコンピューティングシステム３００のそれらと同様にＣＰＵ  ３５１、Ｉ／Ｏコンポーネント３５２、格納装置３５４及びメモリ３５７を含むコンポーネントを有する。他のコンピューティングシステム３８０及びコンピューティングノード３６０もまた、それぞれサーバコンピューティングシステム３００に関して例示したコンポーネントに類似のコンポーネントの幾つか又は全部を含んでも良いが、この種のコンポーネントは簡潔さを考慮してこの例では図示しない。
【００５４】
分散型プログラム実行サービスシステムマネージャモジュール３４０の実施形態はメモリ３３０において実行しており、ネットワーク３９０を経て（例えば、インターネット及び／又はワールドワイドウェブ、私的な携帯電話ネットワーク等を経て）コンピューティングシステム３５０と３８０及びコンピューティングノード３６０と対話する。この実施形態において、ＤＰＥＳＳＭモジュール３４０は、ＤＰＥＳＳＭモジュール３４０によって管理されるＤＰＥサービスと共同するユーザコンピューティングシステム３５０と対話している様々なユーザ（図示せず）によるコンピューティングノード３６０でのプログラムの分散型実行を管理することに関連した機能性を含む。他のコンピューティングシステム３５０と３８０及びコンピューティングノード３６０は、ＤＰＥＳＳＭモジュールを有する対話の一部として様々なソフトウェアを実行できる。例えば、ユーザコンピューティングシステム３５０は、ウェブブラウザ３５８又はメモリ３５７中の他のソフトウェアを実行してＤＰＥＳＳＭモジュール３４０と対話し、様々な方式で１つ以上のコンピューティングノード３６０でのそれらのシステムのユーザの為にプログラムの実行を構成及び／又は要求しても良い。さらに、より詳細に他の場所で議論されるように、１つ以上のユーザコンピューティングシステム３５０のユーザは、ＤＰＥＳＳＭモジュール３４０と対話して様々な他のタイプのアクションを実行しても良い。
【００５５】
ＤＰＥＳＳＭモジュール３４０の動作に関連した様々な情報は、プログラムを実行するコンピューティングノードの構成に関連した情報３２２、分散型プログラム実行サービスのユーザについての情報３２８、完了されたプログラムの実行から、最終的な実行結果を含む情報３２４、及び、様々なプログラムの部分的実行の中間状態について、ステータス情報を格納する情報３２６を含めて格納装置３２０に格納される。さらに、様々な中間状態情報及び他の情報は様々な様式で永続的に格納され、更に詳細に他の場所で議論されるように、格納先はサーバコンピューティングシステム３００の格納装置３２０、他のコンピューティングシステム３８０、若しくは他のコンピューティングノード／システム又は格納ノード／システム（図示せず）を含む。
【００５６】
ＤＰＥＳＳＭモジュール３４０が１つ以上のコンピューティングノード３６０上の１つ以上のプログラムを実行するために要求（又は他の指示）を受信した後、ＤＰＥＳＳＭモジュール３４０は１つ以上のプログラムの分散型実行を実施して、それらのコンピューティングノード３６０上のそれらのプログラムの実行ジョブの実行を開始するコンピューティングノードを選択する。さらに、ＤＰＥＳＳＭモジュール３４０は更にコンピューティングノード３６０と対話してコンピューティングノード上の実行ジョブの実行を終了し、以前に終了した実行を再開しても良い。ＤＰＥＳＳＭモジュール３４０はまた、コンピューティングノード３６０の１つ以上を監視し若しくは別に対話して、それらのコンピューティングノードの使用を追尾しても良い。これらの動作に関連した付加的な詳細は、本願明細書の他の場所に含まれる。
【００５７】
コンピューティングノード３６０は様々な実施形態において様々な形態を有し、１つ以上の物理的コンピューティングシステムで実行する多くの物理的コンピューティングシステム及び／又は多くの仮想マシンを含んでも良い。幾つかの実施形態において、サーバコンピューティングシステム３００及びコンピューティングノード３６０は、共同配置されたコンピューティングシステムのデータセンター又は他のグループの一部であっても良く、または別段に私的ネットワークのコンピューティングノードであっても良い。さらに、幾つかの実施形態において、ＤＰＥＳＳＭモジュール３４０は、１つ以上の他のコンピューティングシステム３８０と対話し、コンピューティングシステム３８０が１つ以上のサードパーティ参加者によって提供される場合は、それらのコンピューティングシステム上の１つ以上のプログラムの実行を開始若しくは終了しても良い。
【００５８】
当然のことながら、コンピューティングシステム３００、３５０及び３８０、およびコンピューティングノード３６０は単に説明用に示され、本発明の権利範囲を限定することを意図するものではない。コンピューティングシステム及び／又はノードは代わりにそれぞれ複数の対話コンピューティングシステム又はデバイスを含むことができ、コンピューティングシステム／ノードはインターネットのような１つ以上のネットワークを通して、又はウェブや私的ネットワーク（例えばモバイルコミュニケーションネットワーク等）を経由したものも含めて、図示していない他のデバイスに接続されてもよい。より一般的に、コンピューティングノード又は他のコンピューティングシステムは対話して記載したタイプの機能性を実施し得るハードウェア又はソフトウェアのいかなる組合せをも備えることができる。これらは、限定されるものではないが、デスクトップまたは他のコンピュータ、データベースサーバ、ネットワーク格納装置、および他のネットワークデバイス、ＰＤＡ、携帯電話、ワイヤレスフォン、ページャ、電子手帳、インターネット機器、テレビベースのシステム（例えば、セットトップボックス及び／又は個人用／ディジタルビデオレコーダを使用したもの）及び適切な相互通信能力を含む様々な他の消費者製品が含まれる。さらに、図示したＤＰＥＳＳＭモジュール３４０によって提供される機能は、幾つかの実施形態において付加的モジュールに分散される。同様に、幾つかの実施形態において、ＤＰＥＳＳＭモジュール３４０の幾つかの機能は提供されない及び／又は、他の付加的機能は利用可能であってもよい。
【００５９】
また当然のことながら、様々な項目は使用中のメモリ内又は記憶装置上に格納されるとして示してあるが、これらの項目またはその一部を、メモリ管理およびデータ完全性の目的でメモリと他の記憶装置の間で転送することができる。あるいは、他の実施形態ではソフトウェアモジュール及び／又はシステムの一部または全ては別のデバイス上のメモリ内で実行することができ、コンピュータ間通信経由で図示したコンピューティングシステムと通信することができる。さらにまた、幾つかの実施形態において、システム及び／又はモジュールの幾つかまたは全てを他の様式で少なくともファームウェア及び／又はハードウェアに組み込み、又は提供できる。ファームウェア及び／又はハードウェアには、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、規格集積回路、コントローラ（例えば、適当な命令を実行すること、及びマイクロコントローラ及び／又は埋め込まれたコントローラを含む）、フィールドプログラマブルゲートアレイ（ＦＰＧＡｓ）、複合プログラマブルロジックデバイス（ＣＰＬＤｓ）等が含まれる。モジュール、システム及びデータ構造の幾つか又は全てをハードディスク、メモリ、ネットワーク或いは適切なドライブに、又は適切な接続経由で読取り可能な可搬型媒体品の如きコンピュータ可読の媒体上に（例えば、ソフトウェア命令または構造化データとして）格納できる。システム、モジュール及びデータ構造を、無線ベース及び有線／ケーブルベースの媒体を含む様々なコンピュータ可読送信媒体上の生成されたデータ信号として（例えば、搬送波または他のアナログ若しくはデジタル伝播信号の一部として）送信することもでき、そのシステム、モジュール及びデータ構造は様々な形態（例えば、単一でまたは多重のアナログ信号の一部として、または複数の離散ディジタルパケット若しくはフレームとして）をとることができる。上記のコンピュータプログラム製品は、他の実施形態では他の形態をとってもよい。従って、本発明を他のコンピュータシステム構成で実践することができる。
【００６０】
図４Ａ及び４Ｂは、分散型プログラム実行サービスシステムマネージャルーチン４００の実施形態のフロー図である。ルーチンは、たとえば、図１Ａ及び１ＢのＤＰＥＳＳＭモジュール１１０及び１８０及び／又は図３のＤＰＥＳＳＭモジュール３４０の実行によってそれぞれ提供され、プログラムの分散型実行を管理し、或る状況における他のタイプのアクションを実施しても良い。この例示の実施形態において、ルーチン４００は多数のユーザの為にプログラムの分散型実行を実施するＤＰＥサービスの利用の様々な態様を管理する。
【００６１】
例示の実施形態において、ルーチンはブロック４０５から始まり、ここで、分散型プログラム実行に関連した情報が受信される。ルーチンはブロック４１０へ続き、受信した情報のタイプを決定する。ブロック４１０では、例えばユーザからプログラムの実行を開始する要求が受信されたと決定される場合、ルーチンはブロック４１５へ続き、プログラムの実行のために使用されるコンピューティングノードの数を決定する。ブロック４２０では、ルーチンは、プログラムの実行と受信した入力データを実施すべき１つ以上の動作を含む多数の実行ジョブに分割する。更に詳細に他の場所で議論されるように、ブロック４１５及び４２０のアクションは、さまざまな実施形態のさまざまな様式において実施できる。例えば、プログラム実行に使用するコンピューティングノードの数は、ブロック４０５で受信するリクエストの一部として特定されても良く、代わりに他の要因に基づいて決定しても良い（例えば、ＤＰＥサービスから現在入手可能であるコンピューティングノードの数、プログラムの実行が切り離される多くの実行ジョブと一致するコンピューティングノードの数、リクエストが行われるためにユーザによって払われる料金の総計等）。同様に、プログラムの実行分離はさまざまな様式、要求を受信するユーザから特定する様式、及び／又はプログラム設計上の一部に少なくとも基づいて自動化した様式で実施される。ブロック４２０の後、ルーチンはブロック４２５へ続き、プログラムの分散型実行に使用するコンピューティングノードの決定量を選択し、ブロック４３０では選択されたノードの少なくとも幾つかの実行ジョブの実行を開始する。更に詳細に他の場所で議論されるように、幾つかの実施形態において、ユーザは様々な他のタイプ情報を特定しても良く、それが要求４０５の一部として受信されても良く、ブロック４１５〜４３０のアクションの一部として使っても良い。
【００６２】
ブロック４３０の後、ルーチンはブロック４３５において実行ジョブが完了し、オプションとして対応する出力データを提供するのを待ち、出力データは、それが他の実行ジョブに対する入力データとして使われ、及び／又はプログラムの実行のための最終結果の一部または全てとして使われる。幾つかの実施形態において、コンピューティングノードはルーチン４００へ、ＤＰＥサービスの長期格納場所への格納用のこの種の出力情報を戻し供給でき、一方他の実施形態の出力結果はコンピューティングノードへ代わりに格納され、及び／又は、コンピューティングノードから隔れた１つ以上の長期格納場所のコンピューティングノードによって格納される。例示の実施形態において、ブロック４３０〜４４５が同期様式で実施されることを図示し、ルーチン４００が他のアクションを実施する前に実行ジョブを完了するのを待つ。当然のことながら、他の実施形態においてルーチン４００は他の様式で作動し、現在のプログラムの実行及び／又は他のユーザのための他のプログラムの実行に対して他のアクションを実行する非同期様式で作動する。
【００６３】
図示した実例ルーチン４００において、１つ以上の実行ジョブがブロック４３５で完了されたと決定された後、ルーチンはブロック４４０へ続き実行すべき及び／又は完了すべき多くの実行ジョブの有無を判定する。もしそうであれば、ルーチンはブロック４４５へ続き、利用可能なコンピューティングノードでの１つ以上の残存している実行ジョブの実行をオプションとして開始し、それらの残存している実行ジョブが完了した実行ジョブの１つ以上からの出力データを待機している場合、または、代わりに、コンピューティングノードより多くの実行ジョブが存在する場合、他の実行ジョブ実施の完了からの新しい利用可能なコンピューティングノードは今用いられ、残存している実行ジョブを実行する。ブロック４４５の後、ルーチンはブロック４３５へ戻って他の実行ジョブの完了を待機する。
【００６４】
代わりにブロック４４０において、実行ジョブの全てが完了したことが決定される場合、ルーチンはブロック４８５に対してプログラムのための最終的な実行結果を生成して、それらの最終結果をオプションとして格納及び／又はユーザへ最終結果を提供し続ける。最終的な実行結果は、様々な実施形態の様々な様式において発生され若しくは別段に生成され、多数の実行ジョブから様々な様式で出力結果を混ぜ合わせて、使用する単一の実行ジョブ等から出力結果を選択する。
【００６５】
代わりにブロック４１０において、ブロック４０５で受信した情報が後の使用のためのプログラムを登録するユーザからの如き要求であったことが決定される場合、ルーチンは代わりに、ブロック４５０へ続き関連した管理情報と一緒に、プログラムについて情報（例えば、プログラムを提出したユーザについての及び／又はプログラムの実行についての、プログラムを多数の実行ジョブに分ける方法の如き情報）を格納する。幾つかの実施形態において、この種のプログラムはユーザによってそれらが使われる前に登録され、この種のプログラム実行要求が後に受信される時、プログラムの実行速度を増加する。さらにまた、幾つかの実施形態において、プログラムを登録するこの種の要求には、指示した時間若しくは１つ以上の指示した規準が満たされる時（例えば、ＤＰＥサービスの充分で過剰なコンピューティング容量が低優先順位でプログラム実行に利用できる時）の如きプログラムの後の実行を計画する要求を含んでも良い。
【００６６】
ブロック４０５にて受信した情報がプログラムの為のコンピューティングノードでの実行ジョブの実行に関連したステータス情報であるとブロック４１０において代わりに決定され、そのコンピューティングノード又は実行ジョブによって供給される（例えば、ブロック４９０に対してルーチン４００によって前以て要請された後）場合、ルーチンは、ブロック４５５へ続き、その実行ジョブ及びプログラム実行の中間状態に関して、ルーチン４００によって維持されるステータス情報を更新する。更に詳細に他の場所で議論されるように、状態情報は、開始され、完了され、又は進行中である特定の動作についての情報、実行によって使われた入力データについての情報、幾つか又は全ての動作の完了によって発生した出力データについての情報、進行中の実行ジョブの実行を反映する部分的な中間データについての情報等を含んでも良い。
【００６７】
ブロック４０５において受信する情報が１つ以上のプログラム用の１つ以上の実行ジョブの実行を変更することに関する指示であることがブロック４１０において代わりに決定される場合、即ち、その実行を始めたユーザから及び／又はブロック４９０に対するルーチン４００による指定として以前に特定された場合、ルーチンはブロック４６０へ続き、実行変更に関連した情報を受信する。ブロック４６２において、ルーチンは次に、要求が１つ以上の現在実行中の実行ジョブの終了に関するか、または、それが代わりに前以て終了した実行ジョブの実行再開に関するかどうかを判定する。後者である場合、ルーチンはブロック４７５へ続き、コンピューティングノード上の以前に終了した実行ジョブの実行を、実行ジョブの先行する部分的な実行から、中間結果について前以って格納された状態情報を使用することによる再開を開始し、又は、代わりに、ブロック４６０において受信した情報にそのように指示があれば実行ジョブのこの種の遅れた再開を計画する。
【００６８】
別段に、終了する１つ以上の現行実行ジョブがある場合、ルーチンはブロック４６２からブロック４６４へ続き、最初から始まる次のこの種の実行ジョブを選択する。ブロック４６６において、ルーチンは次に実行ジョブのために実施されている動作の部分的な実行の現行の中間状態についての情報、及び実行ジョブのための現行データ状態についての情報を得る。そして、ブロック４６８においてルーチンは、永続的に後の使用のための情報を格納するであろうコンピューティングノードから離隔した１つ以上の格納容積への中間状態情報の格納を開始する。他の実施形態において、コンピューティングノードがこの種の中間状態格納アクションを実行するための管理ソフトウェアを含む場合、または、実行ジョブ自身が命令を受けてその中間状態を保存するべく構成される場合、ルーチン４００は、代わりにブロック４６６と４６８においてコンピューティングノード及び／又は実行ジョブにメッセージを送り、この種の格納を開始し、続いて運転停止する。さらにまた、前以って保存された実行ジョブについての状態情報は幾つかの状況においてブロック４６６及び４６８にて、どの中間状態情報を格納すべきか決定するため等に使用しても良く、ブロック４６６において得られるあらゆる新情報（例えば、コンピューティングノード及び／又は実行ジョブと交信することによる）は、その実行ジョブのための状態情報を更新するために使用してもよい。ルーチンは、次いでブロック４７０へ続き、終了すべき多くの実行ジョブがあるかをどうか判定し、あればブロック４６４へ戻る。先述の通り、幾つかの実施形態において、終了には、プログラム用に現行で実行されている全ての実行ジョブを終了することやプログラムの実行を一時的に保留することも含まれる。
【００６９】
ブロック４７０において終了する実行ジョブが更には無いことが代わりに決定される場合、ブロック４７２のルーチンは終了した実行ジョブの中間状態に関しての状態情報を更新し、格納された中間状態からの実行ジョブの幾つか又は全ての実行の後の時間での再開をオプションとして計画する。例えば、１つ以上の実行ジョブが第１グループ又は１つ以上のコンピューティングノードから第２グループ又は１つ以上の他のコンピューティングノードへ移動している状況では、それらの実行ジョブの実行の後の時間に計画された再開は、実質的に即時的に起っても良く、また、ユーザは実行の終了及び再開を知らなくても良く、コンピューティングノード間の実行ジョブの動きも知らなくて良い。さらに、後の再開のスケジューリングには、それらの実行ジョブ用ブロック４７５に対する前以って議論された再開活動を促進する後の再開の時点でブロック４０５において受信するべき新規な要求の開始を含んでも良い。
【００７０】
ブロック４０５において受信する情報のタイプが他のタイプの要求であるとブロック４１０において代わりに決定される場合、ルーチンは代わりにブロック４８０へ続き、他の指示された要求を適切であるとして実施する。この種の他の要求は、例えば、ＤＰＥサービスに名前を登録しているユーザ、ＤＰＥサービスの会計情報又は他の情報を点検しているユーザ、それらのプログラム（例えば、プログラム用の実行ジョブの１つ以上の中間状態又は他の状態についての幾つか又は全ての情報を受信することによる）の進行中の実行を監視しているユーザ、現行または前以って要請されたプログラムの実行または他の提供される機能に関して支払を提供しているユーザ、等の如きユーザに対する管理業務を含むことができる。
【００７１】
ブロック４５０、４５５、４６０、４７２、４７５、４８０または４８５の後、ルーチンはブロック４９０へ続き、１つ以上の他のタスクをオプションとして実施する。この種の他のタスクは、例えば、以下のうちの１つ以上を含んでも良い：コンピューティングノードに対するステータス情報の要求を送ることによる如き様々なプログラムの実行を監視すること（例えば、周期的に、指示した規準が充たされる時、その他）、例えば計画した時間で、様々な環境で自動的に決定して、実行ジョブの実行を終了すること及び／又は前以って終了した実行ジョブの実行を再開すること、コンピューティングノード間の移動実行ジョブを適応させること、プログラムの実行のための要求されたＱｏＳレベルを維持すること（例えば、実行ジョブの実行を相互に対する最大接近の範囲内で及び／又は実行ジョブによって使われている入力データに維持することによって相互の実行を最小接近を維持することによって単一の地理的な場所の複数コンピューティングノードの失敗の場合の可用性および信頼性、その他を強化する）、コンピューティングノード、その他の稀利用及び過利用を管理すること等。ブロック４９０の後、ルーチンはブロック４９５へ続き、終了の明確な指示を（例えば、ＤＰＥサービスのオペレータから）受信するまで続行すべきかどうかを判断する。続行が決定される場合、ルーチンはブロック４０５へ戻り、もしブロック４９９への続行でなければ終了する。
【００７２】
図５は、コンピューティングノードマネージャルーチン５００の実例のフロー図である。ルーチンは、例えば、図１Ｂのモジュール１７９の実行、図１Ａのコンピューティングノード１２０で実行している他の管理ソフトウェアの実行、図１Ｂのコンピューティングシステム１８２の実行、図３のコンピューティングノード３６０の実行等によって提供され得る。図示した実施形態において、コンピューティングノードでの管理ソフトウェアはコンピューティングノードにおける実行ジョブ実行の幾つかの態様を管理し、他方、他の実施形態において、図５に関して記載した機能の幾つか又は全ては代わりに図４Ａ及び４Ｂのシステムマネージャルーチン４００によって実施され、若しくは代わりにコンピューティングノードで実行されている実行ジョブによって実施されても良い。
【００７３】
図示した実施形態において、ルーチンはブロック５０５から始まり、指示はコンピューティングノード上の１つ以上の実行ジョブの実行と関連して受信される。ルーチンは、ブロック５１０へ続き、前記の指示が指示された実行ジョブの実行の開始であるかどうかを判断する。もしそうであれば、ルーチンは実行ジョブ（例えば、ブロック５０５での実行ジョブについて受信される情報に基づく、若しくは外部の発信源から別段に検索される情報に基づく）のために実施されるべき多数の動作を決定してブロック５１５へ続き、最初から始まり実施すべき次の動作を選択する。ブロック５１５〜５４０は、連続的に実施されるとしてこの実施形態に図示され、各動作は次の動作の開始前に同期的に個々に実行されるものの、当然のことながら、他の実施形態においては、動作は他の様式で実施され、動作の幾つか又は全ては並列に及び／又は非同期的に実施しても良い。
【００７４】
ブロック５１５の後、ルーチンはブロック５２０へ続き、選択された動作の実行の開始を示しているルーチン４００に状態メッセージを送り、ブロック５２５では動作の実施が開始する。ブロック５３０において、ルーチンは動作の実施の完了を待って、動作実施によって生成されるどの中間結果をもオプションとして局所的に格納する。ブロック５３５において、ルーチンは次いで動作実施の完了を示している他の状態メッセージをルーチン４００へ送り、ブロック５４０ではルーチンは次に実施すべき多くの動作があるかどうか判定し、有るならばブロック５１５に戻る。
【００７５】
代わりにブロック５１０において、ブロック５０５の受信した指示が実行ジョブを実行せずと判定すると、ルーチンは代わりにブロック５８５へ続き、１つ以上の他の指示された動作を適宜実施する。例えば、ブロック５０５において受信される情報はルーチン４００からの状態情報のための要求であっても良く、もしそうであれば、ブロック５８５はその状態情報を取得してルーチン４００に提供し得る。代替として、ブロック５０５の情報は、実行ジョブの実行を終了する指示であっても良く、ブロック５８５において実施される動作は対応するアクションを含んでも良い（例えば、情報が永続的に他の場所に格納された後等に、コンピューティングノードに一時的に格納した中間の状態情報を消去する）。さらに、ブロック５８５に関して実施されるアクションは、現行実行中のジョブのための動作の部分的実行からの中間状態のこの種の永続的な格納を始めるためのルーチン４００からの要求を含んでも良く、そうであるならば、ブロック５８５のアクションはこの種のアクションの実施を含んでも良い（直ちに又は代わりに短時間後に、１つ以上の動作の実施を完了させる）。さらにまた、幾つかの実施形態及び状況において、異なる実行ジョブは関心情報の交換の如き様々な様式で共同しても良く、ブロック５０５の情報はプログラムの他の実行ジョブからのこの種の情報であっても良く、または現行の実行ジョブからの情報のための他の実行ジョブからの要求であっても良い。
【００７６】
ブロック５８５の後、又はブロック５４０において、更に実施されるべき動作が無いと判断されると、ルーチンはブロック５９０へ続き１つ以上の他のタスクをオプションとして実施し、適切であるならばプログラムの他の実行ジョブと共同して、実行ジョブを実行することの一部として運用活動等を行う。ブロック５９０の後、ルーチンはブロック５９５へ続き、終了の明確な指示を（例えば、ルーチン４００から、又はＤＰＥサービスのオペレータから）受信するまで継続すべきかどうかを判断する。続くことが決定される場合、ルーチンはブロック５０５へ戻り、もしブロック５９９への続行でなければ終了する。
【００７７】
幾つかの実施形態において、上述のルーチンによって提供される機能は、より多くのルーチンに分割されるか、又はより少ないルーチンに統合されるかといった二者択一的に提供されることは当然のことである。同様に、幾つかの実施形態及び状況においては、図示されたルーチンは、説明されたより多数の又は少数の機能を提供しても良く、その機能は他の図示されたルーチンが代わりにかかる機能を欠いているか又は含むときに、または提供される機能の数が変更されるときに提供しても良い。さらに、様々な動作が特定の方法において（例えば、直列または並列に）実施され、または特定の順序で実施されるように図示されても良いが、当業者であれば、他の実施形態において動作が他の順序で実行され得ることを理解するであろう。当業者であれば、上述のデータ構造は、例えば、多数のデータ構造に分割された単一のデータ構造を有することによって又は単一のデータ構造に統合された多数のデータ構造を有することによって異なる手法で構造化されても良いことを理解するであろう。同様に、幾つかの実施形態においては、図示されたデータ構造は、説明されたより多くの情報又はより少ない情報を格納しても良く、例えば、他の図示されたデータ構造は代わりにこの種の情報を欠いているか又は含むときに又は格納される情報の量またはタイプが変更されるときにより多くの情報又はより少ない情報が格納されるであろう。
【００７８】
実施態様項１  プログラムの分散実行を管理する分散型プログラム実行サービスのコンピューティングシステムのための方法で、以下を含む：
分散型プログラム実行サービスのコンピューティングシステムの制御の下で、複数のユーザのプログラムを実行するために形成可能な複数のコンピューティングノードを提供している分散型プログラム実行サービスであって、指示された入力データを使用して指示されたプログラムを実行する多数の要求を受信し、要求のそれぞれは複数のユーザの１人からのものであって、プログラムの指示と要求用に使われるべき入力データとを含み、そして、以下により自動的に各要求に応答する：
分散並列的な要求用に指示されたプログラムの多数の実行ジョブ実行に用いられる複数のコンピューティングノードの多数を自動的に選択することであって、多数の実行ジョブのそれぞれは、実行ジョブ用に選択される指示された入力データのサブセットを使用して実施されるべき多数の動作を有すること、
多数のコンピューティングノードのそれぞれに対して、１つの実行ジョブ用の入力データの選択されたサブセットを使用している多数の実行ジョブの１つのコンピューティングノードで実行を開始することであって、１つの実行ジョブのための多数の動作のうちの１つ以上の完了した実施によって生成される中間出力データを局所的に格納するために用いるコンピューティングノード上の一部の分散ファイルシステムを形成することを含むこと、
多数のコンピューティングノードの少なくとも幾つかでの多数の実行ジョブの実行の少なくとも幾つかが完了する前に、
少なくとも幾つかの実行ジョブのそれぞれの部分的実行状態を自動的に監視し、実行ジョブが実行しているコンピューティングノード用の分散ファイルシステム部分に局所的に格納される中間出力データを識別することを含む少なくとも幾つかの実行ジョブのそれぞれを監視し、中間出力データは実施が完了される実行ジョブの１つ以上の動作によって生成されていること、及び、
少なくとも幾つかの実行ジョブの１つ以上の最初の実行の終了を決定し、その決定に応答して、及び、１つ以上の実行ジョブのそれぞれに対して、実行ジョブが実行するコンピューティングノード用の分散ファイルシステム部分に格納される中間出力データの離隔した永続的な格納を自動的に開始すること，
第１時間後の第２時間に、１つ以上の実行ジョブのそれぞれに対して、第１時間に完了されなかった実行ジョブの動作の実施を開始することによって選択されたコンピューティングノードでの実行ジョブの再開実行を開始し、実行ジョブのために第１時間に格納された永続的に格納された中間出力データを検索することを含む再開された実行及び、選択されたコンピューティングノードでの分散ファイルシステムの一部分で検索された出力データの第２時間で格納を始めること、及び、
指示されたプログラムの多数の実行ジョブの実行が完了された後、１ユーザに対する実行からの最終結果を提供すること。
【００７９】
実施態様項２  少なくとも１つの要求のそれぞれに対して、要求用の指示されたプログラムは、並列実行用の相違した実行ジョブに定義された態様で分割可能に設計されている分散型プログラム実行サービスによって提供されるプログラムであり、指示されたプログラムの多数の実行ジョブは、実行ジョブの選択された数に定義された態様で指示されたプログラムを分割することにより自動的に決定し、要求への応答は、要求用の指示された入力データを選択された量のサブセットに自動的に分割し、決定された実行ジョブのそれぞれに対して分割入力データサブセットの１つを選択することを含む、実施態様項１に記載の方法。
【００８０】
実施態様項３  分散型プログラム実行サービスは料金ベースのサービスであり、多数の受信された要求を出力するユーザはそれぞれが指示された入力データを使用している指示されたプログラム要求実行に対して料金を払い、ユーザの一人によって支払われた料金は、１ユーザ用の指示されたプログラム実行の低優先順位に対応し、その指示されたプログラムの実行は、高い優先順位の他のプログラムを実行するために一時的に保留され、そして、１ユーザのための１つ以上の実行ジョブの最初の実行を終了する決定は、実行が決定される１つ以上の実行ジョブとして、１ユーザのための多数の実行ジョブの全ての終了を選択することによって１ユーザのための指示されたプログラムの実行を一時的に保留することに基づく、実施態様項２に記載の方法。
【００８１】
実施態様項４  プログラムの分散型実行を管理する為のコンピュータ実装方法で、以下を含む：
ユーザのためのプログラムの分散型実行を管理する分散型プログラム実行サービスを提供する１つ以上のコンピューティングシステムの制御の下で、分散型プログラム実行サービスはユーザのためのプログラムを実行するために形成可能な複数のコンピューティングノードを提供しており、
複数のコンピューティングノードの多数での指示されたプログラムの多数の実行ジョブの開始の後、指示されたプログラムの実行は第１ユーザのために実施されていて、多数の実行ジョブが、指示された入力データの少なくとも幾つかを使用して実施されるべき１つ以上の動作をそれぞれ有する様に指示された入力データを使用し、多数のコンピューティングノードでの多数の実行ジョブの実行状態についての情報を自動的に追尾し、追尾は、実施が完全である多数の実行ジョブの動作のサブセットから生成される中間結果及び多数のコンピューティングノードに格納される中間結果を識別することを含むこと、
少なくとも１つの多数の実行ジョブの実行を終了すると最初に決定した後、少なくとも１つの実行ジョブは、実施が完全である動作のサブセット中に在る少なくとも１つの動作を有し、サブセット中には無くて実施が完全でない少なくとも１つの他の動作を有し、追尾された情報を用いた少なくとも１つの動作を自動的に識別して、少なくとも１つの動作から生成される識別された中間結果の永続的な格納を開始すること、
第１時間以後の第２時間に、実施が完全であるサブセット中には無い少なくとも１つの他の動作の実施を完了するために、またサブセット中の少なくとも１つの動作の完了した実施を繰り返さないために少なくとも１つのコンピューティングノードでの少なくとも１つの実行ジョブの再開された実行を開始し、再開された実行は、永続的に格納された中間結果に少なくとも一部に基いた様式で実施されていること、及び、
指示されたプログラムの多数の実行ジョブの実行が完了された後、最初のユーザに対する実行からの最終結果を提供すること。
【００８２】
実施態様項５  少なくとも１つの実行ジョブの第１時間での実行の終了を決定することは少なくとも１つの実行ジョブの実行を、第１時間での少なくとも１つの実行ジョブの実行が行われている１つ以上のコンピューティングノードから１つ以上の他のコンピューティングノードへ移動することの決定に少なくとも部分的に基づいており、１つ以上の他のコンピューティングノードは、少なくとも１つの実行ジョブの再開された実行が第２時間に発生する少なくとも１つのコンピューティングノードであり、第２時間は、実質的に第１時間の直後に発生する、実施態様項４に記載の方法。
【００８３】
実施態様項６  少なくとも１つの実行ジョブの第１時間での実行の終了を決定することは指示されたプログラムの実行を一時的に保留する要求に少なくとも部分的に基づき、少なくとも１つの実行ジョブは、第１時間に実行している多数の実行ジョブの全てを含む、実施態様項４に記載の方法。
【００８４】
実施態様項７  少なくとも１つの実行ジョブの再開された実行が開始される少なくとも１つのコンピューティングノードは、第１時間に先立って少なくとも１つの実行ジョブを実行した多数のコンピューティングノードのうちの１つ以上とは相違している、実施態様項６に記載の方法。
【００８５】
実施態様項８  少なくとも１つの実行ジョブの再開された実行が開始される少なくとも１つのコンピューティングノードは、多数のコンピューティングノードの数と相違している１つ以上のコンピューティングノードの選択された数を含む、実施態様項６に記載の方法。
【００８６】
実施態様項９  要求は第１ユーザから受信される、実施態様項６に記載の方法。
【００８７】
実施態様項１０  要求は第１ユーザとは相違した第２ユーザから受信される、実施態様項６に記載の方法。
【００８８】
実施態様項１１  少なくとも１つの実行ジョブの第１時間に実行の終了を決定することは、少なくとも部分的に、少なくとも１つの実行ジョブを第１時間に実行している１つ以上のコンピューティングノードで第１時間に運用上の活動を実施することの決定に基づいている、実施態様項４に記載の方法。
【００８９】
実施態様項１２  少なくとも１つの実行ジョブの第１時間に実行の終了を決定することは、少なくとも部分的に、少なくとも１つの実行ジョブを第１時間に実行している１つ以上のコンピューティングノードで１つ以上の他のプログラムを実行することの決定に基づき、１つ以上の他のプログラムは指示されたプログラムより高い優先順位を有する、実施態様項４に記載の方法。
【００９０】
実施態様項１３  多数の実行ジョブの１つが実行している多数のコンピューティングノードの１つが１実行ジョブの実行中に失敗したと決定し、相違したコンピューティングノードの１実行ジョブの後の時間での実行を自動的に再開し、再開された実行は、１コンピューティングノードが失敗する前に実施が前以て完了された１つの実行ジョブの少なくとも１つの動作の実施を繰り返すことを更に含む、実施態様項４に記載の方法。
【００９１】
実施態様項１４  多数のコンピューティングノードの多数の実行ジョブの実行は、マスターノードで実行しているソフトウェアによって管理され、多数の実行ジョブの実行状態の自動追尾は、多数の実行ジョブの実行状態についてのマスターノードでの情報を維持することを含み、少なくとも１つの実行ジョブの第１時間での実行の終了を決定することは、マスターノードの失敗に少なくとも部分的に基づく、実施態様項４に記載の方法
【００９２】
実施態様項１５  実行が終了している少なくとも１つの実行ジョブは、第１時間に実行している多数の実行ジョブの全てを含み、少なくとも１つの実行ジョブの再開された実行の開始は、新規な第２マスターノードの実行を開始すること、および多数の実行ジョブの実行状態についてのマスターノードからの維持された情報の第２マスターノードへ再格納することを含み、少なくとも１つのコンピューティングノードの少なくとも１つの実行ジョブの再開された実行は、第２マスターノードによって管理される、実施態様項１４に記載の方法。
【００９３】
実施態様項１６  識別された中間結果の永続的な格納の開始は、識別された中間結果を永続的に格納するネットワークアクセス可能なリモート格納サービスとの対話を含む、実施態様項４に記載の方法。
【００９４】
実施態様項１７  識別された中間結果の永続的な格納の開始は、識別された中間結果を多数のコンピューティングノードから離隔した場所へ格納することを含む、実施態様項４に記載の方法。
【００９５】
実施態様項１８  多数のコンピューティングノードに格納された識別された中間結果は、多数のコンピューティングノードに実装される分散ファイルシステムを使用して格納され、識別された中間結果の永続的な格納の開始は、少なくとも一部の分散ファイルシステムを表すための、および、多数のコンピューティングノードから離隔した１つ以上の格納ノードへ識別された中間結果を永続的に格納するための１つ以上の論理的格納容積の創成を含む、実施態様項４に記載の方法。
【００９６】
実施態様項１９  １つ以上のコンピューティングシステムの制御の下で更に下記を含む、実施態様項４に記載の方法：
多数の実行ジョブの１つ以上の実行が完了された後、多数のコンピューティングノードのうちの１つ以上への１つ以上の付加的実行ジョブの実行を開始することであって、付加的実行ジョブの少なくとも１つは１つ以上の実行ジョブのうちの少なくとも１つの完了された実行によって生成される出力データを含む入力データを使用すること、及び、
多数の実行ジョブの実行と、指示されたプログラムの付加的実行ジョブの実行とが完了された後、第１ユーザに提供されるべき最終結果を生成することであって、生成された最終結果は、少なくとも幾つかの多数の実行ジョブ及び付加的実行ジョブの実行完了によって生成される出力データの一部に少なくとも基づく。
【００９７】
実施態様項２０  指示されたプログラムの多数の実行ジョブの実行は、指示された入力データを使用して指示されたプログラムを実行する第１ユーザから受信される要求に基づき、第１ユーザからの受信された要求は、指示されたプログラム実行の実施することの一部として１つ以上のコンピューティングシステムによって使われる指示されたプログラムを実行するための、付加的形成情報の１つ以上の指示を含み、付加的形成情報は多数のコンピューティングノードの数についての少なくとも１つの情報、多数のコンピューティングノードとして使用するために選択されるコンピューティングノードが充たすことになっている１つ以上の規準についての情報、指示されたプログラムの多数の実行ジョブを決定する方法についての情報、及び、多数の実行ジョブによって使用されるべき指示された入力データのサブセットを選択する方法についての情報を含み、１つ以上の他の要求は、指示された他の入力データを使用している１つ以上の指示されたプログラムを実行する１つ以上の他のユーザから受信され、そして、１つ以上のコンピューティングシステムは、更に自動的に他の要求に応答してコンピューティングノードの多数を使用している１つ以上の指示されたプログラムの分散型実行を実施する、実施態様項４に記載の方法。
【００９８】
実施態様項２１  付加的形成情報は、多数のコンピューティングノードの数について及び／又は多数のコンピューティングノードが充たすように使用のために選択した１つ以上の規準についての情報を含み、１つ以上のコンピューティングシステムによって指示されたプログラム実行の実施が、付加的形成情報の一部に少なくとも基づいて指示されたプログラムの分散型実行を実施するために使用する多数のコンピューティングノードの自動的な選択を含む、実施態様項２０に記載の方法。
【００９９】
実施態様項２２  指示されたプログラムは、多数の入力データサブセットの各々の１つ以上のマップ関数を実施して、１つ以上のマップ関数の結果に対する１つ以上のリデュース関数を実施する様に設計されていて、前記の方法が、少なくとも１つのマップ関数及び／又は少なくとも１つのリデュース関数をそれぞれ実装する多数の実行ジョブを生成することを更に含む、実施態様項４に記載の方法。
【０１００】
実施態様項２３  分散型プログラム実行サービスは仮想化技術を使用して、多数のコンピューティングノードは、多数の物理的コンピューティングシステムのそれぞれの為に、少なくとも１つの実行ジョブをそれぞれ実行できる物理的コンピューティングシステムによってホストされる多数の仮想マシンを含み、第１ユーザのために選択される多数のコンピューティングノードはそれぞれホストされた仮想マシンであり、多数の実行ジョブは、それぞれ仮想マシンイメージの一部として実行される、実施態様項４に記載の方法。
【０１０１】
実施態様項２４  その内容は、コンピューティングシステムが以下を含む方法を実施して、プログラムの分散型実行を管理できる様にするコンピュータ可読の媒体：
多数のコンピューティングノードの指示されたプログラムの分散型実行状態についての情報を追尾することであって、指示されたプログラムは多数のコンピューティングノードで実行している多数の実行ジョブを有し、実行ジョブは実施されるべき１つ以上の動作をそれぞれ有し、追尾された状態情報は、実施が完全である多数の実行ジョブの動作から生成される中間結果についての情報を含むこと、
少なくとも１つの実行ジョブの実行が終了した後であって、少なくとも１つの実行ジョブの動作の全ての実施が完了される前に、少なくとも１つの実行ジョブは実施が完全である少なくとも１つの動作を有し、少なくとも１つの動作以外の少なくとも１つの実行ジョブの動作の再開された実施を自動的に開始して指示されたプログラムの分散型実行を続けること、及び
指示されたプログラムの分散型実行が完了された後、分散型実行からの最終結果の指示を提供すること。
【０１０２】
実施態様項２５  コンピューティングシステムは、分散型プログラム実行サービスのユーザのためのプログラムの分散型実行を実施するために形成可能な複数のコンピューティングノードを提供する分散型プログラム実行サービスの部分であり、指示されたプログラムの分散型実行は、分散型プログラム実行サービスの第１ユーザのために開始され、第１ユーザによって指示される指示されたプログラム用の入力データを使用し、多数のコンピューティングノードは、第１ユーザによって特定されるコンピューティングノードの数を含み、多数のコンピューティングノードの少なくとも幾つかは多数のコンピューティングノードから選択され、前記の方法は、少なくとも１つの実行ジョブの実行を第１時間で終了することを決定すること、および、少なくとも１つの動作から生成される中間結果の永続的な格納を自動的に開始することを更に含み、指示されたプログラムの分散型実行の続行は、第１時間より遅れた第２時間に実施され、永続的に格納された中間結果の少なくとも幾つかを検索して使用することを含む、実施態様項２４に記載のコンピュータ可読の媒体。
【０１０３】
実施態様項２６  少なくとも１つの実行ジョブの実行は、少なくとも１つの実行ジョブが実行されている多数のコンピューティングノードの１つ以上の最初の失敗に基づいて終了され、少なくとも１つの実行ジョブの少なくとも１つの動作の実施は、第１時間より早期の時間での実施の完了から生成される中間結果を永続的に格納することを含み、指示されたプログラムの分散型実行の続行は、第１時間より遅れた第２時間に実施され、永続的に格納された中間結果の少なくとも幾つかを検索して使用することを含む、実施態様項２４に記載のコンピュータ可読の媒体。
【０１０４】
実施態様項２７  コンピュータ可読の媒体は、内容を格納するコンピューティングシステムのメモリの少なくとも１つであり、内容を含む生成された格納データ信号を含むデータ伝送媒体であり、前記の内容は、実行されるときにコンピューティングシステムに前記の方法を実施させる命令である、実施態様項２４に記載のコンピュータ可読の媒体。
【０１０５】
実施態様項２８  プログラムの分散型実行を管理するために形成されるコンピューティングシステムで、以下を含む：
１つ以上のメモリ、及び
多数のユーザのそれぞれのため、以下による分散型実行サービスのユーザのために分散型実行を管理するために形成されるシステムマネージャコンポーネント：
ユーザから指示を受信し、多数の関連した実行ジョブの分散型実行を実施すること、
多数のコンピューティングノードで多数の実行ジョブの実行を開始すること、
多数の実行ジョブのうち少なくとも１つの実行ジョブの部分的実行が実施された後であって、しかし多数の実行ジョブの少なくとも１つの実行が完了する前に、少なくとも１つの実行ジョブの実行を終了すると決定し、少なくとも１つの実行ジョブの部分的な実行の中間状態の永続的な格納を自動的に開始すること、
後の時間で、少なくとも１つの実行ジョブの部分的な実行の中間状態の永続的な格納を検索し、検索された永続的に格納された中間状態の少なくとも一部に基づいて少なくとも１つの実行ジョブの実行を再開すること、及び、
多数の実行ジョブの実行が完了された後、実行からの最終結果をユーザへ提供すること。
【０１０６】
実施態様項２９  ユーザの一人のための少なくとも１つの実行ジョブの実行は、入力データの第１グループを使用し、完了した時に出力データの第２グループを生成し、１ユーザのための少なくとも１つの実行ジョブの部分的実行は、入力データの第１グループの少なくとも幾つかを使用し、出力データの第２グループのサブセットを生成し、１ユーザのための少なくとも１つの実行ジョブの部分的な実行の中間状態の永続的な格納は、後の使用のための出力データの第２グループの生成されたサブセットを格納することを含む、実施態様項２８に記載のコンピューティングシステム。
【０１０７】
実施態様項３０  多数の関連した実行ジョブの分散型実行を実施する１ユーザからの指示は分散型実行サービスによって自動的に分割されて多数の関連した実行ジョブとなる実施されるべきプログラムの指示を含み、入力データの第１グループを含むプログラムのために使用されるべき入力データの指示を含み、１ユーザのための少なくとも１つの実行ジョブは、入力データの第１グループの一部分にそれぞれ動作する多数の動作を含み、完了時に出力データの第２グループを生成し、１ユーザの少なくとも１つの実行ジョブの部分的な実行は、完了している多数の動作のサブセットを含み、出力データの第２グループの生成されたサブセットは、完了した多数の動作のサブセットによって生成した出力データの第２グループの一部を含み、１ユーザのための少なくとも１つの実行ジョブの部分的な実行の中間状態の永続的な格納は、出力データの第２のグループのサブセットを生成するために完了する多数の動作のサブセットによって、使用されなかった入力データの第１グループの１つ以上の部分を格納することを更に含む、実施態様項２９に記載のコンピューティングシステム。
【０１０８】
実施態様項３１  システムマネージャコンポーネントは、コンピューティングシステムによる実行のためのソフトウェア命令を含む、実施態様項２８に記載のコンピューティングシステム。
【０１０９】
実施態様項３２  システムマネージャコンポーネントは以下による分散型実行サービスのユーザのための分散型実行を管理する手段から成る、実施態様項２８に記載のコンピューティングシステム：
ユーザから指示を受信し、多数の関連した実行ジョブの分散型実行を実施すること、
多数のコンピューティングノードで多数の実行ジョブの実行を開始すること、
多数の実行ジョブのうち少なくとも１つの部分的実行が実施された後であって、しかし多数の実行ジョブの少なくとも１つの実行が完了する前に、少なくとも１つの実行ジョブの実行を終了すると決定し、少なくとも１つの実行ジョブの部分的な実行の中間状態の永続的な格納を自動的に開始すること、
後の時間で、少なくとも１つの実行ジョブの部分的な実行の中間状態の永続的な格納を検索し、検索された永続的に格納された中間状態の少なくとも一部に基づいて少なくとも１つの実行ジョブの実行を再開すること、及び、
多数の実行ジョブの実行が完了された後、実行からの最終結果をユーザへ提供すること。
【０１１０】
本明細書では例示の目的で特定の実施形態を説明したが、前述したことから当然のことながら、本発明の精神及び範囲からも逸脱せずに様々な修正を加え得る。従って、本発明は添付請求項とその中で列挙した要素によって以外は制限されない。さらに、本発明の或る特定の態様を或る特定の請求項の形で提示するが、本発明者は任意の可能な請求項の形で本発明の様々な態様を意図している。例えば、コンピュータ可読媒体で具現化されているとして本発明の幾つかの態様のみを現時点では列挙しているが、他の態様も同様にそのように具現することができる。
【図１Ａ】
0005843823.tif 000002
【図１Ｂ】
0005843823.tif 000003
【図２Ａ】
0005843823.tif 000004
【図２Ｂ】
0005843823.tif 000005
【図３】
0005843823.tif 000006
【図４Ａ】
0005843823.tif 000007
【図４Ｂ】
0005843823.tif 000008
【図５】
0005843823.tif 000009