(57)【要約】  非ローカルブロックデータストレージへの実行プログラムのアクセスを管理するための技術について説明されている。いくつかの状況において、ブロックデータストレージサービスは複数のサーバストレージシステムを使用して、他の物理的コンピューティングシステム上で実行されるプログラムによって１つまたは複数のネットワーク上でアクセスされうるブロックデータを確実に格納する。ユーザは、複数のサーバブロックデータストレージシステムのうちの少なくとも２つのサーバブロックデータストレージシステムにそれぞれ格納されるブロックデータストレージボリュームを作成し、第１のボリュームのコピーが利用不可能になった場合に第２のボリュームのコピーへ自動的に切り替えられるようにすることによる信頼性の高い方法などで、１つまたは複数の実行プログラムによってそのようなボリュームの使用を開始することができる。いくつかの状況では、ブロックデータボリュームを格納する複数のサーバブロックデータストレージシステムのグループを、同じ場所の１つのデータセンター内に配置することができ、そこに格納されているボリュームを使用するプログラムは、そのデータセンターにある他の物理的コンピューティングシステム上で実行することができる。
2011530748.tif 000002
【特許請求の範囲】
【請求項１】
実行プログラムに対してブロックデータストレージ機能を提供するためのコンピュータによって実装される方法であって、
第１のプログラムが実行される第１のコンピューティングシステムのローカルにあるブロックストレージデバイスに対して前記第１の実行プログラムによって開始される１つまたは複数のデータアクセス要求の第１のグループの１つまたは複数の指示を受け取るステップであって、前記ローカルのブロックストレージデバイスは１つまたは複数のネットワーク上で明確に区別される第２のデータストレージシステムによって提供される非ローカルブロックデータストレージボリュームを表す論理デバイスである、ステップと、
前記第１の実行プログラムに代わって前記第２のデータストレージシステムと前記１つまたは複数のネットワーク上でやり取りすることによってデータアクセス要求の前記第１のグループの前記受け取った指示に自動的に応答し、前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームによって格納されているブロックデータ上で前記第１のグループの前記データアクセス要求を実行させるステップと、
前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームが利用不可能になったと判定し、前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームのミラーコピーを収容する第３のデータストレージシステムを自動的に識別するステップであって、前記第３のデータストレージシステムは前記第１のコンピューティングシステムおよび前記第２のデータストレージシステムから明確に区別される、ステップと、
前記第１のコンピューティングシステム上の前記ローカルのブロックストレージデバイスに対して前記第１の実行プログラムによって開始される１つまたは複数の他のデータアクセス要求の第２のグループの１つまたは複数の指示を受け取るステップと、
前記第１の実行プログラムに代わって前記第３のデータストレージシステムと前記１つまたは複数のネットワーク上でやり取りすることによってデータアクセス要求の前記第２のグループの前記受け取った指示に自動的に応答し、前記識別された第３のデータストレージシステム上の前記ブロックデータストレージボリュームのミラーコピー上で前記第２のグループの前記データアクセス要求を実行させるステップと
を含むことを特徴とするコンピュータによって実装される方法。
【請求項２】
前記１つまたは複数のデータアクセス要求の前記第１のグループの前記指示を受け取る前に、前記第１の実行プログラムで使用できるように前記ブロックデータストレージボリュームを前記第１のコンピューティングシステムにアタッチするステップをさらに含み、
前記ブロックデータストレージボリュームをアタッチする前記ステップは、前記第１のコンピューティングシステムに前記ブロックデータストレージボリュームをアタッチする前記ステップは前記第１のコンピューティングシステムに対する前記論理ローカルブロックストレージデバイスを前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームに関連付けるステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームが利用不可能になったと判定した後、前記第１のコンピューティングシステムから明確に区別され、また前記第２のデータストレージシステムおよび前記第３のデータストレージシステムからも明確に区別される前記第４のデータストレージシステム上への前記ブロックデータストレージボリュームの他のコピーの作成を自動的に開始するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
実行プログラムに対してブロックデータストレージ機能を提供するように構成されているシステムであって、
１つまたは複数のメモリと、
複数のブロックデータストレージシステムを使用して、前記ブロックデータストレージサービスのユーザによって作成され、前記ユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するように構成されているブロックデータストレージシステムマネージャモジュールと
を備え、前記ブロックデータストレージサービスを提供するステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、前記ブロックデータストレージボリュームのそれぞれを作成する前記ステップは前記複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納される前記ブロックデータストレージボリュームのプライマリコピーを作成するステップを含む、ステップと、
データアクセス要求のそれぞれについて、前記データアクセス要求に対する前記１つのブロックデータストレージボリュームの前記プライマリコピーが利用可能である場合に、前記利用可能なプライマリコピー上で前記データアクセス要求の実行を開始することによって前記作成された複数のブロックデータストレージボリュームのうちの１つのブロックデータストレージボリュームに対し前記複数の実行プログラムのうちの１つの実行プログラムによってそれぞれ開始された前記データアクセス要求に応答するステップと、
受け取った指示に応答して、前記複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームの新規コピーを作成するステップであって、第１のブロックデータストレージシステムのプライマリボリュームが前記ブロックデータストレージシステムの最初のものに格納されており、前記作成された新規コピーは前記第１のブロックデータストレージシステムから明確に区別される１つまたは複数の他のデータストレージシステム上に格納される、ステップと
を含むことを特徴とするシステム。
【請求項５】
前記第１のブロックデータストレージボリュームを作成する前記ステップは、前記第１のブロックデータストレージシステムおよび前記１つまたは複数の他のデータストレージシステムから明確に区別される前記複数のブロックデータストレージシステムのうちの第２のブロックデータストレージシステム上に格納される前記第１のブロックデータストレージボリュームのミラーコピーを作成するステップをさらに含み、
前記データアクセス要求に応答する前記ステップは、前記第１のブロックデータストレージボリュームに対する前記複数の実行プログラムのうちの１つの実行プログラムによって開始される各データアクセス要求について、前記第１のブロックデータストレージボリュームの前記プライマリコピーが利用可能でない場合に、前記第２のブロックデータストレージシステム上に格納されている前記第１のブロックデータストレージボリュームの前記ミラーコピー上で前記データアクセス要求の実行を開始するステップをさらに含むことを特徴とする請求項４に記載のシステム。
【請求項６】
前記データアクセス要求に応答する前記ステップは、前記第１のブロックデータストレージボリュームに対する前記複数の実行プログラムのうちの１つの実行プログラムによって開始される各データアクセス要求について、前記第１のブロックデータストレージボリュームの前記プライマリコピーが利用可能である場合に、前記第２のブロックデータストレージシステム上に格納されている前記第１のブロックデータストレージボリュームの前記ミラーコピー上で前記データアクセス要求の実行を開始するステップをさらに含むことを特徴とする請求項５に記載のシステム。
【請求項７】
前記第１のブロックデータストレージボリュームの前記新規コピーは前記受け取った指示に応答して作成され、前記受け取った指示は、前記第１のブロックデータストレージボリュームの前記プライマリコピーを前記第１のブロックデータストレージシステムから明確に区別される第２のブロックデータストレージシステムに移動する決定に基づいており、
前記１つまたは複数の他のデータストレージシステムは、前記第２のブロックデータストレージシステムであり、
前記第２のブロックデータストレージシステム上に前記第１のブロックデータストレージボリュームの前記新規コピーを作成する前記ステップは、前記第２のブロックデータストレージシステム上に前記作成された新規コピーを前記第１のブロックデータストレージボリュームの新規プライマリコピーとして指定するステップを含み、
前記ブロックデータストレージシステムマネージャモジュールが前記ブロックデータストレージサービスを提供する前記ステップは、前記第１のブロックデータストレージボリュームの前記新規コピーを作成した後に、前記第２のブロックデータストレージシステム上に格納されている前記第１のブロックデータストレージボリュームの前記新規プライマリコピー上で追加のデータアクセス要求の実行を開始することによって前記第１のブロックデータストレージボリュームに対する前記複数の実行プログラムのうちの１つの実行プログラムによってそれぞれ開始される前記１つまたは複数の追加のデータアクセス要求に応答するステップをさらに含むことを特徴とする請求項４に記載のシステム。
【請求項８】
前記ブロックデータストレージシステムマネージャモジュールは、複数のブロックデータストレージシステムを使用して、前記ブロックデータストレージサービスのユーザによって作成され、前記ユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するための１つまたは複数の手段からなり、前記ブロックデータストレージサービスを提供する前記ステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、前記ブロックデータストレージボリュームのそれぞれを作成する前記ステップは前記複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納される前記ブロックデータストレージボリュームのプライマリコピーを作成するステップを含む、ステップと、
データアクセス要求のそれぞれについて、前記データアクセス要求に対する前記１つのブロックデータストレージボリュームの前記プライマリコピーが利用可能である場合に、前記利用可能なプライマリコピー上で前記データアクセス要求の実行を開始することによって前記作成された複数のブロックデータストレージボリュームのうちの１つのブロックデータストレージボリュームに対し前記複数の実行プログラムのうちの１つの実行プログラムによってそれぞれ開始される前記データアクセス要求に応答するステップと、
受け取った指示に応答して、前記複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームの新規コピーを作成するステップであって、第１のブロックデータストレージシステムのプライマリボリュームが前記ブロックデータストレージシステムの最初のものに格納されており、前記作成された新規コピーは前記第１のブロックデータストレージシステムから明確に区別される１つまたは複数の他のデータストレージシステム上に格納される、ステップと
を含むことを特徴とする請求項４に記載のシステム。
【請求項９】
実行プログラムによるブロックデータストレージ機能へのアクセスを管理するためのコンピュータによって実装される方法であって、
非ローカルブロックデータストレージボリューム上に格納されているブロックデータにアクセスするために第１のコンピューティングシステム上で実行される第１のプログラムの第１のコピーによって開始された１つまたは複数のデータアクセス要求の第１のグループの１つまたは複数の指示を受け取るステップであって、前記ブロックデータストレージボリュームは１つまたは複数のネットワーク上で明確に区別される第２のデータストレージシステムによって提供され、前記第１の実行するプログラムのコピーが前記ブロックデータストレージボリュームを表す前記第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介して前記ブロックデータストレージボリュームに対する前記データアクセス要求を開始するように前記第１のコンピューティングシステムにアタッチされる、ステップと、
前記第１の実行プログラムのコピーに代わって前記第２のデータストレージシステムとやり取りすることによってデータアクセス要求の前記第１のグループの前記受け取った指示に自動的に応答し、前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリューム上の前記第１のグループの前記データアクセス要求の実行を開始するステップと、
前記第１のプログラムのコピーが利用不可能になったと判定した後に、前記第１のプログラムの第２のコピーが実行されている、前記第１のコンピューティングシステムおよび前記第２のデータストレージシステムから明確に区別される第３のコンピューティングシステムを識別し、前記第２のプログラムのコピーが前記ブロックデータストレージボリュームを表す前記第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるように前記ブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチするステップと、
前記第３のコンピューティングシステム上の前記第２の論理ローカルブロックストレージデバイスとのやり取りを介して前記ブロックデータストレージボリュームに対して前記第２の実行プログラムのコピーによって開始される１つまたは複数の他のデータアクセス要求の第２のグループの１つまたは複数の指示を受け取るステップと、
前記第２の実行プログラムのコピーに代わって前記第２のデータストレージシステムとやり取りすることによってデータアクセス要求の前記第２のグループの前記受け取った指示に自動的に応答し、前記第２のデータストレージシステム上の前記ブロックデータストレージボリューム上の前記第２のグループの前記データアクセス要求の実行を開始するステップと
を含むことを特徴とするコンピュータによって実装される方法。
【請求項１０】
前記第１のプログラムのコピーが利用不可能になったと自動的に判定するステップをさらに含み、
前記第１のプログラムのコピーが前記利用不可能である状況は、前記第１のコンピューティングシステムの障害、前記第１のコンピューティングシステムの接続性の障害、および前記第１のコンピューティングシステムが前記第１のプログラムのコピーの実行を継続できない状況のうちの少なくとも１つの状況に基づくことを特徴とする請求項９に記載の方法。
【請求項１１】
前記第１のプログラムの前記第２のコピーが実行されている前記第３のコンピューティングシステムを識別する前記ステップは、前記第１のプログラムのコピーが利用不可能になったと判定した後に、前記第３のコンピューティングシステム上で前記第２のプログラムのコピーの実行を開始するステップを含むことを特徴とする請求項９に記載の方法。
【請求項１２】
前記第１のコンピューティングシステムに前記ブロックデータストレージボリュームをアタッチする前に、前記第２のデータストレージシステム上に前記ブロックデータストレージボリュームを作成し、明確に区別される第４のブロックデータストレージシステム上に前記ブロックデータストレージボリュームのミラーコピーを作成するステップをさらに含み、
前記第１のグループおよび前記第２のグループの前記データアクセス要求に応答する前記ステップは、前記第１のグループおよび前記第２のグループの前記データアクセス要求の、前記作成されたミラーコピー上での実行を開始するステップをさらに含むことを特徴とする請求項９に記載の方法。
【請求項１３】
前記１つまたは複数のデータアクセス要求の前記指示を受け取る前に、前記第１の実行プログラムのコピーで使用できるように前記ブロックデータストレージボリュームを前記第１のコンピューティングシステムにアタッチするステップをさらに含み、
前記ブロックデータストレージボリュームをアタッチする前記ステップは、前記第１の論理ブロックストレージデバイスを前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームに関連付けるステップを含み、前記１つまたは複数のネットワークへの前記第１のコンピューティングシステムのアクセスを管理するノードマネージャモジュールによって実行され、
前記ノードマネージャモジュールは、前記第１の実行プログラムに関連付けられているユーザからの要求に応答して前記ブロックデータストレージボリュームをすでに作成しているブロックデータストレージサービスの一部であることを特徴とする請求項９に記載の方法。
【請求項１４】
実行プログラムによるブロックデータストレージ機能へのアクセスを管理するように構成されているシステムであって、
１つまたは複数のメモリと、
複数のブロックデータストレージシステムを使用して、前記ブロックデータストレージサービスのユーザによって作成され、前記ユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するように構成されているブロックデータストレージシステムマネージャモジュールと
を備え、前記ブロックデータストレージサービスを提供するステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、前記ブロックデータストレージボリュームのそれぞれは前記複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納される、ステップと、
前記作成された複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームへのアクセスを前記１つまたは複数の実行プログラムのうちの第１の実行プログラムに許可した後に、前記第１の作成されたブロックデータストレージボリューム上で前記１つまたは複数のデータアクセス要求の実行を開始することによって前記第１の作成されたブロックデータストレージボリュームに対し前記第１のプログラムによって開始された１つまたは複数のデータアクセス要求に応答するステップと、
前記第１のプログラムが利用不可能になり、前記第１の作成されたブロックデータストレージボリュームへのアクセスを明確に区別される第２の実行プログラムに許可し、前記利用不可能になった前記第１のプログラムに許可されていたアクセスを置き換えた後に、前記第１の作成されたブロックデータストレージボリューム上で前記１つまたは複数の他のデータアクセス要求の実行を開始することによって前記第１の作成されたブロックデータストレージボリュームに対し前記第２のプログラムによって開始された１つまたは複数の他のデータアクセス要求に応答するステップと
を含むことを特徴とするシステム。
【請求項１５】
前記第１のプログラムおよび前記第２のプログラムは、単一のプログラムの実行コピーであり、
前記アクセスを前記第１のプログラムに許可する前記ステップは、前記第１の実行プログラムが前記第１のブロックデータストレージボリュームを表す前記第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介して前記第１のブロックデータストレージボリュームに対する前記データアクセス要求を開始するように前記第１のブロックデータストレージボリュームを前記第１のプログラムを実行している第１のコンピューティングシステムにアタッチするステップを含み、
前記アクセスを前記第２のプログラムに許可する前記ステップは、前記第２のプログラムが実行される第３のコンピューティングシステムを識別するステップと前記第２のプログラムが前記第１のブロックデータストレージボリュームを表す前記第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるように前記第１のブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチするステップとを含み、
前記第１のプログラムおよび前記第２のプログラムによる前記第１のブロックデータストレージボリュームに対する前記データアクセス要求は、前記ブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求であることを特徴とする請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行プログラムによる非ローカルブロックデータストレージへの信頼性の高いアクセスの実現に関する。
【背景技術】
【０００２】
数多くの会社および他の組織が、自社および自組織の業務を支援するために多数のコンピューティングシステムを相互接続したコンピュータネットワークを運用しており、例えば、それらのコンピューティングシステムは、（例えば、ローカルネットワークの一部として）同じ場所に配置されるか、またはそうではなく、複数の異なる地理的位置の場所に配置される（例えば、１つまたは複数の専用回線もしくは公衆回線の中間ネットワークを介して接続される）。例えば、単一の組織によって、また単一の組織に代わって運用されるプライベートデータセンター、および事業体によって営利事業として運用されるパブリックデータセンターなどの、同じ場所に配置され相互接続された相当数のコンピューティングシステムを収容するデータセンターが一般的なものになっている。さまざまな顧客が所有するハードウェア向けにネットワークアクセス、電力、および安全なインストール機能を提供するパブリックデータセンター事業者もあれば、自社顧客による使用のために用意されたハードウェアリソースも含む「フルサービス」機能を提供するパブリックデータセンター事業者もある。しかし、典型的なデータセンターおよびコンピュータネットワークの規模と活動範囲が拡大するにつれ、関連付けられている物理的コンピューティングリソースのプロビジョニング、システム管理、および運用管理の仕事が次第に複雑なものになってきた。
【０００３】
コモディティハードウェア用の仮想化技術の出現は、多様なニーズを抱える多くの顧客向けに大規模なコンピューティングリソースを管理する業務に対し一定の恩恵をもたらし、これにより複数の顧客間でさまざまなコンピューティングリソースを効率よく、安全に共有することが可能になった。例えば、ＸＥＮ（登録商標）、ＶＭＷａｒｅ、またはＵｓｅｒ−Ｍｏｄｅ  Ｌｉｎｕｘによって実現されている仮想化技術などの仮想化技術は、各ユーザに単一の物理的コンピューティングシステムによってホストされる１つまたは複数の仮想マシンを提供することによって、単一の物理的コンピューティングシステムを、複数のユーザ間で共有することを可能とする。各そのような仮想マシンは、ユーザに、自分が与えられたハードウェアコンピューティングリソースの単独のオペレータおよびアドミニストレータであると錯覚させる、明確に区別できる論理的コンピューティングシステムとして動作する一方で、さまざまな仮想マシン間のアプリケーションの分離とセキュリティとを実現するソフトウェアシミュレーションであるものとすることができる。さらに、いくつかの仮想化技術では、実際には複数の明確に区別できる物理的コンピューティングシステムにまたがって存在する複数の仮想プロセッサを備える単一の仮想マシンなど、１つまたは複数の物理的リソースにまたがって存在する仮想リソースを提供する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願第１１／３９５，４６３号明細書
【特許文献２】米国特許出願第１１／８５１，３４５号明細書
【特許文献３】米国特許出願第１１／３９５，４６３号明細書
【特許文献４】米国出願第１２／１４５，４１１号明細書
【特許文献５】米国特許出願公開第２００７／０１５６８４２号明細書
【特許文献６】米国特許出願第６０／７５４，７２６号明細書
【特許文献７】米国特許出願第１１／９６３，３３１号明細書
【発明の概要】
【０００５】
非ローカルブロックデータストレージへの実行プログラムのアクセスを管理するための技術について説明する。少なくともいくつかの実施形態において、これらの技術は、他の物理的コンピューティングシステム上で実行するプログラムによって１つまたは複数のネットワークを介してアクセスされ使用されうるブロックデータを確実に格納するために、複数のサーバストレージシステムを使用するブロックデータストレージサービスを提供することを含む。ブロックデータストレージサービスのユーザは、それぞれ、指定された量のブロックデータストレージ領域をそれぞれ有する１つまたは複数のブロックデータストレージボリュームを作成して、１つまたは複数の実行プログラムによってそのようなブロックデータストレージボリューム（本明細書では「ボリューム」とも称する）の使用を開始することができる。少なくともいくつかのそのようなボリュームは、実行プログラムに対するボリュームの信頼性と可用性を高めるために、複数のサーバストレージシステムのうちの２つまたはそれ以上のシステムによって格納されたコピーを有する。一例として、ブロックデータを格納する複数のサーバブロックデータストレージシステムは、いくつかの実施形態では、１つまたは複数の地理的に分散されているデータセンターのうちの各データセンターの中など、地理的位置の同じ場所に配置されている複数の物理的サーバストレージシステムをそれぞれが有する１つもしくは複数のプールまたは他のグループに編成され、データセンター内のサーバブロックデータストレージシステム上に格納されているボリュームを使用するプログラム（複数可）が、そのデータセンター内の１つまたは複数の他の物理的コンピューティングシステム上で実行されうる。ブロックデータストレージサービスの実施形態に関係する追加の詳細が、以下の説明に含まれており、ブロックデータストレージサービスを提供するための説明されている複数の技術のうちの少なくとも一部は、ブロックデータストレージ（「ＢＤＳ」）システムマネージャモジュールの実施形態によって自動的に実行されうる。
【０００６】
それに加えて、少なくともいくつかの実施形態において、１つまたは複数のネットワーク上で１つまたは複数のそのような非ローカルブロックデータストレージボリュームにアクセスし、使用する実行プログラムは、そのプログラムによる非ローカルボリュームへのアクセスを管理する関連付けられているノードマネージャ、例えば、ブロックデータストレージサービスによって提供され、および／または１つまたは複数のＢＤＳシステムマネージャモジュールと連携して動作するノードマネージャモジュールなどをそれぞれ有することができる。例えば、ブロックデータストレージサービスの顧客である第１のユーザは、第１のブロックデータストレージボリュームを作成し、（例えば、逐次的に、同時に、または他のオーバーラップする方式などで）その第１のボリュームにアクセスし、使用するよう指示された１つまたは複数のコンピューティングノード上で、１つまたは複数のプログラムのコピーを実行する。コンピューティングノード上で実行されるプログラムが非ローカルボリュームの使用を開始した場合、このプログラムは、コンピューティングノードのローカルにある、非ローカルボリュームを表す論理ブロックデータストレージデバイスをマウントするか、または他の何らかの方法で備え、これにより、実行プログラムは、（例えば、読み取りおよび書き込みデータアクセス要求の実行、ボリュームへのファイルシステムまたはデータベースまたは他のより高水準のデータ構造の実装などのために）コンピューティングノードに取り付けられている他のローカルのハードドライブまたは他の物理ブロックデータストレージデバイスと同じ方法で、ローカルの論理ブロックデータストレージデバイスとやり取りできるようになる。例えば、少なくともいくつかの実施形態において、ＧＮＢＤ（「グローバルネットワークブロックデバイス」）技術を使用することで、実行プログラムから代表的な論理ローカルブロックデータストレージデバイスを利用できるようにすることが可能である。それに加えて、以下でさらに詳しく説明するように、実行プログラムが代表的なローカルの論理ブロックデータストレージデバイスとやり取りするときに、関連付けられているノードマネージャが、（例えば、実行プログラムおよび／またはコンピューティングノードに対して透過的な方法で）１つまたは複数のネットワーク上で関連付けられている非ローカルボリュームのコピーを格納するいくつかのサーバブロックデータストレージシステムのうちの少なくとも１つのサーバブロックデータストレージシステムと通信することによって、それらの相互のやり取りを管理することができる。これにより、実行プログラムに代わって、その格納されているボリュームのコピー上でやり取りを実行することができる。さらに、少なくともいくつかの実施形態において、非ローカルブロックデータストレージボリュームへの実行プログラムのアクセスを管理するための説明されている複数の技術のうちの少なくともいくつかの技術は、ノードマネージャモジュールの実施形態によって自動的に実行される。
【０００７】
それに加えて、少なくともいくつかの実施形態において、少なくともいくつかのブロックデータストレージボリューム（またはこれらのボリュームの一部）は、ボリュームのコピーを格納するために使用されるサーバブロックデータストレージシステムと明確に区別される、１つまたは複数のリモートアーカイブストレージシステム上にさらに格納されうる。さまざまな実施形態において、１つまたは複数のリモートアーカイブストレージシステムは、（例えば、データセンターから離れているリモートの場所、または同じ場所に配置されているサーバブロックデータストレージシステムのプールを有する他の地理的位置の場所で）ブロックデータストレージサービスによって実現されるか、またはそうする代わりに、リモートの長期的なストレージサービスによって実現され、ブロックデータストレージによって使用され得る。少なくともいくつかの実施形態において、アーカイブストレージシステムが、ブロックデータと異なるフォーマットでデータを格納することができる（例えば、１つのボリュームの１つまたは複数のチャンクもしくは部分を明確に区別されるオブジェクトとして格納することができる）。このようなアーカイブストレージシステムは、以下でさらに詳しく説明するように、さまざまな実施形態においてさまざまな方法で使用することができ、さまざまな恩恵をもたらしうる。リモートの長期的なストレージサービスがアーカイブストレージシステムを提供するいくつかの実施形態において、リモートの長期的なストレージサービスのユーザ（例えば、リモートの長期的なストレージサービスを使用する料金を支払うリモートの長期的なストレージサービスの顧客）でもあるブロックデータストレージサービスのユーザ（例えば、ブロックデータストレージサービスを使用する料金を支払うブロックデータストレージサービスの顧客）は、彼らの顧客からの指示に応答してなど、アーカイブストレージシステムによって格納されているユーザのブロックデータストレージボリュームの少なくとも一部を有することができる。他の実施形態では、単一の組織が、（例えば、単一のサービスの一部など、統合された方法で）ブロックデータストレージサービス機能とリモートの長期的なストレージサービス機能の両方のうちの少なくとも一部を提供することができるが、さらに他の実施形態では、ブロックデータストレージサービスが、アーカイブデータストレージシステムの使用を伴わない環境において提供されうる。さらに、少なくともいくつかの実施形態において、アーカイブストレージシステムの使用は、ブロックデータストレージサービスによって提供されるか、またはブロックデータストレージサービスのモジュールと連携して動作するように他の何らかの方法で提供される（例えば、ブロックデータストレージサービスとやり取りするためにリモートの長期的なストレージサービスによって提供される）アーカイブマネージャモジュールなどの、１つまたは複数のアーカイブマネージャモジュールの制御の下で自動的に実行される。
【０００８】
いくつかの実施形態において、説明されている複数の技術のうちの少なくともいくつかは、プログラム実行サービスの複数のユーザに代わって複数のプログラムの実行を管理するプログラム実行サービスに代わって実行される。いくつかの実施形態では、プログラム実行サービスは、１つまたは複数の地理的に分散されたデータセンターなどの１つまたは複数の地理的位置の場所に複数の同じ場所に配置されている物理的ホストコンピューティングシステムのグループを有することができ、以下でさらに詳しく説明するように、例えばプログラム実行サービス（「ＰＥＳ」）システムマネージャの制御の下で、それらの物理的ホストコンピューティングシステム上でユーザのプログラムを実行することができる。このような実施形態では、ブロックデータストレージサービスのユーザでもあるプログラム実行サービスのユーザ（例えば、プログラム実行サービスを使用する料金を支払うプログラム実行サービスの顧客）は、ブロックデータストレージサービスを介して提供される非ローカルブロックデータストレージボリュームにアクセスし、使用するプログラムを実行することができる。他の実施形態では、単一の組織が、（例えば、単一のサービスの一部など、統合された方法で）プログラム実行サービス機能とブロックデータストレージサービス機能の両方のうちの少なくとも一部を提供することができるが、さらに他の実施形態では、ブロックデータストレージサービスが、プログラム実行サービスを伴わない環境において提供されうる（例えば、内部的に、組織の業務を支援するために企業または他の組織に対して）。
【０００９】
それに加えて、プログラムが実行されるホストコンピューティングシステムは、さまざまな実施形態においてさまざまな形態をとりうる。複数のこのようなホストコンピューティングシステムは、例えば、１つの物理的な位置における同じ場所（例えば、データセンター）内に配置され、いくつかのホストコンピューティングシステムのうち１つまたは複数のホストコンピューティングシステムの部分集合にそれぞれ関連付けられている複数のノードマネージャモジュールによって管理されうる。ホストコンピューティングシステムの少なくともいくつかは、それぞれ、複数のプログラムを同時に実行するのに十分なコンピューティングリソース（例えば、揮発性メモリ、ＣＰＵサイクルまたは他のＣＰＵ使用率の尺度、ネットワーク帯域幅、スワップ領域など）を備えることができ、少なくともいくつかの実施形態では、コンピューティングシステムの一部または全部は、それぞれ、実行すべきプログラムのローカルコピーおよび／またはそのようなプログラムによって使用されるデータを格納するために使用することができる、１つまたは複数の物理的に取り付けられたローカルブロックデータストレージデバイス（例えば、ハードディスク、テープドライブなど）を有することができる。さらに、いくつかのこのような実施形態における複数のホストコンピューティングシステムのうちの少なくともいくつかは、それぞれ、明確に区別される１人のユーザに代わって１つまたは複数のプログラムをそれぞれ実行することができる複数の仮想マシンコンピューティングノードをホストすることができる。各そのようなホストコンピューティングシステムは、そのホストコンピューティングシステム用の仮想マシンを管理する実行ハイパーバイザーまたは他の仮想マシンモニターを有する。複数の仮想マシンを実行するホストコンピューティングシステムについて、いくつかの実施形態では、そのホストコンピューティングシステムに対する関連付けられているノードマネージャモジュールは、（例えば、そのホストコンピューティングシステムに対する仮想マシンモニターの一部として、または連携して）複数のホストされている仮想マシンのうちの少なくとも１つの仮想マシン上で実行されうるが、他の状況では、ノードマネージャが管理されている１つまたは複数の他のホストコンピューティングシステムから明確に区別される物理的コンピューティングシステム上で実行されうる。
【００１０】
ボリュームが格納されるサーバブロックデータストレージシステムも、さまざまな実施形態においてさまざまな形態をとりうる。すでに述べたように、複数のこのようなサーバブロックデータストレージシステムは、例えば、１つの物理的な位置における同じ場所（例えば、データセンター）内に配置され、１つまたは複数のＢＤＳシステムマネージャモジュールによって管理されうる。少なくともいくつかの実施形態において、複数のサーバブロックデータストレージシステムのうちの一部または全部が、プログラムを実行するホストコンピューティングシステムと似た物理的コンピューティングシステムであってもよく、いくつかのそのような実施形態では、それぞれ、それらのサーバストレージシステム上のボリュームのプロビジョニングおよびメンテナンスを支援するためにサーバストレージシステムソフトウェアを実行することができる。例えば、少なくともいくつかの実施形態において、そのような複数のサーバブロックデータストレージコンピューティングシステムのうちの１つまたは複数が、１つまたは複数のＢＤＳシステムマネージャモジュールが複数の相互にやり取りするサーバブロックデータストレージコンピューティングシステムによってピアツーピア型分散方式で構成される場合などにおいて、ＢＤＳシステムマネージャの少なくとも一部を実行することができる。他の実施形態では、複数のサーバブロックデータストレージシステムのうちの少なくともいくつかは、それらのサーバストレージシステム上のボリュームのプロビジョニングおよびメンテナンスの少なくとも一部がリモートにある他の物理的コンピューティングシステムによって（例えば、１つまたは複数の他のコンピューティングシステム上で実行されているＢＤＳシステムマネージャモジュールによって）実行される場合などにおいて、物理的コンピューティングシステムのいくつかのＩ／Ｏコンポーネントおよび／または他のコンポーネントを欠いている可能性のあるネットワークストレージデバイスであってもよい。それに加えて、いくつかの実施形態では、少なくともいくつかのサーバブロックデータストレージシステムは、それぞれ、複数のローカルハードディスクを保持し、それらの複数のローカルハードディスクのうちの一部または全部のそれぞれの一部分にわたって、少なくともいくつかのボリュームのストライピングを行う。さらに、ボリュームを作成し、使用するためのさまざまな種類の技術が、いくつかの実施形態においてＬＶＭ（「論理ボリュームマネージャ」）技術を使用することも含めて、利用されうる。
【００１１】
すでに述べたように、少なくともいくつかの実施形態において、いくつかの、またはすべてのブロックデータストレージボリュームは、それぞれ、ボリュームの信頼性および可用性を高めるなどのために、２つまたはそれ以上の明確に区別されるサーバブロックデータストレージシステム上に格納されているコピーを有する。そうすることによって、単一のサーバブロックデータストレージシステムが故障したとしても、それらの実行プログラムによるそのボリュームの使用をそのボリュームのコピーを有する別の利用可能なサーバブロックデータストレージシステムに切り替えることができるため、ボリュームへの実行プログラムのアクセスが失われる事態は発生しえない。そのような実施形態において、複数のサーバブロックデータストレージシステム上のボリュームの複数のコピー間の整合性を、さまざまな方法で保つことができる。例えば、いくつかの実施形態において、複数のサーバブロックデータストレージシステムのうちの１つのサーバブロックデータストレージシステムが、ボリュームのプライマリコピーを格納するものとして指定され、他の１つまたは複数のサーバブロックデータストレージシステムは、ボリュームのミラーコピーを格納するものとして指定されている−このような実施形態では、プライマリボリュームのコピーを有するサーバブロックデータストレージシステム（そのボリュームの「プライマリサーバブロックデータストレージシステム」と称される）は、そのボリュームに対するデータアクセス要求を受け取り、処理することができる。いくつかのそのような実施形態では、他のミラーボリュームのコピーの整合性を保持するためのアクションを、さらに実行することができる（例えば、更新メッセージを、コンピューティングシステムにおいてマスター−スレーブ関係を確立する方法などにより、プライマリボリュームのコピー内のデータが修正されたときにミラーボリュームのコピーを提供する他のサーバブロックデータストレージシステムに送信することによって）。ボリュームの整合性をとるためにさまざまな種類の技術を使用することができ、以下ではその詳細について述べる。
【００１２】
少なくともいくつかの実施形態では、説明されている技術は、ボリュームのプライマリコピーおよびミラーコピーの使用を管理することによって、ブロックデータストレージボリュームへのコンピューティングノード上の実行プログラムのアクセスの信頼性および可用性を高めることを含む。例えば、実行プログラムに対するノードマネージャは、いくつかの実施形態では、プライマリボリュームのコピーがミラーボリュームのコピーを保持する責任を負っている場合、または他のレプリケーションメカニズムが使用される場合などにおいて、プライマリサーバブロックデータストレージシステムを介してプライマリボリュームのコピーと単独でやり取りすることができる。そのような実施形態において、プライマリサーバブロックデータストレージシステムが、ノードマネージャによって送信された要求（例えば、実行プログラムによって開始されたデータアクセス要求、プライマリサーバブロックデータストレージシステムが利用可能であるかどうかを定期的にチェックするためにノードマネージャによって開始されるｐｉｎｇメッセージまたは他の要求など）に対して所定の時間内に応答できない場合、さもなければ（例えば、ＢＤＳシステムマネージャからのメッセージによって）ノードマネージャがプライマリボリュームのコピーが利用不可能であるという警告を受け取った場合、ノードマネージャは、そのやり取りをミラーサーバブロックデータストレージシステム上のミラーボリュームのコピーのうちの１つに自動的に切り替えることができる（例えば、実行プログラムによって行われたデータアクセス要求がタイムアウトになり、ミラーボリュームのコピーへの切り替えを開始した場合に、そのデータアクセス要求に対する応答を取得するために少し長く待つ以外、実行プログラムは切り替えに気づかないままである）。ミラーボリュームのコピーは、ＢＤＳシステムマネージャとやり取りすることによって、プライマリボリュームのコピーとしての機能を果たすように格上げされるミラーボリュームのコピーの指示を要求して、ただ１つが選択される場合、複数のミラーボリュームのコピーにアクセスする順序が事前に指示される場合など、さまざま方法で選択することができる。他の実施形態では、少なくともいくつかのボリュームは、１つのボリュームが複数の実行プログラムによる同時読み取りアクセスに利用可能であり、その結果生じるデータアクセスの負荷がボリュームの複数のプライマリコピー間に分散される場合などにおいて、複数のプライマリコピーを有することができる−そのような実施形態では、ノードマネージャが、（例えば、ランダムな方法、ＢＤＳシステムマネージャモジュールからの命令に基づく方法などにより）さまざまな方法でやり取りする複数のプライマリボリュームのコピーのうちの１つを選択することができる。
【００１３】
それに加えて、ＢＤＳシステムマネージャは、ブロックデータストレージボリュームへのコンピューティングノード上の実行プログラムのアクセスの信頼性および可用性を維持するために、さまざまな実施形態においてさまざまなアクションを実行することができる。特に、ＢＤＳシステムマネージャが、特定のサーバブロックデータストレージシステム（または特定サーバブロックデータストレージシステム上の特定のボリューム）が利用不可能になったと認識した場合に、ＢＤＳシステムマネージャは、そのサーバブロックデータストレージシステムによって格納されているいくつかの、またはすべてのボリュームについて（または特定の利用不可能なボリュームについて）可用性を維持するためのさまざまなアクションを実行することができる。例えば、利用不可能なサーバブロックデータストレージシステム上の各格納されているプライマリボリュームのコピーについて、ＢＤＳシステムマネージャは、既存の複数のミラーボリュームのコピーのうちの１つのミラーボリュームのコピーを新規のプライマリボリュームのコピーに格上げし、適宜、その変更を１つまたは複数のノードマネージャ（例えば、現在そのボリュームを使用している実行プログラムに対するノードマネージャ）に通知することができる。さらに、各格納されているボリュームのコピーについて、ＢＤＳシステムマネージャは、既存のコピーを有する他の利用可能なサーバブロックデータストレージシステム上のボリュームの既存のコピーのレプリケーションを実行することなどによって（例えば、プライマリボリュームのコピーのレプリケーションを実行することによって）、異なるサーバブロックデータストレージシステム上でボリュームの少なくとも１つの他の新規のミラーコピーの作成を開始することができる。それに加えて、少なくともいくつかの実施形態では、以下でさらに詳しく説明するように、リモートアーカイブストレージシステム上に格納されているボリュームの少なくとも一部分を使用して、ボリュームの新規のミラーコピーのレプリケーションを支援することによって、少なくともいくつかの状況において他の恩恵（例えば、データの信頼性の向上、ミラーボリュームのコピーに使用されるストレージの量および／またはボリュームの完全なミラーコピーを維持するために使用される実行中の処理能力を最小限度に抑えることなど）も受けうる。
【００１４】
ＢＤＳシステムマネージャは、サーバブロックデータストレージシステムとコンタクトをとれないノードマネージャからのメッセージに基づく方法、サーバブロックデータストレージシステムからのメッセージ（例えば、エラー条件が生じたこと、シャットダウンまたは故障モード動作を開始したことなどを示すメッセージ）に基づく方法、サーバブロックデータストレージシステムとコンタクトをとれないことに基づく（例えば、サーバブロックデータストレージシステムのいくつか、またはすべての定期的もしくは常時監視に基づく）方法など、さまざまな方法によりサーバブロックデータストレージシステムの利用不可能であることを認識する可能性がある。さらに、サーバブロックデータストレージシステムが利用不可能になる事態は、サーバブロックデータストレージシステムが１つまたは複数のボリュームの少なくとも一部を格納する１つまたは複数のハードディスクまたは他の記憶媒体の故障、サーバブロックデータストレージシステムの１つまたは複数の他のコンポーネント（例えば、ＣＰＵ、メモリ、ファンなど）の故障、サーバブロックデータストレージシステムに対する停電（例えば、単一のサーバブロックデータストレージシステム、複数のサーバブロックデータストレージシステムからなるラック、データセンター全体などに対する停電）、サーバブロックデータストレージシステムとノードマネージャおよび／またはＢＤＳシステムマネージャとの通信を妨げるネットワークもしくは他の通信障害などの、さまざまな実施形態におけるさまざまな出来事が原因である場合がある。いくつかの実施形態において、サーバブロックデータストレージシステムのコンポーネントに生じる故障または問題は、サーバブロックデータストレージシステム全体に対する利用不可能性条件であるとみなせるが（例えば、サーバブロックデータストレージシステムが複数のローカルハードディスクを保持している実施形態では、ローカルハードディスクに生じる故障または問題は、サーバブロックデータストレージシステム全体に対する利用不可能性条件であるとみなしてもよい）、他の実施形態では、サーバブロックデータストレージシステムは、データアクセス要求に応答することができる限りは、利用不可能であるとはみなせない。
【００１５】
さらに、既存のサーバブロックデータストレージシステムが利用不可能になったときにその既存のサーバブロックデータストレージシステムから１つまたは複数のボリュームを移動することに加えて、ＢＤＳシステムマネージャは、いくつかの実施形態では、既存のサーバブロックデータストレージシステムから異なるサーバブロックデータストレージシステムに１つまたは複数のボリュームを移動することを決定し、および／またはさまざまな別の時点において、さまざまな他の理由から、１つまたは複数のボリュームの新規コピーを作成することを決定することができる。１つのボリュームの新規コピーの移動もしくは作成は、別のところでさらに詳しく説明されている方法と似た方法で（例えば、ボリュームのプライマリコピーのレプリケーションを行って新規コピーを作成することにより、またボリュームのコピーが移動されているときなど、少なくともいくつかの状況においてボリュームの以前のコピーを適宜削除することにより）実行されうる。ボリュームの移動またはボリュームのコピーの新規作成のきっかけとなりうる状況としては、例えば、すべてというわけではないが、例えば特定のサーバブロックデータストレージシステムからの１つまたは複数のボリュームの移動をトリガーしようとして、その特定のサーバブロックデータストレージシステムが（例えば、ＣＰＵの使用率、ネットワーク帯域幅、Ｉ／Ｏアクセス、ストレージ容量などに基づいて）使用されすぎていると思われる状況、例えば特定のサーバブロックデータストレージシステムからの１つまたは複数のボリュームの移動をトリガーしようとして、その特定のサーバブロックデータストレージシステムが既存のボリュームの所望の修正に対し十分なリソースが不足していると思われる（例えば、既存のボリュームのサイズの拡大が要求された場合に利用可能な十分なストレージ領域が不足していると思われる）状況、例えば特定のサーバブロックデータストレージシステムからの１つまたは複数のボリュームの一時的もしくは恒久的移動をトリガーしようとして、その特定のサーバブロックデータストレージシステムが一定期間システムを利用不可能にするメンテナンスまたはアップグレードを必要とする状況、追加の機能を備える他のサーバブロックデータストレージシステムなどの、他のサーバブロックデータストレージシステム上での方が特定のボリュームの使用パターンまたはボリュームの他の特性にうまく対応できるという認識に基づく状況（例えば、データ修正が頻繁に行われるボリュームについては、平均を超えるディスク書き込み機能を有するプライマリサーバブロックデータストレージシステムを使用し、および／またはサイズの非常に大きなボリュームについては、平均を超えるストレージ容量を有するプライマリサーバブロックデータストレージシステムを使用する）、ボリュームを作成した、または他の何らかの方法でボリュームに関連付けられているユーザからの要求に応答する状況（例えば、機能を増強したサーバブロックデータストレージシステムへのプレミアムアクセスをユーザが購入したことへの応答）、例えば他の地理的位置の場所にある実行プログラムによる１つのボリュームの使用が要求されたときに第１の地理的位置の場所にあるサーバブロックデータストレージシステムからのボリュームの移動および／またはコピーをトリガーしようとして、１つのボリュームの少なくとも１つの新規コピーをプログラムが実行される異なる地理的位置の場所（例えば、他のデータセンター）に供給する状況などが挙げられる。
【００１６】
それに加えて、ボリュームが移動されたか、または新規コピーが作成された後、ＢＤＳシステムマネージャは、いくつかの実施形態および状況において、１つまたは複数のノードマネージャ（例えば、そのボリュームを現在使用している実行プログラム用のノードマネージャのみ、すべてのノードマネージャなど）を適宜更新することができる。他の実施形態では、ボリュームに関するさまざまな情報が、ノードマネージャおよび／またはＢＤＳシステムマネージャからネットワーク経由でアクセス可能なボリューム情報データベースの１つまたは複数のコピーを有することなどの、他の方法により保持されうる。保持することができるボリュームに関する情報の種類としては、すべてというわけではないが、ボリュームのコピーを格納するサーバブロックデータストレージシステムに対して一意的な、またはブロックデータストレージサービスに対して大域的に一意的な識別子などの、ボリュームの識別子、ボリュームに対する、パスワードもしくは暗号鍵、またはそのボリュームの認定ユーザのリストもしくは他の指示などの、制限されたアクセス情報、ネットワークアドレスおよび／または他のアクセス情報などの、ボリュームに対するプライマリサーバブロックデータストレージシステムに関する情報、既存のプライマリサーバストレージシステムが利用不可能になった場合にどのミラーサーバブロックデータストレージシステムをプライマリシステムに格上げするかを示す順序付けに関する情報、ネットワークアドレスおよび／または他のアクセス情報などの、ボリュームに対する１つまたは複数のミラーサーバブロックデータストレージシステムに関する情報、以下でさらに詳しく説明するような、ボリュームに対し作成されたスナップショットボリュームのコピーに関する情報、ボリュームがボリュームの作成者以外のユーザから利用可能であるかどうか、もし利用可能であれば、どのような状況の下で利用可能か（例えば、読み取りアクセスのみについて、このボリュームのコピーである自ボリュームを作成する他のユーザに対して、ボリュームへのさまざまな種類のアクセスを受ける他のユーザに対する価格設定情報）に関する情報などが挙げられる。
【００１７】
サーバブロックデータストレージシステムが利用不可能になったときにボリュームのコピーの移動または他の何らかの方法によるレプリケーションを行うことによるブロックデータストレージボリュームへの実行プログラムのアクセスの信頼性および可用性を維持することに加えて、ブロックデータストレージサービスは、他の状況では他のアクションを実行することでブロックデータストレージボリュームへの実行プログラムのアクセスを維持することができる。例えば、第１の実行プログラムが突然利用不可能になった場合、いくつかの実施形態では、ブロックデータストレージサービスおよび／またはプログラム実行サービスは、異なる第２の実行プログラム（例えば、異なるホストコンピューティングシステム上で実行中の同じプログラムの第２のコピー）を利用不可能な第１のプログラムによって使用中であったいくつかの、またはすべてのブロックデータストレージボリュームにアタッチさせるアクションを実行し、第２のプログラムが利用不可能な第１のプログラムの少なくともいくつかのオペレーションを素早く引き継ぐようにすることができる。第２のプログラムは、いくつかの状況では、既存の第１のプログラムが利用不可能であることによって実行が開始される新規プログラムであってもよいが、他の状況では、第２のプログラムが、（例えば、複数のプログラムコピーのうちの１つが第２のプログラムとして選択される、ロードバランサーによって媒介されるような異なる受信クライアント要求を受信する複数のウェブサーバプログラムなどの、複数のプログラムコピーが作業負荷全体を分散させるように同時実行される場合、第２のプログラムが、既存の第１のプログラムが利用不可能になる状況が発生するまでアクティブに使用されているスタンバイプログラムコピーがない場合などにおいて、利用不可能になった場合に既存の第１のプログラムから「ホットスワップ」することが可能なように実行されているプログラムのスタンバイコピーである場合など）すでに実行中であってもよい。それに加えて、いくつかの実施形態では、既存のボリュームのアタッチおよび進行中の使用の切り替え先である第２のプログラムが、第１のプログラムと同じ地理的位置の場所（例えば、同じデータセンター）内の別のホスト物理的コンピューティングシステム上に置かれている可能性があるが、他の実施形態では、第２のプログラムが、異なる地理的位置の場所（例えば、それとは別のデータセンターにすでに移動されているか、同時に移動されており、第２のプログラムによって使用されることになるボリュームのコピーと連携などをする、異なるデータセンター）上に置かれている可能性がある。さらに、いくつかの実施形態において、利用不可能な第１のプログラムを対象とするいくつかの通信を第２のプログラムにリダイレクトすることなどによって、第２のプログラムへの切り替えをさらに容易にする他の関係するアクションを実行することができる。
【００１８】
それに加えて、少なくともいくつかの実施形態では、他の技術を使用することで、ブロックデータストレージボリュームへのアクセスの信頼性および可用性を高めるだけでなく、指示されたボリュームのコピーを（例えば、ボリュームのアクティブなプライマリコピーおよびミラーコピーをサーバブロックデータストレージシステムが格納する第１の地理的位置の場所から離れている、および／またはそのボリュームを使用するプログラムを実行するホスト物理的コンピューティングシステムから離れている第２の地理的位置の場所にある）１つまたは複数のリモートのアーカイブストレージシステムに、長期的なバックアップおよび／または他の目的などのために保存することができるといった他の恩恵も受けることができる。例えば、いくつかの実施形態において、アーカイブストレージシステムは、リモートのネットワーク経由でアクセス可能なストレージサービス側で構成することができる。それに加えて、アーカイブストレージシステムに保存されるボリュームのコピーは、少なくともいくつかの状況では、特定の時点におけるボリュームのスナップショットコピーであってもよいが、これらのコピーは、ボリュームの継続的な使用により、その格納されているブロックデータの内容が変化するときに自動的に更新されることはなく、および／またはボリュームと同じ方法で実行プログラムによるアタッチおよび使用のために利用することはできない。そこで、一例として、ボリュームの長期的なスナップショットコピーは、例えば、ボリュームのバックアップコピーとして使用することができ、さらにいくつかの実施形態では、スナップショットコピーから作成される１つまたは複数の新規ボリュームのベースとして（例えば、新規ボリュームがスナップショットコピーと同じブロックデータストレージの内容から開始するように）機能することができる。
【００１９】
それに加えて、アーカイブストレージシステムにおけるボリュームのスナップショットコピーは、さまざまな方法で格納することができ、（例えば、アーカイブストレージシステムがデータの大きな線形順序ブロック（ｌｉｎｅａｒ  ｓｅｑｕｅｎｔｉａｌ  ｂｌｏｃｋ）ではなくより小さなオブジェクトとしてデータを格納する場合など）例えばボリュームをより小さな複数のチャンクに分けて表すなどの方法で格納することができる。例えば、ボリュームは、一連の複数のより小さなチャンク（１つのボリュームは例えば１ギガバイトもしくは１テラバイトのサイズを有し、チャンクは例えば数メガバイトのサイズを有する）として表すことができ、いくつかのまたはすべてのチャンク（例えば、修正されている各チャンク）に関する情報は、各チャンクを明確に区別される格納されているオブジェクトとして取り扱うことなどによって、アーカイブストレージシステム上に別々に格納することができる。さらに、少なくともいくつかの実施形態において、特定のボリュームの２番目およびそれ以降のスナップショットコピーは、前のスナップショットコピー以降に作成されるか、または修正された新規ストレージチャンクの格納されているコピーを含めるが、それらのチャンクが変化していない場合はいくつかの以前から存在しているチャンクの格納されているコピーを前のスナップショットコピーと共有することなどによって、ボリュームの前のスナップショットコピーからの増分変化のみを格納するような方法で作成されうる。そのような実施形態では、前のスナップショットコピーが後で削除される場合、後のスナップショットコピーによって共有されるその前のスナップショットコピーによって格納されている以前から存在しているチャンクは、それらの後のスナップショットコピーによる使用のために保持されうるが、その前のスナップショットコピーによって格納されている共有されていない以前から存在しているチャンクは削除されうる。
【００２０】
それに加えて、少なくともいくつかの実施形態では、ある時点においてボリュームのスナップショットコピーを作成するときに、実行プログラムによるプライマリボリュームのコピーへのアクセスは、プライマリボリュームのコピーに格納されているデータへの修正を許可することを含めて、継続させることができる。ただし、スナップショットコピーが、スナップショットコピー作成が開始した時点では更新されず、スナップショットコピー作成が完了してやっと更新されるアーカイブストレージシステム上に格納されているボリュームのチャンクに基づく場合などにおいて、そのような進行中のデータ修正はスナップショットコピー内に反映されない。例えば、少なくともいくつかの実施形態において、ボリュームのスナップショットコピーの作成が開始され、そのボリュームのチャンクがその後修正される場合に、コピーオンライト技術が使用される。これにより、プライマリボリュームのコピーを格納するプライマリサーバブロックデータストレージシステム上に（さらには適宜、そのボリュームの複数のミラーコピーのうちの１つまたは複数のミラーコピーを格納するミラーサーバブロックデータストレージシステム上にも）、未修正のチャンクと修正済みのチャンクの両方が格納されているコピーを最初に保持される。アーカイブストレージシステムが（未修正のチャンクのコピーを含む）ボリュームのスナップショットコピーを正常に格納したことを示す確認を受け取ると、プライマリサーバブロックデータストレージシステム上の（および適宜、ミラーサーバブロックデータストレージシステム上の）未修正のチャンクコピーは、削除されうる。
【００２１】
さらに、アーカイブストレージシステム上に格納されるそのようなボリュームのチャンクまたは他のボリュームデータは、少なくともいくつかの実施形態では、アーカイブストレージシステムをいくつかのまたはすべてのボリュームのプライマリコピーおよび／またはミラーコピーの外部記憶域として使用するなど、他の方法で使用することができる。例えば、アーカイブストレージシステム上に格納されているボリュームデータは、少なくともいくつかの状況において、複数のサーバブロックデータストレージシステム上のボリュームの複数のコピー間の整合性を維持するのを支援するために使用されうる。一例として、ボリュームの１つまたは複数のミラーコピーは、ボリュームのチャンクの少なくともいくつかを取得するためにプライマリボリュームのコピーにアクセスする必要性を極力減らすか、またはまったくなくすなどのために、アーカイブストレージシステム上に格納されているボリュームのチャンクに少なくとも一部は基づいて、作成もしくは更新することができる。例えば、プライマリボリュームのコピーは、アーカイブストレージシステム上の修正されたチャンクより速く、またはより確実に更新される場合、（例えば、最近のスナップショットボリュームのコピーから）正確であることが知られているアーカイブストレージシステム上に格納されている少なくともいくつかのボリュームのチャンクを使用し、さらに、スナップショットボリュームのコピーの作成の後に修正されている可能性のあるチャンクに対応するボリュームの一部分を取得するためにのみプライマリボリュームのコピーにアクセスすることによって、新規のミラーボリュームのコピーが作成されうる。同様に、アーカイブストレージシステム上の修正されたチャンクが、プライマリボリュームのコピーの現在の状態を確実に反映している場合に、プライマリボリュームのコピーによるやり取り、またはプライマリボリュームのコピーとのやり取りを介してではなく、それらの修正されたチャンクを使用しミラーボリュームのコピーを更新することができる。
【００２２】
それに加えて、いくつかの実施形態では、アーカイブストレージシステム上のボリューム情報がそのような最小のミラーボリュームのコピーに他の何らかの方法で格納される少なくとも一部のデータの代わりに使用される場合などでは、ミラーボリュームのコピー内に格納されるデータの量（およびその結果のミラーボリュームのコピーのサイズ）は、ボリュームのプライマリコピーに比べてかなり少ないと思われる。一例として、ボリュームのスナップショットコピーが、１つまたは複数のアーカイブストレージシステム上に作成された後、ボリュームの最小のミラーコピーが、そのような実施形態において、スナップショットボリュームのコピー内に存在するボリュームデータのどれかを格納する必要はない。スナップショットコピー作成の後に、プライマリボリュームのコピーに対して修正が行われると、それらのデータ修正のいくつかまたはすべてが、最小のミラーボリュームのコピーに対しても行われる（例えば、データ修正のすべて、アーカイブストレージシステム上に格納されている修正されたボリュームのチャンク内に反映されないデータ修正のみなど）−次いで、最小のミラーボリュームのコピーがプライマリボリュームのコピーに格上げされる場合など、最小のミラーボリュームのコピーへのアクセスが後で必要になった場合、アーカイブストレージシステムから（例えば、前のスナップショットボリュームのコピーから）取り出すことによって最小のミラーボリュームのコピーから欠落している他のデータ（例えば、ボリュームの修正されていない部分）を復元することができる。この方法により、ボリュームの信頼性を高めることが可能であり、その一方で、ミラーボリュームのコピーに対するサーバブロックデータストレージシステム上で使用されるストレージ領域の量も最小限度に抑えられる。
【００２３】
さらに他の実施形態において、ボリュームの最も確実なコピー、つまりマスターコピーは、アーカイブストレージシステム上に保持され、そのボリュームのプライマリコピーおよびミラーコピーは、ボリュームのキャッシュまたは他の部分集合（例えば、最近アクセスされた、および／またはまもなくアクセスされることが予想される部分集合）を反映することができ−そのような実施形態では、ブロックデータストレージサービスのローカルでないブロックデータストレージボリュームは、リモートのアーカイブストレージシステムに比べて実行プログラムによるアクセスのためのボリュームデータのより近いソースを構成するために使用されうる。それに加えて、少なくともいくつかのそのような実施形態において、ボリュームは、アーカイブストレージシステム上に保持されるマスターコピーに対応する特定のサイズのものであるが、プライマリコピーおよびミラーコピーはより小さなサイズであると、ユーザに対して説明することができる。さらに、少なくともいくつかのそのような実施形態において、ボリュームの一部に対する書き込みオペレーションまたは他のデータ修正が第２のデータストアにおいて更新されてから第２のデータストアからのボリュームのその部分のその後の読み取りオペレーションまたは他のアクセスを実行することを確実にすることによって（例えば、ライトバックキャッシュ更新技術を使用することによって）第２のデータストアにおける厳密なデータ整合性を維持するなどの方法により、遅延更新技術を使用することで、第１のデータストア内のデータについてはそのコピー（例えば、サーバブロックデータストレージシステム上のプライマリボリュームのコピー）を即座に更新し、明確に区別される第２のデータストア（例えば、アーカイブストレージシステム）内のその同じデータについてはそのコピーを後で更新することができる。このような遅延更新技術は、例えば、アーカイブストレージシステム上のボリュームの修正されたチャンクを更新するとき、またはアーカイブストレージシステム上に格納されているボリュームの修正されたチャンクからミラーボリュームのコピーを更新するときに使用することができる。他の実施形態では、アーカイブストレージシステム上のボリュームの修正されたチャンクを更新するときに他の技術を使用することができ、例えば第１のデータストア内のデータのコピーが修正されたときにライトスルーキャッシュ技術を使用して（例えば、アーカイブストレージシステム上の）第２のデータストア内のデータのコピーを即座に更新することなどが行える。
【００２４】
アーカイブストレージシステム上に格納されるこのようなスナップショットボリュームのコピーも、さまざまな他の恩恵をもたらす。例えば、ボリュームのすべてのプライマリコピーおよびミラーコピーが単一の地理的位置の場所（例えば、データセンター）にある複数のサーバブロックデータストレージシステム上に格納され、その地理的位置の場所にあるコンピューティングシステムおよびストレージシステムが利用不可能になった場合（例えば、データセンター全体に停電が生じた場合）、リモートの異なるストレージ配備場所にボリュームの最近のスナップショットコピーが存在していれば、その地理的位置の場所にあるコンピューティングシステムおよびストレージシステムが後で再び利用可能になったときに（例えば電力供給が復旧したときに）、その地理的位置の場所の１つまたは複数のサーバストレージシステムからのデータが喪失した場合などでも、ボリュームの最新バージョンが利用可能であることが保証されうる。さらに、このような状況では、リモートのアーカイブストレージシステムからのボリュームの最近の長期的なスナップショットコピーに基づいて、ボリュームの１つまたは複数の新規コピーを１つまたは複数の新規の地理的位置の場所に作成することで、利用不可能な地理的位置の外の場所にある１つまたは複数の実行プログラムコピーがそれらの新規ボリュームのコピーにアクセスし、使用することなどが可能になる。アーカイブストレージシステムとその使用法に関係する追加の詳細を以下で述べる。
【００２５】
すでに述べたように、少なくともいくつかの実施形態において、いくつかの、またはすべてのブロックデータストレージボリュームは、それぞれ、実行プログラムがボリュームにアクセスする同じデータセンター内などの、単一の地理的位置の場所にある２つまたはそれ以上の明確に区別されるサーバブロックデータストレージシステム上に格納されているコピーを有する−ボリュームのコピーおよび実行プログラムのすべてを同じデータセンターもしくは他の地理的位置の場所に配置することによって、レイテンシおよびスループットなどの、さまざまな所望のデータアクセス特性を（例えば、そのデータセンターもしくは他の地理的位置の場所の１つまたは複数の内部ネットワークに基づいて）維持することができる。例えば、少なくともいくつかの実施形態では、説明されている技術により、ローカルの物理ブロックデータストレージデバイスのアクセス特性と同様の、またはそれ以上のアクセス特性を有する非ローカルブロックデータストレージへのアクセスが可能になり、しかもＲＡＩＤ（「Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ／Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ」）システムおよび／または専用のＳＡＮ（「ストレージエリアネットワーク」）の信頼性特性と同様の、またはそれを超えるかなり高い信頼性が実現され、さらにはコストもかなり低減される。他の実施形態では、代わりに、少なくともいくつかのボリュームに対するプライマリコピーおよびミラーコピーを、他の方法で、異なる地理的位置の場所（例えば、異なるデータセンター）などに格納し、１つのデータセンター全体が利用不可能になったとしてもボリュームの可用性をさらに維持することなどが可能である。ボリュームのコピーが異なる地理的位置の場所に格納されうる実施形態では、ユーザは、いくつかの状況において、実行プログラムとプライマリボリュームのコピーとの間の通信に対してネットワーク帯域幅を比較的高くし、レイテンシを低くするなどのために、特定のプログラムが特定のボリュームの近くで（例えば、プライマリボリュームのコピーが配置されている同じデータセンターで）実行されること、または特定のボリュームが特定の実行プログラムの近くに配置されることを要求することができる。
【００２６】
さらに、説明されている技術のうちの一部または全部へのアクセスは、いくつかの実施形態では、少なくとも一部のユーザに対して、課金ベースまたは他の有料形態の方式で提供されうる。例えば、ユーザは、ブロックデータストレージサービスを使用してボリュームを格納し、アクセスする場合、プログラム実行サービスを使用してプログラムを実行する場合、および／またはアーカイブストレージシステム（例えば、リモートの長期的なストレージサービスによって提供される）を使用してボリュームの長期的なバックアップまたは他のスナップショットコピーを格納する場合の料金支払いに、料金一時払い、定期的料金支払い（例えば、月払い）、および／または１つまたは複数の種類の利用毎の料金支払いを利用することができる。料金は、１つまたは複数の要因および活動に基づくものとしてよく、例えば、すべてというわけではないが、ボリュームを作成する（例えば、料金一時払い）、進行中にボリュームを格納および／または使用する（例えば、料金月払い）などのために、ボリュームのサイズに基づく、ミラーコピーの数、プライマリボリュームのコピーおよび／またはミラーボリュームのコピーが格納されるサーバブロックデータストレージシステムの特性（例えば、データアクセス速度、ストレージサイズなど）、および／またはボリュームの作成形態（例えば、空の新規ボリューム、既存のボリュームのコピーである新規ボリューム、スナップショットボリュームのコピーのコピーである新規ボリュームなど）などの、ボリュームの、サイズ以外の特性に基づく、スナップショットボリュームのコピーを作成する（例えば、料金一時払い）、および／または進行中にボリュームを格納する（例えば、料金月払い）などのために、スナップショットボリュームのコピーのサイズに基づく、単一のボリュームのスナップショットの数、スナップショットコピーが１つまたは複数の前のスナップショットコピーに関して増分であるかどうかなどの、１つまたは複数のスナップショットボリュームのコピーの、サイズ以外の特性に基づく、ボリュームに転送され、および／またはボリュームから転送されるデータの量（例えば、使用されるネットワーク帯域幅の量を反映する）、ボリュームに送られるデータアクセス要求の数、ボリュームにアタッチし、ボリュームを使用する実行プログラムの数（逐次的または同時実行）などのボリュームの使用率に基づく、ボリュームに対するのと似た方法などで、スナップショットに転送され、および／またはスナップショットから転送されるデータの量に基づくものとすることができる。それに加えて、提供されるアクセスは、さまざまな実施形態において、購入料金一時払い、継続レンタル料金支払い、および／または他の継続サブスクリプションベースの料金支払いなどのさまざまな支払い形態をとりうる。さらに、少なくともいくつかの実施形態および状況において、１人または複数のユーザからなる第１のグループはデータを課金ベースで他のユーザに提供することができ、これにより、（例えば、ボリュームおよび／またはスナップショットボリュームのコピーのコピーである新規ボリュームを作成できるようにする、１つまたは複数の作成されたボリュームを使用できるようにすることなどによって）第１のグループの１人または複数のユーザによって作成された現在のボリュームおよび／またはこれまでのスナップショットボリュームのコピーへのアクセスを受けることに関して、購入料金一時払いの形態であろうと、継続レンタル料金支払いの形態であろうと、他の継続サブスクリプションベースの料金支払いの形態であろうと、他のユーザに課金することなどを行うことができる。
【００２７】
いくつかの実施形態において、ブロックデータストレージサービス、プログラム実行サービス、および／またはリモートの長期的なストレージサービスが１つまたは複数のＡＰＩ（「アプリケーションプログラミングインターフェイス」）を備え、これにより、別のプログラムから（例えば、別のプログラムのユーザによって指示されたとおりに）実行されるべきさまざまな種類のオペレーションを開始できるようにプログラムを組むことなどができる。このようなオペレーションでは、すでに説明されている種類の機能の一部または全部を呼び出すことができ、限定はしないが、ボリュームの作成、削除、アタッチ、デタッチ、または説明、スナップショットの作成、削除、コピー、または説明、ボリュームおよび／またはスナップショットに対するアクセス権もしくは他のメタデータの指定、プログラムの実行の管理、他の種類の機能を取得するための対価の支払いの実行、複数のサービスのうちの１つまたは複数のサービスの機能の使用、および／またはそのような使用に関して支払われた、または支払われるべき料金に関するレポートおよび他の情報の取得など種類のオペレーションが挙げられる。ＡＰＩによって実現されるオペレーションは、例えば、プログラム実行サービスのホストコンピューティングシステム上の実行プログラムによって、および／またはブロックデータストレージサービスおよび／またはプログラム実行サービスによって使用される１つまたは複数の地理的位置の場所の外部にいる顧客もしくは他のユーザのコンピューティングシステムによって呼び出すことができる。
【００２８】
例示することを目的として、特定の種類のブロックデータストレージが特定の種類のコンピューティングシステム上で実行される特定の種類のプログラムに特定の方法で提供されるいくつかの実施形態について、以下で説明する。これらの例は、例示することを目的として提示され、わかりやすくするために簡略化されており、本発明の技術はさまざまな他の状況において使用することができ、そのうちのいくつかの状況について以下で説明されているが、これらの技術は、仮想マシン、データセンター、または他の特定の種類のデータストレージシステム、コンピューティングシステム、もしくはコンピューティングシステム配置構成との使用に限定されない。それに加えて、いくつかの実施形態は、信頼できる非ローカルブロックデータストレージを構成し、使用するものとして説明されているが、他の実施形態では、ブロックデータストレージ以外の種類のデータストレージも同様に構成することができる。
【図面の簡単な説明】
【００２９】
【図１】複数のコンピューティングシステムがプログラムを実行し、信頼できる非ローカルブロックデータストレージにアクセスする例示的な一実施形態を示すネットワーク図である。
【図２Ａ】信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示す図である。
【図２Ｂ】信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示す図である。
【図２Ｃ】信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示す図である。
【図２Ｄ】信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示す図である。
【図２Ｅ】信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示す図である。
【図２Ｆ】信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示す図である。
【図３】信頼できる非ローカルブロックデータストレージ機能へのプロビジョニングおよびクライアント側でのその使用の運用管理に適した例示的なコンピューティングシステムを示すブロック図である。
【図４】ブロックデータストレージシステムマネージャルーチンの例示的な一実施形態の流れ図である。
【図５】ノードマネージャルーチンの例示的な一実施形態の流れ図である。
【図６】ブロックデータストレージサーバルーチンの例示的な一実施形態の流れ図である。
【図７Ａ】プログラム実行サービスシステムマネージャルーチンの例示的な一実施形態の流れ図である。
【図７Ｂ】プログラム実行サービスシステムマネージャルーチンの例示的な一実施形態の流れ図である。
【図８】ブロックデータストレージアーカイブマネージャルーチンの例示的な一実施形態の流れ図である。
【発明を実施するための形態】
【００３０】
図１は、ブロックデータストレージサービスおよび／またはプログラム実行サービスの制御下などにおいて、複数のコンピューティングシステムがプログラムを実行し、信頼できる非ローカルブロックデータストレージにアクセスする例示的な一実施形態を示すネットワーク図である。特に、この例では、プログラム実行サービスが、データセンター１００内に配置されているさまざまなホストコンピューティングシステム上のプログラムの実行を管理し、ブロックデータストレージサービスが、データセンターの複数の他のサービスブロックデータストレージシステムを使用して、それらの実行プログラムに信頼できる非ローカルブロックデータストレージを提供する。データセンターの外部にある複数のリモートのアーカイブストレージシステムは、少なくともいくつかのブロックデータストレージボリュームの少なくともいくつかの部分の追加のコピーを格納するために使用することもできる。
【００３１】
この例では、データセンター１００は、多数のラック１０５を備え、各ラックは、多数のホストコンピューティングシステム、さらにはこの例示的な実施形態におけるオプションのラックサポートコンピューティングシステム１２２を備える。例示されているラック１０５上のホストコンピューティングシステム１１０ａ〜ｃは、この例では１つまたは複数の仮想マシン１２０をそれぞれホストし、さらには、そのホストコンピューティングシステム上の仮想マシンに関連付けられている明確に区別されるノードマネージャモジュール１１５をホストし、それらの仮想マシンを管理する。１つまたは複数の他のホストコンピューティングシステム１３５は、この例では１つまたは複数の仮想マシン１２０をそれぞれホストする。各仮想マシン１２０は、プログラム実行サービスの顧客などの、ユーザ（図示せず）のために１つまたは複数のプログラムコピー（図示せず）を実行する独立したコンピューティングノードとして動作することができる。それに加えて、この例示的なデータセンター１００は、明確に区別される仮想マシンを備えていない追加のホストコンピューティングシステム１３０ａ〜ｂをさらに備えるが、それでもなお、ユーザのために実行されている１つまたは複数のプログラム（図示せず）に対してコンピューティングノードとしてそれぞれ動作しうる。この例では、ホストコンピューティングシステム１３０ａ〜ｂおよび１３５から明確に区別されるコンピューティングシステム（図示せず）上で実行するノードマネージャモジュール１２５は、それらのホストコンピューティングシステムに関連付けられ、これにより、ホストコンピューティングシステム１１０のノードマネージャモジュール１１５と似た方法などで、それらのホストコンピューティングシステムが備えるコンピューティングノードを管理する。ラックサポートコンピューティングシステム１２２は、さまざまなユーティリティーサービス（例えば、プログラムの長期的な格納、計測、およびプログラム実行および／またはラックのローカルにある他のコンピューティングシステムによって実行される非ローカルブロックデータストレージアクセスの他の監視など）をそのラック１０５のローカルにある他のコンピューティングシステムに、さらに場合によっては、データセンター内に配置されている他のコンピューティングシステムに提供することができる。各コンピューティングシステム１１０、１３０、および１３５も、実行プログラムによって作成されるか、または他の何らかの形で使用されるプログラムおよび／またはデータのローカルコピー、さらにはさまざまな他のコンポーネントを格納するなどのために、１つまたは複数のローカルのアタッチされたストレージデバイス（図示せず）を有することができる。
【００３２】
この例では、データセンター内に配置されているホストコンピューティングシステムが備えるコンピューティングノード上の（または適宜、１つまたは複数の他のデータセンター１６０内に配置されているコンピューティングシステム、またはデータセンターの外部にある他のリモートのコンピューティングシステム１８０上の）プログラムの実行を管理するのを支援するプログラム実行サービスのために、ＰＥＳシステムマネージャモジュールを実行するオプションのコンピューティングシステム１４０も例示されている。別のところでさらに詳しく説明されているように、ＰＥＳシステムマネージャモジュールは、プログラムの実行を管理することに加えてさまざまなサービスを提供することができ、例えば、ユーザアカウントの管理（例えば、作成、削除、課金など）、実行すべきプログラムの登録、格納、および配布、プログラムの実行に関係する性能および監査データの収集ならびに処理、プログラムの実行に関する顧客または他のユーザからの対価の徴収などが挙げられる。いくつかの実施形態では、ＰＥＳシステムマネージャモジュールは、ノードマネージャモジュール１１５および１２５との間で、ノードマネージャモジュールに関連付けられているコンピューティングノード上のプログラム実行を管理するための調整を行うことができるが、他の実施形態では、ノードマネージャモジュール１１５および１２５は、プログラムのそのような実行の管理を支援できない。
【００３３】
この例示的なデータセンター１００は、データセンター内に配置されているホストコンピューティングシステムが備えるコンピューティングノード上で（または適宜、１つまたは複数の他のデータセンター１６０内に配置されているコンピューティングシステムまたはデータセンターの外部にある他のリモートのコンピューティングシステム１８０上で）実行するプログラムに対する非ローカルブロックデータストレージの可用性を管理するのを支援するブロックデータストレージサービスのために、ブロックデータストレージ（「ＢＤＳ」）システムマネージャモジュールを実行するコンピューティングシステム１７５も備える。特に、この例では、データセンター１００は、複数のサーバブロックデータストレージシステム１６５のプールを備え、それぞれが、１つまたは複数のボリュームのコピー１５５を格納する際に使用するためのローカルブロックストレージを有する。コンピューティングノード１２０および１３０上で実行されるプログラムからのボリュームのコピー１５５へのアクセスは、内部ネットワーク（複数可）１８５を介して行われる。別のところでさらに詳しく説明されているように、ＢＤＳシステムマネージャモジュールは、非ローカルブロックデータストレージ機能を提供することに関係するさまざまなサービスを提供することができ、例えば、ユーザアカウントの管理（例えば、作成、削除、課金など）、ブロックデータストレージボリュームおよびそれらのボリュームのスナップショットコピーの作成、使用、および削除、ブロックデータストレージボリュームおよびそれらのボリュームのスナップショットコピーの使用に関係する性能および監査データの収集および処理、ブロックデータストレージボリュームおよびそれらのボリュームのスナップショットコピーの使用に関する顧客または他のユーザからの対価の徴収などが挙げられる。いくつかの実施形態では、ＢＤＳシステムマネージャモジュールは、ノードマネージャモジュール１１５および１２５との間で、関連付けられているコンピューティングノード上で実行されているプログラムによるボリュームの使用を管理するための調整を行うことができるが、他の実施形態では、ノードマネージャモジュール１１５および１２５は、そのようなボリューム使用を管理するために使用できない。それに加えて、他の実施形態では、１つまたは複数のＢＤＳシステムマネージャモジュールは、（例えば、データセンター内に配置されているホストコンピューティングシステムが備えるコンピューティングノード上で実行するプログラムによる非ローカルブロックデータストレージの管理を共有するために）単一のデータセンター内で実行するＢＤＳシステムマネージャの複数のインスタンスを有するなど、および／または（例えば、コンピューティングシステム１７５上に別の集中型ＢＤＳシステムマネージャモジュールを備えずに、ピアツーピア方式により）複数のサーバブロックデータストレージシステム１６５のうちの一部、またはすべてにおいて実行するソフトウェアによって分散方式で実現されている、ＢＤＳシステムマネージャモジュールの機能のうちの少なくとも一部を有するなど、他の方法で構造化されうる。
【００３４】
この例では、さまざまなホストコンピューティングシステム１１０、１３０、および１３５、サーバブロックデータストレージシステム１６５、ならびにコンピューティングシステム１２５、１４０、および１７５は、図示されていないさまざまなネットワーキングデバイス（例えば、ルーター、スイッチ、ゲートウェイなど）を備えることができる、データセンターの１つまたは複数の内部ネットワーク１８５を介して相互接続される。それに加えて、内部ネットワーク１８５は、この例では外部ネットワーク１７０（例えば、インターネットもしくは他の公衆回線ネットワーク）に接続され、データセンター１００は、データセンター１００と外部ネットワーク１７０との間の相互接続部のところに１つまたは複数のオプションデバイス（図示せず）（例えば、ネットワークプロキシ、ロードバランサー、ネットワークアドレス変換デバイスなど）をさらに備えることができる。この例では、データセンター１００は、外部ネットワーク１７０を介して、データセンター１００に関して例示されている複数のコンピューティングシステムおよびストレージシステムのうちのいくつか、またはすべて、さらにはデータセンターの外部にある他のリモートのコンピューティングシステム１８０をそれぞれが備えることができる１つまたは複数の他のデータセンター１６０に接続される。他のコンピューティングシステム１８０は、さまざまな目的を持つさまざまな関係者、例えばデータセンター１００のオペレータまたは第三者（例えば、プログラム実行サービスおよび／またはブロックデータストレージサービスの顧客）などによって運用されうる。それに加えて、他のコンピューティングシステム１８０の１つまたは複数は、別のところでさらに詳しく説明されているように、１つまたは複数の他のコンピューティングシステム１８０上で、または代わりに、データセンター１００の１つまたは複数のコンピューティングシステム上で実行する１つまたは複数のアーカイブマネージャモジュール（図示せず）の制御下などにおいて、ブロックデータストレージサービスがやり取りすることができるアーカイブストレージシステム（例えば、リモートのネットワーク経由でアクセス可能なストレージデバイスの一部としての）とすることができる。さらに、本明細書には例示されていないが、少なくともいくつかの実施形態において、複数のサーバブロックデータストレージシステム１６５のうちの少なくともいくつかのサーバブロックデータストレージシステムは、サーバストレージシステム１６５がボリュームデータを（例えば、ボリュームのコピーのレプリケーションを行い、および／またはボリュームのプライマリコピーとミラーコピーとの間の整合性を維持することを目的として）共有できる高帯域幅接続などにより、１つまたは複数の他のネットワークもしくは他の接続媒体とさらに相互接続することができるが、そのような高帯域幅接続は少なくともいくつかの実施形態におけるさまざまなホストコンピューティングシステム１１０、１３０、および１３５には利用可能でない。
【００３５】
図１の例が説明のために簡略化されていること、およびホストコンピューティングシステム、サーバブロックデータストレージシステム、および他のデバイスの数および編成が図１に示されているものと比べてかなり大きなものとなる可能性のあることは理解されるであろう。例えば、例示されている一実施形態において、データセンター毎に約４０００台のコンピューティングシステムがあるものとしてよく、これらのコンピューティングシステムのうちの少なくともいくつかは１５台の仮想マシンをそれぞれホストすることができるホストコンピューティングシステムであり、および／またはこれらのコンピューティングシステムのうちのいくつかは複数のボリュームのコピーをそれぞれ格納することができるサーバブロックデータストレージシステムである。各ホストされている仮想マシンが１つのプログラムの実行する場合、そのようなデータセンターは、一度に６００００個ほどのプログラムコピーを実行することができる。さらに、サーバストレージシステムの数、ボリュームのサイズ、およびボリューム毎のミラーコピーの数に応じて、数百または数千個の（またはそれ以上の）ボリュームをサーバブロックデータストレージシステム上に格納することができる。他の実施形態では、他の数のコンピューティングシステム、プログラム、およびボリュームが使用されうることは理解されるであろう。
【００３６】
図２Ａ〜２Ｆは、信頼できる非ローカルブロックデータストレージ機能をクライアントに提供する例を示している。特に、図２Ａおよび２Ｂは、ブロックデータストレージサービスなどに代わって信頼できる非ローカルブロックデータストレージ機能をクライアント（例えば、実行プログラム）に提供するために使用されうるサーバブロックデータストレージコンピューティングシステムの例を示しており、図２Ｃ〜２Ｆは、いくつかのブロックデータストレージボリュームの少なくともいくつかの部分を格納するためにアーカイブストレージシステムを使用する例を示している。この例では、図２Ａは、各ボリュームが１つのプライマリコピーおよび少なくとも１つのミラーコピーを有するような、１つまたは複数のボリュームのコピー１５５をそれぞれ格納する複数のサーバブロックデータストレージシステム１６５を示している。他の実施形態では、別のところでさらに詳しく説明されているように、複数のプライマリボリュームのコピーを有すること（例えば、プライマリボリュームのコピーのすべてが１つまたは複数のプログラムによる同時読み取りアクセスに利用可能である場合）、および／または複数のミラーボリュームのコピーを有することなどによって、他の配置構成も使用することができる。例示的なサーバブロックデータストレージシステム１６５およびボリュームのコピー１５５は、例えば、図１のサーバブロックデータストレージシステム１６５およびボリュームのコピー１５５の部分集合に対応するものとすることができる。
【００３７】
この例では、サーバストレージシステム１６５ａは、ボリュームＡに対するプライマリコピー１５５Ａ−ａ、ボリュームＢに対するミラーコピー１５５Ｂ−ａ、およびボリュームＣに対するミラーコピー１５５Ｃ−ａを含む、少なくとも３つのボリュームのコピーを格納する。この例に示されていない１つまたは複数の他のボリュームのコピーは、サーバストレージシステム１６５ａだけでなく、他のサーバストレージシステム１６５にもさらに格納されうる。他の例示的なサーバブロックデータストレージシステム１６５ｂは、この例のボリュームＢに対するプライマリコピー１５５Ｅ−ｂだけでなくボリュームＤに対するミラーコピー１５５Ｄ−ｂをも格納する。それに加えて、例示的なサーバブロックデータストレージシステム１６５ｎは、ボリュームＡのミラーコピー１５５Ａ−ｎおよびボリュームＤのプライマリコピー１５５Ｄ−ｎを含む。したがって、実行プログラム（図示せず）がボリュームＡにアタッチされ、ボリュームＡを使用している場合、その実行プログラムに対するノードマネージャは、ボリュームＡに対するプライマリコピー１５５Ａ−ａにアクセスするために、サーバブロックデータストレージシステム１６５ａ上で実行されるサーバストレージシステムソフトウェア（図示せず）を介するなどして、サーバブロックデータストレージシステム１６５ａとやり取りすることになる。同様に、ボリュームＢおよびＤにアタッチされ、ボリュームＢおよびＤを使用している１つまたは複数の実行プログラム（図示せず）について、実行プログラム（複数可）に対するノードマネージャ（複数可）は、それぞれボリュームＢについてはプライマリコピー１５５Ｂ−ｂにアクセスし、ボリュームＤについては１５５Ｄ−ｎにアクセスするために、サーバブロックデータストレージシステム１６５ｂおよび１６５ｎとやり取りする。それに加えて、他のサーバブロックデータストレージシステムがさらに存在する場合もあり（例えば、サーバブロックデータストレージシステム１６５ｃ〜１６５ｍおよび／または１６５ｏとそれ以降）、ボリュームＣに対するプライマリボリュームのコピー、および／または他のプライマリボリュームのコピーとミラーボリュームのコピーを格納することができるが、この例には示されていない。したがって、この例では、各サーバブロックデータストレージシステムは、複数のボリュームのコピーを格納することができ、またプライマリボリュームのコピーとミラーボリュームのコピーとの組み合わせを格納することができるが、ただし、他の実施形態では他の方法でボリュームを格納することができる。
【００３８】
図２Ｂは、図２Ａのものに似ているが、図２Ａのサーバストレージシステム１６５ｂが故障するか、または他の何らかの形で利用不可能になった後のより最近の時点の、サーバブロックデータストレージシステム１６５を例示している。サーバストレージシステム１６５ｂ、およびそれに格納されているボリュームＢのプライマリコピーとボリュームＤのミラーコピーが利用不可能になった場合の応答として、図２Ｂのサーバストレージシステム１６５の格納されているボリュームのコピーが、ボリュームＢおよびＤが利用可能である状態を維持するように修正されている。特に、ボリュームＢのプライマリコピー１５５Ｂ−ｂが利用不可能になったため、サーバストレージシステム１６５ａ上のボリュームＢの前のミラーコピー１５５Ｂ−ａは、ボリュームＢに対する新規プライマリコピーに格上げされた。したがって、１つまたは複数のプログラムがボリュームＢの前のプライマリコピー１５５Ｂ−ｂにすでにアタッチされているか、または他の何らかの方法でやり取りしていたときにそのプライマリコピーが利用不可能になった場合、それらのプログラムは（例えば、それらのプログラムに関連付けられているノードマネージャによって）自動的に遷移され、サーバブロックデータストレージシステム１６５ａとの進行中のやり取りを続行し、ボリュームＢに対する新規プライマリコピー１５５Ｂ−ａにアクセスしている可能性がある。それに加えて、ボリュームＢに対する新規ミラーコピー１５５Ｂ−ｃが、サーバストレージシステム１６５ｃ上に作成されている。
【００３９】
図２Ａのサーバストレージシステム１６５ｎのボリュームＡのミラーコピー１５５Ａ−ｎは、わかりやすくするために、図２Ｂに示されていないが、これは引き続きボリュームＤのプライマリコピー１５５Ｄ−ｎとともにサーバストレージシステム１６５ｎ上で利用可能である。したがって、サーバストレージシステム１６５ｂが利用不可能になったときにボリュームＤのプライマリコピー１５５Ｄ−ｎにすでにアタッチされていたか、または他の何らかの方法でやり取りしていたプログラムは、修正することなくサーバストレージシステム１６５ｎ上のサーバストレージシステム上のその同じプライマリボリュームＤのコピー１５５Ｄ−ｎとやり取りし続ける。しかし、利用不可能なサーバストレージシステム１６５ｂ上のボリュームＤのミラーコピー１５５Ｄ−ｂが利用不可能になったため、サーバストレージシステム１６５ｏのボリュームＤのミラーコピー１５５Ｄ−ｏなどの、ボリュームＤの少なくとも１つの追加のミラーコピーが、図２Ｂにおいて作成されている。それに加えて、図２Ｂは、サーバストレージシステム１６５ｃ上の以前から存在していた（が図２Ａには示されていない）ボリュームＤのミラーコピー１５５Ｄ−ｃも含むボリュームＤなどの、少なくともいくつかのボリュームが複数のミラーコピーを持つことができることを例示している。
【００４０】
図２Ｃ〜２Ｆは、アーカイブストレージシステムを使用していくつかのブロックデータストレージボリュームの少なくともいくつかの部分を格納する例を示している。この例では、図２Ｃは、例えばサーバブロックデータストレージシステム１６５ｂが利用不可能になる前のある時点において図２Ａに示されている例示的なサーバブロックデータストレージシステム１６５に対応するように、１つまたは複数のボリュームのコピー１５５をそれぞれ格納する複数のサーバブロックデータストレージシステム１６５を例示している。図２Ｃは、例えば図１のコンピューティングシステム１８０の部分集合に対応しうる、複数のアーカイブストレージシステム１８０をさらに示している。特に、この例では、図２Ｃは、図２Ａのサーバブロックデータストレージシステム１６５ａおよび１６５ｂを示しているが、この例では、ボリュームＢのプライマリコピーおよびミラーコピーのみが、これらのサーバブロックデータストレージシステムに関して示されている。図２Ａに関して説明されているように、サーバストレージシステム１６５ｂは、ボリュームＢのプライマリコピー１５５Ｂ−ｂを格納し、サーバストレージシステム１６５ａは、ボリュームＢのミラーコピー１５５Ｂ−ａを格納する。
【００４１】
図２Ｃの例では、ボリュームＢに関連付けられているユーザが、ボリュームＢの新規初期スナップショットコピーを、長期的なバックアップなどのために、リモートのアーカイブストレージシステム上に格納するように要求した。したがって、ボリュームＢは、例えばアーカイブストレージシステムの典型的な、もしくは最大のストレージサイズに対応するように、またはブロックデータストレージサービスによって決定されるような別の方法で、アーカイブストレージシステムによってそれぞれ別々に格納される複数のチャンク部分に分けられている。この例では、ボリュームＢのプライマリコピー１５５Ｂ−ｂは、チャンク１５５Ｂ−ｂ１から１５５Ｂ−ｂＮまでのＮ個のチャンクに分けられており、ボリュームＢのミラーコピー１５５Ｂ−ａは、同様に、チャンク１５５Ｂ−ａ１から１５５Ｂ−ａＮまでＮ個のチャンクを使用して同じデータを格納する。ボリュームＢのＮ個のチャンクのそれぞれは、２つの例示的なアーカイブストレージシステム１８０ａおよび１８０ｂのうちの一方に別のデータオブジェクトとして格納される。したがって、これらの複数の対応する格納されている集合状態のデータオブジェクトは、ボリュームＢに対する初期スナップショットボリュームのコピーを形成する。特に、プライマリボリュームＢのコピーのチャンク１  １５５Ｂ−ｂ１は、アーカイブストレージシステム１８０ａ上にデータオブジェクト１８０Ｂ１として格納され、チャンク２  １５５Ｂ−ｂ２は、アーカイブストレージシステム１８０ｂ上にデータオブジェクト１８０Ｂ２として格納され、チャンク３  １５５Ｂ−ｂ３は、アーカイブストレージシステム１８０ａ上にデータオブジェクト１８０Ｂ３として格納され、チャンクＮ  １５５Ｂ−ｂＮは、アーカイブストレージシステム１８０ａ上にデータオブジェクト１８０ＢＮとして格納される。この例では、複数のチャンクへのボリュームＢの分割は、ブロックデータストレージサービスによって実行され、ボリュームＢの個別のチャンクは、アーカイブストレージシステムに個別転送されうるが、他の実施形態では、ボリュームＢ全体が、アーカイブストレージシステムに送られ、そこで、そのボリュームが複数のチャンクに分けられるか、または必要ならば他の何らかの方法でボリュームデータが処理されうる。
【００４２】
それに加えて、この例では、アーカイブストレージシステム１８０ｂは、アーカイブストレージシステムのオペレーションを管理するために、例えばデータオブジェクトの格納および取り出しを管理する、格納されているどのデータオブジェクトがどのボリュームに対応しているかを追跡する、転送されたボリュームデータを複数のデータオブジェクトに分ける、アーカイブストレージシステムの使用を計測し、他の何らかの方法で追跡するなどの作業を行うために、アーカイブマネージャモジュール１９０を実行するアーカイブストレージコンピューティングシステムである。アーカイブマネージャモジュール１９０は、例えば、図２Ｆに関してさらに詳しく説明されているように、例えばボリュームのスナップショットコピー毎に、特定のボリュームに対応するさまざまなデータオブジェクトに関するさまざまな情報を保持することができるが、他の実施形態では、代わりに、そのようなスナップショットボリュームのコピーの情報は、他の方法で（例えば、サーバブロックデータストレージシステムまたはブロックデータストレージサービスの他のモジュールによって）保持されうる。他の実施形態では、単一のアーカイブストレージシステムのみが使用されうるか、または、ボリュームＢのチャンクに対応するデータオブジェクトが、さらに多くのアーカイブストレージシステム（図示せず）にまたがって格納されうる。それに加えて、他の実施形態では、各アーカイブストレージシステムは、アーカイブマネージャモジュールの少なくとも一部を実行して、例えば各アーカイブストレージシステムが明確に区別されるアーカイブマネージャモジュールを有することができ、または、アーカイブストレージシステムのすべてがピアツーピア型分散方式でアーカイブマネージャモジュールの機能を提供することができる。他の実施形態では、１つまたは複数のアーカイブマネージャモジュールは、他のブロックデータストレージサービスモジュールのローカルにある１つまたは複数のコンピューティングシステム上で（例えば、同じコンピューティングシステムまたはＢＤＳシステムマネージャモジュールを実行するものに近いコンピューティングシステム上で）実行されうるか、または、アーカイブストレージシステムのオペレーションは、アーカイブマネージャモジュールを使用せずにブロックデータストレージサービスの１つまたは複数の他のモジュールによって（例えば、ＢＤＳシステムマネージャモジュールによって）直接管理されうる。
【００４３】
さらに、少なくともいくつかの実施形態では、アーカイブストレージシステムは、複数のアーカイブストレージシステム上への一部のまたは全部のデータオブジェクトのレプリケーションを行うなどの格納されているデータオブジェクトの信頼性を高めるためのさまざまなオペレーションを実行することができる。したがって、例えば、アーカイブストレージシステム１８０ｂの他のデータオブジェクト１８２ｂは、アーカイブストレージシステム１８０ａのデータオブジェクト１８０Ｂ１、１８０Ｂ３、および１８０ＢＮのうちの１つまたは複数のデータオブジェクトのミラーコピーを含むことができ、アーカイブストレージシステム１８０ａの他のデータオブジェクト１８２ａは、アーカイブストレージシステム１８０ｂのデータオブジェクト１８０Ｂ２のミラーコピーを同様に格納することができる。さらに、別のところでさらに詳しく説明されているように、いくつかの実施形態では、ボリュームＢの少なくともいくつかのチャンクは、ボリュームＢのチャンクを表すアーカイブストレージシステム上に格納されているデータオブジェクトがボリュームＢの外部記憶域または他のリモートの長期的なバックアップとして使用される場合などにおいて、ボリュームＢの初期スナップショットコピーを作成する要求を受け取る前にアーカイブストレージシステム上にすでに格納されている可能性がある。もしそうであれば、アーカイブストレージシステム上のスナップショットコピーは、アーカイブストレージシステム上のデータオブジェクトがボリュームＢのチャンクの現在の状態を表す場合などは、むしろ、その時点で追加のボリュームデータを転送することなく作成されうるが、他の実施形態では、追加のステップを実行して、すでに格納されているデータオブジェクトがボリュームＢのチャンクに関して必ず最新状態になるようにすることができる。
【００４４】
図２Ｄは、図２Ｃの例の続きであり、図２Ｃに関して初期スナップショットコピーが格納された後に実行されるボリュームＢへの修正を反映している。特に、この例では、初期スナップショットボリュームのコピーが作成された後に、ボリュームにアタッチされている１つまたは複数のプログラム（図示せず）などによって、ボリュームＢが修正される。この例では、プライマリボリュームＢのチャンク３  １５５Ｂ−ｂ３およびチャンクＮ  １５５Ｂ−ｂＮに対応するボリュームＢのコピーの少なくとも２つの部分内のデータが修正され、この修正されたチャンクデータはデータ３ａおよびＮａとしてそれぞれ例示されている。この例では、プライマリボリュームＢのコピー１５５Ｂ−ｂが修正された後、サーバストレージシステム１６５ｂは、サーバストレージシステム１６５ａ上のミラーボリュームＢのコピー１５５Ｂ−ａの対応する更新を開始し、ミラーコピーのチャンク３  １５５Ｂ−ａ３は、修正された３ａデータを含むように修正され、ミラーコピーのチャンクＮ  １５５Ｂ−ａＮは、修正されたＮａデータを含むように修正される。したがって、ミラーボリュームＢのコピーは、この例におけるプライマリボリュームＢのコピーの状態と同じ状態に保持される。
【００４５】
それに加えて、いくつかの実施形態において、アーカイブストレージシステム上のデータは、ボリュームＢへの変更を反映するようにさらに修正されうるが、これは、これらの新規のボリュームＢのデータ修正が、現在、ボリュームＢに対するスナップショットボリュームのコピーの一部でないとしても反映されうる。特に、チャンク３およびチャンクＮのデータの前のバージョンが、アーカイブストレージシステム上に格納されている初期スナップショットボリュームのコピーの一部であるため、対応するデータオブジェクト１８０Ｂ３および１８０ＢＮは、初期スナップショットボリュームのコピーの作成の後に生じるボリュームＢのデータへの変更を反映するようには修正されない。修正されたボリュームＢのデータのコピーが適宜作成される場合、これらのコピーは、この例では、チャンク３  １５５Ｂ−ｂ３の修正された３ａデータに対応するオプションのデータオブジェクト１８０Ｂ３ａなど、およびチャンクＮ  １５５Ｂ−ｂＮの修正されたＮａデータに対応するオプションのデータオブジェクト１８０ＢＮａなどの、追加のデータオブジェクトとして格納される。この方法により、初期スナップショットボリュームのコピーに対するデータは、ボリュームＢのプライマリコピーおよびミラーコピーに変更が加えられたときでも保持される。オプションのデータオブジェクト１８０Ｂ３ａおよび１８０ＢＮａが作成される場合、この作成は、ミラーボリュームＢのコピー１５５Ｂ−ａに対し開始された更新と類似の方法でサーバブロックデータストレージシステム１６５ｂなどによる、さまざまな方法で開始されうる。
【００４６】
図２Ｅは、図２Ｄに関してすでに説明されている実施形態に関する代替的実施形態を示している。特に、図２Ｅの例では、ボリュームＢは、ここでもまた、図２Ｄに関して説明されているのと似た方法でボリュームの初期スナップショットコピーがアーカイブストレージシステム上に格納された後に修正され、したがって、サーバストレージシステム１６５ｂ上のボリュームＢのプライマリコピー１５５Ｂ−ｂは、チャンク３  １５５Ｂ−ｂ３およびチャンクＮ  １５５Ｂ−ｂＮが更新されそれぞれ修正されたデータ３ａおよびＮａを含むように更新される。しかし、この例では、サーバストレージシステム１６５ａ上のボリュームＢのミラーコピー１５５Ｂ−ａは、ボリュームＢの完全コピーとして保持されない。その代わりに、アーカイブストレージシステム上のボリュームＢのスナップショットボリュームのコピーをミラーコピー１５５Ｂ−ａと併せて使用して、ボリュームＢのコピーを保持する。したがって、この例では、初期スナップショットボリュームのコピーの作成後にボリュームＢのプライマリコピー１５５Ｂ−ｂに修正が加えられると、サーバストレージシステム１６５ａ上のミラーコピー１５５Ｂ−ａにもそれらの修正が加えられ、それにより、そのミラーコピーは、チャンク３  １５５Ｂ−ａ３に対する修正された３ａデータおよびチャンクＮ  １５５Ｂ−ａＮに対する修正されたＮａデータを格納する。しかし、ボリュームＢのミラーコピーは、アーカイブストレージシステム上のボリュームＢのスナップショットボリュームのコピーがそのデータのコピーを含むので、初期スナップショットボリュームのコピーが作成された以降に修正されていないボリュームＢの他のチャンクのコピーを最初に格納することはしない。したがって、図２Ｂに関してすでに説明されているように、サーバストレージシステム１６５ｂが後で利用不可能になった場合、サーバストレージシステム１６５ａ上のボリュームＢのミラーコピー１５５Ｂ−ａは、ボリュームＢの新規プライマリコピーとして格上げされうる。この例示的な実施形態においてこの格上げを遂行するために、ボリュームＢのミラーコピー１５５Ｂ−ａの残り部分は、アーカイブストレージシステム上のボリュームＢの初期スナップショットボリュームのコピーを使用して復元され、これにより、格納されているデータオブジェクト１８０Ｂ１を使用してチャンク１５５Ｂ−ａ１を復元すること、格納されているデータオブジェクト１８０Ｂ２を使用してチャンク１５５Ｂ−ａ２を復元することなどを行う。さらに、この例では、データオブジェクト１８０Ｂ３ａおよび１８０ＢＮａは、同様に、修正された３ａおよびＮａデータを表すようにアーカイブストレージシステム上に適宜格納される。もしそうであれば、いくつかの実施形態では、修正された３ａおよびＮａデータは、ミラーコピー１５５Ｂ−ａについてサーバブロックデータストレージシステム１６５ａ上に最初に格納されることはなく、その代わりに、ミラーコピーのチャンク１５５Ｂ−ａ３および１５５Ｂ−ａＮは、他のミラーコピーのチャンクについてすでに説明されている方法と似た方法でアーカイブストレージシステムのデータオブジェクト１８０Ｂ３ａおよび１８０ＢＮａから同様���して復元することができる。
【００４７】
ボリュームＢのスナップショットボリュームのコピーは、前の例では、ミラーコピーが新規プライマリボリュームのコピーに格上げされるときにボリュームＢのミラーコピーを復元するために使用されるが、アーカイブストレージシステム上のスナップショットボリュームのコピーは、他の実施形態では他の方法で使用される。例えば、初期スナップショットボリュームのコピーと一致するボリュームＢの新規コピーは、ミラーボリュームのコピーの復元についてすでに説明されている方法と類似の方法で、アーカイブストレージシステム上のスナップショットボリュームのコピーを使用して作成され、これにより、スナップショットボリュームのコピーの現時点においてボリュームＢの新規ミラーコピーを作成すること、ボリュームＢのスナップショットボリュームのコピーに基づく完全に新規のボリュームを作成すること、一方のサーバブロックストレージシステムから他方のサーバブロックストレージシステムへボリュームＢも移動するのを支援することなどを行うことができる。それに加えて、ブロックデータサービスのサーバブロックデータストレージシステムが、複数の明確に区別されるデータセンターまたは他の地理的位置の場所において利用可能である場合、リモートのアーカイブストレージシステムは、それらすべてのサーバブロックデータストレージシステムから利用可能であるものとしてよく、したがって、それらの地理的位置の場所において、リモートのアーカイブストレージシステムを使用して、スナップショットボリュームのコピーに基づいて新規ボリュームのコピーを作成することができる。
【００４８】
図２Ｆは、図２Ｃおよび２Ｄの例の続きであり、ボリュームＢに対して追加の修正を加えた後のより最近の時点に続く。特に、図２Ｃまたは２Ｄに関して説明されているようにチャンク３およびチャンクＮに修正が加えられた後、ボリュームＢの第２のスナップショットボリュームのコピーがアーカイブストレージシステム上に作成される。その後、チャンク２および３内に格納されているボリュームＢのデータに対して追加の修正が加えられる。したがって、図２Ｆに例示されているようなボリュームＢのプライマリコピー１５５Ｂ−ｂは、チャンク１  １５５Ｂ−ｂ１内のオリジナルのデータ１、第２のスナップショットボリュームのコピーの作成後に修正されるチャンク２  １５５Ｂ−ｂ２内のデータ２ａ、第２のスナップショットボリュームのコピーの作成後にこれもまた修正されるチャンク３  １５５Ｂ−ｂ３内のデータ３ｂ、および第２のスナップショットボリュームのコピーの作成後ではなくて、初期の第１のスナップショットボリュームのコピーの作成後に修正されたチャンクＮ  １５５Ｂ−ｂＮ内のデータＮａを含む。したがって、ボリュームＢの第３のスナップショットボリュームのコピーが作成されることを指示された後、チャンク１５５Ｂ−ｂ２に対応し、修正されたデータ２ａを含むデータオブジェクト１８０Ｂ２ａと、チャンク１５５Ｂ−ｂ３に対応し、修正されたデータ３ｂを含むチャンク１８０Ｂ３ｂとを有する、第２のスナップショットボリュームのコピーの作成以降に修正された２つのチャンクに対応するように、追加のデータオブジェクトがアーカイブストレージシステム内に作成される。
【００４９】
それに加えて、この例では、サーバブロックデータストレージシステム１６５ａは図示されていないが、（例えば、アーカイブストレージシステム１８０ｂ上に、または別のところに格納される）アーカイブマネージャモジュール１９０によって保持される情報２５０のコピーは、アーカイブストレージシステム上に格納されるスナップショットボリュームのコピーに関する情報を提供するように示されている。特に、この例では、情報２５０は、それぞれが明確に区別されるスナップショットボリュームのコピーに対応する複数の行２５０ａ〜２５０ｄを含む。この例における情報の行のそれぞれは、ボリュームのコピーに対する一意的な識別子、スナップショットボリュームのコピーが対応するボリュームの指示、およびスナップショットボリュームのコピーを含むアーカイブストレージシステム上に格納されているデータオブジェクトの順序付きリストの指示を含む。したがって、例えば、行２５０ａは、図２Ｃに関して説明されているボリュームＢの初期スナップショットボリュームのコピーに対応し、初期スナップショットボリュームのコピーが格納されているデータオブジェクト１８０Ｂ１、１８０Ｂ２、１８０Ｂ３など１８０ＢＮまでを含むことを示す。行２５０ｂは、この例には示されていないさまざまな格納済みのデータオブジェクトを含む異なるボリュームＡに対する例示的なスナップショットボリュームのコピーに対応する。行２５０ｃは、ボリュームＢの第２のスナップショットボリュームのコピーに対応し、行２５０ｄは、ボリュームＢの第３のスナップショットボリュームのコピーに対応する。この例では、ボリュームＢに対する第２のボリュームのコピーおよび第３のボリュームのコピーは、完全コピーではなく増分コピーであり、そのため、前のスナップショットボリュームのコピー以降に変更されていないボリュームＢのチャンクは、引き続き、同じ格納されているデータオブジェクトを使用して表される。したがって、例えば、行２５０ｃ内のボリュームＢの第２のスナップショットコピーは、第２のスナップショットボリュームのコピーがデータオブジェクト１８０Ｂ１および１８０Ｂ２をボリュームＢの初期スナップショットボリュームのコピーのデータオブジェクト（および場合によっては、チャンク４からチャンクＮ−１までのデータオブジェクトの一部または全部、ただし図示されていない）と共有することを示す。同様に、行２５０ｄに示されているボリュームＢの第３のスナップショットコピーも、引き続き、初期の、および第２のスナップショットボリュームのコピーと同じデータオブジェクト１８０Ｂ１を使用する。
【００５０】
複数のスナップショットボリュームのコピー間で共通のデータオブジェクトを共有することにより、チャンク１などの変更のないボリュームのチャンクの新規コピーは、各スナップショットボリュームのコピーに対するアーカイブストレージシステム上に個別のコピーを有しないため、アーカイブストレージシステム上に格納する量が最小限度に抑えられる。しかし、他の実施形態では、いくつかの、またはすべてのスナップショットボリュームのコピーが増分でなく、その代わりにそれぞれがチャンク内のデータが変更されたかどうかに関係なく各ボリュームのチャンクの個別のコピーを含むことができる。それに加えて、１つまたは複数の重複するデータオブジェクトを１つまたは複数の他のスナップショットボリュームのコピーと共有しうる、増分スナップショットボリュームのコピーが使用される場合、その重複するデータオブジェクトは、スナップショットボリュームのコピーに関して追加の種類のオペレーションが実行されるときに管理される。例えば、行２５０ａで示されているボリュームＢに対する初期スナップショットボリュームのコピーを削除する要求を受け取り、したがって、もはや必要なくなったアーカイブストレージシステム上のストレージ領域を解放する場合、その初期スナップショットボリュームのコピーに対して示されているデータオブジェクトの一部のみがアーカイブストレージシステム上から削除されうる。例えば、チャンク３およびチャンクＮは、初期スナップショットボリュームのコピーが作成された後に修正され、したがって、初期スナップショットボリュームのコピーの対応する格納されているデータオブジェクト１８０Ｂ３および１８０ＢＮは、その初期スナップショットボリュームのコピーでしか使用されない。したがって、これら２つのデータオブジェクトは、ボリュームＢの初期スナップショットボリュームのコピーが削除された場合に、アーカイブストレージシステム１８０ａから永久的に削除されうる。しかし、データオブジェクト１８０Ｂ１および１８０Ｂ２は、ボリュームＢのその初期スナップショットボリュームのコピーが削除される場合であっても保持される。これは、ボリュームＢの少なくとも第２のスナップショットボリュームのコピーの一部であり続けるからである。
【００５１】
この例には示されていないが、情報２５０は、どのアーカイブストレージシステムがデータオブジェクトのそれぞれを格納するかに関する情報、誰がどのような状況の下でスナップショットボリュームのコピーの情報にアクセスすることを許可されているかに関する情報などを含む、スナップショットボリュームのコピーに関するさまざまな他の種類の情報を含むことができる。一例として、いくつかの実施形態では、何人かのユーザがスナップショットボリュームのコピーを作成し、それらのスナップショットボリュームのコピーに対する少なくとも何人かの他のユーザのアクセスを、少なくともいくつかの状況において利用可能とすることができる。例えば、他のユーザが、１つまたは複数の特定のスナップショットボリュームのコピーのうちのコピーを作成することを、課金ベースなどにより許可することができる。このような場合、そのようなアクセスに関係する情報は、情報２５０の中に、または別のところに格納することができ、アーカイブマネージャモジュール１９０は、そのような情報を使用して、特定のスナップショットボリュームのコピーに対応する情報についてなされた要求に応じるかどうかを決定することができる。あるいは、他の実施形態では、スナップショットボリュームのコピーへのアクセスの管理を、要求が許可されていない限りそれらの要求がアーカイブストレージシステムに送られないようにするなど、ブロックデータストレージサービスの他のモジュール（例えば、ＢＢＳシステムマネージャモジュール）によって行うことができる。
【００５２】
図２Ａ〜２Ｆの例が説明のために簡略化されていること、およびサーバブロックデータストレージシステム、アーカイブストレージシステム、および他のデバイスの数および編成が図示されているものと比べてかなり大きなものとなる可能性のあることは理解されるであろう。同様に、他の実施形態では、プライマリボリュームのコピー、ミラーボリュームのコピー、および／またはスナップショットボリュームのコピーは、他の方法で格納され、管理されうる。
【００５３】
図３は、クライアントに対する信頼できる非ローカルブロックデータストレージ機能のプロビジョニングおよび使用の運用管理に適した例示的なコンピューティングシステムを示すブロック図である。この例では、サーバコンピューティングシステム３００は、ＢＤＳシステムマネージャモジュール３４０の一実施形態を実行して、ホストコンピューティングシステム３７０および／または少なくともいくつかの他のコンピューティングシステム３９０上で実行されるプログラムへの、例えばサーバブロックデータストレージシステム３６０によって提供されるブロックデータストレージボリューム（図示せず）などへの非ローカルブロックデータストレージ機能のプロビジョニングを管理する。この例におけるホストコンピューティングシステム３７０のそれぞれは、さらに、ノードマネージャモジュール３８０の一実施形態を実行し、例えばネットワーク３８５（例えば、コンピューティングシステム３００、３６０、３７０、および適宜、他のコンピューティングシステム３９０のうちの少なくともいくつかを備える、図示されていない、データセンターの内部ネットワーク）上でＢＤＳシステムマネージャモジュール３４０と協調して、複数の非ローカルブロックデータストレージボリュームのうちの少なくともいくつかへのホストコンピューティングシステム上で実行されるプログラム３７５のアクセスを管理する。他の実施形態では、ノードマネージャモジュール３８０のいくつか、またはすべてが、１つまたは複数の他のコンピューティングシステム（例えば、他のコンピューティングシステム３９０）を管理することができる。
【００５４】
それに加えて、それぞれ実行プログラム３７５によって使用される複数の非ローカルブロックデータストレージボリューム（図示せず）のうちの少なくともいくつかを格納する複数のサーバブロックデータストレージシステム３６０が例示されており、これらのボリュームに対するアクセスは、この例では、ネットワーク３８５を介して行われる。サーバブロックデータストレージシステム３６０の１つまたは複数は、複数のサーバブロックデータストレージシステム３６０のうちの１つまたは複数のオペレーション、さらにはサーバブロックデータストレージシステム３６０によって格納されるデータに関するさまざまな情報（図示せず）を管理するサーバソフトウェアコンポーネント（図示せず）もそれぞれ格納することができる。したがって、少なくともいくつかの実施形態では、図３のサーバコンピューティングシステム３００は、図１のコンピューティングシステム１７５に対応するものとしてよく、図１のノードマネージャモジュール１１５および１２５のうちの１つまたは複数は、図３のノードマネージャモジュール３８０に対応するものとしてよく、および／または図３のサーバブロックデータストレージコンピューティングシステム３６０のうちの１つまたは複数は、図１のサーバブロックデータストレージシステム１６５に対応するものとしてよい。それに加えて、この例示的な実施形態では、サーバブロックデータストレージシステム３６０上に格納されている少なくともいくつかのブロックデータストレージボリュームの少なくともいくつかの部分のスナップショットコピーおよび／または他のコピーを格納することができる、複数のアーカイブストレージシステム３５０が示されている。アーカイブストレージシステム３５０は、コンピューティングシステム３００、３６０、および３７０のうちのいくつかまたはすべてとやり取りをすることもでき、いくつかの実施形態では、１つまたは複数の他の外部ネットワーク（図示せず）上でコンピューティングシステム３００、３６０、および３７０とやり取りする（例えば、図示されていない、リモートのストレージサービスの）リモートのアーカイブストレージシステムとすることができる。
【００５５】
他のコンピューティングシステム３９０は、少なくともいくつかの実施形態においてさまざまな種類の他の近くにある、またはリモートのコンピューティングシステムをさらに備えることができ、これは、ブロックデータストレージサービスの顧客または他のユーザがコンピューティングシステム３００および／または３７０とやり取りするために使用するコンピューティングシステムも含む。さらに、他の複数のコンピューティングシステム３９０のうちの１つまたは複数のコンピューティングシステムは、ＰＥＳシステムマネージャモジュールをさらに実行して、ホストコンピューティングシステム３７０および／または他のホストコンピューティングシステム３９０上のプログラムの実行を調整することができるか、またはコンピューティングシステム３００もしくは例示されている他の複数のコンピューティングシステムのうちの１つのコンピューティングシステムが、そのようなＰＥＳシステムマネージャモジュールを実行することができるが、ただし、ＰＥＳシステムマネージャモジュールはこの例では示されていない。
【００５６】
この例示的な実施形態では、コンピューティングシステム３００は、ＣＰＵ（「中央演算処理装置」）３０５、ローカルストレージ３２０、メモリ３３０、およびさまざまなＩ／Ｏ（「入出力」）コンポーネント３１０を備えるが、この例で示されているＩ／Ｏコンポーネントはディスプレイ３１１、ネットワーク接続部３１２、コンピュータ可読媒体ドライブ３１３、および他のＩ／Ｏデバイス３１５（例えば、キーボード、マウス、スピーカー、マイクロホンなど）を含む。例示されている実施形態において、ＢＤＳシステムマネージャモジュール３４０は、メモリ３３０において実行されており、１つまたは複数の他のプログラム（図示せず）も適宜メモリ３３０において実行されうる。
【００５７】
各コンピューティングシステム３７０も、同様に、ＣＰＵ  ３７１、ローカルストレージ３７７、メモリ３７４、およびさまざまなＩ／Ｏコンポーネント３７２（例えば、サーバコンピューティングシステム３００のＩ／Ｏコンポーネント３１０と類似のＩ／Ｏコンポーネント）を備える。例示されている実施形態では、ノードマネージャモジュール３８０は、例えばプログラム実行サービスおよび／またはブロックデータストレージサービスの顧客に代わって、コンピューティングシステム上のメモリ３７４において実行されている１つまたは複数の他のプログラム３７５を管理するためにメモリ３７４において実行されている。いくつかの実施形態では、コンピューティングシステム３７０のいくつかまたはすべてが、複数の仮想マシンをホストすることができ、もしそうであれば、実行プログラム３７５のそれぞれは、明確に区別されるホストされている仮想マシンコンピューティングノード上で実行される仮想マシンのイメージ全体（例えば、オペレーティングシステムと１つまたは複数のアプリケーションプログラムを含む）であるものとしてよい。ノードマネージャモジュール３８０は、同様に、他のホストされている仮想マシンを管理する特権モードで動作する仮想マシンモニターなどの、他のホストされている仮想マシン上で実行されていてもよい。他の実施形態では、実行プログラムコピー３７５およびノードマネージャモジュール３８０は、コンピューティングシステム３７０上で実行される単一のオペレーティングシステム（図示せず）上で明確に区別されるプロセスとして実行されうる。
【００５８】
この例における各アーカイブストレージシステム３５０は、ＣＰＵ  ３５１、ローカルストレージ３５７、メモリ３５４、およびさまざまなＩ／Ｏコンポーネント３５２（例えば、サーバコンピューティングシステム３００のＩ／Ｏコンポーネント３１０と類似のＩ／Ｏコンポーネント）を備えるコンピューティングシステムである。例示されている実施形態では、アーカイブマネージャモジュール３５５は、例えばブロックデータストレージサービスおよび／またはアーカイブストレージシステムを実現する明確に区別されるストレージサービスの顧客に代わって、複数のアーカイブストレージシステム３５０のうちの１つまたは複数のアーカイブストレージシステムのオペレーションを管理するためにメモリ３５４において実行されている。他の実施形態では、アーカイブマネージャモジュール３５５は、他の複数のコンピューティングシステム３９０のうちの１つなどの他のコンピューティングシステム、またはＢＤＳシステムマネージャモジュール３４０と連動するコンピューティングシステム３００上で実行されている可能性がある。それに加えて、ここに例示されていないが、いくつかの実施形態では、アーカイブストレージシステム３５０によって格納されるデータに関するさまざまな情報を、図２Ｆに関してすでに説明されているような、ストレージ３５７または別の場所に保持することができる。さらに、ここに例示されていないが、サーバブロックデータストレージシステム３６０および／または他のコンピューティングシステム３９０のそれぞれは、ＣＰＵ、ローカルストレージ、メモリ、およびさまざまなＩ／Ｏコンポーネントなどの、アーカイブストレージシステム３５０に関して例示されている種類のコンポーネントのいくつかまたはすべてを同様に備えることができる。
【００５９】
ＢＤＳシステムマネージャモジュール３４０およびノードマネージャモジュール３８０は、別のところでさらに詳しく説明されているように、クライアント（例えば、実行プログラム）への信頼できる非ローカルブロックデータストレージ機能の提供および使用を管理するさまざまなアクションを実行することができる。この例では、ＢＤＳシステムマネージャモジュール３４０は、サーバブロックデータストレージシステム３６０および／またはアーカイブストレージシステム３５０上に格納されるボリュームに関する情報を含むデータベース３２５をストレージ３２０内に保持することができ（例えば、ボリュームを管理する際に使用するために）、またはユーザまたブロックデータストレージサービスの他の態様に関するさまざまな他の情報（図示せず）をさらに格納することができる。他の実施形態では、ボリュームに関する情報は、それらのコンピューティングシステム上のノードマネージャモジュール３８０によって、および／または他のコンピューティングシステムによって分散方式などの他の方法で格納することができる。それに加えて、この例では、ホストコンピューティングシステム３７０上の各ノードマネージャモジュール３８０は、ボリュームのプライマリコピーを提供するサーバブロックデータストレージシステム３６０とのやり取りを調整すること、およびプライマリボリュームのコピーが利用不可能になった場合にボリュームのミラーコピーに切り替える仕方を決定することなどのために、ホストコンピューティングシステムにアタッチされ、ホストコンピューティングシステム上の実行プログラム３７５によって使用される現在のボリュームに関する情報３７８をローカルストレージ３７７に格納することができる。ここには例示されていないが、各ホストコンピューティングシステムは、実行プログラムにはローカルストレージ３７７を提供する１つまたは複数の他のローカルの物理的にアタッチされたストレージデバイスと区別できないように見える、ホストコンピューティングシステムにアタッチされ、コンピューティングシステム上で実行されるプログラムによって使用される各ボリュームに対する明確に区別される論理ローカルブロックデータストレージデバイスインターフェイスをさらに備えることができる。
【００６０】
コンピューティングシステム３００、３５０、３６０、３７０、および３９０は、単に例示的なものであるにすぎず、本発明の範囲を制限することを意図していないことは理解されるであろう。例えば、コンピューティングシステム３００、３５０、３６０、３７０、および／または３９０は、例えばネットワーク３８５および／またはインターネットまたはワールドワイドウェブ（「Ｗｅｂ」）などの１つまたは複数の他のネットワークを介して、例示されていない他のデバイスに接続されうる。より一般的には、コンピューティングノードまたは他のコンピューティングシステムまたはデータストレージシステムは、限定はしないが、デスクトップまたは他のコンピュータ、データベースサーバ、ネットワークストレージデバイスおよび他のネットワークデバイス、ＰＤＡ、携帯電話、無線電話、ポケベル、電子手帳、インターネットアプライアンス、テレビベースのシステム（例えば、セットトップボックスおよび／またはパーソナル／デジタルビデオレコーダーを使用するもの）、および適切な通信機能を備えるさまざまな他の消費者製品を含む、説明されている種類の機能を対話操作し、実行することができるハードウェアまたはソフトウェアの任意の組み合わせを備えることができる。それに加えて、例示されているモジュールによって提供される機能は、いくつかの実施形態では、モジュールを減らして組み合わせるか、またはモジュールを追加して分散させることができる。同様に、いくつかの実施形態では、例示されているモジュールのうちのいくつかの機能を提供せず、および／または他の追加機能を利用可能にすることができる。
【００６１】
さまざまなアイテムが使用中にメモリ内に、またはストレージ上に格納されているように示されているが、これらのアイテムまたはそれらの部分は、メモリ管理およびデータ保全性のためにメモリと他のストレージデバイスとの間で転送されうることも理解されるであろう。あるいは、他の実施形態では、ソフトウェアモジュールおよび／またはシステムのうちのいくつかまたはすべてが、他のデバイス上のメモリにおいて実行され、コンピュータ間通信を介して例示されているコンピューティングシステムと通信することができる。さらに、いくつかの実施形態では、これらのシステムおよび／またはモジュールのうちのいくつかまたはすべてを、限定はしないが、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）、標準的な集積回路、コントローラ（例えば、適切な命令を実行すること、およびマイクロコントローラおよび／または組み込みコントローラを備えることにより）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、コンプレックスプログラマブルロジックデバイス（ＣＰＬＤ）などを含む、少なくとも部分的にはファームウェアおよび／またはハードウェアなどの他の手段で実装するか、または構成することができる。これらのモジュール、システム、およびデータ構造のいくつかまたはすべては、適切なドライブによって、または適切な接続を介して読み取られるハードディスク、メモリ、ネットワーク、または持ち運び可能な媒体品などの、コンピュータ可読媒体上に（例えば、ソフトウェア命令または構造化データとして）格納することもできる。これらのシステム、モジュール、およびデータ構造は、無線方式の、および有線／ケーブル方式の媒体を含む、さまざまなコンピュータ可読伝送媒体上に生成されるデータ信号として（例えば、搬送波または他のアナログもしくはデジタル伝搬信号の一部として）送信することもでき、さまざまな形態をとりうる（例えば、単一の、または多重化されたアナログ信号の一部として、または複数の離散デジタルパケットまたはフレームとして）。このようなコンピュータプログラム製品は、他の実施形態では他の形態をとることもありうる。したがって、本発明は、他のコンピュータシステム構成を用いて実施することもできる。
【００６２】
図４は、ブロックデータストレージシステムマネージャルーチン４００の例示的な一実施形態の流れ図である。ルーチンは、例えば、図１のブロックデータストレージシステムマネージャモジュール１７５および／または図３のＢＤＳシステムマネージャモジュール３４０の実行によって実現され、これにより実行プログラムによって使用されるブロックデータストレージサービスなどを提供することができる。例示されている実施形態では、このルーチンは、単一のデータセンターまたは他の地理的位置の場所にある複数のサーバブロックデータストレージシステムとやり取りすることができるが（例えば、このような各データセンターまたは他の地理的位置の場所にその地理的位置の場所において実行されるルーチンの明確に区別される一実施形態が置かれている場合）、他の実施形態では、単一のルーチン４００で、複数の明確に区別されるデータセンターもしくは他の地理的位置の場所に対応することができる。
【００６３】
ルーチンの例示されている実施形態は、ブロック４０５から開始し、そこで、要求または他の情報を受け取る。ルーチンは、ブロック４１０に進み、受け取った要求が、ブロックデータストレージサービスのユーザおよび／または新規ボリュームにアクセスすることを望んでいる実行プログラムなどからの、新規ブロックデータストレージボリュームを作成する要求であったかどうかを判定し、新規ブロックデータストレージボリュームを作成する要求である場合、ブロック４１５に進み、ボリューム作成を実行する。例示されている実施形態では、ブロック４１５内のルーチンは、（例えば、選択されたサーバストレージシステムの場所および／または機能に少なくとも一部は基づき）ボリュームのコピーが格納されることになる１つまたは複数のサーバブロックデータストレージシステムを選択し、それらの選択されたサーバストレージシステム上のボリュームのコピーを初期化し、ボリュームに関する格納されている情報を更新して新規ボリュームを反映する。例えば、いくつかの実施形態では、新規ボリュームの作成は、例えば、ブランクにする、他の指示されたボリューム（例えば、同じデータセンターまたは他の地理的位置の場所にある他のボリューム、または、リモートの場所に格納されているボリューム）のコピーを入れる、指示されたスナップショットボリュームのコピー（例えば、アーカイブストレージシステムとやり取りしてスナップショットボリュームのコピーを取得することなどにより、１つまたは複数のアーカイブストレージシステムによって格納されているスナップショットボリュームのコピー）のコピーを入れる、など、選択されたサーバの各リニアストレージの指定されたサイズを、指定された方法で初期化することを含みうる。他の実施形態では、１つのボリュームに対する指定されたサイズのリニアストレージの論理ブロックを、単一の論理ブロックとして与えられる複数の不連続ストレージ領域を使用すること、および／または複数のローカルの物理ハードディスクにまたがってリニアストレージの１つの論理ブロックをストライピングすることなどによって、１つまたは複数のサーバブロックデータストレージシステム上に作成することができる。他のデータセンターまたは他の地理的位置の場所にすでに存在しているボリュームのコピーを作成するために、ルーチンは、例えば、その位置におけるブロックデータストレージサービスオペレーションをサポートするルーチン４００の他のインスタンスと調整することができる。さらに、いくつかの実施形態では、少なくともいくつかのボリュームは、それぞれ、複数の明確に区別されるサーバストレージシステム上で少なくとも１つのプライマリボリュームのコピー、および１つまたは複数のミラーコピーを含む複数のコピーを有し、この場合、複数のサーバストレージシステムを選択して、初期化することができる。
【００６４】
ブロック４１０において、受け取った要求がボリュームを作成する要求でないと判定される場合、ルーチンは、ブロック４２０に進み、受け取った要求が、実行プログラムコピーから、または実行プログラムコピーおよび／または指示されたボリュームに関連付けられているユーザに代わって操作される他のコンピューティングシステムから受け取った要求などの、既存のボリュームを実行プログラムコピーにアタッチする要求であるかどうかを判定する。アタッチする要求である場合、ルーチンは、ブロック４２５に進んで、ボリュームのコピーを格納するサーバブロックデータストレージシステムのうちの少なくとも１つを識別し、識別されたサーバストレージシステムのうちの少なくとも１つを実行プログラムに関連付ける（例えば、プライマリボリュームのコピーを表すコンピューティングノードに論理ローカルブロックストレージデバイスをマウントさせることなどによって、そのボリュームに対するプライマリサーバストレージシステムをプログラムが実行されるコンピューティングノードに関連付ける）。アタッチされるボリュームは、そのボリュームに対する一意的な識別子および／またはそのボリュームを作成したユーザ、またはそのボリュームに他の何らかの方法で関連付けられているユーザに対する識別子を使用するなど、さまざまな方法で識別されうる。ボリュームを実行プログラムコピーにアタッチした後、ルーチンは、一度に１つのプログラムだけがボリュームにアタッチされることを許される場合、または一度に１つのプログラムだけがそのボリュームへの書き込みアクセス権または他の変更アクセス権を有することを許される場合などにおいて、そのボリュームに関する格納されている情報をさらに更新して、実行プログラムがアタッチしたことを示すことができる。それに加えて、指示されている実施形態において、実行プログラムへのボリュームの実際のアタッチを行いやすくするなどのために、識別されている複数のサーバストレージシステムのうちの少なくとも１つのサーバストレージシステムに関する情報を、実行プログラムに関連付けられているノードマネージャに提供することができる。他の実施形態では、ノードマネージャは、そのような情報に対して他のアクセス権を有している場合がある。
【００６５】
ブロック４２０において、受け取った要求が実行プログラムにボリュームをアタッチする要求でないと判定された場合、ルーチンは、ブロック４３０に進み、受け取った要求が、そのボリュームに、または、他のコンピューティングシステム（例えば、そのボリュームに関連付けられているユーザおよび／または他のユーザのボリュームのスナップショットコピーを作成するアクセス権を購入したユーザによって操作されるコンピューティングシステム）にアタッチされている実行プログラムから受け取った要求などの、指示されたボリュームに対するスナップショットコピーを作成する要求であるかどうかを判定する。いくつかの実施形態において、１つのボリュームのスナップショットボリュームのコピーは、そのボリュームが実行プログラムにアタッチされているか、または実行プログラムにより使用中であるかどうかに関係なく、および／またはそのボリュームが、ルーチン４００が実行される同じデータセンターもしくは他の地理的位置の場所に格納されるかどうかに関係なく作成されうる。スナップショットコピーを作成する要求であると判定された場合、ルーチンは、ブロック４３５に進み、１つまたは複数のネットワーク上でアクセス可能なリモートの長期的なストレージサービスなどと連動して、１つまたは複数のアーカイブストレージシステム（例えば、リモートの格納場所のアーカイブストレージシステム）のオペレーションを調整する１つまたは複数のアーカイブマネージャモジュールとやり取りすることなどにより、指示されたボリュームのスナップショットボリュームのコピーの作成を開始する。いくつかの実施形態では、スナップショットボリュームのコピーの作成は、リモートのストレージサービスがボリュームの少なくともいくつかのチャンクをすでに格納している場合などに、ルーチン４００からの命令に応答して第三者のリモートのストレージサービスによって実行されうる。さらに、少なくともいくつかの実施形態では、スナップショットボリュームのコピーが１つまたは複数の他のスナップショットボリュームのコピーに関して増分であるかどうかなどの、さまざまな他のパラメータをさらに指定することができる。
【００６６】
ブロック４３０において、受け取った要求がスナップショットボリュームのコピーを作成する要求でないと判定された場合、ルーチンは、ブロック４４０に進み、ブロック４０５で受け取った情報が１つまたは複数のサーバブロックデータストレージシステム（または他の実施形態では、１つまたは複数のボリューム）に障害が発生しているか、または他の形の利用不可能な状態にあるのかを示しているかどうかを判定する。例えば、ブロック４８５に関して以下で説明されているように、いくつかの実施形態では、ルーチンは、ｐｉｎｇメッセージまたは他のメッセージをサーバブロックデータストレージシステムに定期的に、または常時、送信して応答が受信されたかどうかを判定すること、またはサーバストレージシステムのステータスに関する情報を他の何らかの方法で取得することなどによって、複数のサーバブロックデータストレージシステムのうちのいくつかまたはすべてのサーバブロックデータストレージシステムのステータスを監視し、その監視結果に基づき利用不可能であるかどうかの判定を下す。ブロック４４０において、受け取った情報が１つまたは複数のサーバストレージシステムに障害が発生している可能性を示していると判定された場合、ルーチンは、ブロック４４５に進み、示された１つまたは複数のサーバストレージシステム上に格納されている１つまたは複数のボリュームが利用可能である状態を維持するアクションを実行する。特に、ブロック４４５のルーチンは、指示された１つまたは複数のサーバストレージシステム上に格納されるそのようなボリュームが、プライマリボリュームのコピーであるかどうかを判定し、各そのようなプライマリボリュームのコピーについて、他のサーバストレージシステム上のそのボリュームに対する複数のミラーコピーのうちの１つをそのボリュームに対する新規プライマリコピーになるように格上げする。次いで、ブロック４５０におけるルーチンは、利用不可能であることが示されているボリュームの１つとは別のサーバストレージシステム上で利用可能なボリュームの既存のコピーを使用することなどによって、１つまたは複数の他のサーバストレージシステム上に各ボリュームの少なくとも１つの新規コピーのレプリケーションを作成する。他の実施形態では、プライマリコピーへのミラーコピーへの格上げおよび／または新規ミラーコピーの作成は、（例えば、ボリュームのミラーコピー間で選択プロトコルを使用する）サーバブロックデータストレージシステムによる分散方式などの、他の方法で実行することができる。それに加えて、いくつかの実施形態では、ミラーボリュームのコピーは、ボリュームのプライマリコピーの部分のみ（例えば、そのボリュームのスナップショットコピーが前に作成された以降に修正された部分のみ）を含む最小のコピーとすることができ、プライマリコピーへのミラーコピーの格上げは、（例えば、最新のスナップショットコピーから）完全になるように新規プライマリコピーの情報を収集することをさらに含むことができる。
【００６７】
次いで、ブロック４５５では、ルーチンは、適宜、１つまたは複数の利用不可能なサーバストレージシステム上のプライマリボリュームのコピーにすでにアタッチされているプログラムを実行するなどのために、１つまたは複数の実行プログラムをミラーコピーから格上げされた新規プライマリボリュームのコピーにアタッチすることを開始する。他の実施形態では、新規プライマリボリュームのコピーへのそのような再アタッチは、他の方法で（例えば、再アタッチが行われる実行プログラムに関連付けられているノードマネージャによって）実行される。次いで、ブロック４５８において、ルーチンは、ブロック４５０において作成された新規ボリュームのコピーおよびブロック４４５において格上げされた新規プライマリボリュームを示すなどのために、利用不可能なサーバストレージシステム上のボリュームに関する情報を更新する。他の実施形態では、新規プライマリボリュームのコピーは、他の方法で、例えば、既存のミラーボリュームのコピーを格上げするのではなく新規ボリュームのコピーをプライマリボリュームのコピーとして作成することによって作成することができるが、この作業は既存のミラーボリュームのコピーを格上げする場合に比べて時間がかかることがある。それに加えて、ブロック４５０において新規ボリュームのコピーのレプリケーション元となるボリュームのコピーが利用可能でない場合、例えば、１つのボリュームに対するプライマリおよびミラーコピーを格納する複数のサーバストレージシステムがすべて実質的に同時に失敗した場合、いくつかの実施形態において、ルーチンは、アーカイブストレージシステム上で利用可能なボリュームに対する１つまたは複数の最近のスナップショットボリュームのコピー、他のデータセンターもしくは他の地理的位置の場所のボリュームのコピーなどから、他の方法でそのようなレプリケーションに使用するためのボリュームの情報を取得しようと試みることができる。
【００６８】
ブロック４４０において、受け取った情報が１つまたは複数のサーバブロックデータストレージシステムに障害が発生しているか、または他の形の利用不可能な状態にあるのかを示す情報でないと判定された場合、ルーチンは、ブロック４６０に進み、ブロック４０５で受け取った情報が１つまたは複数のボリュームを１つまたは複数の新規のサーバブロックデータストレージシステムに移動することを示しているかどうかを判定する。このようなボリューム移動は、同じ地理的位置の場所にある他のサーバブロックデータストレージシステムへの移動（例えば、既存のボリュームをこれらのボリュームをサポートするのにより適した装備を持つストレージシステムに移動する）、および／または１つまたは複数の他のデータセンターもしくは他の地理的位置の場所にある１つまたは複数のサーバデータストレージシステムへの移動を含む、別のところでさらに詳しく説明されているようなさまざまな理由から実行されうる。それに加えて、ボリュームの移動は、ボリュームに関連付けられているブロックデータストレージシステムのユーザからの要求、使用されている現在のサーバストレージシステムより優れているボリュームに対するサーバストレージシステムの自動検出に基づく、ブロックデータストレージサービスの人のオペレータからの要求（例えば、現在のサーバストレージシステムの利用過剰および／または新規サーバストレージシステムの利用不足）など、さまざまなきっかけで開始されうる。ブロック４６０において、受け取った情報が１つまたは複数のそのようなボリュームのコピーを移動するための情報であると判定された場合、ルーチンはブロック４６５に進み、ブロック４１５に関してすでに説明されている方法と似た方法などにより（例えば、サーバブロックデータストレージシステム上の既存のボリュームのコピーを使用すること、１つまたは複数のアーカイブストレージシステム上のそのボリュームのスナップショットまたは他のコピーを使用することなどによって）、１つまたは複数の新規サーバブロックデータストレージシステム上に各指示されたボリュームのコピーを１つ作成し、ブロック４６５においてそのボリュームに対する格納されている情報をさらに更新する。それに加えて、いくつかの実施形態では、ルーチンは、新規ボリュームのコピーが作成された後サーバブロックデータストレージシステムから前のボリュームのコピーを削除するなどの、移動をサポートする追加のアクションを実行することができる。さらに、移動される前のボリュームのコピーに１つまたは複数の実行プログラムがアタッチされた状況では、ルーチンは、実行プログラムに対する移動される前のボリュームのコピーのデタッチを開始することができ、および／または作成される新規ボリュームのコピーへのそのような実行プログラムの再アタッチを、関連付けられている命令をその実行プログラムに対するノードマネージャに送ることなどによって、開始することができる。他の実施形態では、ノードマネージャが、そのようなアクションを実行することができる。
【００６９】
ブロック４６０において、受け取った情報が１つまたは複数のボリュームを移動する命令でないと判定された場合、ルーチンは、ブロック４８５に進み、１つまたは複数の他の指示されたオペレーションを適宜実行する。他のオペレーションは、さまざまな実施形態においてさまざまな形態をとることができ、例えば、すべてというわけではないが、いくつかのまたはすべてのサーバブロックデータストレージシステムの監視を実行するオペレーション（例えば、ｐｉｎｇメッセージまたは他のステータスメッセージをサーバブロックデータストレージシステムに送信して、応答が返るのを待つことによって）、実行される監視、ボリュームのプライマリコピーを格納するが、そのボリュームの１つまたは複数のミラーコピーを更新することはできないプライマリサーバブロックデータストレージシステムから受け取ったメッセージ、ノードマネージャモジュールから受け取ったメッセージなどに基づく、ボリュームのプライマリコピーまたはミラーコピーが利用不可能であるとの判定に応答して代替プライマリボリュームのコピーおよび／またはミラーボリュームのコピーの作成を開始するオペレーション、１つまたは複数のボリュームのデタッチ、削除、および／または説明を行うオペレーション、１つまたは複数のスナップショットボリュームのコピーの削除、説明、および／またはコピーを行うオペレーション、ユーザによるボリュームおよび／またはスナップショットボリュームのコピーの使用を、例えば対価の支払いを目的としてそのような使用の量を測定するために、追跡するオペレーションなどが挙げられる。ブロック４１５、４２５、４３５、４５８、４６５、または４８５の後、ルーチンは、ステップ４９５に進み、明示的な終了命令を受け取るまで続けるかどうかを決定する。処理を続ける場合、ルーチンはブロック４０５に戻り、そうでなければ、ルーチンはブロック４９９に進んで終了する。
【００７０】
それに加えて、少なくともいくつかの種類の要求については、ルーチンは、いくつかの実施形態において、要求側に対して指定されているアクセス権および／または要求の関連付けられているターゲット（例えば、指示されているボリューム）などに基づき、要求側がその要求を行う権限を与えられていることをさらに確認することができる。いくつかのそのような実施形態では、対価の支払いが行われない場合にその要求を実行しないなどのために、権限付与の確認は、要求された機能に対する対価を要求側から徴収すること（またはそのような対価の支払いがすでに行われていることを確認すること）をさらに含むことができる。例えば、少なくともいくつかの実施形態および状況において関連する支払いを伴いうる種類の要求としては、ボリュームを作成する要求、ボリュームをアタッチする要求、スナップショットコピーを作成する要求、指示されたボリュームを（例えば、プレミアムサーバストレージシースへ）移動する要求、および他の種類の指示されたオペレーションが挙げられる。さらに、ユーザに代わって実行されるいくつかの種類またはすべての種類のアクションを監視して計測し、例えば、後から、それらのアクションのうちの少なくともいくつかについて対応する利用毎の料金を決定する際に利用することができる。
【００７１】
図５は、ノードマネージャルーチン５００の例示的な一実施形態の流れ図である。ルーチンは、例えば、図１のノードマネージャモジュール１１５および／または１２５の実行、および／または図３のノードマネージャモジュール３８０の実行によって実現され、これにより１つまたは複数の実行プログラムによる非ローカルブロックデータストレージの使用を管理することなどを行える。例示されている実施形態では、ブロックデータストレージサービスは、１つまたは複数のＢＤＳシステムマネージャモジュールと複数のノードマネージャモジュール、および適宜、１つまたは複数のアーカイブマネージャモジュールの組み合わせを通じて機能を提供するが、他の実施形態では、他の構成（例えば、ノードマネージャモジュールおよび／またはアーカイブマネージャモジュールを伴わない単一のＢＤＳシステムマネージャモジュール、ＢＤＳシステムマネージャモジュールを伴わずに調整されたマネージャ内で一緒に実行される複数のノードマネージャモジュールなど）を使用することができる。
【００７２】
ルーチンの例示されている実施形態は、ブロック５０５から始まり、そこで、関連付けられているコンピューティングノード上のプログラム実行に関係する要求を受け取る。ルーチンはブロック５１０に進み、その要求が指示された関連付けられているコンピューティングノード上の１つまたは複数の指示されたプログラムを実行することに関係する要求、例えばプログラム実行サービスおよび／またはそれらのプログラムに関連付けられているユーザからの要求などかどうかを判定する。もしそうであれば、ルーチンはブロック５１５に進み、指示されたプログラム（複数可）のコピーを取得し、関連付けられているコンピューティングノード上のプログラム（複数可）の実行を開始する。いくつかの実施形態では、１つまたは複数の指示されたプログラムは、ブロック５０５において受け取った要求の一部としてルーチン５００に送られる指示されたプログラムに基づいて、ブロック５１５において取得されうる。他の実施形態では、指示されたプログラムは、ローカルの、または非ローカルのストレージ（例えば、リモートのストレージサービス）から取り出すことができる。他の実施形態では、ルーチン５００は、プログラム実行サービスをサポートする他のルーチンが、関連付けられているコンピューティングノードに代わってそれらのオペレーションを実行する場合などでは、実行プログラムに関係するオペレーションを実行しなくてもよい。
【００７３】
ブロック５１０において、受け取った要求が１つまたは複数の指示されたプログラムを実行する要求でないと判定される場合、ルーチンは、ブロック５２０に進み、実行プログラム、図４のルーチン４００、および／または指示されたボリュームおよび／または指示された実行プログラムに関連付けられているユーザなどから、指示されたボリュームを指示された実行プログラムにアタッチする要求を受け取ったかどうかを判定する。アタッチする要求を受け取った場合、ルーチンはブロック５２５に進み、そのボリュームのプライマリコピーの指示を取得し、そのプライマリボリュームのコピーをコンピューティングノードに対する代表的な論理ローカルブロックデータストレージデバイスに関連付ける。いくつかの実施形態では、ルーチン５００によって、代表的なローカルの論理ブロックデータストレージデバイスを実行プログラムおよび／またはコンピューティングノードに指示することができるが、他の実施形態では、実行プログラムが、ローカルの論理ブロックデータストレージデバイスの作成を開始することができる。例えば、いくつかの実施形態では、ルーチン５００は、ＧＮＢＤ（「グローバルネットワークブロックデバイス」）技術を使用し、ブロックデバイスを特定の仮想マシンにインポートし、その論理ローカルブロックデータストレージデバイスをマウントすることによって仮想マシンのコンピューティングノード上でその論理ローカルブロックデータストレージデバイスを利用可能にすることができる。いくつかの実施形態では、ルーチンは、ブロック５２５において、そのボリュームに対する１つまたは複数のミラーボリュームのコピーの指示を取得し格納するアクション、そのプライマリボリュームのコピーが後で利用不可能になった場合にルーチンがミラーボリュームのコピーに動的にアタッチすることを可能にするアクションなどの、他のアクションをさらに実行することができる。
【００７４】
ブロック５２０において、ブロック５０５の受け取った要求が、指示されたボリュームをアタッチする要求でないと判定された場合、ルーチンはブロック５３０に進み、受け取った要求が、読み取り要求または書き込み要求などの、アタッチされたボリュームに対する実行プログラムによるデータアクセス要求であるかどうかを判定する。アタッチされたボリュームに対するデータアクセス要求である場合、ルーチンはブロック５３５に進み、そこで、ルーチンは、データアクセス要求に対応する関連付けられているプライマリボリュームのコピーを（例えば、そのデータアクセス要求について実行プログラムによって使用される代表的なローカルの論理ブロックデータストレージデバイスに基づいて）識別し、プライマリボリュームのコピーへの要求されたデータアクセスを開始する。別のところでさらに詳しく説明されているように、いくつかの実施形態では、実際のプライマリボリュームのコピーおよび／またはミラーボリュームのコピーを即座に修正して、書き込みデータアクセス要求を反映するが（例えば、ミラーボリュームのコピーを常に更新するように、ミラーボリュームのコピーを、そのミラーボリュームのコピーがプライマリボリュームのコピーに格上げされる場合のみ更新するように、など）、１つまたは複数のアーカイブストレージシステム上に格納されている対応するチャンクは、書き込みデータアクセス要求を反映するように即座には修正しない（例えば、十分な修正がなされたときに、および／または対応する情報に対する読み取りアクセスが要求されたときにアーカイブストレージシステム上に格納されているコピーを最終的に更新するなど）など、遅延書き込み方式を使用することができる。例示されている実施形態では、ミラーボリュームのコピーの保守は、ルーチン５００以外のルーチンによって（例えば、プライマリボリュームのコピーを格納するプライマリサーバブロックデータストレージシステムによって）実行されるが、他の実施形態では、ルーチン５００は、ブロック５３５において、それらのミラーボリュームのコピーへの類似の、もしくは同一のデータアクセス要求を送ることによって複数のミラーボリュームのコピーのうちの１つまたは複数のミラーボリュームのコピーを保守することをさらに支援することができる。さらに、いくつかの実施形態では、対応するユーザによって（例えば、そのボリュームのスナップショットコピーを作成する要求の一部として）明示的に要求されるまで、ボリュームをアーカイブストレージシステム上に格納しないが、他の実施形態では、（例えば、アーカイブストレージシステムのコピーがプライマリボリュームのコピーおよび／またはミラーボリュームのコピーに対する外部記憶域として使用される場合）少なくともいくつかのボリュームの少なくともいくつかの部分のコピーを、アーカイブストレージシステム上に保持しうる。
【００７５】
ブロック５３５の後に、ルーチンはブロック５４０に進み、所定の制限時間内にブロック５３５で送られた要求についてプライマリサーバブロックデータストレージシステムから、オペレーションの成功を示すなどの、応答を受け取ったかどうかを判定する。応答を受け取っていない場合、ルーチンは、プライマリサーバブロックデータストレージシステムは利用不可能であると判定し、ブロック５４５に進み、複数のミラーボリュームのコピーのうちの１つを新規プライマリボリュームのコピーとしてアタッチし、そのミラーボリュームのコピーに対するサーバブロックデータストレージシステムを、そのボリュームに対する新規プライマリサーバブロックデータストレージシステムとして関連付ける変更を開始する。さらに、ルーチンは、ブロック５３５に関して上で示されているのと似た方法で新規プライマリボリュームのコピーにデータアクセス要求を同様に送り、さらにいくつかの実施形態では、適切な応答を受け取ったかどうかを監視し、受け取っていなければ再びブロック５４５に進むことができる（例えば、他のミラーボリュームのコピーを格上げし、このプロセスを繰り返す）。いくつかの実施形態において、新規プライマリボリュームのコピーとしてのミラーボリュームのコピーへの変更の開始は、ルーチン４００とコンタクトをとってどのミラーボリュームのコピーが新規プライマリボリュームのコピーになるべきかを決定すること、ルーチン５００によってミラーボリュームのコピーがプライマリボリュームのコピーになるように格上げされたときに（例えば、プライマリボリュームのコピーが利用不可能であるという指示がブロック５４５のルーチン５００によって送られたことがきっかけで）ルーチン４００から命令を受け取ることなどによって、ルーチン４００と連携して実行されうる。
【００７６】
ブロック５３０において、受け取った要求が１つのアタッチされているボリュームに対するデータアクセス要求でないと判定された場合、ルーチンは、ブロック５８５に進み、１つまたは複数の他の指示されたオペレーションを適宜実行する。他のオペレーションは、さまざまな実施形態において、１つまたは複数のボリューム（例えば、管理されている１つまたは複数の実行プログラムのアタッチ先となるボリュームに対する新規の格上げされたプライマリボリュームのコピー）に対する新規ボリュームの情報の、ルーチン４００からの命令、ルーチン５００に関連付けられているコンピューティングノード上の実行プログラムからボリュームをデタッチする命令などの、さまざまな形態をとりうる。それに加えて、少なくともいくつかの実施形態では、ルーチン５００は、ルーチン５００が１つまたは複数の関連付けられている仮想マシンコンピューティングノードを管理する仮想マシンモニターの一部として、またはそのような仮想マシンモニターと連携して動作する場合などに、仮想マシンモニターの１つまたは複数の他のアクションをさらに実行することができる。
【００７７】
ブロック５１５、５２５、５４５、もしくは５８５の後、または、ブロック５４０において、所定の制限時間内に応答を受け取ったと判定された場合、ルーチンは、ブロック５９５に進み、明示的な終了命令を受け取るまで続けるかどうかを決定する。処理を続ける場合、ルーチンはブロック５０５に戻り、そうでなければ、ブロック５９９に進んで終了する。
【００７８】
それに加えて、少なくともいくつかの種類の要求については、ルーチンは、いくつかの実施形態において、要求側に対して指定されているアクセス権および／または要求の関連付けられているターゲット（例えば、指示されているボリューム）などに基づき、要求側がその要求を行う権限を与えられていることをさらに確認することができる。いくつかのそのような実施形態では、対価の支払いが行われない場合にその要求を実行しないなどのために、権限付与の確認は、要求された機能に対する対価を要求側から徴収すること（またはそのような対価の支払いがすでに行われていることを確認すること）をさらに含むことができる。例えば、少なくともいくつかの実施形態および状況において関連する支払いを伴いうる種類の要求としては、指示されたプログラムを実行する要求、ボリュームをアタッチする要求、いくつかの種類またはすべての種類のデータアクセス要求を実行する要求、および他の種類の指示されたオペレーションが挙げられる。さらに、ユーザに代わって実行されるいくつかの種類またはすべての種類のアクションを監視して計測し、例えば、後から、それらのアクションのうちの少なくともいくつかについて対応する利用毎の料金を決定する際に利用することができる。
【００７９】
図６は、サーバブロックデータストレージシステムのルーチン６００の例示的な一実施形態の流れ図である。このルーチンは、例えば、サーバブロックデータストレージシステム上のソフトウェアコンポーネントの実行により、そのサーバストレージシステムにおける１つまたは複数のブロックデータストレージボリューム上のブロックデータの格納を管理するなどのために（例えば、図１および／または図２のサーバブロックデータストレージシステム１６５に対し）実行されうる。他の実施形態では、１つまたは複数のサーバブロックデータストレージシステムを管理するために１つまたは複数の他のコンピューティングシステム上でソフトウェアを実行することなどにより、他の方法でルーチンの機能の一部または全部が提供されうる。
【００８０】
ルーチンの例示されている実施形態は、ブロック６０５から開始し、そこで、要求を受け取る。ルーチンは６１０に進み、受け取った要求が、サーバストレージシステムに対する利用可能なストレージ領域（例えば、１つまたは複数のローカルのハードディスク上のストレージ領域）の１ブロックを新規の指示されたボリュームに関連付けることなどによって、新規ボリュームを作成することに関係しているかどうかを判定する。この要求は、例えば、ルーチン４００から、および／または作成される新規ボリュームに関連付けられているユーザからの要求としてよい。もしそうであれば、ルーチンはブロック６１５に進み、新規ボリュームに関する情報を格納し、ブロック６２０において、その新規ボリュームに対するストレージ領域（例えば、指示されたサイズのストレージ領域の論理線形ブロック）を初期化する。別のところでさらに詳しく説明されているように、いくつかの実施形態では、新規ボリュームは、他の既存のボリュームもしくはスナップショットボリュームのコピーに基づいて作成される場合があり、その場合、ルーチンは、ブロック６２０において、適切なデータをストレージ領域にコピーすることによって新規ボリュームに対するストレージ領域を初期化することができるが、他の実施形態では、（例えば、ストレージ領域をデフォルト値に初期化する、すべてゼロで埋めるなど）他の方法で新規ボリュームのストレージ領域を初期化することができる。
【００８１】
ブロック６１０において、受け取った要求が新規ボリュームを作成する要求でないと判定された場合、ルーチンは、ブロック６２５に進み、データアクセス要求を開始した実行プログラムに関連付けられているノードマネージャなどから、サーバストレージシステム上に格納されている既存のボリュームに対するデータアクセス要求を受け取ったかどうかを判定する。受け取った要求がボリュームに対するデータアクセス要求である場合、ルーチンはブロック６３０に進み、指示されたボリューム上でデータアクセス要求を実行する。次いで、ルーチンはブロック６３５に進み、例示されている実施形態では、現在のサーバストレージシステム上の指示されたボリュームがそのボリュームに対するプライマリボリュームのコピーであるなどの場合に、そのボリュームの１つまたは複数のミラーコピーの対応する更新を適宜開始する。他の実施形態では、プライマリボリュームのコピーとミラーボリュームのコピーとの間の整合性は、他の方法で維持されうる。別のところでさらに詳しく説明されているように、いくつかの実施形態では、少なくともいくつかのボリュームの格納されているデータ内容に対する少なくともいくつかの修正も、これらのボリュームのバックアップコピーまたは他のコピーを保持するなどのために、１つまたは複数のアーカイブストレージシステム（例えば、リモートのストレージサービスで）に対して実行される場合があり、その場合、ルーチンは、アーカイブストレージシステムに対する更新をさらに開始してアーカイブストレージシステム上のボリュームの１つまたは複数のコピーに対する対応する更新を開始することができる。さらに、ルーチンが、ブロック６３５または別のところで、（例えば、ミラーボリュームのコピーおよびそのミラーサーバブロックデータストレージシステムが利用可能であるか定期的にチェックするためにブロック６３５で送られたデータアクセス要求に、またはルーチン６００によって開始されたｐｉｎｇメッセージもしくは他のステータスメッセージに所定の制限時間内に応答できないこと、エラー条件が発生しているか、シャットダウンまたは故障モードオペレーションを開始したという、ミラーサーバブロックデータストレージシステムからのメッセージなどに基づいて）ボリュームのミラーコピーが利用可能でないと判定した場合、ルーチンは、対応するメッセージを図４のルーチン４００に送るか、またはミラーボリュームのコピーの作成を直接開始することなどによって、ボリュームの新規ミラーコピーを作成するアクションを開始することができる。
【００８２】
ブロック６２５において、受け取った要求が１つのボリュームに対するデータアクセス要求でないと判定された場合、ルーチンはブロック６８５に進み、１つまたは複数の他の指示されたオペレーションを適宜実行する。そのような他のオペレーションは、さまざまな実施形態においてさまざまな形態をとることができ、例えば、すべてというわけではないが、ボリュームを（例えば、関連付けられているストレージ領域を他の用途に利用できるようにするなどのために）削除するオペレーション、ボリュームを指示されたコピー先に（例えば、他のサーバブロックデータストレージシステム上の他の新規ボリュームに、スナップショットボリュームのコピーとして使用するために１つまたは複数のアーカイブストレージシステムに、など）コピーするオペレーション、ボリュームの使用率に関する情報を（例えば、顧客による課金ベースのボリュームの使用率などのボリュームの使用率の計測のために）提供するオペレーション、サーバブロックデータストレージシステムに対する進行中の保守または診断（例えば、ローカルのハードディスクのデフラグ）を実行するオペレーションなどが挙げられる。ブロック６２０、６３５、または６８５の後、ルーチンは、ステップ６９５に進み、明示的な終了命令を受け取るまで続けるかどうかを決定する。もしそうであれば、ルーチンはブロック６０５に戻り、そうでなければ、ブロック６９９に進んで終了する。
【００８３】
それに加えて、少なくともいくつかの種類の要求については、ルーチンは、いくつかの実施形態において、要求側に対して指定されているアクセス権および／または要求の関連付けられているターゲット（例えば、指示されているボリューム）などに基づき、要求側がその要求を行う権限を与えられていることをさらに確認することができるが、他の実施形態では、このルーチンは、要求を受け取ったルーチン（例えば、ノードマネージャルーチンおよび／またはＢＤＳシステムマネージャルーチン）によって要求がすでに許可されていると仮定することができる。さらに、ユーザに代わって実行されるいくつかの種類またはすべての種類のアクションを監視して計測し、例えば、後から、それらのアクションのうちの少なくともいくつかについて対応する利用毎の料金を決定する際に利用することができる。
【００８４】
図７Ａおよび７Ｂは、ＰＥＳシステムマネージャルーチン７００の例示的な一実施形態の流れ図である。ルーチンは、例えば、図１のＰＥＳシステムマネージャモジュール１４０の実行によって実現されうる。他の実施形態では、ブロックデータストレージサービスの一部としてのルーチン４００などによる、他の方法でルーチン７００の機能の一部または全部が提供されうる。
【００８５】
例示されている実施形態において、ルーチンはブロック７０５から開始し、そこで、プログラムの実行に関係するステータスメッセージまたは他の要求を受け取る。ルーチンはブロック７１０に進み、受け取ったメッセージまたは要求の種類を判定する。ブロック７１０において、要求の種類が、ユーザもしくは実行プログラムなどから、プログラムを実行する要求であると判定された場合、ルーチンはブロック７２０に進み、プログラム実行に利用可能な候補ホストコンピューティングシステムのグループなどから、指示されたプログラムを実行する１つまたは複数のホストコンピューティングシステムを選択する。いくつかの実施形態では、ユーザの指令または注目する他の指示された基準に従って、１つまたは複数のホストコンピューティングシステムが選択されうる。次いで、ルーチンはブロック７２５に進み、選択されたホストコンピューティングシステムに関連付けられているノードマネージャとやり取りすることなどによって、選択されたホストコンピューティングシステムのそれぞれによるプログラムの実行を開始する。次いで、ブロック７３０において、ルーチンは１つまたは複数のハウスキーピングタスク（例えば、計測および／または他の課金目的などのために、ユーザによるプログラム実行を監視すること）を適宜実行する。
【００８６】
ブロック７１０において、受け取った要求が、後から実行するために利用可能であるものとして新規プログラムを登録する要求であると判定された場合、ルーチンは、ブロック７４０に進み、その使用のためのプログラムおよび関連する管理情報（例えば、プログラムを使用する権限を付与されているユーザに関係するアクセス制御情報および／または許可されている使用の種類）の指示を格納し、いくつかの状況では、プログラムの少なくとも１つの集中型コピーをさらに格納することができる。次いで、ルーチンはブロック７４５に進み、後で使用する指示されたプログラムのいくつかのコピーを１つまたは複数のホストコンピューティングシステムに分散配置するオペレーションを適宜開始し、例えばそれらのホストコンピューティングシステムのローカルのストレージから格納されているコピーを取り出すことによってそれらのホストコンピューティングシステムによるプログラムの起動を高速化することなどを行う。他の実施形態では、指示されたプログラムの１つまたは複数のコピーを、１つまたは複数のリモートのアーカイブストレージシステム上に置くなど他の方法で格納することができる。
【００８７】
ブロック７１０において、１つまたは複数のホストコンピューティングシステムに関するステータスメッセージをブロック７０５で受け取ったと判定された場合、ルーチンは、ブロック７５０に進み、実行プログラムの使用率および／またはホストコンピューティングシステムに関する他のステータス情報（例えば、非ローカルブロックデータストレージボリュームの使用率）を追跡するなどのために、それらのホストコンピューティングシステムに関する情報を更新する。いくつかの実施形態では、ステータスメッセージが、ノードマネージャモジュールによって定期的に送信されるが、他の実施形態では、ステータスメッセージは、別のときに（例えば、関連する変更が生じた場合に必ず）送信されうる。さらに他の実施形態では、ルーチン７００は、必要に応じてノードマネージャモジュールおよび／またはホストコンピューティングシステムに情報を要求することができる。ステータスメッセージは、特定のコンピューティングシステム上で現在実行されているプログラムの数およびＩＤ、特定のコンピューティングシステム上のローカルのプログラムリポジトリに現在格納されているプログラムのコピーの数およびＩＤ、非ローカルブロックデータストレージボリュームのアタッチおよび／または他の使用状況、コンピューティングシステムに対する性能関係およびリソース関係の情報（例えば、ＣＰＵ、ネットワーク、ディスク、メモリなどの利用度）、コンピューティングシステムに対する構成情報、ならびに特定のコンピューティングシステム上のハードウェアまたはソフトウェアに関係するエラーもしくは障害状態のレポートなどの、さまざまな種類の情報を含みうる。
【００８８】
ブロック７０５におけるルーチンが、他の種類の要求またはメッセージを受け取ったと判定した場合、このルーチンは、ブロック７８５に進み、１つまたは複数の他の指示されたオペレーションを適宜実行する。このような他のオペレーションとしては、例えば、現在実行中のプログラムの実行のサスペンドまたは終了、およびプログラム実行サービスのシステム管理の側面を他の何らかの形で管理するオペレーション（新規ユーザの登録、プログラム実行サービスの使用に対する対価の決定および徴収など）が挙げられる。ブロック７４５、７５０、または７８５の後に、ルーチンはブロック７３０に進み、１つまたは複数のハウスキーピングタスクを適宜実行する。次いで、ルーチンはステップ７９５に進み、明示的な終了命令を受け取るまで続けるかどうかを決定する。処理を続ける場合、ルーチンはブロック７０５に戻り、そうでなければ、ブロック７９９に進んで終了する。
【００８９】
本明細書では例示していないが、少なくともいくつかの実施形態では、ブロックデータストレージサービスと連携するなどして、プログラム実行サービスによってさまざまな種類のプログラムを実行する機能が付加的に提供されうる。少なくともいくつかの実施形態において、１つまたは複数のコンピューティングシステム上の１つのプログラムの１つまたは複数のコピーもしくはインスタンスの実行は、これらのプログラムインスタンスの即時実行に対する現在の実行要求に応答して開始されうる、あるいは、この開始は、今現在のこれらのプログラムインスタンスの、その時点では未来の実行をスケジュールしたか、または他の何らかの方法で予約したすでに受け取っているプログラム実行要求に基づくものとしてよい。プログラム実行要求は、（例えば、プログラム実行サービスによって提供される対話型コンソールまたは他のＧＵＩを介して）ユーザから直接的に、または他のプログラムもしくはそれ自身の１つまたは複数のインスタンスの実行を自動的に開始するユーザの実行プログラムから（例えば、ウェブサービスを使用するＡＰＩなどの、プログラム実行サービスによって提供されるＡＰＩを介して）など、さまざまな形で受け取ることができる。プログラム実行要求は、未来の実行のためにすでに登録されているか、または（例えば、単一の所望の数のインスタンス、最小および最大数の所望のインスタンスなどとして表される）他の何らかの方法で供給されたプログラムの指示などのプログラムの１つまたは複数のインスタンス、および同時に実行すべきプログラムの多数のインスタンスの実行の開始において使用されるさまざまな情報を含むことができる。それに加えて、いくつかの実施形態では、プログラム実行要求は、さまざまな他の種類の情報を含むことができ、これらの情報としては、例えば、すでに登録されているユーザのユーザアカウントの指示または他の指示（例えば、すでに格納されているプログラムを識別し、および／または要求されたプログラムインスタンスの実行が許可されているかどうかを判定する際に使用する）、プログラムインスタンスの実行のためにプログラム実行サービスに対して支払いを行う際に使用する支払い財源の指示、プログラムインスタンスの実行に対する前払いまたは他の許可の指示（例えば、一定時間、一定数のプログラム実行インスタンス、一定のリソース利用度などに対して有効なすでに購入されているサブスクリプション）、および／または即座に実行され、および／または後で実行するために格納されるプログラムの実行可能コピーもしくは他のコピーが挙げられる。それに加えて、いくつかの実施形態では、プログラム実行要求は、１つまたは複数のプログラムインスタンスの実行に対するさまざまな他の種類の選好および／または要求条件をさらに含みうる。このような選好および／または要求条件は、プログラムインスタンスのいくつかまたはすべてが、使用のために利用可能な複数のコンピューティングシステムを収容している複数のデータセンターのうちの１つのデータセンター内、互いに近い位置にある複数のコンピューティングシステム上、および／または他の指示された特性（例えば、指示されたブロックデータストレージボリュームのコピーを提供する）を有するコンピューティングシステムに近い位置にある１つまたは複数のコンピューティングシステム上など、指示された地理的位置および／または論理的位置の場所で実行されるという指示を含むことができる。
【００９０】
図８は、アーカイブマネージャルーチン８００の例示的な一実施形態の流れ図である。ルーチンは、例えば、図３のアーカイブマネージャモジュール３５５、図２Ｃ〜２Ｆのアーカイブマネージャモジュール１９０、および／または図１のコンピューティングシステム１８０上の１つまたは複数のアーカイブマネージャモジュール（図示せず）のうちの１つのモジュールの実行によって実現されうる。他の実施形態では、ブロックデータストレージサービスの一部としてのルーチン４００などによる、他の方法でルーチン８００の機能の一部または全部が提供されうる。例示されている実施形態では、アーカイブストレージシステムは、ブロックデータストレージボリュームの一部にそれぞれ対応する複数のチャンクに分けてデータを格納するが、他の実施形態では、他の方法でデータを格納することができる。
【００９１】
ルーチン８００の例示されている実施形態は、ブロック８０５から開始し、そこで、情報または要求を受け取る。次いで、ルーチンはブロック８１０に進み、要求側が課金ベースのアクセスの対価を支払い済みであるか、または指示され要求を実行させるアクセス権を他の何らかの形で有している場合などに、その要求または情報が許可されているかどうかを判定する。ブロック８１５において、要求または情報が許可されていると判定された場合、ルーチンは８２０に進み、そうでなければブロック８０５に戻る。ブロック８２０において、ルーチンは、受け取った要求が指示されたボリュームに対する新規スナップショットコピーを格納する要求であるかどうかを判定する。新規スナップショットコピーを格納する要求である場合、ルーチンはブロック８２５に進み、そのボリュームに対する複数のボリュームのチャンクを取得し、各チャンクをアーカイブストレージシステムのデータオブジェクトとして格納し、次いで、そのスナップショットボリュームのコピーに関連付けられているチャンクに対するデータオブジェクトに関する情報を格納する。別のところでさらに詳しく説明されているように、そのボリュームのチャンクは、ブロック８０５において複数の明確に区別されるブロックとして受け取ること、ブロック８０５においてブロック８２５で複数のチャンクに分けられたブロックデータの単一の大きなグループとして受け取ること、ブロック８２５において個別のチャンク、または複数のチャンクに分けられるブロックデータの単一の大きなグループとして取り出すこと、アーカイブストレージシステム上にすでに格納されていることなどによる、さまざまな方法で取得することができる。
【００９２】
ブロック８２０において、受け取った要求が、新規スナップショットボリュームのコピーを格納する要求でないと判定された場合、ルーチンは、ブロック８３０に進み、受け取った要求が、前のスナップショットボリュームのコピーからの変更を反映するボリュームの増分のスナップショットコピーを格納する要求であるかどうかを判定する。増分のスナップショットコピーを格納する要求である場合、ルーチンはブロック８３５に進み、ボリュームの前のスナップショットコピー以降に変更されたスナップショットのチャンクを識別し、ブロック８２５に関してすでに説明されているのと同様の方法で変更されたスナップショットのチャンクのコピーを取得する。次いで、ルーチンはブロック８４０に進み、変更されたチャンクのコピーを格納し、新規の変更されたチャンクおよび対応するデータオブジェクトが新規のスナップショットボリュームのコピーに関連付けられている前の他の未変更のチャンクに関する情報を格納する。前のスナップショットボリュームのコピー以降に変更されたチャンクは、ボリュームのプライマリコピーおよび／またはミラーコピーを格納するサーバブロックデータストレージシステムなどによる、さまざまな方法で（例えば、そのボリュームに対する書き込みデータアクセス要求または他の修正要求を追跡することによって）識別されうる。
【００９３】
ブロック８３０において、受け取った要求が、増分スナップショットボリュームのコピーを格納する要求でないと判定された場合、ルーチンは、ブロック８４５に進み、その要求が、対応する格納されているデータオブジェクトなどから、スナップショットボリュームのコピーの１つまたは複数のチャンクを提供する要求であるかどうかを判定する。もしそうであれば、ルーチンはブロック８５０に進み、指示されたスナップショットボリュームのコピーのチャンク（複数可）に対するデータを取り出して、その取り出されたデータを要求側に送る。そのような要求は、例えば、スナップショットボリュームのコピーに対するチャンクのすべてを取り出すことによって既存のスナップショットボリュームのコピーに基づき新規ボリュームを作成するオペレーションの一部、最小のミラーボリュームのコピーを復元するためにスナップショットボリュームのコピーのチャンクの部分集合を取り出すオペレーションの一部などとすることができる。
【００９４】
ブロック８４５において、受け取った要求が、１つまたは複数のスナップショットボリュームのコピーのチャンクを提供する要求でないと判定された場合、ルーチンはブロック８５５に進み、受け取った要求が、（例えば、それらの格納されているデータオブジェクトがそれらのボリュームのチャンクのための外部記憶域として使用される場合に）特定のボリュームのチャンクを表す１つまたは複数のデータオブジェクトに対する読み取りデータアクセス要求および／または書き込みデータアクセス要求を実行するなどのために、スナップショットボリュームのコピーの一部ではない１つまたは複数のボリュームのチャンクに対する１つまたは複数のデータアクセス要求を実行する要求であるかどうかを判定する。ボリュームのチャンクに対するデータアクセス要求を実行する要求である場合、ルーチンはブロック８６０に進み、指示されたボリュームのチャンク（複数可）に対応する格納されているデータオブジェクト（複数可）に対する要求されたデータアクセス要求（複数可）を実行する。別のところでさらに詳しく説明されているように、少なくともいくつかの実施形態では、格納されているデータオブジェクトを修正するときに、書き込みデータアクセス要求が即座に実行されないように、遅延更新技術が使用される場合がある。その場合、同じデータオブジェクトに対する後の読み取りデータアクセス要求が完了する前に、厳密なデータ整合性を確実にするために１つまたは複数の先行する書き込みデータアクセス要求が実行されうる。
【００９５】
ブロック８５５において、受け取った要求が、１つまたは複数のボリュームのチャンクに対するデータアクセス要求を実行すべきでないと判定された場合、ルーチンは、ブロック８８５に進み、１つまたは複数の他の指示されたオペレーションを適宜実行する。このような他のオペレーションとしては、例えば、（例えば、外部記憶域として、または他の目的のために）そのボリュームを表す対応する格納されているデータオブジェクトを更新するためにボリュームに対して実行される修正に対応する情報を繰り返し受け取り、適切な対応するアクションを起こすオペレーション、格納されているスナップショットボリュームのコピーを削除するか、もしくは他の何らかの形で修正する要求に応答するオペレーション、アーカイブストレージシステムを提供するストレージサービスによるアカウントを管理するユーザの要求に応答するオペレーションなどが挙げられる。ブロック８２５、８４０、８５０、８６０、または８８５の後、ルーチンは、ステップ８９５に進み、明示的な終了命令を受け取るまで続けるかどうかを決定する。処理を続ける場合、ルーチンはブロック８０５に戻り、そうでなければ、ブロック８９９に進んで終了する。
【００９６】
上で述べたように、少なくともいくつかの種類の要求については、ルーチンは、いくつかの実施形態において、要求側に対して指定されているアクセス権および／または要求の関連付けられているターゲット（例えば、指示されているボリュームまたはスナップショットボリュームのコピー）などに基づき、要求側がその要求を行う権限を与えられていることを確認することができるが、他の実施形態では、このルーチンは、要求を受け取ったルーチン（例えば、ノードマネージャルーチンおよび／またはＢＤＳシステムマネージャルーチン）によって要求がすでに許可されていると仮定することができる。さらに、少なくともいくつかの実施形態では、ユーザに代わって実行されるいくつかの種類またはすべての種類のアクションを監視して計測し、例えば、後から、それらのアクションのうちの少なくともいくつかについて対応する利用毎の料金を決定する際に利用することができる。
【００９７】
説明されている技術が使用されうるプログラム実行サービスの例示的な実施形態のオペレーションに関係する追加の詳細は、そのそれぞれが全体として参照により本明細書に組み込まれている、２００６年３月３１日出願の特許文献１、名称「Ｍａｎａｇｉｎｇ  Ｅｘｅｃｕｔｉｏｎ  Ｏｆ  Ｐｒｏｇｒａｍｓ  Ｂｙ  Ｍｕｌｔｉｐｌｅ  Ｃｏｍｐｕｔｉｎｇ  Ｓｙｓｔｅｍｓ」、特許文献３の一部継続出願である２００７年９月６日出願の特許文献２、名称「Ｅｘｅｃｕｔｉｎｇ  Ｐｒｏｇｒａｍｓ  Ｂａｓｅｄ  ｏｎ  Ｕｓｅｒ−Ｓｐｅｃｉｆｉｅｄ  Ｃｏｎｓｔｒａｉｎｔｓ」、および２００８年６月２４日出願の特許文献４、名称「Ｍａｎａｇｉｎｇ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｂｅｔｗｅｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｎｏｄｅｓ」に記載されている。それに加えて、スナップショットボリュームのコピーを格納するために、またはリモートのアーカイブストレージシステムを他の何らかの方法で実現するために使用されうるリモートのストレージサービスの一例のオペレーションに関係する追加の詳細は、参照により本明細書に組み込まれている、２００５年１２月２９日出願の特許文献６の優先権を主張する２００７年７月５日公開の特許文献５、名称「Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ  Ｗｉｔｈ  Ｗｅｂ  Ｓｅｒｖｉｃｅｓ  Ｃｌｉｅｎｔ  Ｉｎｔｅｒｆａｃｅ」に記載されている。さらに、ユーザがそのユーザのプログラムまたは他のユーザのための他のデータへの有料アクセスを提供する一例に関係する追加の詳細は、全体として参照により本明細書に組み込まれており、別のところでさらに詳しく説明されているように、ボリュームおよび／またはスナップショットコピーへのさまざまな種類の有料アクセスに対してユーザが他のユーザに課金することについて本明細書において同様に使用されうる、２００７年１２月２１日出願の特許文献７、名称「Ｐｒｏｖｉｄｉｎｇ  Ｃｏｎｆｉｇｕｒａｂｌｅ  Ｐｒｉｃｉｎｇ  ｆｏｒ  Ｅｘｅｃｕｔｉｏｎ  ｏｆ  Ｓｏｆｔｗａｒｅ  Ｉｍａｇｅｓ」に記載されている。
【００９８】
それに加えて、すでに述べているように、いくつかの実施形態では、仮想マシンを使用している場合があり、もしそうであれば、プログラム実行サービスによって実行されるプログラムは、仮想マシンのイメージ全体を含みうる。そのような実施形態では、実行されるプログラムは、オペレーティングシステム全体、ファイルシステムおよび／または他のデータ、ならびに場合によっては、１つまたは複数のユーザレベルのプロセスを含むことができる。他の実施形態では、実行されるプログラムは、一部の機能を提供するように相互運用性を有する１つまたは複数の他の種類の実行可能ファイルを含むことができる。さらに他の実施形態では、実行されるプログラムは、提供されるコンピューティングシステム上でネイティブコードで実行されうる、またはインタプリタ、または他のソフトウェアによって実装されるハードウェア抽象化を用いて間接的に実行されうる命令およびデータの物理的または論理的な集合体を含むことができる。より一般的には、いくつかの実施形態において、実行されるプログラムは、１つまたは複数のアプリケーションプログラム、アプリケーションフレームワーク、ライブラリ、アーカイブ、クラスファイル、スクリプト、コンフィギュレーションファイル、データファイルなどを含みうる。
【００９９】
それに加えて、すでに述べているように、少なくともいくつかの実施形態および状況において、ボリュームは、一方のサーバストレージシステムから他方のサーバストレージシステムへと移行されるか、または他の何らかの方法で移動されうる。さまざまな技術が、ボリュームの移動に使用され、そのような移動は、さまざまな方法で開始されうる。いくつかの状況では、この移動は、ボリュームが格納されるサーバストレージシステムに関係する問題（例えば、サーバストレージシステムの故障および／またはサーバストレージシステムへのネットワークアクセスの障害）を反映することがある。他の状況では、この移動は、優先度の高いボリュームなどについて、既存のサーバストレージシステム上に格納される他のボリュームのコピーを受け入れるために、またはボリュームのコピーを格納する元のサーバストレージシステムを、保守、エネルギー節約などの理由からシャットダウンできるようにするなどのために、限られた数のサーバストレージシステム上のボリュームのコピーのストレージを合併するために実行されうる。特定の一例において、サーバストレージシステム上に格納された１つまたは複数のボリュームのコピーが、そのサーバストレージシステムから利用可能である以上のリソースを必要とする場合、それらのボリュームのコピーのうちの１つまたは複数を追加のリソースを持つ１つまたは複数の他のサーバストレージシステムに移行することができる。１つまたは複数のサーバストレージシステムが予想される以上に少ないリソースを有しているとき、これらのサーバストレージシステムのうちの１つまたは複数が予想（許容）される以上に多いリソースを使用するとき、または１つまたは複数のサーバストレージシステムの利用可能なリソースが、１つまたは複数の予約されているかまたは格納されているボリュームのコピーの可能なリソース必要量に関して故意に過剰コミットされる実施形態などの、さまざまな理由から、利用可能なリソースの過度の使用が発生することがある。例えば、ボリュームのコピーの予想されるリソースの必要量が利用可能なリソースの範囲内にある場合、リソースの最大必要量は、利用可能なリソースの量を超えることがある。利用可能なリソースの過剰使用も、ボリュームの格納または使用に必要な実際のリソースが利用可能なリソースの量を超えた場合に発生しうる。
【０１００】
いくつかの実施形態では、上述のルーチンによって提供される機能が、さらに多くのルーチンに分割されるか、または少数のルーチンにまとめられるなど、代替的な方法で実現されうることは理解されるであろう。同様に、いくつかの実施形態では、例示されているルーチンは、他の例示されているルーチンが、それぞれ、そのような機能を欠いているか、または含んでいるとき、または提供される機能の量が変更されたときなどに、説明されている以上に多い、または少ない機能を備えることもある。それに加えて、さまざまなオペレーションが、特定の方法で（例えば、逐次的実行または並列実行で）、および／または特定の順序で実行されるように示されていることがあるが、他の実施形態では、これらのオペレーションは、他の順序および他の方法で実行されうる。同様に、上述のデータ構造は、他の実施形態では異なる方法で、例えば、単一のデータ構造を複数のデータ構造に分割すること、または複数のデータ構造を単一のデータ構造にまとめることなどによって構造化され、（例えば、他の例示されているデータ構造が、それぞれ、そのような情報を欠いているか、もしくは含んでいるとき、または格納されている情報の量または種類が変更されたときに）説明されている以上に多いまたは少ない情報を格納することができる。
【０１０１】
上記の説明から、本明細書では例示を目的として特定の実施形態が説明されているが、本発明の精神および範囲を逸脱することなくさまざまな修正を加えられることは理解されるであろう。したがって、本発明は、付属の請求項および請求項に記載の要素により定められる場合を除き制限されない。それに加えて、本発明の特定の態様は、特定の請求項の形式で以下に提示されているが、発明者は、利用可能な任意の請求項の形式で本発明のさまざまな態様を考えている。例えば、本発明のいくつかの態様のみが、コンピュータ可読媒体で具現化されるものとして現時点では記載されていることがあるが、他の態様も、同様に、そのように具現化されうる。
【０１０２】
条項１。ブロックデータストレージサービスのコンピューティングシステムが実行プログラムに対してリモートのブロックデータストレージ機能を提供するための方法であって、
ブロックデータストレージサービスによって提供される非ローカルブロックデータストレージへの第１の実行プログラムのアクセスを開始する要求を受け取るステップであって、第１のプログラムは地理的位置の同じ場所に配置される、１つまたは複数の内部ネットワークを共有する複数のコンピューティングシステムのうちの第１のコンピューティングシステム上で実行され、ブロックデータストレージサービスは複数のコンピューティングシステムのうちの複数の他のコンピューティングシステムの第１のグループを、複数の実行プログラムに対してブロックデータストレージを提供するブロックデータストレージシステムとして使用し、第１のコンピューティングシステムは第１のグループの一部ではない、ステップと、
内部ネットワークへの第１のコンピューティングシステムのアクセスを管理するブロックデータストレージサービスの第１のノードマネージャモジュールの制御下で、
ブロックデータストレージサービスによって提供される非ローカルブロックデータストレージを表す第１のコンピューティングシステムの論議ローカルストレージデバイスに対する第１の実行プログラムによって開始される１つまたは複数のデータアクセス要求を受け取るステップと、
第１の実行プログラムに代わって第２のコンピューティングシステムと内部ネットワーク上でやり取りすることによって受け取ったデータアクセス要求に自動的に応答し、第２のコンピューティングシステム上に格納されているプライマリコピーを有し、第３のコンピューティングシステム上に格納されているミラーコピーを有する第１のブロックデータストレージボリューム上で受け取ったデータアクセス要求を実行するステップであって、第２のコンピューティングシステムおよび第３のコンピューティングシステムはそれぞれブロックデータストレージシステムの第１のグループの一部であり、内部ネットワーク上でやり取りするオペレーションは第１の実行プログラムに対して透過的である方法により実行される、ステップと、
第１のブロックデータストレージボリューム上で受け取ったデータアクセス要求を実行した後に、第２のコンピューティングシステム上の第１のブロックデータストレージボリュームのプライマリコピーが利用不可能であると自動的に判定するステップと、
第１のコンピューティングシステムの論理ローカルブロックストレージデバイスに対して第１の実行プログラムによって開始される１つまたは複数の他のデータアクセス要求を受け取った後に、第１の実行プログラムに代わって第３のコンピューティングシステムと内部ネットワーク上でやり取りすることによって受け取った他のデータアクセス要求に自動的に応答し、第３のコンピューティングシステム上の第１のブロックデータストレージボリュームのミラーコピー上で他のデータアクセス要求を実行するステップとを含む方法。
【０１０３】
条項２。ブロックデータストレージサービスに対するシステムマネージャモジュールの制御の下で、ブロックデータストレージサービスがブロックデータストレージを複数の実行プログラムに提供するステップを管理するステップをさらに含み、この管理するステップは、
複数の実行プログラムのうちの１つまたは複数によってそれぞれ使用される複数のブロックデータストレージボリュームを作成するステップであって、ブロックデータストレージボリュームのそれぞれを作成するステップは複数のブロックデータストレージシステムのうちの一方のブロックデータストレージシステム上にブロックデータストレージボリュームのプライマリコピーを格納するステップを含み、複数のブロックデータストレージシステムのうちの他方のブロックデータストレージシステム上にブロックデータストレージボリュームのミラーコピーを格納するステップを含み、これら複数のプログラムは複数の関連付けられているノードマネージャモジュールを有する複数のコンピューティングシステム上で実行される、ステップと、
ブロックデータストレージボリュームのミラーコピーを、作成されたブロックデータストレージボリュームのうちの１つのブロックデータストレージボリュームのプライマリコピーを格納するブロックデータストレージシステムが実行プログラムから受け取った書き込みデータアクセス要求に基づいてそのプライマリコピーに格納されているブロックデータに対する修正を実行するときに、その１つのブロックデータストレージボリュームのミラーコピーに格納されているブロックデータに対しその修正を実行することによって保持するステップと、
ブロックデータストレージボリュームに対するアクセスを、作成されたブロックデータストレージボリュームのうちの１つのブロックデータストレージボリュームのプライマリコピーが利用不可能になったときに、その１つのブロックデータストレージボリュームのミラーコピーをその１つのブロックデータストレージボリュームの新規プライマリコピーとなるように格上げすることによって保持するステップとを含む条項１の方法。
【０１０４】
条項３。複数のプログラムが、複数のコンピューティングシステムのうちのいくつかのコンピューティングシステムの第２のグループ上のプログラム実行サービスによって実行され、第２のグループのコンピューティングシステムは、第１のグループのコンピューティングシステムから明確に区別され、第１のコンピューティングシステムは、少なくとも１つのプログラムをそれぞれ実行することができる複数の仮想マシンをホストし、第１の実行プログラムは、複数のプログラムのうちの１つであり、さらに第１のコンピューティングシステムによってホストされる複数の仮想マシンのうちの少なくとも１つによって実行される仮想マシンのイメージであり、第１のノードマネージャモジュールは、第１のコンピューティングシステム用の仮想マシンモニターの一部として実行される条項２の方法。
【０１０５】
条項４。実行プログラムに対してブロックデータストレージ機能を提供するためのコンピュータによって実装される方法であって、
第１のプログラムが実行される第１のコンピューティングシステムのローカルにあるブロックストレージデバイスに対して第１の実行プログラムによって開始される１つまたは複数のデータアクセス要求の第１のグループの１つまたは複数の指示を受け取るステップであって、ローカルのブロックストレージデバイスは１つまたは複数のネットワーク上で明確に区別される第２のデータストレージシステムによって提供される非ローカルブロックデータストレージボリュームを表す論理デバイスである、ステップと、
第１の実行プログラムに代わって第２のデータストレージシステムと１つまたは複数のネットワーク上でやり取りすることによってデータアクセス要求の第１のグループの受け取った指示に自動的に応答し、第２のデータストレージシステムによって提供されるブロックデータストレージボリュームによって格納されているブロックデータ上で第１のグループのデータアクセス要求を実行させるステップと、
第２のデータストレージシステムによって提供されるブロックデータストレージボリュームが利用不可能になったと判定し、第２のデータストレージシステムによって提供されるブロックデータストレージボリュームのミラーコピーを収容する第３のデータストレージシステムを自動的に識別するステップであって、第３のデータストレージシステムは第１のコンピューティングシステムおよび第２のデータストレージシステムから明確に区別される、ステップと、
第１のコンピューティングシステム上のローカルのブロックストレージデバイスに対して第１の実行プログラムによって開始される１つまたは複数の他のデータアクセス要求の第２のグループの１つまたは複数の指示を受け取るステップと、
第１の実行プログラムに代わって第３のデータストレージシステムと１つまたは複数のネットワーク上でやり取りすることによってデータアクセス要求の第２のグループの受け取った指示に自動的に応答し、識別された第３のデータストレージシステム上のブロックデータストレージボリュームのミラーコピー上で第２のグループのデータアクセス要求を実行させるステップとを含むコンピュータによって実装される方法。
【０１０６】
条項５。１つまたは複数のデータアクセス要求の第１のグループの指示を受け取る前に、第１の実行プログラムで使用できるようにブロックデータストレージボリュームを第１のコンピューティングシステムにアタッチするステップをさらに含み、第１のコンピューティングシステムにブロックデータストレージボリュームをアタッチするステップは第１のコンピューティングシステムに対する論理ローカルブロックストレージデバイスを第２のデータストレージシステムによって提供されるブロックデータストレージボリュームに関連付けるステップを含む条項４の方法。
【０１０７】
条項６。第１のコンピューティングシステムにブロックデータストレージボリュームをアタッチする前に、第２のデータストレージシステム上に作成されたブロックデータストレージボリュームのプライマリコピーを格納し、第３のデータストレージシステム上にブロックデータストレージボリュームのミラーコピーを格納して、第２のデータストレージシステムによって提供されるブロックデータストレージボリューム上の第１のグループのデータアクセス要求の実行が、ブロックデータストレージボリュームの格納されているプライマリコピー上で行われるようにすることによってブロックデータストレージボリュームを作成するステップをさらに含む条項５の方法。
【０１０８】
条項７。ブロックデータストレージボリュームは、ブロックデータストレージサービスによって提供され、ブロックデータストレージボリュームの作成は、第１の実行プログラムに関連付けられているユーザからの要求に応答してブロックデータストレージサービスのシステムマネージャモジュールによって実行され、ブロックデータストレージボリュームを第１のコンピューティングシステムにアタッチするステップは、１つまたは複数のネットワークへの第１のコンピューティングシステムのアクセスを管理するブロックデータストレージサービスのノードマネージャモジュールによって実行される条項６の方法。
【０１０９】
条項８。第２のデータストレージシステムによって提供されるブロックデータストレージボリュームが利用不可能になったと判定した後、第１のコンピューティングシステムから明確に区別され、また第２のデータストレージシステムおよび第３のデータストレージシステムからも明確に区別される第４のデータストレージシステム上へのブロックデータストレージボリュームの他のコピーの作成を自動的に開始するステップをさらに含む条項４の方法。
【０１１０】
条項９。第２のデータストレージシステムによって提供されるブロックデータストレージボリュームが、第２のデータストレージシステムの障害、第２のデータストレージシステムの接続性の障害、および第２のデータストレージシステムが格納されているブロックデータストレージボリュームに確実にアクセスできない状況のうちの少なくとも１つの状況に基づいて利用不可能になっている条項８の方法。
【０１１１】
条項１０。第１のグループの複数のデータアクセス要求のうちの少なくとも１つのデータアクセス要求の実行は、第２のデータストレージシステム上のブロックデータストレージボリュームに格納されているブロックデータを修正するステップを含み、第３のデータストレージシステム上のブロックデータストレージボリュームのミラーコピーに格納されているブロックデータを修正することによって第３のデータストレージシステム上のブロックデータストレージボリュームのミラーコピーを保持するステップをさらに含む条項４の方法。
【０１１２】
条項１１。第１のコンピューティングシステムおよび第２のデータストレージシステムは、単一の地理的位置の同じ場所に配置されている複数のコンピューティングシステムの部分集合であり、複数のコンピューティングシステムは、ブロックデータストレージサービスによって提供される複数のブロックデータストレージシステムを含み、第２のデータストレージシステムおよび第３のデータストレージシステムは、それぞれ、複数のブロックデータストレージシステムのうちの明確に区別される１つのブロックデータストレージシステムである条項４の方法。
【０１１３】
条項１２。複数のコンピューティングシステムが一緒に配置される単一の地理的位置の同じ場所は、１つのデータセンターであり、方法は、データセンターの外部に配置されているリモートのストレージサービスの１つまたは複数アーカイブデータストレージシステム上のブロックデータストレージボリュームの少なくとも１つのコピーを作成するステップをさらに含む条項１１の方法。
【０１１４】
条項１３。第１のプログラムが、複数のコンピューティングシステムのうちのいくつかのコンピューティングシステム上の複数のユーザに対し複数のプログラムを実行するプログラム実行サービスによって実行され、第１のコンピューティングシステムは、少なくとも１つのプログラムをそれぞれ実行することができる複数の仮想マシンをホストし、第１の実行プログラムは、複数のプログラムのうちの１つであり、さらに第１のコンピューティングシステムによってホストされる複数の仮想マシンのうちの少なくとも１つによって実行される仮想マシンのイメージであり、データアクセス要求の第１のグループの指示を受け取るステップと他のデータアクセス要求の第２のグループの指示を受け取るステップとデータアクセス要求の第１のグループおよび第２のグループの受け取った指示に対して自動的に応答するステップは、第１のコンピューティングシステム用の仮想マシンモニターの実行の一部として実行され、第１のコンピューティングシステムは、第１の実行プログラムによる使用のために利用可能である１つまたは複数の他の実際のローカルのストレージデバイスを備える条項１１の方法。
【０１１５】
条項１４。コンピュータ可読媒体であって、このコンピュータ可読媒体の内容により１つまたは複数のコンピューティングシステムはブロックデータストレージ機能を実行プログラムに提供することができるが、これは、
ブロックデータストレージボリュームに対する第１のコンピューティングシステム上で実行される第１のプログラムによって開始される１つまたは複数のデータアクセス要求の１つまたは複数の指示を受け取るステップであって、ブロックデータストレージボリュームは１つまたは複数のネットワークによって第１のコンピューティングシステムから隔てられている第２のブロックデータストレージシステムによって提供される、ステップと、
第２のブロックデータストレージシステム上のブロックデータストレージボリュームに対しデータアクセス要求の実行を開始することによってデータアクセス要求の受け取った指示に自動的に応答するステップと、
第１のコンピューティングシステムおよび第２のブロックデータストレージシステムから明確に区別される１つまたは複数の第３のブロックデータストレージシステムのうちの各ブロックデータストレージシステム上にブロックデータストレージボリュームのミラーコピーを自動的に作成するステップと、
第２のデータストレージシステムによって提供されるブロックデータストレージボリュームが、利用不可能になった後に、第３のブロックデータストレージシステムのうちの少なくとも１つの第３のブロックデータストレージシステム上に作成されたブロックデータストレージボリュームのミラーコピー上で他のデータアクセス要求を実行することによってブロックデータストレージボリュームに対し第１のプログラムによって開始される１つまたは複数の他のデータアクセス要求の１つまたは複数の受け取った指示に自動的に応答するステップとを含む方法によって行われるコンピュータ可読媒体。
【０１１６】
条項１５。第１のグループのデータアクセス要求の実行とブロックデータストレージボリュームのミラーコピーの自動作成と第２のグループの他のデータアクセス要求の実行は、ブロックデータストレージサービスのシステムマネージャモジュールによって自動的に実行され、第１のプログラムは、第１のコンピューティングシステムのローカルにあり、第２のブロックデータストレージシステムによって提供されるブロックデータストレージボリュームを表す論理ブロックデータストレージデバイスとやり取りすることによってブロックデータストレージボリュームに対するデータアクセス要求を開始し、第１のプログラムによって開始されたデータアクセス要求を受け取るステップは、論理ローカルブロックデータストレージデバイスとの第１のプログラムによるやり取りの後に第１のコンピューティングシステムに関連付けられているブロックデータストレージサービスのノードマネージャモジュールによって実行され、データアクセス要求の受け取った指示に自動的に応答するステップは、１つまたは複数のネットワーク上で受け取ったデータアクセス要求の送信を開始することによって一部はノードマネージャモジュールの制御下で実行される条項１４のコンピュータ可読媒体。
【０１１７】
条項１６。第２のブロックデータストレージシステムは、データアクセス要求の受け取った指示に自動的に応答したときにブロックデータストレージボリュームのプライマリコピーを格納し、この方法は、他のデータアクセス要求の受け取った指示に自動的に応答する前に、ブロックデータストレージボリュームのプライマリコピーが利用不可能になったことを自動的に判定するステップと、複数の第３のブロックデータストレージシステムのうちの１つの第３のブロックデータストレージシステム上のブロックデータストレージボリュームのミラーコピーを選択するステップと、第３のブロックデータストレージシステム上のブロックデータストレージボリュームの選択されたミラーコピーをブロックデータストレージボリュームの現在のプライマリコピーになるよう格上げするステップとをさらに含む条項１４のコンピュータ可読媒体。
【０１１８】
条項１７。１つまたは複数の第３のブロックデータストレージシステムのうちの各第３のブロックデータストレージシステム上のブロックデータストレージボリュームのミラーコピーを自動作成するステップは、データアクセス要求の受け取った指示に自動的に応答する前に複数の第３のブロックデータストレージシステムのうちの１つの第３のブロックデータストレージシステム上にブロックデータストレージボリュームの第１のミラーコピーを作成するステップを含み、データアクセス要求の受け取った指示に自動的に応答するステップは、ブロックデータストレージボリュームの第１のミラーコピー上でデータアクセス要求を実行するステップをさらに含み、ブロックデータストレージボリュームの第１のミラーコピーは、選択されたミラーコピーであり、１つまたは複数の第３のブロックデータストレージシステムのうちの各第３のブロックデータストレージシステム上のブロックデータストレージボリュームのミラーコピーを自動作成するステップは、ブロックデータストレージボリュームのプライマリコピーが利用不可能になったと判定した後に、複数の第３のブロックデータストレージシステムのうちの他方の第３のブロックデータストレージシステム上のブロックデータストレージボリュームの第２のミラーコピーを作成するステップをさらに含む条項１６のコンピュータ可読媒体。
【０１１９】
条項１８。第２のブロックデータストレージシステムは、データアクセス要求の受け取った指示に自動的に応答したときにブロックデータストレージボリュームのプライマリコピーを格納し、第１のプログラムによって開始された指示されている１つまたは複数のデータアクセス要求は、第１のプログラムによって開始されたデータアクセス要求の第２のグループであり、この方法は、第２のグループのデータアクセス要求の指示を受け取る前に、
第１のコンピューティングシステムおよび第２のブロックデータストレージシステムおよび１つまたは複数の第３のブロックデータストレージシステムから明確に区別される第４のブロックデータストレージシステム上にブロックデータストレージボリュームの初期プライマリコピーを作成するステップと、
第４のブロックデータストレージシステム上に作成されたプライマリコピー上で第１のグループのデータアクセス要求を実行することによってブロックデータストレージボリュームに対して第１のプログラムによって開始される１つまたは複数のデータアクセス要求の第１のグループの１つまたは複数の受け取った指示に自動的に応答するステップであって、データアクセス要求の第１のグループはデータアクセス要求の第２のグループの前に第１のプログラムによって開始される、ステップと、
データアクセス要求の第１のグループの指示に応答した後に、ブロックデータストレージボリュームのプライマリコピーを第４のブロックデータストレージシステムから第２のブロックデータストレージシステムに移動することを決定し、ブロックデータストレージボリュームのプライマリコピーを第２のブロックデータストレージシステムに移動した後にブロックデータストレージボリュームに対し第１のプログラムによって開始されるデータアクセス要求が第２のブロックデータストレージシステム上のブロックデータストレージボリュームの移動されたプライマリコピー上で実行されるようにするステップとをさらに含む条項１４のコンピュータ可読媒体。
【０１２０】
条項１９。ブロックデータストレージボリュームのプライマリコピーを第４のブロックデータストレージシステムから第２のブロックデータストレージシステムに移動することを決定するステップは、第２のブロックデータストレージシステムが、ブロックデータストレージボリュームのプライマリコピーを提供する能力に関して第４のブロックデータストレージシステムに比べて高いとする自動判定とブロックデータストレージボリュームに関連付けられているブロックデータストレージサービスのユーザから受け取った要求のうちの少なくとも１つに基づいて実行される条項１８のコンピュータ可読媒体。
【０１２１】
条項２０。第１のプログラムは、ユーザによって支払われる料金と引き換えにプログラム実行サービスのユーザに代わって複数のホストコンピューティングシステム上のプログラム実行サービスによって実行される複数のプログラムのうちの１つであり、第１のコンピューティングシステムは、複数のホストコンピューティングシステムのうちの１つであり、第１のプログラムによるブロックデータストレージボリュームの使用は、第１のプログラムが代わって実行されるプログラム実行サービスのユーザが払う料金と引き換えに実行される条項１４のコンピュータ可読媒体。
【０１２２】
条項２１。コンピュータ可読媒体は、内容を格納するコンピューティングシステムのメモリおよびそれらの内容を含む生成された格納されているデータ信号を含むデータ伝送媒体のうちの少なくとも１つである条項１４のコンピュータ可読媒体。
【０１２３】
条項２２。内容は、実行されると１つまたは複数のコンピューティングシステムに方法を実行させる命令である条項１４のコンピュータ可読媒体。
【０１２４】
条項２３。実行プログラムに対してブロックデータストレージ機能を提供するように構成されているシステムであって、
１つまたは複数のメモリと、
複数のブロックデータストレージシステムを使用して、ブロックデータストレージサービスのユーザによって作成され、それらのユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するように構成されているブロックデータストレージシステムマネージャモジュールであって、ブロックデータストレージサービスを提供するステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、ブロックデータストレージボリュームのそれぞれを作成するステップは複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納されるブロックデータストレージボリュームのプライマリコピーを作成するステップを含む、ステップと、
データアクセス要求のそれぞれについて、そのデータアクセス要求に対する１つのブロックデータストレージボリュームのプライマリコピーが利用可能である場合に、その利用可能なプライマリコピー上でデータアクセス要求の実行を開始することによって作成された複数のブロックデータストレージボリュームのうちの１つのブロックデータストレージボリュームに対し複数の実行プログラムのうちの１つの実行プログラムによってそれぞれ開始されたデータアクセス要求に応答するステップと、
受け取った指示に応答して、複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームの新規コピーを作成するステップであって、第１のブロックデータストレージシステムのプライマリボリュームがブロックデータストレージシステムの最初のものに格納されており、作成された新規コピーは第１のブロックデータストレージシステムから明確に区別される１つまたは複数の他のデータストレージシステム上に格納される、ステップとを含む、ブロックデータストレージシステムマネージャモジュールとを備えるシステム。
【０１２５】
条項２４。第１のブロックデータストレージボリュームを作成するステップは、第１のブロックデータストレージシステムおよび１つまたは複数の他のデータストレージシステムから明確に区別される複数のブロックデータストレージシステムのうちの第２のブロックデータストレージシステム上に格納される第１のブロックデータストレージボリュームのミラーコピーを作成するステップをさらに含み、データアクセス要求に応答するステップは、第１のブロックデータストレージボリュームに対する複数の実行プログラムのうちの１つの実行プログラムによって開始される各データアクセス要求について、第１のブロックデータストレージボリュームのプライマリコピーが利用可能でない場合に、第２のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームのミラーコピー上でデータアクセス要求の実行を開始するステップをさらに含む条項２３のシステム。
【０１２６】
条項２５。データアクセス要求に応答するステップは、第１のブロックデータストレージボリュームに対する複数の実行プログラムのうちの１つの実行プログラムによって開始される各データアクセス要求について、第１のブロックデータストレージボリュームのプライマリコピーが利用可能である場合に、第２のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームのミラーコピー上でデータアクセス要求の実行を開始するステップをさらに含む条項２４のシステム。
【０１２７】
条項２６。データアクセス要求に応答するステップは、第１のブロックデータストレージシステム上の第１のブロックデータストレージボリュームのプライマリコピーが利用可能でない第１のブロックデータストレージボリュームに対して複数の実行プログラムのうちの１つの実行プログラムによって開始される初期データアクセス要求について、第２のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームのミラーコピーを、第１のブロックデータストレージシステム上の第１のブロックデータストレージボリュームのプライマリコピーの代わりに、第１のブロックデータストレージボリュームの新規プライマリコピーとなるように格上げし、それにより、第２のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームのミラーコピー上でその初期データアクセス要求の実行を開始するステップが第２のブロックデータストレージシステム上の第１のブロックデータストレージボリュームの格上げされた新規プライマリコピー上で実行され、その初期データアクセス要求の後に第１のブロックデータストレージボリュームに対して複数の実行プログラムのうちの１つの実行プログラムによって開始されるデータアクセス要求が、第２のブロックデータストレージシステム上の第１のブロックデータストレージボリュームの格上げされた新規プライマリコピー上で実行されるようにするステップをさらに含む条項２４のシステム。
【０１２８】
条項２７。第２のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームのミラーコピーを第１のブロックデータストレージボリュームの新規プライマリコピーとなるように格上げするステップは、第１のブロックデータストレージシステムおよび第２のブロックデータストレージシステムから明確に区別される複数のブロックデータストレージシステムのうちの第３のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームの第２のミラーコピーを作成するステップをさらに含み、第１のブロックデータストレージボリュームに対する複数の実行プログラムのうちの１つの実行プログラムによって開始される初期データアクセス要求の後の複数のデータアクセス要求のうちの各データアクセス要求に応答するステップは、第３のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームの第２のミラーコピー上でデータアクセス要求の実行を開始するステップをさらに含む条項２６のシステム。
【０１２９】
条項２８。第１のブロックデータストレージボリュームの新規コピーは受け取った指示に応答して作成され、この受け取った指示は、第１のブロックデータストレージボリュームのプライマリコピーを第１のブロックデータストレージシステムから明確に区別される第２のブロックデータストレージシステムに移動する決定に基づいており、１つまたは複数の他のデータストレージシステムは、第２のブロックデータストレージシステムであり、第２のブロックデータストレージシステム上に第１のブロックデータストレージボリュームの新規コピーを作成するステップは、第２のブロックデータストレージシステム上に作成された新規コピーを第１のブロックデータストレージボリュームの新規プライマリコピーとして指定するステップを含み、ブロックデータストレージシステムマネージャモジュールがブロックデータストレージサービスを提供するステップは、第１のブロックデータストレージボリュームの新規コピーを作成した後に、第２のブロックデータストレージシステム上に格納されている第１のブロックデータストレージボリュームの新規プライマリコピー上で追加のデータアクセス要求の実行を開始することによって第１のブロックデータストレージボリュームに対する複数の実行プログラムのうちの１つの実行プログラムによってそれぞれ開始される１つまたは複数の追加のデータアクセス要求に応答するステップをさらに含む条項２３のシステム。
【０１３０】
条項２９。第１のブロックデータストレージボリュームのプライマリコピーを第１のブロックデータストレージシステムから第２のブロックデータストレージシステムに移動することを決定するステップは、第２のブロックデータストレージシステムが、第１のブロックデータストレージボリュームのプライマリコピーへの１つまたは複数の実行プログラムのアクセスを提供する能力に関して第１のブロックデータストレージシステムに比べて高いとする自動判定と第１のブロックデータストレージボリュームに関連付けられているブロックデータストレージデバイスのユーザから受け取った要求のうちの少なくとも１つに基づいて実行される条項２８のシステム。
【０１３１】
条項３０。第１のブロックデータストレージボリュームの新規コピーは受け取った指示に応答して作成され、この受け取った指示は、第１のブロックデータストレージボリュームからリモートにあるストレージサービスを使用して第１のブロックデータストレージボリュームのスナップショットコピーを作成する要求であり、１つまたは複数の他のデータストレージシステムは、リモートのストレージサービスの一部であるアーカイブデータストレージシステムであり、第１のブロックデータストレージボリュームの新規コピーを作成するステップは、リモートのストレージサービスとやり取りして新規の第１のブロックデータストレージボリュームのコピーを第１のブロックデータストレージボリュームのスナップショットコピーとして作成するステップを含む条項２３のシステム。
【０１３２】
条項３１。単一の地理的位置の同じ場所に配置されている複数のブロックデータストレージシステムをさらに備え、単一の地理的位置とは別の場所にある、ブロックデータ以外のフォーマットでデータを格納する複数の他のデータストレージシステムを使用するリモートのストレージサービスをさらに備えるシステムであって、ブロックデータストレージシステムマネージャモジュールがブロックデータストレージサービスを提供するステップは、作成された複数のブロックデータストレージボリュームのうちの１つまたは複数のブロックデータストレージボリュームのそれぞれについて、ブロックデータストレージボリュームの複数の部分をリモートのストレージサービスの複数の他のデータストレージシステムのうちの１つまたは複数のデータストレージシステム上に格納し、格納される複数の部分はそれぞれ１つまたは複数のデータアクセス要求によって修正されたブロックデータストレージボリュームの一部を表すステップをさらに含む条項２３のシステム。
【０１３３】
条項３２。複数の実行プログラムのうちの１つまたは複数の実行プログラムにそれぞれ関連付けられている複数のノードマネージャモジュールをさらに備え、ノードマネージャモジュールのそれぞれが１つまたは複数のネットワーク上でブロックデータストレージサービスにそれらのデータアクセス要求を転送することによって１つまたは複数の作成されたブロックデータストレージボリュームに対して１つまたは複数の関連付けられている実行プログラムによって開始されるデータアクセス要求を管理する条項２３のシステム。
【０１３４】
条項３３。複数のホストコンピューティングシステムを使用してプログラム実行サービスのユーザのために複数のプログラムを実行するプログラム実行サービスを提供するように構成されているプログラム実行サービスシステムマネージャモジュールをさらに備え、プログラム実行サービスによって実行される複数のプログラムは作成された１つまたは複数ブロックデータストレージボリュームを使用する１つまたは複数の実行プログラムを含む条項２３のシステム。
【０１３５】
条項３４。システムは、１つまたは複数のメモリのうちの少なくとも１つのメモリを備える第１のコンピューティングシステムを備え、ブロックデータストレージシステムマネージャモジュールは、少なくとも１つのメモリを使用して第１のコンピューティングシステムによって実行されるソフトウェア命令を備える条項２３のシステム。
【０１３６】
条項３５。ブロックデータストレージシステムマネージャモジュールは、複数のブロックデータストレージシステムを使用して、ブロックデータストレージサービスのユーザによって作成され、それらのユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するための１つまたは複数の手段からなり、ブロックデータストレージサービスを提供するステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、ブロックデータストレージボリュームのそれぞれを作成するステップは複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納されるブロックデータストレージボリュームのプライマリコピーを作成するステップを含む、ステップと、
データアクセス要求のそれぞれについて、そのデータアクセス要求に対する１つのブロックデータストレージボリュームのプライマリコピーが利用可能である場合に、その利用可能なプライマリコピー上でデータアクセス要求の実行を開始することによって作成された複数のブロックデータストレージボリュームのうちの１つのブロックデータストレージボリュームに対し複数の実行プログラムのうちの１つの実行プログラムによってそれぞれ開始されたデータアクセス要求に応答するステップと、
受け取った指示に応答して、複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームの新規コピーを作成するステップであって、第１のブロックデータストレージシステムのプライマリボリュームがブロックデータストレージシステムの最初のものに格納されており、作成された新規コピーは第１のブロックデータストレージシステムから明確に区別される１つまたは複数の他のデータストレージシステム上に格納される、ステップとを含む、ブロックデータストレージシステムマネージャモジュールとを備える条項２３のシステム。
【０１３７】
条項３６。ブロックデータストレージサービスのコンピューティングシステムがリモートの格納されているブロックデータへの実行プログラムのアクセスを管理するための方法であって、
ブロックデータストレージサービスによって提供される非ローカルブロックデータストレージへの指示されたプログラムの第１のコピーのアクセスを開始する要求を受け取るステップであって、第１のプログラムのコピーは第１の地理的位置の同じ場所に配置される、１つまたは複数の内部ネットワークを共有する複数のコンピューティングシステムのうちの第１のコンピューティングシステム上で実行され、ブロックデータストレージサービスは複数のコンピューティングシステムのうちの複数の他のコンピューティングシステムの第１のグループを、複数の実行プログラムに対してブロックデータストレージを提供するブロックデータストレージシステムとして使用し、第１のコンピューティングシステムは第１のグループの一部ではない、ステップと、
受け取った要求に応答して、第１のブロックデータストレージボリュームを、実行する第１のプログラムのコピーで使用できるように第１のコンピューティングシステムにアタッチするステップであって、第１のブロックデータストレージボリュームは第２のコンピューティングシステム上に格納されているプライマリコピーを有し、さらに第３のコンピューティングシステム上に格納されているミラーコピーを有し、第２のコンピューティングシステムおよび第３のコンピューティングシステムはそれぞれブロックデータストレージシステムの第１のグループの一部であり、第１のブロックデータストレージボリュームをアタッチするステップは第１のコンピューティングシステムの第１の論理ローカルブロックストレージデバイスを第１のブロックデータストレージボリュームに関連付けるステップを含む、ステップと、
ブロックデータストレージサービスのシステムマネージャモジュールの制御下で、複数の実行プログラムへのブロックデータストレージの提供を、
第１の論理ローカルブロックストレージデバイスに対して実行する第１のプログラムのコピーによって開始された１つまたは複数のデータアクセス要求の指示を受け取った後に、第１のブロックデータストレージボリュームのプライマリコピーおよびミラーコピー上でデータアクセス要求を実行するステップであって、データアクセス要求を実行することにより第１のブロックデータストレージボリュームのプライマリコピーおよびミラーコピーのそれぞれに同じ格納済みブロックデータが保持されるような仕方で第１のブロックデータストレージボリューム上に格納されているブロックデータに対して１つまたは複数の修正が加えられる、ステップにより自動的に応答するステップと、
データアクセス要求を実行した後に、第１のプログラムのコピーの実行が終了したと自動的に判定し、この判定に応答して、第１のブロックデータストレージボリュームへの指示されたプログラムのアクセスを自動的に保持し、アクセスを保持するステップは明確に区別される第４のコンピューティングシステム上で指示されたプログラムの第２のコピーの実行を開始するステップと第１のブロックデータストレージボリュームを、実行する第２のプログラムのコピーで使用できるように第４のコンピューティングシステムにアタッチするステップとを含み、アタッチするステップは第４のコンピューティングシステムの第２の論理ローカルブロックストレージデバイスを第１のブロックデータストレージボリュームに関連付けるステップを含む、ステップと、
第２の論理ローカルブロックストレージデバイスに対して実行する第２のプログラムのコピーによって開始された１つまたは複数の他のデータアクセス要求の指示を受け取った後に、第１のブロックデータストレージボリュームのプライマリコピーおよびミラーコピー上で他のデータアクセス要求を実行するステップであって、データアクセス要求を実行することにより第１のブロックデータストレージボリュームのプライマリコピーおよびミラーコピーがそれぞれ同じブロックデータを格納するような仕方で第１のブロックデータストレージボリューム上に格納されているブロックデータに対して１つまたは複数のさらなる修正が加えられる、ステップにより自動的に応答するステップとによって管理するステップとを含む方法。
【０１３８】
条項３７。第１のブロックデータストレージボリュームを第１のコンピューティングシステムにアタッチするステップは、内部ネットワークへの第１のコンピューティングシステムのアクセスを管理するブロックデータストレージサービスのノードマネージャモジュールによって実行され、この方法は、ノードマネージャモジュールの制御下で、
第１論理ローカルブロックストレージデバイスに対して実行する第１のプログラムのコピーによって開始されるデータアクセス要求を受け取るステップと、
内部ネットワーク上でシステムマネージャモジュールとやり取りしてデータアクセス要求の指示を送ることによりデータアクセス要求の実行を円滑にするステップであって、内部ネットワーク上でやり取りするステップは実行する第１のプログラムのコピーに対して透過的な方法で実行される、ステップとをさらに含む条項３６の方法。
【０１３９】
条項３８。複数のプログラムが、複数のコンピューティングシステムのうちのいくつかのコンピューティングシステムの第２のグループ上のプログラム実行サービスによって実行され、第２のグループのコンピューティングシステムは、第１のグループのコンピューティングシステムから明確に区別され、第１のコンピューティングシステムは、少なくとも１つのプログラムをそれぞれ実行することができる複数の仮想マシンをホストし、指示されたプログラムは、複数のプログラムのうちの１つであり、さらに第１のコンピューティングシステムによってホストされる複数の仮想マシンのうちの少なくとも１つによって実行される仮想マシンのイメージであり、ノードマネージャモジュールは、第１のコンピューティングシステム用の仮想マシンモニターの一部として実行される条項３７の方法。
【０１４０】
条項３９。実行プログラムによるブロックデータストレージ機能へのアクセスを管理するためのコンピュータによって実装される方法であって、
非ローカルブロックデータストレージボリューム上に格納されているブロックデータにアクセスするために第１のコンピューティングシステム上で実行される第１のプログラムの第１のコピーによって開始された１つまたは複数のデータアクセス要求の第１のグループの１つまたは複数の指示を受け取るステップであって、ブロックデータストレージボリュームは１つまたは複数のネットワーク上で明確に区別される第２のデータストレージシステムによって提供され、第１の実行するプログラムのコピーがブロックデータストレージボリュームを表す第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介してブロックデータストレージボリュームに対するデータアクセス要求を開始するように第１のコンピューティングシステムにアタッチされる、ステップと、
第１の実行プログラムのコピーに代わって第２のデータストレージシステムとやり取りすることによってデータアクセス要求の第１のグループの受け取った指示に自動的に応答し、第２のデータストレージシステムによって提供されるブロックデータストレージボリューム上の第１のグループのデータアクセス要求の実行を開始するステップと、
第１のプログラムのコピーが利用不可能になったと判定した後に、第１のプログラムの第２のコピーが実行されている、第１のコンピューティングシステムおよび第２のデータストレージシステムから明確に区別される第３のコンピューティングシステムを識別し、第２のプログラムのコピーがブロックデータストレージボリュームを表す第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるようにブロックデータストレージボリュームを第３のコンピューティングシステムにアタッチするステップと、
第３のコンピューティングシステム上の第２の論理ローカルブロックストレージデバイスとのやり取りを介してブロックデータストレージボリュームに対して第２の実行プログラムのコピーによって開始される１つまたは複数の他のデータアクセス要求の第２のグループの１つまたは複数の指示を受け取るステップと、
第２の実行プログラムのコピーに代わって第２のデータストレージシステムとやり取りすることによってデータアクセス要求の第２のグループの受け取った指示に自動的に応答し、第２のデータストレージシステム上のブロックデータストレージボリューム上の第２のグループのデータアクセス要求の実行を開始するステップとを含む方法。
【０１４１】
条項４０。第１のプログラムのコピーが利用不可能になったと自動的に判定するステップをさらに含み、第１のプログラムのコピーが利用不可能である状況は第１のコンピューティングシステムの障害、第１のコンピューティングシステムの接続性の障害、および第１のコンピューティングシステムが第１のプログラムのコピーの実行を継続できない状況のうちの少なくとも１つの状況に基づく条項３９の方法。
【０１４２】
条項４１。第１のプログラムの第２のコピーが実行されている第３のコンピューティングシステムを識別するステップおよびブロックデータストレージボリュームを第３のコンピューティングシステムにアタッチするステップは、ブロックデータストレージボリュームへの第１のプログラムのアクセスを保持するために自動的に実行され、アクセスを自動的に維持するステップは第１のプログラムのコピーが利用不可能になったと自動的に判定したことに応答して実行される条項４０の方法。
【０１４３】
条項４２。第１のプログラムのコピーが利用不可能になったと判定するステップ、第１のプログラムの第２のコピーが実行されている第３のコンピューティングシステムを識別するステップ、およびブロックデータストレージボリュームを第３のコンピューティングシステムにアタッチするステップのうちの少なくとも１つのステップは、第１のプログラムおよびブロックデータストレージボリュームに関連付けられているユーザから受け取った１つまたは複数の指示に応答して実行される条項３９の方法。
【０１４４】
条項４３。第１のプログラムの第２のコピーが実行されている第３のコンピューティングシステムを識別するステップは、第１のプログラムのコピーが利用不可能になったと判定した後に、第３のコンピューティングシステム上で第２のプログラムのコピーの実行を開始するステップを含む条項３９の方法。
【０１４５】
条項４４。第１のプログラムの第１のコピーは、複数の明確に区別されるコンピューティングシステム上で実行される第１のプログラムの複数のコピーのうちの１つのコピーであり、これら複数のコピーのうちの少なくとも１つのコピーは、それらの複数のコピーのうちの１つまたは複数の他のコピーに対する代替的コピーであり、第１のプログラムの第２のコピーが実行されている第３のコンピューティングシステムを識別するステップは、少なくとも１つの代替的コピーのうちの１つのコピーである第２のコピーに基づいて第１のプログラムの第２のコピーを選択するステップを含む条項３９の方法。
【０１４６】
条項４５。第１のコンピューティングシステムにブロックデータストレージボリュームをアタッチする前に、第２のデータストレージシステム上にブロックデータストレージボリュームを作成し、明確に区別される第４のブロックデータストレージシステム上にブロックデータストレージボリュームのミラーコピーを作成するステップをさらに含み、第１のグループおよび第２のグループのデータアクセス要求に応答するステップは、第１のグループおよび第２のグループのデータアクセス要求の、作成されたミラーコピー上での実行を開始するステップをさらに含む条項３９の方法。
【０１４７】
条項４６。１つまたは複数のデータアクセス要求の指示を受け取る前に、第１の実行プログラムのコピーで使用できるようにブロックデータストレージボリュームを第１のコンピューティングシステムにアタッチするステップをさらに含み、ブロックデータストレージボリュームをアタッチするステップは第１の論理ブロックストレージデバイスを第２のデータストレージシステムによって提供されるブロックデータストレージボリュームに関連付けるステップを含み、１つまたは複数のネットワークへの第１のコンピューティングシステムのアクセスを管理するノードマネージャモジュールによって実行され、ノードマネージャモジュールは第１の実行プログラムに関連付けられているユーザからの要求に応答してブロックデータストレージボリュームをすでに作成しているブロックデータストレージサービスの一部である条項３９の方法。
【０１４８】
条項４７。第１のコンピューティングシステム、第３のコンピューティングシステム、および第２のデータストレージシステムは、第１の地理的位置の同じ場所に配置されている複数のコンピューティングシステムの部分集合であり、複数のコンピューティングシステムは、ブロックデータストレージサービスによって提供される複数のブロックデータストレージシステムを含み、第２のデータストレージシステムおよび第３のデータストレージシステムは、それぞれ、複数のブロックデータストレージシステムのうちの明確に区別される１つのブロックデータストレージシステムである条項３９の方法。
【０１４９】
条項４８。第１の地理的位置の場所は、データセンターであり、第１のプログラムが、データセンターにある複数のコンピューティングシステムのうちのいくつかのコンピューティングシステム上の複数のユーザに対し複数のプログラムを実行するプログラム実行サービスによって実行され、第１のコンピューティングシステムは、少なくとも１つのプログラムをそれぞれ実行することができる複数の仮想マシンをホストし、第１の実行プログラムは、複数のプログラムのうちの１つであり、さらに第１のコンピューティングシステムによってホストされる複数の仮想マシンのうちの少なくとも１つによって実行される仮想マシンのイメージであり、データアクセス要求の第１のグループの指示を受け取るステップと他のデータアクセス要求の第２のグループの指示を受け取るステップとデータアクセス要求の第１のグループおよび第２のグループの受け取った指示に対して自動的に応答するステップは、第１のコンピューティングシステム用の仮想マシンモニターの実行の一部として実行され、第１のコンピューティングシステムは、第１の実行プログラムによる使用のために利用可能である１つまたは複数の他の実際のローカルのストレージデバイスを備える条項４７の方法。
【０１５０】
条項４９。コンピュータ可読媒体であって、このコンピュータ可読媒体の内容により１つまたは複数のコンピューティングは実行プログラムによるブロックデータストレージ機能へのアクセスを管理することができ、そのために実行する方法は、
第１のコンピューティングシステム上で実行される第１のプログラムによる非ローカルブロックデータストレージボリュームへのアクセスを可能にするステップであって、このアクセスによって第１のプログラムはブロックデータストレージボリュームに対するデータアクセス要求を開始することができ、ブロックデータストレージボリュームは１つまたは複数のネットワークにより第１のコンピューティングシステムから隔てられている第２のブロックデータストレージシステムによって提供される、ステップと、
ブロックデータストレージボリュームに対する第１のプログラムによって開始された１つまたは複数のデータアクセス要求の１つまたは複数の受け取った指示に自動的に応答するステップであって、応答するステップは第２のブロックデータストレージシステム上のブロックデータストレージボリュームに対するデータアクセス要求の実行を開始するステップを含む、ステップと、
第１のコンピューティングシステム上で実行されている第１のプログラムが利用不可能になった後に、第１のプログラムに許可していたアクセスに代えて、第３のコンピューティングシステム上で実行されている第２のプログラムにブロックデータストレージボリュームへのアクセスを許可するステップと、
ブロックデータストレージボリュームに対する第２のプログラムによって開始された１つまたは複数の他のデータアクセス要求の１つまたは複数の受け取った指示に自動的に応答するステップであって、応答するステップは第２のブロックデータストレージシステム上のブロックデータストレージボリュームに対する他のデータアクセス要求の実行を開始するステップを含む、ステップとを含むコンピュータ可読媒体。
【０１５１】
条項５０。第１のプログラムおよび第２のプログラムは、単一のプログラムの実行コピーであり、アクセスを第１のプログラムに許可するステップは、第１の実行プログラムがブロックデータストレージボリュームを表す第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介してブロックデータストレージボリュームに対するデータアクセス要求を開始するようにブロックデータストレージボリュームを第１のコンピューティングシステムにアタッチするステップを含み、アクセスを第２のプログラムに許可するステップは、第２のプログラムが実行される第３のコンピューティングシステムを識別するステップと第２の実行プログラムがブロックデータストレージボリュームを表す第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるようにブロックデータストレージボリュームを第３のコンピューティングシステムにアタッチするステップとを含み、第１のプログラムおよび第２のプログラムによるブロックデータストレージボリュームに対するデータアクセス要求は、ブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求である条項４９のコンピュータ可読媒体。
【０１５２】
条項５１。第１のコンピューティングシステム、第３のコンピューティングシステム、および第２のブロックデータストレージシステムは、単一の地理的位置の場所に配置され、第１のコンピューティングシステムおよび第２のブロックデータストレージシステムは、１つまたは複数のネットワークによって隔てられており、第２のブロックデータストレージシステム上のブロックデータストレージボリュームに対するデータアクセス要求および他のデータアクセス要求の実行は、ブロックデータストレージサービスのシステムマネージャモジュールによって自動的に実行され、ブロックデータストレージボリュームへのアクセスを第１の実行プログラムに許可するステップは、第１のコンピューティングシステムに関連付けられ、１つまたは複数のネットワークへの第１の実行プログラムのアクセスを管理するブロックデータストレージサービスのノードマネージャモジュールによって実行され、データアクセス要求の受け取った指示に自動的に応答するステップは、１つまたは複数のネットワーク上で受け取ったデータアクセス要求を第２のブロックデータストレージシステムに送信するステップを開始することによって一部はノードマネージャモジュールの制御下で実行される条項５０のコンピュータ可読媒体。
【０１５３】
条項５２。ブロックデータストレージボリュームへのアクセスを第２の実行プログラムに許可するステップは、１つまたは複数のネットワークへの第２の実行プログラムのアクセスをさらに管理するノードマネージャモジュールによって実行され、第３のコンピューティングシステムおよび第１のコンピューティングシステムは、単一の物理的コンピューティングシステムの一部であり、他のデータアクセス要求の受け取った指示に自動的に応答するステップは、１つまたは複数のネットワーク上で受け取った他のデータアクセス要求を第２のブロックデータストレージシステムに送信するステップを開始することによって一部はノードマネージャモジュールの制御下で実行される条項５１のコンピュータ可読媒体。
【０１５４】
条項５３。コンピュータ可読媒体は、内容を格納するコンピューティングシステムのメモリおよびそれらの内容を含む生成された格納されているデータ信号を含むデータ伝送媒体のうちの少なくとも１つである条項４９のコンピュータ可読媒体。
【０１５５】
条項５４。内容は、実行されると１つまたは複数のコンピューティングシステムに方法を実行させる命令である条項４９のコンピュータ可読媒体。
【０１５６】
条項５５。実行プログラムによるブロックデータストレージ機能へのアクセスを管理するように構成されているシステムであって、
１つまたは複数のメモリと、
複数のブロックデータストレージシステムを使用して、ブロックデータストレージサービスのユーザによって作成され、それらのユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するように構成されているブロックデータストレージシステムマネージャモジュールであって、ブロックデータストレージサービスを提供するステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、ブロックデータストレージボリュームのそれぞれは複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納される、ステップと、
作成された複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームへのアクセスを１つまたは複数の実行プログラムのうちの第１の実行プログラムに許可した後に、第１の作成されたブロックデータストレージボリューム上で１つまたは複数のデータアクセス要求の実行を開始することによって第１の作成されたブロックデータストレージボリュームに対し第１のプログラムによって開始された１つまたは複数のデータアクセス要求に応答するステップと、
第１のプログラムが利用不可能になり、第１の作成されたブロックデータストレージボリュームへのアクセスを明確に区別される第２の実行プログラムに許可し、利用不可能になった第１のプログラムに許可されていたアクセスを置き換えた後に、第１の作成されたブロックデータストレージボリューム上で１つまたは複数の他のデータアクセス要求の実行を開始することによって第１の作成されたブロックデータストレージボリュームに対し第２のプログラムによって開始された１つまたは複数の他のデータアクセス要求に応答するステップとを含む、ブロックデータストレージシステムマネージャモジュールを備えるシステム。
【０１５７】
条項５６。第１のプログラムおよび第２のプログラムは、単一のプログラムの実行コピーであり、アクセスを第１のプログラムに許可するステップは、第１の実行プログラムが第１のブロックデータストレージボリュームを表す第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介して第１のブロックデータストレージボリュームに対するデータアクセス要求を開始するように第１のブロックデータストレージボリュームを第１のプログラムを実行している第１のコンピューティングシステムにアタッチするステップを含み、アクセスを第２のプログラムに許可するステップは、第２のプログラムが実行される第３のコンピューティングシステムを識別するステップと第２のプログラムが第１のブロックデータストレージボリュームを表す第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるように第１のブロックデータストレージボリュームを第３のコンピューティングシステムにアタッチするステップとを含み、第１のプログラムおよび第２のプログラムによる第１のブロックデータストレージボリュームに対するデータアクセス要求は、ブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求である条項５５のシステム。
【０１５８】
条項５７。第１のブロックデータストレージボリュームは、複数のブロックデータストレージシステムのうちの第１のブロックデータストレージシステム上に格納され、第１のコンピューティングシステム、第３のコンピューティングシステム、および第１のブロックデータストレージシステムは、単一の地理的位置の場所に配置され、１つまたは複数のネットワークによって隔てられており、システムは、１つまたは複数のネットワークへの第１のプログラムおよび第２のプログラムのアクセスを管理するために第１のプログラムおよび第２のプログラムに関連付けられているブロックデータストレージサービスの１つまたは複数のノードマネージャモジュールをさらに備え、これにより、データアクセス要求および他のデータアクセス要求への応答は、１つまたは複数のネットワーク上でデータアクセス要求および他のデータアクセス要求を第１のブロックデータストレージシステムに送信するステップを開始することによって一部は１つまたは複数のノードマネージャモジュールの制御下で実行される条項５６のシステム。
【０１５９】
条項５８。第１のブロックデータストレージボリュームの第１のコピーは、複数のブロックデータストレージシステムのうちの第１のブロックデータストレージシステム上に格納され、第１のプログラムによって開始されたデータアクセス要求の実行は、第１のブロックデータストレージボリュームの第１のコピー上で実行され、第１のプログラムは、第１の地理的位置の場所にある第１のブロックデータストレージシステムと同じ場所配置されている第１のコンピューティングシステム上で実行され、第２のプログラムは、明確に区別される第２の地理的位置の場所にある第２のコンピューティングシステム上で実行され、第１の作成されたブロックデータストレージボリュームへのアクセスを第２の実行プログラムに許可するステップは、第２のコンピューティングシステムを第１のブロックデータストレージボリュームの第２のコピーを格納する第２の地理的位置の場所にある第２のブロックデータストレージシステムにアタッチするステップを開始するステップを含む条項５５のシステム。
【０１６０】
条項５９。システムは、１つまたは複数のメモリのうちの少なくとも１つのメモリを備える第１のコンピューティングシステムを備え、ブロックデータストレージシステムマネージャモジュールは、少なくとも１つのメモリを使用して第１のコンピューティングシステムによって実行されるソフトウェア命令を備える条項５５のシステム。
【０１６１】
条項６０。ブロックデータストレージシステムマネージャモジュールは、複数のブロックデータストレージシステムを使用して、ブロックデータストレージサービスのユーザによって作成され、それらのユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するための１つまたは複数の手段からなり、ブロックデータストレージサービスを提供するステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、ブロックデータストレージボリュームのそれぞれは複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納される、ステップと、
作成された複数のブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームへのアクセスを１つまたは複数の実行プログラムのうちの第１の実行プログラムに許可した後に、第１の作成されたブロックデータストレージボリューム上で１つまたは複数のデータアクセス要求の実行を開始することによって第１の作成されたブロックデータストレージボリュームに対し第１のプログラムによって開始された１つまたは複数のデータアクセス要求に応答するステップと、
第１のプログラムが利用不可能になり、第１の作成されたブロックデータストレージボリュームへのアクセスを明確に区別される第２の実行プログラムに許可し、利用不可能になった第１のプログラムに許可されていたアクセスを置き換えた後に、第１の作成されたブロックデータストレージボリューム上で１つまたは複数の他のデータアクセス要求の実行を開始することによって第１の作成されたブロックデータストレージボリュームに対し第２のプログラムによって開始された１つまたは複数の他のデータアクセス要求に応答するステップとを含む条項５５のシステム。
【図１】
2011530748.tif 000003
【図２Ａ】
2011530748.tif 000004
【図２Ｂ】
2011530748.tif 000005
【図２Ｃ】
2011530748.tif 000006
【図２Ｄ】
2011530748.tif 000007
【図２Ｅ】
2011530748.tif 000008
【図２Ｆ】
2011530748.tif 000009
【図３】
2011530748.tif 000010
【図４】
2011530748.tif 000011
【図５】
2011530748.tif 000012
【図６】
2011530748.tif 000013
【図７Ａ】
2011530748.tif 000014
【図７Ｂ】
2011530748.tif 000015
【図８】
2011530748.tif 000016
【手続補正書】
【提出日】平成23年9月13日(2011.9.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ブロックデータストレージサービスがリモートの格納されているブロックデータへの実行プログラムのアクセスを管理するためのコンピュータによって実装される方法であって、
ブロックデータストレージサービスによって提供される非ローカルブロックデータストレージへの指示されたプログラムの第１のコピーのアクセスを開始する要求を受け取るステップであって、前記指示されたプログラムは前記ブロックデータストレージサービスの一部ではないアプリケーションプログラムであり、前記第１のプログラムのコピーは第１の地理的位置の同じ場所に配置される、１つまたは複数の内部ネットワークを共有する複数のコンピューティングシステムのうちの第１のコンピューティングシステム上で実行され、前記ブロックデータストレージサービスは前記複数のコンピューティングシステムのうちの複数の他のコンピューティングシステムの第１のグループを、前記指示されたプログラムを含む複数の実行プログラムに対してブロックデータストレージを提供するブロックデータストレージシステムとして使用し、前記第１のコンピューティングシステムは前記第１のグループの一部ではなく、前記要求を受け取る前記ステップは前記ブロックデータストレージサービスの実行システムマネージャモジュールによって実行される、ステップと、
前記受け取った要求に応答して、第１のブロックデータストレージボリュームを、前記実行する第１のプログラムのコピーで使用できるように前記第１のコンピューティングシステムにアタッチするステップであって、前記第１のブロックデータストレージボリュームは第２のコンピューティングシステム上に格納されているプライマリコピーを有し、および第３のコンピューティングシステム上に格納されているミラーコピーを有し、前記第２のコンピューティングシステムおよび前記第３のコンピューティングシステムはそれぞれブロックデータストレージシステムの前記第１のグループの一部であり、前記第１のブロックデータストレージボリュームをアタッチする前記ステップは前記第１のコンピューティングシステムの第１の論理ローカルブロックストレージデバイスを前記第１のブロックデータストレージボリュームに関連付けるステップを含む、ステップと、
前記ブロックデータストレージサービスのシステムマネージャモジュールの制御の下で、前記複数の実行プログラムへの前記ブロックデータストレージの前記提供を、
前記第１の論理ローカルブロックストレージデバイスに対して前記実行する第１のプログラムのコピーによって開始された１つまたは複数のデータアクセス要求の指示を受け取った後に、前記第１のブロックデータストレージボリュームの前記プライマリコピーおよび前記ミラーコピー上で前記データアクセス要求を実行するステップであって、前記データアクセス要求を実行することにより前記第１のブロックデータストレージボリュームの前記プライマリコピーおよび前記ミラーコピーのそれぞれに前記同じ格納済みブロックデータが保持されるような仕方で前記第１のブロックデータストレージボリューム上に格納されているブロックデータに対して１つまたは複数の修正が加えられる、ステップにより自動的に応答するステップと、
前記データアクセス要求を実行した後に、前記第１のプログラムのコピーの前記実行が終了したと自動的に判定し、前記判定に応答して、前記第１のブロックデータストレージボリュームへの前記指示されたプログラムのアクセスを自動的に保持し、前記アクセスを保持する前記ステップは明確に区別される第４のコンピューティングシステム上で前記指示されたプログラムの第２のコピーの実行を開始するステップと前記第１のブロックデータストレージボリュームを、前記実行する第２のプログラムのコピーで使用できるように前記第４のコンピューティングシステムにアタッチするステップとを含み、アタッチする前記ステップは前記第４のコンピューティングシステムの第２の論理ローカルブロックストレージデバイスを前記第１のブロックデータストレージボリュームに関連付けるステップを含む、ステップと、
前記第２の論理ローカルブロックストレージデバイスに対して前記実行する第２のプログラムのコピーによって開始された１つまたは複数の他のデータアクセス要求の指示を受け取った後に、前記第１のブロックデータストレージボリュームの前記プライマリコピーおよび前記ミラーコピー上で前記他のデータアクセス要求を実行するステップであって、前記データアクセス要求を実行することにより前記第１のブロックデータストレージボリュームの前記プライマリコピーおよび前記ミラーコピーがそれぞれ前記同じブロックデータを格納するような仕方で前記第１のブロックデータストレージボリューム上に格納されている前記ブロックデータに対して１つまたは複数のさらなる修正が加えられる、ステップにより自動的に応答するステップと
によって管理するステップとを含む方法。
【請求項２】
前記第１のブロックデータストレージボリュームを前記第１のコンピューティングシステムにアタッチする前記ステップは、前記内部ネットワークへの前記第１のコンピューティングシステムのアクセスを管理する前記ブロックデータストレージサービスのノードマネージャモジュールによって実行され、前記方法は、前記ノードマネージャモジュールの制御の下で、
前記第１論理ローカルブロックストレージデバイスに対して前記実行する第１のプログラムのコピーによって開始される前記データアクセス要求を受け取るステップと、
前記内部ネットワーク上で前記システムマネージャモジュールとやり取りして前記データアクセス要求の前記指示を送ることにより前記データアクセス要求の前記実行を円滑にするステップであって、前記内部ネットワーク上でやり取りする前記ステップは前記実行する第１のプログラムのコピーに対して透過的な方法で実行される、ステップと
をさらに含む請求項１に記載の方法。
【請求項３】
前記複数のプログラムが、前記複数のコンピューティングシステムのうちのいくつかのコンピューティングシステムの第２のグループ上のプログラム実行サービスによって実行され、前記第２のグループの前記コンピューティングシステムは、前記第１のグループの前記コンピューティングシステムから明確に区別され、前記第１のコンピューティングシステムは、少なくとも１つのプログラムをそれぞれ実行するように構成された複数の仮想マシンをホストし、前記指示されたプログラムは、前記複数のプログラムのうちの１つであり、および前記第１のコンピューティングシステムによってホストされる前記複数の仮想マシンのうちの少なくとも１つによって実行される仮想マシンのイメージであり、前記ノードマネージャモジュールは、前記第１のコンピューティングシステム用の仮想マシンモニターの一部として実行される請求項１に記載の方法。
【請求項４】
実行プログラムによるブロックデータストレージ機能へのアクセスを管理するためのコンピュータによって実装される方法であって、
非ローカルブロックデータストレージボリューム上に格納されているブロックデータにアクセスするために第１のコンピューティングシステム上で実行される第１のプログラムの第１のコピーによって開始された１つまたは複数のデータアクセス要求の第１のグループの１つまたは複数の指示を受け取るステップであって、前記ブロックデータストレージボリュームは１つまたは複数のネットワーク上でブロックデータストレージサービスの明確に区別される第２のデータストレージシステムによって提供され、前記第１の実行するプログラムのコピーが前記ブロックデータストレージボリュームを表す前記第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介して前記ブロックデータストレージボリュームに対する前記データアクセス要求を開始するように前記第１のコンピューティングシステムにアタッチされ、前記第１のプログラムは前記ブロックデータストレージサービスの一部ではないアプリケーションプログラムである、ステップと、
前記第１の実行プログラムのコピーに代わって前記第２のデータストレージシステムとやり取りすることによってデータアクセス要求の前記第１のグループの前記受け取った指示に自動的に応答し、前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリューム上の前記第１のグループの前記データアクセス要求の実行を開始するステップと、
前記第１のプログラムのコピーが利用不可能になったと判定した後に、前記第１のプログラムの第２のコピーが実行されている、前記第１のコンピューティングシステムおよび前記第２のデータストレージシステムから明確に区別される第３のコンピューティングシステムを識別し、前記第２のプログラムのコピーが前記ブロックデータストレージボリュームを表す前記第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるように前記ブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチするステップと、
前記第３のコンピューティングシステム上の前記第２の論理ローカルブロックストレージデバイスとのやり取りを介して前記ブロックデータストレージボリュームに対して前記第２の実行プログラムのコピーによって開始される１つまたは複数の他のデータアクセス要求の第２のグループの１つまたは複数の指示を受け取るステップと、
前記第２の実行プログラムのコピーに代わって前記第２のデータストレージシステムとやり取りすることによってデータアクセス要求の前記第２のグループの前記受け取った指示に自動的に応答し、前記第２のデータストレージシステム上の前記ブロックデータストレージボリューム上の前記第２のグループの前記データアクセス要求の実行を開始するステップと
を含むことを特徴とするコンピュータによって実装される方法。
【請求項５】
前記第１のプログラムのコピーが利用不可能になったと自動的に判定するステップをさらに含み、
前記第１のプログラムのコピーが前記利用不可能である状況は、前記第１のコンピューティングシステムの障害、前記第１のコンピューティングシステムの接続性の障害、および前記第１のコンピューティングシステムが前記第１のプログラムのコピーの実行を継続できない状況のうちの少なくとも１つの状況に基づくことを特徴とする請求項４に記載の方法。
【請求項６】
前記第１のプログラムの前記第２のコピーが実行されている前記第３のコンピューティングシステムを識別するステップおよび前記ブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチするステップは、前記ブロックデータストレージボリュームへの前記第１のプログラムのアクセスを保持するために自動的に実行され、前記アクセスを自動的に維持する前記ステップは前記第１のプログラムのコピーが利用不可能になったと前記自動的に判定したことに応答して実行されることを特徴とする請求項５に記載の方法。
【請求項７】
前記第１のプログラムのコピーが利用不可能になったと判定する前記ステップ、前記第１のプログラムの前記第２のコピーが実行されている前記第３のコンピューティングシステムを識別する前記ステップ、および前記ブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチする前記ステップのうちの少なくとも１つのステップは、前記第１のプログラムおよび前記ブロックデータストレージボリュームに関連付けられているユーザから受け取った１つまたは複数の指示に応答して実行されることを特徴とする請求項４に記載の方法。
【請求項８】
前記第１のプログラムの前記第２のコピーが実行されている前記第３のコンピューティングシステムを識別する前記ステップは、前記第１のプログラムのコピーが利用不可能になったと判定した後に、前記第３のコンピューティングシステム上で前記第２のプログラムのコピーの実行を開始するステップを含むことを特徴とする請求項４に記載の方法。
【請求項９】
前記第１のプログラムの前記第１のコピーは、複数の明確に区別されるコンピューティングシステム上で実行される前記第１のプログラムの複数のコピーのうちの１つのコピーであり、前記複数のコピーのうちの少なくとも１つのコピーは、前記複数のコピーのうちの１つまたは複数の他のコピーに対する代替的コピーであり、前記第１のプログラムの前記第２のコピーが実行されている前記第３のコンピューティングシステムを識別する前記ステップは、前記少なくとも１つの代替的コピーのうちの１つのコピーである前記第２のコピーに基づいて前記第１のプログラムの前記第２のコピーを選択するステップを含むことを特徴とする請求項４に記載の方法。
【請求項１０】
前記第１のコンピューティングシステムに前記ブロックデータストレージボリュームをアタッチする前に、前記第２のデータストレージシステム上に前記ブロックデータストレージボリュームを作成し、明確に区別される第４のブロックデータストレージシステム上に前記ブロックデータストレージボリュームのミラーコピーを作成するステップをさらに含み、
前記第１のグループおよび前記第２のグループの前記データアクセス要求に応答する前記ステップは、前記第１のグループおよび前記第２のグループの前記データアクセス要求の、前記作成されたミラーコピー上での実行を開始するステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項１１】
前記１つまたは複数のデータアクセス要求の前記指示を受け取る前に、前記第１の実行プログラムのコピーで使用できるように前記ブロックデータストレージボリュームを前記第１のコンピューティングシステムにアタッチするステップをさらに含み、
前記ブロックデータストレージボリュームをアタッチする前記ステップは、前記第１の論理ブロックストレージデバイスを前記第２のデータストレージシステムによって提供される前記ブロックデータストレージボリュームに関連付けるステップを含み、前記１つまたは複数のネットワークへの前記第１のコンピューティングシステムのアクセスを管理するノードマネージャモジュールによって実行され、
前記ノードマネージャモジュールは、前記第１の実行プログラムに関連付けられているユーザからの要求に応答して前記ブロックデータストレージボリュームをすでに作成しているブロックデータストレージサービスの一部であることを特徴とする請求項４に記載の方法。
【請求項１２】
前記第１のコンピューティングシステム、前記第３のコンピューティングシステム、および前記第２のデータストレージシステムは、第１の地理的位置の同じ場所に配置されている複数のコンピューティングシステムの部分集合であり、前記複数のコンピューティングシステムは、前記ブロックデータストレージサービスによって提供される複数のブロックデータストレージシステムを含み、前記第２のデータストレージシステムは、前記複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステムであることを特徴とする請求項４に記載の方法。
【請求項１３】
前記第１の地理的位置の場所は、データセンターであり、前記第１のプログラムが、前記データセンターにある前記複数のコンピューティングシステムのうちのいくつかのコンピューティングシステム上の複数のユーザに対し複数のプログラムを実行するプログラム実行サービスによって実行され、前記第１のコンピューティングシステムは、少なくとも１つのプログラムを実行するようにそれぞれ構成された複数の仮想マシンをホストし、前記第１の実行プログラムは、前記複数のプログラムのうちの１つであり、さらに前記第１のコンピューティングシステムによってホストされる前記複数の仮想マシンのうちの少なくとも１つによって実行される仮想マシンのイメージであり、前記データアクセス要求の前記第１のグループの前記指示を受け取る前記ステップと前記他のデータアクセス要求の前記第２のグループの前記指示を受け取る前記ステップとデータアクセス要求の前記第１のグループおよび前記第２のグループの前記受け取った指示に対して自動的に応答する前記ステップは、前記第１のコンピューティングシステム用の仮想マシンモニターの実行の一部として実行され、前記第１のコンピューティングシステムは、前記第１の実行プログラムによる使用のために利用可能である１つまたは複数の他の実際のローカルのストレージデバイスを備えることを特徴とする請求項１２に記載の方法。
【請求項１４】
コンピュータ可読媒体であって、このコンピュータ可読媒体の内容により１つまたは複数のコンピューティングは実行プログラムによるブロックデータストレージ機能へのアクセスを管理することができ、そのために実行する方法は、
第１のコンピューティングシステム上で実行される第１のアプリケーションプログラムによる非ローカルブロックデータストレージボリュームへのアクセスを可能にするステップであって、前記アクセスによって前記第１のアプリケーションプログラムは前記ブロックデータストレージボリュームに対するデータアクセス要求を開始することができ、前記ブロックデータストレージボリュームは１つまたは複数のネットワークにより前記第１のコンピューティングシステムから隔てられている第２のブロックデータストレージシステムによって提供され、前記アクセスを前記第１のアプリケーションプログラムに許可する前記ステップは、前記第１の実行アプリケーションプログラムが前記ブロックデータストレージボリュームを表す前記第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介して前記ブロックデータストレージボリュームに対する前記データアクセス要求を開始するように前記ブロックデータストレージボリュームを前記第１のコンピューティングシステムにアタッチするステップを含む、ステップと、
前記ブロックデータストレージボリュームに対する前記第１のアプリケーションプログラムによって開始された１つまたは複数のデータアクセス要求の１つまたは複数の受け取った指示に自動的に応答するステップであって、前記第１のアプリケーションプログラムによって開始された前記ブロックデータストレージボリュームに対する前記データアクセス要求は、前記ブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求であり、応答する前記ステップは前記第２のブロックデータストレージシステム上の前記ブロックデータストレージボリュームに対する前記データアクセス要求の実行を開始するステップを含む、ステップと、
前記第１のコンピューティングシステム上で実行されている前記第１のアプリケーションプログラムが利用不可能になった後に、前記第１のアプリケーションプログラムに許可していた前記アクセスに代えて、第３のコンピューティングシステム上で実行されている第２のアプリケーションプログラムに前記ブロックデータストレージボリュームへのアクセスを許可し、前記第１のアプリケーションプログラムおよび前記第２のアプリケーションプログラムは、単一のアプリケーションプログラムの実行コピーであり、前記アクセスを前記第２のアプリケーションプログラムに許可する前記ステップは、前記第２のアプリケーションプログラムが実行される前記第３のコンピューティングシステムを識別するステップと前記第２のアプリケーションプログラムが前記ブロックデータストレージボリュームを表す前記第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるように前記ブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチするステップとを含む、ステップと、
前記ブロックデータストレージボリュームに対する前記第２のアプリケーションプログラムによって開始された１つまたは複数の他のデータアクセス要求の１つまたは複数の受け取った指示に自動的に応答するステップであって、前記第２のアプリケーションプログラムによって開始された前記ブロックデータストレージボリュームに対する前記他のデータアクセス要求は、前記ブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求であり、応答する前記ステップは前記第２のブロックデータストレージシステム上の前記ブロックデータストレージボリュームに対する前記他のデータアクセス要求の実行を開始するステップを含む、ステップと
を含むコンピュータ可読媒体。
【請求項１５】
前記第１のコンピューティングシステム、前記第３のコンピューティングシステム、および前記第２のブロックデータストレージシステムは、単一の地理的位置の場所に配置され、前記第１のコンピューティングシステムおよび前記第２のブロックデータストレージシステムは、１つまたは複数のネットワークによって隔てられており、前記第２のブロックデータストレージシステム上の前記ブロックデータストレージボリュームに対する前記データアクセス要求および前記他のデータアクセス要求の前記実行は、ブロックデータストレージサービスのシステムマネージャモジュールによって自動的に実行され、前記ブロックデータストレージボリュームへの前記アクセスを前記第１の実行アプリケーションプログラムに許可する前記ステップは、前記第１のコンピューティングシステムに関連付けられ、前記１つまたは複数のネットワークへの前記第１の実行アプリケーションプログラムのアクセスを管理する前記ブロックデータストレージサービスのノードマネージャモジュールによって実行され、前記データアクセス要求の前記受け取った指示に自動的に応答する前記ステップは、前記１つまたは複数のネットワーク上で前記受け取ったデータアクセス要求を前記第２のブロックデータストレージシステムに送信するステップを開始することによって一部は前記ノードマネージャモジュールの制御の下で実行されることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
前記ブロックデータストレージボリュームへの前記アクセスを前記第２の実行アプリケーションプログラムに許可する前記ステップは、前記１つまたは複数のネットワークへの前記第２の実行アプリケーションプログラムのアクセスをさらに管理する前記ノードマネージャモジュールによって実行され、前記第３のコンピューティングシステムおよび前記第１のコンピューティングシステムは、単一の物理的コンピューティングシステムの一部であり、前記他のデータアクセス要求の前記受け取った指示に自動的に応答する前記ステップは、前記１つまたは複数のネットワーク上で前記受け取った他のデータアクセス要求を前記第２のブロックデータストレージシステムに送信するステップを開始することによって一部は前記ノードマネージャモジュールの制御の下で実行されることを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記コンピュータ可読媒体は、前記内容を格納する前記構成された１つまたは複数のコンピューティングシステムのうちの１つのメモリであることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１８】
前記内容は、実行されると前記１つまたは複数のコンピューティングシステムに前記方法を実行させる命令であることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１９】
実行プログラムによるブロックデータストレージ機能へのアクセスを管理するように構成されているシステムであって、
１つまたは複数のメモリと、
複数のブロックデータストレージシステムを使用して、前記ブロックデータストレージサービスのユーザによって作成され、前記ユーザに関連付けられている１つまたは複数の実行プログラムに代わって１つまたは複数のネットワーク上でアクセスされるブロックデータストレージボリュームを格納するブロックデータストレージサービスを提供するように構成されているブロックデータストレージシステムマネージャモジュールと
を備え、前記ブロックデータストレージサービスを提供する前記ステップは、
１つまたは複数の実行プログラムで使用するための１つまたは複数のブロックデータストレージボリュームを作成するステップであって、前記ブロックデータストレージボリュームのそれぞれは前記複数のブロックデータストレージシステムのうちの１つのブロックデータストレージシステム上に格納される、ステップと、
前記作成されたブロックデータストレージボリュームのうちの第１のブロックデータストレージボリュームへのアクセスを前記１つまたは複数の実行プログラムのうちの第１の実行プログラムに許可した後に、前記第１の作成されたブロックデータストレージボリューム上で前記１つまたは複数のデータアクセス要求の実行を開始することによって前記第１の作成されたブロックデータストレージボリュームに対し前記第１のプログラムによって開始された１つまたは複数のデータアクセス要求に応答するステップであって、前記第１のプログラムによって開始された前記第１のブロックデータストレージボリュームに対する前記１つまたは複数のデータアクセス要求は、前記第１のブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求であり、前記アクセスを前記第１の実行プログラムに許可する前記ステップは、前記第１の実行プログラムが前記第１のブロックデータストレージボリュームを表す前記第１のコンピューティングシステムのローカルにある第１の論理ブロックストレージデバイスとのやり取りを介して前記第１のブロックデータストレージボリュームに対する前記データアクセス要求を開始するように前記第１のブロックデータストレージボリュームを前記第１のプログラムを実行している第１のコンピューティングシステムにアタッチするステップを含む、ステップと、
前記第１のプログラムが利用不可能になり、前記第１の作成されたブロックデータストレージボリュームへのアクセスを明確に区別される第２の実行プログラムに許可し、前記利用不可能になった前記第１のプログラムに許可されていた前記アクセスを置き換えた後に、前記第１の作成されたブロックデータストレージボリューム上で前記１つまたは複数の他のデータアクセス要求の実行を開始することによって前記第１の作成されたブロックデータストレージボリュームに対し前記第２のプログラムによって開始された１つまたは複数の他のデータアクセス要求に応答するステップであって、前記第１のプログラムおよび前記第２のプログラムは、単一のプログラムの実行コピーであり、前記第２のプログラムによって開始された前記第１のブロックデータストレージボリュームに対する前記１つまたは複数の他のデータアクセス要求は、前記第１のブロックデータストレージボリューム上に格納されているブロックデータにアクセスする要求であり、前記アクセスを前記第２のプログラムに許可する前記ステップは、前記第２のプログラムが実行される第３のコンピューティングシステムを識別するステップと前記第２のプログラムが前記第１のブロックデータストレージボリュームを表す前記第３のコンピューティングシステムのローカルにある第２の論理ブロックストレージデバイスにアクセスできるように前記第１のブロックデータストレージボリュームを前記第３のコンピューティングシステムにアタッチするステップとを含む、ステップと
を含むことを特徴とするシステム。
【請求項２０】
前記第１のブロックデータストレージボリュームは、前記ブロックデータストレージシステムのうちの第１のブロックデータストレージシステム上に格納され、前記第１のコンピューティングシステム、前記第３のコンピューティングシステム、および前記第１のブロックデータストレージシステムは、単一の地理的位置の場所に配置され、１つまたは複数のネットワークによって隔てられており、前記システムは、前記１つまたは複数のネットワークへの前記第１のプログラムおよび前記第２のプログラムのアクセスを管理するために前記第１のプログラムおよび前記第２のプログラムに関連付けられている前記ブロックデータストレージサービスの１つまたは複数のノードマネージャモジュールをさらに備え、これにより、前記データアクセス要求および前記他のデータアクセス要求への前記応答は、前記１つまたは複数のネットワーク上で前記データアクセス要求および前記他のデータアクセス要求を前記第１のブロックデータストレージシステムに送信するステップを開始することによって一部は前記１つまたは複数のノードマネージャモジュールの制御の下で実行されることを特徴とする請求項１９に記載のシステム。
【請求項２１】
前記第１のブロックデータストレージボリュームの第１のコピーは、前記ブロックデータストレージシステムのうちの第１のブロックデータストレージシステム上に格納され、前記第１のプログラムによって開始された前記データアクセス要求の前記実行は、前記第１のブロックデータストレージボリュームの前記第１のコピー上で実行され、前記第１のプログラムは、第１の地理的位置の場所にある前記第１のブロックデータストレージシステムと同じ場所に配置されている第１のコンピューティングシステム上で実行され、前記第２のプログラムは、明確に区別される第２の地理的位置の場所にある第２のコンピューティングシステム上で実行され、前記第１の作成されたブロックデータストレージボリュームへの前記アクセスを前記第２の実行プログラムに許可する前記ステップは、前記第２のコンピューティングシステムを前記第１のブロックデータストレージボリュームの第２のコピーを格納する前記第２の地理的位置の場所にある第２のブロックデータストレージシステムにアタッチするステップを開始するステップを含むことを特徴とする請求項１９に記載のシステム。
【請求項２２】
前記システムは、前記１つまたは複数のメモリのうちの少なくとも１つのメモリを備える第１のコンピューティングシステムを備え、前記ブロックデータストレージシステムマネージャモジュールは、前記少なくとも１つのメモリを使用して前記第１のコンピューティングシステムによって実行されるソフトウェア命令を備えることを特徴とする請求項１９に記載のシステム。
【国際調査報告】
2011530748.tif 000017