(57)【特許請求の範囲】
【請求項１】
方法であって、
アプリケーションからの第１の書込みと、第１の間隔指示と、をローカルノードにおいて受信することであって、
前記第１の間隔指示が、第１の間隔の開始を示し、
前記第１の間隔指示が、複数の間隔指示のうちの１つである、受信することと、
第１のローカル書込み、第１のリモート書込み、及び第２のリモート書込みを前記ローカルノードによって第１に開始することであって、
前記第１に開始することが、前記第１の間隔指示の受信に応答して実施され、
前記第１のローカル書込みが、ローカルストレージにアクセスし、
前記第１のリモート書込みが、第１のリモートストレージにアクセスし、
前記第１のリモート書込みが、前記第１のローカル書込みを複製し、
前記第２のリモート書込みが、第２のリモートストレージにアクセスし、
前記第２のリモート書込みが、前記第１のローカル書込みを複製する、第１に開始することと、
第１のローカル書込みの確認応答と、第１のリモート書込みの確認応答及び第２のリモート書込みの確認応答の少なくとも一方と、を前記ローカルノードにおいて受信することであって、
前記第１のリモート書込みの確認応答が、前記第１のリモートストレージが前記第１のリモート書込みを完了したことを示し、
前記第２のリモート書込みの確認応答が、前記第２のリモートストレージが前記第２のリモート書込みを完了したことを示す、受信することと、
前記複数の間隔指示のうちの第２の間隔指示を前記ローカルノードにおいて受信することであって、
前記第２の間隔指示が、第２の間隔の開始を示す、受信することと、
前記第１の書込みの完了を前記ローカルノードにおいて確認応答することであって、
前記確認応答が、前記アプリケーションに伝達され、
前記確認応答が、前記第１のローカル書込みの確認応答と、前記第１のリモート書込みの確認応答及び前記第２のリモート書込みの確認応答の少なくとも一方と、前記第２の間隔指示と、の受信に応じて伝達される、確認応答することと、を含む、方法。
【請求項２】
第２のローカル書込み、第３のリモート書込み、及び第４のリモート書込みを第２に開始することであって、
複数のノードが、前記ローカルノード及びコーディネータノードを含み、
前記複数のノードの各々が前記第２の間隔指示を受信したと前記コーディネータノードが決定したことに続いて、前記ローカルノードが前記第２に開始することを実施する、第２に開始することを更に含む、請求項１に記載の方法。
【請求項３】
前記複数のノードの各々が前記第２の間隔指示を受信したと前記コーディネータノードにおいて決定することは、
前記複数のノードの各々が前記第２の間隔指示を受信したという確認応答を前記コーディネータノードにおいて受信することを含む、請求項２に記載の方法。
【請求項４】
前記第１のリモート書込みが、第１の関連するタイムスタンプを有し、
前記第１の関連するタイムスタンプが、前記第１の間隔を示す、請求項１に記載の方法。
【請求項５】
前記第１のローカル書込み及び前記第１のリモート書込みが前記第２の間隔指示を受信する前に完了した場合、新しい間隔を前記ローカルノードにおいて決定することを更に含む、請求項１に記載の方法。
【請求項６】
第１の間隔の確認応答を前記ローカルノードから送信することを更に含み、
前記第１の間隔の確認応答が、前記第１の間隔指示の受信を示す、請求項１に記載の方法。
【請求項７】
前記アプリケーションが前記第１の書込みを発行することであって、
前記第１に開始することが、更に前記第１の書込みを発行する前記アプリケーションに応答して実施され、
前記第１の書込みが、第１のデータにアクセスする、発行することと、
前記アプリケーションが第２の書込みを発行することと、を更に含み、
前記アプリケーションが、前記第１のリモート書込みの確認応答及び前記第２の間隔指示の受信に応答して前記第２の書込みを発行し、
前記第２の書込みが、第２のデータにアクセスし、
前記第２のデータが、前記第１のデータに依存する、請求項１に記載の方法。
【請求項８】
前記第１のリモート書込みが、第１のデータにアクセスし、
前記第３のリモート書込みが、第３のデータにアクセスし、
前記第３のデータが、前記第１のデータに依存する、請求項２に記載の方法。
【請求項９】
前記ローカルストレージへの第３のローカル書込み、前記第１のリモートストレージへの第５のリモート書込み、及び前記第２のリモートストレージへの第６のリモート書込みを前記ローカルノードにおいて第３に開始することを更に含み、
前記第５のリモート書込みが、前記第３のローカル書込みを複製し、
前記第３に開始することが、第３の間隔指示の受信に応答して前記ローカルノードにおいて実施され、
前記第１のリモート書込みが、第１のデータにアクセスし、
前記第３のリモート書込みが、第２のデータにアクセスし、
前記第２のデータが、前記第１のデータに依存する、請求項２に記載の方法。
【請求項１０】
第１のノードが一定量の前記複数の間隔指示に応答していないかを、前記コーディネータノードにおいて決定することと、
前記第１のノードが前記一定量の前記複数の間隔指示に応答していないという決定に応答して、前記第１のノードが無反応であることを示すことと、を更に含む、請求項２に記載の方法。
【請求項１１】
前記第１のノードが遅延後に１つ以上の間隔指示に応答するかを、前記コーディネータノードにおいて決定することと、
前記第１のノードが遅延後に１つ以上の間隔指示に応答したという決定に応答して、前記遅延中に前記第１のノードによって実施される任意のリモート書込みを前記ローカルノードに処理させる指示を前記ローカルノードへ送信することと、を更に含む、請求項１０に記載の方法。
【請求項１２】
システムであって、
アプリケーションと、管理モジュールと、を備え、
前記アプリケーションは、第１の書込みを発行するように構成され、
前記管理モジュールは、
第１の間隔の開始を示す第１の間隔指示を受信し、
ローカルストレージにアクセスする第１のローカル書込みと、第１のリモートストレージにアクセスして前記第１のローカル書込みを複製する第１のリモート書込みと、第２のリモートストレージにアクセスして前記第１のローカル書込みを複製する第２のリモート書込みとを、前記アプリケーションが前記第１の書込みを発行すること及び前記管理モジュールが前記第１の間隔指示を受信することに応答して開始し、
第２の間隔の開始を示す第２の間隔指示を受信し、
第１のローカル書込みの確認応答と、前記第１のリモートストレージが前記第１のリモート書込みを完了したことを示す第１のリモート書込みの確認応答及び前記第２のリモートストレージが前記第２のリモート書込みを完了したことを示す第２のリモート書込みの確認応答の少なくとも一方と、を受信し、
前記第２の間隔指示を受信することと、前記第１のローカル書込みの確認応答を受信することと、前記第１のリモート書込みの確認応答及び前記第２のリモート書込みの確認応答の少なくとも一方を受信することと、に応答して、前記第１の書込みが完了したことを、前記アプリケーションへメッセージを送信することによって確認応答するように構成される、
システム。
【請求項１３】
前記アプリケーションが、前記管理モジュールからの前記第１の書込みの確認応答を受信することに応答して、第２の書込みを発行するように構成される、請求項１２に記載のシステム。
【請求項１４】
複数のノードが、前記システムを含み、
前記管理モジュールが、
前記複数のノードの各々が、前記第２の間隔指示を受信したと決定することに更に応答して、前記第１の書込みの前記確認応答することを実施する、請求項１２に記載のシステム。
【請求項１５】
前記管理モジュールが、
第１の間隔の確認応答を送信するように更に構成され、
前記第１の間隔の確認応答が、前記管理モジュールが前記第１の間隔指示を受信したことを示す、請求項１２に記載のシステム。
【請求項１６】
複数の命令を記憶する、コンピュータで読み取り可能な記憶媒体であって、
前記複数の命令は、
ローカルノードによって実行されると、前記ローカルノードに、第１の書込み及び第１の間隔指示を受信させる第１の組の命令であって、
前記第１の書込みは、アプリケーションから受信され、
前記第１の間隔指示が、第１の間隔の開始を示し、
前記第１の間隔指示が、複数の間隔指示のうちの１つである、第１の組の命令と、
前記ローカルノードによって実行されると、前記ローカルノードに、第１のローカル書込みと、第１のリモート書込みと、第２のリモート書込みと、を開始させる第２の組の命令であって、
前記第１のローカル書込みと、前記第１のリモート書込みと、前記第２のリモート書込みと、を開始することが、前記第１の間隔指示の受信に応答して実施され、
前記第１のローカル書込みが、ローカルストレージにアクセスし、
前記第１のリモート書込みが、第１のリモートストレージにアクセスし、
前記第１のリモート書込みが、前記第１のローカル書込みを複製し、
前記第２のリモート書込みが、第２のリモートストレージにアクセスし、
前記第２のリモート書込みが、前記第１のローカル書込みを複製する、第２の組の命令と、
前記ローカルノードによって実行されると、前記ローカルノードに、第１のローカル書込みの確認応答と、第１のリモート書込みの確認応答及び第２のリモート書込みの確認応答の少なくとも一方と、を受信させる第３の組の命令であって、
前記第１のリモート書込みの確認応答が、前記第１のリモートストレージが前記第１のリモート書込みを完了したことを示し、
前記第２のリモート書込みの確認応答が、前記第２のリモートストレージが前記第２のリモート書込みを完了したことを示す、第３の組の命令と、
前記ローカルノードによって実行されると、前記ローカルノードに、前記複数の間隔指示のうちの第２の間隔指示を受信させる第４の組の命令であって、
前記第２の間隔指示が、第２の間隔の開始を示す、第４の組の命令と、
前記ローカルノードによって実行されると、前記ローカルノードに、前記第１の書込みの完了を確認応答させる第５の組の命令であって、
前記第２の間隔指示の受信と、ローカル書込みの確認応答の受信と、前記第１のリモート書込みの確認応答の受信及び前記第２のリモート書込みの確認応答の受信の少なくとも一方と、に応答して前記完了が確認応答される、第５の組の命令と、を含む、記憶媒体。
【請求項１７】
前記第１のリモート書込み及び前記第１のローカル書込みの各々が、第１の関連するタイムスタンプを有し、
前記第１の関連するタイムスタンプが、前記第１の間隔を示す、請求項１６に記載の記憶媒体。
【請求項１８】
複数のノードの各々が前記第２の間隔指示を受信したと決定することが、
前記複数のノードの各々が前記第２の間隔指示を受信したという確認応答を受信することを含む、請求項１６に記載の記憶媒体。
【請求項１９】
前記複数の命令が、
前記ローカルノードによって実行されると、前記ローカルノードに、第１の間隔の確認応答を送信させる第６の組の命令を更に含み、
前記第１の間隔の確認応答が、前記第１の間隔指示の受信を示す、請求項１６に記載の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、複製に関する。具体的には、本明細書は、分散環境において複製を管理することに関する。
【背景技術】
【０００２】
企業は現在、それらの事業を経営するためにオンラインの、頻繁にアクセスされ、常に変化しているデータに全面的に依存している。このデータの可用性を阻害する予定外の事象は、事業運用に重大な損害を与えかねない。加えて、自然災害又は何らかの他の原因による、いかなる永久的データ損失も、事業の継続生存性に対して重大なマイナスの影響を及ぼすことになる可能性がある。したがって、災害時に、企業はデータ損失を排除又は最小化し、使用可能なデータを用いて短時間で復旧するよう、準備していなければならない。
【０００３】
複製は、データ損失を抑制し、データの可用性を向上するために利用される１つの技法であり、データの複製されたコピーが、１つ以上のリモートサイト又はノードに分散され、記憶される。例えば、サイト移行を実施している際、データを記憶している物理的ディスク、又はこのようなディスクと関連するノードに障害が発生する場合がある。このような障害事象において、データの完全性及び可用性を保証するために、リモートで複製されたデータのコピーが利用される場合がある。複製は、強力なデータストレージソリューションを提供するために、クラスタリング等、他の高可用性技法と頻繁に組み合わされる。
【図面の簡単な説明】
【０００４】
本出願の実施形態は、添付の図面を参照することによってより良く理解され、その多くの目的、特徴、及び利点が当業者に明らかにされ得る。
【図１】一実施形態に従う、分散ストレージシステムを図示するブロック図である。
【図２Ａ】１つ以上の実施形態に従う、間隔制御複製におけるノードの操作のための方法を図示するフローチャートである。
【図２Ｂ】１つ以上の実施形態に従う、間隔制御複製におけるノードの操作のための方法を図示するフローチャートである。
【図２Ｃ】１つ以上の実施形態に従う、間隔制御複製におけるノードの操作のための方法を図示するフローチャートである。
【図２Ｄ】１つ以上の実施形態に従う、間隔制御複製におけるノードの操作のための方法を図示するフローチャートである。
【図３】一実施形態に従う、間隔制御複製におけるコーディネータノードの操作のための方法を図示するフローチャートである。
【図４】一実施形態に従う、間隔制御複製中の分散ストレージシステムのノードによるアクセスを図示する図である。
【図５】一実施形態に従う、間隔制御複製中の分散ストレージシステムのノードによるアクセスを図示する図である。
【図６】一実施形態に従う、間隔制御複製中の分散ストレージシステムのノードによるアクセスを図示する図である。
【図７】一実施形態に従う、間隔制御複製中の分散ストレージシステムのノードによるアクセスを図示する図である。
【図８】一実施形態に従う、間隔制御複製中の多様なノードとストレージデバイスとの間の通信を図示する図である。
【図９】一実施形態に従う、間隔制御複製中の多様なノードとストレージデバイスとの間の通信を図示する図である。
【図１０】一実施形態に従う、間隔制御複製中の多様なノードとストレージデバイスとの間の通信を図示する図である。
【図１１】一実施形態に従う、間隔制御複製におけるコーディネータノードの操作のための方法を図示するフローチャートである。
【図１２】一実施形態に従う、ノードの多様な構成要素を図示するブロック図である。
【図１３】一実施形態に従う、コーディネータノードの多様な構成要素を図示するブロック図である。
【図１４】本出願の実施形態を実装することができるネットワークアーキテクチャを図示するブロック図である。
【図１５】本出願の実施形態を実装するためのコンピュータシステムの一例を図示するブロック図である。
【０００５】
本出願の実施形態は、様々な修正及び代替形態の影響を受け入れることができるが、特定の実施形態が、図面及び詳細な説明における例として提供される。図面及び詳細な説明は、実施形態を開示される特定の形態に限定することを意図するものではないことが理解されるべきである。その代わりに、本発明は、添付の請求項によって定義されるような本発明の趣旨及び範囲内にある、全ての修正、等価物、及び代替物を包含する。
【発明を実施するための形態】
【０００６】
いくつかの実施形態に関連して本発明について記載してきたが、本発明は、本明細書において説明される特定の形態に限定されることを意図するものではない。反対に、添付の請求項によって定義されるような本発明の範囲内に正当に含まれ得るような代替例、修正、及び等価物を包含するものとする。
【０００７】
最新分散ストレージ環境は、１つ以上の相互接続ネットワークを介して接続される複数のストレージオブジェクトを含むことができる。相互接続ネットワークは、分散共有ストレージ環境の多様な要素を接続するためのインフラストラクチャを提供する。ストレージシステムは、データの完全性、整合性、及び可用性を確実にするために、データ冗長機構を頻繁に使用する。データ冗長の他の使用として、データのバックアップ、分散負荷共有、災害復旧、又はポイントインタイム解析及びレポートを挙げることができる。データ冗長に対する１つの手法は、１次ストレージシステムから、２次ストレージ又は複製されたストレージシステムへデータをコピー又は複製することである。換言すれば、ストレージシステムは、データブロックの１次コピーに書き込まれたデータを、他の２次ストレージシステム内のそのデータブロックの冗長又は複製されたコピーに重複することができる。いくつかの設計において、このコピー動作は、データＩ／Ｏが実施されるときに同期的に実行される。他の設計において、この複製は、設計の目的及び使用される技術に依存して、２次ストレージシステムのデータ状態が、一瞬から長時間までのいずれかであり得る時間間隔遅れて、２次ストレージシステムのデータ状態と非同期的に実施される場合がある。周期型複製も使用することができ、２次ストレージシステムへの書込みは、例えば、毎秒単位で集積され、バッチで書き込まれる。
【０００８】
図１は、ノード及びストレージの集合体を含む、分散システム１００を図示するブロック図である。分散システム１００、例えば、クラスタは、いくつかのノード、例えば、ノード１０２（１）、１０２（２）〜１０２（ｎ）及びコーディネータノード１０４を含む。それぞれのノードは、ネットワーク、例えば、ネットワーク１１６を使用して、１次ストレージ、例えば、ストレージ１１２と通信することができる。更に、それぞれのノードは、ネットワーク、例えば、ネットワーク１１６を使用して、２次ストレージ、例えば、ストレージ１１４と通信することができる。ネットワーク１１６は、ローカルエリアネットワーク（ＬＡＮ）と、ワイドエリアネットワーク（ＷＡＮ）と、ストレージエリアネットワーク（ＳＡＮ）と、イーサネット（登録商標、以下同じ）と、及び／又はこれらの任意の組み合わせとを含むことができる。分散システム１００は、異なる数のノードを含む場合があることに注意されたい。
【０００９】
ノード１０２（１）〜１０２（ｎ）はそれぞれ、アプリケーション１０６（１）〜１０６（ｎ）のうちの１つ以上と、管理モジュール１０８（１）〜１０８（ｎ）のうちの１つ以上とを含むことができる。同様に、コーディネータノード１０４は、アプリケーション１０６（３）と、管理モジュール１１０とを含むことができる。このようなアプリケーション１０６（１）〜１０６（ｎ）はそれぞれ、ストレージからの読出し及びストレージへの書込みを発生させることができる。例えば、アプリケーション１０６（１）は、１次ストレージ１１２への書込みを発生させることができる。ノード１０２（１）は次いで、この１次ストレージ１１２への書込みを実施することができる。この書込みは、管理モジュール１０６（１）を使用すること等によって、２次ストレージ１１４へ複製することもできる。管理モジュール１０６（１）は、ノード１０２（１）、並びに分散システム１００内の他のノードのための複製及び他のサービスを実施することができる。一実施形態において、それぞれのアプリケーションが所定データへの書込みを発行すると、そのアプリケーションは、時間的に最初の書込みが完了するまで、このデータへ（又は依存データへ）書き込まない。一実施形態において、アプリケーションと関連する管理モジュールは、そのアプリケーションに対して、そのような時間的に最初の書込みが完了したことを確認応答する。この確認応答をその関連する管理モジュールから受信すると、アプリケーションは次いで、依存書込みを発行することができる。一実施形態において、管理モジュールは、同じノード上に所在するアプリケーションと関連付けることができ、例えば、管理モジュール１０８（１）がノード１０２（１）上のアプリケーション１０８（１）と関連付けられる。しかしながら、他の実施形態において、管理モジュールとアプリケーションとの間の他の関連付けが検討される。
【００１０】
間隔制御複製は、本明細書に記載するように、図１に図示される間隔制御複製のように、分散又はクラスタリングされたコンピューティング環境上に実装することができる。図１に示されるように、ノード１０２（１）〜１０２（ｎ）等の１組のソースノードは、１次ストレージ１１２等の１つ以上の１次ストレージデバイスへデータを書込むことができ、また、２次ストレージ１１４等の複製ターゲットへデータを複製することもできる。図１に図示されるシステムは、本明細書に記載するような間隔制御複製を実装することができる。間隔制御複製は、いくつかの実施形態において、分散システム１００内の他のノードへ間隔指示を送信する、コーディネータ１０４等のノードが関係する。例えば、ノード１０２（１）〜１０２（ｎ）等のこれらの他のノードは、本明細書に記載の様式において、１次ストレージ１１２及び２次ストレージ１１４への書込みを実施する。ノード１０２（１）から等、ノードからの各データの書込みは、現在の間隔の識別子を含むことができる。間隔制御複製は、本明細書に記載するように、少なくとも３つの複製モード、すなわち、同期複製、非同期複製、及び周期複製で使用することができる。
【００１１】
同期複製は、典型的に、１次コピーが更新される時点でデータのリモートコピーが作成されることを確実にする。リモートコピーは、１次コピーと実質的に類似するように作成することができる。同期複製において、Ｉ／Ｏ動作は、１次ストレージ１１２及び２次ストレージ１１４の両方（例えば、ミラーサイト）で完了が確認されるまで、終了したと見なされない。一実施形態において、不完全な動作は、リモートコピーが（実質的に）１次のミラーイメージであるように、アプリケーションノード及び／又は管理モジュールによって、両方の場所で再実行及び／又はロールバックすることができる。リプレリケーション中、データのリモートコピーは、１次コピーが更新される時点で作成される。
【００１２】
例えば、ノード１０２（１）が、１次ストレージ１１２及び２次ストレージ１１４の両方を使用して第１のデータオブジェクトへ書込む場合、間隔制御複製の使用は、ある間隔で開始する書込みが同じ間隔に完了しないことを保証する。加えて、ノード１０２（１）又は１０２（２）は、ノード１０２（１）がオブジェクトの１次ストレージ１１２及び２次ストレージ１１４両方へのその（第１の）書込みを完了するまで、この第１のデータオブジェクト、又は第１の書込みに依存する第２のデータオブジェクトどちらへの一切の書込みも発行しない。これは、間隔制御複製を使用する場合、依存的なＩ／Ｏは、本来のＩ／Ｏ書込みと同じ間隔の同じ又は別のノードによって書き込まれないことを保証する。間隔制御複製は、１次ストレージ１１２及び２次ストレージ１１４両方へデータを書込みノードに適用される。間隔ｍでＩ／Ｏを受信した、間隔制御複製を実装しているノードは、ノード（例えば、ある特定のサブセットの全てのノード）が間隔（ｍ＋１）に移動するまで、このＩ／Ｏを完了しない。いくつかの実施形態において、ノードは、それがこの次の間隔を確認応答すると、次の間隔へ「移動」した。このような確認応答の多様な実施形態は、以下の図に説明する。実装に依存して、ノードが間隔（ｍ＋２）を開始すると、ノードは間隔（ｍ＋１）に移動したと想定される。別の実装において、ノードは、このノードが間隔（ｍ＋１）を確認応答するメッセージを返信すると、間隔（ｍ＋１）に移動したと想定される。換言すれば、所与のノードにおいて、任意のノード上で間隔ｍに受信されたＩ／Ｏは、他のノードが間隔ｍ＋１までこれらのＩ／Ｏのうちの一切を完了できないため、相互に独立している。
【００１３】
一実施形態において、同期複製の場合、ノードは、前のＩ／Ｏ書込みに依存する次のＩ／Ｏ書込みを発行する前に、１次ストレージからの確認応答、２次ストレージからの確認応答、及び、次の間隔の間隔指示を待機する。例えば、ノード１０２（１）の管理モジュール１０８（１）は、第１のＩ／Ｏ書込み（すなわち、第１のローカル書込み及び第１のリモート書込み）が完了したことをアプリケーション１０６（１）に確認応答する前に、第１のローカル書込みに関する１次ストレージ１１２からの確認応答（例えば、間隔ｍの関連ＩＤを有する）、第１のリモート書込みに関する２次ストレージからの確認応答（例えば、間隔ｍの関連ＩＤを有する）、次の間隔（例えば、ｍ＋１）の間隔指示、並びに分散システム１００内の他のノードがこの次の間隔（ｍ＋１）に移動したことの確認応答を待機する。アプリケーション１０６（１）がその関連管理モジュール１０８（１）からこのような確認応答を受信すると、アプリケーション１０６（１）は、第１のＩ／Ｏ書込みに依存する次のＩ／Ｏ書込みを発行することができる。
【００１４】
一実施形態において、非同期複製の場合、ノードは、前のＩ／Ｏ書込みに依存する次のＩ／Ｏ書込みを発行する前に、１次ストレージからの確認応答、及び次の間隔の間隔指示を待機する。換言すれば、同期複製とは対照的に、非同期複製のノードは、アプリケーションに確認応答を送信する前に、２次ストレージからの確認応答を待機しない。例えば、ノード１０２（１）の管理モジュール１０８（１）は、第１のＩ／Ｏ書込み（すなわち、第１のローカル書込み）が完了したことをアプリケーション１０６（１）に確認応答する前に、第１のローカル書込みに関する１次ストレージ１１２からの確認応答（例えば、間隔ｍの関連ＩＤを有する）、及び次の間隔（例えば、ｍ＋１）の間隔指示、並びに分散システム１００内の他のノードがこの次の間隔（ｍ＋１）に移動したことの確認応答を待機する。アプリケーション１０６（１）がその関連管理モジュール１０８（１）からこのような確認応答を受信すると、アプリケーション１０６（１）は、第１のＩ／Ｏ書込みに依存する次のＩ／Ｏ書込みを発行することができる。しかしながら、何らかの時点で、２次ストレージは、リモート書込みを確認応答する。２次ストレージ１１４は、次の間隔（ｍ＋１）のいずれかのＩ／Ｏ書込みを適用する前に、間隔（ｍ）の全てのＩ／Ｏ書込みを適用する。
【００１５】
一実施形態において、周期複製の場合、ノードは、一定の期間で１次ストレージから２次ストレージへデータをコピーする。例えば、複製されるデータは、スナップショットを使用及び／又は別の技法を使用すること等によって、ノードによって収集することができる。一実施形態において、ノードは、ログ及び／又はステージ領域等、ローカルストレージを使用することができ、リモート書込みを集積することができる。一定期間に、複数のリモート書込み（例えば、バッチ書込み）を使用すること等によって、この集積されたデータを２次ストレージに書き込むことができる。周期複製のノードは、アプリケーションに確認応答を送信する前に、２次ストレージからの確認応答を待機しない。例えば、ノード１０２（１）の管理モジュール１０８（１）は、第１のＩ／Ｏ書込み（すなわち、第１のローカル書込み）が完了したことをアプリケーション１０６（１）に確認応答する前に、第１のローカル書込みに関する１次ストレージ１１２からの確認応答（例えば、間隔ｍの関連ＩＤを有する）、及び次の間隔（例えば、ｍ＋１）の間隔指示、並びに分散システム１００内の他のノードがこの次の間隔（ｍ＋１）に移動したことの確認応答を待機する。アプリケーション１０６（１）がその関連管理モジュール１０８（１）からこのような確認応答を受信すると、アプリケーション１０６（１）は、第１のＩ／Ｏ書込みに依存する次のＩ／Ｏ書込みを発行することができる。例えば、このようなＩ／Ｏ書込みはそれぞれ集積されてから、次いで、ある特定の期間で２次に書き込まれる。
【００１６】
全ての３つの複製の種類で、一実施形態において、このような間隔指示それぞれは、図１の間隔指示１１８として実装することができる。間隔指示１１８は、間隔ＩＤ  １２０とデータ１２２とを含むことができるが、他の実装が企図される。ノードはそれぞれ、次いで、各受信された間隔指示１１８の間隔ＩＤ  １２０から現在の間隔を決定することができる。例えば、コーディネータノードのようなノードは、間隔ｍで開始するような間隔指示を送信する。間隔指示を受信するノードはそれぞれ、その間隔のＩ／Ｏ動作を実施する。コーディネータノードは、ある特定のスケジュール、すなわち、ある特定の間隔でこれらの間隔を送信することができる。間隔指示１１８のデータ１２２は、前の間隔指示に確認応答で応答するほかのノードのリスト等、他の情報も含むことができる。
【００１７】
これらの間隔の長さは、それぞれの分散ストレージシステムに対して動的に決定することができる。多くの場合、リモートのＩ／Ｏ書込みレイテンシは、限定要因、すなわち、リモートストレージへのノードの書込みとこのリモートストレージからのその書込みの確認応答との間の経過時間である。一実施形態において、コーディネータノード１０４は、例えば、履歴データ及び／又は分析に基づく等、管理モジュール１１０（１）間隔の長さを使用して決定することができる。例えば、ノード１１０（１）〜１１０（ｎ）のローカルＩ／Ｏが、完了までに１ｍｓ未満かかり、これらのノードのリモートＩ／Ｏが、完了までに平均３ｍｓ〜１０ｍｓかかる場合、間隔は５ｍｓに設定することができる。この例では、７ｍｓかかるＩ／Ｏ（例えば、ノード１０２（１）によるリモート書込み）の場合、このＩ／Ｏ書込みは間隔ｍに開始し、間隔（ｍ＋１）に完了する。ノード１０２（１）がリモートＩ／Ｏ書込みを開始するとき、ノード１０２（１）〜１０２（ｎ）は間隔ｍにある。この間隔ｍ中、同じデータに書込む他のノードは存在しない。次に、ノードは、次いで、間隔（ｍ＋１）の間隔指示を受信する。別のノード、例えば、ノード１０２（ｎ）は、ノード１０２（１）がリモートＩ／Ｏを終了するまで、同じデータ又は依存するデータに書き込もうとはしない。
【００１８】
一実施形態において、コーディネータノード１０４は、ノード１０２（１）〜１０２（ｎ）へ間隔通知を送信する。これらの間隔通知のうちの１つを受信することに応答して、ノード１０２（１）〜１０２（ｎ）はそれぞれ、前の間隔で開始されたＩ／Ｏ動作を完了することもできる。一実施形態において、間隔通知は、間隔の開始を示すことができる。別の実施形態において、間隔通知は、間隔の終了、間隔の中間時点等、他の時点を示すことができる。例えば、間隔指示１１８はＩＤ  １２０の関連間隔番号を示すことができる。間隔番号は、０の時点での間隔通知は１の間隔番号、次の間隔通知は２の間隔番号を有することができる等、間隔通知と関連付けることができる。ただし、他の実装において、間隔指示は、ある間隔指示から次の間隔指示までの進行を示す異なる方法を使用することができる。
【００１９】
一実施形態において、ノード１０２（１）は、例えば、コーディネータノード１０４から、第１の間隔指示を受信する。第１の間隔指示は、第１の間隔の開始を示す。第１の間隔指示を受信した後、ノード１０２（１）は、１次ストレージ１１２へのローカル書込みを開始することができる。この時点で、ノード１０２（１）は、２次ストレージ１１４へのリモート書込みも開始することができる。一実施形態において、リモート書込みは、例えば、１次ストレージへ書き込まれるデータのいくつか又は全てを複製する、複製プロセスの一部として実施することができる。リモート書込み及びローカル書込みの両方が、関連タイムスタンプを含むことができる。このタイムスタンプは、間隔通知の間隔番号を示すことができる（すなわち、第１の間隔通知を示す）。ノードはそれぞれ各間隔中に複数の書込みを発行し、これらの書込みは現在の間隔に関連することに注意されたい。しかしながら、複製モードは、ノードのアプリケーションが依存する書込みをどのように発行するかを制御する。
【００２０】
一実施形態において、ノード１０２（１）は、ノード１０２（１）〜１０２（ｎ）が次の間隔通知を受信し、確認応答すると、ローカル書込み及びリモート書込みの両方が完了したと想定して、第１の間隔のＩ／Ｏ書込みが完了したことを確認応答することができる。一実施形態において、このような間隔の頻度は、（例えば、コーディネータノード１０４によって）決定することができるので、ほとんどの場合、第２の間隔指示は、リモートストレージ１１４が前の間隔のリモート書込み送信が終了したことを確認応答する前に、ノード１０２（１）〜１０２（ｎ）へ送信される（更に受信され、確認応答もされる）。これは、アプリケーションのＩ／Ｏ完了が次の間隔指示を待って遅延しないこと、換言すれば、アプリケーションＩ／Ｏレイテンシが、間隔制御が導入されても不変であることを保証する。一実施形態において、リモートストレージ１１４は、リモート書込みがノード１０２（１）〜１０２（ｎ）及び／又はコーディネータノード１０４によって完了したことを確認応答することができる。一実施形態において、第２の間隔指示を受信した後、ノード１０２（１）〜１０２（ｎ）のうちのいずれかは、ローカルストレージ１１２及びリモートストレージ１１４への追加のＩ／Ｏ書込みを発行するように継続する。上記と同様に、ノード１０２（１）〜１０２（ｎ）は、ノード１０２（１）〜１０２（ｎ）が第３の間隔指示を受信、プロセスし、かつこれらの追加のローカル及び書込みの両方が完了するときまで、これらの追加のローカル及び書込みの両方が完了したことを（例えば、それぞれ、アプリケーション１０６（１）〜１０６（ｎ）に対して）確認応答しない。
【００２１】
一実施形態において、コーディネータノード１０４は、ノード１０２（１）〜１０２（ｎ）から確認応答を受信する。これらの確認応答は、間隔指示の受信を確認応答するために、ノード１０２（１）〜１０２（ｎ）によって送信される。一実施形態において、このような確認応答はそれぞれ、図１の確認応答１２４として実装することができる。確認応答１２４は、間隔ＩＤ  １２６とデータ１２８とを含むことができるが、他の実装が企図される。例えば、ノード１０２（１）−１０２（ｎ）は、第１の間隔指示の受信を確認応答しているコーディネータノード１０４に対して、確認応答（例えば、第１の間隔を指示している確認応答１２４のＩＤ  １２６）を送信することができる。コーディネータノード１０４は、次いで、ノード１０２（１）〜１０２（ｎ）から確認応答を受信することに応答して、次の間隔指示（例えば、第２の間隔を示す間隔指示１１８のＩＤ  １２０）を送信することができ、これらの確認応答は、ノード１０２（１）〜１０２（ｎ）による第１の間隔を示す間隔指示の受信を示す。
【００２２】
一実施形態において、ノード１０２（１）〜１０２（ｎ）のうちの１つがこのような確認応答を返信しない場合、コーディネータノード１０４は、ある特定の期間、次の間隔指示の送信を遅延することができ、その後、コーディネータノード１０４は、このような延滞ノードによって届けられてない間隔を追跡する一方、ノード１０２（１）〜１０２（ｎ）に対する次の間隔指示の送信を再開する。次の間隔で送信されたデータは、有効及び任意の延滞ノードのリストを含むことができる。このデータは、１次及び２次ストレージに記憶されてもよい。延滞ノードが間隔指示に対する応答を開始すると、延滞ノードは、任意の累積された及び／又は進行中の書込みを処理することができる。一実装において、このような累積された書込みは、延滞ノードが間隔指示への応答を再開すると、時刻を示す間隔を使用して全て処理することができる。
【００２３】
間隔制御複製は、本明細書において、アプリケーション、ファイルシステム、ボリュームマネージャー、及び類似のプロセスからのストレージデバイスに対する書込みリクエストを参照して主に説明されるが、一般に、間隔制御複製は、任意の種類のデータストリームのために一貫したポイント又はスナップショットを提供するために利用することができる。例えば、間隔制御複製は、分散若しくはクラスタ環境において、ログの集合体にわたって、ストレージオブジェクトの集合体にわたって、又はメッセージストリームの組にわたって、一貫したチェックポイント又はスナップショットを提供することができる。その上に、「Ｉ／Ｏ」、「アクセス」、及び／又は「書込み」という用語は、本明細書において、間隔制御複製の間等に、複製ターゲットに対してソースノードによって書き込まれたデータを参照するために互換的に使用される。「アプリケーション」という用語は、ソースノード上で実行し、複製ターゲットへデータを複製する、任意のプロセスを参照するために使用される。このため、「アプリケーション」は、本明細書において使用される場合、ボリュームマネージャー、ファイルシステム、データベースアプリケーション、ストレージレプリケータ、又はエンドユーザーアプリケーション、並びにデータを複製する任意の他のプロセスを参照することができる。
【００２４】
図２Ａは、一実施形態に従う、間隔制御複製のための方法２００を図示する流れ図である。本開示を考慮すれば明らかであるように、この方法は、代替の実施形態を派生するために、変更されてもよい。また、本実施形態における工程は順次示される。しかしながら、ある特定の工程が、図示されるのと異なる順に生じてもよく、ある特定の工程が同時に実施されてもよく、ある特定の工程が、他の工程と組み合わされてもよく、ある特定の工程が、別の実施形態で不在であってもよい。方法２００は、図１に関連して記載される要素の変形を参照して説明する。図２Ａは、同期又は非同期複製モードで動作している場合のノード１０２（１）〜１０２（Ｎ）のようなノードの動作を図示する。これらの２つのモードの間の動作時の違いは、必要に応じて説明する。
【００２５】
要素２０２において、ノードは、第１の間隔の間のローカル及びリモートＩ／Ｏ書込みを開始する。例えば、ノード１０２（１）は、（コーディネータノード１０４から等）第１の間隔の指示を受信することができる。ノード１０２（１）がこの指示を受信すると、ノード１０２（１）は、１次ストレージ１１２へのローカル書込み、並びに２次ストレージ１１４へのリモート書込みの両方を開始する。リモート書込みは、複製の一部として実施することができ、ノード１０２（１）の管理モジュールによって開始することができる。ローカル書込み及びリモート書込みは、Ｉ／Ｏ書込みを実施するアプリケーション１０６（１）の一部として管理モジュール１０８（１）によって開始されてもよい。
【００２６】
要素２０４において、同期複製モードで動作している場合、ノードは、次の間隔、２次ストレージからのリモート書込みの確認応答、及びローカルストレージからのローカル書込みの確認応答を待機する。例えば、ノード１０２（１）は、１次ストレージ１１２及び２次ストレージ１１４からのローカル及びリモート書込み（要素２０２において開始された）の確認応答、並びに次の間隔指示を待機する。一実装において、ノード１０２（１）は、分散システム１００の他のノード１０２（ｎ）〜１０２（ｎ）がこの次の間隔に移動したことの確認応答も待機することができる。
【００２７】
要素２０４において、非同期複製モードで動作している場合、ノードは、次の間隔及びローカルストレージからのローカル書込みの確認応答を待機する。例えば、ノード１０２（１）は、１次ストレージ１１２からのローカル書込み（要素２０２において開始された）の確認応答、並びに次の間隔指示を待機する。一実装において、ノード１０２（１）は、分散システム１００の他のノード１０２（ｎ）〜１０２（ｎ）がこの次の間隔に移動したことの確認応答も待機することができる。しかしながら、非同期モードで動作している場合、ノードは、２次ストレージからのリモート書込みの確認応答を待機しない。
【００２８】
要素２０６において、ノードは、アプリケーションに対して、Ｉ／Ｏ書込みが完了したことを確認応答する。例えば、ノード１０２（１）の管理ノード１０８（１）は、アプリケーション１０６（１）に対して、要素２０２で開始されたＩ／Ｏ書込みが完了したことの確認応答を送信する。アプリケーション１０６（１）がこの確認応答を受信すると、アプリケーション１０６（１）は、要素２０２のＩ／Ｏ書込みに依存するＩ／Ｏ書込みを発行することができる。
【００２９】
図２Ｂは、一実施形態に従う、間隔制御複製を使用する周期複製モードのための方法２２５を図示する流れ図である。本開示を考慮すれば明らかであるように、この方法は、代替の実施形態を誘導するために、変更されてもよい。また、本実施形態における工程は順次示される。しかしながら、ある特定の工程が、図示されるのと異なる順に生じてもよく、ある特定の工程が同時に実施されてもよく、ある特定の工程が、他の工程と組み合わされてもよく、ある特定の工程が、別の実施形態で不在であってもよい。方法２２５は、図１に関連して記載される要素の変形を参照して説明する。図２Ａは、周期複製モードで動作している場合のノード１０２（１）〜１０２（Ｎ）のようなノードの動作を図示する。
【００３０】
要素２２６において、ノードは、ローカル書込みを開始し、第１の間隔の間のリモートＩ／Ｏを集積する。例えば、ノード１０２（１）は、（コーディネータノード１０４から等）第１の間隔の指示を受信することができる。ノード１０２（１）がこの指示を受信すると、ノード１０２（１）は同時に、１次ストレージ１１２へのローカル書込みを開始し、並びに２次ストレージ１１４へのリモート書込みを集積する。リモート書込みは、複製の一部として実施することができ、ノード１０２（１）の管理モジュールによって開始することができる。ローカル及びリモート書込みは、Ｉ／Ｏ書込みを実施するアプリケーション１０６（１）の一部として管理モジュール１０８（１）によって開始されてもよい。このように、一実施形態において、ノードは、フロントエンドロギングを実施することができ、ローカルＩ／Ｏ書込みが実施されると、リモートＩ／Ｏ書込みがログに収集される。別の実施形態において、ノードは、バックエンドロギングを実施することができ、データが１次ストレージから読み出されてから、次いで、ログに書き込まれる。
【００３１】
要素２２８において、ノードは、最近の間隔が終了したかを決定する。換言すれば、ノードは、最新のリモート書込み（要素２２６）が開始された期間が完了したかを決定する。一実施形態において、ノードはそれぞれその独自の期間を追跡することができる。別の実施形態において、コーディネータノードは、分散ストレージシステムの期間を追跡することができる。コーディネータノードはまた、間隔指示の一部（例えば、データフィールドの一部）として、それぞれの期間及び／又は期間完了の指示もノードへ送信することができる。例えば、間隔は５ｍｓに設定することができ、期間は１５秒に設定することができるので、それぞれの期間は約３，０００間隔を含むことができる。
【００３２】
要素２３０において、ノードは、次の間隔、及びローカルストレージからのローカル書込みの確認応答を待機する。例えば、ノード１０２（１）は、１次ストレージ１１２からのローカル書込み（要素２２６において開始された）の確認応答、並びに次の間隔指示を待機する。一実装において、ノード１０２（１）は、分散システム１００の他のノード１０２（ｎ）〜１０２（ｎ）がこの次の間隔に移動したことの確認応答も待機することができる。しかしながら、周期モードで動作している場合、ノードは、２次ストレージからのリモート書込みの確認応答を待機しない。
【００３３】
要素２３２において、ノードは、集積されたリモートＩ／Ｏ書込みを開始する。例えば、ノード１０２（１）の管理モジュール１０８（１）は、集積されたリモートＩ／Ｏ書込み（例えば、最後の期間に集積された）を開始する。一実施形態において、ノードは、１次ストレージの少なくとも一部のスナップショットを得て、集積されたリモートＩ／Ｏ書込みを生成する。一実施形態において、Ｉ／Ｏ書込みは、アプリケーションデータのスナップショットを使用する代わりに、ログから集積することができる。集積されたＩ／Ｏ書込みは次いで、２次ストレージへ書き込まれる。一実施形態において、間隔（ｍ）の間の何らかのＩ／Ｏ書込みがその期間に含まれる場合、その前の間隔（ｍ−１）の全てのＩ／Ｏ書込みも含まれる。要素２３２の後、ノードは、要素２２８を実施する。
【００３４】
周期及び非同期のどちらの複製モードで動作している場合も、２次ストレージはまだリモート書込みを確認応答する。ただし、どちらの場合も、ノードの管理モジュールは、Ｉ／Ｏ書込みが完了したことをその関連アプリケーションに確認応答する前に、これらのリモート書込みの確認応答を待機しない。リモートＩ／Ｏ書込みは関連する間隔情報（例えば、このリモートＩ／Ｏ書込みのアプリケーションが開始された間隔を示す）を有するため、２次ストレージは、これらのリモートＩ／Ｏ書込みを正しい順序で適用することができ、すなわち、間隔（ｍ）のリモート書込みは、間隔（ｍ＋１）のリモート書込みが処理される前に処理される。一実施形態において、２次ストレージは、これらの書込みの間隔に従って、リモートＩ／Ｏ書込みを待ち行列に入れ、処理することができる。間隔に従ってリモート書込みを処理することによって、２次ストレージには整合性がある、すなわち、依存データの書込み競合を生じさせない。
【００３５】
一実施形態において、２次ストレージは、リモート書込みが２次ストレージの待ち行列に入ったときのように、リモート書込みが受信されたがまだ完了していないときに確認応答を送信することができる。一実施形態において、２次ストレージは、リモート書込みがストレージに実際に書き込まれたときに確認応答を送信する。２次ストレージはまた、記憶しているが完了していない場合に個別の確認応答を送信し、第２の書込みが完了すると別の確認応答を送信することもできる。
【００３６】
要素２３４において、ノードは、アプリケーションに対して、Ｉ／Ｏ書込みが完了したことを確認応答する。例えば、ノード１０２（１）の管理ノード１０８（１）は、アプリケーション１０６（１）に対して、要素２０２で開始されたＩ／Ｏ書込みが完了したことの確認応答を送信する。アプリケーション１０６（１）がこの確認応答を受信すると、アプリケーション１０６（１）は、要素２０２のＩ／Ｏ書込みに依存するＩ／Ｏ書込みを発行することができる。
【００３７】
図２Ｃは、一実施形態に従う、間隔制御複製のための方法２５０を図示する別の流れ図である。本開示を考慮すれば明らかであるように、この方法は、代替の実施形態を誘導するために、変更されてもよい。また、本実施形態における工程は順次示される。しかしながら、ある特定の工程が、図示されるのと異なる順に生じてもよく、ある特定の工程が同時に実施されてもよく、ある特定の工程が、他の工程と組み合わされてもよく、ある特定の工程が、別の実施形態で不在であってもよい。方法２５０は、図１に関連して記載される要素の変形を参照して説明する。方法２５０は、図２Ａを参照して上記に説明した方法２００の変形である。図２Ｃは、同期又は非同期複製モードで動作している場合のノード１０２（１）〜１０２（Ｎ）のようなノードの動作を図示する。これらの２つのモードの間の動作時の違いは、必要に応じて説明する。
【００３８】
要素２５２において、間隔指示が受信されたかどうかが決定される。例えば、ノード１０２（１）は、間隔指示がコーディネータノード１０４から受信されたかどうかを決定する。受信された間隔指示は、間隔ＩＤとデータとを含むことができる。間隔ＩＤは現在の間隔を示すことができる。例えば、ノード１０２（１）は、間隔ｍのための間隔指示を受信する。
【００３９】
要素２５４において、ノードは、Ｉ／Ｏ書込みを現在の間隔と関連付けることができる。例えば、ノード１０２（１）が間隔指示を受信すると、ノード１０２（１）は、ローカル及びリモート両方のＩ／Ｏ書込みを間隔指示の間隔ＩＤと関連付けることができる。上記のように、リモート書込みは、複製の一部として実施することができ、ノード１０２（１）の管理モジュールによって開始することができる。ローカル書込み及びリモート書込みは、Ｉ／Ｏ書込みを実施しているアプリケーション１０６（１）の一部として、管理モジュール１０８（１）によって開始されてもよい。これらの２つの書込みは、所望に応じて、実質的に同時に実施することができる。
【００４０】
要素２５６において、バッチ処理を実施することができるかどうかの決定が行われる。例えば、ノード１０２（１）は、大量のデータを複製することができる（例えば、１次ストレージ１１２からリモートストレージ１１４へ）。このような複製の一部は、例えば、トランザクションログを複製している場合等、レイテンシに影響され得る。この場合、一部のデバイスでは、ノードは、完了確認応答を（例えば、コーディネータノード１０４へ）返信する前に、完了するために間隔を待機しなくてもよい。
【００４１】
要素２５８は、バッチ処理が実施されると決定された場合（すなわち、要素２５６において）に実施される。一実装において、ノード１０２（１）は、未完了の書込みの全てに対する確認応答を受信する必要なく、多数のＩ／Ｏ書込みを実施することができる。例えば、複製されるデータ要素が１００ある場合、これらの１００のデータ要素は、同じ間隔ＩＤ（例えば、１００）を使用して書き込むことができる。一実施形態において、このようなバッチ処理されているＩ／Ｏ全てが同じ間隔の依存Ｉ／Ｏであるかもしれないため、２次ストレージの他のＩ／Ｏ書込みの前に処理される。管理モジュールもまた、ノードによって発行されているＩ／Ｏがバッチ処理されているＩ／Ｏと重複しないかどうかを確認することができる。
【００４２】
要素２６０において、同期複製モードで動作している場合、ノード１０２（１）がバッチ処理を実施しないと決定された場合、ノードは、次の間隔、及び２次ストレージからのリモート書込みの確認応答を待機する。ノードは、ローカルストレージからのローカル書込みの確認応答も待機することができる。一実施形態において、要素２６０は、方法２００の要素２０４に類似する。例えば、ノード１０２（１）は、間隔（ｍ＋１）のための間隔指示を受信する。ノード１０２（１）が次の間隔指示を受信し、ローカルストレージ１１２から及びリモートストレージ１１４から、任意の順序で確認応答を受信することができることに注意されたい。
【００４３】
要素２６０において、非同期複製モードで動作している場合、ノード１０２（１）がバッチ処理を実施しないと決定された場合、ノードは、次の間隔、及びローカルストレージからのローカル書込みの確認応答を待機する。一実施形態において、要素２６０は、方法２００の要素２０４に類似する。例えば、ノード１０２（１）は、間隔（ｍ＋１）のための間隔指示を受信する。ノード１０２（１）が次の間隔指示を受信し、ローカルストレージ１１２から任意の順序で確認応答を受信することができることに注意されたい。しかしながら、非同期モードで動作している場合、ノードは、２次ストレージからのリモート書込みの確認応答を待機しない。
【００４４】
要素２６２において、ノード１０２（１）は、ネットワーク及び／又はコーディネータノードエラーが存在するかどうかを決定する。例えば、ノード１０２（１）は、その前の間隔指示がノード１０２（１）によって受信されてから一定期間が経過した場合、このようなネットワーク及び／又はコーディネータノードエラーを決定することができる。要素２６４において、ノード１０２（１）は、このようなネットワーク／コーディネータノードエラーの処理を開始することができる。例えば、ノード１０２（１）は、別のノード（例えば、ノード１０２（２））が分散ストレージシステム１００のコーディネータノードになるプロセスを開始することができる。ネットワーク／コーディネータノードエラーが処理されると、方法２５０は要素２５６に戻る。
【００４５】
要素２６６において、ノード１０２（１）は、分散ネットワーク内の他のノードが次の間隔にあるかどうかを決定する。一実施形態において、ノード１０２（１）は、ノード１０２（１）が間隔（ｍ＋２）の間隔指示を受信した場合、ネットワーク内の他のノードが次の間隔（すなわち、ｍ＋１）に移動したと決定する。別の実施形態において、ノード１０２（１）は、ネットワーク内の他のノードが次の間隔（すなわち、間隔（ｍ＋１））に移動したことを示す間隔確認応答指示をコーディネータから受信した場合、ネットワーク内の他のノードが次の間隔（すなわち、間隔（ｍ＋１））に移動したと決定する。更に別の実施形態において、ノード１０２（１）は、ノード１０２（１）が次のサブ間隔指示を受信した場合、ネットワーク内の他のノードが次の間隔（すなわち、ｍ＋１）に移動したと決定する。
【００４６】
要素２６８において、ノードは、アプリケーションに対して、Ｉ／Ｏ書込みが完了したことを確認応答する。例えば、ノード１０２（１）の管理ノード１０８（１）は、アプリケーション１０６（１）に対して、要素２５４で開始されたＩ／Ｏ書込みが完了したことの確認応答を送信する。アプリケーション１０６（１）がこの確認応答を受信すると、アプリケーション１０６（１）は、要素２５４のＩ／Ｏ書込みに依存することができるＩ／Ｏ書込みを発行することができる。換言すれば、同期複製の場合、ノード１０２（１）は、要素２６０の条件が満たされ、他のノードが次の間隔に入るまで、Ｉ／Ｏ書込み（要素２５４で開始）が終了したことを確認応答しない。
【００４７】
図２Ｄは、一実施形態に従う、間隔制御複製のための方法２７５を図示する別の流れ図である。本開示を考慮すれば明らかであるように、この方法は、代替の実施形態を誘導するために、変更されてもよい。また、本実施形態における工程は順次示される。しかしながら、ある特定の工程が、図示されるのと異なる順に生じてもよく、ある特定の工程が同時に実施されてもよく、ある特定の工程が、他の工程と組み合わされてもよく、ある特定の工程が、別の実施形態で不在であってもよい。方法２７５は、図１に関連して記載される要素の変形を参照して説明する。方法２７５は、複製の種類を選択するために、分散ストレージシステム内のノードそれぞれによって実行することができる。
【００４８】
要素２７６において、一実施形態に従い、ノードは、複製の種類の選択肢を受信することができる。例えば、ノード又はコーディネータノードのうちの１つ以上は、この選択肢を受信することができる。この選択肢は、複製プロセスを開始する前に受信してもよく、複製プロセス中に受信してもよい。一実施形態において、分散システム内の全てのノードの管理モジュール（コーディネータノードを含む）は、同じ複製モードを使用する。したがって、どのような複製モードの変更もノード間で合意される。例えば、コーディネータノードは、他のノードの管理モジュールへ複製モードの変更を送信することができる。一実施形態において、コーディネータノードは、別の複製モードに切り替える前に、他のノードからの複製モード確認応答メッセージを待機することができる。一実施形態において、要素２７６は、複製を開始する前に実施される。別の実施形態において、要素２７６は、複製中に実施され、複製モードを動的に変更することができる（例えば、ユーザー入力及び／又は別のノード／モジュールからの入力による）。
【００４９】
要素２７８において、選択肢が同期複製を示すかどうかの決定が行われる。選択肢が同期複製を示す場合、ノードは同期モードで動作する（要素２８０）。選択肢が同期複製を示さない場合、要素２８２において、選択肢が非同期複製を示すかどうかの決定が行われる。選択肢が非同期複製を示す場合、ノードは非同期モードで動作する（要素２９０）。選択肢が非同期複製を示さない場合、ノードは周期モードで動作する（要素２８４）。
【００５０】
同期モードで動作している場合（要素２８０）、ノード（及び／又はコーディネータノード）は、このノードの測定評価を計算することができる（要素２８６）。要素２８８において、これらの測定評価に基づいて、非同期複製へ切り替えるかどうかの決定が行われる。一実施形態において、これらの測定評価は、２次ストレージが所定時間内にリモート書込みの確認応答を送信できるかどうかを含む。一実施形態において、これらの測定評価は、分散ストレージシステムのネットワーク統計、ノードの応答性、及び／又は２次ストレージの応答性を含む。決定が、非同期複製への切り替えが行われるべきであると示す場合、このノードは、このノードを非同期複製へ切り替えることができる（要素２９０）。例えば、２次ストレージのレイテンシが大き過ぎる場合、分散ストレージシステムは、同期複製モードではなく、非同期複製モードでより効率的に動作する。
【００５１】
非同期モードで動作している場合（要素２９０）、ノード（及び／又はコーディネータノード）は、このノードの測定評価を計算することができる（要素２９２）。要素２９４において、これらの測定評価、及び本来の同期モード（要素２７６）に基づいて、同期複製へ切り替えるかどうかの決定が行われる。一実施形態において、これらの測定評価は、２次ストレージが所定時間内にリモート書込みの確認応答を送信できるかどうかを含む。一実施形態において、これらの測定評価は、分散ストレージシステムのネットワーク統計、ノードの応答性、及び／又は２次ストレージの応答性を含む。例えば、測定評価は、未完了のリモート書込みの十分な数（例えば、全て）を２次ストレージへ書き込むことができることを示し、書き込まれている未解決のリモートＩ／Ｏ書込みの十分な数の閾値は、動的に決定することができる。決定が、同期複製への切り替えが行われるべきであると示す場合、このノードは、このノードを同期複製へ切り替えることができる（要素２８０）。例えば、測定評価を使用している決定が、このほうがもっと効率的であると示し、かつ本来の選択が同期モードであった場合、モードを同期に切り替えることができる。
【００５２】
図３は、一実施形態に従う、間隔制御複製におけるコーディネータノードの動作の方法を図示する流れ図である。本開示を考慮すれば明らかであるように、この方法は、代替の実施形態を誘導するために、変更されてもよい。また、本実施形態における工程は順次示される。しかしながら、ある特定の工程が、図示されるのと異なる順に生じてもよく、ある特定の工程が同時に実施されてもよく、ある特定の工程が、他の工程と組み合わされてもよく、ある特定の工程が、別の実施形態で不在であってもよい。方法３００は、図１に関連して記載される要素の変形を参照して説明する。図３は、同期、非同期、又は周期複製におけるコーディネータノードの動作を図示する。一実施形態において、コーディネータノードは、特に記載のない限り、これらの３つの複製モードにおいて実質的に類似して動作する。更に、一実施形態において、コーディネータモジュールと関連するアプリケーション（例えば、アプリケーション１０６（３））は、本明細書に記載の３つの複製モードのうちの１つを使用して複製されるＩ／Ｏ書込みを発行することができる。換言すれば、コーディネータノードは、コーディネータノードとして動作する上に、他のノードのうちの１つとして動作することができる。一実施形態において、２次サイトを含むより大型のストレージシステムの場合、コーディネータノードは、２次サイトの１つ以上のノード及び／又は２次サイトのピアコーディネータノードに対しても、間隔情報を送信することができる。
【００５３】
要素３０２において、コーディネータノードは、時間間隔に従って、間隔指示を送信する。コーディネータノード１０４は、管理モジュール１１０（１）を使用して、時間間隔を追跡することができる。例えば、コーディネータノード１０４は、ノード１０２（１）〜１０２（ｎ）に対して、第１の間隔中の時間間隔ｍを示す間隔指示を送信することができる。同様に、例えば、コーディネータノード１０４は、ノード１０２（１）〜１０２（ｎ）に対して、第２の間隔中の時間間隔（ｍ＋１）を示す間隔指示を送信することができる。
【００５４】
一実施形態において、分散ストレージシステムが周期複製モードで動作している場合、コーディネータノードは、間隔指示の一部（例えば、データフィールドの一部）として、又は別のメッセージにおいて、ノードに対して、それぞれの期間及び／又は期間完了の指示も送信することができる。例えば、コーディネータノードは、現在の期間を示す期間指示を送信することができる。コーディネータノードは、次の期間が開始したことを示す期間変更も送信することができる。
【００５５】
要素３０４において、コーディネータノードは、時間間隔が調整されるべきかどうかを決定する。このような決定は、時間間隔が大き過ぎる、又は小さ過ぎる場合に行うことができる。要素３０４の決定は動的にすることができ、すなわち、管理モジュール１１０（１）は、例えば、履歴データの解析に基づいて、時間間隔が短過ぎる（又は長過ぎる）ことを決定することができる。例えば、同じ間隔内にリモートＩ／Ｏが開始して完了した場合（例えば、リモートＩ／Ｏが、このリモートＩ／Ｏを開始したノードへ確認応答を返信する）、間隔が長過ぎる可能性がある。このような解析は統計を使用して実施されてもよく、管理モジュール１１０（１）は、十分なリモートＩ／Ｏ書込みが同じ間隔内に開始して完了したかどうかを決定する閾値を使用してもよい。例えば、このようなＩ／Ｏ書込みのうちの１％だけが同じ間隔内に開始し、完了している場合、管理モジュール１１０（１）は、間隔は調整する必要がないと決定することができる。一方、このようなＩ／Ｏ書込みのうちの９０％が同じ間隔内に開始し、完了している場合、管理モジュール１１０（１）は、間隔は調整する必要があると決定することができる。
【００５６】
要素３０６において、コーディネータノードは、時間間隔を調整する。例えば、管理モジュール１１０（１）が時間間隔が短過ぎると決定した場合、管理モジュール１１０（１）は、決定されたように、時間間隔をより長い間隔へ調整する。同様に、管理モジュール１１０（１）が時間間隔が長過ぎると決定した場合、管理モジュール１１０（１）は、決定されたように、時間間隔をより短い間隔へ調整する。
【００５７】
図４〜７は、間隔制御複製の多様な実施形態の一般的なタイミング図を図示する。図４〜７は、特に、図１を参照して説明した要素、並びに図２Ａ〜２Ｄ及び３に図示される流れ図の方法の変形を参照して説明する。ノード１は、ノード１０２（１）によって実装することができ、ノード２は、ノード１０２（２）によって実装することができる。図示の簡素化のために、両方のノードは、コーディネータノードからのメッセージを実質的に同時に処理することができ、そのために、新しい間隔を実質的に同時に開始することができると想定される。しかしながら、このようなメッセージを受信するノードの間には、わずかな、しかし有限の遅延及び／又はスキューが存在する場合がある。
【００５８】
図４Ａは、一実施形態に従い、間隔制御複製を実装する分散ストレージシステムの２つのノードによるＩ／Ｏ書込みの一般的なタイミング図４００である。コーディネータノード（例えば、コーディネータノード１０４）は、間隔１〜５の４０２（１）〜４０２（５）を示す間隔指示をノード１及び２に送信することができる。具体的には、間隔１は４０２（１）で開始し、４０２（２）で終了し、間隔２は４０２（２）で開始し、４０２（３）で終了する等となる。図４Ａは、同期、非同期、又は周期複製におけるノードの動作を図示する。
【００５９】
一実施形態において、間隔指示１を受信すると、ノード１及び２の両方は、間隔１が開始していた内部データ構造を（例えば、管理モジュールを使用して）更新することができる。ノード１は次いで、第１のＩ／Ｏ  ４０４（１）を開始することができる。書込みＩ／Ｏ  ４０４（１）がデータにアクセスする間、他のノードは、オーバーラップする、又は依存するデータに対してＩ／Ｏ書込みを実施できない。１つの間隔あたり１つのＩ／Ｏだけが示されるが、どちらのノードもそれぞれの間隔で何百もの独立したＩ／Ｏを実施している可能性がある。ノード１は、ノード１が、例えば、間隔２の４０４（２）が開始したことを示す、次の間隔の指示を受信すると、Ｉ／Ｏ  ４０４（１）を完了することができる。ノード２は、次の間隔の指示を受信すると、Ｉ／Ｏ書込み４０４（１）に依存する可能性があるＩ／Ｏ書込み４０６（１）を開始することができる。
【００６０】
ただし、ノード１は、第２の間隔内にＩ／Ｏ書込み４０４（１）を完了する。ノード２は、間隔３の間隔指示を受信した後、間隔３まで、そのデータ依存の可能性があるＩ／Ｏ書込み４０６（１）を完了しない。同様に、ノード１によるデータ依存の可能性があるＩ／Ｏ書込み４０４（２）は、第３の間隔まで開始されず、第４の間隔まで完了されない。ノードが間隔メッセージを処理する際のわずかな時間差を考慮するため、Ｉ／Ｏは、全てのノードが次の間隔指示を受信するまで発生しない。これは、ノード及び／又はコーディネータノード間の追加のメッセージを必要とする場合がある。
【００６１】
一実施形態において、図４Ｂに示されるように、間隔指示の受信は、その前の間隔が全てのノードによって受信されたという確認応答として考えられるかもしれない。図４Ｂは、一実施形態に従い、間隔制御複製を実装する分散ストレージシステムの２つのノードによるＩ／Ｏ書込みの一般的なタイミング図４５０である。コーディネータノード（例えば、コーディネータノード１０４）は、間隔１〜５の５０２（１）〜５０２（５）を示す間隔指示をノード１及び２に送信することができる。図４Ｂは、同期、非同期、又は周期複製におけるノードの動作を図示する。
【００６２】
図４Ｂに図示される実装において、ノード１の管理モジュールは、その時点で全てのノードが間隔「ｍ＋１」の受信を確認応答しているため、間隔「ｍ」で開始したあらゆるＩ／Ｏ書込みが間隔「ｍ＋２」で完了することを確認応答する。例えば、ノード１は、間隔１（すなわち、間隔ｍ）でＩ／Ｏ書込み４５４（１）を開始することができる。このＩ／Ｏ書込みは、ノード１が間隔３（すなわち、間隔（ｍ＋２））の間隔指示を受信するまで、確認応答されない（すなわち、ノード１の管理モジュールは、この書込みを開始したアプリケーションに対してこのＩ／Ｏ書込みを確認応答しない）。一実施形態において、ノードが「ｍ＋１」のような新しい間隔指示を受信すると、このノードは、他のノードがこの新しい間隔指示をまだ受信していない場合であっても、この新しい間隔指示を今後のＩ／Ｏ書込みのために使用する。
【００６３】
図５は、一実施形態に従い、分散ストレージシステムの２つのノードによるＩ／Ｏ書込みの一般的なタイミング図５００である。コーディネータノード（例えば、コーディネータノード１０４）は、間隔１〜５の５０２（１）〜５０２（５）を示す間隔指示をノード１及び２に送信することができる。図５は、遅延によってノード１及び２にＩ／Ｏ書込み問題がどのように発生するかを図示する。図５は、同期、非同期、又は周期複製におけるノードの動作を図示する。
【００６４】
一実施形態において、間隔指示１を受信すると、ノード１及び２の両方は、間隔１が開始していた内部データ構造を（例えば、管理モジュールを使用して）更新することができる。ノード１は次いで、第１のＩ／Ｏ  ５０４（１）を開始することができる。書込みＩ／Ｏ  ５０４（１）がデータにアクセスする間、他のノードは、同じデータへのＩ／Ｏ書込みを実施できない。ノード１は、ノード１が、例えば、間隔２の４０４（２）が開始したことを示す、次の間隔の指示を受信すると、Ｉ／Ｏ  ４０４（１）を完了することができる。ところが、ネットワーク又は遅延の問題がある場合、ノード２は、間隔２が開始したという間隔指示を受信しない。この結果、ノード２は、次いで、ノード１のＩ／Ｏ  ５０４（１）に依存するＩ／Ｏ  ５０６（１）を開始することができる。これは、例えば、Ｉ／Ｏ書込み５０６（１）がＩ／Ｏ  ５０４（１）に依存するにもかかわらず、両方が同じ間隔内に実施されると、問題となり得る。
【００６５】
図６は、一実施形態に従い、分散ストレージシステムの２つのノードによるＩ／Ｏ書込みの一般的なタイミング図６００である。コーディネータノード（例えば、コーディネータノード１０４）は、間隔１〜４の６０２（１）〜６０２（４）を示す間隔指示をノード１及び２へ送信することができる。図６は、Ｉ／Ｏ書込みとともに発生する可能性がある問題（図５に図示）を克服するために間隔制御複製をどのように使用することができるかの一実施形態を図示する。図６は、同期、非同期、又は周期複製におけるノードの動作を図示する。
【００６６】
一実施形態において、間隔指示１を受信すると、ノード１及び２の両方は、間隔１が開始していた（例えば、管理モジュールによって使用されていた）内部データ構造を更新することができる。ノード１は次いで、第１のＩ／Ｏ  ６０４（１）を開始することができる。書込みＩ／Ｏ  ６０４（１）がデータにアクセスする間、他のノードは、同じデータへのＩ／Ｏ書込みを実施できない。ノード１は、ノード１が、例えば、間隔２の６０４（２）が開始したことを示す、次の間隔の指示を受信すると、Ｉ／Ｏ  ６０４（１）を完了することができる。ところが、ネットワーク又は遅延の問題がある場合、ノード２は、間隔２が開始したという間隔指示を受信しない。遅延６０８は、ノード１がこのような指示を受信した後、第２の間隔６０２（２）の間隔指示を受信する時間を図示する。
【００６７】
一実施形態において、ノード１及び２の両方は、直近の間隔指示の受信を示す確認応答をコーディネータノードへ送信することができる。例えば、ノード１及び２の両方は、間隔１の６０２（１）の間隔指示の受信を示す間隔確認応答を送信することができる。間隔２の６０２（２）の間隔指示を受信すると、ノード１は、この間隔指示の受信を示す間隔確認応答を送信することができる。しかしながら、ノード２は、遅延６０８の後まで、この第２の間隔指示を受信しない（例えば、ネットワークの遅延又は他の問題に起因して）。この結果、ノード２は、遅延６０８の後まで、第２の間隔指示の受信の確認応答を送信しない。一実施形態において、コーディネータノードは、ノード２を含む残りのノードが、第２の間隔指示の受信を確認応答するときを示すために、追加の指示を送信してもよい。ノード１は、このような追加の指示を受信した後にＩ／Ｏ  ６０４（１）を完了し、Ｉ／Ｏ  ６０４（１）は余分な量６１０だけ遅延する。この結果、ノード２による依存のＩ／Ｏ書込み６０６（１）は、Ｉ／Ｏ書込み６０４（１）と同じ間隔に開始されない。更に、コーディネータノードは、次いで、ノード１及び２の両方が、例えば、間隔４の６０２（４）等、実質的に同時に次の間隔指示を受信するように、次の間隔指示の時刻を推移し、調整することができる。
【００６８】
図７は、一実施形態に従い、分散ストレージシステムの２つのノードによるＩ／Ｏ書込みの一般的なタイミング図７００である。コーディネータノード（例えば、コーディネータノード１０４）は、間隔１〜５の７０２（１）〜７０２（５）を示す間隔指示をノード１及び２へ送信することができる。図７は、ノード２が間隔指示を確認応答しない場合のＩ／Ｏ書込みの処理の一実施形態を図示する。例えば、ネットワーク／遅延の問題がある場合、ノード２は、間隔２が開始したという間隔指示を受信しない。ノード２は、ビジーであるため、第２の間隔指示の受信を確認応答できない可能性もある。この結果、コーディネータノードは、遅延７０８に対して、次の間隔指示を送信することを遅延することができる。図７は、同期複製におけるノードの動作を図示する。
【００６９】
遅延７０８の後、コーディネータノードは、分散システム内のノードへの間隔指示の送信を再開することができる。一実施形態において、コーディネータノードは、間隔指示の受信を確認応答したノード及び／又はノードを示す余分の指示メッセージをノードへ送信することができる（すなわち、延滞ノードは間隔指示の受信を確認応答しない）。別の実施形態において、コーディネータノードは、間隔指示の受信を確認応答したノード及び／又は延滞ノードを示す部分的間隔指示メッセージをノードへ送信することができる。ノード１は、遅延７１０の後にＩ／Ｏ書込み７０４（１）を完了することができるが、しかしながら、間隔は変更されてもよい。
【００７０】
一実施形態において、同期複製の場合、延滞ノードが２次ストレージへの書込みを開始しようとした場合、この時点では、遅延ノードからの任意のこのような進行中のＩ／Ｏ書込みのある間隔を正しく特定／関連付けることは可能ではない。この結果、このようなＩ／Ｏ書込みは、延滞ノードがコーディネータノードからの間隔指示の確認応答を再開するまで、２次ストレージに含まれない。延滞ノード（例えば、第２のノード）が間隔指示に応答しない期間、第２のノードは、１次及び／又は２次ストレージへＩ／Ｏ書込みを送信することと、これらのＩ／Ｏ書込みを第２のノードによって最後に知られている間隔と関連付けることとが可能である。
【００７１】
一実施形態において、第２のノードが、間隔通知への（例えば、新しい間隔への）応答を再開すると、コーディネータノードは、反応がなかった間隔範囲について、第２のノードに通知することができる。第２のノードは、次いで、コーディネータノードから受信された新しい間隔（例えば、間隔１００）に属するとして、あらゆる未完了及び進行中のＩ／Ｏ書込みを関連付けることができる。一実施形態において、これは、この新しい間隔に属するとして、１次及び／又は２次ストレージの書込みに完了されたＩ／Ｏ書込みを関連付けることを含むことができる。換言すれば、最後に確認応答された間隔から現在までに処理された書込みは、最後に受信された間隔に受信されたように処理される。これは、第２のノードは、コーディネータノードに新しい間隔指示を確認応答することなく、アプリケーションに確認応答していた可能性がないため、許容される。第２のノードは、Ｉ／Ｏ書込み７０６（１）も再開することができる。
【００７２】
図８〜１０は、一実施形態に従う、間隔制御複製中の多様なノードとストレージデバイスとの間の通信を図示する図である。図８〜１０は、特に、図１を参照して説明した要素、並びに図２Ａ〜２Ｄ及び３に図示される流れ図の方法の変形を参照して説明する。いくつかの実施形態において、ノードは、間隔指示の受信を確認応答するために、メッセージをコーディネータノードへ送信する。一実施形態において、ノードが、間隔（ｍ＋２）を示す間隔指示を受信すると、間隔（ｍ＋１）に有効であった（すなわち、延滞していなかった）ノードは全て、コーディネータノードに対して、その前の間隔の受信を確認応答していたと想定される。一実施形態において、間隔指示（例えば、データ１２２）は、有効なメンバーシップが変更されると（例えば、いくつかのノードが、間隔を確認応答しない場合、又はその前は延滞していたが現在は有効であるノード）必ず示すことができる。一実施形態において、間隔指示が他のノードに関する情報を含まない場合、これは、全ての有効なノードがその前の間隔を確認応答したことを示すことができる。図９〜１０は、特に記載のない限り、同期複製モードのノードの動作を図示する。図８〜１０は同じ単一の複製のノードの動作を図示することに注意されたい（例えば、全てのノードは同期複製モードで動作している）。
【００７３】
図８は、一実施形態に従い、間隔制御複製を実装する分散ストレージシステムの多様な要素間の通信のタイミング図８００である。要素８０２（１）は第１のノード、例えば、ノード１の１０２（１）を図示し、要素８０２（２）は第２のノード、例えば、ノード２の１０２（２）を図示し、要素８０４（１）はコーディネータノード、例えば、ノード１０４を図示し、要素８０６はローカルストレージ、例えば、１次ストレージ１１２を図示し、要素８０８はリモートストレージ、例えば、２次ストレージ１１４を図示する。要素８２６は、多様な通信が開始され得る時間内の点を図示する。図８は、同期、非同期、又は周期複製におけるノードの動作を図示する。
【００７４】
Ｔ１の８２６（１）の時点で、コーディネータノード８０４は、第１の間隔を示す間隔指示８１０（１）を第１のノード８０２（１）及び第２のノード８０２（２）へ送信する。同期及び非同期両方の複製モードにおいて、間隔指示８１０（１）を受信した後、第１の間隔の間に、第１のノード８０２（１）は第１のＩ／Ｏ書込み、すなわち、（ローカルストア８０６への）第１のローカル書込み８１２（１）及びリモートストア８０８への第１のリモート書込み８１４（１）を開始する。第１のリモート書込み８１４（１）は、第１の間隔を示す間隔ＩＤを含むことができる。周期複製モードにおいて、第１のノード８０２（１）は、代わりに第１のリモート書込みを集積することができる。全ての３つの複製モードにおいて、まだ第１の間隔中、ローカルストア８０６は、ローカル書込みの確認応答メッセージ８１６（１）（第１のローカル書込みの完了の確認応答）を第１のノード８０２（１）へ送信することができる。第１のノード８０２（１）は、第１の間隔指示８１０（１）の受信を確認応答するために、間隔確認応答メッセージ８１６（１）をコーディネータノード８０４へ送信する。同様に、第２のノード８０２（２）は、第１の間隔指示８１０（１）の受信を確認応答するために、間隔確認応答メッセージ８１８（１）をコーディネータノード８０４へ送信する。
【００７５】
Ｔ２の８２６（２）の時点で、コーディネータノード８０４は、第２の間隔を示す間隔指示８１０（２）を第１のノード８０２（１）及び第２のノード８０２（２）へ送信する。同期及び非同期両方の複製モードにおいて、間隔指示８１０（２）を受信した後、第２の間隔の間に、第２のノード８０２（２）は、ローカルストア８０６への第２のローカル書込み８１２（２）及びリモートストア８０８への第２のリモート書込み８１４（２）を開始する。周期複製モードにおいて、第２のノード８０２（２）は、代わりに第２のリモート書込みを集積することができる。全ての３つの複製モードにおいて、まだ第２の間隔中、ローカルストア８０６は、ローカル書込みの確認応答メッセージ８２０（２）（第２のローカル書込みの完了の確認応答）を第１のノード８０２（１）へ送信することができる。同期複製において、第１の間隔中、リモートストア８０８は、リモート書込みの確認応答メッセージ８２２（１）（第１のリモート書込みの完了の確認応答）を第１のノード８０２（１）へ送信することができる。非同期複製においても、リモートストア８０８は、リモート書込みの確認応答メッセージ８２２（１）を送信することができるが、しかしながら、第１のノード８０２（１）は、第１の書込みの完了をその関連アプリケーションを確認応答する前に、このリモート書込みの確認応答メッセージ８２２（１）の受信を待機しないことに注意されたい。
【００７６】
第２のＩ／Ｏ書込み（すなわち、第２のローカル書込み８１２（２）及び第２のリモート書込み８１４（２））は第１のＩ／Ｏ書込みに依存しないことに注意されたい。第２のリモート書込み８１４（２）は、第２の間隔を示す間隔ＩＤを含むことができる。第１のノード８０２（１）及び第２のノード８０２（２）の両方は、第２の間隔指示８１０（２）の受信を確認応答するために、それぞれ、確認応答メッセージ８１６（２）及び８１８（２）を、コーディネータノード８０４へ送信する。リモートストア８０８は、集積されたリモート書込みのバッチが書き込まれると（すなわち、期間の最後に）確認応答を送信することができる。周期複製において、書込みは、ある期間の間集積され（データ容量及び／又はログに）、その期間の終了後（すなわち、その前の期間のデータが送信された後）にリモートストレージへ送信される。
【００７７】
Ｔ３の８２６（３）の時点で、コーディネータノード８０４は、第３の間隔を示す間隔指示８１０（３）を第１のノード８０２（１）及び第２のノード８０２（２）へ送信する。同期複製で動作している場合、第３の間隔中に、第１のノード８０２（１）は、ローカル及びリモートストアから、第１のローカル及びリモートＩ／Ｏ書込みが完了したこと、全てのノードが第２の間隔にいることの確認応答を受信したことに基づいて、第１の書込みが完了したことを確認応答することができる。非同期及び周期複製で動作している場合、第３の間隔中に、第１のノード８０２（１）は、ローカルストアから、第１のローカルＩ／Ｏ書込みが完了したこと、全てのノードが第２の間隔にいることの確認応答を受信したことに基づいて、第１の書込みが完了したことを確認応答することができる。例えば、全ての３つの複製モードにおいて、第１のノードの管理ノードは、第１のノードのアプリケーションに対して、第１のＩ／Ｏ書込みが完了したことを確認応答することができる。このアプリケーションは、第３のＩ／Ｏ書込みを発行するようにリクエストしている可能性がある。しかしながら、第３のＩ／Ｏ書込みは第１のＩ／Ｏ書込みに依存するため（すなわち、これらの書込みによってアクセスされるデータにデータ依存性が存在する）、アプリケーションは、第１のＩ／Ｏ書込みが完了されたという確認応答を受信するまで、第３のＩ／Ｏ書込みを発行することを待機する。間隔指示８１０（３）を受信した後、第３の間隔中に、第１のノード８０２（１）は、（ローカルストア８０６への）第３のローカル書込み８１２（２）及びリモートストア８０８への第３のリモート書込み８１４（２）の両方を開始する。第３のリモート書込み８１４（３）は、第３の間隔を示す間隔ＩＤを含むことができる。
【００７８】
図９は、一実施形態に従い、間隔制御複製を実装する分散ストレージシステムの多様な要素間の通信のタイミング図９００である。要素９０２（１）は第１のノード、例えば、ノード１の１０２（９０２）を図示し、要素９０２（２）は第２のノード、例えば、ノード２の１０２（２）を図示し、要素９０４（１）はコーディネータノード、例えば、ノード１０４を図示し、要素９０６はローカルストレージ、例えば、１次ストレージ１１２を図示し、要素９０８はリモートストレージ、例えば、２次ストレージ１１４を図示する。要素９２６は、多様な通信が開始され得る時間内の点を図示する。図９は、余分な指示メッセージを使用する間隔制御複製の実施形態を図示する。ノード（例えば、ノード９０２（１）及び９０２（２））は、間隔指示の受信を確認応答するために、コーディネータノード９０４へメッセージを送信する。これに応答して、コーディネータノード９０４は、余分な指示メッセージをノード（例えば、ノード９０２（１）及び９０２（２））へ送信し、どのノードが間隔指示の受信を確認応答したかを示す。
【００７９】
Ｔ１の９２６（１）の時点で、コーディネータノード９０４は、第１の間隔を示す間隔指示９１０（１）を第１のノード９０２（１）及び第２のノード９０２（２）へ送信する。間隔指示９１０（１）を受信した後、第１の間隔の間に、第１のノード９０２（１）は第１のＩ／Ｏ書込み、すなわち、（ローカルストア９０６への）第１のローカル書込み９１２（１）及びリモートストア９０８への第１のリモート書込み９１４（１）を開始する。第１のリモート書込み９１４（１）は、第１の間隔を示す間隔ＩＤを含むことができる。第１のノード９０２（１）及び第２のノード９０２（２）もまた、それぞれ、間隔指示９１０（１）の受信を確認応答する間隔確認応答９１６（１）及び９１７（１）を、コーディネータノード９０４へ送信する。これに応答して、コーディネータノード９０４は、間隔確認応答指示メッセージ９１８（１）をノード９０２（１）及び９０２（２）へ送信する。間隔確認応答指示メッセージ９１８（１）は、どのノードが間隔指示の受信を確認応答したかを示すことができる。更に第１の間隔中、ローカルストア９０６は、第１のローカル書込みの完了を確認応答する、ローカル書込みの確認応答メッセージ９２０（１）を、第１のノード９０２（１）へ送信することができる。
【００８０】
Ｔ２の９２６（２）の時点で、コーディネータノード９０４は、第２の間隔を示す間隔指示９１０（２）を第１のノード９０２（１）及び第２のノード９０２（２）へ送信する。第１のノード９０２（１）は、第１のノード９０２（１）が第２の間隔指示９１０（２）を受信したことを確認応答する、間隔確認応答９１６（２）をコーディネータノードへ送信する。しかしながら、第２のノード９０２（２）は、遅延９３０の後まで、第２のノード９０２（２）が確認指示９１０（２）を受信したことを確認応答する間隔確認応答をコーディネータノード９０４へ送信しない。この結果、コーディネータノード９０４は、第２のノード９０２（２）が間隔確認応答９１７（２）をコーディネータノード９０４へ送信するまで、間隔確認応答指示メッセージ９１８（２）をノード９０２（１）及び９０２（２）へ送信することを（例えば、少なくとも遅延９３０の期間）待機する。この例において、第２のＩ／Ｏ書込みは第１のＩ／Ｏ書込みに依存するため（すなわち、これらの書込みによってアクセスされるデータにデータ依存性が存在する）、第２のノード９０２（２）は、コーディネータノード９０４から間隔確認応答指示メッセージ９１８（２）を受信するまで、第２のローカル書込み９１２（２）及び第２のリモート書込み９１４（２）を開始することを待機する。第２のリモート書込み９１４（２）は、第２の間隔を示す間隔ＩＤを含むことができる。
【００８１】
複数のＩ／Ｏ書込みが要素９１６（２）と９１７（２）との間に発生する可能性があるが、簡略性のため、図９には表示されないことに注意されたい。例えば、要素９１６（２）の後、第１のノード９０２（１）からのこれらのＩ／Ｏ書込みは第２の間隔を使用するが、第２のノード９０２（２）上では、これらのＩ／Ｏ書込みは、第１又は第２の間隔を使用する場合がある（第２のノードが９１０（２）を処理したかどうかに依存する）。一実施形態において、要素９１７（２）の後、第２のノード９０２（２）は、９１８（２）が受信される前であっても、第２の間隔を使用する。
【００８２】
更に第２の間隔中、ローカルストア９０６は、ローカル書込みの確認応答メッセージ９２０（２）を第２のノード９０２（２）へ送信することができる。第２の間隔中、リモートストア９０８は、リモート書込みの確認応答メッセージ９２４（１）（第１のリモート書込みの完了の確認応答）を第１のノード９０２（１）へ送信することができる。Ｔ３の９２６（３）の時点で、コーディネータノード９０４は、間隔指示９１０（３）をノード１及び２、９０２（１）及び９０２（２）へ送信する。
【００８３】
図１０は、一実施形態に従い、間隔制御複製を実装する分散ストレージシステムの多様な要素間の通信のタイミング図１０００である。要素１００２（１）は第１のノード、例えば、ノード１の１０２（１）を図示し、要素１００２（２）は第２のノード、例えば、ノード２の１０２（２）を図示し、要素１００４（１）はコーディネータノード、例えば、ノード１０４を図示し、要素１００６はローカルストレージ、例えば、１次ストレージ１１２を図示し、要素１００８はリモートストレージ、例えば、２次ストレージ１１４を図示する。要素１０２６は、多様な通信が開始され得る時間内の点を図示する。
【００８４】
図１０は、サブ間隔指示及び確認応答メッセージを使用する間隔制御複製の実施形態を図示する。この実装において、２つのメッセージ（間隔指示及び間隔確認応答指示）を送信する代わりに、間隔が２つに分割される。間隔の中間であろう点で、その前の間隔の間隔確認応答指示としても使用できる、新しい部分間隔指示メッセージを送信することができる。この手法を用いると、書込み完了が２つの間隔で待機する場合であっても、有効な経過期間は図９の実装と依然として同じである。
【００８５】
ノード（例えば、ノード１００２（１）及び１００２（２））は、間隔指示の受信を確認応答するために、コーディネータノード１００４へメッセージを送信する。これに応答して、コーディネータノード１００４は、どのノードがその前の間隔指示の受信を確認応答したかを示すために、部分間隔時点（例えば、本来の間隔時間の中間点）で、部分間隔指示メッセージをノードへ送信する。一実施形態において、ノード１００２（１）及び１００２（２）は、全ての間隔指示の受信を確認応答する。
【００８６】
Ｔ１の１０２６（１）の時点で、コーディネータノード１００４は、第１の間隔を示す間隔指示１０１０（１）を第１のノード１００２（１）及び第２のノード１００２（２）へ送信する。間隔指示１０１０（１）を受信した後、第１の間隔中に、第１のノード１００２（１）は、（ローカルストア１００６への）第１のローカル書込み（１０１２）（１）及びリモートストア１００８への第１のリモート書込み１０１４（１）の両方を開始する。第１のノード１００２（１）及び第２のノード１００２（２）もまた、それぞれ、間隔指示１０１０（１）の受信を確認応答する間隔確認応答１０１６（１）及び１０１７（１）を、コーディネータノード１００４へ送信する。更に第１の間隔中、ローカルストア１００６は、第１のローカル書込みの完了を確認応答する、ローカル書込みの確認応答メッセージ１０２０（１）を、第１のノード１００２（１）へ送信することができる。間隔確認応答１０１６（１）及び１０１７（１）の受信に応答して、コーディネータノード１００４は、使用されている間隔の実質的に約０．５であってもよい、Ｔ１．５の１０２６（２）の時点で、部分間隔確認応答指示メッセージ１０１０（２）を、ノード１００２（１）及び１００２（２）へ送信する。部分間隔確認応答指示メッセージはそれぞれ、間隔確認応答指示メッセージとしても機能し、どのノードが、その前の間隔指示の受信を確認応答したかを示すことができる。一実施形態において、第１のノード１００２（１）及び第２のノード１００２（２）もまた、それぞれ、間隔指示１０１０（２）の受信を確認応答する間隔確認応答１０１６（２）及び１０１７（２）を、コーディネータノード１００４へ送信する。
【００８７】
Ｔ２の１０２６（３）の時点で、コーディネータノード１００４は、第２の間隔を示す間隔指示１０１０（２）を第１のノード１００２（１）及び第２のノード１００２（２）へ送信する。第１のノード１００２（１）は、第１のノード１００２（１）が第２の間隔指示１０１０（３）を受信したことを確認応答する、間隔確認応答１０１６（３）をコーディネータノード１００４へ送信する。しかしながら、第２のノード１００２（２）は、遅延１０３０の後まで、第２のノード１００２（２）が確認指示１０１０（２）を受信したことを確認応答する間隔確認応答をコーディネータノード１００４へ送信しない。この結果、コーディネータノード１００４は、第２のノード１００２（２）が間隔確認応答１０１７（４）をコーディネータノード１００４へ送信するまで、次の間隔指示１０１８（４）をノード１００２（１）及び１００２（２）へ送信することを（例えば、少なくとも遅延１０３０の期間）待機する。
【００８８】
この例において、第２のＩ／Ｏ書込みが第１のＩ／Ｏ書込みに依存するため（すなわち、これらの書込みによってアクセスされるデータにデータ依存性が存在する）、第２のノード１００２（２）は、コーディネータノード１００４から次の間隔指示１０１８（４）を受信するまで、第２のローカル書込み１０１２（２）及び第２のリモート書込み１０１４（２）を開始することを待機する。第２のリモート書込み１０１４（２）は、第２の間隔を示す間隔ＩＤを含むことができる。更に第２の間隔中、ローカルストア１００６は、ローカル書込みの確認応答メッセージ１０２０（２）を第２のノード１００２（２）へ送信することができる。第２の間隔中、リモートストア１００８は、リモート書込みの確認応答メッセージ１０２４（１００２）（第１のリモート書込みの完了の確認応答）を第１のノード１００２（１）へ送信することができる。Ｔ３の１０２６（５）の時点で、コーディネータノード１００４は、間隔指示１０１０（５）を第１及び第２のノード１００２（１）及び１００２（２）へ送信する。一実施形態において、部分間隔は正規の間隔として取り扱うことができ、このため第１の間隔で開始したアプリケーションの書込みは、第３の間隔で確認応答される（これによって、全てのノードが第２の間隔に移動したことを確実にする）。部分間隔を正規の間隔として取り扱うことによって、間隔粒度を向上することができ、すなわち、余分なメッセージを追加することなく、間隔をより小さくすることができる。
【００８９】
図１１は、一実施形態に従う、間隔制御複製におけるコーディネータノードの動作の方法を図示する流れ図である。本開示を考慮すれば明らかであるように、この方法は、代替の実施形態を誘導するために、変更されてもよい。また、本実施形態における工程は順次示される。しかしながら、ある特定の工程が、図示されるのと異なる順に生じてもよく、ある特定の工程が同時に実施されてもよく、ある特定の工程が、他の工程と組み合わされてもよく、ある特定の工程が、別の実施形態で不在であってもよい。方法１１００は、図１に関連して記載される要素の変形を参照して説明する。方法１１００は、図３を参照して上記に説明した方法３００の変形である。図１１は、同期、非同期、又は周期複製におけるコーディネータノードの動作を図示する。一実施形態において、コーディネータノードは、特に記載のない限り、これらの３つの複製モードにおいて実質的に類似して動作する。
【００９０】
要素１１０２において、コーディネータノードは、時間間隔に従って間隔指示を送信する。コーディネータノード１０４は、管理モジュール１１０（１）を使用して、時間間隔を追跡することができる。例えば、管理モジュールは、ノード１０２（１）〜１０２（ｎ）に対して、第１の間隔中の時間間隔ｍを示す間隔指示を送信することができる。同様に、例えば、管理モジュールは、ノード１０２（１）〜１０２（ｎ）に対して、第２の間隔中の時間間隔（ｍ＋１）を示す間隔指示を送信することができる。
【００９１】
要素１１０４において、コーディネータノードは、実質的に全てのノードから（その前の確認指示を受信したことの）確認応答が受信されたかどうかを決定する。一実施形態において、コーディネータノードは、分散ストレージシステムの全てのノードから確認応答が受信されたかどうかを決定する。別の実施形態において、コーディネータノードは、分散ストレージシステム内の予測されたサブセットからのみ確認応答が受信されたかどうかを決定する。コーディネータノードは、どのノードが、確認応答で応答することを提供することが予測されるかを決定することができる。分散Ｉ／Ｏシステム内の予測されたノードの全て（すなわち、全てのノード、又はノードの予測されたサブセット）から確認応答が受信された場合、方法１１００は要素１１０５を実行する。
【００９２】
要素１１０５において、時間間隔チェックが実施される。一実施形態において、要素１１０５は、方法３００の要素３０４及び３０６を含む。このため、時間間隔調整が必要な場合、時間間隔が調整される。時間間隔調整が必要でない場合、時間間隔は調整されない。一実施形態において、延滞ノード（すなわち、確認応答を提供することが予測されるが、提供しないノード）は、要素１１０６に指定された遅延閾値以内にこのような確認応答で応答し、次いで、要素１１０５は、適宜（例えば、図６を参照して上記に説明した状況に応じて）時間間隔を推移及び／又は調整することができる。方法１１００は次いで、要素１１０２を実行する。
【００９３】
要素１１０６において、コーディネータノードが予測されたノードから確認応答を受信しない場合、コーディネータノードは、これらの確認応答を受信する際の遅延が閾値より長いかどうかを決定する。一実施形態において、この閾値の値は、方法１１００の実行前に決定することができる。別の実施形態において、この閾値の値は、例えば、方法１１００の実行中等、動的に決定することができる。例えば、この閾値の値は、ノード間の通信の速度を解析する管理モジュールによって計算することができる。遅延が閾値より長くない場合、方法１１００は要素１１０８を実施するので、コーディネータモジュールは、要素１１０４を再び実行する前に、ある特定の時間量の間待機する。次に、方法１１００は要素１１１４に進み、コーディネータノードが次の間隔を使用する次の間隔指示を送信する。
【００９４】
一実施形態において、要素１１０２及び／又は１１１４において、分散ストレージシステムが周期複製モードで動作している場合、コーディネータノードは、間隔指示の一部（例えば、データフィールドの一部）として、又は別のメッセージにおいて、それぞれの期間及び／又は期間完了の指示もノードへ送信することができる。例えば、コーディネータノードは、現在の期間を示す期間指示を送信することができる。コーディネータノードは、次の期間が開始したことを示す期間変更も送信することができる。
【００９５】
要素１１１６において、コーディネータノードは、延滞ノードを含む、実質的に全てのノードから、（要素１１１４のその前の間隔指示を受信したことの）確認応答が受信されたかどうかを決定する。一実施形態において、コーディネータノードは、分散ストレージシステムの全てのノードから確認応答が受信されたかどうかを決定する。別の実施形態において、コーディネータノードは、分散ストレージシステム内の予測されたサブセットからのみ確認応答が受信されたかどうかを決定する。コーディネータノードは、どのノードが、確認応答で応答することを提供することが予測されるかを決定することができる。分散Ｉ／Ｏシステム内の予測されたノードの全て（すなわち、全てのノード又はノードの予測されたサブセット、延滞ノードを含む）から確認応答が受信された場合、方法１１００は要素１１０２を実行する。分散Ｉ／Ｏシステム内の予測されたノードの全てから確認応答が受信されていない場合、方法１１００は要素１１１４を再び実行する。コーディネータノードは、延滞ノードがＩ／Ｏ書込みを処理することができることを示す情報を有する他のノードと通信することもできる。一実施形態において、いずれかの延滞ノードがその前のメッセージを受信していないかもしれないため、コーディネータノードは、これらの延滞ノードが特殊な処理を必要とすることを示す、新しいメッセージを延滞ノードに送信し続ける。
【００９６】
一実施形態において、延滞ノードが開始してコーディネータから間隔指示を受信すると、延滞ノードは、これらの間隔指示を確認応答する前に、是正措置をとる。この是正措置プロセスが長い場合、延滞ノードが間隔指示を確認応答できる前に、まだ２、３の間隔が存在する場合がある。延滞ノードが間隔指示を確認応答すると、このノードは、良好な状態のノードであると見なすことができる。別の実施形態において、延滞ノードは、コーディネータノードに対して、是正措置プロセス内にあることを確認応答することができ、バックグラウンドで是正措置処理を実行することができる。一実施形態において、図７を参照して上記で説明したように、この是正措置プロセスは、延滞ノードが、任意の未完了及び進行中Ｉ／Ｏ書込みを、コーディネータノードから受信された新しい間隔に属するとして関連付けることを含むことができる。
【００９７】
図１２は、図１で説明されるノード１０２（１）〜１０２（ｎ）等のノード１２００のブロック図である。ノード１２００は、アプリケーション１２０２と、管理モジュール１２０４と、ファイルシステム１２０６と、メモリ１２１０と、及び／又は１つ以上のプロセッサ１２１２とを含む。いくつかの実施形態において、これらの要素のうちの１つ以上は組み合わされてもよいことに注意されたい。例えば、メモリ１２１０は、アプリケーション１２０２と、管理モジュール１２０４と、及び／又はシステム１２０６とを含む場合がある。また、管理モジュール１２０４は、ソフトウェア及び／又はハードウェアモジュールとして実装されてもよいことにも注意されたい。更に、いくつかの実施形態において、ノード１２００の要素のうちの１つ以上は使用されなくてもよいことにも注意されたい。プロセッサ１２１２は、アプリケーション１２０２、管理モジュール１２０４、及び／又はファイルシステム１２０６のうちの１つ以上を実行することができる。管理モジュール１２０４は、図１の管理モジュール１０８（１）〜１０８（ｎ）を実装することができる。管理モジュール１２０４は、方法２００及び／又は２５０の少なくとも一部を実装することができる。
【００９８】
図１３は、図１で説明されるコーディネータノード１０４等のコーディネータノード１３００のブロック図である。コーディネータノード１３００は、アプリケーション１３０２と、管理モジュール１３０４と、ファイルシステム１３０６と、メモリ１３１０と、及び／又は１つ以上のプロセッサ１３１２とを含む。いくつかの実施形態において、これらの要素のうちの１つ以上は組み合わされてもよいことに注意されたい。例えば、メモリ１３１０は、アプリケーション１３０２、管理モジュール１３０４、及び／又はシステム１３０のうちの１つ以上を含む場合がある。また、管理モジュール１３０４は、ソフトウェア及び／又はハードウェアモジュールとして実装されてもよいことにも注意されたい。更に、いくつかの実施形態において、ノード１３００の要素のうちの１つ以上は使用されなくてもよいことにも注意されたい。プロセッサ１３１２は、アプリケーション１３０２、管理モジュール１３０４、及び／又はファイルシステム１３０６のうちの１つ以上を実行することができる。管理モジュール１３０４は、図１の管理モジュール１１０（１）を実装することができる。管理モジュール１３０４は、方法３００及び／又は１１００の少なくとも一部を実装することができる。
【００９９】
ネットワークアーキテクチャの要素は、異なるコンピュータシステム及びネットワークを使用して実装されてもよい。１つのこのようなネットワーク環境の一例は、図１４を参照して以下に記載する。図１４は、１つ以上のクライアントが様々なネットワーク接続を介してサーバへのアクセスが提供される、ネットワークアーキテクチャ１４００を図示する簡略化されたブロック図である。図１４に図示されるように、クライアント１４０２（１）〜（Ｎ）はネットワーク１４１０に連結され、このために、ネットワーク１４１０を介してサーバ１４０６（図１、１２、及び／又は１３のノードを実装するために使用することができる）にアクセスすることができる。代わりに、他のサーバ（図示せず）が、図１、１２、及び／又は１３のシステム（複数可）ノードを実装するために使用されてもよい。クライアントは、例えば、デスクトップコンピュータ、ラップトップコンピュータ、ワークステーション、サーバ、携帯電話、スマートフォン、ネットワークが使用可能な携帯情報端末（ＰＤＡ）等を使用して実装されてもよい。サーバ１４０６にアクセスするためにクライアント１４０２（１）〜（Ｎ）によって使用され得る、ネットワーク１４１０の一例はインターネットである。あるいは、サーバ１４０６へのアクセスは、イーサネット、ＩＥＥＥ  ８０２．１１ｘ、又はいくつかの他の通信プロトコルを利用してローカルエリアネットワーク（ＬＡＮ）によって提供することができる。理解されるように、サーバ１４０６は、それに直接連結されるクライアント（図示せず）によってアクセスすることができる。
【０１００】
図１４にも図示されるように、サーバ１４０６は、１次ストレージ１１２及び／又は２次ストレージ１１４等のデータ容量を含む、サーバストレージデバイス１４０８に連結される。サーバストレージデバイス１４０８は、単一のストレージデバイス又はストレージデバイスの集合体として実装することができる。サーバストレージデバイス１４０８はまた、ストレージエリアネットワークとして実装されてもよく、リモートストレージデバイスをサーバ（例えば、サーバ１４０６）に連結して、リモートストレージデバイスが、例えばサーバのＯＳにローカル接続のストレージデバイスとして見えるようにする。
【０１０１】
本開示を考慮すれば、当業者は、サーバストレージデバイス１４０８が内部又は外部ハードディスクドライブ（ＨＤＤ）、光ドライブ（例えば、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ等）、フラッシュメモリドライブ（例えば、ＵＳＢメモリスティック等）、テープドライブ等を含むがこれらに限定されない任意の種類のコンピュータで読み取り可能な記憶媒体によって実装できることを理解するであろう。あるいは、当業者は、本開示を考慮すれば、ネットワークアーキテクチャ１４００が、本ネットワークの考察に密接な関係がなく、かつ本明細書では更に説明されない、ルータ、ファイアウォール等の他の構成要素を含むことができることも理解するであろう。当業者であれば、他の構成が可能であることも理解するであろう。例えば、クライアント１４０２（１）〜（Ｎ）は、サーバ又はインターネットを使用することなくサーバストレージデバイス１４０８に直接連結することができ、サーバ１４０６は、クライアント及びサーバの両方を実装するために使用することができ、ネットワークアーキテクチャ１４００は、クライアント１４０２（１）〜（Ｎ）を使用することなく実装することができる等である。
【０１０２】
ネットワークアーキテクチャ１４００の例示的な実装として、サーバ１４０６は、サーバストレージデバイス１４０８に記憶されたデータに対して、クライアント１４０２（１）〜（Ｎ）によって生成されたデータへのリクエストをサービスする。ノード、エージェント、及び／又は管理モジュールの機能のいずれかは、図１、１２、及び／又は１３によって図示される様式において他のサーバのうちの１つを使用して実施することができる。
【０１０３】
図１５は、本開示を実装するために好適なコンピュータシステム１５１０のブロック図を図示する。コンピュータシステム１５１０は、特に、ノード及び／又はコーディネータノード等、図１のネットワークで接続されたシステム内の多様なコンピュータシステムの図示であってもよい。コンピュータシステム１５１０は、中央処理装置１５１４、システムメモリ１５１７（典型的には、ＲＡＭであるが、ＲＯＭ、フラッシュＲＡＭ等も含み得る）、入力／出力コントローラ１５１８、オーディオ出力インターフェース１５２２を介するスピーカシステム１５２０等の外部オーディオデバイス、ディスプレイアダプタ１５２６を介するディスプレイ画面１５２４等の外部デバイス、シリアルポート１５２８及び１５３０、キーボード１５３２（キーボードコントローラ１５３３とインターフェース接続される）、ストレージインターフェース１５３４、フロッピーディスク１５３８（「フロッピー」は登録商標、以下同じ）を受容するように動作可能であるフロッピーディスクドライブ１５３７、ファイバチャネルネットワーク１５９０と接続するように動作可能であるホスト・バス・アダプタ（ＨＢＡ）インターフェースカード１５３５Ａ、ＳＣＳＩバス１５３９に接続するように動作可能であるホスト・バス・アダプタ（ＨＢＡ）インターフェースカード１５３５Ｂ、並びに光ディスク１５４２を受容するように動作可能である光ディスクドライブ１５４０等、コンピュータシステム１５１０の主要なサブシステムを相互接続するバス１５１２を含む。また、マウス１５４６（又はシリアルポート１５２８を介してバス１５１２に連結される、他のポイントアンドクリックデバイス）、モデム１５４７（シリアルポート１５３０を介してバス１５１２に連結される）、及びネットワークインターフェース１５４８（バス１５１２に直接連結される）も含まれる。
【０１０４】
バス１５１２は、上述のように、中央処理装置１５１４とシステムメモリ１５１７との間のデータ通信を可能にし、システムメモリ１５１７は、リードオンリーメモリ（ＲＯＭ）又はフラッシュメモリ（いずれも図示せず）と、ランダムアクセスメモリ（ＲＡＭ）（図示せず）とを含んでもよい。ＲＡＭは概して、オペレーティングシステム及びアプリケーションプログラムがロードされるメインメモリである。ＲＯＭ又はフラッシュメモリは、他のコードと共に、周辺コンポーネンツとの相互作用等の基本的なハードウェアの動作を制御する、ベーシック・インプット／アウトプット・システム（ＢＩＯＳ）を含むことができる。コンピュータシステム１５１０に常駐するアプリケーションは概して、ハードディスクドライブ（例えば、固定ディスク１５４４）、光ドライブ（例えば、光ドライブ１５４０）、フロッピーディスクユニット１５３７、又は他の記憶媒体等のコンピュータで読み取り可能な媒体に記憶され、それを介してアクセスされる。加えて、アプリケーションは、ネットワークモデム１５４７又はインターフェース１５４８を介してアクセスされるときにアプリケーション及びデータ通信技術に従って変調される電子信号の形態であってもよい。
【０１０５】
ストレージインターフェース１５３４は、コンピュータシステム１５１０のその他のストレージインターフェースと同様に、固定ディスクドライブ１５４４等の、情報の記憶及び／又は検索のための標準的なコンピュータで読み取り可能な媒体に接続することができる。固定ディスクドライブ１５４４は、コンピュータシステム１５１０の一部であってもよく、独立していて、他のインターフェースシステムを介してアクセスされてもよい。モデム１５４７は、電話回線を介してリモートサーバへの、又はインターネット・サービス・プロバイダ（ＩＳＰ）経由でインターネットへの直接接続を提供してもよい。ネットワークインターフェース１５４８は、ＰＯＰ（ポイント・オブ・プレゼンス）を介したインターネットへのダイレクトネットワークリンクを介してリモートサーバへの直接接続を提供してもよい。ネットワークインターフェース１５４８は、デジタル携帯電話接続、セルラー・デジタル・パケット・データ（ＣＤＰＤ）接続、又はデジタル衛星データ接続等を含む無線技術を使用して、かかる接続を提供してもよい。
【０１０６】
他の多くのデバイス又はサブシステム（図示せず）も同様の方法で接続することができる（例えば、文書スキャナ、デジタルカメラ等）。逆に、図１５に示されるデバイスの全てが、本開示を実践するために存在する必要はない。デバイス及びサブシステムは、図１５に示されるものとは異なる手法で相互接続することができる。図１５に示されるようなコンピュータシステムの動作は、本明細書において詳細に検討しない。本開示を実装するために（図２Ａ〜２Ｄ、３、及び１１の方法を参照して上述したような）他のアプリケーション等に対するそれらの依存性に基づいてかかるアプリケーション上での動作を自動的に実施するためのコードは、システムメモリ１５１７、固定ディスク１５４４、光ディスク１５４２、又はフロッピーディスク１５３８のうちの１つ以上等のコンピュータで読み取り可能な記憶媒体に記憶することができる。メモリ１５２０はまた、プロセッサ１５１０による命令の実行中に一時変数又は他の中間情報を記憶するためにも使用することができる。コンピュータシステム１５１０上に提供されるオペレーティングシステムは、ＭＳ−ＤＯＳ（登録商標）、ＭＳ−ＷＩＮＤＯＷＳ（登録商標）、ＯＳ／２（登録商標）、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標）、又は別の既知のオペレーティングシステムであってもよい。
【０１０７】
更に、本明細書に記載される信号に関して、当業者であれば、信号が第１のブロックから第２のブロックに直接伝送されてもよく、又は信号がブロック間で変更（例えば、増幅、減衰、遅延、ラッチ、バッファ、反転、フィルタリング、又は別の方法で変更）されてもよいことを認識するであろう。上述される実施形態の信号は、あるブロックから次のブロックに伝送されると特徴付けられるが、本開示の他の実施形態は、信号の情報及び／又は機能面がブロック間で伝送される限り、かかる直接伝送された信号の代わりに変更された信号を含むことができる。ある程度、第２のブロックにおける信号入力は、関係する回路の物理的制約（例えば、いくらかの減衰及び遅延が必然的に存在する）により、第１のブロックからの第１の信号出力から得られた第２の信号として概念化されてもよい。したがって、本明細書で使用されるとき、第１の信号から得られた第２の信号は、回路制約によるか、又は第１の信号の情報及び／又は最終機能面を変更しない他の回路素子の通過によるものであろうとなかろうと、第１の信号又は第１の信号に対する何らかの変更を含む。
【０１０８】
いくつかの実施形態に関連して本発明について記載してきたが、本発明は、本明細書において説明される特定の形態に限定されことを意図するものではない。反対に、添付の請求項によって定義されるような本発明の範囲内に正当に含まれ得るような代替例、修正、及び等価物を包含するものとする。
【図１】
0006316211.tif 000002
【図２Ａ】
0006316211.tif 000003
【図２Ｂ】
0006316211.tif 000004
【図２Ｃ】
0006316211.tif 000005
【図２Ｄ】
0006316211.tif 000006
【図３】
0006316211.tif 000007
【図４】
0006316211.tif 000008
【図５】
0006316211.tif 000009
【図６】
0006316211.tif 000010
【図７】
0006316211.tif 000011
【図８】
0006316211.tif 000012
【図９】
0006316211.tif 000013
【図１０】
0006316211.tif 000014
【図１１】
0006316211.tif 000015
【図１２】
0006316211.tif 000016
【図１３】
0006316211.tif 000017
【図１４】
0006316211.tif 000018
【図１５】
0006316211.tif 000019