(57)【要約】  一般的に説明すると、本出願の１つまたは複数の態様は、ネットワーク化されたコンピューティング環境に記憶されたボリュームの高度に分散されたレプリカに対応する。ボリュームの第１および第２のレプリカは同期的に複製することができ、三次レプリカの一部の実施態様は非同期的に複製することができる。三次レプリカの高度に分散された性質により、ボリュームのデータの並列データ転送がサポートされ、ボリュームのバックアップおよび新しいコピーの作成が高速化される。
2021521551.tif 000002
【特許請求の範囲】
【請求項１】
第１のサーバのセットと、
前記第１のサーバとデータ通信する第２のサーバのセットと、
前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方とデータ通信する複数の追加のサーバと、
を含むコンピューティングシステムであって、
前記第１のサーバのセットは、ボリュームの一次レプリカの第１の数のパーティションが記憶され、
前記第２のサーバのセットは、前記一次レプリカと同期的に更新を受信する前記ボリュームの二次レプリカが記憶され、前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方は、前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成され、
前記複数の追加のサーバは、前記一次レプリカとは非同期的に前記更新を受信する前記ボリュームの三次レプリカが集合的に記憶され、前記三次レプリカは、前記複数の追加のサーバに分散された第２の数のパーティションとして記憶され、前記複数の追加のサーバは、前記三次レプリカを使用して前記ボリュームの複製を処理するためのコンピュータ実行可能命令によって構成され、前記第２の数のパーティションは、前記第１の数のパーティションよりも多い、
コンピューティングシステム。
【請求項２】
前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方は、
前記一次レプリカおよび前記二次レプリカの変更を介して前記ボリュームへのユーザ開始の書き込みを処理し、
前記ボリュームへの前記ユーザ開始の書き込みによって前記三次レプリカを更新させる、
コンピュータ実行可能命令によって構成される、
請求項１に記載のコンピューティングシステム。
【請求項３】
前記ボリュームのバックアップを作成する要求を受信したことに応答して、前記複数の追加のサーバは、前記三次レプリカを使用して前記コンピューティングシステム内で前記ボリュームの前記バックアップを作成するためのコンピュータ実行可能命令によって構成される、
請求項２に記載のコンピューティングシステム。
【請求項４】
前記バックアップを作成するために、前記複数の追加のサーバは、前記第２の数のパーティションのうちの指定されたパーティションを、オブジェクトストレージを使用して前記指定されたパーティションを記憶するように構成される１つまたは複数のオブジェクトストレージサーバに送信するための前記コンピュータ実行可能命令によって構成される、
請求項３に記載のコンピューティングシステム。
【請求項５】
前記第１のサーバのセット、前記第２のサーバのセットおよび前記複数の追加のサーバは、ブロックストレージを使用して前記ボリュームを記憶するように構成され、
前記三次レプリカの前記第２の数のパーティションのそれぞれは、前記ボリュームの少なくとも１つのブロックを表す、
請求項１に記載のコンピューティングシステム。
【請求項６】
前記複数の追加のサーバは、前記第２の数のパーティションの少なくとも一部のデータを並列に送信することによって前記ボリュームの前記複製を処理するための前記コンピュータ実行可能命令によって構成される、
請求項１から５のいずれか一項に記載のコンピューティングシステム。
【請求項７】
前記第２の数のパーティションは、前記複数の追加のサーバにストライピングされて、前記ボリュームの第１の部分を表す第１のパーティションと、前記第１の部分と連続した前記ボリュームの第２の部分を表す第２のパーティションと、は、前記複数の追加のサーバのうちの異なるサーバに記憶される、
請求項１に記載のコンピューティングシステム。
【請求項８】
前記コンピューティングシステムは、ロガーフリートをさらに含み、
前記ロガーフリートは、
前記一次レプリカおよび前記二次レプリカの一方または両方から前記更新を受信し、
前記更新を前記三次レプリカに非同期的に伝播させる、
コンピュータ実行可能命令によって構成される、
請求項１から７のいずれか一項に記載のコンピューティングシステム。
【請求項９】
前記コンピューティングシステムは、
前記コンピューティングシステムの制御プレーンを実装するコンピューティングデバイスと、
前記第１の数のパーティションを使用して前記ボリュームの新しいコピーを記憶するために前記制御プレーンによってセットアップされる第３のサーバのセットと、
をさらに含み、
前記第３のサーバのセットの前記第１の数のパーティションのそれぞれは、前記複数の追加のサーバから前記第２の数のパーティションのうちの特定のパーティションのデータを取り出して、前記三次レプリカを使用して前記ボリュームの前記新しいコピーを生成する、
請求項１から８のいずれか一項に記載のコンピューティングシステム。
【請求項１０】
データボリュームの分散されたレプリカを実装するステップであって、前記分散されたレプリカは、サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定される追加のレプリカとは異なるステップと、
前記パーティションのセットのうちのパーティション内の情報がネットワークデバイスのセットにコピーされるという指示を受信するステップと、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成するステップと、
前記中間複写パーティションから前記ネットワークデバイスのセットに前記情報をコピーするコピー操作のセットを並列に開始するステップと、
を含むコンピュータ実装方法。
【請求項１１】
前記指示は、前記パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第１のサーバコンピューティングデバイスにおいて受信され、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写することは、前記中間複写パーティションのうちの第１の中間複写パーティションを生成する前記サーバコンピューティングデバイスのセットのうちの第２のサーバコンピューティングデバイスを、前記第１のサーバコンピューティングデバイスにおいて選択することを含む、
請求項１０に記載のコンピュータ実装方法。
【請求項１２】
前記第１のサーバコンピューティングデバイスによって、前記第２のサーバコンピューティングデバイスに、前記コピー操作のセットの少なくとも一部を開始するように指示するステップをさらに含む、
請求項１１に記載のコンピュータ実装方法。
【請求項１３】
前記第２のサーバコンピューティングデバイスにおいて、
前記中間複写パーティションのうちの第２の中間複写パーティションを生成する前記サーバコンピューティングデバイスのセットのうちの第３のサーバコンピューティングデバイスを選択するステップと、
前記第３のサーバコンピューティングデバイスに、前記コピー操作のセットの少なくとも一部を開始するように指示するステップと、
をさらに含む、
請求項１２に記載のコンピュータ実装方法。
【請求項１４】
前記指示はコントローラコンピューティングデバイスにおいて受信され、
前記パーティションは、前記サーバコンピューティングデバイスのセットのうちの第１のサーバコンピューティングデバイスにおいてホストされ、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写することは、前記コントローラコンピューティングデバイスにおいて、
前記中間複写パーティションのうちの第１の中間複写パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第２のサーバコンピューティングデバイスを選択することと、
前記第１のサーバコンピューティングデバイスに命令を送信して、前記第２のサーバコンピューティングデバイスに前記パーティションを少なくとも部分的に複写する前記第１の中間複写パーティションを作成することと、
を含む、
請求項１０に記載のコンピュータ実装方法。
【請求項１５】
前記コントローラコンピューティングデバイスにおいて、
前記第１の中間複写パーティションが作成されたという指示を受信するステップと、
前記中間複写パーティションのうちの第２の中間複写パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第３のサーバコンピューティングデバイスを選択するステップと、
前記第２のサーバコンピューティングデバイスに命令を送信して、前記第３のサーバコンピューティングデバイスに前記第１の中間複写パーティションを少なくとも部分的に複写する前記第２の中間複写パーティションを作成するステップと、
をさらに含む、
請求項１４に記載のコンピュータ実装方法。
【発明の詳細な説明】
【背景技術】
【０００１】
クラウドコンピューティングは、一般に、Ｗｅｂサービスなどのサービスを通じて情報技術リソースへのアクセスを提供するための手法であり、それらのサービスをサポートするために使用されるハードウェアおよび／またはソフトウェアは、いつでもサービスのニーズを満たすように動的にスケーリングが可能である。クラウドコンピューティングでは、弾性（ｅｌａｓｔｉｃｉｔｙ）とは、ユーザの変化する要求に適応するためにクラウドサービスプロバイダによってスケールアップおよびスケールダウンできるネットワーク配信されるコンピューティングリソースを指す。これらのリソースの弾性は、処理能力、ストレージ、帯域幅などの観点のものとすることができる。弾性コンピューティングリソースは、所与のユーザのシステム上またはそのシステム内のリソース要求の変化に動的に適応して、自動的およびオンデマンドで配信され得る。たとえば、ユーザはクラウドサービスを使用して、大規模なオンラインストリーミングサービスをホストし、ユーザにコンテンツをストリーミングするＷｅｂサーバの数が、ピーク視聴時間中に帯域幅要求を満たすようにスケールアップし、システム使用量が軽くなったときにスケールダウンし戻すように、弾性リソースをセットアップすることができる。
【０００２】
ユーザは典型的には、クラウドを介してリソースをレンタル、リースするか、または別の方法でリソースへのアクセスの代金を支払うので、これらのリソースへのアクセスを提供するハードウェアおよび／またはソフトウェアを購入して保守する必要はない。これによりいくつかの利点が提供され、たとえば、ユーザは自身の企業の変化する需要に応じて自身の利用可能なコンピューティングリソースを迅速に再構成できるようになり、クラウドサービスプロバイダは、使用量、トラフィック、またはその他の運用上のニーズに基づいて、提供するコンピューティングサービスリソースを自動的にスケーリングできるようになる。ネットワークベースのコンピューティングサービスのこの動的な性質は、オンプレミスのコンピューティング環境の比較的（ｒｅｌａｔｉｖｅｌｙ）なインフラストラクチャとは異なり、ユーザ基盤の変化するニーズに応じてハードウェアを確実に再割り当てすることができるシステムアーキテクチャを必要とする。
【図面の簡単な説明】
【０００３】
【図１Ａ】本開示による様々な実施形態を実装できる弾性コンピューティングシステムの概略図である。
【図１Ｂ】図１Ａの弾性コンピューティングシステムにおける本開示による複製されたデータインスタンスの概略図である。
【図２Ａ】図１Ａの弾性コンピューティングシステムにおいて分散された三次レプリカを作成する概略図である。
【図２Ｂ】図２Ａの分散された三次レプリカを作成するための例示的な処理のフローチャートである。
【図３Ａ】図１Ａの弾性コンピューティングシステムにおいて一次レプリカと分散された三次レプリカとの間でデータ更新を複製する概略図である。
【図３Ｂ】図３Ａの分散された三次レプリカを更新するための例示的な処理のフローチャートである。
【図４Ａ】図１Ａの弾性コンピューティングシステムにおいて分散された三次レプリカからボリュームのクローンを生成する概略図である。
【図４Ｂ】図４Ａに応じた分散された三次レプリカからのクローン生成のための例示的な処理のフローチャートである。
【図５Ａ】図１Ａの弾性コンピューティングシステムにおいて分散された三次レプリカからボリュームのスナップショットバックアップを生成する概略図である。
【図５Ｂ】図５Ａに応じた分散された三次レプリカからのスナップショット生成のための例示的な処理のフローチャートである。
【図５Ｃ】図５Ａに応じた分散された三次レプリカからのスナップショット生成のための他の例示的な処理のフローチャートである。
【図６】図１Ａの弾性コンピューティングシステムの分散ストレージボリュームへの書き込み操作からメッセージのストリームを生成するための例示的なインタラクションを示す図である。
【図７】分散ストレージボリュームへの書き込み操作を反映するメッセージのストリームを利用して、図１Ａの弾性コンピューティングシステムの分散された三次レプリカを非同期的に更新するための例示的なインタラクションを示す図である。
【図８】図１Ａの弾性コンピューティングシステムの分散された三次レプリカを非同期的に更新するために、分散ストレージボリュームへの書き込み操作を反映するメッセージのバンドルを生成し、そのようなバンドルをオブジェクトストレージシステムに記憶するための例示的なインタラクションを示す図である。
【図９Ａ】ボリュームへの書き込みを反映するメッセージのストリームに基づいて、特定の時点での図１Ａの弾性コンピューティングシステムのボリュームの状態を複製する概略図である。
【図９Ｂ】図９Ａに従ってボリュームの状態を複製するための例示的な処理のフローチャートである。
【図１０Ａ】集中管理機関を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【図１０Ｂ】集中管理機関を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【図１０Ｃ】集中管理機関を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【図１１Ａ】ピアツーピア通信を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【図１１Ｂ】ピアツーピア通信を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【図１１Ｃ】ピアツーピア通信を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【図１２】ボリュームの中間複写パーティションを使用してボリュームまたはボリュームの一部の大量複写を容易にするための例示的なルーチンを示す図である。
【発明を実施するための形態】
【０００４】
大まかに説明すると、本開示の態様は、ネットワーク化された弾性コンピューティングシステムにおいてブロックストレージを使用して記憶されたデータのボリュームなどの、高度に分散されたデータレプリカインスタンスの作成および管理に関する。一般に、ボリュームは、ユーザに代わって管理されるデータのセットなどの、論理的なデータの集合体に対応することができる。ボリュームの複数の複製されたインスタンスを提供するために、ボリュームはコンピューティングシステム内で複数回複製され得る（それらの複製されたインスタンスは、コンピューティングシステム上のボリュームを集合的に表し得る）。ネットワーク化された弾性コンピューティングシステムにおけるボリュームの複製されたインスタンスは、有益なことに、たとえば、ユーザがボリュームの一次レプリカ、またはブロックレベルで一次レプリカと同期されたボリュームの二次レプリカのいずれかにアクセスできるようにして、一次または二次レプリカのいずれかの障害によって、ボリュームの情報へのアクセスが妨げられないようにすることで、自動的なフェイルオーバーおよびリカバリを提供することができる。しかしながら、ボリュームの頻繁なバックアップまたは多数のコピーの作成などの特定のアクションは、ボリューム（たとえば、ボリュームのレプリカ）が記憶されたハードウェアの利用可能なデータ通信帯域幅に負担をかける可能性がある。これにより、ボリュームのユーザが長い待ち時間を経験することになる。
【０００５】
前述の問題は、とりわけ、ボリュームの高度に分散された三次レプリカを作成および使用するための開示した技法により、一部の実施形態において対処する。一例では、ボリュームの一次レプリカは、典型的には、単一のパーティションまたは最大１６個の異なるパーティションに記憶され、ボリュームの二次レプリカは、対応する数の異なるパーティションに記憶される。各パーティションは異なるコンピューティングデバイスに、たとえば、分散コンピューティング環境のサーバなどに記憶され得、または複数のパーティションは、単一のコンピューティングデバイスに記憶され得る。ボリュームの高度に分散された三次レプリカを作成するために、ボリュームのデータは多数のパーティション（１００、１，０００、１００万など）に分割され、それらはいくつかの異なるコンピューティングデバイスにわたって分散して記憶される。これは、典型的には一次レプリカまたは二次レプリカが記憶される少数のデバイスではなく、多数のデバイスの接続帯域幅を利用してボリュームのデータを転送することにより、待ち時間の問題を処理する。
【０００６】
一次および二次レプリカは、（たとえば、ユーザが自身のボリュームに対して読み出しまたは書き込みを要求しているときに）たとえば、ユーザ読み出しおよび書き込みにリアルタイムで対処する必要があるために、合理的に、三次レプリカほど大規模に分散されない場合があることは理解されよう。たとえば、様々なサーバ（または他のコンピュータストレージデバイス）の応答時間は異なる可能性があり、ボリューム全体の応答時間は、最も遅いサーバの応答性によって制限される可能性がある。したがって、一次および二次レプリカの最大の分散は、実際には制限され、ユーザ読み出しまたは書き込みに、閾値時間（たとえば、サービスレベルアグリーメント、すなわち、「ＳＬＡ」によって確立されたもの）より長くかかる可能性が低下し得る。むしろ、ハードウェアデバイスのより小さいセットで一次および二次レプリカを保持することにより、システムは、ボリュームへの読み出しおよび書き込み中に待ち時間の短いユーザエクスペリエンスを維持することが可能であり得る。
【０００７】
一次および二次レプリカとは異なり、三次レプリカは大規模に分散され得、その理由は、そのようなレプリカは、ボリュームへのユーザ読み出しまたは書き込みに直接サービスすることが想定外であり得るためである。したがって、三次レプリカ上のボリュームへの読み出しまたは書き込みを実行する際の遅延は、許容され得る。一実施形態では、三次レプリカ上のボリュームへのそのような読み出しまたは書き込みの実行は、一次または二次レプリカに含まれる情報に基づいて、三次レプリカを非同期的に更新することを伴い得る。非同期更新はいくつかの利点を提供し、たとえば、一次および二次レプリカへの書き込みによって、三次レプリカが最新の状態に保たれる。もう１つの利点は、数百万のノードの更新が、一次および二次レプリカのより少ないノードの更新よりも低速であり得るという事実に関するものであり、そのため、非同期更新により、一次レプリカでの書き込みを遅くせずに、三次レプリカからの高速読み出しの利点が得られる。
【０００８】
一実施形態では、三次レプリカは、一次および二次レプリカと補完的に機能して、様々な方法でボリュームとインタラクションを行う場合に、短いユーザ待ち時間を提供する。たとえば、一次レプリカは、ボリュームに対する読み出しおよび書き込み（「入出力操作」、または単に「Ｉ／Ｏ操作」と呼ばれることがある）を容易にして、ボリュームに関するユーザエクスペリエンスを維持するように構成することができる。二次レプリカを一次レプリカと同期的に更新し、たとえば、一次レプリカをホストするコンピューティングハードウェアに障害が発生した場合などに、フェイルオーバー動作中のシームレスな移行を提供することができる。有益なことに、三次レプリカのストレージアーキテクチャは、一次および二次レプリカに比べて多数のコンピューティングデバイスにわたってボリュームを複製するように構成することができるので、数千のクローン（たとえば、元のボリュームから直接コピーされた新しいボリューム）を同時に作成することが可能になり、バックアップコピーを高速に作成することが可能になり、高度にスケールアウトされた三次レプリカによって、一次および二次レプリカのみを使用して可能になるよりも、ボリュームの新しいコピーを迅速に作成できるようになるので、リカバリを高速化することが可能になる。一実施形態では、三次レプリカは、一次および二次レプリカと同期的に更新されず、したがって、ボリュームへの標準的なユーザＩ／Ｏ操作には利用されない。例示的には、三次レプリカが、いくつかのパーティションにわたるボリュームのデータの分散ストレージである場合であって、データが三次レプリカに対して要求されたか、または三次レプリカに書き込まれる場合、応答が最も遅いパーティションが操作全体の遅延を引き起こす可能性があり、これは「テールレイテンシ（ｔａｉｌ  ｌａｔｅｎｃｙ）」と呼ばれる。三次レプリカが数千または数百万のパーティションに記憶されている場合、いずれか１つのパーティションが利用不可能になったり、所与の時間に遅延が発生したりする可能性が高くなって、Ｉ／Ｏ操作の待ち時間が長くなり得る。そのため、三次レプリカは、同期的なユーザＩ／Ｏ操作を処理するにはあまり適していない場合があるが、それでもなお、ボリュームからデータを迅速に転送するための利点を提供し得る。
【０００９】
説明のために、１デバイスあたり、８テラバイト（「ＴＢ」）のボリューム、および１ギガバイト（「ＧＢ」）／秒のデータ転送制限の例を考える。単一のデバイスからボリュームのデータを転送するには、（例のため、転送容量を最大限に使用すると仮定すると）少なくとも２時間１３分２０秒かかる。一次および二次レプリカは最大１６個のパーティションに分割でき、データ転送制限はパーティションごとに適用される（たとえば、デバイスごとに１つのパーティション）。１６個のパーティションの場合、ボリュームからデータを転送するのに、まだ少なくとも８分２０秒かかる。したがって、ボリュームからのデータの転送は、基本的に、ボリュームが散在するデバイスの数によって制約される。しかしながら、ボリュームが１，０００台のデバイスに分割される場合、各デバイスはボリュームのデータの１／１，０００をプッシュするだけでよく、現在の例では、（一次または二次レプリカではなく、三次レプリカから）ボリュームの完全なデータを転送するのに必要な時間は８秒に短縮される。
【００１０】
本開示の態様はさらに、ボリュームとのインタラクションのロギングを容易にするためのストリームロギングシステムの利用に関する。具体的には、コンピューティングデバイスの集合体は、ボリュームへの変更（たとえば、ユーザＩ／Ｏ操作に反映される）が、ボリュームに関連付けられた１つまたは複数のメッセージストリーム内のメッセージとして反映される「ロガーフリート（ｌｏｇｇｅｒ  ｆｌｅｅｔ）」を実装し得る。本明細書に開示するように、ロガーフリートは、分散された三次レプリカと、一次および二次レプリカとの非同期更新を可能にし得、その結果、ロガーフリートは、分散された三次レプリカが、一次および二次レプリカ（これらのレプリカは、たとえば、同期的に更新され得る）と「結果整合性（ｅｖｅｎｔｕａｌｌｙ  ｃｏｎｓｉｓｔｅｎｔ）」を有することを可能にする。たとえば、ボリュームへの各変更は、（たとえば、一次レプリカを実装するデバイスによって）ロガーフリートに、ボリュームに関連付けられたストリーム内のメッセージとして送信され得る。ロガーフリートは、データの複写および冗長性などの多様なメカニズムを適用して、ストリームに送信されたメッセージが、後で正しい順序で、確実にボリュームの分散された三次レプリカをホストするデバイスに送信されるようにし得る。次いで、デバイスは、各メッセージから、ボリュームの分散された三次レプリカへの変更を再生成して、第３のレプリカを、メッセージが生成されたときの一次レプリカの状態と一致する状態にし得る。したがって、ロガーフリートを使用することにより、各変更が分散された三次レプリカをホストするデバイスにおいて正しい順序で正常にコミットされるようにするなどの機能が、一次レプリカをホストするデバイスからオフロードされ得る。
【００１１】
ロガーフリートを使用してボリュームへの変更をメッセージストリームとして記録することにより、本明細書に記載の追加の機能が可能になり得る。たとえば、ボリュームへの変更をメッセージストリームとして記憶することにより、本明細書に開示する弾性コンピューティングシステムは、ボリュームへの操作を「巻き戻す」こと、または別の方法で、ストリームのメッセージに反映された特定の時点でのボリュームの状態を再現することが可能になり得る。例示的には、ユーザは、ボリュームに対する最後のｎ個の変更操作を「元に戻す」ことを要求し得、弾性コンピューティングシステムは、それらの変更を反映するメッセージのストリームを利用して、ボリュームをそれらの操作前の状態に戻し得る。他の例として、システムは、メッセージのストリームを利用して、任意の状態のボリュームのポイントインタイムのスナップショットを、ボリュームがその状態にあったときから変更されている場合でも、生成し得る。具体的には、システムは、既知の状態（たとえば、現在の状態または以前の既知の状態であり、それ自体がスナップショットに反映され得る）から一時ボリュームを生成し、メッセージを適用して（たとえば、後の状態から逆方向に進む場合にはメッセージを取り消し、または新しいスナップショットが求められている時刻よりも前の状態から順方向に進む場合にはメッセージを実行して）、一時ボリュームを、スナップショットが望まれている時点で元のボリュームが置かれていた状態にし得る。次いで、システムは一時ボリュームのスナップショットを生成して、メッセージストリーム内に反映された任意の過去の時点でのボリュームのスナップショットを作成することを可能にし得る。以下で論じるように、ロガーフリートは、ボリュームに関する他の多様な機能を可能にし得る。たとえば、弾性コンピューティングシステムは、ユーザがロガーフリートに保持されているボリュームへのメッセージを読み出し得るアプリケーションプログラミングインターフェース（ＡＰＩ）を提供して、特定の基準を満たす変更がロガーフリートで検出された場合のユーザへの通知などの機能を可能にし得る。
【００１２】
上記のように、分散された三次レプリカを使用することにより、分散された三次レプリカのパーティションにわたって提供される高い並列性によって、ボリュームの迅速な複写が可能になり得る。しかしながら、それでもなお、分散された三次レプリカのみを使用する場合、所望の複写には過度の時間が必要になる場合があり得る。たとえば、ユーザがソースボリュームを数百または数千のターゲットボリュームに複写することを望む場合、単一の分散された三次レプリカを使用すると、そのような操作を完了するのに多くの時間がかかり得る。これに対処するために、本出願の実施形態は、追加の高度に分散されたレプリカ、またはそれらのレプリカの一部の実装および使用を可能にして、ボリュームの大規模な複写を容易にする。例示的には、ユーザがソースボリュームを１０００回複写することを望む場合、第１の高度に分散されたレプリカ（たとえば、三次レプリカ）を使用して、第２の高度に分散されたレプリカを作成し得る。次いで、これら２つの高度に分散されたレプリカのそれぞれを使用して、追加の高度に分散されたレプリカを作成し得る。このようにして、ボリュームの高度に分散されたレプリカの数は、指数関数的に増加し得る。ボリュームの高度に分散されたレプリカの数が十分なレベル（たとえば、所定の最大値、ターゲットボリュームへの複写が閾値期間内に完了すると予想されるようなレベルなど）に達した場合、高度に分散されたレプリカの集合体を使用して、ソースボリュームを所望のターゲットボリュームに（たとえば、ブロックストアサーバのセット上のボリュームとして、コンピューティングサーバ上のインスタンスの仮想ディスクドライブとして、など）複写することができる。その後、追加の高度に分散されたレプリカを削除して、そのようないくつかの高度に分散されたレプリカを提供する際のコンピューティングリソースの過剰な使用を回避し得る。
【００１３】
場合によっては、ユーザは、ボリューム全体の大量複写を要求し得る。そのような場合、複写を容易にするために、いくつかの追加の高度に分散されたレプリカを作成することができる。これらの追加のレプリカを、本明細書では一般に「中間複写」レプリカと呼び、その理由は、これらのレプリカを、最初の高度に分散されたレプリカ（たとえば、三次レプリカ）と、大量複写が要求されているターゲットボリュームとの間の中間物として使用することができるためである。他の例では、ユーザは、ボリュームの一部のみの大量複写を要求し得る。たとえば、ユーザは、ボリュームの単一のファイル（たとえば、構成ファイル）またはセクタ（たとえば、ブートセクタ）を多数のターゲットボリュームにコピーすることを望み得る。そのような場合、ボリュームの追加の高度に分散されたレプリカを作成するのではなく、高度に分散されたレプリカの１つまたは複数のパーティションが複写され得る。たとえば、高度に分散された三次レプリカの単一パーティションに記憶されたファイルの複写が要求された場合、ブロックストアサーバは、（たとえば、閾値期間内に）ターゲットボリュームにファイルをコピーするのに十分な数の複写パーティションが存在するまで、（たとえば、上記の指数関数的な処理を使用して）その単一パーティションを複写するように構成され得る。そのような複写されたパーティションを、本明細書では一般に「中間複写」パーティションと呼び、その理由は、これらのパーティションを、最初の高度に分散されたレプリカ（たとえば、三次レプリカ）のパーティションと、大量複写が要求されているターゲットボリュームとの間の中間物として使用することができるためである。中間複写レプリカ（たとえば、ボリューム全体を表すもの）および中間複写パーティション（たとえば、高度に分散されたレプリカの個々のパーティションを表すもの）を、本明細書ではまとめて「中間複写」と呼ぶ。
【００１４】
一実施形態では、中間複写の作成は、集中管理機関によって容易にされる。たとえば、高度に分散されたレプリカから情報をコピーする要求を受信し、要求が中間複写を作成するための閾値レベルを満たしているか否かを判定し、中間複写を作成させ、中間複写を使用して要求された情報のコピーを実行するコントローラが設けられ得る。他の実施形態では、中間複写の作成は、高度に分散されたレプリカのパーティションを実装するサーバのピアツーピア動作によって容易になる。たとえば、高度に分散されたレプリカを実装するサーバの集合体の中の各サーバは、そのサーバ上のレプリカのパーティションから情報をコピーする要求を監視し、要求がパーティションの１つまたは複数の中間複写を作成するための閾値レベルを満たしているか否かを判定し得る。満たしている場合、サーバはソースパーティションを集合体の中の他のサーバにコピーし、パーティションをコピーする要求の少なくとも一部を他のサーバに転送することによって、中間複写パーティションを生成し得る。この機能は各サーバに実装できるので、このピアツーピア動作により、集中管理を必要とせずに、パーティションの中間複写の数を指数関数的に増やしやすくすることができる。
【００１５】
当業者には理解されるように、高度に分散されたレプリカおよび／またはロガーフリートを使用することは、本明細書に開示するように、以前の実施態様に対する大幅な技術的進歩を表す。具体的には、高度にパーティション分割された三次レプリカを使用することにより、本明細書に開示するように、弾性コンピューティングシステムは、以前のシステムの帯域幅またはスループットの制限を受けることなく、データボリュームの迅速な複製を容易にすること、またはデータボリュームへの他の集中的なＩ／Ｏ操作を実行することが可能になる。また、高度にパーティション分割された三次レプリカと、それほど高度にパーティション分割されていない一次および二次レプリカとを組み合わせることにより、高度にパーティション分割されたレプリカのみを利用する際の困難、たとえば、高レベルのパーティション分割によって生じる潜在的な待ち時間などが克服される。したがって、高度にパーティション分割された三次レプリカと、それほど高度にパーティション分割されていない一次および二次レプリカとを組み合わせることにより、弾性コンピューティングシステムは、ユーザＩ／Ｏ操作への応答性が高まると共に、ボリュームの迅速な複写または集中的なＩ／Ｏ操作を容易にすることが可能になる。典型的なユーザＩ／Ｏ操作への応答性を維持しながら、これらの集中的なＩ／Ｏ操作の速度を高めることによって、本開示は弾性コンピューティングシステムの動作への大幅な改善を表す。たとえば、本明細書に開示する実施形態は、弾性コンピューティングシステムのコンピューティングリソースが使用される効率を大幅に改善することができ、その結果、システムの応答性が向上し、総リソース使用量が減少する。ボリュームのデータ変更メッセージを記憶するロガーフリートの実装は、たとえば、それほど分散されていないレプリカに対する分散された三次レプリカの非同期更新を可能にすることにより、上記の利点を促進することができる。本明細書におけるロガーフリートの開示はまた、ボリュームへの操作を「巻き戻す」機能、または前の状態のボリュームを再現する機能など、弾性コンピューティングシステムの動作への他の改善を促進することができる。ボリュームを過去の状態に戻すこの機能は、ストレージデバイスにおける長年の問題、（たとえば、悪意のあるソフトウェアによる）デバイスへの誤った書き込みの後にデバイスを過去の状態に復元することの難しさなどに対処する。また、当業者には認識されるように、本明細書に記載の実施形態（たとえば、高度にパーティション分割されたレプリカと、パーティション分割が少ないレプリカとの併用、ボリュームへの変更をメッセージストリームとして記憶するロガーフリートの実装）は、情報検索およびデータストレージの分野における長年の技術的課題、たとえば、個々のコンピューティングデバイスの限られた帯域幅、分散コンピューティングシステムによって課せられる待ち時間、そのようなシステムにわたる帯域幅と待ち時間との懸念のバランスを取ることの難しさ、（特に長時間にわたって）そのようなシステムにおいてデータの回復力を確保することの難しさなど、に対する技術的解決策を提供する。そのため、本明細書に記載の実施形態は、コンピュータ関連技術における大幅な改善を表す。
【００１６】
以下、本開示の様々な態様を特定の実施例および実施形態に関して説明し、これらは本開示を限定ではなく例示するものとする。本明細書に記載の実施例および実施形態は、例示の目的で、特定の計算およびアルゴリズムに焦点を当てているが、当業者は、実施例が例示にすぎず、限定を意図していないことを理解するであろう。たとえば、本明細書では「三次」レプリカを参照して実施形態を開示しているが、この用語は、このレプリカが２つの代替的なレプリカを含むシステムに導入されるという仮定の下で、単に例示の目的で使用している。しかしながら、本開示の実施形態は、より多くのまたはより少ない代替的なレプリカを含み得る。たとえば、一実施形態では、高度にパーティション分割されたレプリカは、単一のそれほどパーティション分割されていないレプリカ、または３つ以上のそれほどパーティション分割されていないレプリカと共に使用され得る。したがって、本明細書で使用する場合、一次または二次レプリカへの言及は一般に、それほどパーティション分割されていないレプリカの一例を指すものと理解されたい（たとえば、ボリュームは１〜１６個のレプリカに分割され、またはテールレイテンシが標準的なユーザＩ／Ｏ操作の応答性に大きく影響するとは予想されないような数のレプリカに分割される）。また、本明細書では、高度にパーティション分割された「三次」レプリカを参照して実施形態を論じているが、本開示の一部の実施形態は、２つ以上の高度にパーティション分割されたレプリカを利用し得、それらはいずれも、簡単のために「三次」レプリカと呼び得る。したがって、三次レプリカへの言及は、本明細書で使用する場合、（たとえば、同じボリュームを表すそれほどパーティション分割されていないレプリカに対して）高度にパーティション分割されたレプリカを指すものと理解されたい。以下で論じるように、そのような高度にパーティション分割されたレプリカは、ボリューム全体の複写など、集中的なＩ／Ｏ操作の迅速な実行を可能にするのに十分な数のパーティションを含み得る。このパーティションの数は、たとえば、１０００〜数百万パーティションの間であり得る。以下に提供する例では、場合によっては、ボリュームへの変更を「書き込み操作」と呼び得る。「書き込み操作」という用語は、ボリュームに新しい情報を書き込む要求、またはボリューム内の既存の情報を変更または削除する要求を含む、ボリューム内に含まれるデータを変更する任意の要求を指すものと理解されたい。
【００１７】
三次レプリカを用いた例示的なコンピューティング環境の概要
図１Ａは、開示した三次レプリカを実装できる弾性コンピューティングシステム１２０を含む例示的なコンピューティング環境１００を示している。弾性コンピューティングシステム１２０は、ネットワーク１２５を介してユーザデバイス１３０によってアクセスすることができる。弾性コンピューティングシステム１２０は、１つまたは複数のコンピューティングサーバ１１５、１つまたは複数のオブジェクトストレージサーバ１１０、および１つまたは複数のブロックストアサーバ１０５を含み、これらは互いに、およびネットワーク１２５とネットワーク通信して、とりわけ、インスタンス１１６、ボリューム１１１、およびバケット１０６を含むコンピューティングリソースへのオンデマンドアクセスをユーザに提供する。これらの特定のリソースについては、以下でさらに詳細に説明する。弾性コンピューティングシステム１２０の一部の実施態様は、ドメインネームサービス（「ＤＮＳ」）サーバ、リレーショナルデータベースサーバ、およびオンデマンドクラウドコンピューティングプラットフォームをサポートするための他のサーバ構成（図示せず）を追加的に含むことができる。各サーバは、ハードウェアコンピュータメモリおよび／またはプロセッサと、そのサーバの全体的な管理および動作のための実行可能なプログラム命令を提供するオペレーティングシステムと、サーバのプロセッサによって実行されると、サーバにその意図された機能を行わせる命令を記憶するコンピュータ可読媒体と、を含む。
【００１８】
弾性コンピューティングシステム１２０は、ネットワーク１２５を介してオンデマンドのスケーラブルなコンピューティングプラットフォームをユーザに提供して、たとえば、ユーザが、コンピューティングサーバ１１５、オブジェクトストレージサーバ１１０、およびブロックストアサーバ１０５の使用を通じて、スケーラブルな「仮想コンピューティングデバイス」を自由に使えるようにすることができる。これらの仮想コンピューティングデバイスは、ハードウェア（様々なタイプのプロセッサ、ローカルメモリ、ランダムアクセスメモリ（「ＲＡＭ」）、ハードディスクおよび／またはソリッドステートドライブ（「ＳＳＤ」）ストレージ）、選ばれたオペレーティングシステム、ネットワーク機能、およびプリロードされたアプリケーションソフトウェアを含むパーソナルコンピューティングデバイスの属性を有する。各仮想コンピューティングデバイスはまた、そのコンソール入出力（「Ｉ／Ｏ」）（たとえば、キーボード、ディスプレイ、およびマウス）を仮想化し得る。この仮想化により、ユーザは、ブラウザ、アプリケーションプログラミングインターフェース、ソフトウェア開発キットなどのコンピュータアプリケーションを使用して自身の仮想コンピューティングデバイスに接続することによって、パーソナルコンピューティングデバイスであるかのように、自身の仮想コンピューティングデバイスを構成および使用することが可能になる。ユーザが利用可能な固定量のハードウェアリソースを所有するパーソナルコンピューティングデバイスとは異なり、仮想コンピューティングデバイスに関連付けられたハードウェアは、ユーザが必要とするリソースに応じてスケールアップまたはスケールダウンすることができる。ユーザは自身の仮想コンピューティングシステムをデプロイして、自身で使用するための、および／または自身の顧客もしくはクライアントが使用するための、ネットワークベースのサービスを提供することを選ぶことができる。
【００１９】
弾性コンピューティングシステム１２０を、いくつかの地理的に離れたリージョンにわたって提供することにより、たとえば、ユーザに対して、自身の仮想コンピューティングデバイスを自身の地理的場所またはその付近に配置して、より短い待ち時間を提供することができる。各リージョンは、場所および電力供給の観点で他の全てのリージョンから物理的に分離され、独立しており、ネットワーク１２５を介して他のリージョンとデータを通信し得る。各リージョンは、２つ以上のアベイラビリティゾーンを含むことができ、各アベイラビリティゾーンは、１つまたは複数の物理データセンターによって支持され、冗長かつ個別の電力、ネットワークおよび接続が提供されて、２つのゾーンに同時に障害が発生する可能性が低下する。単一のアベイラビリティゾーンが複数のデータセンターに及ぶことはできるが、２つのアベイラビリティゾーンがデータセンターを共有することはない。これにより、データセンターレベルの障害からユーザを保護することができる。データセンターとは、コンピューティングサーバ１１５、オブジェクトストレージサーバ１１０、およびブロックストアサーバ１０５のうちの１つまたは複数を収容し、それらに電力および冷却を提供する物理的な建物または囲い地を指す。アベイラビリティゾーン内のデータセンター、およびリージョン内のアベイラビリティゾーンは、光ファイバーネットワークケーブルなどのプライベートな待ち時間の短いリンクを介して相互に接続される。コンピューティングハードウェアのこの区分化および地理的分散により、弾性コンピューティングシステム１２０は、高度のフォールトトレランスおよび安定性を有する地球規模の高速サービスをユーザに提供することができる。所与のリージョン内のゾーンにリソースを均等に分散させるために、弾性コンピューティングシステム１２０のプロバイダは、アベイラビリティゾーンを各ユーザアカウントの識別子に独立してマッピングし得る。
【００２０】
弾性コンピューティングシステム内の様々なサーバの役割に特に目を向けると、コンピューティングサーバ１１５は、ユーザに対して、自身のソフトウェアシステムを構築およびホストするためのサイズ変更可能なコンピューティング能力を提供する１つまたは複数のサーバを含む。ユーザはコンピューティングサーバ１１５を使用して、「インスタンス」１１６と呼ばれる、必要な数の仮想コンピューティング環境を起動することができる。インスタンス１１６は、ユーザのニーズに応じて、処理能力、メモリ、ストレージ、およびネットワーク容量の様々な構成を有することができる。コンピューティングサーバ１１５はまた、インスタンスの動作中に使用される一時データ用のコンピュータストレージを含むことができるが、インスタンスがシャットダウンされるとすぐに、このデータは失われる。
【００２１】
ブロックストアサーバ１０５は、ボリューム１０６の形態でコンピューティングサーバ１１５に永続的なデータストレージを提供する。ブロックストアサーバ１０５は、データがブロックとして記憶される１つまたは複数のサーバを含む。ブロックはバイトまたはビットのシーケンスであり、ブロックサイズの最大長を有する整数個のレコードを通常は含む。ブロック化されたデータは通常、データバッファに記憶され、一度にブロック全体が読み書きされる。ブロック化により、オーバーヘッドを削減し、データストリームの処理を高速化することができる。各ブロックには、それを記憶および取り出しできる一意の識別子が割り当てられるが、典型的には、さらなるコンテキストを提供するメタデータは割り当てられない。データのブロックは、実装に応じて、たとえば、５１２バイト、１キロバイト（「ｋＢ」）、４ｋＢ、８ｋＢ、１６ｋＢ、３２ｋＢ以上にすることができる。三次レプリカのパーティションは、１ブロックまたは複数ブロックのサイズにすることができる。たとえば、三次レプリカのパーティションは、オブジェクトストレージサーバ１１０によって使用される最小記憶単位のサイズに等しいブロックの数、またはオブジェクトストレージサーバ１１０へのスループットを最大化するブロックの数としてサイズ設定することができる。たとえば、オブジェクトストレージサーバ１１０が１０００ブロックの最小記憶単位（たとえば、ブロックが１ｋＢのサイズである場合は１メガバイトのデータ）を実装する場合、三次レプリカの各パーティションは、１０００ブロック（１メガバイト）のサイズであり得る。対照的に、一次および二次レプリカの典型的なパーティションのサイズは、ユーザボリュームのサイズなどに応じて、８ＧＢから６２．５ＧＢ（またはそれ以上）の範囲である。
【００２２】
たとえば１ＧＢから１テラバイトＴＢのサイズの範囲の個々のハードドライブとして扱うことができるユーザボリューム１０６は、ブロックストアサーバ１０５に記憶された１つまたは複数のブロックで構成される。個々のハードドライブとして扱われるが、ボリュームは、１つまたは複数の基礎となる物理ホストデバイス上に実装された１つまたは複数の仮想化デバイスとして記憶され得ることは理解されよう。ボリューム１０６は、少ない回数（たとえば、最大１６回）だけパーティション分割され得、各パーティションは、一部の実施態様では約１ＧＢ／秒（「Ｇｂｐｓ」）でデータを転送する能力を有する弾性コンピューティングシステム１２０のデバイスによってホストされる。これらのボリュームは、コンピューティングサーバ１１５の特定のインスタンスにつなげることができる永続的な専用ストレージを提供する。各ボリュームは、コンピューティングサーバ１１５上で動作する単一のインスタンスにつなげられ得、そのインスタンスから取り外して、他のインスタンスにつなげ直すことができる。図１Ｂに関してより詳細に説明するように、ブロックストアサーバ１０５は、アベイラビリティゾーン内の複数のサーバにわたってボリュームを複製することにより、ボリュームに関する冗長性を内蔵しており、これは、個々のドライブが故障するか、または他の何らかの単一の障害が発生した場合に、ボリュームが故障しないことを意味する。
【００２３】
オブジェクトストレージサーバ１１０は、弾性コンピューティング環境１２０内の他のタイプのストレージを表す。オブジェクトストレージサーバ１１０は、バケット１１１と呼ばれるリソース内にオブジェクトとしてデータが記憶される１つまたは複数のサーバを含む。各オブジェクトは、典型的には、記憶されているデータと、記憶されたオブジェクトの分析に関するオブジェクトストレージサーバ１１０の様々な機能を可能にする可変量のメタデータと、オブジェクトを取り出すために使用できるグローバルに一意の識別子またはキーと、を含む。オブジェクトストレージサーバ１１０に記憶されたオブジェクトは、一意の識別子に関連付けられており、そのため、それらへの許可されたアクセスは、任意の場所にあるネットワーク化されたコンピューティングデバイスからの要求を通じて獲得することができる。各バケットは、所与のユーザアカウントに関連付けられる。ユーザは自身のバケット内に所望の数のオブジェクトを記憶することができ、自身のバケット内のオブジェクトの書き込み、読み出し、削除を行うことができ、自身のバケットおよび含まれているオブジェクトへのアクセスを制御することができる。さらに、いくつかの異なるオブジェクトストレージサーバ１１０が上述のリージョンのうちの異なるリージョンに分散された実施形態では、ユーザは、たとえば待ち時間を最適化するために、バケットが記憶されるリージョン（または複数のリージョン）を選ぶことができる。いくつかの例を挙げると、ユーザは、ソーシャルメディアウェブサイト上の写真、音楽ストリーミングウェブサイト上の曲、またはオンラインコラボレーションサービス内のファイルを記憶するなどの目的で、オブジェクトストレージサーバ１１０を使用することができる。クラウドで開発されるアプリケーションは、オブジェクトストレージの広大なスケーラビリティおよびメタデータ特性を利用することが多い。オブジェクトストレージサーバ１１０は、高度に並列化されたデータアクセスおよび転送をサポートすることができる。
【００２４】
オブジェクトストレージサーバ１１０は、データを複数のアベイラビリティゾーンに自動的に複製することができるので、オブジェクトストレージサーバ１１０は、ブロックストアサーバ１０５よりもさらに高い冗長性を提供することができる。オブジェクトストレージサーバ１１０はまた、ブロックストアサーバ１０５とは異なるデータスループットを有し、たとえば、単一のデータストリームに対して約２０Ｍｂｐｓである。オブジェクトストレージサーバ１１０は、上述のインスタンスおよびボリュームとは独立して使用することができるが、スナップショット（たとえば、オブジェクトとして記憶されるボリュームデータのバックアップ）に関して以下に説明するデータバックアップを提供するために使用することもできる。
【００２５】
弾性コンピューティングシステム１２０は、ネットワーク１２５を介してユーザデバイス１３０と通信することができる。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、もしくは他の任意のそのようなネットワーク、またはそれらの組み合わせを含む、任意の適切なネットワークを含むことができる。図示の実施形態では、ネットワーク１２５はインターネットである。インターネットまたは他の前述のタイプの通信ネットワークのいずれかを介して通信するためのプロトコルおよび構成要素は、コンピュータ通信の当業者には知られているので、本明細書でより詳細に説明する必要はない。ユーザデバイス１３０は、任意のネットワーク機能を備えたコンピューティングデバイス、たとえば、デスクトップコンピュータ、ラップトップ、スマートフォン、タブレット、電子書籍リーダー、ゲームコンソールなどを含むことができる。ユーザはネットワーク１２５を介して弾性コンピューティングシステム１２０にアクセスすることによって、自身のデータおよびコンピューティングリソースを閲覧または管理すると共に、弾性コンピューティングシステム１２０によってホストされるウェブサイトおよび／またはアプリケーションを使用することができる。
【００２６】
ユーザは、ブロックストアサーバ１０５に記憶された自身のボリュームのスナップショットを作成するように弾性コンピューティングシステム１２０に指示することができる。一実施形態では、スナップショットは、１つまたは複数のオブジェクトストレージサーバ１１０にボリュームのデータのコピーとして（たとえば、単一のオブジェクトまたはオブジェクトの集合体として）記憶される、ボリュームのポイントインタイムのブロックレベルのバックアップである。オブジェクトストレージサーバ１１０用の一般的なインターフェースを介してスナップショットを管理することに加えて、またはその代替として、スナップショットは、ブロックストアサーバ１０５のアプリケーションプログラミングインターフェース（「ＡＰＩ」）を介して管理され得る。一例では、スナップショットは、ボリューム内のデータの増分レコードとして実装される。例示的には、ボリュームの最初のスナップショットが撮られる場合、有効なデータを含むボリュームの全てのブロックが、１つまたは複数のオブジェクトとしてオブジェクトストレージサーバ１１０にコピーされ、次いで、スナップショットの「目録」または「マニフェスト」ファイルが、オブジェクトストレージサーバ１１０に書き込まれ、このファイルは、１つまたは複数のオブジェクト、ならびに１つまたは複数のオブジェクトのそれぞれが対応するボリュームのブロックの記録を含む。増分スナップショットを使用しているため、同じボリュームの後続のスナップショットが撮られる場合、最初のスナップショット以降に変更されたブロックのみが、オブジェクトストレージサーバ１１０にコピーされる必要があり、目録またはマニフェストファイルを、各データブロックの最新バージョンを指すように更新することができる（または、第２の目録またはマニフェストファイルを作成することができ、最初の目録またはマニフェストファイルをボリュームの前のバージョンの記録として残すことが可能になる）。初期スナップショットを使用して、初期スナップショットの時点でのボリュームを再構築することができ、または後続の時点のスナップショットを互いに組み合わせて、または初期スナップショットと組み合わせて、任意の個々の後続の時点でのボリューム全体を再構築することができる。このようにして、スナップショットは、所与のボリュームの増分バックアップおよび完全バックアップの両方として機能することができる。
【００２７】
スナップショットを作成する場合、スナップショットが開始される時刻までにボリュームに書き込まれたあらゆるデータをスナップショットに含めることができ、ユーザはスナップショットの作成中に、スナップショットに影響を与えることなく、自身のボリュームへのＩ／Ｏ操作を引き続き実行することができる。ユーザはスナップショットから新しいボリュームを作成して、たとえば、自身のボリュームの複写を作成したり、データを復元したりすることができる。新しいボリュームはスナップショットに記憶された全てのデータを含むので、スナップショットが開始されたときの元のボリュームの複写になる。このように、スナップショットを使用して、ボリュームのデータを１つのアベイラビリティゾーンから他のアベイラビリティゾーンに転送することもできる。同様に、インスタンスのスナップショットを撮って、そのインスタンスの新しい仮想マシンインスタンスを作成することができる。
【００２８】
図１Ｂは、本開示の実施形態による、ボリュームの一次、二次、および三次レプリカを記憶するようにブロックストアサーバ１０５を構成できる方法の一例を示している。ブロックストアサーバ１０５は、サーバ１０５間でブロックデバイスの内容をミラーリングし、冗長サーバにわたってデータを同期的に複製するように構成される。図１Ｂはまた、弾性コンピューティングシステム１２０のデータプレーン１５０および制御プレーン１５５を示している。データプレーン１５０は、弾性コンピューティングシステム１２０を通じたユーザデータの動きを表し、制御プレーン１５５は、弾性コンピューティングシステム１２０を通じた制御信号の動きを表す。当業者は、データプレーン１５０および制御プレーン１５５が、サーバ１０５の物理的構成ではなく、サーバ１０５の動作に関連する論理構造を表すことを理解するであろう。
【００２９】
制御プレーン１５５は、システムおよびユーザの要求を調整し、それらを弾性コンピューティングシステム１２０内の適切なサーバに伝播させるためのコンピュータ実行可能ソフトウェアを用いて少なくとも１つのサーバにより実装できる論理構造である。制御プレーン１５５の機能は、データの複製、フェイルオーバー動作、およびデータプレーン１５０に関して特定のアクションを実行するためのユーザからの要求の受信を含む。これらは、ボリューム１０６の作成、クローン作成、およびスナップショット作成を含むことができる。図示の実施形態のデータプレーン１５０は、一次レプリカ１３５、二次レプリカ１４０、および三次レプリカ１４５への操作の実行によって実装される。
【００３０】
上述のように、ユーザＩ／Ｏ操作は、一次レプリカ１３５において、二次レプリカ１４０と同期的に情報を複製するブロックレベルの複製メカニズムを用いて実行することができる。一次レプリカ１３５および二次レプリカ１４０は、データの整合性を高めるために、異なるブロックストアサーバ１０５Ａ、１０５Ｂにプロビジョニングすることができる。サーバ１０５Ａ、１０５Ｂは単一のサーバとして図示しているが、一部の実施態様では、一次レプリカ１３５および二次レプリカ１４０はそれぞれいくつかのパーティションを含み得、各パーティションが異なるサーバに記憶され得る。一次レプリカ１３５への任意のＩ／Ｏ操作を二次レプリカ１４０に複製することを可能にするブロックレベルの複製メカニズムを、ボリュームの一次および二次レプリカの両方にインストールすることができる。複数のレプリカにわたるボリュームへの同期的なＩ／Ｏ操作を提供するための様々なメカニズムが当技術分野で知られており、したがって、本明細書では詳細に説明しない。一次レプリカ１３５の障害または停止は、二次レプリカ１４０に対してフェイルオーバー動作を実行することにより、対処することができる。ＤＮＳネームまたは他のそのような手法を使用して、フェイルオーバー中にネームを二次レプリカ１４０にエイリアスできるようにして、「新しい」一次レプリカを利用するためにユーザ側でアクションが必要とされないようにすることができる。あるいは、一次レプリカにつなげられたインスタンスをホストするサーバは、ボリュームのＩＰアドレス、ボリュームＩＤ、またはその他の識別データをメモリに記憶して、二次レプリカに接続するか、フェイルオーバーが発生した場合に前述のデータを提供することができる制御プレーンシステムのＩＰアドレスに接続することができる。複製されたボリュームのプロビジョニングおよび新しいボリュームの作成は、制御プレーン１５５によって制御することができる。
【００３１】
一次および二次レプリカは、最大で１６個のパーティションに分割することができる。一般的に説明すると、パーティション分割とは、コンピュータストレージ上に１つまたは複数の領域を作成して、オペレーティングシステムが各領域内の情報を個別に管理できるようにすることであり、各パーティションは、物理コンピュータストレージの一部を使用する別個の「論理的な」ストレージデバイスである。各パーティションは、弾性コンピューティングシステム１２０の別個のデバイスによってホストされ得、そのパーティションが実装されるホストデバイスが利用可能なコンピューティングリソースまでのデータ転送機能制限を有し得る。たとえば、パーティションが１Ｇｂｐｓのネットワークインターフェースを有する物理デバイスでホストされている場合、そのパーティションは、１Ｇｂｐｓのデータ転送機能制限を有し得る（または、ネットワークインターフェース上で同時に送信される必要がある複数のパーティションをホストデバイスがホストする場合はそれ以下であり得る）。上述のように、このデータ転送機能制限により、特にデータのボリュームが大きい場合、ボリュームのデータからのかなりの転送を必要とする特定のユーザアクションに待ち時間が発生する。たとえば、ユーザはインスタンスの多数のクローンを作成し得、また、新しい各インスタンスにつなげる、関連付けられたボリュームのクローンを作成することを望み得る。これは、一例として、ユーザボリュームがリアルタイムのマーケットデータを含み、ユーザがデータを分析するための様々なアルゴリズムをテストする１０００回の実験を実行し、次の取引日までに最適なアルゴリズムを弾き出すことを望む場合に、有益な可能性がある。そのような実験は、ボリューム内に存在するソフトウェアに基づいて行われるので、ボリュームを１０００台のマシンにクローンすることにより、実験を実行することが可能になる。これは、短い時間枠内に多数のクローンを作成するためのユーザニーズの例示的な一例にすぎないことは理解されよう。一次および二次レプリカのデータ転送帯域幅は、パーティションがホストされているソースデバイスのデータ転送機能制限によって制限され、制御プレーン１５５はまた、この帯域幅の一部を予約して、一次レプリカ１３５でのＩ／Ｏ操作と、二次レプリカ１４０へのブロックの同期的な複製とをサポートし得る（たとえば、標準的なユーザＩ／Ｏ操作がクローン作成動作中も続行し得るようにする）。
【００３２】
対照的に、三次レプリカ１４５は、一次および二次レプリカのパーティションの数よりも多数のパーティションに分割することができる。一部の実施形態では、この数は、１，０００パーティションから３２００万パーティション（たとえば、ボリュームブロックあたり１つのパーティション）の範囲にすることができる。一部の実施形態では、より少ない数のパーティションを三次レプリカに使用することができ、たとえば、閾値期間内にボリューム全体のクローンまたはスナップショットを作成可能な特定の数にすることができる。この例では、ネットワークインターフェースの帯域幅、オブジェクトストアへの帯域幅、ボリュームのサイズ、および目標完了時間を使用して、使用するパーティションの数を決定することができる。有益なことに、パーティションの数が増えると、三次レプリカのデータを転送するのに利用可能な合計帯域幅が増える。各パーティションは、ボリュームの１つまたは複数のブロックを含むことができ、これらのパーティションは、弾性コンピューティングシステム１２０の異なるデバイスのコンテナに記憶することができる。一実施形態では、コンテナは、生の非構造化バイナリファイル、たとえば、バイナリラージオブジェクト（「ＢＬＯＢ」）データファイルを記憶し、クエリされた場合にそれらを返す。制御プレーン１５５は、（たとえば、一次または二次レプリカに記憶された）ボリュームのデータを個々のパーティションに分割することができ、各パーティションは、容量を有する弾性コンピューティングシステム１２０（またはその指定されたリージョンまたはアベイラビリティゾーン）内の任意のコンテナに記憶され得る。これらのコンテナは追加専用にすることができ、コンテナのストレージスペースが完全に使用されると（たとえば、ストレージの残りの部分が小さすぎて、三次レプリカの他のパーティションを記憶できなくなると）閉じることができる。冗長性のために、一部の実施態様では、コンテナサーバは、コンテナの複数のコピーを複製するためのコンピュータ実行可能命令を用いて構成することができる。
【００３３】
三次レプリカ１４５は、ボリュームのスナップショット作成およびクローン作成を加速するための弾性コンピューティングシステム１２０内の新しいリソースと見なすことができる。この三次レプリカ１４５は、１人のユーザが、たとえば、自身のボリュームの１，０００個のクローンの作成を要求し、サーバの接続帯域幅を使い果たして他のユーザに損害を与え得る、弾性コンピューティング環境１２０内のマルチテナントサーバのボトルネックを有益に低減する。一実施形態では、三次レプリカ１４５はユーザに直接的には非公開であり得るが、スナップショット作成およびクローン作成要求をサポートするように構成され得る。一部の実施形態は、三次レプリカの複数のコピーを保持して、たとえば、複数の新しいボリュームの並列な作成の供給をサポートし得る。三次レプリカ１４５を分散して記憶することによりいくつかの利点が提供され、たとえば、オブジェクトストレージサーバ１１０上のバケットへの、高い並列性であるが低スループットの接続が利用されると共に、ブロックストアサーバ１０５上で高スループットを駆動することが可能になる。三次レプリカ１４５の作成、記憶、および使用に関する追加の詳細については、以下でさらに詳細に説明する。
【００３４】
例示的な三次レプリカの概要
図２Ａは、弾性コンピューティングシステム１２０において分散された三次レプリカを作成する概略図２００、たとえば、図１Ｂの三次レプリカ１４５の一実装を示している。三次レプリカは図２Ａには図示しておらず、その理由は、このレプリカのパーティションがコンテナＣ１〜Ｃｎに記憶されているためである。「静的な」分散された三次レプリカとは、一次または二次レプリカから同期的にも非同期的にもブロックレベルの更新を受信しない三次レプリカを指す。この特定の例は、静的な分散された三次レプリカとして作成することができるが、一部の実施形態では、このレプリカは、たとえば、図３Ａおよび図３Ｂに関して説明するロガーフリートに接続することによって、一次または二次レプリカから更新を後で受信することができる。
【００３５】
オブジェクトストレージ２１５は、ボリュームのスナップショットを含む上述のオブジェクトストレージサーバ１１０の１つまたは複数のバケットとすることができる。図示の実施形態では、分散レプリカコーディネータ２０５Ａ、２０５Ｎは、オブジェクトストレージ２１５に記憶されたスナップショットからの分散された三次レプリカの作成を駆動する構成要素である。他の実施形態は、オブジェクトストレージ２１５に到達せずに三次レプリカを作成することができ、たとえば、一次および／または二次レプリカから直接作成する。
【００３６】
いくつかの分散レプリカコーディネータ２０５Ａ、２０５Ｎが存在し得、たとえば、ロガーフリート３１５によって更新されている三次レプリカごとに１つである。例示的には、ワーカー２１０Ａ〜２１０Ｎは、分散レプリカコーディネータ２０５Ａ、２０５Ｎの指示に従って、各パーティション（またはパーティションの範囲）に記憶されるデータをダウンロードするステートレスワーカーフリートである。分散レプリカコーディネータ２０５Ａ、２０５Ｎおよびワーカー２１０Ａ〜２１０Ｎは、コンピューティングサーバ１１５上のインスタンスなどとして動作するデータストリーム処理クライアントとすることができる。
【００３７】
ワーカー２１０Ａ〜２１０Ｎは、たとえば、容量を有する任意のコンテナを選択し、選択されたコンテナに三次ボリュームパーティションを向けるなどして、コンテナサーバ２２０上のコンテナＣ１〜Ｃｎに三次レプリカパーティションを記憶する。図示の例では、各コンテナは、フォールトトレランスのためにいくつかのサーバ２２０にわたって複製されるが、他の実施態様はコンテナを複製しない場合がある。各コンテナＣ１〜Ｃｎは、本質的に、コンテナサーバ２２０のうちの１つのパーティションである。各コンテナＣ１〜Ｃｎは、いくつかの三次ボリュームパーティションを記憶する容量を有することができる。一実施形態では、各コンテナＣ１〜Ｃｎは、容量がある限りキー／値を記憶し、記憶されたデータをオンデマンドで返す追加専用のキー値ストアを含む。ユーザの単一のボリュームに属する上述のボリュームパーティションとは異なり、コンテナＣ１〜Ｃｎは、異なるユーザの複数のボリュームからのデータを記憶し得るマルチテナントにすることができる。
【００３８】
コンテナサーバ２２０は、ブロックストアサーバ１０５のうちの専用のものにすることができ、または上述のボリュームを記憶するブロックストアサーバ１０５と共有することができる。オブジェクトストレージサーバ１１０に記憶されたスナップショットは、一次レプリカのコピーと見なすこともできるが、ブロックストアサーバ１０５とオブジェクトストアサーバ１１０のバケットとの間の各接続は、典型的には、スループットが低く、待ち時間が長いが、所与のアベイラビリティゾーン内の弾性ブロックストアサーバ１０５は、典型的には、スループットが高く、待ち時間が短い接続によって接続される。したがって、オブジェクトストレージサーバ１１０に記憶されたスナップショットの代わりに、コンテナサーバ２２０に記憶された三次レプリカを使用することにより、ボリューム全体のデータを新しいボリュームに転送するのに必要な時間を数時間から数分に短縮することができる。
【００３９】
図２Ｂは、図２Ａの分散された三次レプリカを作成するための例示的な処理２３０のフローチャートである。処理２３０は、一部の実施形態では、弾性コンピューティングシステム１２０の制御プレーン１５５の制御下で実行することができる。
【００４０】
ブロック２３５において、制御プレーン１５５は、三次レプリカの作成を依頼する。これは、ブロックストアサーバ１０５上の特定のボリュームを識別し、そのボリュームがスナップショットされていることを確認し、そうでない場合はボリュームのスナップショットを作成することを含むことができる。他の実施形態では、三次レプリカのデータは、一次および／または二次レプリカから直接引き出すことができる。
【００４１】
ブロック２４０において、分散レプリカコーディネータ２０５Ａ、２０５Ｎは、オブジェクトストレージ２１５からオブジェクトマニフェストファイルをダウンロードする。オブジェクトマニフェストファイルは、ボリュームのブロックを表すオブジェクトの記憶場所を識別することができる。
【００４２】
ブロック２４５において、分散レプリカコーディネータ２０５Ａ、２０５Ｎは、たとえば、各ワーカーの能力およびパーティションあたりのブロック数に基づいて、三次レプリカの１つまたは複数のパーティションを各ワーカー２１０Ａ〜２１０Ｎに割り当てる。パーティションの数が多いと、利用不可能になった特定のパーティションを（スナップショットなどから）再現し、（たとえば、デバイスまたはパーティションがデータ転送に高度に使用されている場合などの）高需要を考慮してコンテナサーバ２２０にパーティションを複写し、使用されていない容量を使用することの容易さを向上させることができる。しかしながら、一次レプリカの各パーティションは、三次レプリカのパーティションの対応するサブセットへの接続を保持することが必要とされ得（たとえば、図５Ａを参照）、また、保持できる接続の最大数がある。したがって、三次レプリカ内のパーティションの数は、特定のシステム構成に応じて、これらの関心事の間のトレードオフになる可能性がある。
【００４３】
ブロック２５０において、異なるワーカー２１０Ａ〜２１０Ｎは、オブジェクトストレージ２１５から、自身が担当するパーティションのブロックをダウンロードする。各ワーカーはまた、たとえば容量のあるコンテナを識別することに基づいて、自身が担当する各パーティション用のコンテナを選択し、次いで、ダウンロードされたブロックデータをパーティション内に含めることで、選択されたコンテナにパーティションを生成する。一実施形態では、パーティションはコンテナにストライピングすることができ、ここで、ストライピングとは、論理的に連続するデータをセグメント化して、連続するセグメントが異なる物理ストレージデバイスに記憶されるようにすることを指す。パーティションごとにコンテナを選択するこの処理により、パーティションがデータセンター内で多かれ少なかれ地理的に多様になるようにし、たとえば、パーティションの大部分が同じスイッチを共有しないようにすることができる。さらに、コンテナを選択する処理は、パーティションが「ホットな」ストレージホスト（たとえば、接続帯域幅の大部分またはほとんどを使用するホスト）に配置されないように、候補ホストでの帯域幅の競合を考慮に入れることができる。
【００４４】
ブロック２５５において、各ワーカーは、自身が担当するパーティションの部分的なマニフェストを作成して、分散レプリカコーディネータに返す。これらの部分的なマニフェストは、パーティションＩＤ（またはブロックＩＤ）からコンテナＩＤへのマッピングとすることができ、部分的なマニフェストは、三次レプリカのパーティションの記憶場所を識別するマニフェストファイルにアセンブルすることができる。三次レプリカ１４５を分散して記憶することは、所与のボリュームのブロックを有する全てのコンテナを見つけるという課題を生み出す。マニフェストファイルは、三次レプリカの各パーティションを、そのパーティションを有するコンテナにマッピングするので、この課題の解決策になる。パーティションが要求時に利用不可能な場合、制御プレーン１５５は、オブジェクトマニフェストファイルを使用して、オブジェクトストレージサーバ１１０上のパーティションのスナップショット表現の場所を特定し、スナップショットからダウンロードを再駆動することができる。
【００４５】
ブロック２６０において、分散レプリカコーディネータ２０５Ａ、２０５Ｎは、異なるワーカー２１０Ａ〜２１０Ｎからの部分的なマニフェストを完全な分散ボリュームマニフェストに（たとえば、分散された三次レプリカの全てのパーティションについて、パーティションＩＤからコンテナＩＤに）アセンブルして、オブジェクトストレージ２１５に記憶する。これが完了すると、分散レプリカコーディネータ２０５Ａ、２０５Ｎは、制御プレーン１５５に通知することができ、処理２３０は終了する。
【００４６】
三次レプリカへの例示的な更新の概要
図３Ａは、弾性コンピューティングシステム１２０において一次レプリカと図１Ｂの三次レプリカ１４５などの分散された三次レプリカとの間でデータ更新を複製する概略図３００を示している。三次レプリカは図３Ａには図示しておらず、その理由は、このレプリカのパーティションはコンテナＣ１〜Ｃｎに記憶されるためである。分散された三次レプリカ１４５のこの実装は、一次レプリカの非同期コピーとして保持される。
【００４７】
ユーザはクライアント３０５を介して一次レプリカにおいてＩ／Ｏ操作を実行することができる。一次レプリカは、例示的には、ブロックストアサーバ１０５のうちの第１のブロックストアサーバ３１０に記憶される。このサーバ３１０は更新のログを保持し、このログを使用して、たとえば、以下に説明するロガーフリート３１５を介して、三次レプリカを更新することができる。二次レプリカは、第２のブロックストアサーバ（図示せず）に記憶される。図３Ａでは、一次レプリカのサーバ３１０を、更新３３０をロガーフリート３１５に伝播させるものとして示しているが、他の実施態様では、ロガーフリート３１５への更新３３０の伝播は、二次レプリカのサーバによって実行することができる。その理由は、二次レプリカは一次レプリカと同期的に保持されているためであり、たとえば、Ｉ／Ｏ操作３２５を処理するために、第１のサーバのより多くの帯域幅を保存することができる。
【００４８】
図２Ａに関して説明したように、分散された三次レプリカは、コンテナサーバ２２０上のコンテナＣ１〜Ｃｎ内のボリュームの数千または数百万のパーティションとして記憶される。しかしながら、この実施形態では、分散された三次レプリカは、一次レプリカからブロックレベルの更新を受信する。三次レプリカのパーティションの地理的な多様性によって、更新の複製のための待ち時間が二次レプリカで経験するよりも長くなり得るが、三次レプリカからの並列データ転送能力の向上を考慮すると、これは許容可能にすることができる。二次レプリカは同期的に（たとえば、一次レプリカへのデータの書き込みと同時に）複製されるが、三次レプリカへの更新は非同期的に（たとえば、一次レプリカへのデータの書き込み後に）複製することができる。たとえば、ユーザがスナップショットまたはクローンの作成を要求し、このために三次レプリカが使用される場合、更新を三次レプリカに伝播させて、最新にするようにすることができる。その後、スナップショットまたはクローンが三次レプリカから作成されている間に、三次レプリカを「凍結」することができる。凍結中、三次レプリカは、データをクローンまたはスナップショットに送信する間に、一次レプリカへの新しい書き込みを一時的に保持することができ、クローン作成またはスナップショット作成処理が完了した後、これらの更新を適切なパーティションに順番に書き込むことができる。
【００４９】
例示的な実施形態では、ロガーフリート３１５は、三次レプリカと一次レプリカとの間の仲介である。ロガーフリート３１５は、たとえば、１つまたは複数のコンピューティングサーバ１１５上で１つまたは複数のインスタンスとして動作するデータストリーム処理クライアントとすることができる。例示的には、ロガーフリート３１５は、ＡＭＡＺＯＮ  ＫＩＮＥＳＩＳ（商標）サービスまたはＡＰＡＣＨＥ  ＫＡＦＫＡ（商標）ソフトウェアを介して実装され得、それらの動作は当技術分野で知られている。ロガーフリート３１５を利用することにより、三次レプリカを最新に保つためのロジックを弾性ブロックストレージサーバ３１０からオフロードすることができ、ブロックストアサーバ３１０のメモリ使用を減らすことができる。例示的には、ロガーフリート３１５は、一次レプリカから更新を受信して、三次レプリカに順次的に適用する。ロガーフリート３１５は、一次レプリカから更新をプルし得、または一次レプリカは、更新をロガーフリート３１５にプッシュし得る。具体的には、ロガーフリート３１５は、ブロックストアサーバ３１０から更新３３０を受信し、次いで、これらの更新をコンテナＣ１〜Ｃｎの適切なものに伝播させる。コンテナサーバがダウンしている場合、ロガーフリート３１５なしで、一次レプリカの一部の実施形態は更新ログにバックアップし得、これにより、制御プレーン１５５がユーザＩ／Ｏ操作の減速を開始するトリガになり得る。有益なことに、図示の実施形態では、一次レプリカはその更新をロガーフリート３１５に送信することができ、ロガーフリート３１５は、それらをある期間（たとえば、２４時間）記憶することができる。ロガーフリート３１５は、この期間中に三次レプリカを更新することができる。ロガーフリート３１５はいくつかのワーカーを有することができ、各ワーカーは、ストリームを形成する逐次更新（たとえば、ボリュームへの更新の変更ログ）を受信し、更新を三次レプリカに伝播させる。一部の実施形態では、ロガーフリート３１５は、異なるボリュームのいくつかの三次レプリカを管理することができ、ログストリームは、これらの異なるボリュームへの逐次更新の変更ログを表すことができる。
【００５０】
代替の実施形態では、ロガーフリート３１５ではなく、マスタースレーブアーキテクチャを使用して、更新を三次レプリカにプッシュすることができ、ここで、一次レプリカはマスターであり、二次レプリカは更新を三次レプリカにプッシュするスレーブである。マスターは、三次レプリカの各パーティションが記憶された場所を知ることができ、また、これらのパーティションがどの程度最新であるかのログを保持することができる。マスターはスレーブを更新し得、スレーブは次いで更新を三次レプリカにプッシュすることができる。一次および／または二次レプリカは、三次レプリカへの書き込みの確認応答を受信することができる。対応する確認応答がない更新に対して、一次および／または二次レプリカは、その更新を三次レプリカの適切なパーティションに再送信することができる。
【００５１】
一部の実施形態は、ロガーフリート３１５をマスターとスレーブとの間に有益に配置して、マスターがロガーフリート３１５を更新し、ロガーフリート３１５がスレーブを更新するようにすることができる。マスターは、ロガーフリート３１５が更新を受信したことを確認すればよく、次いで、ロガーフリート３１５は、更新が三次レプリカによって受信されたことを確認する。マスタースレーブ手法と比較してロガーフリート３１５によって提供される１つの利点は、三次レプリカのより高度なパーティション分割および／または分散が可能になることである。マスターが更新を三次レプリカにプッシュしている場合、マスターは三次レプリカの全てのメタデータおよびロジックを内部に有する必要があり得る。
【００５２】
図３Ｂは、図３Ａの分散された三次レプリカを更新するための例示的な処理３２０のフローチャートである。処理３２０は、一部の実施形態では、弾性コンピューティングシステム１２０の制御プレーン１５５の制御下で実行することができる。
【００５３】
ブロック３２５において、ユーザは一次レプリカにおいてＩ／Ｏ操作を実行する。これは、たとえば、新しいデータの書き込み、既存のデータの変更、または既存のデータの削除を含む。
【００５４】
ブロック３３０において、一次レプリカは、この更新を上述のロガーフリート３１５に送信する。更新は、更新およびその他のコマンド（たとえば、スナップショットおよびクローンコマンド）のシーケンスを含むログストリームの一部とすることができる。ロガーフリート３１５には、順序通りでない更新を拒否するための知能を提供することができる。
【００５５】
ブロック３３５において、ロガーフリート３１５は、更新に対応するパーティションを記憶している任意のコンテナを識別する。これは、変更されたボリュームのブロックを識別し、分散ボリュームマニフェストでそれらのブロックに対応するパーティションを記憶しているコンテナを探すことを含む。
【００５６】
ブロック３４０において、ロガーフリート３１５は、更新をコンテナに送信して、更新に従って三次レプリカを更新する。これは非同期的に実行することができる。上述のように、三次レプリカの一部が利用不可能な場合、ロガーフリート３１５は、その部分が利用可能になるまでその更新を保持することができる。一部の例では、ユーザＩ／Ｏが最初の２つのレプリカへの帯域幅を使用している場合、一次および二次レプリカは、ユーザエクスペリエンスを維持するために、三次レプリカへの更新の伝播を遅らせることができる。
【００５７】
任意選択により、ブロック３４５において、ロガーフリートは更新ログをオブジェクトストレージ２１５にバックアップすることができる。これは、更新ログを使用して新しいボリュームを作成できるようにする際に、スナップショットバックアップと同様に機能することができる。そのため、一部の実施形態では、ボリュームのスナップショットが撮られた場合、オブジェクトストレージ２１５内の更新ログを消去することができ、その後、新しい更新ログをオブジェクトストレージに定期的にバックアップすることができる。更新ログを使用してスナップショットを更新することにより、新しいボリュームを作成することができる。そのため、更新ログをオブジェクトストレージ２１５に記憶することにより、スナップショットを単独で記憶するよりも粒度の細かいデータリカバリが提供される。上述のように、オブジェクトストレージサーバ１１０は、アベイラビリティゾーンにわたってバケットを複製するように構成することができ、一方、ブロックストアサーバ１０５は、アベイラビリティゾーン内のみでボリュームを複製し得る。したがって、更新ログをオブジェクトストレージ２１５にバックアップすることにより、アベイラビリティゾーンに障害が発生した場合でもユーザのデータが存続する可能性を高めることができる。
【００５８】
判定ブロック３５０において、ロガーフリート３１５は、ログストリームがスナップショット要求を含むか否かを判定する。スナップショット要求をログストリームの一部にして、これが三次レプリカに到達するまでに、三次レプリカがスナップショットに必要な更新を受信済みになるようにすることができる。スナップショット要求が存在する場合、ブロック３５５において、コンテナはそれらのパーティションをオブジェクトストレージ２１５にプッシュして、スナップショット要求時に三次レプリカのスナップショットを作成する。たとえば、一次レプリカはスナップショット要求をログストリームに挿入することができる。ロガーフリート３１５内の各ロギングマシンは、メッセージを三次レプリカのパーティションに伝播させ、三次レプリカは、パーティション内のデータをオブジェクトとしてオブジェクトストレージ２１５に並列に記憶することができ、それによってスナップショットの迅速な作成が容易になる。このスナップショット作成の並列化により、一次または二次レプリカが同じ量のデータをオブジェクトストレージ２１５にプッシュするのを待つよりもはるかに迅速にスナップショットを作成することができる。あるいは、スナップショット要求がログストリーム内にない場合、処理はブロック３６０に移行する。
【００５９】
判定ブロック３６０において、ロガーフリート３１５は、ログストリームがチェックポイント要求を含むか否かを判定する。含む場合、ブロック３６５において、コンテナを使用して、処理２３０に関して上述したように、その瞬間でのボリュームを表す新しい三次レプリカを作成する。たとえば、一次レプリカはチェックポイント要求をログストリームに挿入することができる。次いで、ロガーフリート３１５は、そのチェックポイント要求を三次レプリカの全てのパーティションに送信することができる。次いで、三次レプリカの各パーティションは、データを同じまたは他のコンテナ内の新しいパーティションにプッシュして、三次レプリカの追加のポイントインタイムのコピーを作成することができる。
【００６０】
三次レプリカからの例示的なクローン生成の概要
図４Ａは、弾性コンピューティングシステム１２０において分散された三次レプリカからボリュームのクローンを作成する概略図４００を示している。本明細書に記載のように、三次レプリカは、その高度に分散された性質により、高度な並列性をサポートし、所与のボリュームの多数のデータを同時に転送することができる。クローンは、決定された数のパーティション４０５（「ジオメトリ」）を有するターゲットボリューム４０１として作成される。パーティション４０５は、上述のブロックストアサーバ１０５のうちの１つまたは複数に記憶することができる。
【００６１】
図４Ａのインタラクションのさらなる説明を、図４Ｂを参照して行う。具体的には、図４Ｂは、図４Ａに応じた分散された三次レプリカ内に記憶された情報に基づく（たとえば、ボリュームの一次および二次レプリカとしての）新しいデータボリュームのクローン作成のための例示的な処理のフローチャートである。処理４１０は、一部の実施形態では、弾性コンピューティングシステム１２０の制御プレーン１５５の制御下で実行することができる。
【００６２】
ブロック４１５において、制御プレーン１５５は、パーティション４０５上にターゲットボリューム４０１を作成する。ターゲットボリューム４０１とは、三次レプリカを使用して作成される新しいボリュームを指す。
【００６３】
ブロック４２０において、制御プレーン１５５は、分散ボリュームマニフェストをオブジェクトストレージ２１５からフェッチし、マニフェスト（またはマニフェストの一部）をターゲットボリュームパーティション４０５に記憶する。上述のように、分散ボリュームマニフェストは、三次レプリカのパーティションごとにパーティションＩＤをコンテナＩＤにマッピングする。一部の実施態様では、ターゲットボリュームパーティションに書き込まれる三次レプリカパーティションのコンテナ位置を識別する分散ボリュームマニフェストの関連するサブセットを、ターゲットボリューム４０１の各パーティションに提供することができる。
【００６４】
ブロック４２５において、ターゲットボリュームの各パーティションは、関連するコンテナから、分散ボリュームマニフェストの関連する部分にリストされたパーティションのデータを取り出す。「取得（ｇｅｔ）」障害が発生した場合、すなわち、ボリュームのユーザが、ターゲットボリュームにまだ取り出されていないパーティションのデータにアクセスしようとした場合、ターゲットボリューム４０１は、そのパーティションをホストするコンテナに対して取得を実行することができる。図４Ａは、三次レプリカの単一のパーティションの、ターゲットボリューム４０１の対応するパーティション４０５への単一のフェッチを示しており、そのようなフェッチは、例示的には、三次レプリカの必要な各パーティションがフェッチされるまで繰り返すことができる。図４Ａは、各コンテナサーバ２２０からパーティション４０５の１つに至る単一の矢印を示しているが、これは図の単純化および明確化を目的としたものであり、各パーティションはコンテナサーバ２２０のうちのいくつかまたは全てからデータを受信し得ることは理解されよう。コンテナが応答しない場合、ターゲットボリューム４０１は、図２Ａおよび図２Ｂに関して説明したオブジェクトストレージマニフェストを使用して、オブジェクトストレージから分散ボリュームマニフェスト内で識別されたパーティションのデータを取り出すことができる。
【００６５】
ブロック４２５において、ターゲットボリューム４０１は、新しいボリュームの作成が完了すると、オブジェクトストレージ２１５に合図する。
【００６６】
三次レプリカからの例示的なスナップショット生成の概要
図５Ａは、弾性コンピューティングシステム１００において分散された三次レプリカからボリュームのスナップショットバックアップを生成する概略図を示している。上述のように、スナップショットは、オブジェクトストレージ２１５内のボリューム上のデータのコピーとして（たとえば、単一のオブジェクトまたはオブジェクトの集合体として）記憶される、ボリュームのポイントインタイムのブロックレベルのバックアップである。一部の実施態様では、スナップショットはボリューム内のデータの増分レコードとして実装され、ボリュームの最初のスナップショットが撮られる場合、有効なデータを含むボリュームの全てのブロックが１つまたは複数のオブジェクトとしてオブジェクトストレージ２１５にコピーされ、同じボリュームの後続のスナップショットが撮られる場合、最初のスナップショット以降に変更されたブロックのみをオブジェクトストレージ２１５にコピーすればよい。スナップショットを作成する場合、スナップショットが開始される時刻までにボリュームに書き込まれたあらゆるデータをスナップショットに含めることができ、ユーザはスナップショットの作成中に、スナップショットに影響を与えることなく、自身のボリュームへのＩ／Ｏ操作を引き続き実行することができる。
【００６７】
三次レプリカの高度に分散された性質は、ボリュームの多数の部分を同時に転送できる高度な並列性をサポートし、オブジェクトストレージ２１５でのバックアップの迅速な作成をサポートする。図示のように、ユーザは、クライアント３０５から（１つまたは複数のブロックストアサーバ３１０に記憶された）一次レプリカにスナップショット要求５１０を行うことができ、今度は一次レプリカが、コンテナサーバ２２０に記憶された三次レプリカのパーティションに、スナップショットバックアップを作成するためのデータをオブジェクトストレージ２１５に送信する命令を送信する。図３Ｂのブロック３５０および３５５に関して上述したように、スナップショット作成処理は、一部の実施態様では、スナップショット要求を更新ストリーム内で三次レプリカに渡すロガーフリート３１５を含むことができる。
【００６８】
図５Ａのインタラクションのさらなる説明を、図５Ｂおよび図５Ｃを参照して行う。具体的には、図５Ｂおよび図５Ｃは、図５Ａに応じた分散された三次レプリカからのスナップショット生成のための例示的な処理５０５Ａ、５０５Ｂの２つの実施態様のフローチャートである。処理５０５Ａ、５０５Ｂの共通のブロックについては以下で一緒に説明し、処理５０５Ａ、５０５Ｂの異なるブロックに向けた説明は個別に行う。処理５０５Ａ、５０５Ｂは、一部の実施形態では、弾性コンピューティングシステム１２０の制御プレーン１５５の制御下で実行することができる。
【００６９】
図５Ｂおよび図５Ｃの両方を参照すると、ブロック５１０において、自身のボリュームのスナップショットを作成するためのユーザ要求が、クライアント３０５から、一次レプリカをホストするブロックストアサーバ３１０において受信される。上述のように、スナップショットは、オブジェクトストレージサーバ１１０に記憶されたボリュームのデータのバックアップコピーであり、これにより、アベイラビリティゾーンにわたってデータを自動的に複製するためのオブジェクトストレージサーバ１１０の構成によって、ブロックストアサーバ１０５に記憶されたコピーと比較して、より大きなフォールトトレランスの利点を提供することができる。そのため、一部のユーザは、オブジェクトストレージ２１５内の自身のデータの更新されたバックアップを保つために頻繁なスナップショットを要求し、そのようなスナップショットを作成するために高い帯域幅の使用量が必要となる。
【００７０】
ブロック５１５において、一次レプリカをホストするブロックストアサーバ３１０のセットは、コンテナサーバ２２０に記憶された三次レプリカのパーティションにスナップショット要求を伝播させる。一部の実施形態では、一次レプリカのブロックストアサーバ３１０は、二次レプリカをホストするブロックストアサーバ３１０にこのタスクをオフロードし得る。上述のように、一部の実施態様では、スナップショット作成は、最後のバックアップ以降に更新を受信したボリュームの一部のみがオブジェクトストレージに送信される増分処理とすることができる。増分スナップショットの実施態様では、一次レプリカをホストするブロックストアサーバ３１０はまた、バックアップマップを保持し、このバックアップマップをスナップショット要求と共に送信することができる。バックアップマップは、ボリュームの前のスナップショット（たとえば、直前のスナップショット）以降に変更されたボリュームの部分（たとえば、ブロック、ブロックの集合体など）のマッピングまたはリスト化を指す。スナップショットが作成されると、ブロックストアサーバ３１０は、各部分が最後のスナップショット以降に変更されていないことを反映するように、バックアップマップを変更することができる。ユーザがボリュームの一部を変更すると、一次レプリカをホストするブロックストアサーバ３１０のうちの１つまたは複数（または弾性コンピューティングシステム内の他のコンピューティングデバイス）は、そのようなブロックが前のスナップショット以降に変更されたことを反映するように、バックアップマップを変更することができる。三次レプリカパーティションをホストするコンテナサーバ２２０は、バックアップマップを使用して、このスナップショット要求に応答してオブジェクトストレージ２１５に送信されるべき部分（たとえば、前のスナップショット以降に変更された部分）を識別することができる。
【００７１】
三次レプリカをホストするコンテナサーバ２２０がスナップショット要求を受信した後、図５Ｂおよび図５Ｃのサブ処理５２０Ａおよび５２０Ｂによって反映される、２つの異なる処理の実施態様のうちの１つを実行することができる。特に図５Ｂに目を向けると、サブ処理５２０Ａは、三次レプリカから直接スナップショットを作成する処理５０５Ａの第１の実施態様を反映している。
【００７２】
特に図５Ｂを参照すると、ブロック５４０において、コンテナサーバ２２０は、三次レプリカのパーティションのデータをオブジェクトストレージ２１５に送信する。コンテナサーバ２２０は、これらのパーティションの一部または全部のデータをオブジェクトストレージ２１５に並列に送信することができる。図５Ａでは、オブジェクトストレージ２１５は単一のオブジェクトとして示しているが、オブジェクトストレージ２１５は、実際には、コンテナサーバ２２０への複数の物理的接続を有する分散システムによって表され得る。したがって、三次レプリカのパーティションのデータは、多数の異なる物理接続に沿って送信することができる。たとえば、各データ転送は個別のＨＴＴＰ接続であり得る。有益なことに、開示した三次レプリカのアーキテクチャは、ソース側（たとえば、コンテナサーバ２２０）と、宛先側（たとえば、オブジェクトストレージ２１５）との両方の高帯域幅を提供する。より多くの物理的接続からのより広い帯域幅に加えて、三次レプリカの開示した使用は、各デバイスがオブジェクトストレージ２１５への接続のごく一部を保持すればよいので、各コンテナサーバ２２０への並列化のメモリ要求を減らすことができる。
【００７３】
有益なことに、この技法は、一次および二次レプリカのより限られた数のパーティションから同じデータを送信する場合に比べて、スナップショットを作成する時間を短縮することができ、また、継続したユーザＩ／Ｏ操作を処理するために一次および二次レプリカのデータ伝送帯域幅を解放する。実際には、それほどパーティション分割されていない一次または二次レプリカを使用するのではなく、高度にパーティション分割された三次レプリカを使用してスナップショットを生成することにより、スナップショットをオブジェクトストレージ２１５に書き込むのに必要な時間を大幅に短縮することができ、たとえば、スナップショットを書き込むのに必要な時間が、（たとえば、それほどパーティション分割されていないレプリカから書き込む場合の）１０時間から、たった１時間に短縮される。
【００７４】
図５Ｂを引き続き参照すると、三次レプリカからスナップショットが作成されている間に一次レプリカでユーザＩ／Ｏ操作が継続されている場合、ブロック５４５において、三次レプリカの特定のパーティションに必要な更新は、たとえば、ロガーフリート３１５または更新スレーブ（たとえば、二次レプリカ）によって保持することができる。更新は、スナップショット全体が完了するまで、またはそのような更新用に指定されたパーティションがオブジェクトストレージ２１５へのデータの転送を完了するまで、保持することができる。
【００７５】
ここで図５Ｃに目を向けると、ブロック５２０Ｂは、三次レプリカのポイントインタイムのコピー（「追加の三次レプリカ」と呼ぶ）を作成する処理５０５Ｂの第２の実施態様を反映している。追加の三次レプリカは、スナップショット要求時のボリュームのデータを表すが、元の三次レプリカは、一次レプリカへの書き込みに基づいて引き続き更新することができる。
【００７６】
図５Ｃを引き続き参照すると、ブロック５２５において、コンテナサーバ２２０は、三次レプリカのパーティションをコピーして、追加の三次レプリカを作成する。たとえば、三次レプリカの各パーティション（またはバックアップマップ内のブロックに対応するサブセット）は、元のパーティションと同じコンテナ、または異なるコンテナにコピーすることができる。これらの追加の三次レプリカのパーティションコピーは、一次レプリカでのユーザＩ／Ｏ操作に基づいて（少なくともオブジェクトストレージ２１５内のスナップショットにデータを送信している期間中に）それ以上の更新を受信せず、コピーがスナップショット要求時のデータのボリュームを反映するようにする。
【００７７】
ブロック５２５から、処理５０５Ｂはブロック５３０に移動し、追加の三次レプリカのパーティションがそれらのデータをオブジェクトストレージ２１５に送信する。これらのパーティションの一部または全部は、それらのデータをオブジェクトストレージ２１５に並列に送信して、図５Ｂのブロック５４０に関して説明したものと同様の利点を提供することができる。
【００７８】
スナップショットが作成されている間に一次レプリカでのユーザＩ／Ｏ操作が継続されている場合、ブロック５３５において、元の三次レプリカのコピーのパーティションをユーザＩ／Ｏ操作に応じて更新することができる。有益なことに、追加の三次レプリカを使用してスナップショットの作成をサポートする手法は、元の三次レプリカのコピーを解放して、たとえば、図３Ａおよび図３Ｂに関して説明したように、継続的なユーザＩ／Ｏ操作による更新の受信を継続する。その理由は、スナップショットのためにボリュームデータをオブジェクトストレージ２１５に送信するために、元の三次レプリカのコピーのパーティションが必要ないためである。
【００７９】
図５Ｃのブロック５３５または図５Ｂの５４５から、処理５０５Ａ、５０５Ｂはブロック５５０に移行し、データ転送が完了したときに、三次レプリカ（またはそのコピー）のパーティションは一次レプリカに合図する（５５０）。次いで、一次レプリカは、ボリュームの各ブロック（または他の何らかの部分）がオブジェクトストレージ２１５のどこに記憶されているかを示すオブジェクトマニフェストを作成することができる。オブジェクトマニフェストに関して、各コンテナＣ１〜Ｃｎまたはコンテナサーバ２２０は、オブジェクトストレージ２１５内でボリュームデータの各オブジェクト表現をどこに配置したかを知ることができる。したがって、マニフェストの作成を制御するサーバ（たとえば、一次レプリカを制御するサーバ）は、それぞれのコンテナサーバからそれらの場所を収集して、ボリュームの各部（たとえば、ブロック）をオブジェクトストレージ２１５内のオブジェクトにマッピングするデータファイルにまとめることができる。
【００８０】
上述のように、増分スナップショット作成が使用される場合、マニフェストは以前のスナップショットを参照することもできる。したがって、たとえば、マニフェストは、前のマニフェスト内で識別されたブロック１〜４３３の場所を示し得る、その前のマニフェストはさらに古いマニフェストを参照し得る、などである。あるいは、マニフェスト作成デバイスは、前のマニフェストから変更されていないブロックのオブジェクト表現の場所を現在のマニフェストに直接組み込んで、単一のマニフェストファイルがボリュームデータの各部の場所を含むようにし得る。
【００８１】
任意選択により、一部の実施態様では、処理５０５の間に追加の三次レプリカが作成された場合、この時点で、その追加の三次レプリカは削除され得る。他の実施態様では、その追加の三次レプリカを一定期間保持して、たとえば、ユーザがそれからボリュームの新しいクローンを作成できるようにし得る。そのため、処理５０５は、クライアント５０５からのクローン作成命令をチェックすること、および／または追加の三次レプリカを削除する前に、そのような指示をある所定の時間待機することを含むことができる。
【００８２】
処理５０５Ａ、５０５Ｂは、単一のスナップショットに関して説明しているが、それらは、たとえば、ユーザが毎回の書き込み後にスナップショットを要求する場合に、同時にまたは少なくとも部分的に同時並行的に何度も実装され得る。そのような実施態様では、処理５０５Ａ、５０５Ｂの１回の反復は第１のスナップショットを作成し得、他の反復は第２のスナップショットを作成している、などのようにし得る。
【００８３】
ロギングフリートを実装する実施形態の概要
図６〜図９Ｂを参照して、ロガーフリート３１５を実装する本開示の例示的な実施形態について説明する。上記のように、ロガーフリート３１５は、一部の実施形態では、三次レプリカを更新する機能が一次または二次レプリカを実装するデバイスなどからオフロードされるように、分散された三次レプリカの非同期更新を容易にし得る。ロガーフリート３１５は、追加的または代替的に、ボリュームへの変更の記録をメッセージのストリーム（たとえば、各メッセージはボリュームへの変更を反映する）として保持するなどの他の機能を提供し得る。以下で説明するように、ボリュームのメッセージストリームを保持することにより、いくつかの利点が提供され得、（たとえば、ストリームのメッセージに反映された変更を戻すことに基づいて、ボリュームを以前の時間に「巻き戻す」ことによって）ボリュームをメッセージストリーム内に反映された任意の以前の状態に戻すことができる。
【００８４】
図６を参照すると、ロガーフリートがボリュームへの変更を反映するメッセージのストリームを保持することを可能にする例示的なインタラクション６００が示されている。図６のインタラクションは（１）から始まり、ここで、クライアント３０５は、ボリュームの１つまたは複数のレプリカ（たとえば、一次および／または二次レプリカ）を実装するブロックストアサーバ３１０に書き込み操作を送信する。ボリュームは、仮想化されたストレージデバイス（たとえば、ハードディスクドライブまたはソリッドステートディスクドライブ）としてクライアントデバイス３０５に提示され得るので、書き込み操作は、多様なものが当技術分野で知られているいくつかのバスインターフェースプロトコルのいずれかに従って、ブロックストアサーバ３１０に送信され得る。たとえば、クライアント３０５の書き込み操作は、シリアルＡＴアタッチメント（ＳＡＴＡ）データパケットとしてフォーマットされ得る。上記のように、「書き込み操作」という用語は、本開示内では、ターゲットボリュームへの変更を反映することを意図しており、したがって、新しいデータの書き込み、既存のデータの変更、データの削除、またはサーバ３１０に実装されたボリュームの内容の別の方法での変更の操作を含み得る。
【００８５】
書き込み操作を受信した後、ブロックストアサーバ３１０は、受信した操作を利用して、書き込み操作に対応するメッセージを生成して、ボリュームに対応するメッセージストリームに含め得る。（なお、ブロックストアサーバ３１０は、書き込み操作に従って、一次および／または二次レプリカなどのボリュームのレプリカを変更するための書き込み操作を追加的に処理し得ることに留意されたい。ネットワークベースのストレージデバイスでの書き込み操作の一般的な実装は当技術分野で知られているので、これらのインタラクションは本明細書では説明しない。）一実施形態では、ボリュームは単一のメッセージストリームに関連付けられ、ボリュームへの全ての書き込み操作が、単一のメッセージストリーム内のメッセージとして含まれるようになる。他の実施形態では、ボリュームは複数のメッセージストリームに関連付けられ、ボリュームへの書き込み操作が、メッセージストリーム間で分割されるようになる。そのような分割は、たとえば、ボリュームの一次レプリカおよび／または二次レプリカのパーティション分割に基づき得る。例示的には、一次および／または二次レプリカが１６個のパーティションに分割される場合、ロガーフリート３１５を利用して、ボリュームに対して１６個のメッセージストリームを保持し得、各メッセージストリームは、１６個のパーティションの個々のパーティションに関連する書き込み操作を反映するメッセージを含む。ストリーム間の書き込み操作の他の分割が考えられる。たとえば、書き込み操作は、負荷分散アルゴリズム（たとえば、ラウンドロビン分割など）を介して異なるメッセージストリーム間で分割することができる。複数のメッセージストリーム間の書き込み操作の分割は、たとえば、各ストリームを保持する際のメモリ要求を低減し、ロガーフリート３１５での並列化を可能にし、（たとえば、書き込み操作が適用されたパーティションの知識に基づいて）メッセージストリーム内で特定の書き込み操作を見つけるのに必要な時間を減らすのに有益であり得る。以下のインタラクションは、複数のメッセージストリームを使用してボリュームへの書き込み操作のログを保持することを参照して例示的に説明しており、各メッセージストリームは、ボリュームの一次および／または二次レプリカのパーティションに対応する。しかしながら、単一のメッセージストリームが利用される場合、または書き込み操作が適用されるパーティション以外の基準に従ってメッセージストリームが分割される場合（たとえば、負荷分散分割）、同様のインタラクションが実装され得る。
【００８６】
したがって、（２）において、ブロックストアサーバ３１０は、書き込み操作によって変更された（たとえば、一次および／また二次レプリカの）ボリュームのパーティションを特定する。追加的に、（３）において、ブロックストアサーバ３１０は、適切なメッセージストリームに含まれる書き込み操作を反映するメッセージを生成する。メッセージは、たとえば、書き込み操作（たとえば、書き込み操作を表すＳＡＴＡデータパケット）の内容の記録、ならびに、後で書き込み操作を再現するために必要なまたは使用可能な追加のメタデータ、たとえば、書き込み操作が適用される特定のブロックアドレス、書き込み操作の時間、書き込み操作を送信したクライアント３０５の識別情報、書き込み操作が適用されるボリュームの識別子、ブロックストアサーバ３１０によって書き込み操作に割り当てられるシーケンス番号などを含み得る。メッセージは任意の既知のメッセージングプロトコルに従ってフォーマットされ得る。たとえば、メッセージは、メッセージキューイングテレメトリトランスポート（ＭＱＴＴ）フォーマットに従ってフォーマットされ得、ＡＰＡＣＨＥ  ＫＡＦＫＡ（商標）ソフトウェアを実装するサーバで使用するようにフォーマットされ得、ＡＭＡＺＯＮ  ＫＩＮＥＳＩＳ（商標）サービスによって提供されるストリームに含めるようにフォーマットされ得る。
【００８７】
（４）において、ブロックストアサーバ３１０は、（ボリュームへの書き込み操作を反映する）メッセージをロガーフリート３１５に送信して、書き込み操作が適用される一次および／または二次レプリカのパーティションに対応するストリームに含める。図６に示すように、ロガーフリート３１５は、いくつかのパーティションストリーム６０８Ａ〜６０８Ｎを保持し得、各パーティションストリームは、たとえば、一次および／または二次レプリカの異なるパーティションに対応し得る。図６の例示的な例では、書き込み操作がボリュームの第２のパーティションを変更したことなどを反映する書き込みメッセージが、パーティションストリーム６０８Ｂに送信される。（５）において、ロガーフリート３１５は、メッセージをストリーム６０８Ｂにエンキューする。ロガーフリート３１５は、一部の実施形態では、メッセージを記憶するために冗長サーバを利用することなどによって、フリート３１５の様々な障害に対する回復力を確保する機能を実装し得る。一実施形態では、ロガーフリート３１５は、キュー内の各メッセージを「１回だけ」または「少なくとも１回」各受信者に配信するように構成される。例示的には、「１回だけ」の機能は、書き込み操作が冪等ではなく、同じ書き込み操作を複数回適用しても、書き込み操作が適用されるブロックに関して常に同じ状態になるとは限らない場合に有益であり得る。「少なくとも１回」の機能は、たとえば、書き込み操作が冪等である（たとえば、同じブロックに同じ操作を適用すると、操作の繰り返しに関係なく、常にブロックの状態が同じになる）場合に使用され得、ロガーフリート３１５のコンピューティングリソースの削減に関連し得る。「少なくとも１回」の機能を実装するロガーフリート３１５の１つの例示的な実装は、「ＦＡＳＴ  ＳＥＱＵＥＮＴＩＡＬ  ＭＥＳＳＡＧＥ  ＳＴＯＲＥ」と題された米国特許第８，２６１，２８６号に記載されており、その全体が引用により本明細書に組み込まれている。
【００８８】
以下で説明するように、ロガーフリート３１５は、各ストリーム６０８内のメッセージを様々な受信者に配信するように構成することができる。たとえば、ロガーフリート３１５は、分散された三次レプリカにメッセージを配信して、メッセージに反映された書き込み操作に従って、三次レプリカが一次および／または二次レプリカの状態に非同期的に更新されることを可能にし得る。他の例として、ロガーフリート３１５は、メッセージをオブジェクトストレージ２１５に配信して、そのようなオブジェクトストレージ２１５が、長時間にわたってボリュームへの書き込み操作の記録を保持することを可能にし得る。例示的には、ロガーフリート３１５は、所与のストリーム内のメッセージが各受信者において正しい順序で受信されるようなメッセージの順序付けを強制し得る。一実施形態では、「正しい順序」は、ロガーフリート３１５でのメッセージのエンキューに基づいて確立される（たとえば、メッセージが、受信されたのと同じ順序で受信者に配信されるようになる）。他の実施形態では、「正しい順序」は、メッセージ自体の内容に基づいて確立される。たとえば、メッセージがシーケンス番号を示すメタデータを含む場合、シーケンス番号は、ストリーム内のメッセージの正しい順序を確立するためにロガーフリート３１５によって利用され得る。場合によっては、ロガーフリート３１５は、メッセージの受信順序をメッセージの内容と同期させるように構成され得る。たとえば、ロガーフリート３１５は、順番に並んだシーケンス番号（たとえば、増加する番号、減少する番号、増加する隣接した番号、減少する隣接した番号など）を有するメッセージのみを受け入れ、順序通りでないシーケンス番号を含むメッセージが受信された場合に、送信側デバイスに通知するように構成され得る。
【００８９】
図６のインタラクションは、書き込み操作に関して上述しており、ボリュームへの他の操作は、追加的または代替的に、ボリュームのメッセージストリーム内に含まれ得る。たとえば、所与の時点でのボリュームの状態を反映するファイルの作成を要求する「スナップショット」操作が、メッセージストリームのメッセージ内に反映され得る。例示的には、スナップショットメッセージは、ボリュームの各メッセージストリームに含まれ得、ボリュームの三次レプリカのパーティションを保持する各デバイスは、スナップショットメッセージの受信時に、スナップショットの関連部分をオブジェクトストレージ２１５内のファイルとして生成するように構成され得る。三次レプリカからのスナップショットの作成については、以下で詳細に説明する。一部の実施形態では、メッセージストリーム内に含まれるスナップショットメッセージは、オブジェクトストレージ２１５上のスナップショットの場所を示し得る。以下で説明するように、これにより、デバイスが、メッセージストリーム内で識別される書き込み操作と共に、メッセージストリーム内で識別されるスナップショットを使用して、あの時点でのボリュームの状態を再現できるようにすることによって、その時点でのボリューム状態の再現が容易になり得る。
【００９０】
図７を参照して、ロガーフリート３１５におけるメッセージストリーム内のメッセージを使用して、分散された三次レプリカの非同期更新を可能にする例示的なインタラクション７００を説明する。図７のインタラクションは、たとえば、図６のインタラクションの後に、および／または図６のインタラクションと同時並行的に（たとえば、図６のインタラクションが複数の書き込み操作に対して繰り返される場合）発生し得る。
【００９１】
図７のインタラクションは（１）から始まり、ここで、ロガーフリート３１５は、受信者にまだ配信されていないメッセージがメッセージストリーム内に存在することを検出する。具体的には、図７のインタラクションにおいて、ロガーフリート３１５は、関連するコンテナサーバ２２０にまだ配信されていないメッセージがパーティションストリーム６０８Ｂ内に存在することを検出することができる。関連するコンテナサーバ２２０は、たとえば、メッセージによって表される書き込み操作が適用されるボリュームの三次レプリカのパーティションを実装するサーバ２２０に対応することができる。一実施形態では、ロガーフリート３１５は、ストリームごとに、ストリームの受信者のリスト、ならびに受信者がストリーム内のメッセージを受信したことを示す確認応答のリストを保持し得る。したがって、インタラクション（１）は、ストリーム６０８Ｂ内のメッセージがストリーム６０８Ｂの受信者によってまだ確認応答されていないことを検出することによって実施され得る。一実施形態では、ストリームの受信者は、メッセージ内に含まれる書き込み操作に少なくとも部分的に基づいて決定され得る。たとえば、メッセージ内に反映された書き込み操作がボリューム内の特定のブロックオフセットに適用される場合、メッセージの受信者は、そのブロックオフセットに対応する三次レプリカのパーティションを保持するサーバ２２０に基づいて決定され得る。一部の実施形態では、ロガーフリート３１５は、パブリッシュ／サブスクライブ（「ｐｕｂ／ｓｕｂ」）モデルに従って動作するように構成され、各コンテナサーバ２２０は、ロガーフリート３１５のストリーム６０８の関連部分を「サブスクライブ」して、サーバ２２０がストリーム６０８のそのような部分の受信者であることをロガーフリート３１５に通知するように構成される。他の実施形態では、ロガーフリート３１５は、（たとえば、ボリュームの一次および／または二次レプリカを実装するサーバ３１０によって）どのコンテナサーバ２２０が三次レプリカのどのパーティションを保持しているかについて通知され、そのような通知に基づいて各メッセージの受信者を決定する。
【００９２】
受信者に配信すべきメッセージがストリーム内に存在すると判定した後、ロガーフリート３１５は、（２）において、メッセージを受信者コンテナサーバ２２０に送信する。次いで、コンテナサーバ２２０は、（３）において、メッセージを利用して、書き込み操作を生成し、書き込み操作に従ってボリュームの三次レプリカのパーティションを変更することができる。たとえば、コンテナサーバ２２０は、一部の実施形態では、メッセージ内の情報を利用して、書き込み操作を表す最初のＳＡＴＡデータパケットを再現し、書き込み操作が適用される三次レプリカの関連するパーティションに関してそのＳＡＴＡデータパケットを適用し得る。したがって、ボリュームの三次レプリカは、一次および／または二次レプリカに適用済みの書き込み操作と非同期的に更新され得る。上記のように、場合によっては、メッセージは書き込み操作以外の操作を含み得る。たとえば、メッセージは、スナップショットのためのクライアント要求を示し得る。そのような場合、サーバ２２０は、（たとえば、図５Ａから図５Ｃに関して）上述したように、ボリュームのスナップショットの作成を開始することによって、メッセージを処理し得る。
【００９３】
図７は単一の受信者への単一のメッセージの送信を示しているが、ロガーフリート３１５は、任意の数の受信者への任意の数のメッセージの配信を容易にするように機能し得る。一実施形態では、ロガーフリート３１５は、（たとえば、ストリームのサブスクリプションによって識別される）各受信者にメッセージを、そのストリームに関して順番に送信して、メッセージがストリームにエンキューされた順序に関して「先入れ先出し」（ＦＩＦＯ）順序でメッセージが送信されるようにする。ＦＩＦＯ順序を使用することにより、たとえば、三次レプリカと一次および／または二次レプリカとの整合性を維持することができる。
【００９４】
一部の実施形態では、ロガーフリート３１５は、各パーティションストリーム６０８のサイズを監視して、未処理のメッセージ（たとえば、各受信者によって確認応答されていないもの）が閾値量を超えないことを確実にすることが可能になり得る。例示的には、ロガーフリート３１５は、メッセージを受信時にエンキューし、メッセージの各受信者によって確認応答されたときに、メッセージに確認応答済みとしてマークし得る。しかしながら、受信者が（たとえば、エラー、ハードウェア障害などによって）メッセージの確認応答に失敗した場合、キュー内の確認応答されていないメッセージの数が閾値サイズを超え得る。そのような場合、ロガーフリート３１５は、ストリームにメッセージを書き込むための後続の要求を拒否することなどによって、そのような失敗をブロックストアサーバ３１０に通知するように構成され得る。今度はブロックストアサーバ３１０が、クライアントデバイス３０５からの書き込み操作を拒否し、または別の方法で、そのような書き込み操作がボリュームの三次レプリカに書き込まれないことを示し得る。
【００９５】
図８を参照して、メッセージストリーム内のメッセージの記録をオブジェクトストレージ２１５に書き込むための例示的なインタラクション８００を説明する。そのようなメッセージの記録を利用して、たとえば、ボリュームのメッセージストリーム内に反映された任意の時点でのボリュームの状態を再現し得る。図８の例示的なインタラクションを、単一のメッセージストリーム、パーティションストリーム６０８Ｂに関して説明する。しかしながら、ボリュームの任意のメッセージストリームに関して、同様のインタラクションが実施され得る。
【００９６】
図８のインタラクションは（１）から始まり、ここで、ロガーフリート３１５はキュー収集イベントを検出する。キュー収集イベントは、例示的には、メッセージストリーム（たとえば、ストリーム６０８Ｂ）内のイベントがデキューされ、オブジェクトストレージ２１５に（たとえば、長期保存のために）送信されるべきであるということを示す任意のイベントに対応する。一実施形態では、キュー収集イベントは、ストリーム内のメッセージの数が、（たとえば、ロガーフリート３１５の管理者によって設定される）閾値数を超えて増大したことに対応する。他の実施形態では、キュー収集イベントは、ストリームのメッセージ内のスナップショット操作の検出に対応する。さらに他の実施形態では、キュー収集イベントは、前のキュー収集イベント以降の閾値期間（たとえば、２４時間）の経過に対応する。
【００９７】
キュー収集イベントを検出すると、ロガーフリート３１５は、（２）において、ストリーム６０８Ｂ内のメッセージをオブジェクトストレージ２１５に書き込まれるデータオブジェクトへとバンドル、収集、または別の方法でまとめ、このデータオブジェクトは、本明細書では、「バンドルオブジェクト」と呼ぶ。バンドルオブジェクトは、バンドルオブジェクトの生成時のストリーム内のメッセージを識別する任意のデータオブジェクトであり得る。たとえば、バンドルオブジェクトはＺＩＰファイルまたはその他の圧縮データファイルであり得る。一実施形態では、ロガーフリート３１５は、バンドルオブジェクト内に、全ての受信者（たとえば、コンテナサーバ２２０）によって確認応答されたメッセージのみを含める。次いで、ロガーフリート３１５は、（３）において、バンドルオブジェクトをオブジェクトストレージ２１５内に記憶する。以下で説明するように、バンドルオブジェクトは、バンドルオブジェクト内のメッセージによって反映される期間にわたってボリュームに対して実行された書き込み操作の記録として、後でオブジェクトストレージ２１５から取り出され得る。メッセージはオブジェクトストレージ２１５に記憶されているので、ロガーフリート３１５は、その後、（４）において、パーティションストリーム６０８Ｂからバンドルオブジェクトのメッセージをデキューして、後続のメッセージのためにストリーム内のスペースを解放し得る。
【００９８】
パーティションストリーム６０８Ｂからのメッセージのデキューは、定期的な操作（たとえば、キュー収集イベントが受信されたとき）として上述しているが、ロガーフリート３１５の一部の実施形態は、代わりにメッセージを、全ての受信者によって確認応答されたときにデキューし得る。例示的には、オブジェクトストレージ２１５は、オブジェクトまたはオブジェクトの集合体への個々のメッセージの書き込みを可能にし得、オブジェクトストレージ２１５は、ボリュームの各メッセージストリームの受信者として構成され得る。したがって、ロガーフリート３１５は、他の受信者（たとえば、コンテナサーバ２２０）と同一または類似の方法でオブジェクトストレージ２１５にメッセージを送信するように構成され得る。そのような場合、オブジェクトストレージ２１５を含む全ての受信者からの受信の確認応答の後に、メッセージがメッセージストリームからデキューされ得る。
【００９９】
図９Ａおよび図９Ｂを参照して、ボリュームへの書き込み操作を反映するメッセージのストリーム（またはそのようなストリームのログ）を参照することによって、ある時点でのボリュームの状態を再現するための例示的なインタラクションを説明する。具体的には、上記で論じたように、ボリュームへの変更がボリュームのメッセージのストリーム内に反映されている場合、そのようなメッセージのストリームを使用して、メッセージのストリーム内に反映された任意の時刻のボリュームの状態を再現し得る。特定の時点でのボリュームの状態を再現するための例示的なインタラクション９００を図９Ａに示しており、特定の時点でのボリュームの状態を再現するための例示的なルーチン９０１を図９Ｂに示している。ルーチン９０１は、たとえば、第２のボリュームの状態が再現される第１のボリュームを保持するデバイスによって実行され得る。第１および第２ボリュームは同じボリュームであり得、したがって、クライアントはボリュームへの操作を「巻き戻し」て、そのボリュームを以前の状態にすることが可能になり得る。第１および第２ボリュームは異なるボリュームであり得、したがって、クライアントは以前存在したボリュームの以前の状態を新しいボリュームに再現することが可能になり得る。図９Ａでは、ルーチン９０１は、ブロックストアサーバ３１０によって、以前存在したボリュームの状態を新しいボリュームとして再現するように実装されるものとして示しており、新しいボリュームは、たとえば、ブロックストアサーバ３１０に実装された一次および二次レプリカを含む。ルーチン９０１は、追加的または代替的には、コンテナサーバ２２０によって、以前存在したボリュームの状態を新しい高度に分散されたボリュームまたはレプリカとして再現するように実装され得る。
【０１００】
図９Ａおよび図９Ｂを参照すると、ブロック９０２において、ブロックストアサーバ３１０は、特定の時点での以前存在したボリュームの状態を再現する要求を入手する。要求は、たとえば、クライアント３０５によって生成され得、以前存在したボリューム、特定の時点、および特定の時点における以前に存在したボリュームの状態を再現するターゲットボリュームを指定し得る（そのターゲットボリュームは以前存在したボリュームと同じであるか、または異なるボリュームであり得る）。
【０１０１】
他の実施形態では、要求は、ロガーフリート３１５によって、または弾性コンピューティングシステム１２０の制御プレーン１５５を実装するデバイスによって生成され得る。例示的には、図９Ａおよび図９Ｂを参照して説明するインタラクションを利用して、ある期間にわたるボリュームへの書き込み操作を反映するメッセージのストリームを、特定の時点でのボリュームのスナップショットに変換し得る。そのようなスナップショットは、メッセージのストリームよりも記憶するためにより少ないメモリを必要とし得るので、これらのインタラクションにより、弾性コンピューティングシステム１２０は、システム１２０のメモリ使用量を減らすことが可能になり得る。例示的には、ボリュームのメッセージのストリームが閾値サイズを超えた場合、システム１２０は、ストリームが閾値サイズを超える原因となったストリーム内の最も古いメッセージを特定し、それらの最も古いメッセージに反映された書き込み操作を実施した後に、ボリュームの状態を反映するボリュームのスナップショットを作成するように構成され得る。その後、システム１２０は、メッセージの直後のシステムの状態がスナップショット内に保持されると、それらの最も古いメッセージを削除し得る。
【０１０２】
ブロック９０４において、ブロックストアサーバ３１０は、基準時点と、要求に関連付けられた特定の時点との間のボリュームへの書き込み操作を反映するメッセージを取り出す。基準時点は、例示的には、特定の時点より前の、ボリューム全体の状態が既知であった任意の時点であり得る。基準時点は、たとえば、ボリュームの最初の作成またはボリュームのスナップショットの作成に対応し得る。したがって、取り出されたメッセージを利用して、基準時点でのボリュームの状態から開始し、メッセージに含まれる書き込み操作を適用して、特定の時点でのボリュームの状態を再現することができる。例示的には、ブロックストアサーバ３１０は、ボリュームの基準時点の記録を保持し得、ルーチン９０１の特定の実装に使用される基準時点を、要求に関連付けられた特定の時点に先行する第１の基準時点として選択し得る。
【０１０３】
ブロック９０４において取り出されるメッセージは、オブジェクトストレージ２１５内に記憶されたバンドルオブジェクトに含まれるメッセージ、またはロガーフリート３１５内に記憶されたバンドルされていないメッセージの一方または両方を含み得る。例示的には、各メッセージまたはバンドルオブジェクトは、ボリューム識別子と、メッセージに反映された書き込み操作の時間または時間範囲とに関連付けられ得る。したがって、ブロックサーバ３１０は、オブジェクトストレージ２１５および／またはロガーフリート３１５に、基準時点と、要求の特定の時点との間の期間に関連付けられたメッセージを要求し得る。
【０１０４】
ブロック９０６において、ブロックストアサーバ３１０は、要求で指定された特定の時点での、要求で指定された以前存在したボリュームの状態をターゲットボリューム６０４に再現させるために、取り出されたメッセージから生成された書き込み操作のセットをターゲットボリューム６０４に適用する。一実施形態では、ブロックストアサーバ３１０は、最初にボリューム６０４の状態を基準時点での状態と一致させる（たとえば、基準時点がボリュームの最初の作成である場合、全てのブロックを未書き込み状態に設定することによって、基準時点がスナップショットの作成に対応する場合、全てのブロックをスナップショットに反映された値に設定することによって、など）。その後、ブロックストアサーバ３１０は、取り出されたメッセージの順序と一致する順序でボリュームに書き込み操作を適用して、以前存在したボリュームに加えられた変更を再現し、ターゲットボリューム３１０を、特定の時点での以前存在したボリュームの状態と一致させ得る。
【０１０５】
他の実施形態では、ブロックストアサーバ３１０は、最後のメッセージに対応する書き込み操作を最初に適用し、次いで、より前のメッセージの書き込み操作を順番に適用することによって、取り出されたメッセージの順序の逆の順序、たとえば逆の年代順で、ボリュームに書き込み操作を適用し得る。書き込み操作を逆の順序で適用する場合、ブロックストアサーバ３１０は、以前存在したボリュームの同じブロックへの２回目以降の書き込みを無視して、ブロックの状態としての（メッセージのタイミングに反映される）最後の書き込みを、ターゲットボリューム内のブロックの状態として確立し得る。場合によっては、書き込み操作を逆の順序で適用することにより、ブロックストアサーバ３１０は、基準時点を事前に確立することなく動作することが可能になり得る。たとえば、ブロックストアサーバ３１０は、ロガーフリート３１５またはオブジェクトストレージ２１５からのボリュームの最新のメッセージの取り出しを開始し、ターゲットボリューム６０４の全てのブロックが既知の状態になるまで、メッセージの逆の順序で、メッセージを取り出し、対応する書き込み操作をターゲットボリュームに適用し続ける（たとえば、同じブロックへの２回目以降の書き込みを無視する）ように構成され得る。例示的には、ブロックストアサーバ３１０は、メッセージの逆の年代順の取り出しにおいて基準時点に到達した、またはそのようなメッセージ内の全てのブロックが書き込まれたと判定することによって、ターゲットボリューム６０４の全てのブロックが既知の状態を有すると判定し得る。
【０１０６】
その後、ブロック９０８において、ブロックストアサーバ３１０は、ターゲットボリューム６０４が特定の時点での以前存在したボリュームの状態になったことを受信者に通知する。受信者は、たとえば、以前存在したボリュームの状態の再現を最初に要求したクライアントに対応し得る。追加的または代替的には、ボリュームの再現がシステム１２０によって要求された場合、受信者はシステムの制御プレーン１５５であり得る。そのような場合、制御プレーン１５５は、その後、オブジェクトストレージ２１５内に記憶されるターゲットボリューム６０４のスナップショットを作成させて、ターゲットボリューム６０４の状態を作成するために使用されるメッセージの削除を可能にし得る。
【０１０７】
ブロック９０６における書き込み操作の適用は、所与のブロックに対して順番に行われ得、その結果、特定の時点以前のブロックへの書き込み操作を反映する最新のメッセージは、その特定の時点のブロックの状態の信頼できるものと見なされる。しかしながら、ブロック９０６における書き込み操作の適用はまた、異なるブロックまたはブロックの一部に対して並列に行われ得る。例示的には、ブロックストアサーバ３１０は、ブロック９０６のいくつかのインスタンス、または場合によってはルーチン９０１全体を並列に実施するように構成され得る。たとえば、ブロック９０６またはルーチン９０１の個別の実施は、ターゲットボリューム９０６の各パーティションに対して行われ得る。そのような並列化により、ブロックストアサーバ３１０は、ターゲットボリューム９０６を迅速に、指定された時点での以前存在したボリュームの状態と一致する状態にすることが可能になり得る。
【０１０８】
ロガーフリート３１５の例示的な機能について上記で論じているが、追加の機能が、追加的または代替的に、ロガーフリート３１５によって実装され得る。例示的には、ロガーフリート３１５は、パブリックにアクセス可能なＡＰＩを提供するように構成され得、これを介して、許可されたクライアントは、データボリューム（たとえば、アクセスが許可されたボリューム）に関連付けられたメッセージストリームをサブスクライブすることが可能になる。したがって、クライアントは、そのようなＡＰＩを利用して、データボリュームの変更に関する通知などの様々な機能を実装し得る。たとえば、クライアントデバイスは、データボリュームからのメッセージストリームをサブスクライブし、基準のセットを満たす変更がいつメッセージストリームに含まれるかを特定し、そのような変更をエンドユーザに通知するように構成され得る。したがって、本明細書に記載の機能は、本質的に例示的なものである。
【０１０９】
中間複写を利用する実施形態の概要
上記のように、高度に分散された三次レプリカはボリュームの迅速な複写を容易にすることができるが、それにもかかわらず、要求された複写のレベルが、単一の高度に分散されたレプリカの使用下では過度の時間を必要とする場合があり得る。たとえば、ユーザがソースボリュームまたはそのボリュームの一部（たとえば、ブートセクタ）を数百回または数千回複写することを望む場合、単一の高度に分散された三次レプリカを使用すると、そのような複写には長い時間が必要となり得る。そのため、本開示の実施形態は、より迅速な大量複写を可能にするために、中間複写レプリカ、またはレプリカの中間複写パーティションの作成を可能にすることができる。一実施形態では、まず、１つまたは複数の中間複写レプリカまたは中間複写パーティション（これらはいずれも本明細書では「中間複写」と呼び得る）を作成し、次いで、そのような中間複写を使用して、１つまたは複数のターゲットボリュームへのボリュームの大量複写を容易にすることによって、ボリューム（またはボリュームの一部）の大量複写の要求を容易にすることができる。
【０１１０】
１つまたは複数の中間複写の作成は、図２Ａの分散レプリカコーディネータ２０５などの集中管理機関によって容易にすることができ、または最初の高度に分散されたレプリカのパーティションをホストするサーバ（たとえば、図２Ａのコンテナサーバ２２０）によって容易にすることができる。中間複写の実装および使用のための例示的なインタラクションについて、図１０Ａ〜図１１Ｃに関して以下に説明する。具体的には、図１０Ａ〜図１０Ｃのインタラクションは、集中管理機関として機能する分散レプリカコーディネータ２０５を使用して、ボリュームからの情報の大量コピーを容易にする中間複写の作成および使用を管理するためのインタラクションを示している。図１１Ａ〜図１１Ｃのインタラクションもまた、ボリュームからの情報の大量コピーを容易にする中間複写の作成および使用を管理するためのインタラクションを示しているが、集中管理機関を必要とするのではなく、コンテナサーバ２２０のピアツーピア動作を利用してそのようにする。図１０Ａ〜図１１Ｃのインタラクションは、ソースボリュームに対応する高度に分散されたレプリカの単一のパーティションが、いくつかのターゲットボリュームに複写されることを参照して、例示的に説明する。この単一のパーティションは、たとえば、多数のターゲットボリュームにコピーするように要求される構成ファイルまたはその他の情報を含み得る。しかしながら、同様のインタラクションを利用して、高度に分散されたレプリカの複数のパーティション、またはそのレプリカの全てのパーティション（たとえば、データボリューム全体）からの情報の複写を容易にすることができる。例示的には、高度に分散されたレプリカの全てのパーティションに対して図１０Ａ〜図１０Ｃまたは図１１Ａ〜図１１Ｃのインタラクションを実施することによって、高度に分散されたレプリカによって表されるソースボリューム全体を、多数のターゲットボリュームにさえ迅速に複写することができる。また、図１０Ａ〜図１１Ｃのインタラクションは、ターゲットボリュームのセットへのボリューム（またはその一部）の複写に関して説明しているが、同様のインタラクションを使用して、任意のネットワークデバイスへのボリューム（またはその一部）の複写を容易にし得る。たとえば、中間複写を利用して、オブジェクトストレージサーバ１１０内の１つまたは複数のオブジェクトへの、または弾性コンピューティングシステム１２０の外部の１つまたは複数のネットワーク宛先への、ソースボリューム（またはその一部）の大量複写を容易にし得る（たとえば、ソースボリュームの数百または数千のポイントインタイムの「スナップショット」を作成する）。
【０１１１】
上記のように、図１０Ａ〜図１０Ｃのインタラクションは、ソースボリュームの高度に分散されたレプリカの単一のパーティションからの情報の大量コピーを容易にするために、中間複写の作成および使用を管理するための集中管理機関として機能する分散レプリカコーディネータ２０５の使用のためのインタラクションを示している。高度に分散されたレプリカのパーティションは、例示的には、そのようなパーティションをホストするために利用可能なコンテナサーバ２２０のセットのうちの第１のコンテナサーバ２２０Ａに記憶される。
【０１１２】
図１０Ａ〜図１０Ｃのインタラクションは（１）から始まり、ここで、分散レプリカコーディネータは、ソースボリュームの高度に分散されたレプリカのパーティションをターゲットボリュームのセットにコピーする要求を受信する。一実施形態では、要求はユーザによって、ブロックストアサーバ１０５により提供されるＡＰＩを介して送信される。ＡＰＩは、要求を分散レプリカコーディネータ２０５Ａに直接送信すること、または他のデバイス（たとえば、制御プレーン１５５の実装するもの）に送信し、今度は他のデバイスが要求を分散レプリカコーディネータ２０５Ａに送信すること、を容易にし得る。要求は、たとえば、コピーされるソースボリュームの情報と、情報がコピーされるべきターゲットボリュームのセットと、を識別し得る。情報は、たとえば、ソースボリュームの高度に分散されたレプリカのパーティションとして、またはコーディネータ２０５Ａが（たとえば、情報が記憶されているソースボリュームのブロック範囲に基づいて）パーティションにマッピングすることができるソースボリュームの１つまたは複数のファイルとして、指定され得る。ターゲットボリュームのセットは、たとえば、ブロックストアサーバ１０５上のターゲットボリュームとして、コンピューティングサーバ１１５上のインスタンス１１６として、またはそれらの組み合わせとして指定され得る。オブジェクトストレージサーバ１１０または外部ネットワークデバイスへの複写が望まれる場合、ターゲットのセットは、オブジェクトストレージサーバ１１０または外部ネットワークデバイス上の場所として指定され得る。
【０１１３】
（２）において、分散レプリカコーディネータ２０５Ａは、パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定する。一実施形態では、閾値レベルは、コンピューティングシステム１１０の管理者またはソースボリュームのユーザなどによって、設定値として事前に確立することができる。他の実施形態では、閾値レベルは、パーティションを複写するための全ての未処理の要求を完了するのに必要と予想される閾値時間であり得る。たとえば、コーディネータ２０５Ａは、（たとえば、パーティションを複写する要求を完了するための時間に関する過去の情報に基づいて）パーティションを複写するための未処理の要求のキューを停止（ｑｕｉｅｓｃｅ）させるのに必要な予想時間を決定し、キューを停止させるのに必要な予想時間が（たとえば、コンピューティングシステム１１０の管理者またはソースボリュームのユーザによって設定された）閾値時間を超えた場合、パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定し得る。
【０１１４】
パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定した後、コーディネータは（３）において、ソースパーティションの複写を容易にするために作成する必要がある中間複写パーティションの数を決定する。一実施形態では、中間パーティションの数は、パーティションを複写するための未処理の要求の数に少なくとも部分的に基づく。例示的には、中間複写パーティションとソースパーティションとの組み合わせによって、閾値時間未満での未処理の複写要求の満足を容易にすることができるように、中間パーティションの数がコーディネータ２０５Ａによって決定され得る。他の例では、管理者またはユーザは、ソースパーティションまたは中間複写パーティションあたりの所望の未処理の要求の数を指定し得る。たとえば、パーティションあたりの所望の未処理の要求の数が２０個である場合、中間複写の数は、未処理の要求を２０で除算し、（最初のソースパーティションを考慮するために）１を減算することによって計算され得る。場合によっては、決定された数が最大数を超えないように、中間複写パーティションの最大数を確立することができる。これは、たとえば、パーティションの大量複写を容易にするために使用されるコンピューティングシステム１１０の総リソースを制限し得る（たとえば、大量複写が、閾値レベルを超えるパーティションを複写するための未処理の要求の数によって表される場合）。
【０１１５】
（４）において、分散レプリカコーディネータ２０５Ａは、高度に分散されたレプリカの初期パーティションをホストするコンテナサーバ２２０（図１０Ａにコンテナサーバ２２０Ａとして図示）に、初期パーティションを第２のコンテナサーバ（図１０Ｂにコンテナサーバ２２０Ｂとして図示）にコピーする命令を送信して、第２のコンテナサーバ上に中間複写レプリカを作成する。一実施形態では、命令は第２のコンテナサーバを指定する。他の実施形態では、第２のコンテナサーバは、初期パーティションをホストするコンテナサーバによって（たとえば、ランダム選択によって）選択される。（５）において、コンテナサーバ２２０Ａは、初期パーティションをコンテナサーバ２２０Ｂにコピーして、コンテナサーバ２２０Ｂ上に中間複写パーティションを作成する。（６）において、コンテナサーバ２２０Ｂは、中間複写パーティションがコンテナサーバ２２０Ｂ上に作成されたことの確認応答をコーディネータ２０５Ａに送信する。
【０１１６】
その後、インタラクション（４）〜（６）は、中間複写パーティションの数が、（３）でコーディネータ２０５Ａによって決定された数と一致するまで、順次的に、並列に、またはそれらの組み合わせで繰り返され得る。たとえば、コンテナサーバ２２０Ｂ上での中間複写の作成の確認応答を受信した後、コーディネータ２０５は、インタラクション（４）を２回（場合によっては同時にまたは同時並行的に）繰り返し、コンテナサーバ２２０Ｃ上に中間複写を作成するようにコンテナサーバ２２０Ａに１回指示し、コンテナサーバ２２０Ｎ上に中間複写を作成するようにコンテナサーバ２２０Ｂに１回指示し得る。インタラクション（４）〜（６）が繰り返されるたびに、初期パーティションの情報のソースの数を増やすことができ、これによりさらに多くの中間複写の作成が容易になり、これらは初期パーティションの情報の追加ソースを表す。このように、インタラクション（４）〜（６）を繰り返すことにより、ソースパーティションの中間複写の数を指数関数的に増加させやすくすることができる。
【０１１７】
（たとえば、（３）で決定された数を満たす）十分な数の中間複写が作成された後、図１０Ａのインタラクションは、図１０Ｂに示すように続けることができる。具体的には、コーディネータ２０５Ａは、（７）において、十分な数の中間複写が作成されたことを検出し、（８）において、初期パーティションおよび中間複写をホストするサーバ２２０に、ターゲットボリュームへの（初期パーティションおよび中間複写パーティションで表される）パーティションの情報のコピーを実行するように指示する。図１０Ｂのインタラクションでは、パーティションの情報が各コンテナサーバ２２０Ｎ間に複写されていると仮定する。しかしながら、全てではないコンテナサーバ２２０Ｎの間でも複写は可能である。さらに、これらのインタラクションでは、ターゲットボリュームは、説明の目的で、ブロックストアサーバ１１０Ｃ上のボリュームであると仮定する。したがって、（９）において、各コンテナサーバ２２０は、パーティションコピー操作を実行して、ソースパーティションの情報を宛先ブロックストアサーバ３１０にコピーする。これらの操作は並列に実行することができるので、コンテナサーバ２２０Ａ上の初期パーティションからパーティションコピー操作を順次実行する場合と比較して、ソースパーティションの情報をブロックストアサーバ３１０に迅速にコピーすることができる。
【０１１８】
図１０Ｂはパーティションコピー操作の１回の並列化を示しているが、これらのインタラクションを繰り返して、ソースパーティションの情報を任意の数のブロックストアサーバ３１０または他のネットワークデバイスにコピーすることを容易にし得る。例示的には、コーディネータ２０５Ａは、ソースパーティションをターゲットボリュームに複写するための未処理の要求を実行する命令を個々のコンテナサーバ２２０に送信するワークフロー制御アルゴリズムを実装し得る。各パーティションコピー操作が完了すると、コンテナサーバ２２０は、そのような完了をコーディネータ２０５Ａに報告し得、コーディネータ２０５Ａは、ソースパーティションを複写する他の未処理の要求（存在する場合）を実行する命令をコンテナサーバ２２０に送信し得る。これらのインタラクションは、ソースパーティションを複写するための未処理の要求がそれ以上存在しなくなるまで、または図１０Ｃに関して説明するように、ガベージコレクション処理を通じて余分な中間複写が削除されるべきであることを示す閾値レベルを未処理の要求の数が下回るまで、繰り返し得る。場合によっては、各コンテナサーバ２２０は、複数の未処理の要求を処理するように構成され得、そのため、コーディネータ２０５Ａは、複数のパーティションコピー操作を実行する命令を各コンテナサーバ２２０に送信し得る。
【０１１９】
上記のように、図１０Ｃは、余分な中間複写をコンテナサーバ２２０から除去して、コンテナサーバ２２０で必要とされるコンピューティングリソースを削減できるように、中間複写に関する「ガベージコレクション」を実施するための例示的なインタラクションを示している。具体的には、図１０Ｃのインタラクションは（１０）から始まり、ここで、分散レプリカコーディネータ２０５Ａは、未処理のパーティションコピー要求の数が閾値レベルを下回ったことを検出する。一実施形態では、閾値レベルは、未処理のコピー要求の総数をソースパーティション（たとえば、初期パーティションおよびそのパーティションのあらゆる中間複写を含む）の総数で除算した値が閾値を下回った場合に、閾値が満たされるように、パーティションごとの値として設定され得る。たとえば、コンテナサーバ２２０上で５回複写されたパーティションに対して１００個未満の要求が存在する場合、パーティションあたり２０個の要求の閾値が満たされ得る。他の実施形態では、閾値レベルは、未処理のパーティションコピー要求を満たすために必要な閾値時間として指定され得る。たとえば、コンテナサーバ２２０上の情報の複写パーティションの現在の数が、３０秒未満に全ての未処理の要求を満たすと予想される場合、閾値レベルが満たされ得る。
【０１２０】
パーティションをコピーするための未処理の要求が閾値レベルを下回ったことを検出した後、分散レプリカコーディネータ２０５Ａは、（１２）において、不要な中間複写を削除する命令をコンテナサーバ２２０に送信する。一実施形態では、分散レプリカコーディネータ２０５Ａは、（たとえば、ランダムに）中間複写をホストする単一のコンテナサーバ２２０を選択し、ホストしている中間複写を削除する命令をコンテナサーバ２２０に送信し得る。その後、未処理のパーティションコピー要求が閾値レベルを下回らなくなるまで、インタラクション（１１）および（１２）が繰り返され得る。他の実施形態では、分散レプリカコーディネータ２０５Ａは、未処理のパーティションコピー要求が閾値レベルを下回らなくなるように、削除される中間複写の数を決定し得、（１２）において、その数の中間複写をホストするコンテナサーバ２２０に命令を送信し得る。このようにして、コーディネータ２０５Ａは、余分な中間複写がコンテナサーバ２２０内で保持されないようにして、コンテナサーバ２２０のリソースを他の操作（たとえば、他のパーティション、他のボリュームなどの複写）に利用可能にすることができる。
【０１２１】
上記で論じた実施形態は、未処理のパーティションコピー要求に基づく中間複写の削除に関するものであるが、追加または代替のメトリックを使用して、中間複写を削除するか否かを判定し得る。たとえば、分散レプリカコーディネータ２０５Ａは、初期パーティションのコピー要求の使用履歴を入手または決定し、そのような使用履歴から、パーティションの将来のコピー要求を予測し得る（たとえば、使用履歴を将来の時間に投影する）。その後、分散レプリカコーディネータ２０５Ａは、（たとえば、将来の期間にわたって）パーティションについての予測される将来のコピー要求が閾値レベルを下回った場合にのみ、１つまたは複数の中間複写を削除するように機能し得る。一実施形態では、将来の期間は、コンテナサーバ２２０が中間複写パーティションを削除および再生成するのに必要な時間に少なくとも部分的に基づいて設定され得る。したがって、たとえば、将来のパーティションコピー要求が、中間複写パーティションを削除および再生成するのに必要な時間よりも短い時間での中間複写パーティションの使用を保証するのに十分であると予測される場合、分散レプリカコーディネータ２０５Ａは、中間複写パーティションが削除されるべきでないと判定し得る。
【０１２２】
図１１Ａ〜図１１Ｃを参照して、図１０Ａ〜図１０Ｃに対する追加または代替のインタラクションのセットについて説明する。具体的には、図１０Ａ〜図１０Ｃのインタラクションは、分散されたレプリカのパーティションの大量複写を制御するための集中管理機関としての分散レプリカコーディネータ２０５Ａの使用に関するものであるが、図１１Ａ〜図１１Ｃのインタラクションは、分散されたレプリカのパーティションの大量複写を制御するためのコンテナサーバ２２０のピアツーピア動作に関するものである。図１１Ａ〜図１１Ｃのインタラクションは、図１０Ａ〜図１０Ｃのインタラクションの代替として（たとえば、分散レプリカコーディネータ２０５Ａへの動作負荷を削減するため）、または図１０Ａ〜図１０Ｃのインタラクションに加えて実施され得る。たとえば、コーディネータ２０５Ａが高度に分散されたレプリカの各パーティションのワークロード情報を保持するために過剰なコンピューティングリソースが必要とされる場合、コーディネータ２０５Ａは、アクセスの多いパーティションのみの大量複写を制御する集中管理機関として機能するように構成され得、コンテナ２２０は、アクセスの少ないパーティションを複写する必要が生じた場合に、そのようなアクセスの少ないパーティションの複写を制御するためにピアツーピア構成で追加的に機能し得る。たとえば、その例が当技術分野で知られている「ヘビーヒッター」アルゴリズム、または値のストリーム（たとえば、全てのコピー要求）内の値（たとえば、個々のパーティションをコピーする要求）の頻繁な発生を追跡するための他のメモリ効率の高いアルゴリズムを使用することによって、アクセスの多いパーティションが、コーディネータにおいて識別され得る。
【０１２３】
図１１Ａのインタラクションは（１）から始まり、ここで、分散レプリカコーディネータ２０５Ａは、図１０Ａのインタラクション（１）と同様の方法で、ボリュームの高度に分散されたレプリカのパーティションをターゲットボリュームのセットにコピーする要求を受信する。しかしながら、図１０Ａのインタラクションとは対照的に、図１１Ａの分散レプリカコーディネータ２０５Ａは、初期パーティションの中間複写の作成を容易にする必要はない。むしろ、（２）において、コーディネータ２０５Ａは、初期パーティションをホストするコンテナサーバ２２０（ここでは、コンテナサーバ２２０Ａ）に、要求されたパーティションコピー操作を実行する命令を送信し得る。
【０１２４】
（３）において、コンテナサーバ２２０Ａは、パーティションをコピーするための未処理の要求（たとえば、コンテナサーバ２２０で要求のキュー内に保持されるもの）が閾値レベルを超えたことを検出する。上記で論じたのと同様の方法で、閾値レベルは、コンピューティングシステム１１０の管理者またはソースボリュームのユーザによって、設定値として事前に確立することができ、あるいはパーティションを複写するための全ての未処理の要求を完了するのに必要と予想される閾値時間とすることができる。たとえば、コンテナサーバ２２０Ａは、（たとえば、パーティションを複写する要求を完了するための時間に関する過去の情報に基づいて）パーティションを複写するための未処理の要求のキューを停止させるのに必要な予想時間を決定し、キューを停止させるのに必要な予想時間が（たとえば、コンピューティングシステム１１０の管理者またはソースボリュームのユーザによって設定された）閾値時間を超えた場合、パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定し得る。
【０１２５】
（３）の検出に応答して、コンテナサーバ２２０Ａは、（４）において、初期パーティションを他のコンテナサーバ２２０Ｃにコピーして、コンテナサーバ２２０Ｃへのパーティションの中間複写を作成する。コンテナサーバ２２０Ａは、たとえば、ランダム選択、ラウンドロビン選択などの、任意の数の知られている負荷分散または選択アルゴリズムに従ってコンテナサーバ２２０Ｃを選択し得る。一実施形態では、初期パーティションをサーバ２２０Ｃにコピーする前に、コンテナサーバ２２０Ａは、サーバ２２０Ｃにクエリを実行して、サーバ２２０Ｃ上での中間複写の作成を要求し得る。サーバ２２０Ｃが受諾した場合、インタラクションは上述のように進行し得る。サーバ２２０Ｃが拒否した場合、コンテナサーバ２２０Ａは、中間複写の作成を要求する代替サーバ２２０を選択し得る。サーバ２２０Ｃは、たとえば、サーバ２２０Ｃが既に初期パーティションの中間複写をホストしている場合、サーバ２２０Ｃの現在のワークロードが大きすぎて中間複写を作成できない場合などに拒否し得る。
【０１２６】
サーバ２２０Ｃが受諾するという仮定の下で、インタラクションは（５）に進み、そこで、コンテナサーバ２２０Ａは、パーティションコピー命令の現在のキューの一部をコンテナサーバ２２０Ｃに送信する。一実施形態では、サーバ２２０Ａは、パーティションコピー命令の既存のキューの半分を転送して、サーバ２２０Ａおよび２２０Ｃの間でパーティションコピー命令を分割し得る。
【０１２７】
その後、インタラクション（３）および（４）と同様のインタラクションは、上記で論じた閾値レベルを下回るパーティションコピー命令を各コンテナサーバ２２０Ａが保持するまで、コンテナサーバ２２０内で継続して行われ得る。たとえば、２つのコンテナサーバ２２０間での未処理のパーティションコピー命令の分割は、いずれかのサーバ２２０のキューを未処理の要求の閾値レベル未満に低下させるには不十分である場合のインタラクションが図１１Ｂに示されている。したがって、図１１Ｂに示すように、各コンテナサーバ２２０Ａおよび２２０Ｃは、（６’）および（６’‘）（プライム表記は、同時並行的に発生し得るが必須ではない独立したインタラクションを示す）において、未処理のパーティションコピー要求のキューが閾値レベルを超えたことを独立して判定することができる（たとえば、上述のように判定される）。その後、（７’）および（７’‘）において、サーバ２２０Ａおよび２２０Ｃのそれぞれは、パーティションを他のサーバ（それぞれ、サーバ２２０Ｂおよび２２０Ｎ）にコピーして、サーバ２２０間のパーティションの複写の数を２倍にする。これらと同様のインタラクションは、閾値を下回る未処理のパーティションコピー命令のキューを各サーバ２２０が保持するまで、コンテナサーバ２２０間で継続して行われ得る。その後、（８）において、初期パーティションまたは中間複写パーティションをホストするサーバ２２０は、ブロックストアサーバ３１０へのパーティションコピー操作を実行して、パーティションをターゲットボリュームにコピーすることができる。インタラクション（９）では単一の操作として示しているが、各サーバ２２０は、パーティションコピーを並列に実行して、ブロックストアサーバ３１０へのパーティションの情報の迅速な転送を容易にし得る。また、各サーバ２２０は、自身が保持している保留中のパーティションコピー命令のキューを処理するように構成され得、そのため、サーバ２２０のキュー内の未処理の命令の数が閾値レベルを下回るまで、自身でパーティションコピーを並列に、順次的に、またはそれらの組み合わせで実行し得る。
【０１２８】
図１１Ａおよび図１１Ｂのインタラクションは、パーティションをコピーするための１セットの要求に関して説明しているが、コンテナサーバ２２０は、作成済みの中間複写に基づいて後続の要求をルーティングし続けるように構成され得る。たとえば、分散レプリカコーディネータ２０５Ａは、パーティションコピーを実行する命令をコンテナサーバ２２０Ａに送信し続け得る。その理由は、そのサーバ２２０Ａがこの例では、コピーされる初期パーティションをホストしていると仮定しているためである。サーバ２２０Ａは、後続のパーティションコピー命令を、自身と、パーティションの中間複写をホストすることがサーバ２２０Ａに知られている任意のサーバ２２０との間で分散させ得る。たとえば、図１１Ａおよび図１１Ｂのインタラクションにおいて、サーバ２２０は、中間複写がサーバ２２０Ｂおよび２２０Ｃに存在することを認識し得、したがって、いくつかの知られている負荷分散技術のいずれかに従って（たとえば、ラウンドロビン分散を使用して）、サーバ２２０Ａ、２２０Ｂ、および２２０Ｃのそれぞれの間で以降の要求を分散させ得る。他のサーバ２２０は、同様に、中間複写をホストする追加の既知のサーバ２２０に要求を転送して、後続の要求をパーティションの中間複写の間で分散させることを可能にし得る。
【０１２９】
図１１Ｃを参照すると、コンテナサーバ２２０のピアツーピア構成内でガベージコレクションを実装するための例示的なインタラクションが示されている。具体的には、各コンテナ２２０は、上限閾値レベル（たとえば、図１１Ａおよび図１１Ｂを参照して上述したもの）以下であって、下限閾値レベル以上である未処理のパーティションコピー命令のキューを保持するように構成され得る。下限閾値レベルは、上記で論じた上限閾値レベルと同様に、たとえば、各サーバでの未処理の要求の最小数、または全ての未処理のパーティションコピー要求を完了するのに必要な最小時間に関して指定され得る。場合によっては、下限閾値レベルはゼロに設定され得、それによって、パーティションをコピーするための未処理の要求がサーバ２２０に存在しない場合にのみ、コンテナサーバ２２０がパーティションの中間複写を削除するように構成される。場合によっては、所与のサーバ２２０は、中間複写を保持していることが分かっている「下流」サーバ２２０が存在しない場合にのみ、中間複写を削除するように構成され、ここで、下流サーバ２２０とは、所与のサーバ２２０が中間複写を作成させたサーバ２２０を指す。
【０１３０】
図１１Ｃでは、２つのコンテナサーバ２２０、すなわち、サーバ２２０Ｂおよび２２０Ｎが、インタラクション（９’）および（９’‘）において、サーバ２２０での未処理の要求が下限閾値レベルを下回ったことを検出したと仮定する。そのため、（１０’）および（１０’‘）において、サーバ２２０は中間複写を削除して、サーバ２２０のコンピューティングリソースを解放する。追加的に、（１１’）および（１１’‘）において、サーバ２２０はそれらの中間複写の削除を「上流」サーバ２２０に報告し、ここで、所与のサーバ２２０に対する上流サーバ２２０とは、所与のサーバ２２０に中間複写を作成させたサーバ２２０を指す。追加的に、インタラクション（１１’）および（１１’‘）において、サーバ２２０は、サーバ２２０の残りのパーティションコピー命令を上流サーバ２２０に転送する。したがって、上流サーバ２２０は、未処理のコピー命令が下限閾値を下回ったサーバ２２０のワークロードを引き取るものと見なすことができる。
【０１３１】
図１１Ｃに関して上述したように。上記で論じた実施形態は、未処理のパーティションコピー要求に基づく中間複写の削除に関するものであるが、追加または代替のメトリックを使用して、中間複写を削除するか否かを判定し得る。たとえば、コンテナサーバ２２０は、中間複写によって表されるパーティションのコピー要求の使用履歴を入手または決定し、そのような使用履歴から、パーティションの将来のコピー要求を予測し得る（たとえば、使用履歴を将来の時間に投影する）。その後、コンテナサーバ２２０は、（たとえば、将来の期間にわたって）パーティションについての予測される将来のコピー要求が閾値レベルを下回った場合にのみ、その中間複写を削除するように機能し得る。一実施形態では、将来の期間は、コンテナサーバ２２０が中間複写パーティションを削除および再生成するのに必要な時間に少なくとも部分的に基づいて設定され得る。したがって、たとえば、将来のパーティションコピー要求が、中間複写パーティションを削除および再生成するのに必要な時間よりも短い時間での中間複写パーティションの使用を保証するのに十分であると予測される場合、コンテナサーバ２２０は、中間複写パーティションが削除されるべきでないと判定し得る。
【０１３２】
図１２を参照すると、１つまたは複数の中間複写を利用して、ターゲットボリュームのセットへのボリューム（またはボリュームの一部）の大量複写を容易にするための例示的なルーチン１２００が示されている。ルーチン１２２０は、たとえば、ボリュームの高度に分散されたレプリカをホストするコンテナサーバ２２０のセットによって、独立して、またはコンピューティングシステム１２０の他の要素、たとえば、分散レプリカコーディネータ２０５などと組み合わせて実行され得る。
【０１３３】
ルーチン１２００は１２０２から始まり、ここで、ボリュームの１つまたは複数のパーティションをターゲットボリュームのセットにコピーする要求が、コンテナサーバ２２０またはコーディネータ２０５によって受信される。上記のように、要求は、たとえば、ユーザによってコンピューティングシステム１２０のＡＰＩを介して送信され得、たとえば、ターゲットボリュームのセットにコピーされる１つまたは複数のパーティションに記憶された情報を識別し得る。
【０１３４】
ブロック１２０４において、コンテナサーバ２２０は、１つまたは複数のパーティションのそれぞれについて、要求されたコピーを容易にする際に利用する１つまたは複数の中間複写パーティションを生成する。一実施形態では、中間複写パーティションは、上記の図１０Ａ〜図１０Ｃのインタラクションなどに従って、レプリカコーディネータ２０５などの集中管理機関によって作成される。他の実施形態では、中間複写パーティションは、上記の図１１Ａ〜図１１Ｃのインタラクションなどに従って、コンテナサーバ２２０のピアツーピアインタラクションを介して作成される。
【０１３５】
ブロック１２０６において、１つまたは複数のパーティションをコピーする要求は、中間複写をホストするサーバ２２０の間で分割される。一実施形態では、レプリカコーディネータ２０５などの集中管理機関は、上記の図１０Ａ〜図１０Ｃのインタラクションなどに従って、中間複写をホストするサーバ２２０の間で要求を分割するように動作する。他の実施形態では、サーバ２２０は、ピアツーピア方式でインタラクションして、上記の図１１Ａ〜図１１Ｃのインタラクションなどに従って、サーバ２２０の間で要求を分割する。
【０１３６】
ブロック１２０８において、１つまたは複数のパーティションの情報（たとえば、パーティションの初期コピーまたはパーティションの中間複写に含まれるもの）をターゲットボリュームにコピーするためのパーティションコピー操作がサーバ２２０によって実行される。パーティションコピー操作は少なくとも部分的に並列に実施することができ、中間複写の数はターゲットボリュームの数に対して多くする（場合によっては、ターゲットボリュームに対して１対１の比率にする）ことができるので、パーティションコピー操作は、中間複写なしで１つまたは複数のパーティションの初期コピーのみを使用する場合に比べて、迅速に完了することができる。
【０１３７】
ブロック１２１０において、サーバ２２０は、ガベージコレクションを実行して、サーバ２２０上の余分な中間複写を削除する。ガベージコレクションは、上記の図１０Ｃのインタラクションなどに従って、集中管理機関などによって容易になされ得る。他の実施形態では、サーバ２２０は、上記の図１１Ｃのインタラクションなどに従って、ガベージコレクションを実施するためにピアツーピア方式でインタラクションを行う。その後、ルーチン１２００は終了し得る。
【０１３８】
ルーチン１２００は、例示的にユーザの要求に基づいて開始されるものとして上述しているが、一部の実施形態では、ルーチン１２００は、代替のメカニズムを介して実装され得る。例示的には、ルーチン１２００は、ターゲットボリュームから特定のパーティションのデータを読み出すためのユーザ要求に応答して、そのパーティションの迅速な複写を提供するためのメカニズムとして実装され得る。たとえば、ユーザが初期ボリューム（たとえば、一次、二次、および三次レプリカで表され、それぞれがいくつかのパーティションに分割され得るもの）をターゲットボリュームの大規模なセット（たとえば、数百または数千のボリューム）にコピーすることを要求する場合について考える。本開示の一実施形態では、ブロックストアサーバ１０５は、（たとえば、一次、二次、および三次レプリカの）既存のパーティションに基づくコピー操作のセットを開始し得るが、そのようなコピー操作には、既存のパーティションからターゲットボリュームのセットを生成するのに長い時間が必要になり得ると予想される。しかしながら、ブロックストアサーバ１０５はさらに、コピー操作のセットが完了する前であっても、ターゲットボリュームのセットにおいて初期ボリュームのデータが利用可能であるとユーザに通知し得る。ブロックストアサーバ１０５はさらに、初期ボリュームのパーティションから読み出しボリュームにデータをコピーする要求を開始することによって、ターゲットボリュームのセットのボリュームに対する読み出し要求に応答するように機能し得る。例示的には、ターゲットボリュームのセットのボリュームにおいて十分な数の読み出し要求が受信された場合、初期ボリュームのパーティションからデータをコピーするための対応する要求のセットは、ルーチン１２００を開始し得る。したがって、場合によっては、ルーチン１２００を実装することにより、ブロックストアサーバ１０５は、それらのボリュームを読み出すためのユーザからの要求に応答して、「オンザフライ」でターゲットボリュームにデータを投入することが可能になり得る。
【０１３９】
用語
本明細書に記載の方法およびタスクの全ては、コンピュータシステムによって実行され、完全に自動化され得る。コンピュータシステムは、場合によっては、記載の機能を実行するためにネットワークを介して通信して相互動作する複数の別々のコンピュータまたはコンピューティングデバイス（たとえば、物理サーバ、ワークステーション、ストレージアレイ、クラウドコンピューティングリソースなど）を含み得る。そのような各コンピューティングデバイスは、典型的には、メモリまたは他の非一時的コンピュータ可読記憶媒体もしくはデバイス（たとえば、ソリッドステートストレージデバイス、ディスクドライブなど）に記憶されたプログラム命令またはモジュールを実行するプロセッサ（または複数のプロセッサ）を含む。本明細書に開示した各種の機能は、そのようなプログラム命令に具現化され得、またはコンピュータシステムの特定用途向け回路（たとえば、ＡＳＩＣもしくはＦＰＧＡ）に実装され得る。コンピュータシステムが複数のコンピューティングデバイスを含む場合、これらのデバイスは、必須ではないが、同じ場所に配置され得る。開示した方法およびタスクの結果は、ソリッドステートメモリチップまたは磁気ディスクなどの物理ストレージデバイスを異なる状態に変えることによって、永続的に記憶され得る。一部の実施形態では、コンピュータシステムは、複数の別々の事業体または他のユーザによって処理リソースが共有されるクラウドベースのコンピューティングシステムであり得る。
【０１４０】
処理２３０、３２０、４１０、５０５Ａ、５０５Ｂ、および９０１は、イベントに応答して、たとえば、所定のまたは動的に決定されるスケジュールで、ユーザまたはシステム管理者によって開始された場合にオンデマンドで、または他の何らかのイベントに応答して、開始し得る。処理２３０、３２０、４１０、５０５Ａ、５０５Ｂ、９０１、または１２０１が開始されると、１つまたは複数の非一時的コンピュータ可読媒体（たとえば、ハードドライブ、フラッシュメモリ、リムーバブルメディアなど）に記憶された実行可能プログラム命令のセットは、サーバまたは他のコンピューティングデバイスのメモリ（たとえば、ＲＡＭ）にロードされ得る。次いで、実行可能命令は、コンピューティングデバイスのハードウェアベースのコンピュータプロセッサによって実行され得る。一部の実施形態では、処理２３０、３２０、４１０、５０５Ａ、５０５Ｂ、９０１、１２０１またはそれらの一部は、複数のコンピューティングデバイスおよび／または複数のプロセッサ上で、順次的にまたは並列に実施され得る。
【０１４１】
実施形態に応じて、本明細書に記載の処理またはアルゴリズムのいずれかの特定の行為、イベントまたは機能は、異なる順序で実行することができ、追加する、合体させる、または完全に省くことができる（たとえば、記載した全ての動作またはイベントがこのアルゴリズムの実施に必須ではない）。また、特定の実施形態では、動作またはイベントは、逐次的にではなく同時並行的に、たとえば、マルチスレッド処理、割り込み処理、または複数のプロセッサもしくはプロセッサコアを介して、あるいは他の並列アーキテクチャで実行することができる。
【０１４２】
本明細書に開示した実施形態に関連して説明した各種の例示的な論理ブロック、モジュール、ルーチン、およびアルゴリズムのステップは、電子ハードウェア（たとえば、ＡＳＩＣもしくはＦＰＧＡデバイス）、コンピュータハードウェア上で動作するコンピュータソフトウェア、またはこれらの組み合わせとして実装することができる。また、本明細書に開示した実施形態に関連して説明した各種の例示的な論理ブロックおよびモジュールは、本明細書に記載の機能を実行するように設計されたプロセッサデバイス、デジタルシグナルプロセッサ（「ＤＳＰ」）、特定用途向け集積回路（「ＡＳＩＣ」）、フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）もしくは他のプログラマブルロジックデバイス、ディスクリートゲートもしくはトランジスタロジック、ディスクリートハードウェア部品、またはこれらの任意の組み合わせなどの機械によって、実装または実行することができる。プロセッサデバイスはマイクロプロセッサとすることができるが、代替的には、プロセッサデバイスは、コントローラ、マイクロコントローラ、もしくはステートマシン、またはこれらの組み合わせなどとすることができる。プロセッサデバイスは、コンピュータ実行可能命令を処理するように構成される電気回路を含むことができる。他の実施形態では、プロセッサデバイスは、コンピュータ実行可能命令を処理せずに論理演算を実行するＦＰＧＡまたは他のプログラマブルデバイスを含む。プロセッサデバイスは、たとえば、ＤＳＰとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つまたは複数のマイクロプロセッサ、または任意の他のそのような構成などの、コンピューティングデバイスの組み合わせとして実装することもできる。本明細書では主としてデジタル技術に関して説明しているが、プロセッサデバイスはまた、主としてアナログ部品を含み得る。たとえば、本明細書に記載のレンダリング技術の一部または全部は、アナログ回路またはアナログ・デジタル混合回路で実装され得る。コンピューティング環境は、いくつか例を挙げると、マイクロプロセッサ、メインフレームコンピュータ、デジタルシグナルプロセッサ、携帯型コンピューティングデバイス、デバイスコントローラ、または電化製品内のコンピューティングエンジンに基づいたコンピュータシステムを含むが、これに限定されない任意の種類のコンピュータシステムを含むことができる。
【０１４３】
本明細書に開示した実施形態に関連して説明した方法、処理、ルーチンまたはアルゴリズムの要素は、直接ハードウェアで、プロセッサデバイスによって実行されるソフトウェアモジュールで、またはこれら２つの組み合わせで具現化することができる。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または任意の他の形態の非一時的コンピュータ可読記憶媒体に存在することができる。例示的な記憶媒体は、プロセッサデバイスが記憶媒体から情報を読み出し、情報を記憶媒体に書き込むことができるようにプロセッサデバイスに結合することができる。代替的には、記憶媒体は、プロセッサデバイスと一体にすることができる。プロセッサデバイスおよび記憶媒体は、ＡＳＩＣに存在することができる。ＡＳＩＣはユーザ端末に存在することができる。代替的には、プロセッサデバイスおよび記憶媒体は、ユーザ端末内のディスクリート部品として存在することができる。
【０１４４】
本明細書で使用する条件付きの文言、特に、「できる（ｃａｎ）」、「可能性がある（ｃｏｕｌｄ）」、「場合がある（ｍｉｇｈｔ）」、「〜し得る（ｍａｙ）」、「たとえば（ｅ．ｇ．，）」などは、特に明確に指定のない限り、または使用される文脈内で別様に解釈されない限り、一般に、特定の特徴、要素またはステップが、特定の実施形態には含まれるが他の実施形態には含まれないことを伝えるように意図している。したがって、そのような条件付きの文言は一般に、特徴、要素またはステップが１つまたは複数の実施形態に何らかの形で必要であることを示すように意図したものでもなく、これらの特徴、要素もしくはステップが任意の特定の実施形態に含まれるか、それとも任意の特定の実施形態において実行されるものであるかを、他の入力または指示の有無に関わらず判定する論理が１つまたは複数の実施形態に必ず含まれることを示すように意図したものでもない。「備える」、「含む」および「有する」などの用語は同義語であり、包括的に、制限されない様式で使用され、追加の要素、特徴、行為および動作などを排除しない。また、「または」という用語は、（排他的な意味ではなく）包括的な意味で使用しており、したがって、たとえば、要素のリストを連結するために使用される場合、「または」という用語は、そのリスト内の要素の１つ、一部または全部を意味する。
【０１４５】
特に明記しない限り、「Ｘ、Ｙ、またはＺのうちの少なくとも１つ」という句などの選言的な文言は、項目、用語などが、Ｘ、Ｙ、もしくはＺのいずれか、またはそれらの任意の組み合わせ（たとえば、Ｘ、Ｙ、またはＺ）であり得ることを提示するために一般に使用される文脈の中で別様に理解される。したがって、そのような選言的な文言は一般に、特定の実施形態が、Ｘのうちの少なくとも１つ、Ｙのうちの少なくとも１つ、およびＺのうちの少なくとも１つがそれぞれ存在することを必要とすることを意味するものではなく、そうすべきでもない。
【０１４６】
上記の詳細な説明では、様々な実施形態に適用される新規の特徴を図示し、説明し、指摘しているが、例示したデバイスまたはアルゴリズムの形態および詳細の様々な省略、置換および変更は、本開示の趣旨から逸脱せずに実行できることは理解することが可能である。理解できるように、本明細書に記載の特定の実施形態は、一部の特徴を他の特徴とは別に使用または実施することができるので、本明細書に記載した特徴および利点の全てを提供しない形態内に具現化することができる。特許請求の範囲の意味および均等範囲に入る全ての変更は、その範囲内に包含される。
【０１４７】
以下の条項のセットを考慮して、上記はより良好に理解され得る。
【０１４８】
条項１．
ボリュームの一次レプリカの第１の数のパーティションが記憶された第１のサーバのセットと、
前記第１のサーバとデータ通信する第２のサーバのセットであって、前記第２のサーバのセットは、前記一次レプリカと同期的に更新を受信する前記ボリュームの二次レプリカが記憶され、前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方は、前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成される、前記第２のサーバのセットと、
前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方とデータ通信する複数の追加のサーバであって、前記複数の追加のサーバは、前記一次レプリカとは非同期的に前記更新を受信する前記ボリュームの三次レプリカが集合的に記憶され、前記三次レプリカは、前記複数の追加のサーバに分散された第２の数のパーティションとして記憶され、前記複数の追加のサーバは、前記三次レプリカを使用して前記ボリュームの複製を処理するためのコンピュータ実行可能命令によって構成され、前記第２の数のパーティションは、前記第１の数のパーティションよりも多い、前記複数の追加のサーバと、
を含む、システム。
【０１４９】
条項２．
前記第１のサーバのセット、前記第２のサーバのセット、および前記複数の追加のサーバは、ブロックストレージを使用して前記ボリュームを記憶するように構成され、
前記三次レプリカの前記第２の数のパーティションのそれぞれは、前記ボリュームの少なくとも１つのブロックを表す、条項１に記載のシステム。
【０１５０】
条項３．
前記複数の追加のサーバは、前記第２の数のパーティションのうちの複数のパーティションのデータを並列に送信することによって前記ボリュームの前記複製を処理するための前記コンピュータ実行可能命令によって構成される、条項１に記載のシステム。
【０１５１】
条項４．
前記第２の数のパーティションは前記複数の追加のサーバにストライピングされて、前記ボリュームの第１の部分を表す第１のパーティションと、前記第１の部分と連続した前記ボリュームの第２の部分を表す第２のパーティションとが、前記複数の追加のサーバのうちの異なるサーバに記憶される、条項１に記載のシステム。
【０１５２】
条項５．
前記一次レプリカおよび前記二次レプリカの一方または両方から前記更新を受信し、
前記更新を前記三次レプリカに非同期的に伝播させる、
コンピュータ実行可能命令によって構成されるロガーフリートをさらに含む、
条項１に記載のシステム。
【０１５３】
条項６．
前記システムの制御プレーンを実装するコンピューティングデバイスと、
前記第１の数のパーティションを使用して前記ボリュームの新しいコピーを記憶するために前記制御プレーンによってセットアップされる第３のサーバのセットであって、前記第３のサーバのセットの前記第１の数のパーティションのそれぞれは、前記複数の追加のサーバから前記第２の数のパーティションのうちの特定のパーティションのデータを取り出して、前記三次レプリカを使用して前記ボリュームの前記新しいコピーを生成する、前記第３のサーバのセットと、
をさらに含む、条項１に記載のシステム。
【０１５４】
条項７．
前記一次レプリカとデータ通信し、前記一次レプリカから前記ボリュームの前記データにアクセスするように構成されるコンピューティングリソースをホストする第３のサーバをさらに含み、
前記第３のサーバは、前記一次レプリカが利用できない場合に前記二次レプリカにフェイルオーバーするためのコンピュータ実行可能命令によって構成され、
前記制御プレーンを実装する前記コンピューティングデバイスは、前記ボリュームの前記新しいコピーを新しい二次レプリカとして作成するように構成される、条項６に記載のシステム。
【０１５５】
条項８．
第１のサーバのセットの第１の数のパーティションを使用してボリュームの一次レプリカを記憶することと、
第２のサーバのセットの前記第１の数のパーティションを使用して前記ボリュームの二次レプリカを記憶することであって、前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方は、前記一次レプリカおよび前記二次レプリカの変更を介して前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成される、前記記憶することと、
前記ボリュームの三次レプリカを作成することであって、少なくとも、
前記ボリュームのデータを第２の数のパーティションに分割することであって、前記第２の数のパーティションは、前記第１の数のパーティションよりも多い、前記分割することと、
前記第２の数のパーティションを複数の追加のサーバに分散させることと、
によって行われる、
前記作成することと、
を含み、
前記複数の追加のサーバは、前記三次レプリカを使用して前記ボリュームの複製を処理するためのコンピュータ実行可能命令によって構成される、コンピュータ実装方法。
【０１５６】
条項９．
前記一次レプリカおよび前記二次レプリカを同期的に更新することと、
前記一次レプリカへの更新とは非同期的に前記三次レプリカを更新することと、
をさらに含む、条項８に記載のコンピュータ実装方法。
【０１５７】
条項１０．
前記三次レプリカを非同期的に更新することは、
ロガーフリートにおいて前記更新を受信することと、
前記更新を、前記三次レプリカに適用できるようになるまで、前記ロガーフリートに記憶することと、
前記第２の数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
を含む、条項９に記載のコンピュータ実装方法。
【０１５８】
条項１１．
前記三次レプリカを作成することは、
少なくとも１つのオブジェクトストレージサーバから前記ボリュームの前記データを取り出すことと、
前記第２の数のパーティションのうちの各パーティションについて、
前記パーティションを記憶するための、前記複数の追加のサーバのうちのあるサーバを選択することと、
前記パーティションを前記選択されたサーバに送信させて、前記選択されたサーバに記憶することと、
前記第２の数のパーティションのうちの各パーティションについて、前記パーティションの場所情報を識別するマニフェストを作成することと、
をさらに含む、条項８に記載のコンピュータ実装方法。
【０１５９】
条項１２．
前記第２の数のパーティションを前記複数の追加のサーバに分散させることは、前記第２の数のパーティションを前記複数の追加のサーバにストライピングすることを含む、条項８に記載のコンピュータ実装方法。
【０１６０】
条項１３．
前記ボリュームのスナップショットを作成すると決定することと、
前記スナップショットを作成するために、前記第２の数のパーティションのそれぞれを少なくとも１つのオブジェクトストレージサーバに送信させることであって、前記第２の数のパーティションの少なくとも一部は互いに並列に送信される、前記送信させることと、
をさらに含む、条項８に記載のコンピュータ実装方法。
【０１６１】
条項１４．
前記ボリュームの新しいレプリカを作成すると決定することと、
前記新しいレプリカを作成するために、前記第２の数のパーティションのそれぞれを１つまたは複数の第３のサーバに送信させることであって、前記第２の数のパーティションの少なくとも一部は、互いに並列に前記第３のサーバに送信される、前記送信させることと、
をさらに含む、条項８に記載のコンピュータ実装方法。
【０１６２】
条項１５．
コンピューティングシステムによって実行されると、前記コンピューティングシステムに動作を実行させる命令を記憶する非一時的コンピュータ可読媒体であって、前記動作は、
ボリュームの第１のレプリカを前記コンピューティングシステムの第１のストレージデバイスのセットに記憶することであって、前記第１のストレージデバイスのセットは、前記第１のレプリカの変更を介して前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成される、前記記憶することと、
前記ボリュームの第２のレプリカを作成することであって、少なくとも、
前記ボリュームのデータを複数のパーティションに分割することと、
前記複数のパーティションを前記コンピューティングシステムの第２のストレージデバイスのセットに分散させることであって、前記第２のストレージデバイスのセットは、前記第２のレプリカを使用して前記コンピューティングシステム内での前記ボリュームの複写を容易にするためのコンピュータ実行可能命令によって構成され、前記複数のパーティションの数は、前記第１のストレージデバイスのセットの数よりも多い、前記分散させることと、によって行われる、
前記作成することと、
を含む、前記非一時的コンピュータ可読媒体。
【０１６３】
条項１６．
前記動作は、前記第１のレプリカへの更新とは非同期的に前記第２のレプリカを更新することをさらに含む、条項１５に記載の非一時的コンピュータ可読媒体。
【０１６４】
条項１７．
前記第２のレプリカを非同期的に更新することは、
ロガーフリートにおいて前記更新を受信することと、
前記更新を、前記第２のレプリカに適用できるようになるまで、前記ロガーフリートに記憶することと、
前記複数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
を含む、条項１６に記載の非一時的コンピュータ可読媒体。
【０１６５】
条項１８．
前記第２のレプリカを作成することは、
少なくとも１つのオブジェクトストレージサーバから前記ボリュームの前記データを取り出すことと、
前記複数のパーティションのうちの各パーティションについて、
前記パーティションを記憶するための、前記第２のストレージデバイスのセットのうちのあるストレージデバイスを選択することと、
前記パーティションを前記選択されたストレージデバイスにルーティングすることと、
前記選択されたストレージデバイスのコンテナに前記パーティションを記憶することと、
前記複数のパーティションのうちの各パーティションについて、前記パーティションが記憶される前記コンテナを識別するマニフェストを作成することと、
さらに含む、条項１５に記載の非一時的コンピュータ可読媒体。
【０１６６】
条項１９．
前記複数のパーティションを前記第２のストレージデバイスのセットに分散させることは、前記複数のパーティションを前記第２のストレージデバイスのセットにストライピングすることを含む、条項１５に記載の非一時的コンピュータ可読媒体。
【０１６７】
条項２０．
前記動作は、
前記ボリュームのスナップショットを作成すると決定することであって、前記スナップショットは、少なくとも１つのオブジェクトストレージサーバに記憶される前記ボリュームのオブジェクト表現である、前記決定することと、
前記スナップショットを作成するために、前記複数のパーティションのそれぞれを前記少なくとも１つのオブジェクトストレージサーバにプッシュすることであって、前記複数のパーティションの少なくとも一部は、前記少なくとも１つのオブジェクトストレージサーバに並列にプッシュされる、前記プッシュすることと、
をさらに含む、条項１５に記載の非一時的コンピュータ可読媒体。
【０１６８】
条項２１．
ボリュームの一次レプリカが記憶された第１のサーバのセットであって、前記第１のサーバのセットは、前記一次レプリカを記憶する第１の数のパーティションに対応する、前記第１のサーバのセットと、
前記第１のサーバとデータ通信する第２のサーバのセットであって、前記第２のサーバのセットは、前記一次レプリカと同期的に更新を受信する前記ボリュームの二次レプリカが記憶され、前記第２のサーバのセットは、前記二次レプリカを記憶する前記第１の数のパーティションに対応する、前記第２のサーバのセットと、
前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方とデータ通信する複数の追加のサーバであって、前記複数の追加のサーバは、前記一次レプリカとは非同期的に前記更新を受信する前記ボリュームの三次レプリカが集合的に記憶され、前記三次レプリカは、前記複数の追加のサーバに分散された第２の数のパーティションとして記憶され、前記第２の数のパーティションは、前記第１の数のパーティションよりも多い、前記複数の追加のサーバと、
を含み、
前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方は、
前記一次および二次レプリカの変更を介して前記ボリュームへのユーザ開始の書き込みを処理し、
前記ボリュームへの前記ユーザ開始の書き込みによって前記三次レプリカを更新させる、
コンピュータ実行可能命令によって構成され、
前記ボリュームのバックアップを作成する要求を受信したことに応答して、前記複数の追加のサーバは、前記三次レプリカを使用して前記コンピューティングシステム内で前記ボリュームの前記バックアップを作成するためのコンピュータ実行可能命令によって構成される、コンピューティングシステム。
【０１６９】
条項２２．
前記複数の追加のサーバは、前記第２の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも１つの他のサーバに並列に送信することにより、前記ボリュームの前記バックアップを作成するための前記コンピュータ実行可能命令によって構成される、条項２１に記載のコンピューティングシステム。
【０１７０】
条項２３．
前記バックアップを作成するために、前記複数の追加のサーバは、前記第２の数のパーティションのうちの指定されたパーティションを、オブジェクトストレージを使用して前記指定されたパーティションを記憶するように構成される１つまたは複数のオブジェクトストレージサーバに送信するための前記コンピュータ実行可能命令によって構成される、条項２１に記載のコンピューティングシステム。
【０１７１】
条項２４．
前記第１のサーバのセットおよび前記第２のサーバのセットの一方または両方は、前記ボリュームの前回のバックアップの作成以降に変更された前記ボリュームのあらゆるブロックをリスト化したバックアップマップを作成するためのコンピュータ実行可能命令によって構成され、前記複数の追加のサーバは、前記バックアップマップを使用して前記指定されたパーティションを識別するための前記コンピュータ実行可能命令によって構成される、条項２３に記載のコンピューティングシステム。
【０１７２】
条項２５．
前記第１のサーバのセットは、
ユーザバックアップ要求を受信し、
前記ユーザバックアップ要求を前記複数の追加のサーバに伝播させる、
コンピュータ実行可能命令によって構成される、条項２１に記載のコンピューティングシステム。
【０１７３】
条項２６．
前記複数の追加のサーバは、前記ユーザバックアップ要求を受信したことに応答して、前記第２の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも１つの他のサーバに送信するための前記コンピュータ実行可能命令によって構成される、条項２４に記載のコンピューティングシステム。
【０１７４】
条項２７．
前記複数の追加のサーバは、前記ユーザバックアップ要求を受信したことに応答して、前記三次レプリカのコピーを作成するための前記コンピュータ実行可能命令によって構成され、前記三次レプリカの前記コピーは、第３のサーバのセットに集合的に記憶された前記第２の数のパーティションを使用して記憶された前記ボリュームの前記データを有し、
前記第３のサーバのセットは、前記第２の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも１つの他のサーバに送信するための前記コンピュータ実行可能命令によって構成される、
条項２４に記載のコンピューティングシステム。
【０１７５】
条項２８．
第１のサーバのセットの第１の数のパーティションを使用してボリュームの一次レプリカを記憶することと、
第２のサーバのセットの前記第１の数のパーティションを使用して前記ボリュームの二次レプリカを記憶することと、
前記ボリュームの三次レプリカを作成することであって、少なくとも、
前記ボリュームのデータを第２の数のパーティションに分割することであって、前記第２の数のパーティションは、前記第１の数のパーティションよりも多い、前記分割することと、
前記第２の数のパーティションを複数の追加のサーバに分散させることと、
によって行われる、
前記作成することと、
前記一次レプリカおよび前記二次レプリカの変更を介して前記ボリュームへのユーザ開始の書き込みを処理することと、
前記ボリュームへの前記ユーザ開始の書き込みによって前記三次レプリカを更新することと、
前記ボリュームのバックアップを作成するためのユーザバックアップ要求を受信することと、
前記ユーザバックアップ要求を前記三次レプリカに伝播させることと、
前記三次レプリカを使用して前記ボリュームのバックアップを作成することと、
を含む、コンピュータ実装方法。
【０１７６】
条項２９．
前記バックアップを作成することは、前記第２の数のパーティションの少なくとも一部からデータを並列に送信することを含む、条項２８に記載のコンピュータ実装方法。
【０１７７】
条項３０．
前記一次レプリカにおいてユーザバックアップ要求を受信することと、
前記ユーザバックアップ要求を前記一次レプリカから前記三次レプリカに伝播させることと、
前記三次レプリカにおいて前記ユーザバックアップ要求を受信したことに応答して前記バックアップを作成することと、
をさらに含む、条項２８に記載のコンピュータ実装方法。
【０１７８】
条項３１．
前記バックアップを作成することは、
前記三次レプリカのコピーを作成することであって、前記三次レプリカの前記コピーは、第３のサーバのセットに集合的に記憶された前記第２の数のパーティションを使用して記憶された前記ボリュームの前記データを有する、前記作成することと、
前記三次レプリカの前記コピーの前記第２の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも１つの他のサーバに送信することと、
を含む、条項２８に記載のコンピュータ実装方法。
【０１７９】
条項３２．
前記一次レプリカへの更新を受信することと、
前記三次レプリカの前記コピーが前記データを前記少なくとも１つの他のサーバに送信している間に、前記三次レプリカの前記第２の数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項３１に記載のコンピュータ実装方法。
【０１８０】
条項３３．
前記バックアップを作成することは、
前記一次レプリカへの更新を受信することと、
前記三次レプリカから前記バックアップが作成されるまで前記更新を記憶することと、
前記バックアップが作成された後、前記第２の数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
を含む、条項２８に記載のコンピュータ実装方法。
【０１８１】
条項３４．
前記バックアップが作成されたという確認応答を前記一次レプリカにおいて受信することと、
前記確認応答を受信したことに応答して、前記第２の数のパーティションのうちの前記指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項３３に記載のコンピュータ実装方法。
【０１８２】
条項３５．
コンピューティングシステムによって実行されると、前記コンピューティングシステムに動作を実行させる命令を記憶する非一時的コンピュータ可読媒体であって、前記動作は、
ボリュームの第１のレプリカを、前記コンピューティングシステムの第１のストレージデバイスのセットに記憶することと、
前記ボリュームの第２のレプリカを作成することであって、少なくとも、
前記ボリュームのデータを複数のパーティションに分割することと、
前記複数のパーティションを前記コンピューティングシステムの第２のストレージデバイスのセットに分散させることであって、前記複数のパーティションの数は、前記第１のストレージデバイスのセットの数よりも多い、前記分散させることと、
によって行われる、
前記作成することと、
前記第１のレプリカの変更を介して、前記ボリュームへのユーザ開始の書き込みを処理することと、
前記ボリュームへの前記ユーザ開始の書き込みによって前記第２のレプリカを更新することと、
前記ボリュームのバックアップを作成するためのユーザバックアップ要求を受信することと、
前記ユーザバックアップ要求を前記第２のレプリカに伝播させることと、
前記第２のレプリカを使用して、前記コンピューティングシステム内で前記ボリュームのバックアップを作成することと、
を含む、前記非一時的コンピュータ可読媒体。
【０１８３】
条項３６．
前記動作は、前記第２のレプリカのデータを前記第２のストレージデバイスのセットの少なくとも一部から並列に送信することをさらに含む、条項３５に記載の非一時的コンピュータ可読媒体。
【０１８４】
条項３７．
前記バックアップを作成するための前記動作は、
前記第２のレプリカのコピーを作成することであって、前記第２のレプリカの前記コピーは、第３のストレージデバイスのセットに集合的に記憶された前記複数のパーティションを使用して記憶された前記ボリュームの前記データを有する、前記作成することと、
前記第２のレプリカの前記コピーの前記複数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも１つの他のサーバに送信することと、
をさらに含む、条項３５に記載の非一時的コンピュータ可読媒体。
【０１８５】
条項３８．
前記動作は、
前記第１のレプリカへの更新を受信することと、
前記第２のレプリカの前記コピーが前記データを前記少なくとも１つの他のサーバに送信している間に、前記第２のレプリカの前記複数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項３７に記載の非一時的コンピュータ可読媒体。
【０１８６】
条項３９．
前記動作は、
前記第１のレプリカへの更新を受信することと、
前記第２のレプリカから前記バックアップが作成されるまで前記更新を記憶することと、
前記バックアップが作成された後、前記複数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項３５に記載の非一時的コンピュータ可読媒体。
【０１８７】
条項４０．
前記動作は、
前記ボリュームの前記第１のレプリカを１つまたは複数のブロックとして記憶することと、
前記ボリュームの前記バックアップを１つまたは複数のオブジェクトとして少なくとも１つのオブジェクトストレージサーバに記憶することと、
前記ボリュームのブロックを前記少なくとも１つのオブジェクトストレージサーバの対応する場所にマッピングするマニフェストを作成することと、
をさらに含む、条項３５に記載の非一時的コンピュータ可読媒体。
【０１８８】
条項４１．
データボリュームの分散されたレプリカを実装するサーバコンピューティングデバイスのセットであって、前記分散されたレプリカは、前記サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定される追加のレプリカとは異なる、前記サーバコンピューティングデバイスのセットと、
コーディネータコンピューティングデバイスであって、
前記パーティションのセットのうちのパーティション内の情報がターゲットボリュームのセットにコピーされることを示す１つまたは複数の要求を受信し、
前記パーティション内の前記情報を前記ターゲットボリュームのセットにコピーするのに必要なコピー操作の数が閾値を満たしていると判定し、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成し、
前記中間複写パーティションから前記ターゲットボリュームのセットに前記情報をコピーするコピー操作のセットを並列に開始する、
コンピュータ実行可能命令によって構成される、前記コーディネータコンピューティングデバイスと、
を含む、システム。
【０１８９】
条項４２．
前記１つまたは複数の要求は、前記ボリューム全体が前記ターゲットボリュームのセットにコピーされることを示し、
前記パーティションを複写して中間複写パーティションを生成することが、前記パーティションのセットを複写して中間複写パーティションのセットを生成することをさらに含む、条項４１に記載のシステム。
【０１９０】
条項４３．
前記閾値は、前記パーティションを利用する前記数のコピー操作を完了するための予想時間に少なくとも部分的に基づく、条項４１に記載のシステム。
【０１９１】
条項４４．
前記コピー操作のセットは、前記パーティションから前記ターゲットボリュームのセットへのコピー操作をさらに含む、条項４１に記載のシステム。
【０１９２】
条項４５．
前記コピー操作のセットは、前記中間複写パーティションから前記ターゲットボリュームのセットの第１のサブセットに前記情報をコピーする第１のコピー操作のセットに対応し、
コントローラコンピューティングデバイスは、前記中間複写パーティションから前記ターゲットボリュームのセットの第２のサブセットに前記情報をコピーする第２のコピー操作のセットを並列に開始するためのコンピュータ実行可能命令によってさらに構成される、条項４１に記載のシステム。
【０１９３】
条項４６．
データボリュームの分散されたレプリカを実装することであって、前記分散されたレプリカは、サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定される追加のレプリカとは異なる、前記実装することと、
前記パーティションのセットのうちのパーティション内の情報がネットワークデバイスのセットにコピーされるという指示を受信することと、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成することと、
前記中間複写パーティションから前記ネットワークデバイスのセットに前記情報をコピーするコピー操作のセットを並列に開始することと、
を含む、コンピュータ実装方法。
【０１９４】
条項４７．
前記指示は、前記パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第１のサーバコンピューティングデバイスにおいて受信され、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写することは、前記中間複写パーティションのうちの第１の中間複写パーティションを生成する前記サーバコンピューティングデバイスのセットのうちの第２のサーバコンピューティングデバイスを、前記第１のサーバコンピューティングデバイスにおいて選択することを含む、条項４６に記載のコンピュータ実装方法。
【０１９５】
条項４８．
前記第１のサーバコンピューティングデバイスによって、前記第２のサーバコンピューティングデバイスに、前記コピー操作のセットの少なくとも一部を開始するように指示することをさらに含む、条項４７に記載のコンピュータ実装方法。
【０１９６】
条項４９．
前記第２のサーバコンピューティングデバイスにおいて、
前記中間複写パーティションのうちの第２の中間複写パーティションを生成する前記サーバコンピューティングデバイスのセットのうちの第３のサーバコンピューティングデバイスを選択することと、
前記第３のサーバコンピューティングデバイスに、前記コピー操作のセットの少なくとも一部を開始するように指示することと、
をさらに含む、条項４８に記載のコンピュータ実装方法。
【０１９７】
条項５０．
前記第２のサーバコンピューティングデバイスにおいて、
前記第２のサーバコンピューティングデバイスにおける完了すべき未処理の前記第１の中間複写パーティションに関するコピー操作の数が閾値レベルを下回ったことを検出することと、
前記第２のコンピューティングデバイスから前記第１の中間複写パーティションを削除することと、
前記第２のコンピューティングデバイスから前記第１の中間複写パーティションが削除されたことを前記第１のサーバコンピューティングデバイスに通知することと、
をさらに含む、条項４８に記載のコンピュータ実装方法。
【０１９８】
条項５１．
前記指示はコントローラコンピューティングデバイスにおいて受信され、
前記パーティションは、前記サーバコンピューティングデバイスのセットのうちの第１のサーバコンピューティングデバイスにおいてホストされ、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写することは、前記コントローラコンピューティングデバイスにおいて、
前記中間複写パーティションのうちの第１の中間複写パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第２のサーバコンピューティングデバイスを選択することと、
前記第１のサーバコンピューティングデバイスに命令を送信して、前記第２のサーバコンピューティングデバイスに前記パーティションを少なくとも部分的に複写する前記第１の中間複写パーティションを作成することと、
を含む、条項４６に記載のコンピュータ実装方法。
【０１９９】
条項５２．
前記コントローラコンピューティングデバイスにおいて、
前記第１の中間複写パーティションが作成されたという指示を受信することと、
前記中間複写パーティションのうちの第２の中間複写パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第３のサーバコンピューティングデバイスを選択することと、
前記第２のサーバコンピューティングデバイスに命令を送信して、前記第３のサーバコンピューティングデバイスに前記第１の中間複写パーティションを少なくとも部分的に複写する前記第２の中間複写パーティションを作成することと、
をさらに含む、条項５１に記載のコンピュータ実装方法。
【０２００】
条項５３．
前記コントローラコンピューティングデバイスにおいて、前記コピー操作のセットの完了後に前記第１の中間複写パーティションを削除するように前記第２のサーバコンピューティングデバイスに指示することをさらに含む、条項５１に記載のコンピュータ実装方法。
【０２０１】
条項５４．
データボリュームの分散されたレプリカを実装するシステムで実行可能な命令を含む非一時的コンピュータ可読媒体であって、前記分散されたレプリカは、サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定された追加のレプリカとは異なり、前記命令は、
前記パーティションのセットのうちのパーティション内の情報がネットワークデバイスのセットにコピーされるという指示を受信ことと、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成することと、
前記中間複写パーティションから前記ネットワークデバイスのセットに前記情報をコピーするコピー操作のセットを並列に開始することと、
のために前記システムによって実行可能である、前記非一時的コンピュータ可読媒体。
【０２０２】
条項５５．
前記命令は、前記パーティション内の前記情報を前記ネットワークデバイスのセットにコピーするのに必要なコピー操作の数が閾値を満たすと判定するために、前記システムによってさらに実行可能である、条項５４に記載の非一時的コンピュータ可読媒体。
【０２０３】
条項５６．
前記閾値は、前記パーティションを利用する前記数のコピー操作を完了するための予想時間に少なくとも部分的に基づく、条項５５に記載の非一時的コンピュータ可読媒体。
【０２０４】
条項５７．
前記コピー操作のセットは、前記パーティションから前記ターゲットボリュームのセットへのコピー操作をさらに含む、条項５４に記載の非一時的コンピュータ可読媒体。
【０２０５】
条項５８．
前記命令は、少なくとも部分的に、
前記サーバコンピューティングデバイスのセットが前記パーティションを複写するように、集中管理デバイスに指示を出させることと、
または、前記サーバコンピューティングデバイスのセットの間でピアツーピア通信を開始して、前記サーバコンピューティングデバイスのセット内で前記パーティションを複写させて、中間複写パーティションを生成することと、
のうちの少なくとも１つによって、前記サーバコンピューティングデバイスのセット内で前記パーティションを複写するために、前記システムによって実行可能である、条項５４に記載の非一時的コンピュータ可読媒体。
【０２０６】
条項５９．
前記命令は、前記パーティションを前記ネットワークデバイスのセットにコピーするのに必要な未処理のコピー操作の数が閾値レベル以下になったと判定し、前記中間複写パーティションを削除するために、前記システムによってさらに実行可能である、条項５４に記載の非一時的コンピュータ可読媒体。
【０２０７】
条項６０．
前記命令は、前記中間複写パーティションを削除する前に、将来の期間内に発生すると予想される前記パーティションをコピーする要求の将来の数が、閾値レベル以下であると判定するために、前記システムによってさらに実行可能である、条項５９に記載の非一時的コンピュータ可読媒体。
【０２０８】
条項６１．
前記閾値レベルは、前記中間複写パーティションの数に少なくとも部分的に基づいて決定される、条項５９に記載の非一時的コンピュータ可読媒体。
【０２０９】
条項６２．
前記パーティション内の前記情報が前記ネットワークデバイスのセットにコピーされるという前記指示は、前記ネットワークデバイスのセットのうちの少なくとも１つから前記情報を読み出す要求を含む、条項５４に記載の非一時的コンピュータ可読媒体。
【０２１０】
多くの変形および変更が上述の実施形態に対して行われ得、それらの要素は、他の許容される実施例の中にあるものと理解されるべきであるということが強調されるべきである。全てのそのような変更および変形は、本明細書において、本開示の範囲内に含まれており、以下の特許請求の範囲によって保護されるものとする。
【図１Ａ】
2021521551.tif 000003
【図１Ｂ】
2021521551.tif 000004
【図２Ａ】
2021521551.tif 000005
【図２Ｂ】
2021521551.tif 000006
【図３Ａ】
2021521551.tif 000007
【図３Ｂ】
2021521551.tif 000008
【図４Ａ】
2021521551.tif 000009
【図４Ｂ】
2021521551.tif 000010
【図５Ａ】
2021521551.tif 000011
【図５Ｂ】
2021521551.tif 000012
【図５Ｃ】
2021521551.tif 000013
【図６】
2021521551.tif 000014
【図７】
2021521551.tif 000015
【図８】
2021521551.tif 000016
【図９Ａ】
2021521551.tif 000017
【図９Ｂ】
2021521551.tif 000018
【図１０Ａ】
2021521551.tif 000019
【図１０Ｂ】
2021521551.tif 000020
【図１０Ｃ】
2021521551.tif 000021
【図１１Ａ】
2021521551.tif 000022
【図１１Ｂ】
2021521551.tif 000023
【図１１Ｃ】
2021521551.tif 000024
【図１２】
2021521551.tif 000025
【国際調査報告】
2021521551.tif 000026
2021521551.tif 000027