(57)【要約】書き込み順序忠実性（ＷＯＦ）は、地理的に離れたサイトにおける複数のアクセスノードが、「完全アクティブ」方式で、分散データシステムのデータを並行して読み取るおよび／または書き込む、完全アクティブ実装のために維持される。多様な地理的ロケーションにおけるホストの視点からは、同期しキャッシュコヒーレントなデータのビューが提供される。データ転送は非同期である。時間順序データイメージが作成され、維持されるので、ネットワークを介してまだ非同期転送されていないが、送信元ホストへの書き込み確認がなされたデータの損失を引き起こす部分システム障害後に、操作を再始動できる。時間順序非同期データ転送は、全てのノードからの寄与を反映する、変更のパイプラインとして実装される。またＷＯＦは、ネットワーク性能を改善し、帯域消費を低減する。
2009501382.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークにおける分散されたデータアクセスノードの組に書き込み順序忠実性を提供する方法であって、
オープンデルタの第１のキャッシュに書き込み要求を保存するステップであって、該第１のキャッシュは、該書き込み要求を受信する第１のノードに対応する、ステップと、
トリガーイベントに応答して、該オープンデルタを閉じるために、該データアクセスノードの組の各ノードにメッセージを送信するステップと、
該オープンデルタに対する書き込み要求を有する各ノードについて、該オープンデルタに対するあらゆる係属している書き込み要求を完了し、該オープンデルタを閉じるステップと、
ノード間で書き込み要求情報を交換し、それにより各ノードが、該クローズデルタに対する該書き込み要求情報の完全なコピーに関連付けられるステップと、
それぞれの完全なコピーを永続ストレージに書き込むステップと、
該クローズデルタのそれぞれの完全なコピーを、各ノードのバックエンドストレージに保存するステップと
を包含する、方法。
【請求項２】
フロントエンドボリュームを、書き込み順序忠実性（ＷＯＦ）グループにグループ化するステップであって、各ＷＯＦグループは、前記ネットワークを介して少なくとも１つのサイトを含む、ステップをさらに包含する、請求項１に記載の方法。
【請求項３】
各サイトは、前記ノードのうち少なくとも１つを含み、全てのノードは、並行して読み取りおよび書き込みを行うよう動作可能である、請求項２に記載の方法。
【請求項４】
各ＷＯＦグループに対する書き込みを、そのＷＯＦグループのための前記オープンデルタのキャッシュに保存する、請求項２に記載の方法。
【請求項５】
前記トリガーイベントを実行するステップをさらに包含する、請求項１に記載の方法。
【請求項６】
前記オープンデルタを閉じる時に、新しいデルタを開いて、新しい書き込みを受信するステップをさらに包含する、請求項１に記載の方法。
【請求項７】
地理的に離れたノードのリモートデータへのローカライズされたキャッシュアクセスを提供するステップをさらに包含する、請求項１に記載の方法。
【請求項８】
それぞれの完全なコピーを永続ストレージに書き込むステップは、メタデータ更新エントリの書き込み完了時であって、データ更新をデータベースに書き込むとき、該メタデータ更新エントリをリカバリーログに書き込むステップを含む、請求項１に記載の方法。
【請求項９】
オープンデルタにおいて、該デルタを閉じる前に、書き込み要求を再順序付けするステップをさらに包含する、請求項１に記載の方法。
【請求項１０】
前記オープンデルタを閉じることに対応する、データスナップショットをトリガーするステップをさらに包含する、請求項１に記載の方法。
【請求項１１】
設定された時間間隔、トランザクションの数に基づく時間間隔、デルタセットまたは部分デルタにおける変更／書き込みの数に基づく時間間隔、アプリケーショントリガー、操作者誘発トリガー、別のサブシステムにより誘発されたトリガー、エラー状態により誘発されたトリガー、およびそれらの組み合わせから成る群から選択される機構を用いて、前記トリガーイベントを生成するステップをさらに包含する、請求項１に記載の方法。
【請求項１２】
前記ネットワークは、ストレージエリアネットワーク（ＳＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、および大都市圏ネットワーク（ＭＡＮ）から成る群から選択される、請求項１に記載の方法。
【請求項１３】
メッセージを送信するステップは、前記データアクセスノードの組の各ノードに、該メッセージをブロードキャストするステップを含む、請求項１に記載の方法。
【請求項１４】
ネットワークにおける分散されたデータアクセスノードの組に書き込み順序忠実性を提供するためのシステムであって、
データを保存するためのストレージシステムと、
該ストレージシステムのデータにアクセスするよう構成された複数のアクセスノードとを備え、
該複数のアクセスノードの各ノードは、オープンデルタのキャッシュに書き込み要求を保存するよう動作可能であり、該キャッシュは、該書き込み要求を受信する該ノードに対応し、各ノードは、トリガーイベントに応答して、すべての書き込み要求を完了して該オープンデルタを閉じるために、該データストレージネットワークにおける該複数のアクセスノードにメッセージを送信するようさらに動作可能であり、各ノードは、書き込み要求情報を交換して、それにより各ノードが該クローズデルタに対する該書き込み要求情報の完全なコピーに関連付けられるようさらに動作可能であり、各ノードは、それぞれの完全なコピーを永続ストレージに保存し、それから該クローズデルタのそれぞれの永続コピーをそのノード用のバックエンドストレージに適用するようさらに動作可能である、システム。
【請求項１５】
前記ノードのうち少なくとも１つは、他のノードから地理的に遠隔にある、請求項１４に記載のシステム。
【請求項１６】
前記アクセスノードのうち少なくとも１つは、データをリモートロケーションにミラーするよう動作可能である、請求項１４に記載のシステム。
【請求項１７】
各サイトが前記ノードのうち少なくとも１つを含む複数のサイトをさらに備える、請求項１４に記載のシステム。
【請求項１８】
前記ストレージシステムは、１つのサイトだけが前記ストレージシステムに書き込んでいる時を判断し、それにより書き込み要求情報の交換が、複数サイトが該ストレージシステムに書き込みをする時まで保留されるようさらに動作可能である、請求項１７に記載のシステム。
【請求項１９】
前記ストレージシステムは、前記サイトのうち１つが該ストレージシステムにデータを書き込んでいない時を判断するようさらに動作可能であり、そのサイトが書き込む必要がある時まで、そのサイトをパッシブサイトとして設定するよう動作可能である、請求項１４に記載のシステム。
【請求項２０】
前記ストレージシステムは、メッセージを他のサイトにブロードキャストし、前記パッシブサイトの状況を示すようさらに動作可能である、請求項１９に記載のシステム。
【請求項２１】
前記ストレージシステムは、非同期および同期データ転送を実行するよう動作可能である、請求項１４に記載のシステム。
【請求項２２】
各ノードは、前記複数のアクセスノードの第１のサブセットと書き込み要求情報を交換することにより、書き込み要求情報を交換するよう動作可能であり、それによりノードの該第１のサブセットは、該複数のアクセスノードの第２のサブセットと該書き込み要求情報を交換する、請求項１４に記載のシステム。
【請求項２３】
各ノードは、複数のキャッシュへ書き込みを複製するよう動作可能である、請求項１４に記載のシステム。
【請求項２４】
前記データストレージシステムは３つのデルタを維持し、各デルタは、データがディスクに最終的にコミットされるポイントインタイム、データが該ディスクにコミットされる直前のポイントインタイム、および前記交換開始時のポイントインタイムのうちの１つを表わす、請求項１４に記載のシステム。
【請求項２５】
前記ストレージシステムは、時間とともにデルタをマージするようさらに動作可能である、請求項１４に記載のシステム。
【請求項２６】
前記ストレージシステムは、任意のポイントインタイムにおける任意のオープンデルタのスナップショットを作成するようさらに動作可能である、請求項１４に記載のシステム。
【請求項２７】
前記ストレージシステムは、設定された時間間隔、トランザクションの数に基づく時間間隔、デルタセットまたは部分デルタにおける書き込みの数に基づく時間間隔、アプリケーショントリガー、操作者誘発トリガー、別のサブシステムにより誘発されたトリガー、エラー状態により誘発されたトリガー、およびそれらの組み合わせから成る群から選択される機構を用いてデルタセットを閉じるようさらに動作可能である、請求項１４に記載のシステム。
【請求項２８】
前記ネットワークは、ストレージエリアネットワーク（ＳＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、および大都市圏ネットワーク（ＭＡＮ）から成る群から選択される、請求項１４に記載のシステム。
【請求項２９】
各ノードは、前記複数のアクセスノードに、前記データアクセスノードの組の各ノードにメッセージをブロードキャストすることにより、該メッセージを送信するようさらに動作可能である、請求項１４に記載のシステム。
【請求項３０】
ネットワークにおける分散されたデータアクセスノードの組に書き込み順序忠実性を提供するための、コンピュータ可読メディアに組み込まれたコンピュータプログラム製品であって、
オープンデルタの第１のキャッシュに書き込み要求を保存するためのコンピュータプログラムコードであって、該第１のキャッシュは、該書き込み要求を受信する第１のノードに対応する、コンピュータプログラムコードと、
トリガーイベントに応答して、該オープンデルタを閉じるために、該データアクセスノードの組の各ノードにメッセージを送信するためのコンピュータプログラムコードと、
該オープンデルタに対する書き込み要求を有する各ノードについて、該オープンデルタに対するあらゆる係属している書き込み要求を完了し、該オープンデルタを閉じるためのコンピュータプログラムコードと、
ノード間で書き込み要求情報を交換し、それにより各ノードが、該クローズデルタに対する該書き込み要求情報の完全なコピーに関連付けられるためのコンピュータプログラムコードと、
それぞれの完全なコピーを永続ストレージに書き込むためのコンピュータプログラムコードと、
該クローズデルタのそれぞれの完全なコピーを、各ノードのバックエンドストレージに保存するためのコンピュータプログラムコードと
を備える、コンピュータプログラム製品。
【請求項３１】
フロントエンドボリュームを書き込み順序忠実性（ＷＯＦ）グループにグループ化するコンピュータプログラムコードであって、各ＷＯＦグループは、前記ネットワークを介して少なくとも１つのサイトを含む、グループ化するためのコンピュータプログラムコードをさらに備える、請求項３０に記載のコンピュータプログラム製品。
【請求項３２】
各ＷＯＦグループに対する書き込みを、そのＷＯＦグループのための前記オープンデルタのキャッシュに保存するためのコンピュータプログラムコードをさらに備える、請求項３０に記載のコンピュータプログラム製品。
【請求項３３】
地理的に離れたノードのリモートデータへのローカライズされたキャッシュアクセスを提供するためのコンピュータプログラムコードをさらに備える、請求項３０に記載のコンピュータプログラム製品。
【請求項３４】
ネットワークにおける分散されたデータアクセスノードの組に書き込み順序忠実性を提供する方法であって、
複数の書き込み順序忠実性（ＷＯＦ）グループを提供するステップであって、各ＷＯＦグループは、該データアクセスノードのうち少なくとも１つを含む、ステップと、
書き込み要求を、該書き込み要求を受信する第１のＷＯＦグループにおける第１のノードに対応する第１のキャッシュに保存するステップと、
トリガーイベントに応答して、該第１のＷＯＦグループの該ノード間で書き込み要求情報を交換し、それにより各ノードが該書き込み要求情報の完全なコピーに関連付けられるステップと、
それぞれの完全なコピーを永続ストレージに書き込むステップと、
それぞれの完全なコピーを各ノードのバックエンドストレージに保存するステップと
を包含する、方法。
【請求項３５】
地理的に離れたノードのリモートデータへのローカライズされたキャッシュアクセスを提供するステップをさらに包含する、請求項３４に記載の方法。
【請求項３６】
それぞれの完全なコピーを永続ストレージに書き込むステップは、メタデータ更新エントリの書き込み完了時であって、データ更新をデータベースに書き込むとき、前記メタデータ更新エントリをリカバリーログに書き込むステップを含む、請求項３４に記載の方法。
【請求項３７】
前記第１のＷＯＦグループに対する前記キャッシュされた書き込み要求の状態に対応するデータスナップショットをトリガーするステップをさらに包含する、請求項３４に記載の方法。
【請求項３８】
ネットワークにおける分散されたデータアクセスノードの組に書き込み順序忠実性を提供する方法であって、
複数の書き込み順序忠実性（ＷＯＦ）グループを提供するステップであって、各ＷＯＦグループは、該データアクセスノードのうち少なくとも１つを含む、ステップと、
該複数のＷＯＦグループのうちの１つに対応するキャッシュに書き込み要求を保存するステップであって、各ＷＯＦグループはキャッシュに関連付けられ、該ＷＯＦグループの少なくとも１つのノードへのアクセスを有する複数の要求ライタからの書き込み要求を受信するよう動作可能である、ステップと、
ＷＯＦグループに対するトリガーイベントに応答して、該ＷＯＦグループの該ノード間で書き込み要求情報を交換し、それにより各ノードが該書き込み要求情報の完全なコピーに関連付けられる、ステップと、
それぞれの完全なコピーを永続ストレージに保存するステップと
を包含する、方法。
【請求項３９】
ネットワークにおける分散されたデータアクセスノードの組に書き込み順序忠実性を提供するための、コンピュータ可読メディアに組み込まれたコンピュータプログラム製品であって、
複数の書き込み順序忠実性（ＷＯＦ）グループを提供するコンピュータプログラムコードであって、各ＷＯＦグループは、該データアクセスノードのうち少なくとも１つを含む、コンピュータプログラムコードと、
該複数のＷＯＦグループのうちの１つに対応するキャッシュに書き込み要求を保存するコンピュータプログラムコードであって、各ＷＯＦグループはキャッシュに関連付けられ、該ＷＯＦグループの少なくとも１つのノードへのアクセスを有する複数の要求ライタからの書き込み要求を受信するよう動作可能である、コンピュータプログラムコードと、
ＷＯＦグループに対するトリガーイベントに応答して、該ＷＯＦグループの該ノード間で書き込み要求情報を交換し、それにより各ノードが該書き込み要求情報の完全なコピーに関連付けられる、コンピュータプログラムコードと、
それぞれの完全なコピーを永続ストレージに保存するコンピュータプログラムコードと
を備える、コンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の引用）
本出願は、非仮特許出願であり、米国仮特許出願第６０／６９９，９３５号（２００５年７月１４日出願、代理人事件番号：０１９４１７−００８７００ＵＳ）に対する優先権を主張し、該出願の全内容が、本明細書における全ての目的のために参照により引用される。
【０００２】
（著作権の通知）
本特許文書の開示の一部は、著作権保護の対象となる要素を含む。著作権所有者は、米国特許商標庁の特許ファイルまたは記録に表示される特許文書または特許開示のうちのいずれか１つによる複製に異論はないが、それ以外は、全ての著作権のいかなる権利も保有する。
【０００３】
（発明の背景）
本発明は、障害あるいはその他のデータ損失または破壊の可能性がある原因が生じた後に、データストレージシステムの内容の回復を提供するためのシステムと方法に関し、より具体的には、分散データストレージネットワークを介して、複数ロケーションで並行して操作しているデータライタを有するストレージシステムに、書き込み順序忠実性を提供するためのシステムと方法に関する。
【背景技術】
【０００４】
現在のストレージネットワークでは、またネットワークによって相互接続される地理的に離れたアクセスノードとストレージリソースを含む特定のストレージネットワークでは、書き込みが同期的に複製あるいは送信されなければならない場合、ノード間の距離が増加すると書き込み性能は大幅に妨げられる。さらに、必要とされるロケーション間の帯域幅を最小限に抑えることは、非常に望ましい。従って、データを非同期的に送信する方法は、データがリモートサイトのノードに送信される前に、書き込みが確認される場合に使用される。
【０００５】
ホスト装置により要求されたデータブロックへのアクセス速度を向上するためにも、データアクセスがローカライズされていることも望ましい。アクセスノードでブロックをキャッシュすることにより、ローカライズが提供されるが、キャッシュされたデータは、同じデータをキャッシュしているかもしれない別のアクセスノードでの修正に対して、コヒーレントを維持されなければならない。
【０００６】
さらに、かかる複雑なストレージアプリケーションは、その支持ストレージシステム、ローカルストレージネットワーク、ノードを相互接続しているネットワーク、およびアクセスノードの障害に耐える必要がある。障害が発生した場合、非同期データ送信は、障害サイトで保持されたデータの損失の可能性を示す。整合データイメージは、アプリケーションの視点から、残存するストレージ内容から構築される必要がある。アプリケーションは、どの書き込みあるいはデータの断片が、ストレージシステム障害を乗り切ったストレージシステムに対して書き込まれているかについて何らかの想定をしなければならないが、これは具体的には、所定のブロックへの書き込みにより修正が失われた場合、そのボリュームにおけるブロックあるいはブロックの関連するボリュームへの全ての後続する書き込みも失われるなどの、書き込みの順序付けが維持されているストレージシステムによって完了したと確認された全ての書き込みに対する。
【０００７】
ここで使用される書き込み順序忠実性（「ＷＯＦ」）とは、一群の関連するプロパティを指すが、それぞれのプロパティはある種の障害からの回復後にストレージシステムの内容を記述する。つまり、ストレージシステムが障害から回復した後に、アプリケーションがストレージシステムの内容について想定し得るプロパティであるということである。書き込み順序忠実性（ＷＯＦ）は、障害からの回復後、残存データに整合性があるという保証をもたらす。ファイルシステムまたはデータベースなどの複雑なアプリケーションは、この整合性プロパティに依存して、ストレージシステムの障害から回復する。それ自体の障害またはバックエンドストレージの障害から回復するために明示的に書き込まれていない、より単純なアプリケーションであっても、これらの障害後保証の恩恵を受けるはずである。
【０００８】
厳密な意味でのＷＯＦを実装するとき、アプリケーションはそのアプリケーションをサポートするストレージシステムへの書き込み｛Ｗｉ｜ｉ≧ｌ｝のストリームを生成する。基礎となるストレージシステムは、ストレージシステムの任意の障害後、回復時のストレージシステムの状態が、アプリケーションからの書き込みシーケンスの接頭部の一部を反映する場合、厳密な書き込み順序忠実性を示す。言い換えると、全ての書き込み｛Ｗｊ｜ｊ≦ｉ｝がストレージにコミットされ、どの書き込み｛Ｗｊ｜ｊ＞ｉ｝もストレージにコミットされていないような、あるｉ≧０が存在する。
【０００９】
厳密なＷＯＦは、書き込みが完全に順序付けられることを想定するが、これは単一コントローラあるいは共有メモリを通して通信する密結合のストレージコントローラの組の場合には簡単である。しかし、書き込みにかかる完全な順序を生成するためのコストは、たとえサイト内であっても、メッセージを経由して通信するコントローラの場合には多大なものとなる。順序付けのコストは、コントローラ間の待ち時間がたとえ数ミリ秒に達する場合でも、許容しがたいものとなる。
【００１０】
従来、「アクティブ−パッシブ」アプローチは、１つのみのライタまたはホストプロセッサが、ブロックの所定のボリュームに対する読み取り−書き込みアクセスを有し、他のプロセッサは、読み取りアクセスのみを有するような、サイト間でのデータの非同期送信のために使われる。ブロックの所定のボリュームに対する読み取りおよび書き込みが任意のノードからランダムにおこなえる、「完全アクティブ」な環境は、非常に望ましいが、ＷＯＦへのアプローチ、およびシステムの全アクセスノードでのキャッシングとの相互作用の方法の変更が必要とされる。
【発明の開示】
【課題を解決するための手段】
【００１１】
（発明の概要）
本発明による実施例は、一般にストレージコントローラと称されるストレージアクセスノードと、ストレージシステムとがネットワークにより相互接続される分散ストレージシステムに、書き込み順序忠実性（ＷＯＦ）を提供する。明らかに、ノード間の通信を可能とするあらゆるネットワークを使用することができる。さまざまな実施例は、任意の所定データボリュームに対する書き込みおよび／または読み取りが、システムの任意のノードから開始されてもよい、完全アクティブ操作を可能とするが、同様のシステムは、従来のアクティブ−パッシブモードでも使用できることは明らかである。
【００１２】
ＷＯＦは、いくつかの態様で、キャッシュコヒーレンシ層を使用するさまざまなサイトおよび／またはノードにわたり分散あるいはフラグメント化されたデルタセットを使用することにより獲得される。さまざまな実施例は、分散キャッシュコヒーレンシを用いて、任意の所定のノードへの最新の書き込みが、サイトによる後続する読み取りで即座に反映されることを確実にするために、許容しがたい動作コストを伴わずに、完全アクティブサイトにＷＯＦを提供し、従ってコヒーレントなアプリケーションビューを提供する。これは分散ノードにわたって分散された任意の所定のデルタセットに書き込まれたデータブロックがコヒーレントであり、対応する部分デルタがシステムのさまざまなノードに格納された状態で、最新の書き込みを反映していることも保証できる。
【００１３】
一実施例において、データの１つ以上のホスト可視ボリュームは、ＷＯＦグループとして管理される。複数のデータボリュームがＷＯＦグループを構成していても、ＷＯＦは、全ブロックが単一のボリューム内にあるかのように、ＷＯＦグループ内の全データボリュームからの全ブロックに対して保証される。
【００１４】
一実施例において、新しく書き込まれたブロックイメージを収集するためにデルタセットの多段パイプラインを使用して、ノード間でブロックイメージを交換し、ブロックイメージをバックエンドストレージにコミットする。システム全体のバリア機構は、デルタセットのパイプラインが、システムの全てのノードで同時に進行することを保証する。明らかに、バリアは、全てのノードが所定のＷＯＦグループの管理に参加しているわけではない場合、システム全体のものである必要はない。ＷＯＦグループを構成する複数のデータボリュームのいずれかへの新しい書き込みは、そのＷＯＦグループのための「オープンデルタ」のキャッシュに保存される。何らかのトリガーまたはその他のイベント時、現在のオープンデルタは、閉じられるべきである。オープンデルタを閉じるためのメッセージは、そのＷＯＦグループにブロードキャストされ、それによりあらゆる未完了の書き込みを完了することができ、デルタを閉じることができる。新しい書き込みを受信するために、新しいデルタが開かれる。異なるＷＯＦグループで固有フラグメントとして存在できる最新のクローズデルタは、「交換段階」を経て、それにより各サイトは、クローズデルタの完全なコピーを獲得することができる。全ての修正されたブロックがノード間で交換され、次のバリアが発生して、パイプラインの次の進行の境界を定めたあと、完全なクローズデルタは「コミット段階」に入り、安定したストレージに書き込むことにより永続とすることができる。
【００１５】
本発明のこれらまたはその他の実施例、およびその利益と機能は、以下の文章および添付の図と併せて、より詳細に説明される。
【発明を実施するための最良の形態】
【００１６】
本発明によるさまざまな実施例が図面と関連して説明される。
【００１７】
（発明の詳細な説明）
さまざまな実施例によるシステムと方法は、通常単一のライタが、ネットワークを介してパッシブサイトにデータをプッシュする既存のアクティブ／パッシブ実装とは対照的に、複数サイトのそれぞれが、書き込み順序忠実性（ＷＯＦ）を維持しつつ、並行してデータを読み取るおよび／または書き込むことができる、さまざまな完全アクティブ実装を提供することにより、既存のデータストレージシステムにおける上述およびその他の欠陥を克服する。これらおよびその他の目的は、書き込み順序忠実性への改善されたデルタセットアプローチを、分散キャッシュコヒーレンシを提供するためのアプローチと組み合わせることにより、一態様において達成することができる。
【００１８】
一態様において、データの時間順序イメージが作成されて維持されるので、ストレージシステム障害のあと、データのビューに不整合な破損したファイルシステム、データベース、またはその他のアプリケーションを有さずに、操作が再始動できる。通常、既存のシステムは、データを、当技術分野でデータ転送の基本単位として知られるブロックで送信し、それらのブロックの順序を保持しなければならない。これは著しい数の短いトランザクションを生成し、待ち時間の増加に伴って、ネットワークおよび／またはシステム性能の低下を引き起こす可能性がある。トランザクションの数を減らす１つの方法は、ブロックをデルタまたはデルタセットにグループ化することである。デルタセットを用いることは、ネットワークを介してのデータ転送の粒度を大きくし、従ってネットワーク転送の効率を上げ、またデルタセットによって捕捉された時間間隔内で複数回書き込まれた個々のブロックの複数の転送を排除し、それにより個々のブロックが何度も書き込まれた場合、そのブロックは、デルタを用いて１度だけ書き込まれる。デルタ間の境界は、データの書き込み順序整合性イメージを提供する。
【００１９】
デルタセットは、例えば２００４年１１月２３日発行の米国特許第６，８２３，３３６号に記載されているが、これは参照により本書に組み込まれる。デルタとリモートデータをミラーする方法のその他の記述は、例えば２００６年５月３０日発行の米国特許第７，０５５，０５９号、およびＭｉｎｗｅｎ  Ｊｉらによる、「Ｓｅｎｅｃａ：  ｒｅｍｏｔｅ  ｍｉｒｒｏｒｉｎｇ  ｄｏｎｅ  ｗｒｉｔｅ」（ＵＳＥＮＩＸ  Ｔｅｃｈｎｉｃａｌ  Ｃｏｎｆｅｒｅｎｃｅ梗概集２５３〜２５６ページ、２００３年６月）に記載されているが、これらそれぞれは参照により本書に組み込まれる。
【００２０】
本発明以前は、デルタセットベースのＷＯＦ実装は、アクティブ−パッシブデータアクセスのみをサポートしていた。このシナリオでは、ＷＯＦの実装は、「アクティブ」サイトが、ＷＯＦイメージ間の移行を完全に制御することができるため、かなり比較的単純である。ＷＯＦの単純なアクティブ−パッシブ実装は、アクティブおよびパッシブサイトにおける２つの部分デルタそれぞれに割り振られたメモリ領域を有する２つのデルタセットのみの維持を伴う。デルタイメージを進行させるために、アクティブノードで決定がなされたあと、新しい書き込みは単純に代替バッファに受け入れられる。パッシブサイトにメッセージが送られ、切り替えを指示し、新しくクローズされたデルタからのデータを転送する。パッシブサイトへのデータの「プッシュ」が完了すると、両サイトは交換されたばかりのデータをディスクにコミットすることができる。これを完了すると、アクティブサイトは、デルタセットバッファ間を再びトグルして、現在のデルタを閉じることができる。従来のデルタセットベースのＷＯＦ実装への機能拡張は、通常交代するバッファの組として維持される、より多くのデルタセットを維持することを含み、閉じられたバッファの交換が、短期のネットワーク帯域幅の飽和のせいで、遅行することを許す。デルタセットの基本使用のさらなる詳細は、参照により組み込まれる米国特許第６，８２３，３３６号に記載されるが、ここではさらなる詳細は説明しない。
【００２１】
潜在的に、共通データボリュームに書き込む複数サイトに、複数ノードの可能性を持ち込むには、より高度なアプローチが必要となる。一実施例において、分散キャッシュコヒーレンシ機構は、２００５年７月７日出願の米国特許出願第１１／１７７，９２４号、名称「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｐｒｏｖｉｄｉｎｇ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃａｃｈｅ  Ｃｏｈｅｒｅｎｃｅ」、および２００４年７月７日出願の仮出願第６０／５８６，３６４号で教示されるものなどであるが、これらは全て参照により本明細書組み込まれる。これらの方法は、全てのノードからの読み取り／書き込みアクセスの可能性を有する、ローカルとネットワークとに分離された複数のノードに維持されるキャッシュが、コヒーレントに保たれる機構を提供する。つまり、全ホストが単一のディスクドライブにアクセスしているシステムとして、データイメージの分配の順序を提供する。デルタセットを備える分散キャッシュコヒーレンシの使用は、実際のデータの動きが非同期であっても、データの同期イメージを可能にする。データの動きは、地理的全体の書き込み順序忠実性を維持し、それによりシステムは、いずれかの整合性のあるポイントインタイムで再始動できる。
【００２２】
一態様において、ディレクトリマネージャモジュール（「ＤＭＧ」）を用いて、分散されたデータアクセスノードの組全体に、共有データのためのキャッシュコヒーレンシ機構を提供することができる。共有データボリュームからのデータをキャッシュするために用いられるノードの組は、共有グループと呼ばれる。一般的に、ＤＭＧモジュールは、ノードのプロセッサまたはその他のインテリジェンスモジュール（例えばＡＳＩＣ）において実行するソフトウェアを含む。ＤＭＧモジュールは、単一のノードに実装され得、または複数の相互通信ノードにわたって分散され得る。一部の態様では、アクセスノードは、ストレージエリアネットワーク（ＳＡＮ）などのストレージネットワークに通信可能なように結合された、コントローラデバイスまたはノードとして具現化され、ストレージネットワークに保存されたデータへのアクセスを可能にする。しかし、アクセスノードを、インテリジェントファブリックスイッチまたはハブアダプタなどのその他のネットワークデバイスとして具現化することもできることは明らかであろう。さらに、あらゆるネットワークノードは、ＤＭＧの機能性を有するアクセスノードとして動作するよう構成できる（例えばＤＭＧは、ネットワーク接続を有するデスクトップコンピュータで稼働することができる）。米国特許第６，１４８，４１４号（参照により本書に組み込まれる）は、本発明の態様の実施が特に有用な、コントローラデバイスおよびノードを開示している。
【００２３】
本発明の一実施例について、図１は、複数のアクセスノード装置１０４（ａ）〜１０４（Ｎ）に通信可能なように結合された複数のネットワーククライアント１０２（ａ）〜１０２（Ｎ）を含む、基本ネットワーク構成１００を示している。各アクセスノード装置は、マイクロプロセッサまたはその他のインテリジェンスモジュール、キャッシュ１０８（例えばＲＡＭキャッシュ）および／またはその他のローカルストレージ、通信ポート（図示しない）、およびＤＭＧモジュール１１０のインスタンスなどのプロセッサ構成要素１０６を含む。全般的に、「Ｎ」は、ここで複数存在することを示すために使用されるので、１つの構成要素に言及するときの数「Ｎ」は、別の構成要素の数「Ｎ」と必ずしも等しくなくてもよい。各クライアント１０２は、速度およびその他の理由で、ローカルネットワーク接続１１２上でアクセスノード１０４のうち１つ以上に通信可能なように結合することができ、あるいは特定のアプリケーションおよび地理的ロケーションに対する必要に応じて、多数の接続体系のうちのいずれかにおいてノード１０４に通信可能なように結合することができるが、これには例えば、直接配線またはワイヤレス接続、インターネット接続、あらゆるローカルエリアネットワーク（ＬＡＮ）型接続、あらゆる大都市圏ネットワーク（ＭＡＮ）接続、あらゆる広域ネットワーク（ＷＡＮ）型接続、ＶＬＡＮ、あらゆる独自ネットワーク接続などが含まれる。また各ノード１０４は、通常１つ以上の別のノードを含むか、あるいはそれに通信可能なように結合され、ストレージエリアネットワーク（ＳＡＮ）、ＬＡＮ、ＷＡＮ、ＭＡＮ、Ｉｎｆｉｎｉｂａｎｄなどの高速ネットワークなどの１つ以上のネットワーク１１６上で、それぞれ１つ以上のディスクドライブを含む１つ以上のストレージリソース１１４に、通信可能なように結合される。一態様において、ノード１０４が、ローカルネットワーク接続上で１つ以上のストレージリソース１１４に結合されることが好ましい。ノードは、お互いに物理的に近接に位置してよく、あるいは少なくとも１つが他のノードから遠隔（例えば地理的に遠隔）に位置してもよい。アクセスノードは、ネットワーク１１６上および／またはＰＣＩバスまたはバックボーンまたはＦｉｂｒｅチャネルネットワーク上、あるいはクライアント装置１０２がアクセスノード１０４と通信するために使用しているのと同じネットワーク１１２上など、その他の通信ネットワークまたはメディア上で、他のノードと相互通信することもできる。
【００２４】
分散キャッシュコヒーレンシは、リモートデータへのローカライズされた（キャッシュされた）アクセスを可能にすることにより、地理的に離れたアクセスノード間の帯域幅要件を低減するのに役立つ。データアクセスは一般に、データがローカルにキャッシュできない限り、ローカライズすることができず、さらにキャッシュされたデータをリモートアクセスノードでの修正に対してコヒーレントに保てない限り、データをローカルにキャッシュすることは安全でない。ＤＭＧの実施例は、キャッシュコヒーレンシの正確性要件を満たすことができ、また実用的で有益なローカライズされたキャッシュアクセスの作成のためのオーバーヘッドを十分低く抑えることができる。図１に記載される実施例は、単一のＤＭＧディレクトリ１１０を示しているが、上記特許において教示される分散キャッシュコヒーレンシのための方法は、ピアツーピアベースでコヒーレンシを管理し、また多数のノードおよびノード間の大きい距離に拡張可能である。分散キャッシュコヒーレンシは、デルタセットの使用と組み合わせて、書き込み順序忠実性（ＷＯＦ）を提供することができる。
【００２５】
一実施例について、書き込み順序忠実性（ＷＯＦ）および「依存性ＷＯＦ」は、以下のようにより正式に定義できる。アプリケーションは、更新操作を使用して、その永続状態を更新することができるが、この更新操作は、メタデータ更新Ｗ１（例えば、データベースリカバリーログにエントリを書き込む）とデータ更新Ｗ２（例えば、修正されたデータをデータベースに書き込む）との、２つの更新書き込み操作から成る。アプリケーション自体あるいはストレージのいずれかの適切な障害回復のために、アプリケーションは、メタデータ更新Ｗ１が完了するまで待ってデータ更新Ｗ２を実行する。これら２つの書き込み間のタイミング関係は、ここではＷ１→Ｗ２として表わされるが、Ｗ２はＷ１に対し「依存性」だと考えられ、Ｗ１はＷ２にとって「必要」だと考えられる。かかるアプローチの使用は、Ｗ１が情報を記録し、それなくしてはＷ２が正しく解釈され得ないことを可能とする。かかるストレージシステムでは、Ｗ２の開始時間がＷ１の完了時間のあとであることに留意することにより、依存性書き込みを監視することができる。
【００２６】
かかるストレージシステムは、任意の障害から回復したあと、２つの書き込みＷ１→Ｗ２について、以下のケースのうち１つだけが当てはまる場合、「依存性」書き込み順序忠実性を示すと考えられる。（ａ）Ｗ１もＷ２もストレージに適用されていない、（ｂ）Ｗ１とＷ２の両方がストレージに適用されている、あるいは（ｃ）Ｗ１のみがストレージに適用されている。
【００２７】
依存性ＷＯＦは、書き込み操作において、全体ではなく半順序を定義する。いくつかの実施例では、これはグローバルに同期された時間概念を使用することができるが、別の実施例はこの問題を回避する。さらに、依存性ＷＯＦによって順序付けされていない書き込みは、まさしくアプリケーションによって並行して実行される書き込みである。一態様によると、依存性書き込み順序忠実性は、ＮｅｔＳｔｏｒａｇｅｒ製品などのネットワークコントローラの整合性の適切な定義である。米国特許第６，１４８，４１４号（参照により本書に組み込まれる）は、有用なネットワークコントローラの態様を開示している。
【００２８】
一態様において、ストレージシステムは、アプリケーションの観点から、書き込みの対Ｗ１とＷ２は依存性であると判断する。ストレージデバイスは、Ｗ１が完了した後にＷ２が到着することを監視し得るのみであるため、ストレージデバイスがこれらの依存性を判断するのは容易ではない。これら２つの書き込み間には従属関係がなく、また明確な順序付けは単なる偶然の一致かもしれない。アプリケーションからの支援なしで（そのようなことは想定されていないが）、通常ストレージシステムは、偶然の一致と本物の依存性書き込みの対を区別することはできない。安全のため、ストレージシステムは、Ｗ１が完了したあとにＷ２が到着するあらゆるケースが真の依存性書き込みを示すと想定することができる。これは必要とされるよりも強い半順序を作成するが、真の書き込み依存性は、この強い順序付けの一部となる。
【００２９】
一態様において、複数のアクティブなキャッシュコヒーレント・イニシエータを伴う環境は、依存性ＷＯＦを提供するために、グローバルな時間概念を使用する。かかる使用の本来の解釈は、書き込みの絶対的にグローバルな順序付けを意味する。この本来のアプローチの書き込み当たりの諸経費は非常に高額で、特に地理的に離れた状況では、真剣に検討するに値しない。一代替物は、書き込みのバッチをデルタにグループ化することを伴い、それによりデルタ間の境界が、上述のような依存性書き込み順序忠実性に従う。
【００３０】
上述のようにシステム変更を表わすために使用されるデルタ内で、書き込みは再順序付けされ、ある程度の最適化を提供する。デルタが閉じられるとき、デルタに含有される全ての書き込みは、同じデルタあるいは以前のデルタの書き込みに依存している。必要な書き込みが後のデルタまで先送りされる場合、ＷＯＦはもはやデルタ境界を跨いで保存されない。デルタを閉じる操作は、そのため全ての参加ノードにわたって調整されるべきである。
【００３１】
デルタは、一実施例において、ＷＯＦグループに参加している全てのサイトの全てのノードにわたりグローバルである。各ノードは、ローカルに書き込まれたデルタのフラグメントを収集する。各サイトは、ローカルストレージにコミットするために完全なコピーを必要とするので、サイトはフラグメントを交換して、完全なコピーを組み立てる。一態様において、これらの部分デルタは、ローカルに適用される前にサイト間で交換される。交換後、各サイトは、デルタを基礎となるストレージにローカルにコミットすることができる。ローカルコミットはアトミックに、他のデルタに対して正しい順序でなされる。アトミック性の要件は、デルタが適用される前に永続とされることを意味する。永続性の程度を変更することは、ＷＯＦ整合性保証の強度に影響を及ぼし得る。例えば、デルタを安定したストレージに置くことは、デルタを冗長装置上の揮発性メモリにコピーするよりも安全である。
【００３２】
ＷＯＦソリューションに関し、基礎となるストレージが、一連の整合性のある状態を通してアトミックに動作しているのを見ることができる。デルタをストレージにローカルに適用する前に、各サイトが全グローバルデルタを集める場合、サイト間のリンク障害は、ストレージを整合性のある状態に保たない。デルタは、全体として適用されるか、あるいは全く適用されない。
【００３３】
一態様において、ネットワーク管理者は、相互に整合性がある必要があるフロントエンドのボリュームを、ＷＯＦグループにグループ化する。例えば、データベースの全てのデータおよびログボリュームは、同じＷＯＦグループに位置づけることができる。各ＷＯＦグループは、一実施例において、全システムにおけるノードとサイトのいくつかのサブセットにより管理される。ＷＯＦグループへの新しい書き込みは、現在のオープンデルタΔｉのキャッシュに収集され、キャッシュのバックエンドは、デルタを生成する。
【００３４】
ＷＯＦソリューションに関し、基礎となるストレージが、一連の整合性のある状態を通してアトミックに動作しているのを見ることができる。デルタをストレージにローカルに適用する前に、各サイトが全グローバルデルタを集める場合、サイト間のリンク障害は、ストレージを整合性のある状態に保たない。デルタは、全体として適用されるか、あるいは全く適用されない。従って、完全なデルタによって与えられた暗黙の時間順序により、基礎となるストレージへのデルタのアトミックな書き込みは、完了しているかどうかに関わらず、ＷＯＦのプロパティを保存することができる。
【００３５】
一態様において、ＷＯＦグループへの新しい書き込みは、現在のＷＯＦデルタΔｉのキャッシュに収集され、キャッシュのバックエンドはデルタを生成する。新しい書き込みを収集するデルタは、「開いている」と考えられる。一態様において、新しい書き込みを受け入れるのをやめ、デルタパイプラインを進行させるための、オープンデルタを閉じる決定は、何らかの時間またはスペース制約に基づいて定期的になされる。デルタを閉じる決定は、外部トリガーによって、あるいはシステムエラー状態からの回復の一部として行うこともできる。デルタを閉じ、新しいデルタを開き、また一般的には、デルタパイプラインを進行させることは、「デルタのロールオ−バ」と称される。一態様において、デルタを閉じる決定を行うノードは、ＷＯＦグループに通知を送信またはブロードキャストすることができる。各ノードが通知を受け取ると、そのノードは、新しい書き込み操作への確認応答の遅延を開始する。これは、全ての書き込み順序依存性がΔｉからΔｉ＋１へ進むこと、あるいはΔｉ内に含有されることを確実にする。通知を受け取った時点で未完了の全ての書き込みが完了すると、Δｉは閉じられる。そしてΔｉ＋１が開かれ、Δｉが交換段階に進むのと同時に、新しい書き込みの収集を開始する。アプリケーションがＩ／Ｏにおける途絶を感知しないことを確実にするために、ＷＯＦグループへの書き込みが遅延される時間を最低限に抑えることが重要である。一般の順序付けられたブロードキャストサービスが、これらのブロードキャストに高すぎる諸経費を課す場合、より軽量な２段階コミットプロトコルを使用することができるが、これはコミットプロトコルに関わるノードを最低限に抑える。
【００３６】
デルタパイプラインのロールオーバ操作は、定期的な性能影響を示唆する。ＷＯＦ整合性保証は重大障害の場合にのみ必要とされてもよいため、代替実装は、エラー回復中にデルタ境界を回復し、それにより通常操作中のグローバルバリアの必要性を取り除くことを選択してよい。
【００３７】
最近に閉じられたデルタは、ＷＯＦグループのアクセスノードのキャッシュにおいて、フラグメントとして存在することができる。一態様において、キャッシュコヒーレンシプロトコルは、各フラグメントが固有の、非重複「ダーティ」データを含有することを保証する。各サイトは、これらのフラグメントに含有されるブロック、あるいは部分デルタを交換することにより、デルタの完全なコピーを組み立てる。一態様において、サイトのためのΔｉのコピーが、単一のノードにある場合、アトミックコミット段階は簡略化することができる。しかし、これはデルタのグローバルサイズに厳密な制約を課し、交換段階とデルタを閉じる決定をより複雑にする可能性がある。別の態様では、収集されたデルタ内の書き込みは、上書きまたは隣接の書き込みセグメントを利用するために、再順序付けすることができる。
【００３８】
一態様において、Δｉがコミットされ得る前に、デルタは永続とされる。永続性操作は、交換段階と重複することができる。強い整合性保証のために、デルタを記述するデータおよび関連メタデータは、安定したストレージに書き込むことができる。データを同じサイトの別のノードに１回以上コピーし、それにより「保護コピー」を提供しそれほど強くない保証を提供することができる。かかる保護アプローチは、より高速にできるが、さらなるメモリ制約を課す可能性がある。より弱い保証は、永続性を要求しない。永続性なしでは、複数の障害に対する保護はないが、サイトの災害時には、データ整合性を維持することができる。
【００３９】
Δｉが交換されて永続とされたあと、一態様において、サイトは調和して、Δｉのバックエンドストレージへの適用を開始する。これは真にアトミックには行うことができず、障害に割り込まれることがある。永続コピーは、いくつかのノードがコミットを再実行することができる限り、これらの障害から保護される。デルタのコミットが始まると、操作が純粋にサイトに対してローカルであるため、サイト間リンクへの割り込みは影響を与えない。
【００４０】
一態様におけるＷＯＦの導入は、ダーティデータがキャッシュのバックエンドから出る順序に影響するのみであり、キャッシュコヒーレンシプロトコルには何の影響も及ぼさない。任意のノードへの読み取り要求は、常にデータの最新コピーを返す。クローズデルタにヒットするキャッシュ書き込みは、前のコピーを無効にできないが、その代わりオープンデルタに新しいコピーを作成する。この新しいコピーは、キャッシュコヒーレンシの目的で、基礎となるストレージに保存される永続コピーを含む、あらゆる旧バージョンのブロックをシャドウする。
【００４１】
（例示的な依存性ＷＯＦ実装）
一態様において、例示的なＷＯＦ実装は、依存性書き込み順序を有し、多数のサイトにわたり、また多数のサイト内で完全アクティブである。かかる実装は、サイトにわたって、またサイト内のノードにわたって、完全アクティブＷＯＦを完全にサポートする。実装は、各デルタが整合性のある書き込みのバッチを含有する、デルタベースとすることもできる。システムは、ネットワークコントローラノードへのアプリケーション書き込みとしてデルタを収集している。例えば約５〜３０秒のオーダーの間隔で、システムは、現在のデルタのクローズをローカルおよびグローバルに同期させる。新しいデルタが、新しい書き込みの収集を開始するために、即座に開かれる。クローズされたデルタは、次にバックエンドストレージにアトミックに書き込まれる。最新にコミットされたデルタは、障害時の修復ポイントを定義する。
【００４２】
かかる実装は、ＷＯＦ整合性グループのサポートも提供することができる。データベース、ジャーナルファイルシステム、およびその他類似のアプリケーションは、しばしばそのデータボリュームをそのメタデータおよびログボリュームから分離する。管理者は、これらのボリュームをグループ化して、単に個々にではなく、組として、それらにわたってＷＯＦを提供できなければならない。
【００４３】
本段落では、ＷＯＦ実装のより具体的な例を示す。図２は、サイトＡ２０２とサイトＢ２０４を含む例示的な２サイトシステム２００を、サイトＡに分散ＲＡＩＤ１（ＤＲ１）の１つのレグ２０６を、サイトＢに１つのレグ２０８を備えて示している。まず各サイトは、各サイト上部のオープンボックス（２１０ａ、２１０ｂ）に概略的に示される、現在のオープンデルタＤ１  ２１０に書き込みを収集する。書き込み（Ｗ１、Ｗ２、Ｗ３、Ｗ４）は、通常のキャッシュコヒーレンシプロトコルに従って、サイトの各ノードでローカルに収集される。米国特許出願第１１／１７７，９２４号（上記の参照により組み込まれる）は、有用なキャッシュコヒーレンシのシステムと方法を開示している。
【００４４】
最終的に、いくつかの異なる理由から、システムは現在のデルタを閉じる判断ができる。例えば、ユーザ設定可能なタイマが満了しているかもしれない。管理者は、かかる設定可能なタイマを用いて、障害が起きた場合に失われる可能性のあるデータの量を抑制することができる。別の可能性のある理由は、外部ＡＰＩがアプリケーションに呼び出されることである。アプリケーションはこの呼び出しを用いて、その観点から、データが完全に整合する時間を指示することができる。また別の可能な理由は、システムが１つ以上のノードのリソースを使い果たすことがある。デルタを収集するノードのうちの１つは、ノードが早期にデルタを閉じる必要があると決定してよい。
【００４５】
一態様におけるシステムは、サイトにわたって現在のデルタのクローズを同期させ、それによりデルタの境界が、依存性書き込みの順序付け整合性を順守する。言い換えると、各デルタのエッジは、整合性のあるストレージのビューを定義することができる。図３に示されるように、現在のデルタが閉じられると、新しいデルタＤ２  ３００を即座に開いて、アプリケーションからの新しい書き込みを収集することができる。システムは次に、サイト間リンク３０２を介して各サイトで収集された部分デルタを交換し、それによりサイトＡとＢそれぞれは、クローズデルタ（それぞれ２１０ｃおよび２１０ｄ）の完全なコピーを有することができる。
【００４６】
閉じられた完全なデルタ２１０ｃ、２１０ｄは、図４に示されるように、適切なリンク４００を経由して、ＤＲ１の各レグ２０６、２０８に適用できる。この適用プロセスは、必ずしもアトミック操作ではない。つまり操作は、各種の障害に割り込まれることがある。障害の種類によって、デルタを適用するプロセスを再始動する必要があるかもしれない。
【００４７】
図５は、かかるアプローチに従った例示的な方法５００のステップを示すフローチャートである。この方法では、フロントエンドボリュームはＷＯＦグループにグループ化され、それぞれは全データシステムにおけるノードとサイトのサブセットにより実装される（５０２）。ＷＯＦグループのいずれかへの新しい書き込みは、そのＷＯＦグループのオープンデルタのキャッシュに保存される（５０４）。何らかのトリガーイベントで、現在のオープンデルタは閉じられる（５０６）。デルタクローズのメッセージは、ＷＯＦグループにブロードキャストされ、それによりあらゆる未完了の書き込みを完了し得、デルタを閉じ得る（５０８）。次に、新しい書き込みを受信するために、新しいデルタが開かれる（５１０）。異なるＷＯＦグループで固有フラグメントとして存在する最近閉じられたデルタは、交換段階を経て、それにより各サイトは、クローズデルタの完全なコピーを獲得する（５１２）。完全なクローズデルタは、安定したストレージに書き込むことにより永続とされる（５１４）。クローズデルタが永続にされたあと、サイトはクローズデルタを各サイトのバックエンドストレージに適用する（５１６）。
【００４８】
図６の状況６００は、リンク障害が起きたときに並行して進行する上記のプロセスを示している。オープンデルタＤ３のために書き込みが収集されているとき、クローズデルタＤ２は交換され、コミットされたデルタＤ１は、この場合、サイトＡおよびＢそれぞれのための分散ＲＡＩＤ１システムのレグであるディスクに適用されている。サイト間で書き込みデータを交換するためのリンク６０２が故障した場合、フロントエンドＩ／Ｏが中断されるので、それ以上の書き込みはＤ３に収集されない。Ｄ２のフラグメントは、交換を継続することができず、各サイトは、リンクが回復するまで、あるいはリンクが回復する前に１つのサイトが操作を再開しなければならないと、管理者が宣言するまで、そのデルタのための「ダーティ」データを保持し続ける。しかし、コミットされたデルタＤ１は、Ｄ１がもはやアクティブなリンクに依存していないため、図７の状況７００に示されるように、継続してレグに適用されることができる。これが完了したあと、リンクが切断したとしても、ＤＲ１のレグは一致する。
【００４９】
リンク障害が一時的な場合、リンクが回復すると、通常操作が再開される。サイトＢが、システムが確認したいくつかの書き込みのコピーしか保持していないために、ダーティデータが失われている場合、サイトＡおよびＢは、デルタＤ２およびＤ３の内容を破棄し、アプリケーションＩ／Ｏのサービスを再開できる。サイトＡから見られるストレージの内容は、最後に問題なく交換されコミットされたデルタＤ１と整合性がある。ＤＲ１のローカルレグのみに書き込んでいる間、サイトＡはビットマップログを更新することができ、それによりリンクが回復したとき、ＤＲ１の２つのレグを同期させることができる。
【００５０】
（ＷＯＦの性能影響）
ＷＯＦ実装は、フロントエンドからバックエンドの物理ストレージまでの、ホスト書き込みのフローに対する大幅な変更となる可能性がある。実装のいくつかの態様は、ホストにより感知される、システムのネットパフォーマンスに影響を与える可能性がある。
【００５１】
例えば、一態様においてＷＯＦグループに従事している全てのノードは、同期して現在のデルタを閉じなければならない。これは、特にマルチサイト構成の場合、明らかな性能への影響を有する。しかし、この同期間隔中に、書き込みは正常に実行され、着信の書き込みはホストからデータを受信するが、デルタのクローズが完了するまで確認されないことに留意するべきである。さらに、変更をデルタに収集することにより、これらの変更は、より小さい個別書込み操作よりも効率よく、サイト間リンクを介して流され得る。
【００５２】
上述のように、コミットされたデルタのストレージへの適用はアトミック操作ではないので、操作は障害に対して脆弱である。まだストレージに適用されていないコミットされたデルタのどれが障害に対して保護されるかについては決定することができる。これは、整合性保証をどの程度強くするかの選択に相当する。この分野にはいくつかの実装オプションがあり、それぞれ異なる性能トレードオフを有する。
【００５３】
（デルタ収集段階）
一態様において、ＷＯＦパイプラインの第１ステージは、新しい書き込みのオープングローバルデルタへの収集である。キャッシュの入口でのコヒーレンシプロトコルの結果として、同じブロックの２つのダーティコピーは存在しない。従って、異なるノードまたは異なるサイトからの部分デルタの交点は空集合である。グローバルデルタ全体は、全ての部分デルタのユニオンである。
【００５４】
ダーティブロックはオープンデルタに加えられるので、ブロックが整合性のある書き込み順序で、残りのデルタとともにパイプラインを通って前進するように、それらのブロックはオープンデルタにリンクされている必要がある。一実施例に従ってこれを達成するために、ダーティデータのためのみに使用される、キャッシュブロックデータ構造に２つのメタデータを加えることができる。第一のメタデータは、このブロックが所属するデルタ番号を保存するデルタ識別子である。この識別は不変である。デルタ番号は、システム全体のグローバル番号であり、パイプラインが進行するときに新しいデルタが開かれるたびに増分される。加えることができる第２のメタデータは、キャッシュブロックが、同じデルタからのそのピアとともに保存されるようにする、デルタリストである。この目的では、単独にリンクされたリストで十分である。
【００５５】
両メタデータフィールドは、新しい書き込みがオープンデルタに入力されるとすぐに割り当てられることができる。さらに、ノード障害に対して保護するために、着信の書き込みが別のアクセスノードにコピーされるとき、書き込みを受信したノードが故障した場合に回復することができるように、デルタＩＤを、保護コピーとともに保存されるメタデータに加えることができる。
【００５６】
新しい書き込みが、システムのある場所のキャッシュにある、すでにダーティなブロックに到着するとき、少なくとも２つのアクションのうちの１つを行うことができる。ダーティブロックがオープンデルタにある場合、ダーティブロックは単に無効にすることができる。しかし、ダーティブロックが古いデルタにある場合、ダーティブロックを無効にすることは、依存性書き込み整合性に違反することになる。少なくとも一実施例において、この場合、新しい書き込みがオープンデルタに入力されなければならず、それからキャッシュコヒーレンシの目的で、ブロックの古い内容をシャドウしなければならない。
【００５７】
新しい書き込みが、システムのある場所のキャッシュにあるすでにダーティなブロックに到着し、その書き込みがブロックを完全に上書きする代わりに、その一部のみを修正するとき、上述のもの以上の特別な処置が必要となる可能性がある。修正されるブロック全体のデータは、ブロックの以前の内容がノード障害によって失われないような方法で書き込みを処理するノードに転送することができる。１つの簡単な手法は、ブロックの現在のダーティな内容を保有しているノードについて、新しい書き込みを処理するノードに送信する前に、そのブロックをストレージに対して消去してしまうことであるが、この手法は依存性書き込み整合性に違反するため、ＷＯＦには適さない。その代わりに、上述のキャッシュ保護機構を例えば以下のように拡張することができる。（１）ブロックの古い内容が、上述のように保護コピーを作成する、書き込みを処理するノードに転送される。（２）ブロックの元の保有者が、そのブロックのコピーと対応する保護コピーを無効にする。（３）書き込みを処理するノードが、アプリケーションからのデータをブロックに適用し、その保護コピーを更新する。ただし、このノードは、オープンデルタにある場合に、古い書き込みとその保護コピーを単に削除することに関し、前の段落に記載された制約に従わなければならない。（４）最後に、アプリケーション書き込みが確認される。
【００５８】
一態様において、全ての書き込み要求は、ＤＭＧにおけるリクエスタのデルタＩＤとともに送信される必要がある。これは、例えば以下の例を使用することによって、ＤＭＧ／キャッシュＡＰＩにおいて達成することができる。
【００５９】
【数１】
2009501382.tif 000003
一態様において、リクエスタは、ブロックのダーティコピーを、ディレクトリから受信するとすぐに保護し、それからホストからの新しいデータを受け入れる前に、書き込みの分散完了を開始し得る。このアプローチは、共有者に対するＤＭＧロックとリモート無効化が、可能な限り早急に完了され、それにより同ページについての後の分散操作を妨げる可能性が低くなるという利点がある。このアプローチに欠点があるとすれば、ライタが、イニシエータへの書き込みを完了する前に、２つの保護操作を実行する（１つはホストが書き込みを転送する前、２つ目はその後）必要があることである。代替的にリクエスタは、書き込みの分散完了を開始する前に、ホストへの書き込みの継続と完了を許可することができる。かかるアプローチは、二重の保護操作を回避する。
【００６０】
（クロージャ移行中の収集）
オープンデルタが閉じられるとき、新しい書き込みの次のバッチを収集するために新しいデルタが開かれる。デルタクロージャのパイプライン移行は瞬間的操作ではないので、新しい書き込みが別に処置される移行期間が存在する。具体的には、書き込みデータは、正常にキャッシュに受け入れられるが、ホストへの書き込み完了の確認応答は、移行期間が終わるまで遅らされる。
【００６１】
デルタクロージャは、ＷＯＦパイプラインのデルタをオープン状態から交換状態へと移動させる状態移行である。デルタクロージャ操作をトリガーできるイベントは、可変間隔を備える通常のタイマ、ノードメモリ制約、外部トリガーＡＰＩ、システムエラー状態からの回復を含む。あらゆるノードは、クロージャトリガーの供給源となることができるが、タイマトリガーは、単一の指定されたノードからのみもたらされるべきである。複数ノードは、独立して非同期にデルタクロージャをトリガーする決定をするので、クロージャバリア機構は、重複するトリガーに耐えるものであるべきである。デルタクロージャのトリガーについては、本明細書の別の箇所により詳しく説明される。
【００６２】
デルタクロージャは、一態様において、２段階コミットプロトコルなどの分散バリア機構と同調させることができる。一実施例によるバリア機構は、多数のステージを含む。かかるステージの１つは、メッセージがＷＯＦグループの全てのノードにブロードキャストされるバリア開始ステージである。メッセージは、任意のノードで開始することができ、これは次に残りのバリアラウンドのリーダーとなる。競合状態があり、複数ノードがバリア開始通知をブロードキャストしている場合、１番目のものが勝者となる（仮想同期などの順序ブロードキャストサービスを使用）。
【００６３】
別のステージは、バリア確認ステージであり、ここではＷＯＦグループの各メンバーにより、そのメンバーがバリアに到達したとき、２地点間メッセージが現在のラウンドリーダーに送信される。バリア確認メッセージは、データペイロードを伝えることができるので、追加の通信オーバーヘッドを伴わずに、バリアに関連する情報が共有できる。
【００６４】
さらに別のステージは、バリア終了ステージであり、ここではラウンドリーダーが全ての未完了のバリア確認メッセージを集めてしまうと、そのリーダーがブロードキャストメッセージを送信する。バリア終了メッセージは、該当する場合、バリア確認メッセージからの融合データを含む。
【００６５】
（バリア使用）
一態様において、ＷＯＦ実装は、ロックステップ方式で進行する厳密なパイプラインを有し、そのため各ＷＯＦグループについてのパイプライン進行を制御するために単一のバリアのみが存在する。バリアは、デルタクロージャトリガーにより任意のノードで開始することができ、そのノードは、全てのノードにバリア開始メッセージをブロードキャストすることにより、次のラウンドのバリアリーダーとなる。各ノードがこのブロードキャストを受信すると、そのノードはグローバルデルタｉｄを増分することができ、それにより全ての新しい書き込み要求が、次のデルタにプッシュされる。ノードは、ホストへの新しい書き込み要求の完了の確認を遅らせることができる。
【００６６】
ノードは、最近開かれたデルタにおいて、全ての進行中の書き込み要求が完了するまで待つことができ、必要であれば、現在の交換およびコミットステージの完了を待つことができる。ノードは次にメッセージを送信することにより、このノードが続行できる状態にあることを、バリアリーダーに通知することができる。
【００６７】
交換段階は、バリア確認メッセージに、部分デルタのサイズなどの情報を含むことにより、より効率的にすることができる。しかしながら、書き込み完了を遅延させることによって、バリアがホストアプリケーションに影響を与え得るため、継続時間は最小限に抑えられ得る。バリアリーダーは全てのバリア確認メッセージを収集してしまうと、バリア終了メッセージをブロードキャストすることができる。影響を受けたそれぞれのノードがこの通知を受信するのとで、それらのノードは、新しいオープンデルタへの、完了していたはずの全ての書き込みをホストに承認し、正常に完了するために、さらなる書き込みを許可することができる。ノードは、前のオープンデルタに対して交換プロトコルを開始し、前に交換されたデルタに対してコミットプロトコルを始めることができるが、これについては後述する。
【００６８】
（交換段階）
一態様において、デルタが交換状態にあるとき、２つのことが起こる。１つめは、各サイトの部分デルタが他の参加サイト全てに転送され、それにより各サイトはデルタの完全なコピーを有する。２つめは、各サイトが、バックエンドストレージへのコミットを始める前に、そのコピーそれぞれを永続あるいは安全にする。
【００６９】
安全の程度は、あらゆる障害に対して脆弱な無保護デルタから、ミラー保護されたオンディスクジャーナルに及んでもよい。ジャーナルは、ノードおよびサイトの障害に対して保護するだけでなく、データを安全にキャッシュから退去させられることを意味する。しかし、安全に交換されたブロックをキャッシュから退去させることは、コミット段階中にジャーナルから読み戻すという、パフォーマンスの不利益を招く。このパフォーマンスの不利益により、コミットデルタ全体をストレージにコミットされてしまうまでメモリに保持する実装は、少なくとも一実施例において好ましい。かかる実装では、ジャーナルは、障害回復の目的で必要とされない限り、書き込み専用である。
【００７０】
安全度の疑問に対応する１つのアプローチは、ｎウェイ保護で中間を取ることである。しかし、このアプローチの問題には、複製アプローチの高いメモリ消費量が含まれる。あらゆるサイトは、部分オープンデルタと交換およびコミット状態にある２つの完全なデルタだけでなく、全てのもののｎ複製コピーを保存するのに十分なメモリを必要とする。さらに、サイトが不釣合いな数のノードを有するシステムでは、より小さいサイトは、ＷＯＦパイプラインに使用するためにより小さいメモリプールを有するので、より大きいサイトは、ＷＯＦに使用可能なメモリの一部を未使用のままにすることが必要となる。この問題は、あらゆるメモリ内ソリューションにおいて発生するが、保護ソリューションにおける追加メモリの使用によりさらに悪化する。
【００７１】
一態様において、書き込みを受信するノードが、書き込まれているブロックのための保護スペースを割り振ることができない場合、書き込みを処理する簡単なアプローチは、書き込まれたブロックを即座にディスクへと押し通すこと、つまりこの個別書き込みをライトスルーで処理することである。しかし、そのアプローチは依存性書き込み順序付けに違反し、そのため保護スペースは前もって予約されなければならない。ノード障害後、より大きい保護スペースを取得して、安全でないデータを再保護するか、あるいはパイプラインがフラッシュされている間、低下モードを保たなければならない。保護アプローチは、単一ノードのサイトに安全保証を提供せず、サイト障害あるいはあるｎ個のノード障害後、データ整合性を失う。ジャーナリングアプローチでは、データ整合性は決して失われない。
【００７２】
これらおよびその他の理由から、少なくともいくつかの実施例では、デルタの安全性にとってジャーナリングが好ましい。あらゆるノードは、少量の保護スペースを使用して、その部分オープンデルタをノード障害から安全に保つことができる。ブロックが、交換段階中に全てのサイトのジャーナルで安全にされると、保護コピーはもはや必要ではなく、無効にして再使用することができる。単純なノード障害は、安全でないデータを再保護し、ジャーナルから安全なデルタを読み取り、交換段階を再始動することによって処理される。ジャーナルされていないブロックの全てのコピーを喪失するさらに深刻な障害は、必ずリンク障害のように扱われなければならず、全てのサイトが、継続してそのコミットデルタをアトミックに書き出すが、オープンおよび交換データは破棄され、ホストアプリケーションは再始動する必要があり得る。障害処理については、さらに詳しく後述する。
【００７３】
（メモリ供給）
一態様において、ＷＯＦグループに参加している、分散ＲＡＩＤ１（「ＤＲ１」）実装のレグを備えた各サイトの各ノードは、ＷＯＦパイプライン全体のために供給されたメモリを有することができる。ここに記載されるＷＯＦグループのための累積サイト内メモリ使用量は、総メモリ使用量ＭとＷＯＦグループに割り当てられたメモリＷを有する。
【００７４】
【数２】
2009501382.tif 000004
一態様において、ＷＯＦグループを作成するとき、管理者は、全参加サイトに適用するＷを指定する。他のＷＯＦグループがすでに使用可能なスペースを消費しているため、またはその他の理由で要求されたＷの値が割り振れない場合、ＷＯＦグループ作成は失敗し得、他の以前に作成されたＷＯＦグループが、正常に操作を継続することになる。あるいは、ＷＯＦグループは不十分なリソースで作成されてもよいが、他の使用からリソースを取り戻しを始める。十分なリソースが取得されたとき、新しいＷＯＦグループは、操作を開始することができる。ストレージシステムは、長時間経って十分なリソースが収集できない場合、管理者にＷＯＦグループ作成をキャンセルするオプションを提供してもよい。
【００７５】
ｎノードサイトでは、Ｍは参加ノードにわたって均等に分散され、各ノードｉは、その部分オープンデルタに対しｐｉ＝Ｐ／ｎに限定される。さらに、交換プロトコルは、完全なデルタのＥ／ｎを各ノードに分散し、ＲＭＧは近接ノードに複製を置く可能性が最も高く、つまり約Ｒ／ｎが各ノードに行き着く。
【００７６】
Ｗに提供された値から、Ｐの最大サイズが計算できるが、これはＷＯＦグループにおけるサイトの数ｓによる。より多くのサイトがあれば、完全に交換されたデルタによって、より高い割合のＷが使用される。あらゆるサイトのＰに対し同じ上限が使用される場合、完全に交換されたデルタのサイズを以下のように定義することができる。
【００７７】
【数３】
2009501382.tif 000005
従って、オープンデルタの最大サイズは、以下のように定義できる。
【００７８】
【数４】
2009501382.tif 000006
この値は、Ｐの理論上の最大値である。複製目的の制約は、オープンデルタをさらに制限し得る。サイトの各ノードｉは、オープンデルタのｐｉを収集する責任がある。そのデータは、ジャーナル上で安全にされるまで複製され得る。ＷＯＦグループのためのサイト内複製要件は、サイトの各ノードに対する複製の必要性の合計によって定義される。
【００７９】
【数５】
2009501382.tif 000007
各ノードは、現在のオープンデルタの内容のみでなく、交換段階の最後に安全にされるまで、最新に閉じられたデルタの内容も複製する。
【００８０】
【数６】
2009501382.tif 000008
ＷＯＦグループのための複製スペースは、事前割り振りすることができ、簡単に使用できるので、複製要求は失敗しない。しかし、理想的な割り振りは、常に可能なわけではない。Ｉ／ＯがＷＯＦ区画で開始する前に、ＲＭＧはｒｉを予約するよう求められ、要求されている全てが予約できない場合、ｐｉはそれに応じて減らされる。ｐｉの修正された値は、それからデルタクロージャトリガーに対するスペース制約として使用することができる。
【００８１】
（メモリ予約）
１つの実装では、関連付けられた保護コピーのためのものも含むＷＯＦパイプラインのためのメモリは、事前に予約され、それにより通常のＷＯＦ操作は、一時メモリ不足に対処する必要がない。代替の実装では、ＷＯＦパイプラインにメモリを割り振ることが可能であろう。
【００８２】
（交換プロトコル）
交換プロトコルは、全てのサイトが完全交換デルタのローカルコピーを有することを確実にすることができる。デルタクロージャプロトコル中、各ノードは、その部分デルタにおけるデータの記述子と、関連付けられたメタデータの第２の記述子を構築することができるが、それらはそれぞれバリア確認でラウンドリーダーに送信される。ラウンドリーダーは、次にバリア終了ブロードキャストで、ＷＯＦグループに参加している全てのノードに、これらの記述子を配布する。各参加サイトのノードは、次にこれらの記述子を用いて、そのサイトから欠落しているデルタフラグメントをフェッチする。１つの実装では、これらの記述子は、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（リモートダイレクト・メモリアクセス、ＲＤＭＡ）領域のためのキーとして実現される。
【００８３】
１つは交換用、もう１つは安全用（例えばジャーナリング）の２つのトークンを、サイトのノードを通して循環させることができる。１つずつ、ノードは交換トークンを取得し、前に伝達された記述子を用いて、ノード交換エリアがいっぱいになるまで、別のサイトからデータをフェッチすることができる。全てのノードは、バリア終了ブロードキャストで同じ記述子を受信しているので、各ノードは、前のノードは除外してただ開始し、領域を通して順に続け得る。ノード交換エリアは、リモート領域を部分的に転送しただけでその後でいっぱいになることがあるため、フェッチするノードは、ブロック境界で転送を停止するようにし得る。データが受信されるとき、データはブロックに分割されることができ、これらは適切なデルタｉｄを割り当てられ、上述のように正しいデルタリストに付加される。
【００８４】
その交換部分を終えた後、ノードはその近隣へと交換トークンを回す。安全性トークンが、交換トークンに続く。ノードは、全ノード交換エリアが一杯になるまで待つ必要がないので、それらの交換されたデータ（およびそれらのローカル部分デルタ）をチャンクで安全にしてよい。安全性トークンは、安全性プロトコルのためにのみ使用されてもよいが、これはディスクジャーナルのように直列化される必要がある。その交換部分を安全にしたあと、ノードはその近隣へと安全性トークンを回す。最後のノードが安全性トークンを解放するとき、交換段階が終了し、パイプラインを進行させることができる。次のバリア開始ブロードキャストが受信されるとき、以前の交換ラウンドの記述子を破棄して、次回の交換のための新しい記述子を作成することができる。
【００８５】
（安全性プロトコル）
一態様において、安全性プロトコルは、コミット段階前に、交換されたデータが安全であることを確認する責任がある。この目的を達成するためにジャーナリングが用いられる場合、管理者は、ＷＯＦグループが作成されるとき、ジャーナリングのためのローカルディスクスペースを提供することができる。ジャーナル障害の可能性を抑えるための、ミラー保護されたディスクの使用は賢明である。ジャーナルには非常に小さいスペースが必要とされる。例えば、２つの完全に交換されたデルタで十分である。デルタがコミットされてしまうと、ジャーナルされたバージョンはもはや必要なくなる。
【００８６】
以下の図式は、オンディスクジャーナルＪの形式を要約している。
【００８７】
【数７】
2009501382.tif 000009
ジャーナルのそれぞれの名前付けされた要素は、ブロック境界で開始し、整数のブロックを占有する。典型的な名前付けされたジャーナルのセグメントの内容は以下のとおりである。
ＪＭ（ジャーナルメタデータ）：以下の通り、関連付けられたＷＯＦグループを識別し、現在のコミットデルタのスタートである。
【００８８】
【表１】
2009501382.tif 000010
Δｉ（デルタ）：デルタを定義するために必要とされる全てのデータおよびメタデータを包含する。
ΔＳ（デルタスタートメタデータ）：以下のフィールド１を-含む、ジャーナルされたデルタの開始のマーカー。
【００８９】
【表２】
2009501382.tif 000011
ΔＥ（デルタエンドメタデータ）：以下のフィールドを含む、オンディスクデルタの終了のマーカー：
【００９０】
【表３】
2009501382.tif 000012
Ｃｉ（デルタチャンク）：デルタのデータのサブセットと、障害後にジャーナルからチャンクを回復するする必要があるメタデータを表わす。
ＣＳ（チャンクメタデータヘッダ）：デルタチャンクの開始をマークし、以下のフィールドを含む。
【００９１】
【表４】
2009501382.tif 000013
データ（チャンクデータ）：ｃｈｕｎｋＢｌｏｃｋｓのメタデータと同じ順序の、このチャンクに対応するブロックデータ。
ＣＥ（チャンクメタデータトレーラ）：デルタチャンクの終了をマークし、以下のフィールドを含む。
【００９２】
【表５】
2009501382.tif 000014
（ジャーナル進行）
ジャーナルは、交換段階中に書き込める。ＷＯＦパイプラインが進行するとき、ジャーナルはデルタ切り替えも実行する。各ノードがバリア終了ブロードキャストを受信すると、それは、グローバルパイプライン進行の永続的な指示として、ＪＭのｃｏｍｍｉｔＤｅｌｔａＯｆｆｓｅｔおよびｃｏｍｍｉｔＤｅｌｔａＩｄのフィールドを更新して、最新にジャーナルされたデルタを指し示すことができる。全てのサイトは、この指示を同時に書き込むので、各サイトの全てのノードは、バリアを出るときに書き込みを実行することができる。かかる要件で、書き込みは全サイト障害によってのみ割り込むことができる。その場合、全ての存続するサイトは、ビットマップログの使用により、その現在のコミットデルタにおける全ての書き込みを保護するべきである。
【００９３】
交換段階の目的は部分デルタの複製を作成することなので、単純な障害処理機構では、交換段階を単に再始動する。デルタが安全にされているが、完全にコミットされていない場合、データはジャーナルからメモリ内を読み戻され得る。
【００９４】
ジャーナルディスクの障害は、ミラー保護されるようにサポートされているため、まれである。ジャーナルディスクが故障した場合、一時低下モードが生じる。ＷＯＦ保証は、状況が補正される前に、ノードまたはサイト障害が起きた場合にのみ失われる。低下モードは、少なくとも２つの方法で終了できる。１つ目は、管理者が、ディスク障害を起こした問題を是正できる場合、ジャーナリングを再開することができる。あるいは、オープンデルタの最大サイズを減少することにより、ＷＯＦパイプラインが徐々にフラッシュされ、ジャーナルディスクが正常になるまで、ライトスルー（あるいは管理者の好みにより、ライトバック）に切り替えられる。
【００９５】
（フロー制御）
ネットワーク接続サイトは、明らかに平均的書き込みスループット率を受け入れるのに十分な帯域幅を提供するべきであるが、一実施例によるシステムは、Ｉ／Ｏトラフィックのバーストに耐えるよう拡張されている。少なくとも２つの戦略を、独立してあるいは共に使用できる。
【００９６】
第１の典型的な戦略では、システムは、閉じられているがまだ交換されていない、あるいは「交換前」のデルタのキューを維持することができる。交換段階中のブロックの交換が、次のバリアがパイプライン進行をトリガーする前に完了しない場合、あるいはデルタ収集段階用に割り振られたメモリが、パイプライン進行を起こすのに不十分とわかった場合、新しい書き込みを受け入れるために、新しいオープンデルタを開くことができる。最近閉じられたデルタは、「交換前デルタセット」の先入れ先出し（ＦＩＦＯ）キューに保持することができる。交換段階が完了すると、次に古い交換前デルタを交換段階に進行させることができる。従って、システムは、ネットワークの容量を超過する書き込みトラフィックの短期バーストのためのバッファを提供することができる。
【００９７】
この概念は、交換前デルタのキューが長くなった場合に、２つ以上の交換前デルタセットを組み合わせることにより、一態様で拡張することができる。この実施例で交換前デルタを組み合わせることは、得られるより大きいデルタセットがシステム全体で整合性のある書き込みの時間範囲を表わすようにシステムの全てのノードにおいて同様におこなわれる。２つ以上のデルタを組み合わせるとき、書き込まれたブロック全てのユニオンが使用され得る。個々のブロックが所定のノードで１回以上書き込まれており、１つ以上のデルタセットに生まれ変わっている場合、最新の生まれ変わったもの（最も新しい交換前デルタセットのブロックイメージ）を使用することができる。デルタセットを組み合わせることは、共通に書き込まれたブロックが送信される回数を減らし、交換段階でより大きい転送のストリームを作成して、潜在的により高いネットワーク効率をもたらし、またより大きな時間間隔およびデータボリュームによりバリア操作のコストを償却する利点を有する。潜在的な欠点としては、交換前デルタセットの組み合わせをトリガーし、管理するための調整コストがかかることがあり、またこの拡張機能は、操作が前の「交換後」デルタイメージから再始動されなければならないときにノードが失われる場合に、失われる可能性があるデータの量をわずかに増やすことがある。従って、これは交換前デルタセットの長いキューによってシステムが後れを取るとき、回復機構として有利に使用できる。
【００９８】
第２の典型的な戦略では、書き込みデータが、ホストからＷＯＦグループに受け入れられる速度が低下、あるいは「抑制」される。この方法では、ホストへの書き込み確認の前に、遅延が挿入される。遅延は、システムがデルタセットの交換で後れを取る程度を反映して、増加あるいは減少される。個々の書き込みを低速にすることは、供給された性能を現在のネットワーク容量と一致するように戻すように、書き込み性能を平均化する傾向がある。
【００９９】
両方法を使用することで、システム性能の損失を伴わず、短期バーストに耐えることができ、同時に、短い書き込みタイムアウトを有するアプリケーションを故障させることなく、機構に書き込みの持続的な超過を許可する、一実施例によるソリューションが提供される。
【０１００】
別のソリューションは、基本的にコミットを除く依存性ＷＯＦプロトコルのあらゆるステージを通して、ボックスをＤＲ１として扱う。コミット段階では、ノードは何もしないが、データが退去させられるのを許可せず、データがパッシブサイトに複製されるまで、データは保持される。そうするとアクティブサイトでサイト災害があった場合、ノードのフロントエンドを通して見られる、パッシブサイトのストレージのホストのビューは、整合性のあるものとなる。その時点で、保存されたデルタが、バックエンドストレージに書き込まれることができる。このアプローチの１つの潜在的な欠点は、ダーティデータがサイト間リンク上で２回転送され得ること（１回は部分デルタを交換するため、もう１回はアクティブＳＲＤＦサイトがパッシブサイトにバッチをプッシュするとき）である。
【０１０１】
（ＷＯＦ副構成要素）
一態様におけるＷＯＦ構成要素は、多数の個別の副構成要素から成る。１つのかかる副構成要素は、ここでは「ｗｏｆサーバ」と称される。簡易バージョンのｗｏｆサーバが使用できるが、ｗｏｆサーバは、グループ変更および障害処理を担当することもでき、あるいは単にＮＭＧブロードキャスト機構を提供することもできる。このサービスを通じて送信されたメッセージは、全てのノードで処理できるが、「ｗｏｆクライアント」コードはオンザフライでグループメンバーシップを判断し、それに応じて動作することができる。ｗｏｆクライアントは、ローカルキャッシュがＡＭＦ区画を登録し、ＷＯＦグループハンドルを得るための方法を提供することができる。以下のようなＡＰＩで十分であろう。
【０１０２】
【数８】
2009501382.tif 000015
別の副構成要素は、ＣＯＭとＮＭＧとを両方使用する分離汎用バリア機構であるが、これについては後述する。このバリアは、ＷＯＦ構成要素内でのみ使用される。また別の副構成要素は、デルタＩＤジェネレータである。グローバルデルタｉｄジェネレータは、ロールオーバおよびデルタ世代比較をサポートできる。これは以下のようなＡＰＩをキャッシュにエクスポートできる。
【０１０３】
【数９】
2009501382.tif 000016
トリガー機構をキャッシュと分離させておくために、ＷＯＦ構成要素は、定期タイマ、メモリ制約、またはユーザコマンド（ＷＯＦトリガー）に依存した、全てのトリガー決定を担当することができる。単一のサイトで交換される部分デルタのためにスペースを予約する必要がないので、最初のマイルストーンにおけるメモリ制約は任意に選択できる。これは以下のようなＡＰＩが使用できることを意味する。
【０１０４】
【数１０】
2009501382.tif 000017
最後の関数は厳密なパイプラインで使用され、それによりＷＯＦはクロージャバリアを通過する適切な時期まで待つことができる。交換プロトコルが存在する後のマイルストーンでは、同様の関数呼び出しを使用して、交換完了を通知できる。
【０１０５】
（ＡＭＦ抽象化）
抽象化層は、デルタ書き込みのためのＡＭＦの上に使用することができる。これはＷＯＦがローカルＡＭＦとＤＲ１を区別するのを可能にし得、また必要であればビットマップロギングを扱い得る。キャッシュによってａｍｆ＿ｗｒｉｔｅの位置で呼び出されるために、以下のようなＡＰＩの追加が使用できる。
【０１０６】
【数１１】
2009501382.tif 000018
（デルタセット概念の拡張機能）
以下の章は、クラスタコントローラ、地理的ストレージ、キャッシュコヒーレンシ、および仮想化についての以下の特許および特許出願に開示されるもの（これらは参照により、全体として本書に組み込まれる）などの技術を拡張する。
６，１４８，４１４；６，９１２，６６８；６，８５７，０５９；５，８７５，４５６；６０／５８６，３６４；ＵＳ−２００３−０１８８６５５−Ａ１；ＵＳ−２００１−００４９７４０−Ａ１；およびＵＳ２００５−００７１５４５Ａ１。
【０１０７】
（アクティブ・パッシブサポート）
上述のように、依存性ＷＯＦ実装は、１つ以上のサイトでのデータへのアクティブアクセスを可能にし、それにより任意のサイトは、サイト間に非同期的に分散されたデータをアクティブに読み取る、または書き込むことができる。デルタセット概念を拡張する１つのアプローチは、いかなる所定のポイントインタイムにおけるいかなる所定のボリュームについても、多くの可能なライタのうち、実際に所定のＷＯＦグループにアクティブに書き込んでいるノードは１つだけであり得る認識する。ある期間の複数ノード読み取り、単一ノード書き込みは、同等のケースである。この状態が動的に検出できる場合、ストレージシステムを最適化して、デルタのブロードキャストのコストを低減し、前のデルタでのシステム再始動によって失われるデータの量を最小限に抑えることができる。
【０１０８】
１つのみのサイトが書き込んでいる場合（瞬間的一次サイト）、ＷＯＦソリューションはこれまでのＷＯＦソリューションのように機能することができる。１つの例では、瞬間的一次サイトＡ８０２は存続することができ、サイトＢ８０４は図８の状況８００に失敗する。サイトＡは、割り込みまたはデータ損失を伴わずに、データの処理を継続することができる。これまでのＷＯＦソリューションからの主な改善は、他のサイトがデータコヒーレンシの保証付きでアクティブデータの読み取りを継続できることである。この概念は、サイト内および地理全体のノード間のコヒーレンシの概念を組み込み、拡張する。
【０１０９】
別の利点は、どのサイトが一次であるかの定義が、非常に動的であり得ることである。サイトは、任意の非同期デルタセット（オープンまたはクローズ）に書き込んだ唯一のサイトである場合、瞬間的一次サイトとなれる。この実装は、サイトに、新しいデルタセットへのその最初の書き込みの発生時に、その部分デルタセットがダーティであることをブロードキャストすることを要求し得る。部分デルタセットをダーティにする書き込みは、全てのサイトがその通知を確認するまで保留され得る。従って、存続サイトは、データ整合性を確実にするために、もしあるとすればいくつのデルタセットレベルを後退させなければならないかを知ることになる。ない場合は、アプリケーション再始動またはデータ損失を伴わずに、処理が継続できる。存続サイトが瞬間的一次サイトとして宣言されることができない場合でも、サイトが瞬間的一次サイトであると考えられ得る最後のデルタセットのみを後退させることにより、データ損失は最小限に抑えられる。
【０１１０】
（ＤＲ１のローカルレグを有さない参加ノード）
上記の実施例は、各サイトがＤＲ１のローカルレグを有する、さまざまなサイトにおける参加ノードを概説している。完全アクティブＷＯＦの概念は、実際に全てのノードがローカルバックエンドデータストレージ（ＤＲ１のローカルレグ）を有することを要求しない。これはサテライトサイトが、ローカルにミラー保護されたデータボリュームの完全コピーを保持するコストを伴わずに、読み取り／書き込み方式でデータにアクセスすることを望むときに、特に有用である。
【０１１１】
一実施例は、かかる「サテライトノード」がＷＯＦグループに参加するのを可能にする。この場合、サテライトノードはオープンデルタを作成し、着信の書き込みを、ローカルＤＲ１レグを有するサイトのノードと全く同じ方法で管理する。サテライトノードは、他のノードと全く同じ方法でバリア操作に参加する。しかし、交換段階中、サテライトサイトは半分のみ参加することが必要で、他の参加ノードからの変更をサテライトにコピーする必要はない。同様に、サテライトノードがコミット段階に参加する必要はない。
【０１１２】
所定のノードが、そのノードにより管理されているいくつかのＷＯＦグループのためのサテライト動作に参加し（ＤＲ１レグを伴わず）、なおその他のためのＤＲ１は維持できることに留意されたい。
【０１１３】
（明示的パッシブサイト）
別の拡張機能は、サイトが書き込んでいないことを動的に判断し、それからそのサイトから最初の書き込みが検出されるまで、そのサイトをパッシブサイトとすることを伴う。設定された「パッシブ」サイトからの書き込みで、全てのサイトにメッセージがブロードキャストされ得、それによりそれらのサイトはこの以前のパッシブサイトが今はアクティブな参加者であることを知る。一態様において、システムは、３〜５のデルタのロールオーバなど、少数の区画が通過するのを待って、その期間に書き込んでいないサイトが、後で書き込みを行うまでパッシブサイトと判断されるべきだと判断する。かかるアプローチのコストは、サイトが再びアクティブになるときにブロードキャストする必要性を含み、そのため、サイトが少なくともある期間パッシブのままでいそうな場合のみ、そのサイトをパッシブとして設定することが望ましい。
【０１１４】
操作上、構成またはオペレータコマンドにより、サイトがパッシブであると明示的に判断することは有用であり得る。これは第１書き込みブロードキャストに含まれることになる必要性を除去し得る。操作上の利点の他に、これは区画への最初の書き込みの待ち時間を短くする。
【０１１５】
パッシブとして明示的に宣言された、そうではない複数サイトを潜在的に有するサイトの複合シナリオが存在する。従って、非明示的パッシブ間の通知は、前の章の説明のように、瞬間的一次サイトを判断するように行われる。サイトは、同等の効果をもたらす、「明示的アクティブ」として宣言されることも可能である。
【０１１６】
（障害後の部分デルタセット同期化）
上述の「ダーティデルタセット」ビットを維持することの１つの推測される結果は、部分デルタセット（非同期デルタセット）を同期化することがデータ損失を最小限に抑え得るかどうか、場合によっては瞬間的一次サイト状況を構築し得るかどうかを即座に判断することができることである。
【０１１７】
図９の状況９００に示されるように、サイトＣ９０６の喪失は、データの損失もアプリケーションバックアップの損失も意味しないが、これはサイトＡ９０２とＢ９０４との間のデルタＤ２とＤ３を同期化させることは、ＡとＢ両方が瞬間的一次サイトとなることを可能にするためである。パッシブライタが故障した場合、いかなるデータも失われず、システムは単に継続することができる。
【０１１８】
（同期デルタセット）
ここに記載されるＷＯＦは、非同期データ転送も、同期データ転送も扱うことができる。ＷＯＦは、同期と非同期のデータ転送の組み合わせを扱うこともできる。例えば、データセンタへの転送距離が約１００ｋｍの場合、光速待ち時間はそれほど長くない。任意の所定の時に２つの保護されたデータイメージのコピーを有することが所望されるため、システムがホストに書き込むとき、その書き込みは即座に同期デルタセットに挿入される。同期的に参加している２つのサイトと、大陸の半ばに非同期的に参加している第３のサイトがある場合は、書き込みはホストから行うことができ、ブロックは即座にローカルデルタセットだけでなく、同期のパートナーにも挿入される。システムは、次にその書き込みを返して確認するが、これは書き込まれたデータの安全性を表わす。１００ｋｍ離れた同期デルタによってデータを複製する場合、コントラクトが完了し、書き込みを確認した時点で、システムは、データがキャッシュ形式でローカルサイトに存在するだけでなく、キャッシュ形式で１００ｋｍ離れて存在することを示している。非同期イメージが国を横断することは、いつか後に起こるであろう。その観点から、例えば、西海岸の全てのデータストレージが失われた場合、データは脆弱であるが、１つのエリアのみが失われた場合、別のエリアにあるコピーは安全である。あらゆる書き込みは、それら２つのサイト間で同期的にミラー保護されているので、１つのサイトが失われてもよく、それでもデータのコピーを有する他方のサイトを使用して国中にデータを非同期的にプッシュすることができる。
【０１１９】
いくつかの実施例では、同期デルタセットのグループを宣言し、それにより任意のオープン部分デルタセットへの書き込みが、共通のデルタセット同期化グループ内に存在する他の部分デルタセットに同期的に書き込まれることは便利であろう。一態様において、書き込み複製は、デルタセット概念と整合性のある方法で実装することができる。この説明の目的で、書き込み複製とは、ホストに「書き込み完了」を返す前に、書き込みダーティデータを２つ以上の独立したキャッシュメモリのプールに置くことを指し、これは任意の所定のノードの障害による喪失から、そのデータを保護することを目的とする。別の態様では、地理的グループ全体に実装されるデルタセット同期化グループは、サイト障害耐性を向上させるための便利な方法となり得る。例えば、比較的近接する２つのサイトは、同期デルタセットグループのメンバーとして宣言することができ、一方他の地理的領域にある他のサイトは、それ自体のグループを有する。このように、任意の１つのサイトは、データ損失または操作割り込みを伴わずに失われ得る。同時に、領域間の待ち時間の影響は最小限に抑えられる。
【０１２０】
図１０の図式１０００では、西海岸の２つのサイト１００２、１００４は、第１のデルタセット同期化グループ１０１０のメンバーとして宣言される。同様に、東海岸の２つのサイト１００６、１００８は、第２のデルタセット同期化グループ１０１２のメンバーとして宣言される。任意の所定の部分デルタセットへの書き込みは、デルタセット同期化グループ内の別の部分デルタセットと共に同期的に複製される（複製は、書き込みが完了時に戻る前に完了する）。データは、通常のクローズ後デルタセットデータプッシュ操作を用いて、大陸中に分散される。これは以下に記載のデルタセットの永続的ビューからも利益を得られる。他のデルタセット挙動と同様に、デルタセット同期化グループは、仮想ボリューム基準により、仮想ボリューム上に定義することができる。
【０１２１】
（同期デルタセット複製のカスケード化）
書き込みを受信するデルタセットはデータを他のデルタセットへと「プッシュ」するので、関係は必ずしも対称的でなくてもよい。例えば、ボックス「Ａ」はボックス「Ｂ」に同期的に複製するよう求められる場合があるが、通常のクローズ後操作の一部としての部分デルタ情報の交換を通して以外は、「Ｂ」は「Ａ」に複製する要求を有さないことがある。
【０１２２】
これはまた、カスケード操作も可能にする。例えば、部分デルタ「Ａ」への書き込みは、「Ｂ」と「Ｃ」への同期の書き込みをもたらし、これは「Ｂ」から「Ｄ」と「Ｅ」へと、「Ｃ」から「Ｆ」と「Ｇ」への同期の書き込みをもたらす。これが有用な場合の例は、最初にサイト内の複数ノード、そのあと複数サイトにわたり、書き込みを展開する場合である。
【０１２３】
（クローズデルタセットをキャッシュセーフにする）
上述のように、書き込みに対するコントラクトの完了は、データを操作上安全であるとみなせることを示す。従来の単一のサイトストレージシステムでは、管理者は性能をデータ安全性と釣り合わせる意識的な選択を行う。具体的には、管理者はライトスルー、ライトバック、およびキャッシュ複製ライトバックの中から選択する。キャッシュ複製ライトバックは、さらなる保護のために、書き込みのｎウェイ複製の可能性を備えて拡張することができる。
【０１２４】
デルタセット構造は、デルタセットが安全なとき、トレードオフで同様のレベルの操作上の柔軟性を可能にする。系統（ｌｉｎｅａｇｅ）は、以下のいずれかが満たされるとき、デルタセットの観念が「安全」であるとみなされることを含む。
・全てのダーティデータが、全てのディスク常駐ミラーイメージに書き込まれている。
・ダーティデータが、ローカルディスクとリモートサイトのキャッシュに書き込まれる。
・ダーティデータが、ローカルサイトのｎ個のキャッシュと、ｐ個のサイトそれぞれのｍ個のキャッシュの部分デルタセット間に複製される。
・ダーティデータが、ローカルサイトのｎ個のキャッシュに複製される。
・デルタセットが、閉じられるとすぐに安全であるとみなされる。
【０１２５】
上記では、ｎ個のキャッシュに複製することの概念は、ｎ個のキャッシュのそれぞれに位置する部分デルタセット間で交換することを意味する。デルタセットがこれら全てのノードに対しエクスポートされたホストであるという必要性はない。部分デルタセットのいくらかのインスタンス化は、ダーティデータをノード障害から純粋に保護するために使用できる。
【０１２６】
（スナップショットとデルタセットの統合）
本文書の別の場所に記載されるように、スナップショットは、実データセットの論理ポイントインタイムイメージを指す。スナップショットは、バックアップウィンドウを維持するような機能のために使用することができる。バックアップを行うとき、例えば、データをバックアップするために、ストレージシステムを長時間シャットダウンすることは望ましくない。望まれるのは、全てのデータのポイントインタイムイメージであり、それによりバックアップテープ全体に常にデータに整合性があることになる。
【０１２７】
スナップショットは時間整合性であることが所望され、それによりスナップショットがポイントインタイムを反映するべきである。さらにデータベースなどのいくつかのアプリケーションでは、そのポイントインタイムは、アプリケーションが安全なポイントに対応するべきである。例えば、データベースは、一連の読み取りと書き込みの後にコミットをおこなって、データベースのデータを消去し、およびデータベースにデータをコミットすることができる。この場合、スナップショットはコミットポイントに対応し得る。コミットは、そのコミットポイントに対して最後の書き込みがなされたストレージシステムから、確認応答が返ってきたときに行うことができる。エージェントまたはその他のトリガーイベントを使用して、当技術分野で公知のように、スナップショットをトリガーすることができる。今日のスナップショットは、通常、ストレージシステム層に実装される。
【０１２８】
これらのスナップショットは、デルタセットと有利に組み合わせることができる。ストレージが地理的全域に分散されていても、データのポイントインタイムイメージは、ＷＯＦ整合性である必要がある。一態様において、スナップショットは、例えばポイントインタイムに対応する、エージェントまたはタイマによってトリガーできる。スナップショットが受信されるとすぐに、デルタセットのロールオーバをトリガーすることができ、それにより希望するスナップショットのポイントに対応するドメイン内ポイントインタイムイメージができる。システムは新しいＩ／Ｏのもので始動でき、そのデルタセットがコミットポイントまで通り抜けるのを可能にする。コミットポイントに到達し、そのオープンデルタに書き込みがおこなわれたとき、デルタはデルタセットパイプラインを通過する。全ての書き込みが完了すると、システムはそれ自身にスナップショットイメージをトリガーする。一態様において、スナップショットは、基礎となるストレージデバイスに対してトリガーできるが、これは、実際はディスク上にあるものに基づく物理的なスナップショットを行う。別の態様では、デルタセットはそのポイントインタイムと関連して保つことができる。
【０１２９】
完了したデルタセットそれぞれは、整合性のあるポイントインタイムにおけるデータのボリュームを表わす。論理スナップショット（ボリュームのポイントインタイム論理イメージ）は、単に前のデルタセットに指標を提供し、デルタセットのクローズ時の整合データイメージに基づく、エクスポートされたボリュームを許可することにより、実装することができる。
【０１３０】
スナップショットが、アプリケーションなどの外部ソースによってトリガーされるのを許可することは重要である。この理由で、後述のような、デルタセットのクローズためのインタフェースを提供することができる。
【０１３１】
スナップショットは、エクスポートされた読み取り／書き込みとすることもできる。デルタセットの視点からは、これはそれぞれデルタセットの起源から発展する系統を表現するデルタセットの家系を作成させる。ユーザの観点からは、結果はまさにこれまでの論理スナップショットの系統のように見える。
【０１３２】
論理スナップショットとして開始するが、バックグラウンドコピーによってデータの物理（論理ではなく）コピーを作成するイメージも埋め込むことができる。これはまず上述のように論理スナップショットを作成し、次にバックグラウンドで、上位のデルタセットを別個のメディアに「クローン」することにより行うことができる。
【０１３３】
（デルタセットのディスクイメージへの拡張）
本文書の別の場所に記載されているように、一態様におけるシステムは、任意の所定の時間にオープンである、３つのデルタセットを有することができるが、それぞれのデルタセットは異なるポイントインタイムを表わす。１つのデルタセットは、データが最終的にディスクにコミットされるポイントインタイムを表わし、１つはデータがディスクにコミットされようとしているポイントインタイムを表わし、１つは交換開始のポイントインタイムを表わす。また、システム全体に多数のオープンデルタがあってよい。これら全てのデルタを折り畳んだ単一の大きい基本イメージを作成する代わりに、システムはたくさんのオープンデルタを保有することができ、またさまざまなポイントインタイムのデータのたくさんのビューを有することができる。かかるシステムでは、適切なポイントインタイムに後退することが望まれる場合、システムは、ポイントインタイムｔと適切なイメージを指示することにより、簡単に適切なデルタに後退することができる。
【０１３４】
一態様において、実装は常時データ保護（ＣＤＰ）などの技術を利用できる。それぞれポイントインタイムを表わす多くのデルタセットが作成され、それにより任意の所定のデルタとそのデルタの時間的に後のデルタを読み取ることで、そのポイントインタイムにあったときのデータのピクチャを表示することができ、それによりＣＤＰを実装することができる。デルタセットは、デルタセットが古くなると、細かい粒度のポイントインタイムの必要性が減少するという意味で、結合性である。そのようなものとして、デルタセットは結合方式で折り畳みし、時間と共に粗くする方式でデルタセットを結合させ、使用されるストレージ全体の量を減少させることができる。
【０１３５】
スナップショットの概念は、ＣＤＰに拡張することができ、その場合、デルタセットは、時間と共に粒度の変わるデルタセットをマージすることを始めるように使用され得る。このために、デルタをキャッシュから取り出し、ディスクに書き込むことができる。それによりキャッシュとディスクに保存されたデルタセットを作成することができ、つまりデルタセットストレージをディスク上に拡張する。そうすることで、システムはスナップショットとＣＤＰ形式の機能性を共に実装することができる。デルタセットと部分デルタセットの双方は、ランダムアクセスメモリあるいはディスク（あるいは、その点については、任意のメディア）に収容することができる。
【０１３６】
（デルタセットのマージ（デルタセットの結合性を使用して））
デルタセットが、データ（スナップショット）の一連のポイントインタイムイメージであるとみなされる場合、デルタセットの系統は結合性である。より新しいデルタセットによりエクスポートされたビューを変更することなく、古いデルタセットを結合することができる。
【０１３７】
これはより最近の時点で比較的細かい時間増分を表わす、ポイントインタイムイメージの系統の作成を可能にする。デルタセットが「古くなる」と、デルタセットは共にマージして、より粗い時間増分を作成し、ポイントインタイムイメージの維持に関連するオーバーヘッドを低減することができる。
【０１３８】
デルタセットを「マージ」するプロセスは、本文書に含まれる教示と提案を踏まえると、当業者には明らかであろう。複数デルタセットに所定のブロックへの変更が存在し、最新の変更が使用され得ること以外は、「ユニオン」操作できる。
【０１３９】
（リモートインポータ）
ＷＯＦストレージを遠隔的にインポートするが、ローカルＤＲ１レグを有さないサイトは、特殊な挙動を有し得る。他の本格的な参加サイトと同様に、これらのサイトはＰを計算するためにｓに寄与する。一態様において、ＰとＲの双方は正常に計算されるが、書き込むためのローカルストレージがないため、Ｅ＝Ｃ＝０である。インポートするサイトのノードは、デルタクローズ中の確認バリアメッセージでそのＲＤＭＡキーを供給する以上に、交換またはコミット段階に参加しない。
【０１４０】
（ヨッタディスクとデルタセットの統合）
本書で言及されているように、また米国特許第６，８５７，０５９号（２００５年２月１５日）、名称「Ｓｔｏｒａｇｅ  ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ｓｙｓｔｅｍ  ａｎｄ  ｍｅｔｈｏｄｓ」に開示されているように、ヨッタディスク（Ｙｏｔｔａ  Ｄｉｓｋ）は、例えば最終利用者などのホストに提示される、任意に大きいサイズ（例えば１０２４バイト）までの、需要がマップされた仮想ディスクイメージである。一実施例において、例えば、仮想ディスクイメージを用いて、仮想ディスクイメージからバックエンド物理ストレージへのマッピングが作成されるが、これは物理ストレージに対し実行される書き込み操作などのＩ／Ｏ操作の結果として、動的に行われる。ストレージの再マッピングは、バックエンドストレージが、利用者への影響を伴わずに管理されるのを、また複数のバックエンド区画が結合されて単一の仮想イメージを提供することを可能にする。ディスクイメージは、利用者に対し潜在的に非常に大きいイメージを提示して、利用者をボリュームサイズ変更問題から切り離し、ゆとりのある使用量を可能にする。このイメージは、使用量と増加率を制御し、また作成、削除、および他の候補ディスクの取り付けなどのコアシステムプロセスを維持する能力を提供する管理システムによってサポートされてもよい。
【０１４１】
ヨッタディスクは、同様の機構を用いて、デルタセットによって実装することができる。ストレージは動的に割り振られる必要があり得るので、両プロセスにバックエンドストレージアロケータを使用して、ヨッタディスクとデルタセットがほぼ同時に実装されるのを可能にし得る。デルタセットは、米国特許第６，８５７，０５９号（参照により本書に組み込まれる）に記載されている機構を使用して、例えばブロック参照に基づいて需要がマップされ解放された、スパースディスクイメージ（ｓｐａｒｓｅ  ｄｉｓｋ  ｉｍａｇｅ）を表わすことができる。相違点は、デルタセットにより提供される時間表現の系統である。
【０１４２】
（デルタセットを動的に閉じる）
デルタセットを閉じ、従って新しいデルタセットを開くために、いくつかの機構を提供することができる。かかる機構は、例えば以下を含む。
・設定された時間間隔
・トランザクションの数に基づく時間間隔
・デルタセットまたは部分デルタにおける変更（書き込み）の数に基づく時間間隔
・アプリケーショントリガー
・操作者誘発トリガー
・他のサブシステムにより誘発されたトリガー
・エラー状態により誘発されたトリガー
・上記の複合
設定された時間間隔の場合、間隔の大きさは変更条件によって調整される。例えば、過負荷状態のネットワークは、ネットワークへの影響を低下させるために、デルタセットの存続期間の増加の理由となり得る。「高度のアラート」の期間は、より細かいデルタセットをトリガーして、高いデータ依存の期間中のデータ損失の可能性を低下させ得る。
【０１４３】
もし任意のノードがデルタセットのターンオーバーを潜在的にトリガーできるのならば、これらのトリガーはさまざまなノードにわたって整合性がある必要はない。
【０１４４】
（タイムファイアウォール）
Ｍｉｎｗｅｎ  Ｊｉらによる、「Ｓｅｎｅｃａ：ｒｅｍｏｔｅ  ｍｉｒｒｏｒｉｎｇ  ｄｏｎｅ  ｗｒｉｔｅ」（ＵＳＥＮＩＸ  Ｔｅｃｈｎｉｃａｌ  Ｃｏｎｆｅｒｅｎｃｅ梗概集２５３〜２５６ページ、２００３年６月）は、タイムファイアウォールの概念を提示した。本書に記載される一実施例は、データボリュームの時間遅延読み取り専用の視点と、現在のデータビューへのマルチライタ完全アクティブ地理的分散アクセスの視点を両方含むように、かかる概念を拡張している。別の態様では、さまざまなＷＯＦ最適化はその概念と統合される。
【０１４５】
複数サイトを相互接続することの懸念のうちの１つは、論理エラー（物理的障害と対照的な）がサイト間に素早く伝搬する可能性があることである。例えば、１つのサイトに挿入されたウィルスは、データイメージを共有する全てのサイトを素早く感染させる。上述のポイントインタイム／デルタセットの概念は、データの展開への「安全」なウィンドウを提供するための効率的な機構を提供することができる。
【０１４６】
アクティブ／パッシブ方式で動作しているサイトは、アクティブデータから後れを取る、ポイントインタイムイメージ（デルタセット）に基づくデータへの読み取り専用ポータルを提供することができる。読み取り専用イメージは、既定の「安全」時間間隔を維持するデルタセットで、自動的に進行することができる。このように、正常なプロセスは、データの論理障害または破壊を検出し得る「実」データ上で継続して実行される。かかるイベントが検出された場合、「安全」な読み取り専用イメージの進行は、問題が修正されるまで中断される。
【０１４７】
「リモート」サイト（または任意のサイト）は、共にオープンな、その他あらゆるマルチライタデルタセットと同様に動作する現在のデルタセットイメージと、同時に開いている前のデルタセットへの「安全」なウィンドウを有することができる。
【０１４８】
具体的な例では、２つのエンティティが共同して自由にデータを共有することを望むが、ウィルスが１つのエンティティの１つのデータに挿入され、それから別のエンティティに蔓延する状況を回避したいかもしれない。従って、この例では、単に１つの大きいデータリポジトリを有することは好ましくない。一実施例によるソリューションは、エンティティのうちの１つが区画のみに書き込み、それからデータを別のエージェンシーにエクスポートすることを可能にし、それによりそれぞれのエンティティが、データへの異なる視点を有することとなる。１つの視点は、単に２つの正常なＷＯＦサイトがあるかのような、データの同期イメージである。ある時間遅延ポイントには、そのデータの安全なビューとみなされるある時間（３０分など）遅れである第２のボリュームが存在する。１つのエンティティに何かが起こった場合、システムは単に、問題が修復され、ウィルスが取り出されるまで保存ポインタの進行を中断することができる。データのリアルタイムイメージと、少なくとも３０分時間遅延のイメージとが両方存在することができる。遅延したイメージは、デルタセットクロージャなどによってそれ自体を更新して、それ自体をおよそ３０分遅れに維持することができ、また何かまたは誰かが問題があり更新が中止されるべきであると指示しない限り、時間の進行を継続することができる。それから遅延イメージは、そうではないよう指示されるまで、安全なポイントに留まることができる。
【０１４９】
（ネストされたデルタセット）
他のサイトと比べ、比較的近接している２つのサイトがある場合、それらの近接サイト間で、同期複製のためなどに、データのより密な転送を行うことができる。デルタセットは、対の近接サイトが頻繁な交換がおこなえるよう、ネストすることができるが、これは「メタ」デルタセットクロージャにおいてである。このメタデルタセット交換は、通常のデルタセット交換よりも粒度の細かいものとできる。より頻繁に交換することにより、サイトの近接性のため、比較的低コストでのより頻繁な更新を提供することができる。
【０１５０】
デルタセットをネストすることは、ノードのサブセットがサブデルタセットを切り替えることを可能にし、それにより地理的に近いノードは、より遠い距離で使用されるよりも密なデルタセットにより同期性をもつことができる。例えば、図１１の１１００は、地理的に近い２つのサイトのネストグループ１１０２へのグループ化を示している。これはデータ損失の可能性を最小限に抑え、障害後の瞬間的一次サイトの機会を最大限にするのに役立つ。
【０１５１】
（デルタセット全体のＲＡＩＤ）
デルタセット実装は、デルタセットを閉じたあと、全てのノード間で部分デルタセットの要素を交換し、全てのノード間で効率的に変更をミラーできる。ノード間で複製することにより変更を「安全」にすることは、単にミラーすることだけを意味する必要はない。例えば、何らかのＲＡＩＤの配置パターンが使用され得る。この場合、「Ｄ」はディスクイメージを指さず、キャッシュ内またはディスク上のノードインスタンスを指す。
【０１５２】
「安全」な配置は、物理的な現実も認識されるべきである。例えば、サイト内の複数ノードは、それらの間で１つのコピーのみを必要とし、ミラーやその他の重複コピーは別のサイトに保存されてもよい。
【０１５３】
例えば、地理的に離れてデルタセット交換をおこなっている５つのサイトがある場合、５つ全てのサイトでＲＡＩＤ１のミラーを行うよりむしろ、ＲＡＩＤ５のタイプの実装をおこなって、データをいくつかのサブセットに入れることができるが、これはデータへのアクセスを有したまま、任意のサイトが失われることを可能にする。当技術分野で知られるように、ＲＡＩＤ５は、データストライピングおよびパリティー検査などの機能を含み、それによりどのサイトもデータのフルセット有さなくてもよい。デルタセットの交換部分は、ＲＡＩＤ書き込みとして実装することができる。各ブロックをあらゆる他のホストに送信する必要はないが、その代わりＲＡＩＤストライピングに基づき、ブロックを経路指定できる。任意の所定の時間に、データは２つのサイトまたは３つのサイト、あるいは１つのサイトとチェックサムにのみ存在する場合がある。これは全てのデータの完全ブロードキャストの必要性を低減する。
【０１５４】
（デルタセットを使用してストレージプリミティブを再定義する）
従来のストレージの階層化は、順番に、キャッシュ、キャッシュ複製、仮想化、従来のＲＡＩＤを含む。これはコヒーレンシ層、デルタセット層、そして次に全てのものがどこに位置するかを指示する物理リソースアロケータを含む、別の階層化と置き換えることができる。上記のものを組み合わせて、デルタセットを取り巻くプリミティブに関して、ストレージアーカイブを再定義することが可能である。
そのため以下の従来の階層化の代わりに、
・キャッシュ
・キャッシュ複製
・仮想化
・従来のＲＡＩＤ
これらのプリミティブが以下のような新しい階層化を提示することができる。
・コヒーレンス層
・プロパティと起源を有するデルタセット
・デルタセットを物理装置にマップする、物理リソースアロケータ
さまざまな実施例の機能性は、当技術分野で公知のハードウェアとソフトウェアの任意の適切な組み合わせによって実装することができる。例えば、ソフトウェアとロジックは、複数の命令またはプログラムコードとして、さまざまな構成要素、アクセサリ、および／またはデバイスの内部あるいは外部に含有される、情報ストレージメディアに保存することができる。コードまたはその一部を含有するためのストレージメディアおよびコンピュータ可読メディアは、当技術分野で知られるあるいは使用される任意の適切なメディアを含むことができるが、これにはＥＥＰＲＯＭ、フラッシュメモリ、またはその他のメモリ技術、ＣＤ−ＲＯＭ、ＲＯＭ、ＲＡＭ、デジタル多用途ディス（ＤＶＤ）、またはその他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、またはその他の磁気ストレージデバイス、データ信号、データ伝送、またはコンピュータによりアクセスできるその他のあらゆるメディアを含む、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報のストレージおよび／または伝送のための任意の方法あるいは技術で実装される、揮発性および非揮発性の、取り外し可能および不可能なメディアなどであるがこれらに限定されない、さまざまなストレージメディアおよび通信メディアが含まれる。ここに提供される開示および教示に基づき、当業者は、さまざまな実施例の態様を実施するためのその他の手段および／または方法を理解するであろう。
【０１５５】
従って、明細書と図面は制約的なものではなく例示とみなされるべきである。しかし、請求項に記載される本発明のより広義な精神と範囲から逸脱することなく、これらにさまざまな修正および変更がなされてもよいことは明らかであろう。
【図面の簡単な説明】
【０１５６】
【図１】図１は、本発明の一実施例に従って使用できる分散ストレージシステムを示す。
【図２】図２は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図３】図３は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図４】図４は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図５】図５は、本発明の一実施例に従って、データを保存するための方法のステップを示す。
【図６】図６は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図７】図７は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図８】図８は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図９】図９は、本発明の一実施例に従って、マルチサイトのストレージシステムによる使用のためのプロセスのステップを示す。
【図１０】図１０は、本発明の一実施例に従って使用できる、地理的に離れた分散ストレージシステムを示す。
【図１１】図１１は、本発明の一実施例に従って使用できる、ネストグループを含む分散ストレージシステムを示す。
【図１】
2009501382.tif 000019
【図２】
2009501382.tif 000020
【図３】
2009501382.tif 000021
【図４】
2009501382.tif 000022
【図５】
2009501382.tif 000023
【図６】
2009501382.tif 000024
【図７】
2009501382.tif 000025
【図８】
2009501382.tif 000026
【図９】
2009501382.tif 000027
【図１０】
2009501382.tif 000028
【図１１】
2009501382.tif 000029
【国際調査報告】
2009501382.tif 000030
2009501382.tif 000031
2009501382.tif 000032