(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-07
(45)【発行日】2022-11-15
(54)【発明の名称】ブロックストレージシステムのための分散されたレプリカ
(51)【国際特許分類】
G06F 16/185 20190101AFI20221108BHJP
G06F 3/06 20060101ALI20221108BHJP
G06F 11/14 20060101ALI20221108BHJP
【FI】
G06F16/185
G06F3/06 304F
G06F3/06 301X
G06F11/14 648
(21)【出願番号】P 2020560778
(86)(22)【出願日】2019-04-19
(86)【国際出願番号】 US2019028320
(87)【国際公開番号】W WO2019212768
(87)【国際公開日】2019-11-07
【審査請求日】2020-12-02
(32)【優先日】2018-04-30
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-04-30
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-04-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100114890
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100134315
【氏名又は名称】永島 秀郎
(74)【代理人】
【識別番号】100135633
【氏名又は名称】二宮 浩康
(74)【代理人】
【識別番号】100162880
【氏名又は名称】上島 類
(72)【発明者】
【氏名】キラン-クマール ムニスワミー-レディ
(72)【発明者】
【氏名】クリストファー マギー グリーンウッド
(72)【発明者】
【氏名】コリン ウィリアムズ
(72)【発明者】
【氏名】ウェルス リン
(72)【発明者】
【氏名】ダニー ウェイ
(72)【発明者】
【氏名】イゴール エイ. コスティック
【審査官】三橋 竜太郎
(56)【参考文献】
【文献】特開2014-038485(JP,A)
【文献】特表2017-509990(JP,A)
【文献】特開2014-157397(JP,A)
【文献】特開2015-005037(JP,A)
【文献】特開2014-186364(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 3/06
G06F 11/14
(57)【特許請求の範囲】
【請求項1】
第1のサーバのセットと、
前記第1のサーバ
のセットとデータ通信する第2のサーバのセットと、
前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方とデータ通信する複数の追加のサーバと、
を含むコンピューティングシステムであって、
前記第1のサーバのセットは、ボリュームの一次レプリカの第1の数のパーティションが記憶され、
前記第2のサーバのセットは、前記一次レプリカと同期的に更新を受信する前記ボリュームの二次レプリカが記憶され、前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成され、
前記複数の追加のサーバは、前記一次レプリカとは非同期的に前記更新を受信する前記ボリュームの三次レプリカが集合的に記憶され、前記三次レプリカは、前記複数の追加のサーバに分散された第2の数のパーティションとして記憶され、前記複数の追加のサーバは、前記三次レプリカを使用して前記ボリュームの複製を処理するためのコンピュータ実行可能命令によって構成され、前記第2の数のパーティションは、前記第1の数のパーティションよりも多い、
コンピューティングシステム。
【請求項2】
前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、
前記一次レプリカおよび前記二次レプリカの変更を介して前記ボリュームへのユーザ開始の書き込みを処理し、
前記ボリュームへの前記ユーザ開始の書き込みによって前記三次レプリカを更新させる、
コンピュータ実行可能命令によって構成される、
請求項1に記載のコンピューティングシステム。
【請求項3】
前記ボリュームのバックアップを作成する要求を受信したことに応答して、前記複数の追加のサーバは、前記三次レプリカを使用して前記コンピューティングシステム内で前記ボリュームの前記バックアップを作成するためのコンピュータ実行可能命令によって構成される、
請求項2に記載のコンピューティングシステム。
【請求項4】
前記バックアップを作成するために、前記複数の追加のサーバは、前記第2の数のパーティションのうちの指定されたパーティションを、オブジェクトストレージを使用して前記指定されたパーティションを記憶するように構成される1つまたは複数のオブジェクトストレージサーバに送信するための前記コンピュータ実行可能命令によって構成される、
請求項3に記載のコンピューティングシステム。
【請求項5】
前記第1のサーバのセット、前記第2のサーバのセットおよび前記複数の追加のサーバは、ブロックストレージを使用して前記ボリュームを記憶するように構成され、
前記三次レプリカの前記第2の数のパーティションのそれぞれは、前記ボリュームの少なくとも1つのブロックを表す、
請求項1に記載のコンピューティングシステム。
【請求項6】
前記複数の追加のサーバは、前記第2の数のパーティションの少なくとも一部のデータを並列に送信することによって前記ボリュームの前記複製を処理するための前記コンピュータ実行可能命令によって構成される、
請求項1から5のいずれか一項に記載のコンピューティングシステム。
【請求項7】
前記第2の数のパーティションは、前記複数の追加のサーバにストライピングされて、前記ボリュームの第1の部分を表す第1のパーティションと、前記第1の部分と連続した前記ボリュームの第2の部分を表す第2のパーティションと、は、前記複数の追加のサーバのうちの異なるサーバに記憶される、
請求項1に記載のコンピューティングシステム。
【請求項8】
前記コンピューティングシステムは、ロガーフリートをさらに含み、
前記ロガーフリートは、
前記一次レプリカおよび前記二次レプリカの一方または両方から前記更新を受信し、
前記更新を前記三次レプリカに非同期的に伝播させる、
コンピュータ実行可能命令によって構成される、
請求項1から7のいずれか一項に記載のコンピューティングシステム。
【請求項9】
前記コンピューティングシステムは、
前記コンピューティングシステムの制御プレーンを実装するコンピューティングデバイスと、
前記第1の数のパーティションを使用して前記ボリュームの新しいコピーを記憶するために前記制御プレーンによってセットアップされる第3のサーバのセットと、
をさらに含み、
前記第3のサーバのセットの前記第1の数のパーティションのそれぞれは、前記複数の追加のサーバから前記第2の数のパーティションのうちの特定のパーティションのデータを取り出して、前記三次レプリカを使用して前記ボリュームの前記新しいコピーを生成する、
請求項1から8のいずれか一項に記載のコンピューティングシステム。
【請求項10】
第1のサーバのセットの第1の数のパーティションを使用して、ボリュームの一次レプリカを記憶するステップと、
第2のサーバのセットの前記第1の数のパーティションを使用して、前記ボリュームの二次レプリカを記憶するステップであって、前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、前記一次レプリカおよび前記二次レプリカの変更を介して、前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成されている、ステップと、
前記ボリュームの三次レプリカを作成するステップと
を含む、コンピュータ実装方法であって、
前記三次レプリカを作成するステップは、少なくとも、
前記ボリュームのデータを、第2の数のパーティションに分割するステップであって、前記第2の数のパーティションは、前記第1の数のパーティションよりも多い、ステップと、
前記第2の数のパーティションを、複数の追加のサーバにわたって分散させるステップであって、前記複数の追加のサーバは、前記三次レプリカを使用して、前記ボリュームの複製を処理するためのコンピュータ実行可能な命令によって構成されている、ステップと、
前記一次レプリカと前記二次レプリカとを同期的に更新するステップと、
前記一次レプリカへの更新とは非同期的に前記三次レプリカを更新するステップと、
によって実行される、方法。
【請求項11】
前記三次レプリカを非同期的に更新するステップは、
ロガーフリートにおいて前記更新を受信するステップと、
前記更新が前記三次レプリカに適用できるようになるまで、前記ロガーフリートに前記更新を記憶するステップと、
前記第2の数のパーティションのうちの指定されたパーティションに前記更新を順次適用するステップと
を含む、請求項10記載のコンピュータ実装方法。
【請求項12】
前記三次レプリカを作成するステップは、
少なくとも1つのオブジェクトストレージサーバから、前記ボリュームの前記データを取り出すステップと、
前記第2の数のパーティションの各パーティションについて、前記パーティションを記憶するための、前記複数の追加のサーバのうちの1つのサーバを選択するステップと、前記選択されたサーバに記憶するために、前記パーティションを前記選択されたサーバに送信させるステップとを行うステップと、
前記第2の数のパーティションの各パーティションについて、前記パーティションの場所情報を識別するマニフェストを作成するステップと
をさらに含む、請求項10記載のコンピュータ実装方法。
【請求項13】
前記第2の数のパーティションを前記複数の追加のサーバにわたって分散させるステップは、前記第2の数のパーティションを前記複数の追加のサーバにわたってストライピングするステップを含む、請求項10記載のコンピュータ実装方法。
【請求項14】
前記ボリュームのスナップショットを作成することを決定するステップと、
前記スナップショットを作成するために、前記第2の数のパーティションの各パーティションを、少なくとも1つのオブジェクトストレージサーバに送信させるステップであって、前記第2の数のパーティションのうちの少なくともいくつかが互いに並列に送信される、ステップと
をさらに含む、請求項10記載のコンピュータ実装方法。
【請求項15】
前記ボリュームの新しいレプリカを作成することを決定するステップと、
前記新しいレプリカを作成するために、前記第2の数のパーティションのそれぞれを1つまたは複数の第3のサーバに送信させるステップであって、前記第2の数のパーティションの少なくともいくつかは、互いに並列に前記第3のサーバに送信される、ステップと
をさらに含む、請求項10記載のコンピュータ実装方法。
【発明の詳細な説明】
【背景技術】
【0001】
クラウドコンピューティングは、一般に、Webサービスなどのサービスを通じて情報技術リソースへのアクセスを提供するための手法であり、それらのサービスをサポートするために使用されるハードウェアおよび/またはソフトウェアは、いつでもサービスのニーズを満たすように動的にスケーリングが可能である。クラウドコンピューティングでは、弾性(elasticity)とは、ユーザの変化する要求に適応するためにクラウドサービスプロバイダによってスケールアップおよびスケールダウンできるネットワーク配信されるコンピューティングリソースを指す。これらのリソースの弾性は、処理能力、ストレージ、帯域幅などの観点のものとすることができる。弾性コンピューティングリソースは、所与のユーザのシステム上またはそのシステム内のリソース要求の変化に動的に適応して、自動的およびオンデマンドで配信され得る。たとえば、ユーザはクラウドサービスを使用して、大規模なオンラインストリーミングサービスをホストし、ユーザにコンテンツをストリーミングするWebサーバの数が、ピーク視聴時間中に帯域幅要求を満たすようにスケールアップし、システム使用量が軽くなったときにスケールダウンし戻すように、弾性リソースをセットアップすることができる。
【0002】
ユーザは典型的には、クラウドを介してリソースをレンタル、リースするか、または別の方法でリソースへのアクセスの代金を支払うので、これらのリソースへのアクセスを提供するハードウェアおよび/またはソフトウェアを購入して保守する必要はない。これによりいくつかの利点が提供され、たとえば、ユーザは自身の企業の変化する需要に応じて自身の利用可能なコンピューティングリソースを迅速に再構成できるようになり、クラウドサービスプロバイダは、使用量、トラフィック、またはその他の運用上のニーズに基づいて、提供するコンピューティングサービスリソースを自動的にスケーリングできるようになる。ネットワークベースのコンピューティングサービスのこの動的な性質は、オンプレミスのコンピューティング環境の比較的(relatively)なインフラストラクチャとは異なり、ユーザ基盤の変化するニーズに応じてハードウェアを確実に再割り当てすることができるシステムアーキテクチャを必要とする。
【図面の簡単な説明】
【0003】
【
図1A】本開示による様々な実施形態を実装できる弾性コンピューティングシステムの概略図である。
【
図1B】
図1Aの弾性コンピューティングシステムにおける本開示による複製されたデータインスタンスの概略図である。
【
図2A】
図1Aの弾性コンピューティングシステムにおいて分散された三次レプリカを作成する概略図である。
【
図2B】
図2Aの分散された三次レプリカを作成するための例示的な処理のフローチャートである。
【
図3A】
図1Aの弾性コンピューティングシステムにおいて一次レプリカと分散された三次レプリカとの間でデータ更新を複製する概略図である。
【
図3B】
図3Aの分散された三次レプリカを更新するための例示的な処理のフローチャートである。
【
図4A】
図1Aの弾性コンピューティングシステムにおいて分散された三次レプリカからボリュームのクローンを生成する概略図である。
【
図4B】
図4Aに応じた分散された三次レプリカからのクローン生成のための例示的な処理のフローチャートである。
【
図5A】
図1Aの弾性コンピューティングシステムにおいて分散された三次レプリカからボリュームのスナップショットバックアップを生成する概略図である。
【
図5B】
図5Aに応じた分散された三次レプリカからのスナップショット生成のための例示的な処理のフローチャートである。
【
図5C】
図5Aに応じた分散された三次レプリカからのスナップショット生成のための他の例示的な処理のフローチャートである。
【
図6】
図1Aの弾性コンピューティングシステムの分散ストレージボリュームへの書き込み操作からメッセージのストリームを生成するための例示的なインタラクションを示す図である。
【
図7】分散ストレージボリュームへの書き込み操作を反映するメッセージのストリームを利用して、
図1Aの弾性コンピューティングシステムの分散された三次レプリカを非同期的に更新するための例示的なインタラクションを示す図である。
【
図8】
図1Aの弾性コンピューティングシステムの分散された三次レプリカを非同期的に更新するために、分散ストレージボリュームへの書き込み操作を反映するメッセージのバンドルを生成し、そのようなバンドルをオブジェクトストレージシステムに記憶するための例示的なインタラクションを示す図である。
【
図9A】ボリュームへの書き込みを反映するメッセージのストリームに基づいて、特定の時点での
図1Aの弾性コンピューティングシステムのボリュームの状態を複製する概略図である。
【
図9B】
図9Aに従ってボリュームの状態を複製するための例示的な処理のフローチャートである。
【
図10A】集中管理機関を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【
図10B】集中管理機関を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【
図10C】集中管理機関を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【
図11A】ピアツーピア通信を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【
図11B】ピアツーピア通信を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【
図11C】ピアツーピア通信を使用してボリュームの中間複写パーティションを作成することによって、ボリュームまたはボリュームの一部の大量複写を容易にするための例示的なインタラクションを示す図である。
【
図12】ボリュームの中間複写パーティションを使用してボリュームまたはボリュームの一部の大量複写を容易にするための例示的なルーチンを示す図である。
【発明を実施するための形態】
【0004】
大まかに説明すると、本開示の態様は、ネットワーク化された弾性コンピューティングシステムにおいてブロックストレージを使用して記憶されたデータのボリュームなどの、高度に分散されたデータレプリカインスタンスの作成および管理に関する。一般に、ボリュームは、ユーザに代わって管理されるデータのセットなどの、論理的なデータの集合体に対応することができる。ボリュームの複数の複製されたインスタンスを提供するために、ボリュームはコンピューティングシステム内で複数回複製され得る(それらの複製されたインスタンスは、コンピューティングシステム上のボリュームを集合的に表し得る)。ネットワーク化された弾性コンピューティングシステムにおけるボリュームの複製されたインスタンスは、有益なことに、たとえば、ユーザがボリュームの一次レプリカ、またはブロックレベルで一次レプリカと同期されたボリュームの二次レプリカのいずれかにアクセスできるようにして、一次または二次レプリカのいずれかの障害によって、ボリュームの情報へのアクセスが妨げられないようにすることで、自動的なフェイルオーバーおよびリカバリを提供することができる。しかしながら、ボリュームの頻繁なバックアップまたは多数のコピーの作成などの特定のアクションは、ボリューム(たとえば、ボリュームのレプリカ)が記憶されたハードウェアの利用可能なデータ通信帯域幅に負担をかける可能性がある。これにより、ボリュームのユーザが長い待ち時間を経験することになる。
【0005】
前述の問題は、とりわけ、ボリュームの高度に分散された三次レプリカを作成および使用するための開示した技法により、一部の実施形態において対処する。一例では、ボリュームの一次レプリカは、典型的には、単一のパーティションまたは最大16個の異なるパーティションに記憶され、ボリュームの二次レプリカは、対応する数の異なるパーティションに記憶される。各パーティションは異なるコンピューティングデバイスに、たとえば、分散コンピューティング環境のサーバなどに記憶され得、または複数のパーティションは、単一のコンピューティングデバイスに記憶され得る。ボリュームの高度に分散された三次レプリカを作成するために、ボリュームのデータは多数のパーティション(100、1,000、100万など)に分割され、それらはいくつかの異なるコンピューティングデバイスにわたって分散して記憶される。これは、典型的には一次レプリカまたは二次レプリカが記憶される少数のデバイスではなく、多数のデバイスの接続帯域幅を利用してボリュームのデータを転送することにより、待ち時間の問題を処理する。
【0006】
一次および二次レプリカは、(たとえば、ユーザが自身のボリュームに対して読み出しまたは書き込みを要求しているときに)たとえば、ユーザ読み出しおよび書き込みにリアルタイムで対処する必要があるために、合理的に、三次レプリカほど大規模に分散されない場合があることは理解されよう。たとえば、様々なサーバ(または他のコンピュータストレージデバイス)の応答時間は異なる可能性があり、ボリューム全体の応答時間は、最も遅いサーバの応答性によって制限される可能性がある。したがって、一次および二次レプリカの最大の分散は、実際には制限され、ユーザ読み出しまたは書き込みに、閾値時間(たとえば、サービスレベルアグリーメント、すなわち、「SLA」によって確立されたもの)より長くかかる可能性が低下し得る。むしろ、ハードウェアデバイスのより小さいセットで一次および二次レプリカを保持することにより、システムは、ボリュームへの読み出しおよび書き込み中に待ち時間の短いユーザエクスペリエンスを維持することが可能であり得る。
【0007】
一次および二次レプリカとは異なり、三次レプリカは大規模に分散され得、その理由は、そのようなレプリカは、ボリュームへのユーザ読み出しまたは書き込みに直接サービスすることが想定外であり得るためである。したがって、三次レプリカ上のボリュームへの読み出しまたは書き込みを実行する際の遅延は、許容され得る。一実施形態では、三次レプリカ上のボリュームへのそのような読み出しまたは書き込みの実行は、一次または二次レプリカに含まれる情報に基づいて、三次レプリカを非同期的に更新することを伴い得る。非同期更新はいくつかの利点を提供し、たとえば、一次および二次レプリカへの書き込みによって、三次レプリカが最新の状態に保たれる。もう1つの利点は、数百万のノードの更新が、一次および二次レプリカのより少ないノードの更新よりも低速であり得るという事実に関するものであり、そのため、非同期更新により、一次レプリカでの書き込みを遅くせずに、三次レプリカからの高速読み出しの利点が得られる。
【0008】
一実施形態では、三次レプリカは、一次および二次レプリカと補完的に機能して、様々な方法でボリュームとインタラクションを行う場合に、短いユーザ待ち時間を提供する。たとえば、一次レプリカは、ボリュームに対する読み出しおよび書き込み(「入出力操作」、または単に「I/O操作」と呼ばれることがある)を容易にして、ボリュームに関するユーザエクスペリエンスを維持するように構成することができる。二次レプリカを一次レプリカと同期的に更新し、たとえば、一次レプリカをホストするコンピューティングハードウェアに障害が発生した場合などに、フェイルオーバー動作中のシームレスな移行を提供することができる。有益なことに、三次レプリカのストレージアーキテクチャは、一次および二次レプリカに比べて多数のコンピューティングデバイスにわたってボリュームを複製するように構成することができるので、数千のクローン(たとえば、元のボリュームから直接コピーされた新しいボリューム)を同時に作成することが可能になり、バックアップコピーを高速に作成することが可能になり、高度にスケールアウトされた三次レプリカによって、一次および二次レプリカのみを使用して可能になるよりも、ボリュームの新しいコピーを迅速に作成できるようになるので、リカバリを高速化することが可能になる。一実施形態では、三次レプリカは、一次および二次レプリカと同期的に更新されず、したがって、ボリュームへの標準的なユーザI/O操作には利用されない。例示的には、三次レプリカが、いくつかのパーティションにわたるボリュームのデータの分散ストレージである場合であって、データが三次レプリカに対して要求されたか、または三次レプリカに書き込まれる場合、応答が最も遅いパーティションが操作全体の遅延を引き起こす可能性があり、これは「テールレイテンシ(tail latency)」と呼ばれる。三次レプリカが数千または数百万のパーティションに記憶されている場合、いずれか1つのパーティションが利用不可能になったり、所与の時間に遅延が発生したりする可能性が高くなって、I/O操作の待ち時間が長くなり得る。そのため、三次レプリカは、同期的なユーザI/O操作を処理するにはあまり適していない場合があるが、それでもなお、ボリュームからデータを迅速に転送するための利点を提供し得る。
【0009】
説明のために、1デバイスあたり、8テラバイト(「TB」)のボリューム、および1ギガバイト(「GB」)/秒のデータ転送制限の例を考える。単一のデバイスからボリュームのデータを転送するには、(例のため、転送容量を最大限に使用すると仮定すると)少なくとも2時間13分20秒かかる。一次および二次レプリカは最大16個のパーティションに分割でき、データ転送制限はパーティションごとに適用される(たとえば、デバイスごとに1つのパーティション)。16個のパーティションの場合、ボリュームからデータを転送するのに、まだ少なくとも8分20秒かかる。したがって、ボリュームからのデータの転送は、基本的に、ボリュームが散在するデバイスの数によって制約される。しかしながら、ボリュームが1,000台のデバイスに分割される場合、各デバイスはボリュームのデータの1/1,000をプッシュするだけでよく、現在の例では、(一次または二次レプリカではなく、三次レプリカから)ボリュームの完全なデータを転送するのに必要な時間は8秒に短縮される。
【0010】
本開示の態様はさらに、ボリュームとのインタラクションのロギングを容易にするためのストリームロギングシステムの利用に関する。具体的には、コンピューティングデバイスの集合体は、ボリュームへの変更(たとえば、ユーザI/O操作に反映される)が、ボリュームに関連付けられた1つまたは複数のメッセージストリーム内のメッセージとして反映される「ロガーフリート(logger fleet)」を実装し得る。本明細書に開示するように、ロガーフリートは、分散された三次レプリカと、一次および二次レプリカとの非同期更新を可能にし得、その結果、ロガーフリートは、分散された三次レプリカが、一次および二次レプリカ(これらのレプリカは、たとえば、同期的に更新され得る)と「結果整合性(eventually consistent)」を有することを可能にする。たとえば、ボリュームへの各変更は、(たとえば、一次レプリカを実装するデバイスによって)ロガーフリートに、ボリュームに関連付けられたストリーム内のメッセージとして送信され得る。ロガーフリートは、データの複写および冗長性などの多様なメカニズムを適用して、ストリームに送信されたメッセージが、後で正しい順序で、確実にボリュームの分散された三次レプリカをホストするデバイスに送信されるようにし得る。次いで、デバイスは、各メッセージから、ボリュームの分散された三次レプリカへの変更を再生成して、第3のレプリカを、メッセージが生成されたときの一次レプリカの状態と一致する状態にし得る。したがって、ロガーフリートを使用することにより、各変更が分散された三次レプリカをホストするデバイスにおいて正しい順序で正常にコミットされるようにするなどの機能が、一次レプリカをホストするデバイスからオフロードされ得る。
【0011】
ロガーフリートを使用してボリュームへの変更をメッセージストリームとして記録することにより、本明細書に記載の追加の機能が可能になり得る。たとえば、ボリュームへの変更をメッセージストリームとして記憶することにより、本明細書に開示する弾性コンピューティングシステムは、ボリュームへの操作を「巻き戻す」こと、または別の方法で、ストリームのメッセージに反映された特定の時点でのボリュームの状態を再現することが可能になり得る。例示的には、ユーザは、ボリュームに対する最後のn個の変更操作を「元に戻す」ことを要求し得、弾性コンピューティングシステムは、それらの変更を反映するメッセージのストリームを利用して、ボリュームをそれらの操作前の状態に戻し得る。他の例として、システムは、メッセージのストリームを利用して、任意の状態のボリュームのポイントインタイムのスナップショットを、ボリュームがその状態にあったときから変更されている場合でも、生成し得る。具体的には、システムは、既知の状態(たとえば、現在の状態または以前の既知の状態であり、それ自体がスナップショットに反映され得る)から一時ボリュームを生成し、メッセージを適用して(たとえば、後の状態から逆方向に進む場合にはメッセージを取り消し、または新しいスナップショットが求められている時刻よりも前の状態から順方向に進む場合にはメッセージを実行して)、一時ボリュームを、スナップショットが望まれている時点で元のボリュームが置かれていた状態にし得る。次いで、システムは一時ボリュームのスナップショットを生成して、メッセージストリーム内に反映された任意の過去の時点でのボリュームのスナップショットを作成することを可能にし得る。以下で論じるように、ロガーフリートは、ボリュームに関する他の多様な機能を可能にし得る。たとえば、弾性コンピューティングシステムは、ユーザがロガーフリートに保持されているボリュームへのメッセージを読み出し得るアプリケーションプログラミングインターフェース(API)を提供して、特定の基準を満たす変更がロガーフリートで検出された場合のユーザへの通知などの機能を可能にし得る。
【0012】
上記のように、分散された三次レプリカを使用することにより、分散された三次レプリカのパーティションにわたって提供される高い並列性によって、ボリュームの迅速な複写が可能になり得る。しかしながら、それでもなお、分散された三次レプリカのみを使用する場合、所望の複写には過度の時間が必要になる場合があり得る。たとえば、ユーザがソースボリュームを数百または数千のターゲットボリュームに複写することを望む場合、単一の分散された三次レプリカを使用すると、そのような操作を完了するのに多くの時間がかかり得る。これに対処するために、本出願の実施形態は、追加の高度に分散されたレプリカ、またはそれらのレプリカの一部の実装および使用を可能にして、ボリュームの大規模な複写を容易にする。例示的には、ユーザがソースボリュームを1000回複写することを望む場合、第1の高度に分散されたレプリカ(たとえば、三次レプリカ)を使用して、第2の高度に分散されたレプリカを作成し得る。次いで、これら2つの高度に分散されたレプリカのそれぞれを使用して、追加の高度に分散されたレプリカを作成し得る。このようにして、ボリュームの高度に分散されたレプリカの数は、指数関数的に増加し得る。ボリュームの高度に分散されたレプリカの数が十分なレベル(たとえば、所定の最大値、ターゲットボリュームへの複写が閾値期間内に完了すると予想されるようなレベルなど)に達した場合、高度に分散されたレプリカの集合体を使用して、ソースボリュームを所望のターゲットボリュームに(たとえば、ブロックストアサーバのセット上のボリュームとして、コンピューティングサーバ上のインスタンスの仮想ディスクドライブとして、など)複写することができる。その後、追加の高度に分散されたレプリカを削除して、そのようないくつかの高度に分散されたレプリカを提供する際のコンピューティングリソースの過剰な使用を回避し得る。
【0013】
場合によっては、ユーザは、ボリューム全体の大量複写を要求し得る。そのような場合、複写を容易にするために、いくつかの追加の高度に分散されたレプリカを作成することができる。これらの追加のレプリカを、本明細書では一般に「中間複写」レプリカと呼び、その理由は、これらのレプリカを、最初の高度に分散されたレプリカ(たとえば、三次レプリカ)と、大量複写が要求されているターゲットボリュームとの間の中間物として使用することができるためである。他の例では、ユーザは、ボリュームの一部のみの大量複写を要求し得る。たとえば、ユーザは、ボリュームの単一のファイル(たとえば、構成ファイル)またはセクタ(たとえば、ブートセクタ)を多数のターゲットボリュームにコピーすることを望み得る。そのような場合、ボリュームの追加の高度に分散されたレプリカを作成するのではなく、高度に分散されたレプリカの1つまたは複数のパーティションが複写され得る。たとえば、高度に分散された三次レプリカの単一パーティションに記憶されたファイルの複写が要求された場合、ブロックストアサーバは、(たとえば、閾値期間内に)ターゲットボリュームにファイルをコピーするのに十分な数の複写パーティションが存在するまで、(たとえば、上記の指数関数的な処理を使用して)その単一パーティションを複写するように構成され得る。そのような複写されたパーティションを、本明細書では一般に「中間複写」パーティションと呼び、その理由は、これらのパーティションを、最初の高度に分散されたレプリカ(たとえば、三次レプリカ)のパーティションと、大量複写が要求されているターゲットボリュームとの間の中間物として使用することができるためである。中間複写レプリカ(たとえば、ボリューム全体を表すもの)および中間複写パーティション(たとえば、高度に分散されたレプリカの個々のパーティションを表すもの)を、本明細書ではまとめて「中間複写」と呼ぶ。
【0014】
一実施形態では、中間複写の作成は、集中管理機関によって容易にされる。たとえば、高度に分散されたレプリカから情報をコピーする要求を受信し、要求が中間複写を作成するための閾値レベルを満たしているか否かを判定し、中間複写を作成させ、中間複写を使用して要求された情報のコピーを実行するコントローラが設けられ得る。他の実施形態では、中間複写の作成は、高度に分散されたレプリカのパーティションを実装するサーバのピアツーピア動作によって容易になる。たとえば、高度に分散されたレプリカを実装するサーバの集合体の中の各サーバは、そのサーバ上のレプリカのパーティションから情報をコピーする要求を監視し、要求がパーティションの1つまたは複数の中間複写を作成するための閾値レベルを満たしているか否かを判定し得る。満たしている場合、サーバはソースパーティションを集合体の中の他のサーバにコピーし、パーティションをコピーする要求の少なくとも一部を他のサーバに転送することによって、中間複写パーティションを生成し得る。この機能は各サーバに実装できるので、このピアツーピア動作により、集中管理を必要とせずに、パーティションの中間複写の数を指数関数的に増やしやすくすることができる。
【0015】
当業者には理解されるように、高度に分散されたレプリカおよび/またはロガーフリートを使用することは、本明細書に開示するように、以前の実施態様に対する大幅な技術的進歩を表す。具体的には、高度にパーティション分割された三次レプリカを使用することにより、本明細書に開示するように、弾性コンピューティングシステムは、以前のシステムの帯域幅またはスループットの制限を受けることなく、データボリュームの迅速な複製を容易にすること、またはデータボリュームへの他の集中的なI/O操作を実行することが可能になる。また、高度にパーティション分割された三次レプリカと、それほど高度にパーティション分割されていない一次および二次レプリカとを組み合わせることにより、高度にパーティション分割されたレプリカのみを利用する際の困難、たとえば、高レベルのパーティション分割によって生じる潜在的な待ち時間などが克服される。したがって、高度にパーティション分割された三次レプリカと、それほど高度にパーティション分割されていない一次および二次レプリカとを組み合わせることにより、弾性コンピューティングシステムは、ユーザI/O操作への応答性が高まると共に、ボリュームの迅速な複写または集中的なI/O操作を容易にすることが可能になる。典型的なユーザI/O操作への応答性を維持しながら、これらの集中的なI/O操作の速度を高めることによって、本開示は弾性コンピューティングシステムの動作への大幅な改善を表す。たとえば、本明細書に開示する実施形態は、弾性コンピューティングシステムのコンピューティングリソースが使用される効率を大幅に改善することができ、その結果、システムの応答性が向上し、総リソース使用量が減少する。ボリュームのデータ変更メッセージを記憶するロガーフリートの実装は、たとえば、それほど分散されていないレプリカに対する分散された三次レプリカの非同期更新を可能にすることにより、上記の利点を促進することができる。本明細書におけるロガーフリートの開示はまた、ボリュームへの操作を「巻き戻す」機能、または前の状態のボリュームを再現する機能など、弾性コンピューティングシステムの動作への他の改善を促進することができる。ボリュームを過去の状態に戻すこの機能は、ストレージデバイスにおける長年の問題、(たとえば、悪意のあるソフトウェアによる)デバイスへの誤った書き込みの後にデバイスを過去の状態に復元することの難しさなどに対処する。また、当業者には認識されるように、本明細書に記載の実施形態(たとえば、高度にパーティション分割されたレプリカと、パーティション分割が少ないレプリカとの併用、ボリュームへの変更をメッセージストリームとして記憶するロガーフリートの実装)は、情報検索およびデータストレージの分野における長年の技術的課題、たとえば、個々のコンピューティングデバイスの限られた帯域幅、分散コンピューティングシステムによって課せられる待ち時間、そのようなシステムにわたる帯域幅と待ち時間との懸念のバランスを取ることの難しさ、(特に長時間にわたって)そのようなシステムにおいてデータの回復力を確保することの難しさなど、に対する技術的解決策を提供する。そのため、本明細書に記載の実施形態は、コンピュータ関連技術における大幅な改善を表す。
【0016】
以下、本開示の様々な態様を特定の実施例および実施形態に関して説明し、これらは本開示を限定ではなく例示するものとする。本明細書に記載の実施例および実施形態は、例示の目的で、特定の計算およびアルゴリズムに焦点を当てているが、当業者は、実施例が例示にすぎず、限定を意図していないことを理解するであろう。たとえば、本明細書では「三次」レプリカを参照して実施形態を開示しているが、この用語は、このレプリカが2つの代替的なレプリカを含むシステムに導入されるという仮定の下で、単に例示の目的で使用している。しかしながら、本開示の実施形態は、より多くのまたはより少ない代替的なレプリカを含み得る。たとえば、一実施形態では、高度にパーティション分割されたレプリカは、単一のそれほどパーティション分割されていないレプリカ、または3つ以上のそれほどパーティション分割されていないレプリカと共に使用され得る。したがって、本明細書で使用する場合、一次または二次レプリカへの言及は一般に、それほどパーティション分割されていないレプリカの一例を指すものと理解されたい(たとえば、ボリュームは1~16個のレプリカに分割され、またはテールレイテンシが標準的なユーザI/O操作の応答性に大きく影響するとは予想されないような数のレプリカに分割される)。また、本明細書では、高度にパーティション分割された「三次」レプリカを参照して実施形態を論じているが、本開示の一部の実施形態は、2つ以上の高度にパーティション分割されたレプリカを利用し得、それらはいずれも、簡単のために「三次」レプリカと呼び得る。したがって、三次レプリカへの言及は、本明細書で使用する場合、(たとえば、同じボリュームを表すそれほどパーティション分割されていないレプリカに対して)高度にパーティション分割されたレプリカを指すものと理解されたい。以下で論じるように、そのような高度にパーティション分割されたレプリカは、ボリューム全体の複写など、集中的なI/O操作の迅速な実行を可能にするのに十分な数のパーティションを含み得る。このパーティションの数は、たとえば、1000~数百万パーティションの間であり得る。以下に提供する例では、場合によっては、ボリュームへの変更を「書き込み操作」と呼び得る。「書き込み操作」という用語は、ボリュームに新しい情報を書き込む要求、またはボリューム内の既存の情報を変更または削除する要求を含む、ボリューム内に含まれるデータを変更する任意の要求を指すものと理解されたい。
【0017】
三次レプリカを用いた例示的なコンピューティング環境の概要
図1Aは、開示した三次レプリカを実装できる弾性コンピューティングシステム120を含む例示的なコンピューティング環境100を示している。弾性コンピューティングシステム120は、ネットワーク125を介してユーザデバイス130によってアクセスすることができる。弾性コンピューティングシステム120は、1つまたは複数のコンピューティングサーバ115、1つまたは複数のオブジェクトストレージサーバ110、および1つまたは複数のブロックストアサーバ105を含み、これらは互いに、およびネットワーク125とネットワーク通信して、とりわけ、インスタンス116、ボリューム111、およびバケット106を含むコンピューティングリソースへのオンデマンドアクセスをユーザに提供する。これらの特定のリソースについては、以下でさらに詳細に説明する。弾性コンピューティングシステム120の一部の実施態様は、ドメインネームサービス(「DNS」)サーバ、リレーショナルデータベースサーバ、およびオンデマンドクラウドコンピューティングプラットフォームをサポートするための他のサーバ構成(図示せず)を追加的に含むことができる。各サーバは、ハードウェアコンピュータメモリおよび/またはプロセッサと、そのサーバの全体的な管理および動作のための実行可能なプログラム命令を提供するオペレーティングシステムと、サーバのプロセッサによって実行されると、サーバにその意図された機能を行わせる命令を記憶するコンピュータ可読媒体と、を含む。
【0018】
弾性コンピューティングシステム120は、ネットワーク125を介してオンデマンドのスケーラブルなコンピューティングプラットフォームをユーザに提供して、たとえば、ユーザが、コンピューティングサーバ115、オブジェクトストレージサーバ110、およびブロックストアサーバ105の使用を通じて、スケーラブルな「仮想コンピューティングデバイス」を自由に使えるようにすることができる。これらの仮想コンピューティングデバイスは、ハードウェア(様々なタイプのプロセッサ、ローカルメモリ、ランダムアクセスメモリ(「RAM」)、ハードディスクおよび/またはソリッドステートドライブ(「SSD」)ストレージ)、選ばれたオペレーティングシステム、ネットワーク機能、およびプリロードされたアプリケーションソフトウェアを含むパーソナルコンピューティングデバイスの属性を有する。各仮想コンピューティングデバイスはまた、そのコンソール入出力(「I/O」)(たとえば、キーボード、ディスプレイ、およびマウス)を仮想化し得る。この仮想化により、ユーザは、ブラウザ、アプリケーションプログラミングインターフェース、ソフトウェア開発キットなどのコンピュータアプリケーションを使用して自身の仮想コンピューティングデバイスに接続することによって、パーソナルコンピューティングデバイスであるかのように、自身の仮想コンピューティングデバイスを構成および使用することが可能になる。ユーザが利用可能な固定量のハードウェアリソースを所有するパーソナルコンピューティングデバイスとは異なり、仮想コンピューティングデバイスに関連付けられたハードウェアは、ユーザが必要とするリソースに応じてスケールアップまたはスケールダウンすることができる。ユーザは自身の仮想コンピューティングシステムをデプロイして、自身で使用するための、および/または自身の顧客もしくはクライアントが使用するための、ネットワークベースのサービスを提供することを選ぶことができる。
【0019】
弾性コンピューティングシステム120を、いくつかの地理的に離れたリージョンにわたって提供することにより、たとえば、ユーザに対して、自身の仮想コンピューティングデバイスを自身の地理的場所またはその付近に配置して、より短い待ち時間を提供することができる。各リージョンは、場所および電力供給の観点で他の全てのリージョンから物理的に分離され、独立しており、ネットワーク125を介して他のリージョンとデータを通信し得る。各リージョンは、2つ以上のアベイラビリティゾーンを含むことができ、各アベイラビリティゾーンは、1つまたは複数の物理データセンターによって支持され、冗長かつ個別の電力、ネットワークおよび接続が提供されて、2つのゾーンに同時に障害が発生する可能性が低下する。単一のアベイラビリティゾーンが複数のデータセンターに及ぶことはできるが、2つのアベイラビリティゾーンがデータセンターを共有することはない。これにより、データセンターレベルの障害からユーザを保護することができる。データセンターとは、コンピューティングサーバ115、オブジェクトストレージサーバ110、およびブロックストアサーバ105のうちの1つまたは複数を収容し、それらに電力および冷却を提供する物理的な建物または囲い地を指す。アベイラビリティゾーン内のデータセンター、およびリージョン内のアベイラビリティゾーンは、光ファイバーネットワークケーブルなどのプライベートな待ち時間の短いリンクを介して相互に接続される。コンピューティングハードウェアのこの区分化および地理的分散により、弾性コンピューティングシステム120は、高度のフォールトトレランスおよび安定性を有する地球規模の高速サービスをユーザに提供することができる。所与のリージョン内のゾーンにリソースを均等に分散させるために、弾性コンピューティングシステム120のプロバイダは、アベイラビリティゾーンを各ユーザアカウントの識別子に独立してマッピングし得る。
【0020】
弾性コンピューティングシステム内の様々なサーバの役割に特に目を向けると、コンピューティングサーバ115は、ユーザに対して、自身のソフトウェアシステムを構築およびホストするためのサイズ変更可能なコンピューティング能力を提供する1つまたは複数のサーバを含む。ユーザはコンピューティングサーバ115を使用して、「インスタンス」116と呼ばれる、必要な数の仮想コンピューティング環境を起動することができる。インスタンス116は、ユーザのニーズに応じて、処理能力、メモリ、ストレージ、およびネットワーク容量の様々な構成を有することができる。コンピューティングサーバ115はまた、インスタンスの動作中に使用される一時データ用のコンピュータストレージを含むことができるが、インスタンスがシャットダウンされるとすぐに、このデータは失われる。
【0021】
ブロックストアサーバ105は、ボリューム106の形態でコンピューティングサーバ115に永続的なデータストレージを提供する。ブロックストアサーバ105は、データがブロックとして記憶される1つまたは複数のサーバを含む。ブロックはバイトまたはビットのシーケンスであり、ブロックサイズの最大長を有する整数個のレコードを通常は含む。ブロック化されたデータは通常、データバッファに記憶され、一度にブロック全体が読み書きされる。ブロック化により、オーバーヘッドを削減し、データストリームの処理を高速化することができる。各ブロックには、それを記憶および取り出しできる一意の識別子が割り当てられるが、典型的には、さらなるコンテキストを提供するメタデータは割り当てられない。データのブロックは、実装に応じて、たとえば、512バイト、1キロバイト(「kB」)、4kB、8kB、16kB、32kB以上にすることができる。三次レプリカのパーティションは、1ブロックまたは複数ブロックのサイズにすることができる。たとえば、三次レプリカのパーティションは、オブジェクトストレージサーバ110によって使用される最小記憶単位のサイズに等しいブロックの数、またはオブジェクトストレージサーバ110へのスループットを最大化するブロックの数としてサイズ設定することができる。たとえば、オブジェクトストレージサーバ110が1000ブロックの最小記憶単位(たとえば、ブロックが1kBのサイズである場合は1メガバイトのデータ)を実装する場合、三次レプリカの各パーティションは、1000ブロック(1メガバイト)のサイズであり得る。対照的に、一次および二次レプリカの典型的なパーティションのサイズは、ユーザボリュームのサイズなどに応じて、8GBから62.5GB(またはそれ以上)の範囲である。
【0022】
たとえば1GBから1テラバイトTBのサイズの範囲の個々のハードドライブとして扱うことができるユーザボリューム106は、ブロックストアサーバ105に記憶された1つまたは複数のブロックで構成される。個々のハードドライブとして扱われるが、ボリュームは、1つまたは複数の基礎となる物理ホストデバイス上に実装された1つまたは複数の仮想化デバイスとして記憶され得ることは理解されよう。ボリューム106は、少ない回数(たとえば、最大16回)だけパーティション分割され得、各パーティションは、一部の実施態様では約1GB/秒(「Gbps」)でデータを転送する能力を有する弾性コンピューティングシステム120のデバイスによってホストされる。これらのボリュームは、コンピューティングサーバ115の特定のインスタンスにつなげることができる永続的な専用ストレージを提供する。各ボリュームは、コンピューティングサーバ115上で動作する単一のインスタンスにつなげられ得、そのインスタンスから取り外して、他のインスタンスにつなげ直すことができる。
図1Bに関してより詳細に説明するように、ブロックストアサーバ105は、アベイラビリティゾーン内の複数のサーバにわたってボリュームを複製することにより、ボリュームに関する冗長性を内蔵しており、これは、個々のドライブが故障するか、または他の何らかの単一の障害が発生した場合に、ボリュームが故障しないことを意味する。
【0023】
オブジェクトストレージサーバ110は、弾性コンピューティング環境120内の他のタイプのストレージを表す。オブジェクトストレージサーバ110は、バケット111と呼ばれるリソース内にオブジェクトとしてデータが記憶される1つまたは複数のサーバを含む。各オブジェクトは、典型的には、記憶されているデータと、記憶されたオブジェクトの分析に関するオブジェクトストレージサーバ110の様々な機能を可能にする可変量のメタデータと、オブジェクトを取り出すために使用できるグローバルに一意の識別子またはキーと、を含む。オブジェクトストレージサーバ110に記憶されたオブジェクトは、一意の識別子に関連付けられており、そのため、それらへの許可されたアクセスは、任意の場所にあるネットワーク化されたコンピューティングデバイスからの要求を通じて獲得することができる。各バケットは、所与のユーザアカウントに関連付けられる。ユーザは自身のバケット内に所望の数のオブジェクトを記憶することができ、自身のバケット内のオブジェクトの書き込み、読み出し、削除を行うことができ、自身のバケットおよび含まれているオブジェクトへのアクセスを制御することができる。さらに、いくつかの異なるオブジェクトストレージサーバ110が上述のリージョンのうちの異なるリージョンに分散された実施形態では、ユーザは、たとえば待ち時間を最適化するために、バケットが記憶されるリージョン(または複数のリージョン)を選ぶことができる。いくつかの例を挙げると、ユーザは、ソーシャルメディアウェブサイト上の写真、音楽ストリーミングウェブサイト上の曲、またはオンラインコラボレーションサービス内のファイルを記憶するなどの目的で、オブジェクトストレージサーバ110を使用することができる。クラウドで開発されるアプリケーションは、オブジェクトストレージの広大なスケーラビリティおよびメタデータ特性を利用することが多い。オブジェクトストレージサーバ110は、高度に並列化されたデータアクセスおよび転送をサポートすることができる。
【0024】
オブジェクトストレージサーバ110は、データを複数のアベイラビリティゾーンに自動的に複製することができるので、オブジェクトストレージサーバ110は、ブロックストアサーバ105よりもさらに高い冗長性を提供することができる。オブジェクトストレージサーバ110はまた、ブロックストアサーバ105とは異なるデータスループットを有し、たとえば、単一のデータストリームに対して約20Mbpsである。オブジェクトストレージサーバ110は、上述のインスタンスおよびボリュームとは独立して使用することができるが、スナップショット(たとえば、オブジェクトとして記憶されるボリュームデータのバックアップ)に関して以下に説明するデータバックアップを提供するために使用することもできる。
【0025】
弾性コンピューティングシステム120は、ネットワーク125を介してユーザデバイス130と通信することができる。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、もしくは他の任意のそのようなネットワーク、またはそれらの組み合わせを含む、任意の適切なネットワークを含むことができる。図示の実施形態では、ネットワーク125はインターネットである。インターネットまたは他の前述のタイプの通信ネットワークのいずれかを介して通信するためのプロトコルおよび構成要素は、コンピュータ通信の当業者には知られているので、本明細書でより詳細に説明する必要はない。ユーザデバイス130は、任意のネットワーク機能を備えたコンピューティングデバイス、たとえば、デスクトップコンピュータ、ラップトップ、スマートフォン、タブレット、電子書籍リーダー、ゲームコンソールなどを含むことができる。ユーザはネットワーク125を介して弾性コンピューティングシステム120にアクセスすることによって、自身のデータおよびコンピューティングリソースを閲覧または管理すると共に、弾性コンピューティングシステム120によってホストされるウェブサイトおよび/またはアプリケーションを使用することができる。
【0026】
ユーザは、ブロックストアサーバ105に記憶された自身のボリュームのスナップショットを作成するように弾性コンピューティングシステム120に指示することができる。一実施形態では、スナップショットは、1つまたは複数のオブジェクトストレージサーバ110にボリュームのデータのコピーとして(たとえば、単一のオブジェクトまたはオブジェクトの集合体として)記憶される、ボリュームのポイントインタイムのブロックレベルのバックアップである。オブジェクトストレージサーバ110用の一般的なインターフェースを介してスナップショットを管理することに加えて、またはその代替として、スナップショットは、ブロックストアサーバ105のアプリケーションプログラミングインターフェース(「API」)を介して管理され得る。一例では、スナップショットは、ボリューム内のデータの増分レコードとして実装される。例示的には、ボリュームの最初のスナップショットが撮られる場合、有効なデータを含むボリュームの全てのブロックが、1つまたは複数のオブジェクトとしてオブジェクトストレージサーバ110にコピーされ、次いで、スナップショットの「目録」または「マニフェスト」ファイルが、オブジェクトストレージサーバ110に書き込まれ、このファイルは、1つまたは複数のオブジェクト、ならびに1つまたは複数のオブジェクトのそれぞれが対応するボリュームのブロックの記録を含む。増分スナップショットを使用しているため、同じボリュームの後続のスナップショットが撮られる場合、最初のスナップショット以降に変更されたブロックのみが、オブジェクトストレージサーバ110にコピーされる必要があり、目録またはマニフェストファイルを、各データブロックの最新バージョンを指すように更新することができる(または、第2の目録またはマニフェストファイルを作成することができ、最初の目録またはマニフェストファイルをボリュームの前のバージョンの記録として残すことが可能になる)。初期スナップショットを使用して、初期スナップショットの時点でのボリュームを再構築することができ、または後続の時点のスナップショットを互いに組み合わせて、または初期スナップショットと組み合わせて、任意の個々の後続の時点でのボリューム全体を再構築することができる。このようにして、スナップショットは、所与のボリュームの増分バックアップおよび完全バックアップの両方として機能することができる。
【0027】
スナップショットを作成する場合、スナップショットが開始される時刻までにボリュームに書き込まれたあらゆるデータをスナップショットに含めることができ、ユーザはスナップショットの作成中に、スナップショットに影響を与えることなく、自身のボリュームへのI/O操作を引き続き実行することができる。ユーザはスナップショットから新しいボリュームを作成して、たとえば、自身のボリュームの複写を作成したり、データを復元したりすることができる。新しいボリュームはスナップショットに記憶された全てのデータを含むので、スナップショットが開始されたときの元のボリュームの複写になる。このように、スナップショットを使用して、ボリュームのデータを1つのアベイラビリティゾーンから他のアベイラビリティゾーンに転送することもできる。同様に、インスタンスのスナップショットを撮って、そのインスタンスの新しい仮想マシンインスタンスを作成することができる。
【0028】
図1Bは、本開示の実施形態による、ボリュームの一次、二次、および三次レプリカを記憶するようにブロックストアサーバ105を構成できる方法の一例を示している。ブロックストアサーバ105は、サーバ105間でブロックデバイスの内容をミラーリングし、冗長サーバにわたってデータを同期的に複製するように構成される。
図1Bはまた、弾性コンピューティングシステム120のデータプレーン150および制御プレーン155を示している。データプレーン150は、弾性コンピューティングシステム120を通じたユーザデータの動きを表し、制御プレーン155は、弾性コンピューティングシステム120を通じた制御信号の動きを表す。当業者は、データプレーン150および制御プレーン155が、サーバ105の物理的構成ではなく、サーバ105の動作に関連する論理構造を表すことを理解するであろう。
【0029】
制御プレーン155は、システムおよびユーザの要求を調整し、それらを弾性コンピューティングシステム120内の適切なサーバに伝播させるためのコンピュータ実行可能ソフトウェアを用いて少なくとも1つのサーバにより実装できる論理構造である。制御プレーン155の機能は、データの複製、フェイルオーバー動作、およびデータプレーン150に関して特定のアクションを実行するためのユーザからの要求の受信を含む。これらは、ボリューム106の作成、クローン作成、およびスナップショット作成を含むことができる。図示の実施形態のデータプレーン150は、一次レプリカ135、二次レプリカ140、および三次レプリカ145への操作の実行によって実装される。
【0030】
上述のように、ユーザI/O操作は、一次レプリカ135において、二次レプリカ140と同期的に情報を複製するブロックレベルの複製メカニズムを用いて実行することができる。一次レプリカ135および二次レプリカ140は、データの整合性を高めるために、異なるブロックストアサーバ105A、105Bにプロビジョニングすることができる。サーバ105A、105Bは単一のサーバとして図示しているが、一部の実施態様では、一次レプリカ135および二次レプリカ140はそれぞれいくつかのパーティションを含み得、各パーティションが異なるサーバに記憶され得る。一次レプリカ135への任意のI/O操作を二次レプリカ140に複製することを可能にするブロックレベルの複製メカニズムを、ボリュームの一次および二次レプリカの両方にインストールすることができる。複数のレプリカにわたるボリュームへの同期的なI/O操作を提供するための様々なメカニズムが当技術分野で知られており、したがって、本明細書では詳細に説明しない。一次レプリカ135の障害または停止は、二次レプリカ140に対してフェイルオーバー動作を実行することにより、対処することができる。DNSネームまたは他のそのような手法を使用して、フェイルオーバー中にネームを二次レプリカ140にエイリアスできるようにして、「新しい」一次レプリカを利用するためにユーザ側でアクションが必要とされないようにすることができる。あるいは、一次レプリカにつなげられたインスタンスをホストするサーバは、ボリュームのIPアドレス、ボリュームID、またはその他の識別データをメモリに記憶して、二次レプリカに接続するか、フェイルオーバーが発生した場合に前述のデータを提供することができる制御プレーンシステムのIPアドレスに接続することができる。複製されたボリュームのプロビジョニングおよび新しいボリュームの作成は、制御プレーン155によって制御することができる。
【0031】
一次および二次レプリカは、最大で16個のパーティションに分割することができる。一般的に説明すると、パーティション分割とは、コンピュータストレージ上に1つまたは複数の領域を作成して、オペレーティングシステムが各領域内の情報を個別に管理できるようにすることであり、各パーティションは、物理コンピュータストレージの一部を使用する別個の「論理的な」ストレージデバイスである。各パーティションは、弾性コンピューティングシステム120の別個のデバイスによってホストされ得、そのパーティションが実装されるホストデバイスが利用可能なコンピューティングリソースまでのデータ転送機能制限を有し得る。たとえば、パーティションが1Gbpsのネットワークインターフェースを有する物理デバイスでホストされている場合、そのパーティションは、1Gbpsのデータ転送機能制限を有し得る(または、ネットワークインターフェース上で同時に送信される必要がある複数のパーティションをホストデバイスがホストする場合はそれ以下であり得る)。上述のように、このデータ転送機能制限により、特にデータのボリュームが大きい場合、ボリュームのデータからのかなりの転送を必要とする特定のユーザアクションに待ち時間が発生する。たとえば、ユーザはインスタンスの多数のクローンを作成し得、また、新しい各インスタンスにつなげる、関連付けられたボリュームのクローンを作成することを望み得る。これは、一例として、ユーザボリュームがリアルタイムのマーケットデータを含み、ユーザがデータを分析するための様々なアルゴリズムをテストする1000回の実験を実行し、次の取引日までに最適なアルゴリズムを弾き出すことを望む場合に、有益な可能性がある。そのような実験は、ボリューム内に存在するソフトウェアに基づいて行われるので、ボリュームを1000台のマシンにクローンすることにより、実験を実行することが可能になる。これは、短い時間枠内に多数のクローンを作成するためのユーザニーズの例示的な一例にすぎないことは理解されよう。一次および二次レプリカのデータ転送帯域幅は、パーティションがホストされているソースデバイスのデータ転送機能制限によって制限され、制御プレーン155はまた、この帯域幅の一部を予約して、一次レプリカ135でのI/O操作と、二次レプリカ140へのブロックの同期的な複製とをサポートし得る(たとえば、標準的なユーザI/O操作がクローン作成動作中も続行し得るようにする)。
【0032】
対照的に、三次レプリカ145は、一次および二次レプリカのパーティションの数よりも多数のパーティションに分割することができる。一部の実施形態では、この数は、1,000パーティションから3200万パーティション(たとえば、ボリュームブロックあたり1つのパーティション)の範囲にすることができる。一部の実施形態では、より少ない数のパーティションを三次レプリカに使用することができ、たとえば、閾値期間内にボリューム全体のクローンまたはスナップショットを作成可能な特定の数にすることができる。この例では、ネットワークインターフェースの帯域幅、オブジェクトストアへの帯域幅、ボリュームのサイズ、および目標完了時間を使用して、使用するパーティションの数を決定することができる。有益なことに、パーティションの数が増えると、三次レプリカのデータを転送するのに利用可能な合計帯域幅が増える。各パーティションは、ボリュームの1つまたは複数のブロックを含むことができ、これらのパーティションは、弾性コンピューティングシステム120の異なるデバイスのコンテナに記憶することができる。一実施形態では、コンテナは、生の非構造化バイナリファイル、たとえば、バイナリラージオブジェクト(「BLOB」)データファイルを記憶し、クエリされた場合にそれらを返す。制御プレーン155は、(たとえば、一次または二次レプリカに記憶された)ボリュームのデータを個々のパーティションに分割することができ、各パーティションは、容量を有する弾性コンピューティングシステム120(またはその指定されたリージョンまたはアベイラビリティゾーン)内の任意のコンテナに記憶され得る。これらのコンテナは追加専用にすることができ、コンテナのストレージスペースが完全に使用されると(たとえば、ストレージの残りの部分が小さすぎて、三次レプリカの他のパーティションを記憶できなくなると)閉じることができる。冗長性のために、一部の実施態様では、コンテナサーバは、コンテナの複数のコピーを複製するためのコンピュータ実行可能命令を用いて構成することができる。
【0033】
三次レプリカ145は、ボリュームのスナップショット作成およびクローン作成を加速するための弾性コンピューティングシステム120内の新しいリソースと見なすことができる。この三次レプリカ145は、1人のユーザが、たとえば、自身のボリュームの1,000個のクローンの作成を要求し、サーバの接続帯域幅を使い果たして他のユーザに損害を与え得る、弾性コンピューティング環境120内のマルチテナントサーバのボトルネックを有益に低減する。一実施形態では、三次レプリカ145はユーザに直接的には非公開であり得るが、スナップショット作成およびクローン作成要求をサポートするように構成され得る。一部の実施形態は、三次レプリカの複数のコピーを保持して、たとえば、複数の新しいボリュームの並列な作成の供給をサポートし得る。三次レプリカ145を分散して記憶することによりいくつかの利点が提供され、たとえば、オブジェクトストレージサーバ110上のバケットへの、高い並列性であるが低スループットの接続が利用されると共に、ブロックストアサーバ105上で高スループットを駆動することが可能になる。三次レプリカ145の作成、記憶、および使用に関する追加の詳細については、以下でさらに詳細に説明する。
【0034】
例示的な三次レプリカの概要
図2Aは、弾性コンピューティングシステム120において分散された三次レプリカを作成する概略
図200、たとえば、
図1Bの三次レプリカ145の一実装を示している。三次レプリカは
図2Aには図示しておらず、その理由は、このレプリカのパーティションがコンテナC1~Cnに記憶されているためである。「静的な」分散された三次レプリカとは、一次または二次レプリカから同期的にも非同期的にもブロックレベルの更新を受信しない三次レプリカを指す。この特定の例は、静的な分散された三次レプリカとして作成することができるが、一部の実施形態では、このレプリカは、たとえば、
図3Aおよび
図3Bに関して説明するロガーフリートに接続することによって、一次または二次レプリカから更新を後で受信することができる。
【0035】
オブジェクトストレージ215は、ボリュームのスナップショットを含む上述のオブジェクトストレージサーバ110の1つまたは複数のバケットとすることができる。図示の実施形態では、分散レプリカコーディネータ205A、205Nは、オブジェクトストレージ215に記憶されたスナップショットからの分散された三次レプリカの作成を駆動する構成要素である。他の実施形態は、オブジェクトストレージ215に到達せずに三次レプリカを作成することができ、たとえば、一次および/または二次レプリカから直接作成する。
【0036】
いくつかの分散レプリカコーディネータ205A、205Nが存在し得、たとえば、ロガーフリート315によって更新されている三次レプリカごとに1つである。例示的には、ワーカー210A~210Nは、分散レプリカコーディネータ205A、205Nの指示に従って、各パーティション(またはパーティションの範囲)に記憶されるデータをダウンロードするステートレスワーカーフリートである。分散レプリカコーディネータ205A、205Nおよびワーカー210A~210Nは、コンピューティングサーバ115上のインスタンスなどとして動作するデータストリーム処理クライアントとすることができる。
【0037】
ワーカー210A~210Nは、たとえば、容量を有する任意のコンテナを選択し、選択されたコンテナに三次ボリュームパーティションを向けるなどして、コンテナサーバ220上のコンテナC1~Cnに三次レプリカパーティションを記憶する。図示の例では、各コンテナは、フォールトトレランスのためにいくつかのサーバ220にわたって複製されるが、他の実施態様はコンテナを複製しない場合がある。各コンテナC1~Cnは、本質的に、コンテナサーバ220のうちの1つのパーティションである。各コンテナC1~Cnは、いくつかの三次ボリュームパーティションを記憶する容量を有することができる。一実施形態では、各コンテナC1~Cnは、容量がある限りキー/値を記憶し、記憶されたデータをオンデマンドで返す追加専用のキー値ストアを含む。ユーザの単一のボリュームに属する上述のボリュームパーティションとは異なり、コンテナC1~Cnは、異なるユーザの複数のボリュームからのデータを記憶し得るマルチテナントにすることができる。
【0038】
コンテナサーバ220は、ブロックストアサーバ105のうちの専用のものにすることができ、または上述のボリュームを記憶するブロックストアサーバ105と共有することができる。オブジェクトストレージサーバ110に記憶されたスナップショットは、一次レプリカのコピーと見なすこともできるが、ブロックストアサーバ105とオブジェクトストアサーバ110のバケットとの間の各接続は、典型的には、スループットが低く、待ち時間が長いが、所与のアベイラビリティゾーン内の弾性ブロックストアサーバ105は、典型的には、スループットが高く、待ち時間が短い接続によって接続される。したがって、オブジェクトストレージサーバ110に記憶されたスナップショットの代わりに、コンテナサーバ220に記憶された三次レプリカを使用することにより、ボリューム全体のデータを新しいボリュームに転送するのに必要な時間を数時間から数分に短縮することができる。
【0039】
図2Bは、
図2Aの分散された三次レプリカを作成するための例示的な処理230のフローチャートである。処理230は、一部の実施形態では、弾性コンピューティングシステム120の制御プレーン155の制御下で実行することができる。
【0040】
ブロック235において、制御プレーン155は、三次レプリカの作成を依頼する。これは、ブロックストアサーバ105上の特定のボリュームを識別し、そのボリュームがスナップショットされていることを確認し、そうでない場合はボリュームのスナップショットを作成することを含むことができる。他の実施形態では、三次レプリカのデータは、一次および/または二次レプリカから直接引き出すことができる。
【0041】
ブロック240において、分散レプリカコーディネータ205A、205Nは、オブジェクトストレージ215からオブジェクトマニフェストファイルをダウンロードする。オブジェクトマニフェストファイルは、ボリュームのブロックを表すオブジェクトの記憶場所を識別することができる。
【0042】
ブロック245において、分散レプリカコーディネータ205A、205Nは、たとえば、各ワーカーの能力およびパーティションあたりのブロック数に基づいて、三次レプリカの1つまたは複数のパーティションを各ワーカー210A~210Nに割り当てる。パーティションの数が多いと、利用不可能になった特定のパーティションを(スナップショットなどから)再現し、(たとえば、デバイスまたはパーティションがデータ転送に高度に使用されている場合などの)高需要を考慮してコンテナサーバ220にパーティションを複写し、使用されていない容量を使用することの容易さを向上させることができる。しかしながら、一次レプリカの各パーティションは、三次レプリカのパーティションの対応するサブセットへの接続を保持することが必要とされ得(たとえば、
図5Aを参照)、また、保持できる接続の最大数がある。したがって、三次レプリカ内のパーティションの数は、特定のシステム構成に応じて、これらの関心事の間のトレードオフになる可能性がある。
【0043】
ブロック250において、異なるワーカー210A~210Nは、オブジェクトストレージ215から、自身が担当するパーティションのブロックをダウンロードする。各ワーカーはまた、たとえば容量のあるコンテナを識別することに基づいて、自身が担当する各パーティション用のコンテナを選択し、次いで、ダウンロードされたブロックデータをパーティション内に含めることで、選択されたコンテナにパーティションを生成する。一実施形態では、パーティションはコンテナにストライピングすることができ、ここで、ストライピングとは、論理的に連続するデータをセグメント化して、連続するセグメントが異なる物理ストレージデバイスに記憶されるようにすることを指す。パーティションごとにコンテナを選択するこの処理により、パーティションがデータセンター内で多かれ少なかれ地理的に多様になるようにし、たとえば、パーティションの大部分が同じスイッチを共有しないようにすることができる。さらに、コンテナを選択する処理は、パーティションが「ホットな」ストレージホスト(たとえば、接続帯域幅の大部分またはほとんどを使用するホスト)に配置されないように、候補ホストでの帯域幅の競合を考慮に入れることができる。
【0044】
ブロック255において、各ワーカーは、自身が担当するパーティションの部分的なマニフェストを作成して、分散レプリカコーディネータに返す。これらの部分的なマニフェストは、パーティションID(またはブロックID)からコンテナIDへのマッピングとすることができ、部分的なマニフェストは、三次レプリカのパーティションの記憶場所を識別するマニフェストファイルにアセンブルすることができる。三次レプリカ145を分散して記憶することは、所与のボリュームのブロックを有する全てのコンテナを見つけるという課題を生み出す。マニフェストファイルは、三次レプリカの各パーティションを、そのパーティションを有するコンテナにマッピングするので、この課題の解決策になる。パーティションが要求時に利用不可能な場合、制御プレーン155は、オブジェクトマニフェストファイルを使用して、オブジェクトストレージサーバ110上のパーティションのスナップショット表現の場所を特定し、スナップショットからダウンロードを再駆動することができる。
【0045】
ブロック260において、分散レプリカコーディネータ205A、205Nは、異なるワーカー210A~210Nからの部分的なマニフェストを完全な分散ボリュームマニフェストに(たとえば、分散された三次レプリカの全てのパーティションについて、パーティションIDからコンテナIDに)アセンブルして、オブジェクトストレージ215に記憶する。これが完了すると、分散レプリカコーディネータ205A、205Nは、制御プレーン155に通知することができ、処理230は終了する。
【0046】
三次レプリカへの例示的な更新の概要
図3Aは、弾性コンピューティングシステム120において一次レプリカと
図1Bの三次レプリカ145などの分散された三次レプリカとの間でデータ更新を複製する概略
図300を示している。三次レプリカは
図3Aには図示しておらず、その理由は、このレプリカのパーティションはコンテナC1~Cnに記憶されるためである。分散された三次レプリカ145のこの実装は、一次レプリカの非同期コピーとして保持される。
【0047】
ユーザはクライアント305を介して一次レプリカにおいてI/O操作を実行することができる。一次レプリカは、例示的には、ブロックストアサーバ105のうちの第1のブロックストアサーバ310に記憶される。このサーバ310は更新のログを保持し、このログを使用して、たとえば、以下に説明するロガーフリート315を介して、三次レプリカを更新することができる。二次レプリカは、第2のブロックストアサーバ(図示せず)に記憶される。
図3Aでは、一次レプリカのサーバ310を、更新330をロガーフリート315に伝播させるものとして示しているが、他の実施態様では、ロガーフリート315への更新330の伝播は、二次レプリカのサーバによって実行することができる。その理由は、二次レプリカは一次レプリカと同期的に保持されているためであり、たとえば、I/O操作325を処理するために、第1のサーバのより多くの帯域幅を保存することができる。
【0048】
図2Aに関して説明したように、分散された三次レプリカは、コンテナサーバ220上のコンテナC1~Cn内のボリュームの数千または数百万のパーティションとして記憶される。しかしながら、この実施形態では、分散された三次レプリカは、一次レプリカからブロックレベルの更新を受信する。三次レプリカのパーティションの地理的な多様性によって、更新の複製のための待ち時間が二次レプリカで経験するよりも長くなり得るが、三次レプリカからの並列データ転送能力の向上を考慮すると、これは許容可能にすることができる。二次レプリカは同期的に(たとえば、一次レプリカへのデータの書き込みと同時に)複製されるが、三次レプリカへの更新は非同期的に(たとえば、一次レプリカへのデータの書き込み後に)複製することができる。たとえば、ユーザがスナップショットまたはクローンの作成を要求し、このために三次レプリカが使用される場合、更新を三次レプリカに伝播させて、最新にするようにすることができる。その後、スナップショットまたはクローンが三次レプリカから作成されている間に、三次レプリカを「凍結」することができる。凍結中、三次レプリカは、データをクローンまたはスナップショットに送信する間に、一次レプリカへの新しい書き込みを一時的に保持することができ、クローン作成またはスナップショット作成処理が完了した後、これらの更新を適切なパーティションに順番に書き込むことができる。
【0049】
例示的な実施形態では、ロガーフリート315は、三次レプリカと一次レプリカとの間の仲介である。ロガーフリート315は、たとえば、1つまたは複数のコンピューティングサーバ115上で1つまたは複数のインスタンスとして動作するデータストリーム処理クライアントとすることができる。例示的には、ロガーフリート315は、AMAZON KINESIS(商標)サービスまたはAPACHE KAFKA(商標)ソフトウェアを介して実装され得、それらの動作は当技術分野で知られている。ロガーフリート315を利用することにより、三次レプリカを最新に保つためのロジックを弾性ブロックストレージサーバ310からオフロードすることができ、ブロックストアサーバ310のメモリ使用を減らすことができる。例示的には、ロガーフリート315は、一次レプリカから更新を受信して、三次レプリカに順次的に適用する。ロガーフリート315は、一次レプリカから更新をプルし得、または一次レプリカは、更新をロガーフリート315にプッシュし得る。具体的には、ロガーフリート315は、ブロックストアサーバ310から更新330を受信し、次いで、これらの更新をコンテナC1~Cnの適切なものに伝播させる。コンテナサーバがダウンしている場合、ロガーフリート315なしで、一次レプリカの一部の実施形態は更新ログにバックアップし得、これにより、制御プレーン155がユーザI/O操作の減速を開始するトリガになり得る。有益なことに、図示の実施形態では、一次レプリカはその更新をロガーフリート315に送信することができ、ロガーフリート315は、それらをある期間(たとえば、24時間)記憶することができる。ロガーフリート315は、この期間中に三次レプリカを更新することができる。ロガーフリート315はいくつかのワーカーを有することができ、各ワーカーは、ストリームを形成する逐次更新(たとえば、ボリュームへの更新の変更ログ)を受信し、更新を三次レプリカに伝播させる。一部の実施形態では、ロガーフリート315は、異なるボリュームのいくつかの三次レプリカを管理することができ、ログストリームは、これらの異なるボリュームへの逐次更新の変更ログを表すことができる。
【0050】
代替の実施形態では、ロガーフリート315ではなく、マスタースレーブアーキテクチャを使用して、更新を三次レプリカにプッシュすることができ、ここで、一次レプリカはマスターであり、二次レプリカは更新を三次レプリカにプッシュするスレーブである。マスターは、三次レプリカの各パーティションが記憶された場所を知ることができ、また、これらのパーティションがどの程度最新であるかのログを保持することができる。マスターはスレーブを更新し得、スレーブは次いで更新を三次レプリカにプッシュすることができる。一次および/または二次レプリカは、三次レプリカへの書き込みの確認応答を受信することができる。対応する確認応答がない更新に対して、一次および/または二次レプリカは、その更新を三次レプリカの適切なパーティションに再送信することができる。
【0051】
一部の実施形態は、ロガーフリート315をマスターとスレーブとの間に有益に配置して、マスターがロガーフリート315を更新し、ロガーフリート315がスレーブを更新するようにすることができる。マスターは、ロガーフリート315が更新を受信したことを確認すればよく、次いで、ロガーフリート315は、更新が三次レプリカによって受信されたことを確認する。マスタースレーブ手法と比較してロガーフリート315によって提供される1つの利点は、三次レプリカのより高度なパーティション分割および/または分散が可能になることである。マスターが更新を三次レプリカにプッシュしている場合、マスターは三次レプリカの全てのメタデータおよびロジックを内部に有する必要があり得る。
【0052】
図3Bは、
図3Aの分散された三次レプリカを更新するための例示的な処理320のフローチャートである。処理320は、一部の実施形態では、弾性コンピューティングシステム120の制御プレーン155の制御下で実行することができる。
【0053】
ブロック325において、ユーザは一次レプリカにおいてI/O操作を実行する。これは、たとえば、新しいデータの書き込み、既存のデータの変更、または既存のデータの削除を含む。
【0054】
ブロック330において、一次レプリカは、この更新を上述のロガーフリート315に送信する。更新は、更新およびその他のコマンド(たとえば、スナップショットおよびクローンコマンド)のシーケンスを含むログストリームの一部とすることができる。ロガーフリート315には、順序通りでない更新を拒否するための知能を提供することができる。
【0055】
ブロック335において、ロガーフリート315は、更新に対応するパーティションを記憶している任意のコンテナを識別する。これは、変更されたボリュームのブロックを識別し、分散ボリュームマニフェストでそれらのブロックに対応するパーティションを記憶しているコンテナを探すことを含む。
【0056】
ブロック340において、ロガーフリート315は、更新をコンテナに送信して、更新に従って三次レプリカを更新する。これは非同期的に実行することができる。上述のように、三次レプリカの一部が利用不可能な場合、ロガーフリート315は、その部分が利用可能になるまでその更新を保持することができる。一部の例では、ユーザI/Oが最初の2つのレプリカへの帯域幅を使用している場合、一次および二次レプリカは、ユーザエクスペリエンスを維持するために、三次レプリカへの更新の伝播を遅らせることができる。
【0057】
任意選択により、ブロック345において、ロガーフリートは更新ログをオブジェクトストレージ215にバックアップすることができる。これは、更新ログを使用して新しいボリュームを作成できるようにする際に、スナップショットバックアップと同様に機能することができる。そのため、一部の実施形態では、ボリュームのスナップショットが撮られた場合、オブジェクトストレージ215内の更新ログを消去することができ、その後、新しい更新ログをオブジェクトストレージに定期的にバックアップすることができる。更新ログを使用してスナップショットを更新することにより、新しいボリュームを作成することができる。そのため、更新ログをオブジェクトストレージ215に記憶することにより、スナップショットを単独で記憶するよりも粒度の細かいデータリカバリが提供される。上述のように、オブジェクトストレージサーバ110は、アベイラビリティゾーンにわたってバケットを複製するように構成することができ、一方、ブロックストアサーバ105は、アベイラビリティゾーン内のみでボリュームを複製し得る。したがって、更新ログをオブジェクトストレージ215にバックアップすることにより、アベイラビリティゾーンに障害が発生した場合でもユーザのデータが存続する可能性を高めることができる。
【0058】
判定ブロック350において、ロガーフリート315は、ログストリームがスナップショット要求を含むか否かを判定する。スナップショット要求をログストリームの一部にして、これが三次レプリカに到達するまでに、三次レプリカがスナップショットに必要な更新を受信済みになるようにすることができる。スナップショット要求が存在する場合、ブロック355において、コンテナはそれらのパーティションをオブジェクトストレージ215にプッシュして、スナップショット要求時に三次レプリカのスナップショットを作成する。たとえば、一次レプリカはスナップショット要求をログストリームに挿入することができる。ロガーフリート315内の各ロギングマシンは、メッセージを三次レプリカのパーティションに伝播させ、三次レプリカは、パーティション内のデータをオブジェクトとしてオブジェクトストレージ215に並列に記憶することができ、それによってスナップショットの迅速な作成が容易になる。このスナップショット作成の並列化により、一次または二次レプリカが同じ量のデータをオブジェクトストレージ215にプッシュするのを待つよりもはるかに迅速にスナップショットを作成することができる。あるいは、スナップショット要求がログストリーム内にない場合、処理はブロック360に移行する。
【0059】
判定ブロック360において、ロガーフリート315は、ログストリームがチェックポイント要求を含むか否かを判定する。含む場合、ブロック365において、コンテナを使用して、処理230に関して上述したように、その瞬間でのボリュームを表す新しい三次レプリカを作成する。たとえば、一次レプリカはチェックポイント要求をログストリームに挿入することができる。次いで、ロガーフリート315は、そのチェックポイント要求を三次レプリカの全てのパーティションに送信することができる。次いで、三次レプリカの各パーティションは、データを同じまたは他のコンテナ内の新しいパーティションにプッシュして、三次レプリカの追加のポイントインタイムのコピーを作成することができる。
【0060】
三次レプリカからの例示的なクローン生成の概要
図4Aは、弾性コンピューティングシステム120において分散された三次レプリカからボリュームのクローンを作成する概略
図400を示している。本明細書に記載のように、三次レプリカは、その高度に分散された性質により、高度な並列性をサポートし、所与のボリュームの多数のデータを同時に転送することができる。クローンは、決定された数のパーティション405(「ジオメトリ」)を有するターゲットボリューム401として作成される。パーティション405は、上述のブロックストアサーバ105のうちの1つまたは複数に記憶することができる。
【0061】
図4Aのインタラクションのさらなる説明を、
図4Bを参照して行う。具体的には、
図4Bは、
図4Aに応じた分散された三次レプリカ内に記憶された情報に基づく(たとえば、ボリュームの一次および二次レプリカとしての)新しいデータボリュームのクローン作成のための例示的な処理のフローチャートである。処理410は、一部の実施形態では、弾性コンピューティングシステム120の制御プレーン155の制御下で実行することができる。
【0062】
ブロック415において、制御プレーン155は、パーティション405上にターゲットボリューム401を作成する。ターゲットボリューム401とは、三次レプリカを使用して作成される新しいボリュームを指す。
【0063】
ブロック420において、制御プレーン155は、分散ボリュームマニフェストをオブジェクトストレージ215からフェッチし、マニフェスト(またはマニフェストの一部)をターゲットボリュームパーティション405に記憶する。上述のように、分散ボリュームマニフェストは、三次レプリカのパーティションごとにパーティションIDをコンテナIDにマッピングする。一部の実施態様では、ターゲットボリュームパーティションに書き込まれる三次レプリカパーティションのコンテナ位置を識別する分散ボリュームマニフェストの関連するサブセットを、ターゲットボリューム401の各パーティションに提供することができる。
【0064】
ブロック425において、ターゲットボリュームの各パーティションは、関連するコンテナから、分散ボリュームマニフェストの関連する部分にリストされたパーティションのデータを取り出す。「取得(get)」障害が発生した場合、すなわち、ボリュームのユーザが、ターゲットボリュームにまだ取り出されていないパーティションのデータにアクセスしようとした場合、ターゲットボリューム401は、そのパーティションをホストするコンテナに対して取得を実行することができる。
図4Aは、三次レプリカの単一のパーティションの、ターゲットボリューム401の対応するパーティション405への単一のフェッチを示しており、そのようなフェッチは、例示的には、三次レプリカの必要な各パーティションがフェッチされるまで繰り返すことができる。
図4Aは、各コンテナサーバ220からパーティション405の1つに至る単一の矢印を示しているが、これは図の単純化および明確化を目的としたものであり、各パーティションはコンテナサーバ220のうちのいくつかまたは全てからデータを受信し得ることは理解されよう。コンテナが応答しない場合、ターゲットボリューム401は、
図2Aおよび
図2Bに関して説明したオブジェクトストレージマニフェストを使用して、オブジェクトストレージから分散ボリュームマニフェスト内で識別されたパーティションのデータを取り出すことができる。
【0065】
ブロック425において、ターゲットボリューム401は、新しいボリュームの作成が完了すると、オブジェクトストレージ215に合図する。
【0066】
三次レプリカからの例示的なスナップショット生成の概要
図5Aは、弾性コンピューティングシステム100において分散された三次レプリカからボリュームのスナップショットバックアップを生成する概略図を示している。上述のように、スナップショットは、オブジェクトストレージ215内のボリューム上のデータのコピーとして(たとえば、単一のオブジェクトまたはオブジェクトの集合体として)記憶される、ボリュームのポイントインタイムのブロックレベルのバックアップである。一部の実施態様では、スナップショットはボリューム内のデータの増分レコードとして実装され、ボリュームの最初のスナップショットが撮られる場合、有効なデータを含むボリュームの全てのブロックが1つまたは複数のオブジェクトとしてオブジェクトストレージ215にコピーされ、同じボリュームの後続のスナップショットが撮られる場合、最初のスナップショット以降に変更されたブロックのみをオブジェクトストレージ215にコピーすればよい。スナップショットを作成する場合、スナップショットが開始される時刻までにボリュームに書き込まれたあらゆるデータをスナップショットに含めることができ、ユーザはスナップショットの作成中に、スナップショットに影響を与えることなく、自身のボリュームへのI/O操作を引き続き実行することができる。
【0067】
三次レプリカの高度に分散された性質は、ボリュームの多数の部分を同時に転送できる高度な並列性をサポートし、オブジェクトストレージ215でのバックアップの迅速な作成をサポートする。図示のように、ユーザは、クライアント305から(1つまたは複数のブロックストアサーバ310に記憶された)一次レプリカにスナップショット要求510を行うことができ、今度は一次レプリカが、コンテナサーバ220に記憶された三次レプリカのパーティションに、スナップショットバックアップを作成するためのデータをオブジェクトストレージ215に送信する命令を送信する。
図3Bのブロック350および355に関して上述したように、スナップショット作成処理は、一部の実施態様では、スナップショット要求を更新ストリーム内で三次レプリカに渡すロガーフリート315を含むことができる。
【0068】
図5Aのインタラクションのさらなる説明を、
図5Bおよび
図5Cを参照して行う。具体的には、
図5Bおよび
図5Cは、
図5Aに応じた分散された三次レプリカからのスナップショット生成のための例示的な処理505A、505Bの2つの実施態様のフローチャートである。処理505A、505Bの共通のブロックについては以下で一緒に説明し、処理505A、505Bの異なるブロックに向けた説明は個別に行う。処理505A、505Bは、一部の実施形態では、弾性コンピューティングシステム120の制御プレーン155の制御下で実行することができる。
【0069】
図5Bおよび
図5Cの両方を参照すると、ブロック510において、自身のボリュームのスナップショットを作成するためのユーザ要求が、クライアント305から、一次レプリカをホストするブロックストアサーバ310において受信される。上述のように、スナップショットは、オブジェクトストレージサーバ110に記憶されたボリュームのデータのバックアップコピーであり、これにより、アベイラビリティゾーンにわたってデータを自動的に複製するためのオブジェクトストレージサーバ110の構成によって、ブロックストアサーバ105に記憶されたコピーと比較して、より大きなフォールトトレランスの利点を提供することができる。そのため、一部のユーザは、オブジェクトストレージ215内の自身のデータの更新されたバックアップを保つために頻繁なスナップショットを要求し、そのようなスナップショットを作成するために高い帯域幅の使用量が必要となる。
【0070】
ブロック515において、一次レプリカをホストするブロックストアサーバ310のセットは、コンテナサーバ220に記憶された三次レプリカのパーティションにスナップショット要求を伝播させる。一部の実施形態では、一次レプリカのブロックストアサーバ310は、二次レプリカをホストするブロックストアサーバ310にこのタスクをオフロードし得る。上述のように、一部の実施態様では、スナップショット作成は、最後のバックアップ以降に更新を受信したボリュームの一部のみがオブジェクトストレージに送信される増分処理とすることができる。増分スナップショットの実施態様では、一次レプリカをホストするブロックストアサーバ310はまた、バックアップマップを保持し、このバックアップマップをスナップショット要求と共に送信することができる。バックアップマップは、ボリュームの前のスナップショット(たとえば、直前のスナップショット)以降に変更されたボリュームの部分(たとえば、ブロック、ブロックの集合体など)のマッピングまたはリスト化を指す。スナップショットが作成されると、ブロックストアサーバ310は、各部分が最後のスナップショット以降に変更されていないことを反映するように、バックアップマップを変更することができる。ユーザがボリュームの一部を変更すると、一次レプリカをホストするブロックストアサーバ310のうちの1つまたは複数(または弾性コンピューティングシステム内の他のコンピューティングデバイス)は、そのようなブロックが前のスナップショット以降に変更されたことを反映するように、バックアップマップを変更することができる。三次レプリカパーティションをホストするコンテナサーバ220は、バックアップマップを使用して、このスナップショット要求に応答してオブジェクトストレージ215に送信されるべき部分(たとえば、前のスナップショット以降に変更された部分)を識別することができる。
【0071】
三次レプリカをホストするコンテナサーバ220がスナップショット要求を受信した後、
図5Bおよび
図5Cのサブ処理520Aおよび520Bによって反映される、2つの異なる処理の実施態様のうちの1つを実行することができる。特に
図5Bに目を向けると、サブ処理520Aは、三次レプリカから直接スナップショットを作成する処理505Aの第1の実施態様を反映している。
【0072】
特に
図5Bを参照すると、ブロック540において、コンテナサーバ220は、三次レプリカのパーティションのデータをオブジェクトストレージ215に送信する。コンテナサーバ220は、これらのパーティションの一部または全部のデータをオブジェクトストレージ215に並列に送信することができる。
図5Aでは、オブジェクトストレージ215は単一のオブジェクトとして示しているが、オブジェクトストレージ215は、実際には、コンテナサーバ220への複数の物理的接続を有する分散システムによって表され得る。したがって、三次レプリカのパーティションのデータは、多数の異なる物理接続に沿って送信することができる。たとえば、各データ転送は個別のHTTP接続であり得る。有益なことに、開示した三次レプリカのアーキテクチャは、ソース側(たとえば、コンテナサーバ220)と、宛先側(たとえば、オブジェクトストレージ215)との両方の高帯域幅を提供する。より多くの物理的接続からのより広い帯域幅に加えて、三次レプリカの開示した使用は、各デバイスがオブジェクトストレージ215への接続のごく一部を保持すればよいので、各コンテナサーバ220への並列化のメモリ要求を減らすことができる。
【0073】
有益なことに、この技法は、一次および二次レプリカのより限られた数のパーティションから同じデータを送信する場合に比べて、スナップショットを作成する時間を短縮することができ、また、継続したユーザI/O操作を処理するために一次および二次レプリカのデータ伝送帯域幅を解放する。実際には、それほどパーティション分割されていない一次または二次レプリカを使用するのではなく、高度にパーティション分割された三次レプリカを使用してスナップショットを生成することにより、スナップショットをオブジェクトストレージ215に書き込むのに必要な時間を大幅に短縮することができ、たとえば、スナップショットを書き込むのに必要な時間が、(たとえば、それほどパーティション分割されていないレプリカから書き込む場合の)10時間から、たった1時間に短縮される。
【0074】
図5Bを引き続き参照すると、三次レプリカからスナップショットが作成されている間に一次レプリカでユーザI/O操作が継続されている場合、ブロック545において、三次レプリカの特定のパーティションに必要な更新は、たとえば、ロガーフリート315または更新スレーブ(たとえば、二次レプリカ)によって保持することができる。更新は、スナップショット全体が完了するまで、またはそのような更新用に指定されたパーティションがオブジェクトストレージ215へのデータの転送を完了するまで、保持することができる。
【0075】
ここで
図5Cに目を向けると、ブロック520Bは、三次レプリカのポイントインタイムのコピー(「追加の三次レプリカ」と呼ぶ)を作成する処理505Bの第2の実施態様を反映している。追加の三次レプリカは、スナップショット要求時のボリュームのデータを表すが、元の三次レプリカは、一次レプリカへの書き込みに基づいて引き続き更新することができる。
【0076】
図5Cを引き続き参照すると、ブロック525において、コンテナサーバ220は、三次レプリカのパーティションをコピーして、追加の三次レプリカを作成する。たとえば、三次レプリカの各パーティション(またはバックアップマップ内のブロックに対応するサブセット)は、元のパーティションと同じコンテナ、または異なるコンテナにコピーすることができる。これらの追加の三次レプリカのパーティションコピーは、一次レプリカでのユーザI/O操作に基づいて(少なくともオブジェクトストレージ215内のスナップショットにデータを送信している期間中に)それ以上の更新を受信せず、コピーがスナップショット要求時のデータのボリュームを反映するようにする。
【0077】
ブロック525から、処理505Bはブロック530に移動し、追加の三次レプリカのパーティションがそれらのデータをオブジェクトストレージ215に送信する。これらのパーティションの一部または全部は、それらのデータをオブジェクトストレージ215に並列に送信して、
図5Bのブロック540に関して説明したものと同様の利点を提供することができる。
【0078】
スナップショットが作成されている間に一次レプリカでのユーザI/O操作が継続されている場合、ブロック535において、元の三次レプリカのコピーのパーティションをユーザI/O操作に応じて更新することができる。有益なことに、追加の三次レプリカを使用してスナップショットの作成をサポートする手法は、元の三次レプリカのコピーを解放して、たとえば、
図3Aおよび
図3Bに関して説明したように、継続的なユーザI/O操作による更新の受信を継続する。その理由は、スナップショットのためにボリュームデータをオブジェクトストレージ215に送信するために、元の三次レプリカのコピーのパーティションが必要ないためである。
【0079】
図5Cのブロック535または
図5Bの545から、処理505A、505Bはブロック550に移行し、データ転送が完了したときに、三次レプリカ(またはそのコピー)のパーティションは一次レプリカに合図する(550)。次いで、一次レプリカは、ボリュームの各ブロック(または他の何らかの部分)がオブジェクトストレージ215のどこに記憶されているかを示すオブジェクトマニフェストを作成することができる。オブジェクトマニフェストに関して、各コンテナC1~Cnまたはコンテナサーバ220は、オブジェクトストレージ215内でボリュームデータの各オブジェクト表現をどこに配置したかを知ることができる。したがって、マニフェストの作成を制御するサーバ(たとえば、一次レプリカを制御するサーバ)は、それぞれのコンテナサーバからそれらの場所を収集して、ボリュームの各部(たとえば、ブロック)をオブジェクトストレージ215内のオブジェクトにマッピングするデータファイルにまとめることができる。
【0080】
上述のように、増分スナップショット作成が使用される場合、マニフェストは以前のスナップショットを参照することもできる。したがって、たとえば、マニフェストは、前のマニフェスト内で識別されたブロック1~433の場所を示し得る、その前のマニフェストはさらに古いマニフェストを参照し得る、などである。あるいは、マニフェスト作成デバイスは、前のマニフェストから変更されていないブロックのオブジェクト表現の場所を現在のマニフェストに直接組み込んで、単一のマニフェストファイルがボリュームデータの各部の場所を含むようにし得る。
【0081】
任意選択により、一部の実施態様では、処理505の間に追加の三次レプリカが作成された場合、この時点で、その追加の三次レプリカは削除され得る。他の実施態様では、その追加の三次レプリカを一定期間保持して、たとえば、ユーザがそれからボリュームの新しいクローンを作成できるようにし得る。そのため、処理505は、クライアント505からのクローン作成命令をチェックすること、および/または追加の三次レプリカを削除する前に、そのような指示をある所定の時間待機することを含むことができる。
【0082】
処理505A、505Bは、単一のスナップショットに関して説明しているが、それらは、たとえば、ユーザが毎回の書き込み後にスナップショットを要求する場合に、同時にまたは少なくとも部分的に同時並行的に何度も実装され得る。そのような実施態様では、処理505A、505Bの1回の反復は第1のスナップショットを作成し得、他の反復は第2のスナップショットを作成している、などのようにし得る。
【0083】
ロギングフリートを実装する実施形態の概要
図6~
図9Bを参照して、ロガーフリート315を実装する本開示の例示的な実施形態について説明する。上記のように、ロガーフリート315は、一部の実施形態では、三次レプリカを更新する機能が一次または二次レプリカを実装するデバイスなどからオフロードされるように、分散された三次レプリカの非同期更新を容易にし得る。ロガーフリート315は、追加的または代替的に、ボリュームへの変更の記録をメッセージのストリーム(たとえば、各メッセージはボリュームへの変更を反映する)として保持するなどの他の機能を提供し得る。以下で説明するように、ボリュームのメッセージストリームを保持することにより、いくつかの利点が提供され得、(たとえば、ストリームのメッセージに反映された変更を戻すことに基づいて、ボリュームを以前の時間に「巻き戻す」ことによって)ボリュームをメッセージストリーム内に反映された任意の以前の状態に戻すことができる。
【0084】
図6を参照すると、ロガーフリートがボリュームへの変更を反映するメッセージのストリームを保持することを可能にする例示的なインタラクション600が示されている。
図6のインタラクションは(1)から始まり、ここで、クライアント305は、ボリュームの1つまたは複数のレプリカ(たとえば、一次および/または二次レプリカ)を実装するブロックストアサーバ310に書き込み操作を送信する。ボリュームは、仮想化されたストレージデバイス(たとえば、ハードディスクドライブまたはソリッドステートディスクドライブ)としてクライアントデバイス305に提示され得るので、書き込み操作は、多様なものが当技術分野で知られているいくつかのバスインターフェースプロトコルのいずれかに従って、ブロックストアサーバ310に送信され得る。たとえば、クライアント305の書き込み操作は、シリアルATアタッチメント(SATA)データパケットとしてフォーマットされ得る。上記のように、「書き込み操作」という用語は、本開示内では、ターゲットボリュームへの変更を反映することを意図しており、したがって、新しいデータの書き込み、既存のデータの変更、データの削除、またはサーバ310に実装されたボリュームの内容の別の方法での変更の操作を含み得る。
【0085】
書き込み操作を受信した後、ブロックストアサーバ310は、受信した操作を利用して、書き込み操作に対応するメッセージを生成して、ボリュームに対応するメッセージストリームに含め得る。(なお、ブロックストアサーバ310は、書き込み操作に従って、一次および/または二次レプリカなどのボリュームのレプリカを変更するための書き込み操作を追加的に処理し得ることに留意されたい。ネットワークベースのストレージデバイスでの書き込み操作の一般的な実装は当技術分野で知られているので、これらのインタラクションは本明細書では説明しない。)一実施形態では、ボリュームは単一のメッセージストリームに関連付けられ、ボリュームへの全ての書き込み操作が、単一のメッセージストリーム内のメッセージとして含まれるようになる。他の実施形態では、ボリュームは複数のメッセージストリームに関連付けられ、ボリュームへの書き込み操作が、メッセージストリーム間で分割されるようになる。そのような分割は、たとえば、ボリュームの一次レプリカおよび/または二次レプリカのパーティション分割に基づき得る。例示的には、一次および/または二次レプリカが16個のパーティションに分割される場合、ロガーフリート315を利用して、ボリュームに対して16個のメッセージストリームを保持し得、各メッセージストリームは、16個のパーティションの個々のパーティションに関連する書き込み操作を反映するメッセージを含む。ストリーム間の書き込み操作の他の分割が考えられる。たとえば、書き込み操作は、負荷分散アルゴリズム(たとえば、ラウンドロビン分割など)を介して異なるメッセージストリーム間で分割することができる。複数のメッセージストリーム間の書き込み操作の分割は、たとえば、各ストリームを保持する際のメモリ要求を低減し、ロガーフリート315での並列化を可能にし、(たとえば、書き込み操作が適用されたパーティションの知識に基づいて)メッセージストリーム内で特定の書き込み操作を見つけるのに必要な時間を減らすのに有益であり得る。以下のインタラクションは、複数のメッセージストリームを使用してボリュームへの書き込み操作のログを保持することを参照して例示的に説明しており、各メッセージストリームは、ボリュームの一次および/または二次レプリカのパーティションに対応する。しかしながら、単一のメッセージストリームが利用される場合、または書き込み操作が適用されるパーティション以外の基準に従ってメッセージストリームが分割される場合(たとえば、負荷分散分割)、同様のインタラクションが実装され得る。
【0086】
したがって、(2)において、ブロックストアサーバ310は、書き込み操作によって変更された(たとえば、一次および/また二次レプリカの)ボリュームのパーティションを特定する。追加的に、(3)において、ブロックストアサーバ310は、適切なメッセージストリームに含まれる書き込み操作を反映するメッセージを生成する。メッセージは、たとえば、書き込み操作(たとえば、書き込み操作を表すSATAデータパケット)の内容の記録、ならびに、後で書き込み操作を再現するために必要なまたは使用可能な追加のメタデータ、たとえば、書き込み操作が適用される特定のブロックアドレス、書き込み操作の時間、書き込み操作を送信したクライアント305の識別情報、書き込み操作が適用されるボリュームの識別子、ブロックストアサーバ310によって書き込み操作に割り当てられるシーケンス番号などを含み得る。メッセージは任意の既知のメッセージングプロトコルに従ってフォーマットされ得る。たとえば、メッセージは、メッセージキューイングテレメトリトランスポート(MQTT)フォーマットに従ってフォーマットされ得、APACHE KAFKA(商標)ソフトウェアを実装するサーバで使用するようにフォーマットされ得、AMAZON KINESIS(商標)サービスによって提供されるストリームに含めるようにフォーマットされ得る。
【0087】
(4)において、ブロックストアサーバ310は、(ボリュームへの書き込み操作を反映する)メッセージをロガーフリート315に送信して、書き込み操作が適用される一次および/または二次レプリカのパーティションに対応するストリームに含める。
図6に示すように、ロガーフリート315は、いくつかのパーティションストリーム608A~608Nを保持し得、各パーティションストリームは、たとえば、一次および/または二次レプリカの異なるパーティションに対応し得る。
図6の例示的な例では、書き込み操作がボリュームの第2のパーティションを変更したことなどを反映する書き込みメッセージが、パーティションストリーム608Bに送信される。(5)において、ロガーフリート315は、メッセージをストリーム608Bにエンキューする。ロガーフリート315は、一部の実施形態では、メッセージを記憶するために冗長サーバを利用することなどによって、フリート315の様々な障害に対する回復力を確保する機能を実装し得る。一実施形態では、ロガーフリート315は、キュー内の各メッセージを「1回だけ」または「少なくとも1回」各受信者に配信するように構成される。例示的には、「1回だけ」の機能は、書き込み操作が冪等ではなく、同じ書き込み操作を複数回適用しても、書き込み操作が適用されるブロックに関して常に同じ状態になるとは限らない場合に有益であり得る。「少なくとも1回」の機能は、たとえば、書き込み操作が冪等である(たとえば、同じブロックに同じ操作を適用すると、操作の繰り返しに関係なく、常にブロックの状態が同じになる)場合に使用され得、ロガーフリート315のコンピューティングリソースの削減に関連し得る。「少なくとも1回」の機能を実装するロガーフリート315の1つの例示的な実装は、「FAST SEQUENTIAL MESSAGE STORE」と題された米国特許第8,261,286号に記載されており、その全体が引用により本明細書に組み込まれている。
【0088】
以下で説明するように、ロガーフリート315は、各ストリーム608内のメッセージを様々な受信者に配信するように構成することができる。たとえば、ロガーフリート315は、分散された三次レプリカにメッセージを配信して、メッセージに反映された書き込み操作に従って、三次レプリカが一次および/または二次レプリカの状態に非同期的に更新されることを可能にし得る。他の例として、ロガーフリート315は、メッセージをオブジェクトストレージ215に配信して、そのようなオブジェクトストレージ215が、長時間にわたってボリュームへの書き込み操作の記録を保持することを可能にし得る。例示的には、ロガーフリート315は、所与のストリーム内のメッセージが各受信者において正しい順序で受信されるようなメッセージの順序付けを強制し得る。一実施形態では、「正しい順序」は、ロガーフリート315でのメッセージのエンキューに基づいて確立される(たとえば、メッセージが、受信されたのと同じ順序で受信者に配信されるようになる)。他の実施形態では、「正しい順序」は、メッセージ自体の内容に基づいて確立される。たとえば、メッセージがシーケンス番号を示すメタデータを含む場合、シーケンス番号は、ストリーム内のメッセージの正しい順序を確立するためにロガーフリート315によって利用され得る。場合によっては、ロガーフリート315は、メッセージの受信順序をメッセージの内容と同期させるように構成され得る。たとえば、ロガーフリート315は、順番に並んだシーケンス番号(たとえば、増加する番号、減少する番号、増加する隣接した番号、減少する隣接した番号など)を有するメッセージのみを受け入れ、順序通りでないシーケンス番号を含むメッセージが受信された場合に、送信側デバイスに通知するように構成され得る。
【0089】
図6のインタラクションは、書き込み操作に関して上述しており、ボリュームへの他の操作は、追加的または代替的に、ボリュームのメッセージストリーム内に含まれ得る。たとえば、所与の時点でのボリュームの状態を反映するファイルの作成を要求する「スナップショット」操作が、メッセージストリームのメッセージ内に反映され得る。例示的には、スナップショットメッセージは、ボリュームの各メッセージストリームに含まれ得、ボリュームの三次レプリカのパーティションを保持する各デバイスは、スナップショットメッセージの受信時に、スナップショットの関連部分をオブジェクトストレージ215内のファイルとして生成するように構成され得る。三次レプリカからのスナップショットの作成については、以下で詳細に説明する。一部の実施形態では、メッセージストリーム内に含まれるスナップショットメッセージは、オブジェクトストレージ215上のスナップショットの場所を示し得る。以下で説明するように、これにより、デバイスが、メッセージストリーム内で識別される書き込み操作と共に、メッセージストリーム内で識別されるスナップショットを使用して、あの時点でのボリュームの状態を再現できるようにすることによって、その時点でのボリューム状態の再現が容易になり得る。
【0090】
図7を参照して、ロガーフリート315におけるメッセージストリーム内のメッセージを使用して、分散された三次レプリカの非同期更新を可能にする例示的なインタラクション700を説明する。
図7のインタラクションは、たとえば、
図6のインタラクションの後に、および/または
図6のインタラクションと同時並行的に(たとえば、
図6のインタラクションが複数の書き込み操作に対して繰り返される場合)発生し得る。
【0091】
図7のインタラクションは(1)から始まり、ここで、ロガーフリート315は、受信者にまだ配信されていないメッセージがメッセージストリーム内に存在することを検出する。具体的には、
図7のインタラクションにおいて、ロガーフリート315は、関連するコンテナサーバ220にまだ配信されていないメッセージがパーティションストリーム608B内に存在することを検出することができる。関連するコンテナサーバ220は、たとえば、メッセージによって表される書き込み操作が適用されるボリュームの三次レプリカのパーティションを実装するサーバ220に対応することができる。一実施形態では、ロガーフリート315は、ストリームごとに、ストリームの受信者のリスト、ならびに受信者がストリーム内のメッセージを受信したことを示す確認応答のリストを保持し得る。したがって、インタラクション(1)は、ストリーム608B内のメッセージがストリーム608Bの受信者によってまだ確認応答されていないことを検出することによって実施され得る。一実施形態では、ストリームの受信者は、メッセージ内に含まれる書き込み操作に少なくとも部分的に基づいて決定され得る。たとえば、メッセージ内に反映された書き込み操作がボリューム内の特定のブロックオフセットに適用される場合、メッセージの受信者は、そのブロックオフセットに対応する三次レプリカのパーティションを保持するサーバ220に基づいて決定され得る。一部の実施形態では、ロガーフリート315は、パブリッシュ/サブスクライブ(「pub/sub」)モデルに従って動作するように構成され、各コンテナサーバ220は、ロガーフリート315のストリーム608の関連部分を「サブスクライブ」して、サーバ220がストリーム608のそのような部分の受信者であることをロガーフリート315に通知するように構成される。他の実施形態では、ロガーフリート315は、(たとえば、ボリュームの一次および/または二次レプリカを実装するサーバ310によって)どのコンテナサーバ220が三次レプリカのどのパーティションを保持しているかについて通知され、そのような通知に基づいて各メッセージの受信者を決定する。
【0092】
受信者に配信すべきメッセージがストリーム内に存在すると判定した後、ロガーフリート315は、(2)において、メッセージを受信者コンテナサーバ220に送信する。次いで、コンテナサーバ220は、(3)において、メッセージを利用して、書き込み操作を生成し、書き込み操作に従ってボリュームの三次レプリカのパーティションを変更することができる。たとえば、コンテナサーバ220は、一部の実施形態では、メッセージ内の情報を利用して、書き込み操作を表す最初のSATAデータパケットを再現し、書き込み操作が適用される三次レプリカの関連するパーティションに関してそのSATAデータパケットを適用し得る。したがって、ボリュームの三次レプリカは、一次および/または二次レプリカに適用済みの書き込み操作と非同期的に更新され得る。上記のように、場合によっては、メッセージは書き込み操作以外の操作を含み得る。たとえば、メッセージは、スナップショットのためのクライアント要求を示し得る。そのような場合、サーバ220は、(たとえば、
図5Aから
図5Cに関して)上述したように、ボリュームのスナップショットの作成を開始することによって、メッセージを処理し得る。
【0093】
図7は単一の受信者への単一のメッセージの送信を示しているが、ロガーフリート315は、任意の数の受信者への任意の数のメッセージの配信を容易にするように機能し得る。一実施形態では、ロガーフリート315は、(たとえば、ストリームのサブスクリプションによって識別される)各受信者にメッセージを、そのストリームに関して順番に送信して、メッセージがストリームにエンキューされた順序に関して「先入れ先出し」(FIFO)順序でメッセージが送信されるようにする。FIFO順序を使用することにより、たとえば、三次レプリカと一次および/または二次レプリカとの整合性を維持することができる。
【0094】
一部の実施形態では、ロガーフリート315は、各パーティションストリーム608のサイズを監視して、未処理のメッセージ(たとえば、各受信者によって確認応答されていないもの)が閾値量を超えないことを確実にすることが可能になり得る。例示的には、ロガーフリート315は、メッセージを受信時にエンキューし、メッセージの各受信者によって確認応答されたときに、メッセージに確認応答済みとしてマークし得る。しかしながら、受信者が(たとえば、エラー、ハードウェア障害などによって)メッセージの確認応答に失敗した場合、キュー内の確認応答されていないメッセージの数が閾値サイズを超え得る。そのような場合、ロガーフリート315は、ストリームにメッセージを書き込むための後続の要求を拒否することなどによって、そのような失敗をブロックストアサーバ310に通知するように構成され得る。今度はブロックストアサーバ310が、クライアントデバイス305からの書き込み操作を拒否し、または別の方法で、そのような書き込み操作がボリュームの三次レプリカに書き込まれないことを示し得る。
【0095】
図8を参照して、メッセージストリーム内のメッセージの記録をオブジェクトストレージ215に書き込むための例示的なインタラクション800を説明する。そのようなメッセージの記録を利用して、たとえば、ボリュームのメッセージストリーム内に反映された任意の時点でのボリュームの状態を再現し得る。
図8の例示的なインタラクションを、単一のメッセージストリーム、パーティションストリーム608Bに関して説明する。しかしながら、ボリュームの任意のメッセージストリームに関して、同様のインタラクションが実施され得る。
【0096】
図8のインタラクションは(1)から始まり、ここで、ロガーフリート315はキュー収集イベントを検出する。キュー収集イベントは、例示的には、メッセージストリーム(たとえば、ストリーム608B)内のイベントがデキューされ、オブジェクトストレージ215に(たとえば、長期保存のために)送信されるべきであるということを示す任意のイベントに対応する。一実施形態では、キュー収集イベントは、ストリーム内のメッセージの数が、(たとえば、ロガーフリート315の管理者によって設定される)閾値数を超えて増大したことに対応する。他の実施形態では、キュー収集イベントは、ストリームのメッセージ内のスナップショット操作の検出に対応する。さらに他の実施形態では、キュー収集イベントは、前のキュー収集イベント以降の閾値期間(たとえば、24時間)の経過に対応する。
【0097】
キュー収集イベントを検出すると、ロガーフリート315は、(2)において、ストリーム608B内のメッセージをオブジェクトストレージ215に書き込まれるデータオブジェクトへとバンドル、収集、または別の方法でまとめ、このデータオブジェクトは、本明細書では、「バンドルオブジェクト」と呼ぶ。バンドルオブジェクトは、バンドルオブジェクトの生成時のストリーム内のメッセージを識別する任意のデータオブジェクトであり得る。たとえば、バンドルオブジェクトはZIPファイルまたはその他の圧縮データファイルであり得る。一実施形態では、ロガーフリート315は、バンドルオブジェクト内に、全ての受信者(たとえば、コンテナサーバ220)によって確認応答されたメッセージのみを含める。次いで、ロガーフリート315は、(3)において、バンドルオブジェクトをオブジェクトストレージ215内に記憶する。以下で説明するように、バンドルオブジェクトは、バンドルオブジェクト内のメッセージによって反映される期間にわたってボリュームに対して実行された書き込み操作の記録として、後でオブジェクトストレージ215から取り出され得る。メッセージはオブジェクトストレージ215に記憶されているので、ロガーフリート315は、その後、(4)において、パーティションストリーム608Bからバンドルオブジェクトのメッセージをデキューして、後続のメッセージのためにストリーム内のスペースを解放し得る。
【0098】
パーティションストリーム608Bからのメッセージのデキューは、定期的な操作(たとえば、キュー収集イベントが受信されたとき)として上述しているが、ロガーフリート315の一部の実施形態は、代わりにメッセージを、全ての受信者によって確認応答されたときにデキューし得る。例示的には、オブジェクトストレージ215は、オブジェクトまたはオブジェクトの集合体への個々のメッセージの書き込みを可能にし得、オブジェクトストレージ215は、ボリュームの各メッセージストリームの受信者として構成され得る。したがって、ロガーフリート315は、他の受信者(たとえば、コンテナサーバ220)と同一または類似の方法でオブジェクトストレージ215にメッセージを送信するように構成され得る。そのような場合、オブジェクトストレージ215を含む全ての受信者からの受信の確認応答の後に、メッセージがメッセージストリームからデキューされ得る。
【0099】
図9Aおよび
図9Bを参照して、ボリュームへの書き込み操作を反映するメッセージのストリーム(またはそのようなストリームのログ)を参照することによって、ある時点でのボリュームの状態を再現するための例示的なインタラクションを説明する。具体的には、上記で論じたように、ボリュームへの変更がボリュームのメッセージのストリーム内に反映されている場合、そのようなメッセージのストリームを使用して、メッセージのストリーム内に反映された任意の時刻のボリュームの状態を再現し得る。特定の時点でのボリュームの状態を再現するための例示的なインタラクション900を
図9Aに示しており、特定の時点でのボリュームの状態を再現するための例示的なルーチン901を
図9Bに示している。ルーチン901は、たとえば、第2のボリュームの状態が再現される第1のボリュームを保持するデバイスによって実行され得る。第1および第2ボリュームは同じボリュームであり得、したがって、クライアントはボリュームへの操作を「巻き戻し」て、そのボリュームを以前の状態にすることが可能になり得る。第1および第2ボリュームは異なるボリュームであり得、したがって、クライアントは以前存在したボリュームの以前の状態を新しいボリュームに再現することが可能になり得る。
図9Aでは、ルーチン901は、ブロックストアサーバ310によって、以前存在したボリュームの状態を新しいボリュームとして再現するように実装されるものとして示しており、新しいボリュームは、たとえば、ブロックストアサーバ310に実装された一次および二次レプリカを含む。ルーチン901は、追加的または代替的には、コンテナサーバ220によって、以前存在したボリュームの状態を新しい高度に分散されたボリュームまたはレプリカとして再現するように実装され得る。
【0100】
図9Aおよび
図9Bを参照すると、ブロック902において、ブロックストアサーバ310は、特定の時点での以前存在したボリュームの状態を再現する要求を入手する。要求は、たとえば、クライアント305によって生成され得、以前存在したボリューム、特定の時点、および特定の時点における以前に存在したボリュームの状態を再現するターゲットボリュームを指定し得る(そのターゲットボリュームは以前存在したボリュームと同じであるか、または異なるボリュームであり得る)。
【0101】
他の実施形態では、要求は、ロガーフリート315によって、または弾性コンピューティングシステム120の制御プレーン155を実装するデバイスによって生成され得る。例示的には、
図9Aおよび
図9Bを参照して説明するインタラクションを利用して、ある期間にわたるボリュームへの書き込み操作を反映するメッセージのストリームを、特定の時点でのボリュームのスナップショットに変換し得る。そのようなスナップショットは、メッセージのストリームよりも記憶するためにより少ないメモリを必要とし得るので、これらのインタラクションにより、弾性コンピューティングシステム120は、システム120のメモリ使用量を減らすことが可能になり得る。例示的には、ボリュームのメッセージのストリームが閾値サイズを超えた場合、システム120は、ストリームが閾値サイズを超える原因となったストリーム内の最も古いメッセージを特定し、それらの最も古いメッセージに反映された書き込み操作を実施した後に、ボリュームの状態を反映するボリュームのスナップショットを作成するように構成され得る。その後、システム120は、メッセージの直後のシステムの状態がスナップショット内に保持されると、それらの最も古いメッセージを削除し得る。
【0102】
ブロック904において、ブロックストアサーバ310は、基準時点と、要求に関連付けられた特定の時点との間のボリュームへの書き込み操作を反映するメッセージを取り出す。基準時点は、例示的には、特定の時点より前の、ボリューム全体の状態が既知であった任意の時点であり得る。基準時点は、たとえば、ボリュームの最初の作成またはボリュームのスナップショットの作成に対応し得る。したがって、取り出されたメッセージを利用して、基準時点でのボリュームの状態から開始し、メッセージに含まれる書き込み操作を適用して、特定の時点でのボリュームの状態を再現することができる。例示的には、ブロックストアサーバ310は、ボリュームの基準時点の記録を保持し得、ルーチン901の特定の実装に使用される基準時点を、要求に関連付けられた特定の時点に先行する第1の基準時点として選択し得る。
【0103】
ブロック904において取り出されるメッセージは、オブジェクトストレージ215内に記憶されたバンドルオブジェクトに含まれるメッセージ、またはロガーフリート315内に記憶されたバンドルされていないメッセージの一方または両方を含み得る。例示的には、各メッセージまたはバンドルオブジェクトは、ボリューム識別子と、メッセージに反映された書き込み操作の時間または時間範囲とに関連付けられ得る。したがって、ブロックサーバ310は、オブジェクトストレージ215および/またはロガーフリート315に、基準時点と、要求の特定の時点との間の期間に関連付けられたメッセージを要求し得る。
【0104】
ブロック906において、ブロックストアサーバ310は、要求で指定された特定の時点での、要求で指定された以前存在したボリュームの状態をターゲットボリューム604に再現させるために、取り出されたメッセージから生成された書き込み操作のセットをターゲットボリューム604に適用する。一実施形態では、ブロックストアサーバ310は、最初にボリューム604の状態を基準時点での状態と一致させる(たとえば、基準時点がボリュームの最初の作成である場合、全てのブロックを未書き込み状態に設定することによって、基準時点がスナップショットの作成に対応する場合、全てのブロックをスナップショットに反映された値に設定することによって、など)。その後、ブロックストアサーバ310は、取り出されたメッセージの順序と一致する順序でボリュームに書き込み操作を適用して、以前存在したボリュームに加えられた変更を再現し、ターゲットボリューム310を、特定の時点での以前存在したボリュームの状態と一致させ得る。
【0105】
他の実施形態では、ブロックストアサーバ310は、最後のメッセージに対応する書き込み操作を最初に適用し、次いで、より前のメッセージの書き込み操作を順番に適用することによって、取り出されたメッセージの順序の逆の順序、たとえば逆の年代順で、ボリュームに書き込み操作を適用し得る。書き込み操作を逆の順序で適用する場合、ブロックストアサーバ310は、以前存在したボリュームの同じブロックへの2回目以降の書き込みを無視して、ブロックの状態としての(メッセージのタイミングに反映される)最後の書き込みを、ターゲットボリューム内のブロックの状態として確立し得る。場合によっては、書き込み操作を逆の順序で適用することにより、ブロックストアサーバ310は、基準時点を事前に確立することなく動作することが可能になり得る。たとえば、ブロックストアサーバ310は、ロガーフリート315またはオブジェクトストレージ215からのボリュームの最新のメッセージの取り出しを開始し、ターゲットボリューム604の全てのブロックが既知の状態になるまで、メッセージの逆の順序で、メッセージを取り出し、対応する書き込み操作をターゲットボリュームに適用し続ける(たとえば、同じブロックへの2回目以降の書き込みを無視する)ように構成され得る。例示的には、ブロックストアサーバ310は、メッセージの逆の年代順の取り出しにおいて基準時点に到達した、またはそのようなメッセージ内の全てのブロックが書き込まれたと判定することによって、ターゲットボリューム604の全てのブロックが既知の状態を有すると判定し得る。
【0106】
その後、ブロック908において、ブロックストアサーバ310は、ターゲットボリューム604が特定の時点での以前存在したボリュームの状態になったことを受信者に通知する。受信者は、たとえば、以前存在したボリュームの状態の再現を最初に要求したクライアントに対応し得る。追加的または代替的には、ボリュームの再現がシステム120によって要求された場合、受信者はシステムの制御プレーン155であり得る。そのような場合、制御プレーン155は、その後、オブジェクトストレージ215内に記憶されるターゲットボリューム604のスナップショットを作成させて、ターゲットボリューム604の状態を作成するために使用されるメッセージの削除を可能にし得る。
【0107】
ブロック906における書き込み操作の適用は、所与のブロックに対して順番に行われ得、その結果、特定の時点以前のブロックへの書き込み操作を反映する最新のメッセージは、その特定の時点のブロックの状態の信頼できるものと見なされる。しかしながら、ブロック906における書き込み操作の適用はまた、異なるブロックまたはブロックの一部に対して並列に行われ得る。例示的には、ブロックストアサーバ310は、ブロック906のいくつかのインスタンス、または場合によってはルーチン901全体を並列に実施するように構成され得る。たとえば、ブロック906またはルーチン901の個別の実施は、ターゲットボリューム906の各パーティションに対して行われ得る。そのような並列化により、ブロックストアサーバ310は、ターゲットボリューム906を迅速に、指定された時点での以前存在したボリュームの状態と一致する状態にすることが可能になり得る。
【0108】
ロガーフリート315の例示的な機能について上記で論じているが、追加の機能が、追加的または代替的に、ロガーフリート315によって実装され得る。例示的には、ロガーフリート315は、パブリックにアクセス可能なAPIを提供するように構成され得、これを介して、許可されたクライアントは、データボリューム(たとえば、アクセスが許可されたボリューム)に関連付けられたメッセージストリームをサブスクライブすることが可能になる。したがって、クライアントは、そのようなAPIを利用して、データボリュームの変更に関する通知などの様々な機能を実装し得る。たとえば、クライアントデバイスは、データボリュームからのメッセージストリームをサブスクライブし、基準のセットを満たす変更がいつメッセージストリームに含まれるかを特定し、そのような変更をエンドユーザに通知するように構成され得る。したがって、本明細書に記載の機能は、本質的に例示的なものである。
【0109】
中間複写を利用する実施形態の概要
上記のように、高度に分散された三次レプリカはボリュームの迅速な複写を容易にすることができるが、それにもかかわらず、要求された複写のレベルが、単一の高度に分散されたレプリカの使用下では過度の時間を必要とする場合があり得る。たとえば、ユーザがソースボリュームまたはそのボリュームの一部(たとえば、ブートセクタ)を数百回または数千回複写することを望む場合、単一の高度に分散された三次レプリカを使用すると、そのような複写には長い時間が必要となり得る。そのため、本開示の実施形態は、より迅速な大量複写を可能にするために、中間複写レプリカ、またはレプリカの中間複写パーティションの作成を可能にすることができる。一実施形態では、まず、1つまたは複数の中間複写レプリカまたは中間複写パーティション(これらはいずれも本明細書では「中間複写」と呼び得る)を作成し、次いで、そのような中間複写を使用して、1つまたは複数のターゲットボリュームへのボリュームの大量複写を容易にすることによって、ボリューム(またはボリュームの一部)の大量複写の要求を容易にすることができる。
【0110】
1つまたは複数の中間複写の作成は、
図2Aの分散レプリカコーディネータ205などの集中管理機関によって容易にすることができ、または最初の高度に分散されたレプリカのパーティションをホストするサーバ(たとえば、
図2Aのコンテナサーバ220)によって容易にすることができる。中間複写の実装および使用のための例示的なインタラクションについて、
図10A~
図11Cに関して以下に説明する。具体的には、
図10A~
図10Cのインタラクションは、集中管理機関として機能する分散レプリカコーディネータ205を使用して、ボリュームからの情報の大量コピーを容易にする中間複写の作成および使用を管理するためのインタラクションを示している。
図11A~
図11Cのインタラクションもまた、ボリュームからの情報の大量コピーを容易にする中間複写の作成および使用を管理するためのインタラクションを示しているが、集中管理機関を必要とするのではなく、コンテナサーバ220のピアツーピア動作を利用してそのようにする。
図10A~
図11Cのインタラクションは、ソースボリュームに対応する高度に分散されたレプリカの単一のパーティションが、いくつかのターゲットボリュームに複写されることを参照して、例示的に説明する。この単一のパーティションは、たとえば、多数のターゲットボリュームにコピーするように要求される構成ファイルまたはその他の情報を含み得る。しかしながら、同様のインタラクションを利用して、高度に分散されたレプリカの複数のパーティション、またはそのレプリカの全てのパーティション(たとえば、データボリューム全体)からの情報の複写を容易にすることができる。例示的には、高度に分散されたレプリカの全てのパーティションに対して
図10A~
図10Cまたは
図11A~
図11Cのインタラクションを実施することによって、高度に分散されたレプリカによって表されるソースボリューム全体を、多数のターゲットボリュームにさえ迅速に複写することができる。また、
図10A~
図11Cのインタラクションは、ターゲットボリュームのセットへのボリューム(またはその一部)の複写に関して説明しているが、同様のインタラクションを使用して、任意のネットワークデバイスへのボリューム(またはその一部)の複写を容易にし得る。たとえば、中間複写を利用して、オブジェクトストレージサーバ110内の1つまたは複数のオブジェクトへの、または弾性コンピューティングシステム120の外部の1つまたは複数のネットワーク宛先への、ソースボリューム(またはその一部)の大量複写を容易にし得る(たとえば、ソースボリュームの数百または数千のポイントインタイムの「スナップショット」を作成する)。
【0111】
上記のように、
図10A~
図10Cのインタラクションは、ソースボリュームの高度に分散されたレプリカの単一のパーティションからの情報の大量コピーを容易にするために、中間複写の作成および使用を管理するための集中管理機関として機能する分散レプリカコーディネータ205の使用のためのインタラクションを示している。高度に分散されたレプリカのパーティションは、例示的には、そのようなパーティションをホストするために利用可能なコンテナサーバ220のセットのうちの第1のコンテナサーバ220Aに記憶される。
【0112】
図10A~
図10Cのインタラクションは(1)から始まり、ここで、分散レプリカコーディネータは、ソースボリュームの高度に分散されたレプリカのパーティションをターゲットボリュームのセットにコピーする要求を受信する。一実施形態では、要求はユーザによって、ブロックストアサーバ105により提供されるAPIを介して送信される。APIは、要求を分散レプリカコーディネータ205Aに直接送信すること、または他のデバイス(たとえば、制御プレーン155の実装するもの)に送信し、今度は他のデバイスが要求を分散レプリカコーディネータ205Aに送信すること、を容易にし得る。要求は、たとえば、コピーされるソースボリュームの情報と、情報がコピーされるべきターゲットボリュームのセットと、を識別し得る。情報は、たとえば、ソースボリュームの高度に分散されたレプリカのパーティションとして、またはコーディネータ205Aが(たとえば、情報が記憶されているソースボリュームのブロック範囲に基づいて)パーティションにマッピングすることができるソースボリュームの1つまたは複数のファイルとして、指定され得る。ターゲットボリュームのセットは、たとえば、ブロックストアサーバ105上のターゲットボリュームとして、コンピューティングサーバ115上のインスタンス116として、またはそれらの組み合わせとして指定され得る。オブジェクトストレージサーバ110または外部ネットワークデバイスへの複写が望まれる場合、ターゲットのセットは、オブジェクトストレージサーバ110または外部ネットワークデバイス上の場所として指定され得る。
【0113】
(2)において、分散レプリカコーディネータ205Aは、パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定する。一実施形態では、閾値レベルは、コンピューティングシステム110の管理者またはソースボリュームのユーザなどによって、設定値として事前に確立することができる。他の実施形態では、閾値レベルは、パーティションを複写するための全ての未処理の要求を完了するのに必要と予想される閾値時間であり得る。たとえば、コーディネータ205Aは、(たとえば、パーティションを複写する要求を完了するための時間に関する過去の情報に基づいて)パーティションを複写するための未処理の要求のキューを停止(quiesce)させるのに必要な予想時間を決定し、キューを停止させるのに必要な予想時間が(たとえば、コンピューティングシステム110の管理者またはソースボリュームのユーザによって設定された)閾値時間を超えた場合、パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定し得る。
【0114】
パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定した後、コーディネータは(3)において、ソースパーティションの複写を容易にするために作成する必要がある中間複写パーティションの数を決定する。一実施形態では、中間パーティションの数は、パーティションを複写するための未処理の要求の数に少なくとも部分的に基づく。例示的には、中間複写パーティションとソースパーティションとの組み合わせによって、閾値時間未満での未処理の複写要求の満足を容易にすることができるように、中間パーティションの数がコーディネータ205Aによって決定され得る。他の例では、管理者またはユーザは、ソースパーティションまたは中間複写パーティションあたりの所望の未処理の要求の数を指定し得る。たとえば、パーティションあたりの所望の未処理の要求の数が20個である場合、中間複写の数は、未処理の要求を20で除算し、(最初のソースパーティションを考慮するために)1を減算することによって計算され得る。場合によっては、決定された数が最大数を超えないように、中間複写パーティションの最大数を確立することができる。これは、たとえば、パーティションの大量複写を容易にするために使用されるコンピューティングシステム110の総リソースを制限し得る(たとえば、大量複写が、閾値レベルを超えるパーティションを複写するための未処理の要求の数によって表される場合)。
【0115】
(4)において、分散レプリカコーディネータ205Aは、高度に分散されたレプリカの初期パーティションをホストするコンテナサーバ220(
図10Aにコンテナサーバ220Aとして図示)に、初期パーティションを第2のコンテナサーバ(
図10Bにコンテナサーバ220Bとして図示)にコピーする命令を送信して、第2のコンテナサーバ上に中間複写レプリカを作成する。一実施形態では、命令は第2のコンテナサーバを指定する。他の実施形態では、第2のコンテナサーバは、初期パーティションをホストするコンテナサーバによって(たとえば、ランダム選択によって)選択される。(5)において、コンテナサーバ220Aは、初期パーティションをコンテナサーバ220Bにコピーして、コンテナサーバ220B上に中間複写パーティションを作成する。(6)において、コンテナサーバ220Bは、中間複写パーティションがコンテナサーバ220B上に作成されたことの確認応答をコーディネータ205Aに送信する。
【0116】
その後、インタラクション(4)~(6)は、中間複写パーティションの数が、(3)でコーディネータ205Aによって決定された数と一致するまで、順次的に、並列に、またはそれらの組み合わせで繰り返され得る。たとえば、コンテナサーバ220B上での中間複写の作成の確認応答を受信した後、コーディネータ205は、インタラクション(4)を2回(場合によっては同時にまたは同時並行的に)繰り返し、コンテナサーバ220C上に中間複写を作成するようにコンテナサーバ220Aに1回指示し、コンテナサーバ220N上に中間複写を作成するようにコンテナサーバ220Bに1回指示し得る。インタラクション(4)~(6)が繰り返されるたびに、初期パーティションの情報のソースの数を増やすことができ、これによりさらに多くの中間複写の作成が容易になり、これらは初期パーティションの情報の追加ソースを表す。このように、インタラクション(4)~(6)を繰り返すことにより、ソースパーティションの中間複写の数を指数関数的に増加させやすくすることができる。
【0117】
(たとえば、(3)で決定された数を満たす)十分な数の中間複写が作成された後、
図10Aのインタラクションは、
図10Bに示すように続けることができる。具体的には、コーディネータ205Aは、(7)において、十分な数の中間複写が作成されたことを検出し、(8)において、初期パーティションおよび中間複写をホストするサーバ220に、ターゲットボリュームへの(初期パーティションおよび中間複写パーティションで表される)パーティションの情報のコピーを実行するように指示する。
図10Bのインタラクションでは、パーティションの情報が各コンテナサーバ220N間に複写されていると仮定する。しかしながら、全てではないコンテナサーバ220Nの間でも複写は可能である。さらに、これらのインタラクションでは、ターゲットボリュームは、説明の目的で、ブロックストアサーバ110C上のボリュームであると仮定する。したがって、(9)において、各コンテナサーバ220は、パーティションコピー操作を実行して、ソースパーティションの情報を宛先ブロックストアサーバ310にコピーする。これらの操作は並列に実行することができるので、コンテナサーバ220A上の初期パーティションからパーティションコピー操作を順次実行する場合と比較して、ソースパーティションの情報をブロックストアサーバ310に迅速にコピーすることができる。
【0118】
図10Bはパーティションコピー操作の1回の並列化を示しているが、これらのインタラクションを繰り返して、ソースパーティションの情報を任意の数のブロックストアサーバ310または他のネットワークデバイスにコピーすることを容易にし得る。例示的には、コーディネータ205Aは、ソースパーティションをターゲットボリュームに複写するための未処理の要求を実行する命令を個々のコンテナサーバ220に送信するワークフロー制御アルゴリズムを実装し得る。各パーティションコピー操作が完了すると、コンテナサーバ220は、そのような完了をコーディネータ205Aに報告し得、コーディネータ205Aは、ソースパーティションを複写する他の未処理の要求(存在する場合)を実行する命令をコンテナサーバ220に送信し得る。これらのインタラクションは、ソースパーティションを複写するための未処理の要求がそれ以上存在しなくなるまで、または
図10Cに関して説明するように、ガベージコレクション処理を通じて余分な中間複写が削除されるべきであることを示す閾値レベルを未処理の要求の数が下回るまで、繰り返し得る。場合によっては、各コンテナサーバ220は、複数の未処理の要求を処理するように構成され得、そのため、コーディネータ205Aは、複数のパーティションコピー操作を実行する命令を各コンテナサーバ220に送信し得る。
【0119】
上記のように、
図10Cは、余分な中間複写をコンテナサーバ220から除去して、コンテナサーバ220で必要とされるコンピューティングリソースを削減できるように、中間複写に関する「ガベージコレクション」を実施するための例示的なインタラクションを示している。具体的には、
図10Cのインタラクションは(10)から始まり、ここで、分散レプリカコーディネータ205Aは、未処理のパーティションコピー要求の数が閾値レベルを下回ったことを検出する。一実施形態では、閾値レベルは、未処理のコピー要求の総数をソースパーティション(たとえば、初期パーティションおよびそのパーティションのあらゆる中間複写を含む)の総数で除算した値が閾値を下回った場合に、閾値が満たされるように、パーティションごとの値として設定され得る。たとえば、コンテナサーバ220上で5回複写されたパーティションに対して100個未満の要求が存在する場合、パーティションあたり20個の要求の閾値が満たされ得る。他の実施形態では、閾値レベルは、未処理のパーティションコピー要求を満たすために必要な閾値時間として指定され得る。たとえば、コンテナサーバ220上の情報の複写パーティションの現在の数が、30秒未満に全ての未処理の要求を満たすと予想される場合、閾値レベルが満たされ得る。
【0120】
パーティションをコピーするための未処理の要求が閾値レベルを下回ったことを検出した後、分散レプリカコーディネータ205Aは、(12)において、不要な中間複写を削除する命令をコンテナサーバ220に送信する。一実施形態では、分散レプリカコーディネータ205Aは、(たとえば、ランダムに)中間複写をホストする単一のコンテナサーバ220を選択し、ホストしている中間複写を削除する命令をコンテナサーバ220に送信し得る。その後、未処理のパーティションコピー要求が閾値レベルを下回らなくなるまで、インタラクション(11)および(12)が繰り返され得る。他の実施形態では、分散レプリカコーディネータ205Aは、未処理のパーティションコピー要求が閾値レベルを下回らなくなるように、削除される中間複写の数を決定し得、(12)において、その数の中間複写をホストするコンテナサーバ220に命令を送信し得る。このようにして、コーディネータ205Aは、余分な中間複写がコンテナサーバ220内で保持されないようにして、コンテナサーバ220のリソースを他の操作(たとえば、他のパーティション、他のボリュームなどの複写)に利用可能にすることができる。
【0121】
上記で論じた実施形態は、未処理のパーティションコピー要求に基づく中間複写の削除に関するものであるが、追加または代替のメトリックを使用して、中間複写を削除するか否かを判定し得る。たとえば、分散レプリカコーディネータ205Aは、初期パーティションのコピー要求の使用履歴を入手または決定し、そのような使用履歴から、パーティションの将来のコピー要求を予測し得る(たとえば、使用履歴を将来の時間に投影する)。その後、分散レプリカコーディネータ205Aは、(たとえば、将来の期間にわたって)パーティションについての予測される将来のコピー要求が閾値レベルを下回った場合にのみ、1つまたは複数の中間複写を削除するように機能し得る。一実施形態では、将来の期間は、コンテナサーバ220が中間複写パーティションを削除および再生成するのに必要な時間に少なくとも部分的に基づいて設定され得る。したがって、たとえば、将来のパーティションコピー要求が、中間複写パーティションを削除および再生成するのに必要な時間よりも短い時間での中間複写パーティションの使用を保証するのに十分であると予測される場合、分散レプリカコーディネータ205Aは、中間複写パーティションが削除されるべきでないと判定し得る。
【0122】
図11A~
図11Cを参照して、
図10A~
図10Cに対する追加または代替のインタラクションのセットについて説明する。具体的には、
図10A~
図10Cのインタラクションは、分散されたレプリカのパーティションの大量複写を制御するための集中管理機関としての分散レプリカコーディネータ205Aの使用に関するものであるが、
図11A~
図11Cのインタラクションは、分散されたレプリカのパーティションの大量複写を制御するためのコンテナサーバ220のピアツーピア動作に関するものである。
図11A~
図11Cのインタラクションは、
図10A~
図10Cのインタラクションの代替として(たとえば、分散レプリカコーディネータ205Aへの動作負荷を削減するため)、または
図10A~
図10Cのインタラクションに加えて実施され得る。たとえば、コーディネータ205Aが高度に分散されたレプリカの各パーティションのワークロード情報を保持するために過剰なコンピューティングリソースが必要とされる場合、コーディネータ205Aは、アクセスの多いパーティションのみの大量複写を制御する集中管理機関として機能するように構成され得、コンテナ220は、アクセスの少ないパーティションを複写する必要が生じた場合に、そのようなアクセスの少ないパーティションの複写を制御するためにピアツーピア構成で追加的に機能し得る。たとえば、その例が当技術分野で知られている「ヘビーヒッター」アルゴリズム、または値のストリーム(たとえば、全てのコピー要求)内の値(たとえば、個々のパーティションをコピーする要求)の頻繁な発生を追跡するための他のメモリ効率の高いアルゴリズムを使用することによって、アクセスの多いパーティションが、コーディネータにおいて識別され得る。
【0123】
図11Aのインタラクションは(1)から始まり、ここで、分散レプリカコーディネータ205Aは、
図10Aのインタラクション(1)と同様の方法で、ボリュームの高度に分散されたレプリカのパーティションをターゲットボリュームのセットにコピーする要求を受信する。しかしながら、
図10Aのインタラクションとは対照的に、
図11Aの分散レプリカコーディネータ205Aは、初期パーティションの中間複写の作成を容易にする必要はない。むしろ、(2)において、コーディネータ205Aは、初期パーティションをホストするコンテナサーバ220(ここでは、コンテナサーバ220A)に、要求されたパーティションコピー操作を実行する命令を送信し得る。
【0124】
(3)において、コンテナサーバ220Aは、パーティションをコピーするための未処理の要求(たとえば、コンテナサーバ220で要求のキュー内に保持されるもの)が閾値レベルを超えたことを検出する。上記で論じたのと同様の方法で、閾値レベルは、コンピューティングシステム110の管理者またはソースボリュームのユーザによって、設定値として事前に確立することができ、あるいはパーティションを複写するための全ての未処理の要求を完了するのに必要と予想される閾値時間とすることができる。たとえば、コンテナサーバ220Aは、(たとえば、パーティションを複写する要求を完了するための時間に関する過去の情報に基づいて)パーティションを複写するための未処理の要求のキューを停止させるのに必要な予想時間を決定し、キューを停止させるのに必要な予想時間が(たとえば、コンピューティングシステム110の管理者またはソースボリュームのユーザによって設定された)閾値時間を超えた場合、パーティションを複写するための未処理の要求の数が閾値レベルを超えたと判定し得る。
【0125】
(3)の検出に応答して、コンテナサーバ220Aは、(4)において、初期パーティションを他のコンテナサーバ220Cにコピーして、コンテナサーバ220Cへのパーティションの中間複写を作成する。コンテナサーバ220Aは、たとえば、ランダム選択、ラウンドロビン選択などの、任意の数の知られている負荷分散または選択アルゴリズムに従ってコンテナサーバ220Cを選択し得る。一実施形態では、初期パーティションをサーバ220Cにコピーする前に、コンテナサーバ220Aは、サーバ220Cにクエリを実行して、サーバ220C上での中間複写の作成を要求し得る。サーバ220Cが受諾した場合、インタラクションは上述のように進行し得る。サーバ220Cが拒否した場合、コンテナサーバ220Aは、中間複写の作成を要求する代替サーバ220を選択し得る。サーバ220Cは、たとえば、サーバ220Cが既に初期パーティションの中間複写をホストしている場合、サーバ220Cの現在のワークロードが大きすぎて中間複写を作成できない場合などに拒否し得る。
【0126】
サーバ220Cが受諾するという仮定の下で、インタラクションは(5)に進み、そこで、コンテナサーバ220Aは、パーティションコピー命令の現在のキューの一部をコンテナサーバ220Cに送信する。一実施形態では、サーバ220Aは、パーティションコピー命令の既存のキューの半分を転送して、サーバ220Aおよび220Cの間でパーティションコピー命令を分割し得る。
【0127】
その後、インタラクション(3)および(4)と同様のインタラクションは、上記で論じた閾値レベルを下回るパーティションコピー命令を各コンテナサーバ220Aが保持するまで、コンテナサーバ220内で継続して行われ得る。たとえば、2つのコンテナサーバ220間での未処理のパーティションコピー命令の分割は、いずれかのサーバ220のキューを未処理の要求の閾値レベル未満に低下させるには不十分である場合のインタラクションが
図11Bに示されている。したがって、
図11Bに示すように、各コンテナサーバ220Aおよび220Cは、(6’)および(6’‘)(プライム表記は、同時並行的に発生し得るが必須ではない独立したインタラクションを示す)において、未処理のパーティションコピー要求のキューが閾値レベルを超えたことを独立して判定することができる(たとえば、上述のように判定される)。その後、(7’)および(7’‘)において、サーバ220Aおよび220Cのそれぞれは、パーティションを他のサーバ(それぞれ、サーバ220Bおよび220N)にコピーして、サーバ220間のパーティションの複写の数を2倍にする。これらと同様のインタラクションは、閾値を下回る未処理のパーティションコピー命令のキューを各サーバ220が保持するまで、コンテナサーバ220間で継続して行われ得る。その後、(8)において、初期パーティションまたは中間複写パーティションをホストするサーバ220は、ブロックストアサーバ310へのパーティションコピー操作を実行して、パーティションをターゲットボリュームにコピーすることができる。インタラクション(9)では単一の操作として示しているが、各サーバ220は、パーティションコピーを並列に実行して、ブロックストアサーバ310へのパーティションの情報の迅速な転送を容易にし得る。また、各サーバ220は、自身が保持している保留中のパーティションコピー命令のキューを処理するように構成され得、そのため、サーバ220のキュー内の未処理の命令の数が閾値レベルを下回るまで、自身でパーティションコピーを並列に、順次的に、またはそれらの組み合わせで実行し得る。
【0128】
図11Aおよび
図11Bのインタラクションは、パーティションをコピーするための1セットの要求に関して説明しているが、コンテナサーバ220は、作成済みの中間複写に基づいて後続の要求をルーティングし続けるように構成され得る。たとえば、分散レプリカコーディネータ205Aは、パーティションコピーを実行する命令をコンテナサーバ220Aに送信し続け得る。その理由は、そのサーバ220Aがこの例では、コピーされる初期パーティションをホストしていると仮定しているためである。サーバ220Aは、後続のパーティションコピー命令を、自身と、パーティションの中間複写をホストすることがサーバ220Aに知られている任意のサーバ220との間で分散させ得る。たとえば、
図11Aおよび
図11Bのインタラクションにおいて、サーバ220は、中間複写がサーバ220Bおよび220Cに存在することを認識し得、したがって、いくつかの知られている負荷分散技術のいずれかに従って(たとえば、ラウンドロビン分散を使用して)、サーバ220A、220B、および220Cのそれぞれの間で以降の要求を分散させ得る。他のサーバ220は、同様に、中間複写をホストする追加の既知のサーバ220に要求を転送して、後続の要求をパーティションの中間複写の間で分散させることを可能にし得る。
【0129】
図11Cを参照すると、コンテナサーバ220のピアツーピア構成内でガベージコレクションを実装するための例示的なインタラクションが示されている。具体的には、各コンテナ220は、上限閾値レベル(たとえば、
図11Aおよび
図11Bを参照して上述したもの)以下であって、下限閾値レベル以上である未処理のパーティションコピー命令のキューを保持するように構成され得る。下限閾値レベルは、上記で論じた上限閾値レベルと同様に、たとえば、各サーバでの未処理の要求の最小数、または全ての未処理のパーティションコピー要求を完了するのに必要な最小時間に関して指定され得る。場合によっては、下限閾値レベルはゼロに設定され得、それによって、パーティションをコピーするための未処理の要求がサーバ220に存在しない場合にのみ、コンテナサーバ220がパーティションの中間複写を削除するように構成される。場合によっては、所与のサーバ220は、中間複写を保持していることが分かっている「下流」サーバ220が存在しない場合にのみ、中間複写を削除するように構成され、ここで、下流サーバ220とは、所与のサーバ220が中間複写を作成させたサーバ220を指す。
【0130】
図11Cでは、2つのコンテナサーバ220、すなわち、サーバ220Bおよび220Nが、インタラクション(9’)および(9’‘)において、サーバ220での未処理の要求が下限閾値レベルを下回ったことを検出したと仮定する。そのため、(10’)および(10’‘)において、サーバ220は中間複写を削除して、サーバ220のコンピューティングリソースを解放する。追加的に、(11’)および(11’‘)において、サーバ220はそれらの中間複写の削除を「上流」サーバ220に報告し、ここで、所与のサーバ220に対する上流サーバ220とは、所与のサーバ220に中間複写を作成させたサーバ220を指す。追加的に、インタラクション(11’)および(11’‘)において、サーバ220は、サーバ220の残りのパーティションコピー命令を上流サーバ220に転送する。したがって、上流サーバ220は、未処理のコピー命令が下限閾値を下回ったサーバ220のワークロードを引き取るものと見なすことができる。
【0131】
図11Cに関して上述したように。上記で論じた実施形態は、未処理のパーティションコピー要求に基づく中間複写の削除に関するものであるが、追加または代替のメトリックを使用して、中間複写を削除するか否かを判定し得る。たとえば、コンテナサーバ220は、中間複写によって表されるパーティションのコピー要求の使用履歴を入手または決定し、そのような使用履歴から、パーティションの将来のコピー要求を予測し得る(たとえば、使用履歴を将来の時間に投影する)。その後、コンテナサーバ220は、(たとえば、将来の期間にわたって)パーティションについての予測される将来のコピー要求が閾値レベルを下回った場合にのみ、その中間複写を削除するように機能し得る。一実施形態では、将来の期間は、コンテナサーバ220が中間複写パーティションを削除および再生成するのに必要な時間に少なくとも部分的に基づいて設定され得る。したがって、たとえば、将来のパーティションコピー要求が、中間複写パーティションを削除および再生成するのに必要な時間よりも短い時間での中間複写パーティションの使用を保証するのに十分であると予測される場合、コンテナサーバ220は、中間複写パーティションが削除されるべきでないと判定し得る。
【0132】
図12を参照すると、1つまたは複数の中間複写を利用して、ターゲットボリュームのセットへのボリューム(またはボリュームの一部)の大量複写を容易にするための例示的なルーチン1200が示されている。ルーチン1220は、たとえば、ボリュームの高度に分散されたレプリカをホストするコンテナサーバ220のセットによって、独立して、またはコンピューティングシステム120の他の要素、たとえば、分散レプリカコーディネータ205などと組み合わせて実行され得る。
【0133】
ルーチン1200は1202から始まり、ここで、ボリュームの1つまたは複数のパーティションをターゲットボリュームのセットにコピーする要求が、コンテナサーバ220またはコーディネータ205によって受信される。上記のように、要求は、たとえば、ユーザによってコンピューティングシステム120のAPIを介して送信され得、たとえば、ターゲットボリュームのセットにコピーされる1つまたは複数のパーティションに記憶された情報を識別し得る。
【0134】
ブロック1204において、コンテナサーバ220は、1つまたは複数のパーティションのそれぞれについて、要求されたコピーを容易にする際に利用する1つまたは複数の中間複写パーティションを生成する。一実施形態では、中間複写パーティションは、上記の
図10A~
図10Cのインタラクションなどに従って、レプリカコーディネータ205などの集中管理機関によって作成される。他の実施形態では、中間複写パーティションは、上記の
図11A~
図11Cのインタラクションなどに従って、コンテナサーバ220のピアツーピアインタラクションを介して作成される。
【0135】
ブロック1206において、1つまたは複数のパーティションをコピーする要求は、中間複写をホストするサーバ220の間で分割される。一実施形態では、レプリカコーディネータ205などの集中管理機関は、上記の
図10A~
図10Cのインタラクションなどに従って、中間複写をホストするサーバ220の間で要求を分割するように動作する。他の実施形態では、サーバ220は、ピアツーピア方式でインタラクションして、上記の
図11A~
図11Cのインタラクションなどに従って、サーバ220の間で要求を分割する。
【0136】
ブロック1208において、1つまたは複数のパーティションの情報(たとえば、パーティションの初期コピーまたはパーティションの中間複写に含まれるもの)をターゲットボリュームにコピーするためのパーティションコピー操作がサーバ220によって実行される。パーティションコピー操作は少なくとも部分的に並列に実施することができ、中間複写の数はターゲットボリュームの数に対して多くする(場合によっては、ターゲットボリュームに対して1対1の比率にする)ことができるので、パーティションコピー操作は、中間複写なしで1つまたは複数のパーティションの初期コピーのみを使用する場合に比べて、迅速に完了することができる。
【0137】
ブロック1210において、サーバ220は、ガベージコレクションを実行して、サーバ220上の余分な中間複写を削除する。ガベージコレクションは、上記の
図10Cのインタラクションなどに従って、集中管理機関などによって容易になされ得る。他の実施形態では、サーバ220は、上記の
図11Cのインタラクションなどに従って、ガベージコレクションを実施するためにピアツーピア方式でインタラクションを行う。その後、ルーチン1200は終了し得る。
【0138】
ルーチン1200は、例示的にユーザの要求に基づいて開始されるものとして上述しているが、一部の実施形態では、ルーチン1200は、代替のメカニズムを介して実装され得る。例示的には、ルーチン1200は、ターゲットボリュームから特定のパーティションのデータを読み出すためのユーザ要求に応答して、そのパーティションの迅速な複写を提供するためのメカニズムとして実装され得る。たとえば、ユーザが初期ボリューム(たとえば、一次、二次、および三次レプリカで表され、それぞれがいくつかのパーティションに分割され得るもの)をターゲットボリュームの大規模なセット(たとえば、数百または数千のボリューム)にコピーすることを要求する場合について考える。本開示の一実施形態では、ブロックストアサーバ105は、(たとえば、一次、二次、および三次レプリカの)既存のパーティションに基づくコピー操作のセットを開始し得るが、そのようなコピー操作には、既存のパーティションからターゲットボリュームのセットを生成するのに長い時間が必要になり得ると予想される。しかしながら、ブロックストアサーバ105はさらに、コピー操作のセットが完了する前であっても、ターゲットボリュームのセットにおいて初期ボリュームのデータが利用可能であるとユーザに通知し得る。ブロックストアサーバ105はさらに、初期ボリュームのパーティションから読み出しボリュームにデータをコピーする要求を開始することによって、ターゲットボリュームのセットのボリュームに対する読み出し要求に応答するように機能し得る。例示的には、ターゲットボリュームのセットのボリュームにおいて十分な数の読み出し要求が受信された場合、初期ボリュームのパーティションからデータをコピーするための対応する要求のセットは、ルーチン1200を開始し得る。したがって、場合によっては、ルーチン1200を実装することにより、ブロックストアサーバ105は、それらのボリュームを読み出すためのユーザからの要求に応答して、「オンザフライ」でターゲットボリュームにデータを投入することが可能になり得る。
【0139】
用語
本明細書に記載の方法およびタスクの全ては、コンピュータシステムによって実行され、完全に自動化され得る。コンピュータシステムは、場合によっては、記載の機能を実行するためにネットワークを介して通信して相互動作する複数の別々のコンピュータまたはコンピューティングデバイス(たとえば、物理サーバ、ワークステーション、ストレージアレイ、クラウドコンピューティングリソースなど)を含み得る。そのような各コンピューティングデバイスは、典型的には、メモリまたは他の非一時的コンピュータ可読記憶媒体もしくはデバイス(たとえば、ソリッドステートストレージデバイス、ディスクドライブなど)に記憶されたプログラム命令またはモジュールを実行するプロセッサ(または複数のプロセッサ)を含む。本明細書に開示した各種の機能は、そのようなプログラム命令に具現化され得、またはコンピュータシステムの特定用途向け回路(たとえば、ASICもしくはFPGA)に実装され得る。コンピュータシステムが複数のコンピューティングデバイスを含む場合、これらのデバイスは、必須ではないが、同じ場所に配置され得る。開示した方法およびタスクの結果は、ソリッドステートメモリチップまたは磁気ディスクなどの物理ストレージデバイスを異なる状態に変えることによって、永続的に記憶され得る。一部の実施形態では、コンピュータシステムは、複数の別々の事業体または他のユーザによって処理リソースが共有されるクラウドベースのコンピューティングシステムであり得る。
【0140】
処理230、320、410、505A、505B、および901は、イベントに応答して、たとえば、所定のまたは動的に決定されるスケジュールで、ユーザまたはシステム管理者によって開始された場合にオンデマンドで、または他の何らかのイベントに応答して、開始し得る。処理230、320、410、505A、505B、901、または1201が開始されると、1つまたは複数の非一時的コンピュータ可読媒体(たとえば、ハードドライブ、フラッシュメモリ、リムーバブルメディアなど)に記憶された実行可能プログラム命令のセットは、サーバまたは他のコンピューティングデバイスのメモリ(たとえば、RAM)にロードされ得る。次いで、実行可能命令は、コンピューティングデバイスのハードウェアベースのコンピュータプロセッサによって実行され得る。一部の実施形態では、処理230、320、410、505A、505B、901、1201またはそれらの一部は、複数のコンピューティングデバイスおよび/または複数のプロセッサ上で、順次的にまたは並列に実施され得る。
【0141】
実施形態に応じて、本明細書に記載の処理またはアルゴリズムのいずれかの特定の行為、イベントまたは機能は、異なる順序で実行することができ、追加する、合体させる、または完全に省くことができる(たとえば、記載した全ての動作またはイベントがこのアルゴリズムの実施に必須ではない)。また、特定の実施形態では、動作またはイベントは、逐次的にではなく同時並行的に、たとえば、マルチスレッド処理、割り込み処理、または複数のプロセッサもしくはプロセッサコアを介して、あるいは他の並列アーキテクチャで実行することができる。
【0142】
本明細書に開示した実施形態に関連して説明した各種の例示的な論理ブロック、モジュール、ルーチン、およびアルゴリズムのステップは、電子ハードウェア(たとえば、ASICもしくはFPGAデバイス)、コンピュータハードウェア上で動作するコンピュータソフトウェア、またはこれらの組み合わせとして実装することができる。また、本明細書に開示した実施形態に関連して説明した各種の例示的な論理ブロックおよびモジュールは、本明細書に記載の機能を実行するように設計されたプロセッサデバイス、デジタルシグナルプロセッサ(「DSP」)、特定用途向け集積回路(「ASIC」)、フィールドプログラマブルゲートアレイ(「FPGA」)もしくは他のプログラマブルロジックデバイス、ディスクリートゲートもしくはトランジスタロジック、ディスクリートハードウェア部品、またはこれらの任意の組み合わせなどの機械によって、実装または実行することができる。プロセッサデバイスはマイクロプロセッサとすることができるが、代替的には、プロセッサデバイスは、コントローラ、マイクロコントローラ、もしくはステートマシン、またはこれらの組み合わせなどとすることができる。プロセッサデバイスは、コンピュータ実行可能命令を処理するように構成される電気回路を含むことができる。他の実施形態では、プロセッサデバイスは、コンピュータ実行可能命令を処理せずに論理演算を実行するFPGAまたは他のプログラマブルデバイスを含む。プロセッサデバイスは、たとえば、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアと連携する1つまたは複数のマイクロプロセッサ、または任意の他のそのような構成などの、コンピューティングデバイスの組み合わせとして実装することもできる。本明細書では主としてデジタル技術に関して説明しているが、プロセッサデバイスはまた、主としてアナログ部品を含み得る。たとえば、本明細書に記載のレンダリング技術の一部または全部は、アナログ回路またはアナログ・デジタル混合回路で実装され得る。コンピューティング環境は、いくつか例を挙げると、マイクロプロセッサ、メインフレームコンピュータ、デジタルシグナルプロセッサ、携帯型コンピューティングデバイス、デバイスコントローラ、または電化製品内のコンピューティングエンジンに基づいたコンピュータシステムを含むが、これに限定されない任意の種類のコンピュータシステムを含むことができる。
【0143】
本明細書に開示した実施形態に関連して説明した方法、処理、ルーチンまたはアルゴリズムの要素は、直接ハードウェアで、プロセッサデバイスによって実行されるソフトウェアモジュールで、またはこれら2つの組み合わせで具現化することができる。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または任意の他の形態の非一時的コンピュータ可読記憶媒体に存在することができる。例示的な記憶媒体は、プロセッサデバイスが記憶媒体から情報を読み出し、情報を記憶媒体に書き込むことができるようにプロセッサデバイスに結合することができる。代替的には、記憶媒体は、プロセッサデバイスと一体にすることができる。プロセッサデバイスおよび記憶媒体は、ASICに存在することができる。ASICはユーザ端末に存在することができる。代替的には、プロセッサデバイスおよび記憶媒体は、ユーザ端末内のディスクリート部品として存在することができる。
【0144】
本明細書で使用する条件付きの文言、特に、「できる(can)」、「可能性がある(could)」、「場合がある(might)」、「~し得る(may)」、「たとえば(e.g.,)」などは、特に明確に指定のない限り、または使用される文脈内で別様に解釈されない限り、一般に、特定の特徴、要素またはステップが、特定の実施形態には含まれるが他の実施形態には含まれないことを伝えるように意図している。したがって、そのような条件付きの文言は一般に、特徴、要素またはステップが1つまたは複数の実施形態に何らかの形で必要であることを示すように意図したものでもなく、これらの特徴、要素もしくはステップが任意の特定の実施形態に含まれるか、それとも任意の特定の実施形態において実行されるものであるかを、他の入力または指示の有無に関わらず判定する論理が1つまたは複数の実施形態に必ず含まれることを示すように意図したものでもない。「備える」、「含む」および「有する」などの用語は同義語であり、包括的に、制限されない様式で使用され、追加の要素、特徴、行為および動作などを排除しない。また、「または」という用語は、(排他的な意味ではなく)包括的な意味で使用しており、したがって、たとえば、要素のリストを連結するために使用される場合、「または」という用語は、そのリスト内の要素の1つ、一部または全部を意味する。
【0145】
特に明記しない限り、「X、Y、またはZのうちの少なくとも1つ」という句などの選言的な文言は、項目、用語などが、X、Y、もしくはZのいずれか、またはそれらの任意の組み合わせ(たとえば、X、Y、またはZ)であり得ることを提示するために一般に使用される文脈の中で別様に理解される。したがって、そのような選言的な文言は一般に、特定の実施形態が、Xのうちの少なくとも1つ、Yのうちの少なくとも1つ、およびZのうちの少なくとも1つがそれぞれ存在することを必要とすることを意味するものではなく、そうすべきでもない。
【0146】
上記の詳細な説明では、様々な実施形態に適用される新規の特徴を図示し、説明し、指摘しているが、例示したデバイスまたはアルゴリズムの形態および詳細の様々な省略、置換および変更は、本開示の趣旨から逸脱せずに実行できることは理解することが可能である。理解できるように、本明細書に記載の特定の実施形態は、一部の特徴を他の特徴とは別に使用または実施することができるので、本明細書に記載した特徴および利点の全てを提供しない形態内に具現化することができる。特許請求の範囲の意味および均等範囲に入る全ての変更は、その範囲内に包含される。
【0147】
以下の条項のセットを考慮して、上記はより良好に理解され得る。
【0148】
条項1.
ボリュームの一次レプリカの第1の数のパーティションが記憶された第1のサーバのセットと、
前記第1のサーバとデータ通信する第2のサーバのセットであって、前記第2のサーバのセットは、前記一次レプリカと同期的に更新を受信する前記ボリュームの二次レプリカが記憶され、前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成される、前記第2のサーバのセットと、
前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方とデータ通信する複数の追加のサーバであって、前記複数の追加のサーバは、前記一次レプリカとは非同期的に前記更新を受信する前記ボリュームの三次レプリカが集合的に記憶され、前記三次レプリカは、前記複数の追加のサーバに分散された第2の数のパーティションとして記憶され、前記複数の追加のサーバは、前記三次レプリカを使用して前記ボリュームの複製を処理するためのコンピュータ実行可能命令によって構成され、前記第2の数のパーティションは、前記第1の数のパーティションよりも多い、前記複数の追加のサーバと、
を含む、システム。
【0149】
条項2.
前記第1のサーバのセット、前記第2のサーバのセット、および前記複数の追加のサーバは、ブロックストレージを使用して前記ボリュームを記憶するように構成され、
前記三次レプリカの前記第2の数のパーティションのそれぞれは、前記ボリュームの少なくとも1つのブロックを表す、条項1に記載のシステム。
【0150】
条項3.
前記複数の追加のサーバは、前記第2の数のパーティションのうちの複数のパーティションのデータを並列に送信することによって前記ボリュームの前記複製を処理するための前記コンピュータ実行可能命令によって構成される、条項1に記載のシステム。
【0151】
条項4.
前記第2の数のパーティションは前記複数の追加のサーバにストライピングされて、前記ボリュームの第1の部分を表す第1のパーティションと、前記第1の部分と連続した前記ボリュームの第2の部分を表す第2のパーティションとが、前記複数の追加のサーバのうちの異なるサーバに記憶される、条項1に記載のシステム。
【0152】
条項5.
前記一次レプリカおよび前記二次レプリカの一方または両方から前記更新を受信し、
前記更新を前記三次レプリカに非同期的に伝播させる、
コンピュータ実行可能命令によって構成されるロガーフリートをさらに含む、
条項1に記載のシステム。
【0153】
条項6.
前記システムの制御プレーンを実装するコンピューティングデバイスと、
前記第1の数のパーティションを使用して前記ボリュームの新しいコピーを記憶するために前記制御プレーンによってセットアップされる第3のサーバのセットであって、前記第3のサーバのセットの前記第1の数のパーティションのそれぞれは、前記複数の追加のサーバから前記第2の数のパーティションのうちの特定のパーティションのデータを取り出して、前記三次レプリカを使用して前記ボリュームの前記新しいコピーを生成する、前記第3のサーバのセットと、
をさらに含む、条項1に記載のシステム。
【0154】
条項7.
前記一次レプリカとデータ通信し、前記一次レプリカから前記ボリュームの前記データにアクセスするように構成されるコンピューティングリソースをホストする第3のサーバをさらに含み、
前記第3のサーバは、前記一次レプリカが利用できない場合に前記二次レプリカにフェイルオーバーするためのコンピュータ実行可能命令によって構成され、
前記制御プレーンを実装する前記コンピューティングデバイスは、前記ボリュームの前記新しいコピーを新しい二次レプリカとして作成するように構成される、条項6に記載のシステム。
【0155】
条項8.
第1のサーバのセットの第1の数のパーティションを使用してボリュームの一次レプリカを記憶することと、
第2のサーバのセットの前記第1の数のパーティションを使用して前記ボリュームの二次レプリカを記憶することであって、前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、前記一次レプリカおよび前記二次レプリカの変更を介して前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成される、前記記憶することと、
前記ボリュームの三次レプリカを作成することであって、少なくとも、
前記ボリュームのデータを第2の数のパーティションに分割することであって、前記第2の数のパーティションは、前記第1の数のパーティションよりも多い、前記分割することと、
前記第2の数のパーティションを複数の追加のサーバに分散させることと、
によって行われる、
前記作成することと、
を含み、
前記複数の追加のサーバは、前記三次レプリカを使用して前記ボリュームの複製を処理するためのコンピュータ実行可能命令によって構成される、コンピュータ実装方法。
【0156】
条項9.
前記一次レプリカおよび前記二次レプリカを同期的に更新することと、
前記一次レプリカへの更新とは非同期的に前記三次レプリカを更新することと、
をさらに含む、条項8に記載のコンピュータ実装方法。
【0157】
条項10.
前記三次レプリカを非同期的に更新することは、
ロガーフリートにおいて前記更新を受信することと、
前記更新を、前記三次レプリカに適用できるようになるまで、前記ロガーフリートに記憶することと、
前記第2の数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
を含む、条項9に記載のコンピュータ実装方法。
【0158】
条項11.
前記三次レプリカを作成することは、
少なくとも1つのオブジェクトストレージサーバから前記ボリュームの前記データを取り出すことと、
前記第2の数のパーティションのうちの各パーティションについて、
前記パーティションを記憶するための、前記複数の追加のサーバのうちのあるサーバを選択することと、
前記パーティションを前記選択されたサーバに送信させて、前記選択されたサーバに記憶することと、
前記第2の数のパーティションのうちの各パーティションについて、前記パーティションの場所情報を識別するマニフェストを作成することと、
をさらに含む、条項8に記載のコンピュータ実装方法。
【0159】
条項12.
前記第2の数のパーティションを前記複数の追加のサーバに分散させることは、前記第2の数のパーティションを前記複数の追加のサーバにストライピングすることを含む、条項8に記載のコンピュータ実装方法。
【0160】
条項13.
前記ボリュームのスナップショットを作成すると決定することと、
前記スナップショットを作成するために、前記第2の数のパーティションのそれぞれを少なくとも1つのオブジェクトストレージサーバに送信させることであって、前記第2の数のパーティションの少なくとも一部は互いに並列に送信される、前記送信させることと、
をさらに含む、条項8に記載のコンピュータ実装方法。
【0161】
条項14.
前記ボリュームの新しいレプリカを作成すると決定することと、
前記新しいレプリカを作成するために、前記第2の数のパーティションのそれぞれを1つまたは複数の第3のサーバに送信させることであって、前記第2の数のパーティションの少なくとも一部は、互いに並列に前記第3のサーバに送信される、前記送信させることと、
をさらに含む、条項8に記載のコンピュータ実装方法。
【0162】
条項15.
コンピューティングシステムによって実行されると、前記コンピューティングシステムに動作を実行させる命令を記憶する非一時的コンピュータ可読媒体であって、前記動作は、
ボリュームの第1のレプリカを前記コンピューティングシステムの第1のストレージデバイスのセットに記憶することであって、前記第1のストレージデバイスのセットは、前記第1のレプリカの変更を介して前記ボリュームに対するユーザ開始の読み出しまたは書き込みを処理するためのコンピュータ実行可能命令によって構成される、前記記憶することと、
前記ボリュームの第2のレプリカを作成することであって、少なくとも、
前記ボリュームのデータを複数のパーティションに分割することと、
前記複数のパーティションを前記コンピューティングシステムの第2のストレージデバイスのセットに分散させることであって、前記第2のストレージデバイスのセットは、前記第2のレプリカを使用して前記コンピューティングシステム内での前記ボリュームの複写を容易にするためのコンピュータ実行可能命令によって構成され、前記複数のパーティションの数は、前記第1のストレージデバイスのセットの数よりも多い、前記分散させることと、によって行われる、
前記作成することと、
を含む、前記非一時的コンピュータ可読媒体。
【0163】
条項16.
前記動作は、前記第1のレプリカへの更新とは非同期的に前記第2のレプリカを更新することをさらに含む、条項15に記載の非一時的コンピュータ可読媒体。
【0164】
条項17.
前記第2のレプリカを非同期的に更新することは、
ロガーフリートにおいて前記更新を受信することと、
前記更新を、前記第2のレプリカに適用できるようになるまで、前記ロガーフリートに記憶することと、
前記複数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
を含む、条項16に記載の非一時的コンピュータ可読媒体。
【0165】
条項18.
前記第2のレプリカを作成することは、
少なくとも1つのオブジェクトストレージサーバから前記ボリュームの前記データを取り出すことと、
前記複数のパーティションのうちの各パーティションについて、
前記パーティションを記憶するための、前記第2のストレージデバイスのセットのうちのあるストレージデバイスを選択することと、
前記パーティションを前記選択されたストレージデバイスにルーティングすることと、
前記選択されたストレージデバイスのコンテナに前記パーティションを記憶することと、
前記複数のパーティションのうちの各パーティションについて、前記パーティションが記憶される前記コンテナを識別するマニフェストを作成することと、
さらに含む、条項15に記載の非一時的コンピュータ可読媒体。
【0166】
条項19.
前記複数のパーティションを前記第2のストレージデバイスのセットに分散させることは、前記複数のパーティションを前記第2のストレージデバイスのセットにストライピングすることを含む、条項15に記載の非一時的コンピュータ可読媒体。
【0167】
条項20.
前記動作は、
前記ボリュームのスナップショットを作成すると決定することであって、前記スナップショットは、少なくとも1つのオブジェクトストレージサーバに記憶される前記ボリュームのオブジェクト表現である、前記決定することと、
前記スナップショットを作成するために、前記複数のパーティションのそれぞれを前記少なくとも1つのオブジェクトストレージサーバにプッシュすることであって、前記複数のパーティションの少なくとも一部は、前記少なくとも1つのオブジェクトストレージサーバに並列にプッシュされる、前記プッシュすることと、
をさらに含む、条項15に記載の非一時的コンピュータ可読媒体。
【0168】
条項21.
ボリュームの一次レプリカが記憶された第1のサーバのセットであって、前記第1のサーバのセットは、前記一次レプリカを記憶する第1の数のパーティションに対応する、前記第1のサーバのセットと、
前記第1のサーバとデータ通信する第2のサーバのセットであって、前記第2のサーバのセットは、前記一次レプリカと同期的に更新を受信する前記ボリュームの二次レプリカが記憶され、前記第2のサーバのセットは、前記二次レプリカを記憶する前記第1の数のパーティションに対応する、前記第2のサーバのセットと、
前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方とデータ通信する複数の追加のサーバであって、前記複数の追加のサーバは、前記一次レプリカとは非同期的に前記更新を受信する前記ボリュームの三次レプリカが集合的に記憶され、前記三次レプリカは、前記複数の追加のサーバに分散された第2の数のパーティションとして記憶され、前記第2の数のパーティションは、前記第1の数のパーティションよりも多い、前記複数の追加のサーバと、
を含み、
前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、
前記一次および二次レプリカの変更を介して前記ボリュームへのユーザ開始の書き込みを処理し、
前記ボリュームへの前記ユーザ開始の書き込みによって前記三次レプリカを更新させる、
コンピュータ実行可能命令によって構成され、
前記ボリュームのバックアップを作成する要求を受信したことに応答して、前記複数の追加のサーバは、前記三次レプリカを使用して前記コンピューティングシステム内で前記ボリュームの前記バックアップを作成するためのコンピュータ実行可能命令によって構成される、コンピューティングシステム。
【0169】
条項22.
前記複数の追加のサーバは、前記第2の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも1つの他のサーバに並列に送信することにより、前記ボリュームの前記バックアップを作成するための前記コンピュータ実行可能命令によって構成される、条項21に記載のコンピューティングシステム。
【0170】
条項23.
前記バックアップを作成するために、前記複数の追加のサーバは、前記第2の数のパーティションのうちの指定されたパーティションを、オブジェクトストレージを使用して前記指定されたパーティションを記憶するように構成される1つまたは複数のオブジェクトストレージサーバに送信するための前記コンピュータ実行可能命令によって構成される、条項21に記載のコンピューティングシステム。
【0171】
条項24.
前記第1のサーバのセットおよび前記第2のサーバのセットの一方または両方は、前記ボリュームの前回のバックアップの作成以降に変更された前記ボリュームのあらゆるブロックをリスト化したバックアップマップを作成するためのコンピュータ実行可能命令によって構成され、前記複数の追加のサーバは、前記バックアップマップを使用して前記指定されたパーティションを識別するための前記コンピュータ実行可能命令によって構成される、条項23に記載のコンピューティングシステム。
【0172】
条項25.
前記第1のサーバのセットは、
ユーザバックアップ要求を受信し、
前記ユーザバックアップ要求を前記複数の追加のサーバに伝播させる、
コンピュータ実行可能命令によって構成される、条項21に記載のコンピューティングシステム。
【0173】
条項26.
前記複数の追加のサーバは、前記ユーザバックアップ要求を受信したことに応答して、前記第2の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも1つの他のサーバに送信するための前記コンピュータ実行可能命令によって構成される、条項24に記載のコンピューティングシステム。
【0174】
条項27.
前記複数の追加のサーバは、前記ユーザバックアップ要求を受信したことに応答して、前記三次レプリカのコピーを作成するための前記コンピュータ実行可能命令によって構成され、前記三次レプリカの前記コピーは、第3のサーバのセットに集合的に記憶された前記第2の数のパーティションを使用して記憶された前記ボリュームの前記データを有し、
前記第3のサーバのセットは、前記第2の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも1つの他のサーバに送信するための前記コンピュータ実行可能命令によって構成される、
条項24に記載のコンピューティングシステム。
【0175】
条項28.
第1のサーバのセットの第1の数のパーティションを使用してボリュームの一次レプリカを記憶することと、
第2のサーバのセットの前記第1の数のパーティションを使用して前記ボリュームの二次レプリカを記憶することと、
前記ボリュームの三次レプリカを作成することであって、少なくとも、
前記ボリュームのデータを第2の数のパーティションに分割することであって、前記第2の数のパーティションは、前記第1の数のパーティションよりも多い、前記分割することと、
前記第2の数のパーティションを複数の追加のサーバに分散させることと、
によって行われる、
前記作成することと、
前記一次レプリカおよび前記二次レプリカの変更を介して前記ボリュームへのユーザ開始の書き込みを処理することと、
前記ボリュームへの前記ユーザ開始の書き込みによって前記三次レプリカを更新することと、
前記ボリュームのバックアップを作成するためのユーザバックアップ要求を受信することと、
前記ユーザバックアップ要求を前記三次レプリカに伝播させることと、
前記三次レプリカを使用して前記ボリュームのバックアップを作成することと、
を含む、コンピュータ実装方法。
【0176】
条項29.
前記バックアップを作成することは、前記第2の数のパーティションの少なくとも一部からデータを並列に送信することを含む、条項28に記載のコンピュータ実装方法。
【0177】
条項30.
前記一次レプリカにおいてユーザバックアップ要求を受信することと、
前記ユーザバックアップ要求を前記一次レプリカから前記三次レプリカに伝播させることと、
前記三次レプリカにおいて前記ユーザバックアップ要求を受信したことに応答して前記バックアップを作成することと、
をさらに含む、条項28に記載のコンピュータ実装方法。
【0178】
条項31.
前記バックアップを作成することは、
前記三次レプリカのコピーを作成することであって、前記三次レプリカの前記コピーは、第3のサーバのセットに集合的に記憶された前記第2の数のパーティションを使用して記憶された前記ボリュームの前記データを有する、前記作成することと、
前記三次レプリカの前記コピーの前記第2の数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも1つの他のサーバに送信することと、
を含む、条項28に記載のコンピュータ実装方法。
【0179】
条項32.
前記一次レプリカへの更新を受信することと、
前記三次レプリカの前記コピーが前記データを前記少なくとも1つの他のサーバに送信している間に、前記三次レプリカの前記第2の数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項31に記載のコンピュータ実装方法。
【0180】
条項33.
前記バックアップを作成することは、
前記一次レプリカへの更新を受信することと、
前記三次レプリカから前記バックアップが作成されるまで前記更新を記憶することと、
前記バックアップが作成された後、前記第2の数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
を含む、条項28に記載のコンピュータ実装方法。
【0181】
条項34.
前記バックアップが作成されたという確認応答を前記一次レプリカにおいて受信することと、
前記確認応答を受信したことに応答して、前記第2の数のパーティションのうちの前記指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項33に記載のコンピュータ実装方法。
【0182】
条項35.
コンピューティングシステムによって実行されると、前記コンピューティングシステムに動作を実行させる命令を記憶する非一時的コンピュータ可読媒体であって、前記動作は、
ボリュームの第1のレプリカを、前記コンピューティングシステムの第1のストレージデバイスのセットに記憶することと、
前記ボリュームの第2のレプリカを作成することであって、少なくとも、
前記ボリュームのデータを複数のパーティションに分割することと、
前記複数のパーティションを前記コンピューティングシステムの第2のストレージデバイスのセットに分散させることであって、前記複数のパーティションの数は、前記第1のストレージデバイスのセットの数よりも多い、前記分散させることと、
によって行われる、
前記作成することと、
前記第1のレプリカの変更を介して、前記ボリュームへのユーザ開始の書き込みを処理することと、
前記ボリュームへの前記ユーザ開始の書き込みによって前記第2のレプリカを更新することと、
前記ボリュームのバックアップを作成するためのユーザバックアップ要求を受信することと、
前記ユーザバックアップ要求を前記第2のレプリカに伝播させることと、
前記第2のレプリカを使用して、前記コンピューティングシステム内で前記ボリュームのバックアップを作成することと、
を含む、前記非一時的コンピュータ可読媒体。
【0183】
条項36.
前記動作は、前記第2のレプリカのデータを前記第2のストレージデバイスのセットの少なくとも一部から並列に送信することをさらに含む、条項35に記載の非一時的コンピュータ可読媒体。
【0184】
条項37.
前記バックアップを作成するための前記動作は、
前記第2のレプリカのコピーを作成することであって、前記第2のレプリカの前記コピーは、第3のストレージデバイスのセットに集合的に記憶された前記複数のパーティションを使用して記憶された前記ボリュームの前記データを有する、前記作成することと、
前記第2のレプリカの前記コピーの前記複数のパーティションの少なくとも一部のデータを、前記バックアップを記憶するように構成される少なくとも1つの他のサーバに送信することと、
をさらに含む、条項35に記載の非一時的コンピュータ可読媒体。
【0185】
条項38.
前記動作は、
前記第1のレプリカへの更新を受信することと、
前記第2のレプリカの前記コピーが前記データを前記少なくとも1つの他のサーバに送信している間に、前記第2のレプリカの前記複数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項37に記載の非一時的コンピュータ可読媒体。
【0186】
条項39.
前記動作は、
前記第1のレプリカへの更新を受信することと、
前記第2のレプリカから前記バックアップが作成されるまで前記更新を記憶することと、
前記バックアップが作成された後、前記複数のパーティションのうちの指定されたパーティションに前記更新を順次適用することと、
をさらに含む、条項35に記載の非一時的コンピュータ可読媒体。
【0187】
条項40.
前記動作は、
前記ボリュームの前記第1のレプリカを1つまたは複数のブロックとして記憶することと、
前記ボリュームの前記バックアップを1つまたは複数のオブジェクトとして少なくとも1つのオブジェクトストレージサーバに記憶することと、
前記ボリュームのブロックを前記少なくとも1つのオブジェクトストレージサーバの対応する場所にマッピングするマニフェストを作成することと、
をさらに含む、条項35に記載の非一時的コンピュータ可読媒体。
【0188】
条項41.
データボリュームの分散されたレプリカを実装するサーバコンピューティングデバイスのセットであって、前記分散されたレプリカは、前記サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定される追加のレプリカとは異なる、前記サーバコンピューティングデバイスのセットと、
コーディネータコンピューティングデバイスであって、
前記パーティションのセットのうちのパーティション内の情報がターゲットボリュームのセットにコピーされることを示す1つまたは複数の要求を受信し、
前記パーティション内の前記情報を前記ターゲットボリュームのセットにコピーするのに必要なコピー操作の数が閾値を満たしていると判定し、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成し、
前記中間複写パーティションから前記ターゲットボリュームのセットに前記情報をコピーするコピー操作のセットを並列に開始する、
コンピュータ実行可能命令によって構成される、前記コーディネータコンピューティングデバイスと、
を含む、システム。
【0189】
条項42.
前記1つまたは複数の要求は、前記ボリューム全体が前記ターゲットボリュームのセットにコピーされることを示し、
前記パーティションを複写して中間複写パーティションを生成することが、前記パーティションのセットを複写して中間複写パーティションのセットを生成することをさらに含む、条項41に記載のシステム。
【0190】
条項43.
前記閾値は、前記パーティションを利用する前記数のコピー操作を完了するための予想時間に少なくとも部分的に基づく、条項41に記載のシステム。
【0191】
条項44.
前記コピー操作のセットは、前記パーティションから前記ターゲットボリュームのセットへのコピー操作をさらに含む、条項41に記載のシステム。
【0192】
条項45.
前記コピー操作のセットは、前記中間複写パーティションから前記ターゲットボリュームのセットの第1のサブセットに前記情報をコピーする第1のコピー操作のセットに対応し、
コントローラコンピューティングデバイスは、前記中間複写パーティションから前記ターゲットボリュームのセットの第2のサブセットに前記情報をコピーする第2のコピー操作のセットを並列に開始するためのコンピュータ実行可能命令によってさらに構成される、条項41に記載のシステム。
【0193】
条項46.
データボリュームの分散されたレプリカを実装することであって、前記分散されたレプリカは、サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定される追加のレプリカとは異なる、前記実装することと、
前記パーティションのセットのうちのパーティション内の情報がネットワークデバイスのセットにコピーされるという指示を受信することと、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成することと、
前記中間複写パーティションから前記ネットワークデバイスのセットに前記情報をコピーするコピー操作のセットを並列に開始することと、
を含む、コンピュータ実装方法。
【0194】
条項47.
前記指示は、前記パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第1のサーバコンピューティングデバイスにおいて受信され、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写することは、前記中間複写パーティションのうちの第1の中間複写パーティションを生成する前記サーバコンピューティングデバイスのセットのうちの第2のサーバコンピューティングデバイスを、前記第1のサーバコンピューティングデバイスにおいて選択することを含む、条項46に記載のコンピュータ実装方法。
【0195】
条項48.
前記第1のサーバコンピューティングデバイスによって、前記第2のサーバコンピューティングデバイスに、前記コピー操作のセットの少なくとも一部を開始するように指示することをさらに含む、条項47に記載のコンピュータ実装方法。
【0196】
条項49.
前記第2のサーバコンピューティングデバイスにおいて、
前記中間複写パーティションのうちの第2の中間複写パーティションを生成する前記サーバコンピューティングデバイスのセットのうちの第3のサーバコンピューティングデバイスを選択することと、
前記第3のサーバコンピューティングデバイスに、前記コピー操作のセットの少なくとも一部を開始するように指示することと、
をさらに含む、条項48に記載のコンピュータ実装方法。
【0197】
条項50.
前記第2のサーバコンピューティングデバイスにおいて、
前記第2のサーバコンピューティングデバイスにおける完了すべき未処理の前記第1の中間複写パーティションに関するコピー操作の数が閾値レベルを下回ったことを検出することと、
前記第2のコンピューティングデバイスから前記第1の中間複写パーティションを削除することと、
前記第2のコンピューティングデバイスから前記第1の中間複写パーティションが削除されたことを前記第1のサーバコンピューティングデバイスに通知することと、
をさらに含む、条項48に記載のコンピュータ実装方法。
【0198】
条項51.
前記指示はコントローラコンピューティングデバイスにおいて受信され、
前記パーティションは、前記サーバコンピューティングデバイスのセットのうちの第1のサーバコンピューティングデバイスにおいてホストされ、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写することは、前記コントローラコンピューティングデバイスにおいて、
前記中間複写パーティションのうちの第1の中間複写パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第2のサーバコンピューティングデバイスを選択することと、
前記第1のサーバコンピューティングデバイスに命令を送信して、前記第2のサーバコンピューティングデバイスに前記パーティションを少なくとも部分的に複写する前記第1の中間複写パーティションを作成することと、
を含む、条項46に記載のコンピュータ実装方法。
【0199】
条項52.
前記コントローラコンピューティングデバイスにおいて、
前記第1の中間複写パーティションが作成されたという指示を受信することと、
前記中間複写パーティションのうちの第2の中間複写パーティションをホストする前記サーバコンピューティングデバイスのセットのうちの第3のサーバコンピューティングデバイスを選択することと、
前記第2のサーバコンピューティングデバイスに命令を送信して、前記第3のサーバコンピューティングデバイスに前記第1の中間複写パーティションを少なくとも部分的に複写する前記第2の中間複写パーティションを作成することと、
をさらに含む、条項51に記載のコンピュータ実装方法。
【0200】
条項53.
前記コントローラコンピューティングデバイスにおいて、前記コピー操作のセットの完了後に前記第1の中間複写パーティションを削除するように前記第2のサーバコンピューティングデバイスに指示することをさらに含む、条項51に記載のコンピュータ実装方法。
【0201】
条項54.
データボリュームの分散されたレプリカを実装するシステムで実行可能な命令を含む非一時的コンピュータ可読媒体であって、前記分散されたレプリカは、サーバコンピューティングデバイスのセットの少なくとも一部に分散されたパーティションのセットを含み、前記分散されたレプリカは、前記データボリュームの複製用に指定され、前記データボリュームへの変更を処理するように指定された追加のレプリカとは異なり、前記命令は、
前記パーティションのセットのうちのパーティション内の情報がネットワークデバイスのセットにコピーされるという指示を受信ことと、
前記サーバコンピューティングデバイスのセット内で前記パーティションを複写して、中間複写パーティションを生成することと、
前記中間複写パーティションから前記ネットワークデバイスのセットに前記情報をコピーするコピー操作のセットを並列に開始することと、
のために前記システムによって実行可能である、前記非一時的コンピュータ可読媒体。
【0202】
条項55.
前記命令は、前記パーティション内の前記情報を前記ネットワークデバイスのセットにコピーするのに必要なコピー操作の数が閾値を満たすと判定するために、前記システムによってさらに実行可能である、条項54に記載の非一時的コンピュータ可読媒体。
【0203】
条項56.
前記閾値は、前記パーティションを利用する前記数のコピー操作を完了するための予想時間に少なくとも部分的に基づく、条項55に記載の非一時的コンピュータ可読媒体。
【0204】
条項57.
前記コピー操作のセットは、前記パーティションから前記ターゲットボリュームのセットへのコピー操作をさらに含む、条項54に記載の非一時的コンピュータ可読媒体。
【0205】
条項58.
前記命令は、少なくとも部分的に、
前記サーバコンピューティングデバイスのセットが前記パーティションを複写するように、集中管理デバイスに指示を出させることと、
または、前記サーバコンピューティングデバイスのセットの間でピアツーピア通信を開始して、前記サーバコンピューティングデバイスのセット内で前記パーティションを複写させて、中間複写パーティションを生成することと、
のうちの少なくとも1つによって、前記サーバコンピューティングデバイスのセット内で前記パーティションを複写するために、前記システムによって実行可能である、条項54に記載の非一時的コンピュータ可読媒体。
【0206】
条項59.
前記命令は、前記パーティションを前記ネットワークデバイスのセットにコピーするのに必要な未処理のコピー操作の数が閾値レベル以下になったと判定し、前記中間複写パーティションを削除するために、前記システムによってさらに実行可能である、条項54に記載の非一時的コンピュータ可読媒体。
【0207】
条項60.
前記命令は、前記中間複写パーティションを削除する前に、将来の期間内に発生すると予想される前記パーティションをコピーする要求の将来の数が、閾値レベル以下であると判定するために、前記システムによってさらに実行可能である、条項59に記載の非一時的コンピュータ可読媒体。
【0208】
条項61.
前記閾値レベルは、前記中間複写パーティションの数に少なくとも部分的に基づいて決定される、条項59に記載の非一時的コンピュータ可読媒体。
【0209】
条項62.
前記パーティション内の前記情報が前記ネットワークデバイスのセットにコピーされるという前記指示は、前記ネットワークデバイスのセットのうちの少なくとも1つから前記情報を読み出す要求を含む、条項54に記載の非一時的コンピュータ可読媒体。
【0210】
多くの変形および変更が上述の実施形態に対して行われ得、それらの要素は、他の許容される実施例の中にあるものと理解されるべきであるということが強調されるべきである。全てのそのような変更および変形は、本明細書において、本開示の範囲内に含まれており、以下の特許請求の範囲によって保護されるものとする。