(57)【要約】      （修正有）【課題】スケーラブルなストレージ・システムのデータを保護する。【解決手段】スケーラブル・ストレージ・システムは複数のノードを含み、それぞれのノードが、１つ以上のハードディスク・ドライブおよび／またはソリッド・ステートのディスク・ドライブのような、ダイレクト・アタッチ・ストレージ（ＤＡＳ）を有する。これらノードは、ノード間通信ネットワークを介して結合され、実質的なＤＡＳ全体は、各ノードによってグローバルにアクセス可能である。ＤＡＳは、ノード内プロテクションを利用して保護されて、ノードの内の１つに故障が存在するときに、信頼性がありグローバルにアクセス可能なＤＡＳ内に格納したデータを維持する。ＤＡＳは更に、ノード内プロテクションを利用して保護されて、少なくとも１つのノードが故障した場合に、信頼性がありグローバルにアクセス可能なＤＡＳ内に格納したデータを維持する。【選択図】図１
2014053005.tif 000002
【特許請求の範囲】
【請求項１】
相互に通信する複数の処理ノードを備えるストレージ・システムであって、各前記処理ノードが、
複数のディスクと、
データを前記複数のディスクの内から選択されたディスクに書き込むように構成される少なくとも１つのホストと、
前記少なくとも１つのホストによって前記選択されたディスクに書き込まれた前記データを利用して、ローカル冗長化データを決定するように構成され、更に、前記ローカル冗長化データを前記複数のディスクの内の少なくとも１つのディスクに格納するように構成されるローカル冗長化計算ユニットと、
前記少なくとも１つのホストによって前記選択されたディスクに書き込まれた前記データを利用して、デルタ・データを決定するように構成され、更に、前記決定されたデルタ・データを少なくとも１つの別の処理ノードに送るように構成されるデルタ計算ユニットと、
前記少なくとも１つの別の処理ノードからデルタ・データを受け取るように構成され、更に、前記受け取ったデルタ・データを利用して、グローバル冗長化データを決定すると共に、前記グローバル冗長化データを前記複数のディスクの内の少なくとも１つのディスクに格納するように構成される、グローバル冗長化計算ユニットと、
を備える、システム。
【請求項２】
請求項１記載のシステムにおいて、前記ローカル冗長化計算ユニットが、更に、前記選択されたディスクが故障したときに、前記ローカル冗長化データを利用して、前記選択されたディスクに書き込まれた前記データを回復するように構成される、システム。
【請求項３】
請求項１記載のシステムにおいて、前記グローバル冗長化計算ユニットが、更に、前記少なくとも１つの別の処理ノードが故障したときに、前記グローバル冗長化データを利用して、前記少なくとも１つの別の処理ノードのデータを回復するように構成される、システム。
【請求項４】
請求項１記載のシステムにおいて、
前記ローカル冗長化データが第１のローカル冗長化データであり、
前記ローカル冗長化計算ユニットが、更に、前記グローバル冗長化データを利用して、第２のローカル冗長化データを決定するように構成され、
前記ローカル冗長化計算ユニットが、更に、前記第２ローカル冗長化データを前記複数のディスクの内少なくとも１つに格納するように構成される、
システム。
【請求項５】
請求項４記載のシステムにおいて、前記ローカル冗長化計算ユニットが、更に、前記選択されたディスクが故障したときに、前記ローカル冗長化データを利用して、前記選択されたディスクに書き込まれた前記データを回復するように構成され、
前記グローバル冗長化計算ユニットが、更に、前記少なくとも１つの別の処理ノードが故障したときに、前記グローバル冗長化データを利用して、前記少なくとも１つの別の処理ノードのデータを回復するように構成され、
前記ローカル冗長化計算ユニットが、更に、前記グローバル冗長化データを格納している前記少なくとも１つのディスクが故障したときに、前記第２ローカル冗長化データを利用して、前記グローバル冗長化データを回復するように構成される、
システム。
【請求項６】
請求項１記載のシステムにおいて、前記複数の処理ノードが、第１のグローバル符号化タイプを通じて保護された処理ノード間における前記複数のディスクの内第１セットのディスクと、第２のグローバル符号化タイプを通じて保護された処理ノード間における前記複数のディスクの内第２セットのディスクとを含み、前記第１グローバル符号化タイプが前記第２グローバル符号化タイプとは異なる、システム。
【請求項７】
請求項６記載のシステムにおいて、前記第１セットのディスクが、前記複数の処理ノードの内第１の処理ノードが有する少なくとも１つのディスクと、前記複数の処理ノードの内第２の処理ノードが有する少なくとも１つのディスクとを含む、システム。
【請求項８】
請求項１記載のシステムにおいて、前記ローカル冗長化計算ユニットが、更に、第１の消失訂正符号タイプを利用して、データを処理するように構成され、前記グローバル冗長化計算ユニットが更に、第２の消失訂正符号タイプを利用して、データを処理するように構成され、前記第１消失訂正符号タイプが前記第２消失訂正符号タイプとは異なる、システム。
【請求項９】
相互に通信する複数の処理ノードを備えるストレージ・システムであって、各処理ノードが、
複数のディスクと、
データを前記複数のディスクから選択されるディスクに書き込むように構成された少なくとも１つのホストと、
前記複数のディスクと通信するコントローラであって、
前記選択されたディスクに書き込まれた前記データを利用するローカル冗長化データを決定し、
前記ローカル冗長化データを前記複数のディスクの内少なくとも１つのディスクに格納し、
前記選択されたディスクに書き込まれた前記データを利用して、デルタ・データを決定し、
前記決定されたデルタ・データを前記処理ノードの内少なくとも別の１つに送り、
前記処理ノードの内少なくとも別の１つからデルタ・データを受け取り、
前記受け取ったデルタ・データを利用して、グローバル冗長化データを決定し、
前記グローバル冗長化データを前記複数のディスクの内少なくとも１つのディスクに格納する、
ように構成されたコントローラと、
を含む、システム。
【請求項１０】
請求項９記載のシステムにおいて、前記コントローラが、更に、
前記選択されたディスクが故障したときに、前記ローカル冗長化データを利用して、前記選択されたディスクへ書き込まれた前記データを回復し、
前記少なくとも１つの他のノードが故障したときに、前記グローバル冗長化データを利用して、前記少なくとも１つの他の処理ノードのデータを回復する、
ように構成された、システム。
【請求項１１】
請求項１０記載のシステムにおいて、前記ローカル冗長化データが第１のローカル冗長化データであり、前記コントローラが更に、
前記グローバル冗長化データを利用して、第２のローカル冗長化データを決定し、
前記第２ローカル冗長化データを前記複数のディスクの内少なくとも１つのディスクに格納し、
前記グローバル冗長化データを格納している前記少なくとも１つのディスクが故障したときに、前記第２ローカル冗長化データを利用して、前記グローバル冗長化データを回復する、
ように構成される、システム。
【請求項１２】
請求項９記載のシステムにおいて、前記複数の処理ノードが、第１のグローバル符号化タイプを通じて保護された前記処理ノードにおける前記複数のディスクの内第１セットのディスクと、第２のグローバル符号化タイプを通じて保護された前記処理ノードにおける前記複数のディスクの内第２セットのディスクとを含み、前記第１グローバル符号化タイプが前記第２グローバル符号化タイプとは異なる、システム。
【請求項１３】
請求項１２記載のシステムにおいて、前記第１セットのディスクが、前記複数の処理ノードの内第１の処理ノードが有する少なくとも１つのディスクと、前記複数の処理ノードの内第２の処理ノードが有する少なとも１つのディスクとを含む、システム。
【請求項１４】
請求項９記載のシステムにおいて、前記コントローラが更に、
第１の消失訂正符号タイプを利用して、前記ローカル冗長化データを決定し、
第２の消失訂正符号タイプを利用して、前記グローバル冗長化データを決定する
ように構成され、前記第１消失訂正符号タイプが前記第２消失訂正符号タイプとは異なる、システム。
【請求項１５】
ストレージ・プロテクションの方法であって、
複数の処理ノードの内第１の処理ノードが有する複数のディスクから選択されたディスクにデータを書き込むステップであって、前記複数の処理ノードが相互に通信するステップと、
前記選択されたディスクに書き込まれた前記データを利用して、ローカル冗長化データを決定するステップと、
前記ローカル冗長化データを前記複数のディスクの内少なくとも１つのディスクに格納するステップと、
前記選択されたディスクに書き込まれた前記データを利用して、第１のデルタ・データを決定するステップと、
前記第１デルタ・データを少なくとも１つの他の処理ノードに送るステップと、
第２のデルタ・データを少なくとも１つの別の処理ノードから受け取るステップと、
前記第２デルタ・データを利用して、グローバル冗長化データを決定するステップと、
前記グローバル冗長化データを前記複数のディスクの内少なくとも１つのディスクに格納するステップと、
を含む、方法。
【請求項１６】
請求項１５記載の方法において、更に、
前記選択されたデータが故障したときに、前記ローカル冗長化データを利用して、前記選択されたディスクに書き込まれた前記データを回復するステップと、
少なくとも１つの他の処理ノードが故障したときに、前記グローバル冗長化データを利用して、前記少なくとも１つの他の処理ノードのデータを回復するステップと、
を含む、方法。
【請求項１７】
請求項１６記載の方法において、前記ローカル冗長化データが第１のローカル冗長化データであり、前記方法が更に、
前記グローバル冗長化データを利用して、第２のローカル冗長化データを決定するステップと、
前記第２ローカル冗長化データを前記複数のディスクの内少なくとも１つのディスクに格納するステップと、
前記グローバル冗長化データを格納している前記少なくとも１つのディスクが故障したときに、前記第２ローカル冗長化データを利用して、前記グローバル冗長化データを回復するステップと、
を含む、方法。
【請求項１８】
請求項１５記載の方法であって、更に、
第１のグローバル符号化タイプを利用して、前記処理ノードの第１セットのディスクを保護するステップと、
第２のグローバル符号化タイプを利用して、前記処理ノードの第２セットのディスクを保護するステップとを含み、
第１グローバル符号化タイプが前記第２グローバル符号化タイプとは異なる、方法。
【請求項１９】
請求項１８記載の方法において、前記第１セットのディスクが、前記第１処理ノードが有する少なくとも１つのディスクと、前記複数の処理ノードにおける第２の処理ノードが有する少なくとも１つのディスクとを含む、方法。
【請求項２０】
請求項１５記載の方法であって、更に、
第１の消失訂正符号タイプを利用して、前記ローカル冗長化データを決定するステップと、
第２の消失訂正符号タイプを利用して、前記グローバル冗長化データを決定するステップとを含み、
前記第１消失訂正符号タイプが第２消失訂正符号タイプとは異なる、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  ダイレクト・アタッチ・ディスクを有するスケーラブル・ストレージ・システムは、データ・プロテクションのために冗長機構を必要とする。単一のサーバのような単一ノードにおいて、ＲＡＩＤ−５，ＲＡＩＤ−６その他のＲＡＩＤレベル、またはこれらのバリエーションのようなダイレクト・アタッチ・ストレージ（ＤＡＳ;directly-attached storage）を保護するために様々な技術が使用される。
【従来技術】
【０００２】
分散システムにおいて、または大規模ＪＢＯＤの複合体のような大規模なストレージ・システムにおいては、消失符号化（erasure-coding）技術が用いられ、多数のディスクにわたり誤り訂正符号を配布することによるプロテクションを提供する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、消失符号化では、大量のデータを移動(ship)させる（すなわち送受信する）ことを必要とする。実施形態の中には、ｎ個のドライブの内のｒ個に対処するために、データがｒ個の別個のディスクで更新されなければならないものもある。ノード故障に対してレジリエンシと組み合わされるときに、上記システムは、冗長化の量の点で、および／または更新のために若しくは回復(recovery)のためにノード間で移動しなければならないデータ量の点で、非常に高価となりがちである。
【課題を解決するための手段】
【０００４】
[0002]  本開示の実施形態は、相互に通信する複数の処理ノードを備えるストレージ・システムに向けられる。各処理ノードは、少なくとも１つのホストと通信する複数のディスクを含む。ホストは、複数のディスクの内から選択されたディスクにデータを書き込むように構成される。ローカル冗長化計算ユニットは、ホストによって選択されたディスクに書き込まれたデータを利用して、ローカル冗長化データを決定するように構成される。ローカル冗長化計算ユニットは更に、ローカル冗長化データを複数のディスクの内の少なくとも１つのディスクに格納するように構成される。デルタ計算ユニットは、ホストによって選択されたディスクに書き込まれたデータを利用して、デルタ・データを決定するように構成される。デルタ計算ユニットは更に、デルタ・データを少なくとも１つの別の処理ノードに送るように構成される。グローバル冗長化計算ユニットは、少なくとも１つの別の処理ノードからデルタ・データを受け取るように構成される。グローバル冗長化計算ユニットは更に、受け取ったデルタ・データを利用して、グローバル冗長化データを決定すると共に、グローバル冗長化データを複数のディスクの内少なくとも１つのディスクに格納するように構成される。
【０００５】
[0003]  先に説明した概要的な説明および後に説明する詳細な説明は、本開示において必ずしも拘束されるものではないことが理解されるべきである。添付の図面は、明細書の一部に組み込まれてその一部を構成し、本開示の実施形態を例示するものである。
【０００６】
[0004]  本開示の実施形態は、添付の図面を参照することにより、当業者にとってより良く理解されるものとなる。
【図面の簡単な説明】
【０００７】
【図１】図１は、本開示の一実施形態によるスケーラブル・ストレージ・システムを例示するブロック図である。
【図２】図２は、本開示の一実施形態によるホスト・データ書き込みを処理する方法を例示するフロー図である。
【図３】図３は、本開示の一実施形態によるデルタ・データを処理する方法を例示するフロー図である。
【発明を実施するための形態】
【０００８】
[0005]  これより、添付の図面に示し開示される実施形態について詳細な参照を行う。
[0006]  図１から図３は、少なくとも１つのスケーラブル・ストレージ・システムを保護するためのシステムおよび方法の実施形態を全般的に示している。スケーラブル・ストレージ・システムの幾らかの課題(challenge)として、全データへのグローバル・アクセス、ディスク故障からのレジリエンシ、および１つ以上の処理ノードの故障に対処するための機構の組み合わせを提供することが含まれる。上記課題の少なくとも幾らかは、ノード内部レベルでの冗長性をバランシングすることにより解決され、ハードディスク・ドライブ（ＨＤＤ）故障のようなノード内部での故障から保護し、ノード内部レベルでの冗長化によりノード内部プロテクトの故障のような、１つ以上のノードの故障から保護する。実施形態の中には、配布による方法におけるノードのキャッシュは更に、各々のノードのローカル性能を改良させると共に、データ・プロテクションのために使用される書き込みについてより早期の承認を可能にすることにより、スケーラブル・ストレージ・システムのシステム・レベルでの性能を改善させるものもある。
【０００９】
[0007]  図１は、限定しないが、ダイレクト・アタッチ・ストレージ（ＤＡＳ）システムのようなストレージ・システム１００の一実施形態を示す。システム１００は、サーバといった複数の処理ノード１０２を含む。処理ノード１０２の各々は、それぞれの（すなわち、ローカルの）ホスト１０４（例えば、１つ以上のプロセッサまたはＣＰＵ）、およびそれぞれの（すなわち、ローカルの）ＤＡＳ１０６（例えば、複数のディスク・ドライブ１０６）を含む。様々な実施形態では、ローカルのＤＡＳ１０６は、１つ以上のそれぞれの（すなわちローカルの）Ｉ／Ｏコントローラ１０８を通じてローカル・ホスト１０４に通信により接続される。ストレージ１０６Ａから１０６Ｚの実質的な全体（例えば全て）は、全ての処理ノード１０２にとってグローバルに可視化されている。特定の処理ノード１０２Ａが有するＤＡＳ１０６Ａから１０６Ｃは、特定の処理ノード１０２Ａでは、それぞれ「ローカル・ストレージ」と称される。他の処理ノード１０２Ｂから１０２Ｍが有するＤＡＳ１０６Ｄ―１０６Ｚは、特定の処理ノード１０２Ａでは、それぞれ「外部(foreign)ストレージ」と称される。処理ノード１０２は、限定しないが、シリアルにアタッチされた小規模コンピュータ・システム・インターフェイス（ＳＡＳ）のスイッチング・インターコネクトのようなノード間の通信ネットワーク１１６を介して相互に通信する。処理ノード１０２は、ノード間通信ネットワーク１１６を通じて、ストレージ１０６Ａから１０６Ｚの実質的な全体へのアクセス権を有する。しかしながら、実施形態の中には、特定の処理ノード１０２Ａのそれぞれのローカル・ストレージ１０６Ａから１０６Ｃへのアクセスは、それぞれの外部ストレージ１０６Ｄから１０６Ｚへのアクセスよりもより高速でおよび／またはより高い帯域幅なものもある。実施形態の中には、ノード間通信１１６は、少なくとも１つのＳＡＳファブリック、イーサネット（登録商標）・ネットワーク、ＩｎｆｉｎｉＢａｎｄネットワーク、周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ;peripheral component interconnect express）相互接続ネットワーク、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、私有(proprietary)ネットワーク、または上記の任意の組合せも含むものもあるが、これに限定されない。
【００１０】
[0008]  実施形態の中には、システム１００は更に、ロッキング機構および／またはコヒーレンシ機構を含むものもあり、ストレージ１０６の共有を容易にする。例えば、ディレクトリ・ベースのキャッシュ機構では、データの所有者追跡および／または変更が可能になる。実施形態の中には、処理ノード１０２の各々は、ディスク・キャッシュのようなキャッシュを含むものもあり、頻繁にアクセスするデータを格納する。様々な実施形態によれば、頻繁にアクセスするデータの内幾らかは、処理ノードにとってローカルにあり、および／または頻繁にアクセスするデータの幾らかは外部にある。実施形態の中には、ディスク・キャッシュは、ソリッド・ステートのディスク・ドライブ（ＳＳＤ）を含むものもあるが、これに限定されない。
【００１１】
[0009]  マルチ・ノードのストレージ・システム１００において懸念される幾らかの故障のシナリオには、次のものが含まれる。すなわち、
・処理ノード１０２が有するＨＤＤまたはＳＳＤｓ１０６のような１つ以上の入出力（Ｉ／Ｏ）デバイスの故障、
・処理ノード１０２の１つにおける１つ以上のＩ／Ｏデバイス１０６への経路の故障
・ホスト１０４またはノード内部の通信インフラストラクチャのような幾らかまたは全ての処理ノード１０２の故障、
・処理ノード１０２を結合する、ノード間通信ネットワーク１１６のような上位レベルの通信インフラストラクチャの故障、
である。これら故障は、ノード内故障またはノード間故障に分類される。ノード内故障は、処理ノード１０２の少なくとも一部分が使用不可能になるが、処理ノード１０２にとってローカルにあるデータへのグローバル・アクセスを含んだ処理ノード１０２の継続的な動作を妨げるものではない。ノード間故障は、処理ノード１０２を、すなわち処理ノード１０２にとってローカルにある少なくとも一部のデータを使用不可能にするものである。ノード内故障の中には、影響を受けた処理ノード１０２のレベルを固定可能であり、（見込まれる性能への影響を除いて）他の処理ノード１０２にはグローバルに不可視となるというものもある。
【００１２】
[0010]  故障はまた、ハード（例えばソリッドの、反復可能な）のもの、或いはソフト（例えば１回限りの、一時的な、電源オンオフ(power-cycle)の後には去る(go away)）のものとして特徴付けられる。多くのノード故障は、ソフトウェアのクラッシュのようなソフトのものであり、つまり、一時的か期間が短い。ディスク故障はまた、ソフト（例えば、新データを書き込むことによって回復可能であり、一時的に訂正不可能なエラー）のものか、或いはハード（例えば、ヘッド・クラッシュによるディスク故障）のもののいずれかである。故障期間は、つまり、ハード対ソフトの故障に分類され、様々なタイプの故障の内で同時発生したいくつのエラーが考慮されるかに基づいて計算される故障の確率に関係する。実施形態の中には、ほとんどの処理ノードの故障がソフト故障である場合に複数の処理ノードの故障を同時に有する確率が、ほとんどの処理ノードの故障がハード故障である場合に複数の処理ノードの故障を同時に有する確率よりも低くなるものもある。
【００１３】
[0011]  システム・レベルの故障は、複数ノード・ストレージ・システム１００の故障であり、例えば、任意の処理ノード１０２に格納されたホスト書き込みされた（すなわち、非冗長化）データについての回復不可能な損失、または特定の数の処理ノード１０２よりも多い数の損失である。実施形態の中には、システム１００が、少なくとも部分的には、システム・レベル故障の確率を特定の値より小さいものに低減させるように設計されるものもある。
【００１４】
[0012]  単純な消失符号化による解決策では、多い量の冗長化および／またはデータ移動を必要としがちである。例えば、ｍ個のノード１０２を考える。それぞれがｎ個のディスク１０６（例えばＨＤＤまたはＳＳＤ）を含み、つまり、合計ｍ＊ｎ個のディスク１０６を有する。任意の３つのディスク１０６の故障からも保護するために、ディスク１０６の内の少なくとも３つについては冗長化データを含まなければならない。任意の他の（ｍ＊ｎ−３）個のデータ（すなわち非冗長化の）ディスク１０６に対する任意の書き込みについても、３つの冗長化ディスク１０６の更新を必要とする。プロセッサのようなホスト１０４は、データ・ディスク１０６の内１つに小さいランダムな書き込み（例えば４ＫＢや８ＫＢの書き込み）を行うときに、４つの類似サイズの書き込みを実施しなければならず、また、４つの書き込みの内３つは、計算（すなわち、ホスト書き込みより前の旧データおよびホストにより書き込まれる新データに基づく冗長化データの更新）を伴う。更にまた、１つ以上のノード故障が消失符号化によって対処されることになる場合には、好ましくは、３つの冗長化ディスク１０６は異なるノード１０２上に位置する。したがって、ホストの書き込みは次のものを必要とする。すなわち、選択したデータ・ディスクを含むノード１０２Ａにおける選択されたデータ・ディスク１０６Ａからの旧データの読み出し、新データを選択データ・ディスク１０６Ａに書き込むことによる、旧データのホスト１０４によって提供される新データへの置き換え、旧データと新データの間のデルタといった関数の計算、異なるノード１０２上に位置することもある３つの冗長化ディスク１０６へのデルタの移動、冗長化ディスク１０６の内の１つを含んだ各ノード１０２に対する旧バージョンの冗長化データの読み出し、デルタを利用している冗長化データへの更新の決定、そして、新バージョンの冗長化データの書き戻し(write back)である。複数のノード１０２へのデルタの移動は、レイテンシおよび電力を消費する。実施形態の中には、ホスト書き込みが「安全」になるまでホスト書き込を承認できず、また、冗長化されたデータの書き込みが終了するまでホスト書き込みデータは安全ではないために、更なる遅延が発生するものもある。
【００１５】
[0013]  ＲＡＩＤのようなノード１０２内での故障についてよく機能する単一のプロテクションによる解決策は、複数のノード１０２にわたり十分なものではなくてもよい。先の例により説明した消失符号化のようなグローバルの解決策は、ノード１０２間で移動するデータ量の点で、あまりに高コストとなる場合がある。更にまた、様々な故障シナリオには、異なる見込み(likelihood)もある。通例、システム故障を削減させる確率は、ディスク故障を削減させる確率またはノード故障を減少させる確率とは別に、これらよりも重要である。実施形態の中には、システム１００が次の内１つ以上を実現するように構成されるものもある。すなわち、ノード間で移動するデータの少量化、性能の向上、コストの削減（例えば、所与のシステム・レベルの故障確率に対し必要とされる冗長化量化の低減化）、低電力化、低レイテンシ化、その他電力、コストおよび性能の計量(metrics)である。例えば、個々のハードディスク・ドライブ１０６の故障が非常に見込まれる。実施形態の中には、それ故、システム故障の確率が、より多くの冗長化を提供することにより低減されて、その結果ハード・ディスク故障やより少ないノード故障から保護するものもあり、これにより、余り性能を譲歩することなく、すなわち高いデータ移動性や冗長性コストを必要としつつ、システム故障の確率を低減させる。
【００１６】
[0014]  一実施形態（図１参照）では、システム１００は、次のものを含む。すなわち、ノード１０２内のＩ／Ｏデバイス１０６に格納されたデータを保護するための第１タイプのプロテクション（すなわち、「内側」、「ローカル」「ノード内」のプロテクション）、および１つ以上のノード１０２の故障から保護するための第２タイプのプロテクションである。先に説明したスケーラブル・ストレージ・プロテクション方式は、保護のため、そして、回復のためにノード１０２間で移動しなければならないデータ量を減少させる。更にまた、デルタ・キャッシュ機構は、ホスト書き込みが安全に格納されたという承認に必要となる時間を削減させる。
【００１７】
[0015]  実施形態の中には、システム１００が、別個の機構１１０，１１４を含み、ローカル（ノード内）の故障対グローバル（ノード間）の故障から保護するものもある。更なる実施形態では、ローカル・プロテクション機構１１０およびグローバル・プロテクション機構１１４がそれぞれ選択されて、それぞれの故障確率を低減させ、これによりシステム・レベル故障確率の全体を特定のレベルに引き下げる。様々な実施形態では、ローカル・プロテクション機構１１０およびグローバルなプロテクション機構１１４がそれぞれ選択されて、冗長化したデータ・ストレージおよび故障からの回復のためにノード１０２間で移動するデータの量を低減させる。
【００１８】
[0016]  実施形態の中には、スケーラブル・ストレージ・プロテクションを具備するシステム１００が、コスト面での優位性を供与するものもある。例えば、先に説明した単純なもの、ｎ個のディスク１０６をそれぞれ有するｍ個ノード１０２を有する消失符号化、および３つのディスク故障から保護する要件について考慮し、冗長化ディスク１０２は全て異なるノード１０２上にあると想定する。この単純な消失符号化アプローチは、冗長化のために、他のノード１０２への書き込みの３倍の量のデータを移動させる。スケーラブル・ストレージ・プロテクションを備えたシステム１００が提供するマルチ・レイヤ・プロテクションは、柔軟なバランシングを可能にする。例えば、実施形態の中には、システム１００が、様々な故障可能性（例えばハード故障対ソフト故障）または費用要因（例えばデータ移動についての費用）に基づいて設計されるものもある。
【００１９】
[0017]  先に説明した単純な消失符号アプローチの代替として、スケーラブル・ストレージ・プロテクションを具備するシステム１００の例示的な実施形態では、各ノード１０２が有するｎ個のディスク１０６のうちの２個はそのノード１０２の冗長化ローカル・データを含み、且つ、ｍ個のノード１０２（すなわち冗長化ノード）の内の１つ以上はグローバルに冗長化したデータを含む。１つの冗長化ノード１０２に関する一実施形態では、ホスト１０４が実行する小さいランダムな書き込み（例えば４ＫＢまたは８ＫＢの書き込み）をデータ・ディスク１０６の内１つに行なうときに、合計４つの類似サイズの書き込みを実施しなければならないが、類似サイズの書き込みの内３つはローカルである（すなわち、ホスト書き込みデータおよび２つのローカル冗長化データ書き込みである）。類似サイズの書き込みの内１つのみしか冗長化ノード１０２に移動されてはならない。単純な消失符号化の例と比較して、移動されることになるデータの量は削減される（例えば、２／３程度）。先に説明した例では、スケーラブル・ストレージ・プロテクションを具備するシステム１００は、少なくとも３つのディスク故障に対処することが可能である。実施形態の中には、システム１００がノード１０２当たり２つのディスク故障に対処することが可能なものもある。
【００２０】
[0018]  先に説明した例では、１つのノード１０２上の３つのディスク故障は、実質的に、ノード１０２の故障と同等または類似である。何故ならば、各ノード１０２が有する２つの冗長化ディスク１０６は、ノード１０２においてｎ個のディスク１０６の内２個について訂正することしかできないからである。実施形態の中には、故障しているノード内プロテクションの確率は、故障しているノード１０２の確率に含まれ、また、ノード間プロテクションの要求レベルの決定に少なくとも部分的に利用される。単純な消失符号化アプローチは、最大３つのノード故障に対処することが可能であるが、その結果、ノード１０２が、より高いパーセンテージでグローバルに冗長化されたデータを処理するのに使用される。ノード故障確率がディスク故障確率と比較して小さい場合、スケーラブル・ストレージ・プロテクションは、代替としては、より低いコストで、少なくとも１つのＩ／Ｏ移動および冗長化において同等であるかまたはより良好なプロテクションを提供する。
【００２１】
[0019]  先に説明した例では、スケーラブル・ストレージ・プロテクションを具備するプロテクションを具備するシステム１００について、単純な消失符号化により保護されたシステムと比較して少なくとも幾らかの利点が示される。しかしながら、この例では、いかなる方法であれ、本開示を限定することを意図するものではない。様々な実施形態によれば、システム１００は、本願明細書において全般的に説明するスケーラブル・ストレージ・プロテクション方式を実施する、選択されたパラメータや構成の如何なる組み合わせをも含む。一実施形態では、システム１００は、ｍ個のノード１０２を含み、それぞれがｎ個のディスク１０６を有する。システム１００は、ｋ個のノード故障（例えばｋ＝２）を存続させる(survive)ように構成される。ｇ個のディスクにおける全グループは、少なくともｈ個の冗長化ディスク１０６を含み、その結果、適切にディスク・レベルでの故障に対処する（例えば、ｇ＝１０のディスク１０６の内ｈ＝３は冗長化される）ことができる。
【００２２】
[0020]  実施形態の中には、ｈ個の適切なスケーリングによりｇ＝ｎとなるものもある。したがって、システム１００は、全部でｍ＊ｎ個のディスク１０６を含み、そして、ディスク１０６の内のｈ＊ｍ個は冗長化データを格納する。ｍ個のノード故障の内ｋ個を存続させるために、１つのコードワード(codeword)（例えば１つのプロテクション・グループ）における冗長化ディスク１０６は、少なくともｋ個の異なるノード１０２上にある。ｍ個のノード１０２はいずれも、同一コードワードにより保護されるｈ＊ｍ／ｋ個の冗長化ディスク１０６よりも多くのものを有することができない。さもなければ、ｋ個のノード故障は、生存可能としなくてもよい。一実施形態では、それ故、ｎはｈ＊ｍ／ｋより大きく、すなわち冗長化データはｋ個のノード１０２より多くのノード上に存在しなければならない。例えば、ｎ＝１０、ｍ＝８、ｈ＝３およびｋ＝２である場合には、８０個の内の２４個の冗長化ディスク１０６が必要となる。しかしながら、ノード１０２当たり１０つのディスク１０６しかないため、冗長化ディスクは、ｋがわずか２である場合であったとしても、少なくとも３つのノード内で展開されなければならない。
【００２３】
[0021]  消失符号化は、信頼性の要件を満たすことを可能にすることができるが、しかしながら、次のことを含む多くの欠点を有する。すなわち、ｇ個の消失符号の内ｈ個は、計算結果として高価である。ｈがｋよりも大きい場合には、１つのノード１０２が複数の消失符号の更新を処理しなければならない（バランシングされていない計算結果へと導く）か、または必要となるＩ／Ｏ移動は、ｋではなくｈに比例する。ｎがｈ＊ｍ／ｋより小さい場合には、Ｉ／Ｏ移動はｋに比例したものよりも大きい。単一のディスク故障からの回復でさえ、一般的にはＩ／Ｏ移動を必要とする。更にまた、少なくとも１つの故障ディスク１０６を有することが一般的であり、且つ回復に対してＩ／Ｏ移動がしばしば必要とされるために、システム・レベル性能は貧弱となるのが通常である。
【００２４】
[0022]  スケーラブル・ストレージ・プロテクションを具備するシステム１００は、ディスク故障といったノード内故障から保護するためのローカル冗長化を用いたノード内プロテクション機構１１０、およびノード故障といったノード間故障から保護するためのグローバル冗長化を用いたノード間プロテクション機構１１４を含む。様々な実施形態によれば、システム１００は、次の内１つ以上を含む幾つかの利点を提供する。すなわち、Ｉ／Ｏ移動は、選択した数の存続可能なノード故障に基づくものであり、また、ディスク故障に対処することとは独立(orthogonal)となること、ハード・ディスク故障は、ノード内プロテクションによって回復可能な特定の信頼性レベルまで、Ｉ／Ｏ移動なしでローカルに回復可能であること、より短く、より単純な符号化タイプがシステム故障確率について特定のレベルを達成するのに用いられ、より効率的なハードウェアを許容すること、並びに、他の性能、効率および／またはスケーラビリティにおける利点である。
【００２５】
[0023]  ノード内プロテクション機構１１０は、１つ以上の符号化タイプ、例えば次の内の１以上を含む。すなわち、ＲＡＩＤ−１，ＲＡＩＤ−２，ＲＡＩＤ−３，ＲＡＩＤ−４，ＲＡＩＤ−５，ＲＡＩＤ−６その他如何なるＲＡＩＤレベル、リード・ソロモン(Reed-Solomon)符号、ファウンテン(fountain)符号、ラプター(Raptor)符号、レート・レス(rate-less)消失符号またはオンライン符号のような消失符号、並びに上記の任意の組み合わせである。ノード間プロテクション機構１１４は、１つ以上の符号化タイプ、例えば次の内の１つ以上を含む。すなわち、ＲＡＩＤ−１，ＲＡＩＤ−２，ＲＡＩＤ−３，ＲＡＩＤ−４，ＲＡＩＤ−５，ＲＡＩＤ−６その他のいかなるＲＡＩＤレベル、リード・ソロモン符号、ファウンテン符号、ラプター符号またはオンライン符号のような消失符号、並びに上記の任意の組み合わせである。
【００２６】
[0024]  ノード内プロテクション機構１１０またはノード間プロテクション機構１１４における１つのインスタンスによって保護される複数のディスク１０６に格納されるデータは、コードワード(codeword)と称される。例えば、その内１つがＲＡＩＤ−５で冗長化された５つのディスクに格納されたデータは、それぞれ読み出し可能なおよび訂正可能な別個のデータのセットごとに１つのコードワードを表わす。ＲＡＩＤ−５が１バイト・レベルで操作可能である一方、多くのディスクは、５１２Ｂのデータのセクタを読み出すことのみが可能である。したがって、このような場合には、各コードワードは、数多くの５１２Ｂセクタとなり、１セクタは５つのディスクのそれぞれからである。
【００２７】
[0025]  実施形態の中には、ノード内プロテクション機構１１０およびノード間プロテクション機構１１４の両方が、同一の符号化タイプについて構成されるものもある。例えば、様々な実施形態では、ノード内プロテクション機構１１０およびノード間プロテクション機構１１４は、ＲＡＩＤ−６におけるような２−消失訂正(two-erasure-corrcting)符号を用いるか、または共にＲＡＩＤ―５におけるような１−消失訂正(one-erasure-corrcting)符号を用いる。他の実施態様では、ノード内プロテクション機構１１０およびノード間プロテクション機構１１４は、異なる符号化タイプを用いる。例えば、幾つかの使用シナリオでは、ノード内プロテクション機構１１０は、２−消失訂正符号を用い、また、ノード間プロテクション機構１１４は、ＲＡＩＤ―５におけるような１−消失訂正符号を用いる。
【００２８】
[0026]  ノード内プロテクション機構１１０およびノード間プロテクション機構１１４の計算は、それぞれの符号化タイプによるものである。例えば、１−消失訂正ＲＡＩＤ−５符号化タイプは、ＸＯＲ計算を必要とし、また、ＲＡＩＤ−６符号化タイプは、リード・ソロモン符号のような２−消失訂正符号による計算を必要とする。
【００２９】
[0027]  システム１００における複数の処理ノード１０２の各々は、各ノード１０２が有する複数のディスク１０６と通信する、プロセッサのような少なくとも１つのホスト１０４を含む。実施形態の中には、ホスト１０４が、少なくとも１つの単一コアまたは複数コアのＣＰＵを含むものもあるが、これに限定されない。実施形態の中には、Ｉ／Ｏコントローラ１０８は、ディスク１０６をホスト１０４に結合するように構成されるものもある。各ノード１０２は、キャッシュ・メモリおよび／またはＤＲＡＭメモリのようなローカルメモリを更に含む。各ノード１０２は更に、ハードディスク・ドライブおよび／またはソリッド・ステート・ディスクのような１つ以上のディスク１０６のそれぞれのセットを含む。各ノード１０２は更に、ネットワーク・インターフェイス・カードまたは当該技術分野で公知のネットワーク処理システムに存在する任意の他のコンポーネントのようなノード間通信機構が、ノード間通信ネットワーク１１６を通じて通信によりノードを結合させる。
【００３０】
[0028]  実施形態の中には、ホスト１０４は、１つ以上のマルチコアｘ８６アーキテクチャＣＰＵチップを含むものもある。いくつかの実施形態では、入出力コントローラ１０８がＲａｉｄ−Ｏｎ−Ｃｈｉｐコントローラ（ＲＯＣ）を含み、また、ホスト１０４がＰＣＩｅ相互接続を通じてＩ／Ｏコントローラ１０８に結合されるものもある。実施形態の中には、１つ以上のディスク・ドライブ１０６が、１つ以上のＳＡＳおよび／またはＳＡＴＡハードディスク・ドライブを含むものもある。実施形態の中には、１つ以上のディスク・ドライブ１０６が、１つ以上のソリッド・ステート・ディスク・ドライブを含むものもある。実施形態の中には、ノード間通信機構が、Ｉ／Ｏコントローラ１０８に統合されるものもある。例えば、ＲＯＣは、ＳＡＳおよび／またはＳＡＴＡ接続性をローカル・ディスク１０６へ、およびＳＡＳファブリックを通じて他の処理ノード１０２のディスク１０６への両方に提供する。
【００３１】
[0029]  各処理ノード１０２は更に、それぞれ、ノード１０２が有するディスク１０６に格納されるデータのプロテクションのために冗長化データを決定するように構成される、ノード内冗長化計算ユニット１１０を含む。各処理ノード１０２は更に、それぞれ、ノード内冗長化計算ユニット１１０によってローカルに使用され、および／またはノード１０２が有するディスク１０６に格納されるデータの書き込みに応答して、他のノード１０２へ送られるデルタ・データを決定するように構成されるデルタ冗長化計算ユニット１１２を含む。各処理ノード１０２は更に、他のノード１０２が有するディスク１０６に格納されるデータのプロテクションのために冗長化データを決定するように構成されるノード間冗長化計算ユニット１１４を含む。
【００３２】
[0030]  実施形態の中には、１つ以上の冗長化計算ユニット１１０，１１２，１１４が、単一の機構に結合され、および／または１つ以上のコンポーネントを共有する。例えば、冗長化計算ユニット１１０，１１２，１１４は、様々な実施形態によれば、１つ以上の電子回路や少なくとも１つのプロセッサにより担持媒体から実行されるプログラム命令のような、別個のまたは結合したハードウェア、ソフトウェアおよび／もしくはファームウェアのモジュールに組み込まれる。実施形態の中には、コントローラ１０８は、冗長化計算ユニット１１０，１１２，１１４の１つ以上を含み、および／または冗長化計算ユニット１１０，１１２，１１４の１つ以上の関数を実行するように構成されるものもある。
【００３３】
[0031]  実施形態の中には、第１のノード内プロテクション機構（例えばＲＡＩＤ−５）は、第１の処理ノード１０２Ａが有するディスク１０６の第１のサブセットを保護し、また、第１のノード内プロテクション機構と異なる第２のノード内プロテクション機構（例えばＲＡＩＤ−６）が、第１の処理ノード１０２Ａのディスク１０６の第２のサブセットを保護するものもある。更なる実施形態では、ディスク１０６の第１サブセットは、ディスク１０６の第２のサブセットとは異なるタイプについてのものである。例えば、ディスク１０６の第１サブセットは、１つ以上のＨＤＤを含むことができ、また、ディスク１０６の第２サブセットは、１つ以上のＳＳＤを含むことができる。実施形態の中には、第１のノード間プロテクション機構は、ディスク１０６の第１サブセットにおけるディスク１０６についてノード間プロテクションを提供し、また、第２のノード間プロテクション機構（第１ノード間プロテクション機構とは異なる）は、ディスク１０６の第２サブセットにおけるディスク１０６についてノード間プロテクションを提供するものもある。
【００３４】
[0032]  実施形態および／または使用シナリオの中には、処理ノード１０２の内の１つが有する２個以上のディスク１０６が、ノード間プロテクション機構１１４における同一のコードワードによって保護されるものもある。他の実施形態および／または使用シナリオでは、任意の処理ノード１０２のディスク１０６の内１つのみしか、ノード間プロテクション機構１１４において同一のコードワード内にない。
【００３５】
[0033]  実施形態の中には、第１処理ノード１０２Ａのホスト１０４Aによる、第１処理ノード１０２Ａのディスク１０６の内１つへのデータの書き込みが、第１処理ノード１０２Aの他のディスク１０６に格納された第１のローカル（すなわちノード内）冗長化データを更新させるものもある。ホスト・データ書き込みはまた、第２処理ノード１０２Ｂのディスク１０６の内少なくとも幾つかに格納されたグローバル（すなわちノード間）冗長化データを更新させる。実施形態の中には、グローバル冗長化データの更新が、第２処理ノード１０２Ｂの他のディスクに格納された第２のローカル冗長化データを更新させるものもある。実施形態の中には、ホスト・データ書き込みが、第１処理ノード１０２Ａが故障した場合であっても回復可能となるときのようにグローバル冗長化データが安全点(point of safety)に到達したのに引き続いて承認されるものもある。
【００３６】
[0034]  図２および３は、それぞれ、データ書き込みを処理する方法２００、およびスケーラブル・ストレージ・プロテクションを提供するためにデルタ・データを処理する方法３００について示している。システム１００は、方法２００および３００を明示するもの(manifestation)であり、そして、システム１００、または方法２００若しくは３００の実施形態に関して記載される全てのステップや特徴は、システム１００並びに方法２００および３００に適用可能である。しかしながら、本願明細書では、方法２００または３００における１つ以上のステップが当該技術分野において他の公知の手段を介して実行できることに留意すべきである。本願明細書におけるシステム１００の実施形態は、方法２００または３００に何れのやり方でも限定して解釈してはならない。
【００３７】
[0035]  ステップ２０２では、データは、第１の処理ノード１０２Ａのホスト１０４Ａによって、選択された論理ブロック・アドレス（ＬＢＡ）に書き込まれる。ステップ２０４では、選択されたＬＢＡのデータを格納している第１処理ノード１０２Ａにおける少なくとも１つの宛先ディスク１０６、および宛先ディスク１０６に対しノード内プロテクション・データを格納している第１処理ノード１０２Ａの１つ以上の冗長化ディスク１０６が決定される。実施形態の中には、宛先およびノード内冗長化ディスク１０６は、ホスト１０４Ａの内少なくとも１つおよび第１処理ノード１０２Ａのコントローラ１０８Ａによって決定されるものもある。例えば、第１処理ノード１０２Ａのホスト１０４Ａ上で実行されるドライバ・ソフトウェアは宛先ディスク１０６を決定し、そして、コントローラ１０８Ａは冗長化ディスク１０６を決定する。ステップ２０６では、宛先ディスク１０６についてノード間プロテクション・データを格納している１つ以上の冗長化処理ノード１０２が、ホスト１０４Ａの内少なくとも１つおよび第１処理ノード１０２Ａのコントローラ１０８Ａによって決定される。
【００３８】
[0036]  ステップ２０８では、旧データは、選択されたＬＢＡにおいて宛先ディスク１０６から読み出される。ステップ２１２では、ホスト・データ書き込みにおける新データが、選択されたＬＢＡにおいて宛先ディスク１０６に書き込まれる。ステップ２１０では、第１処理ノード１０２Ａのデルタ計算ユニット１１２Ａが、新データおよび旧データを利用してデルタ・データを決定する。ステップ２１４では、第１処理ノード１０２Ａにおけるノード内冗長化計算ユニット１１０Ａは、デルタ・データに従って第１処理ノード１０２Ａにおける冗長化ディスク１０６に格納される第１の冗長化データを更新する。
【００３９】
[0037]  ステップ２１６では、第１処理ノード１０２Ａは、第１処理ノード１０２Ａとは異なる第２の処理ノード１０２Ｂのような、少なくとも１つの冗長化処理ノード１０２にデルタ・データを送る。図３を参照する。第２処理ノード１０２Ｂは、ステップ３０２においてデルタ・データを受け取り、ステップ３０４においてそのデルタ・データを第２処理ノード１０２Ｂのディスク・キャッシュに格納する。一旦デルタ・データがディスク・キャッシュに格納されると、ステップ３０６では、第２処理ノード１０２Ｂは、第１処理ノード１０２Ａにデルタ・データ書き込みの完了を承認するように構成される。この点において、第１処理ノード１０２Ａが故障することになる場合には、第２処理ノードは、第１処理ノード１０２Ａが有するホスト１０４Ａによって選択されたＬＢＡに書き込まれるデータの回復に参加することが可能である。ステップ２１８では、冗長化ノード１０２の全てがデルタ・データ書き込みの完了を承認したことについて判定を行う。ステップ２２０では、ホスト・データ書き込みの完了が、第１処理ノード１０２Ａのホスト１０４Ａに対して承認される。
【００４０】
[0038]  ステップ３０８では、デルタ・データを第２処理ノード１０２Ｂのディスク・キャッシュに格納したことに続いて、デルタ・データが、ディスク・キャッシュから選択的にフラッシュされる。ディスク・キャッシュが小さい場合のような実施形態の中には、いつフラッシュすべきかについて決定するのに直近に使用されたようなアルゴリズムを使用する、より大きなディスク・キャッシュを有する他の実施形態と比較して、ステップ３０８が比較的素早く実行されるものもある。ステップ３１０では、フラッシュまたはディスク・キャッシュからのデルタ・データをフラッシュするための決定に応答して、デルタ・データに対応するノード間プロテクション・データを格納する第２処理ノード１０２Ｂにおける１つ以上のノード間冗長化ディスク１０６、およびノード間冗長化ディスク１０６についてノード内プロテクション・データを格納する第２処理ノード１０２Ｂにおける１つ以上の冗長化ディスク１０６が、少なくとも１つのホスト１０４Ｂおよび第２処理ノード１０２Ｂのコントローラ１０８Ｂによって決定される。
【００４１】
[0039]  ステップ３１２では、第２処理ノード１０２Ｂのノード間冗長化計算ユニット１１４Ｂは、デルタ・データに従って第２処理ノード１０２Ｂのノード間冗長化ディスク１０６上に格納されたグローバルな冗長化データを更新する。ステップ３１４では、第２処理ノード１０２Ｂのノード内冗長化計算ユニット１１０Ｂは、ノード間冗長化ディスク１０６の更新に従って、第２処理ノード１０２Ｂの冗長化ディスク１０６上に格納された第２ローカル冗長化データを更新する。ステップ３１６では、デルタ・データは、第２処理ノード１０２Ｂのディスク・キャッシュから削除される。実施形態の中には、ディスク・キャッシュが揮発性である場合のように、デルタ・データが確実に不揮発性で格納するために、ステップ３０６はステップ３１２および／またはステップ３１４の１つ以上の後まで遅延されるものもある。
【００４２】
[0040]  実施形態の中には、グローバル冗長化データの計算のためにノード１０２間で移動されるデルタ・データは、（ホスト１０４によるデータの書き込みより前の）旧データとホスト１０４により書き込まれる新データとの関数となるものもある。実施形態の中には、デルタ・データが、ホスト１０４による旧データおよび新データについてのＸＯＲ関数またはＸＮＯＲ関数を利用して決定されるものもある。他の実施態様では、デルタ・データは、旧データおよび新データを含み、そして、新旧のデータの両方がノード１０２間で移動される。実施形態の中には、デルタ・データは更に、次のものの内少なくとも１つを含むものもある。すなわち、どのノードがデルタ・データを発生したかの指標、デルタ・データを発生させる書き込みにおけるノード間プロテクション・コードワード内の位置、そして、デルタ・データの発生源および／または位置に関連付けられた他の情報である。
【００４３】
[0041]  実施形態の中には、ノード間冗長化計算が、グローバル冗長化データの一部を格納する１つ以上のノード１０２の各々とは独立して実行されるものもある。例えば、２−消失訂正リード・ソロモン符号を用いるＲＡＩＤ−６符号化タイプにより、デルタ・データは、グローバル冗長化データの一部を格納する２つの処理ノード１０２のそれぞれに送られ、そして、この２つの処理ノード１０２のそれぞれが、グローバル冗長化データの一部を独立して更新する。２−消失訂正リード・ソロモン符号のために、リード・ソロモン符号におけるコードワード内のデルタ・データの位置は、デルタ・データと共に送られ、そして、２つの処理ノード１０２のそれぞれは、コードワード内のデルタ・データの一部のデータがリード・ソロモン符号の発生器の多項式により導出されるときに得られる一部の残余に対応する更新について決定することにより、グローバル冗長化データの一部への更新を独立して計算するように構成される。
【００４４】
[0042]  実施形態の中には、デルタ・データが削減され、および／またはグローバル冗長化データの計算のために他のノードに移動されるよりも前にローカルに結合されるものもある。第１の例では、処理ノードの内第１のもののホストによる第１のデータの書き込み、および第１処理ノードのホストにより第２のデータ書き込みが同一のＬＢＡについて、また、単一のデルタ・データが第１書き込みおよび第２書き込みの両方に対応して移動される。例えば、ここでは、関数はＸＯＲであり、デルタ・データは、第２書き込みの第２の（最後の）データでＸＯＲされた（第１書き込みよりも前の）旧データに対応する。第２の例では、ノード間プロテクション機構のコードワードは、処理ノードの第１のものに格納された２つ以上のディスクをカバーし、また、ディスクの内２つ以上への書き込みにより、書き込みに対応する単一デルタ・データを生成させる。ノード間プロテクション機構の符号化タイプおよび特定の信頼性に従って、デルタ・データのサイズは、２つ以上のディスクの内１つのみへの書き込みのサイズに等しい。
【００４５】
[0043]  実施形態の中には、第１の処理ノード１０２Ａのホスト・データ書き込みは、複数の異なるデルタ・データを発生させ、それぞれが、グローバル冗長化データの一部を格納する対応する処理ノード１０２に送られることになるものもある。他の実施態様では、第１処理ノード１０２Ａのホスト・データ書き込みが、グローバル冗長化データの一部を格納する１つ以上の処理ノード１０２に送られる単一デルタ・データを発生させる。
【００４６】
[0044]  実施形態の中には、第１処理ノード１０２Ａのホスト・データ書き込みが、第１処理ノード１０２Ａとは異なる第２の処理ノード１０２Ｂ（すなわち「外部」データ書き込み）のディスク１０６の内１つとなるものもある。システム１００のディスク１０６に関し、外部書き込みは、ローカル書き込みと同様にして実行される。しかしながら、外部書き込みのデータは、第１処理ノード１０２Ａに対しローカルにとどまるのではなく、第２処理ノード１０２Bに移動される。実施形態の中には、別の相違について、外部書き込みの完了の承認が、第２処理ノード１０２Ｂが外部書き込みによる如何なるノード間冗長化書き込みの完了を決定したのに引き続いて、第２処理ノード１０２Ｂにより第１処理ノード１０２Ａへ戻されるものもある。
【００４７】
[0045]  実施形態の中には、複数の処理ノード１０２の内少なくとも幾つかがキャッシュとして使用されるソリッド・ステート・ディスクのようなディスク・キャッシュを含むものもある。ディスク・キャッシュは、次の内の１つ以上を格納する。すなわち、処理ノード１０２のホスト１０４によってアクセスされるデータ（例えばストレージ）、別の処理ノード１０２のホスト１０４によってアクセスされるデータ、処理ノード１０２のローカル冗長化データ、処理ノード１０２のディスク１０６上に格納されたグローバル冗長化データ、処理ノード１０２によって計算され、および／または別の処理ノード１０２から受け取るデルタ・データ、他のタイプのものである。実施形態の中には、ディスク・キャッシュ内に別の処理ノード１０２から受け取ったデルタ・データを格納することが、デルタ・データの安全性の承認、つまり、グローバル冗長化データおよび当該グローバル冗長化データを保護する第２ローカル冗長化データの更新よりも前における対応するホスト・データ書き込みの安全性の承認を可能にするものもある。
【００４８】
[0046]  実施形態の中には、処理ノード１０２のディスク・キャッシュは、次の内の１つ以上により管理されるものもある。すなわち、ホスト１０４、処理ノード１０２、処理ノードにおけるＲＯＣのような出力コントローラ１０８、専用管理プロセッサ、そして上記の任意の組み合わせである。
【００４９】
[0047]  実施形態の中には、ディスク・キャッシュが、他のタイプのデータとは異なるデルタ・データをタグ付けするものもある。実施形態の中には、デルタ・データが、非デルタ・ダーティ・データのような直接格納することができるものとは反対に、ダーティで且つデルタ・フォーマットのものとしてタグ付されるものもある。第１の処理ノード１０２Ａにおけるディスク・キャッシュからデルタ・データをフラッシュするために、第１処理ノード１０２Aのノード間冗長化計算ユニット１１４Ａは、デルタ・データがディスク・キャッシュから削除され、または取り除かれる前に、デルタ・データに従って第１処理ノード１０２Ａのディスク１０６に格納されるグローバル冗長化データを更新するように構成される。実施形態の中には、第１処理ノード１０２Ａのディスク１０６に格納されたグローバル冗長化データを更新することが、グローバル冗長化データを保護するノード内冗長化データを更新することを含むものもある。第１処理ノード１０２Ａの別のディスクに格納されたノード内冗長化データは、第１処理ノード１０２Ａのノード内冗長化計算ユニット１１０Ａを介して更新される。
【００５０】
[0048]  デルタ・データが処理ノード１０２のディスク・キャッシュに格納される実施形態の中には、デルタ・データを受け取る処理ノード１０２が、ディスク・キャッシュ内にデルタ・データを格納するよりも前に、デルタ・データに対しノード間冗長化計算の少なくとも一部を実行し、また、ディスク・キャッシュ内に、変換したバージョンのデルタ・データを格納するものもある。例えば、複数の消失訂正符号に対し、受け取ったデルタ・データは、処理ノード１０２に格納されたグローバル冗長化データに直接結合できる形態ではない。ノード間冗長化計算ユニット１１４を用いて受け取ったデルタ・データを変換することによって、変換されたデルタ・データは、ＸＯＲ関数のようなより単純な操作を経て、後にグローバル冗長化データと結合されることが可能である。実施形態の中には、変換したバージョンのデルタ・データをディスク・キャッシュに格納することが更に、引き続いて、受け取ったデルタ・データを変換したバージョンのデルタ・データに結合することを可能にし、有利にディスク・キャッシュ内のスペースをセーブするものもある。例えば、ノード間プロテクション符号化タイプとしてリード・ソロモン符号を用いて、デルタ・データは、リード・ソロモン符号の発生器の多項式に従って、グローバル冗長化データとして格納されるコードワードの残余の一部への（ＸＯＲを通じた）更新に変換される。
【００５１】
[0049]  実施形態の中には、キャッシュされたデルタ・データが、更新されたディスク・キャッシュにおいて結合されるものもある。例えば、第１の処理ノード１０２Ａのホスト１０４によって選択される第１のブロック・アドレス（ＬＢＡ）における第１の書き込みに対応する第１のデルタ・データは、第２の処理ノード１０２Bのディスク・キャッシュに格納され、選択されたＬＢＡにおける第２の書き込みに対応する第２のデルタ・データは、第２処理ノード１０２Bによって受け取る。第２処理ノード１０２Ｂのディスク・キャッシュは、第２デルタ・データに従って第１デルタ・データを更新するように構成され、その結果、第２処理ノード１０２Bのディスク１０６に格納されたグローバル冗長化データの単一の更新のみが、第１書き込みおよび第２書き込みの両方に必要とされる。例えば、デルタ・データがＸＯＲ関数を利用している第１の処理ノード１０２Ａにおいて計算される場合には、第１デルタ・データは、第２デルタ・データでＸＯＲ演算によって更新される。
【００５２】
[0050]  実施形態の中には、ノード間プロテクションのコードワードによって保護されるデータに対し、第１処理ノード１０２Ａのホスト１０４Ａによる第１の書き込みに対応する第１のデルタ・データが、第２処理ノード１０２Bのディスク・キャッシュに格納され、また、ノード間プロテクションのコードワードによって保護されるデータに対し、第２書き込みに対応する第２デルタ・データが、第２処理ノード１０２Bによって受け取られるものもある。第２処理ノード１０２Ｂのディスク・キャッシュは、第２デルタ・データに従って第１デルタ・データを更新するように構成され、その結果、第２処理ノード１０２Bのディスク１０６に格納されるグローバル冗長化データの単一の更新のみが、第１書き込みおよび第２書き込み両方に必要となる。
【００５３】
[0051]  実施形態の中には、ローカル冗長化データは、ＣＲＵＳＨ（スケーラブル・ハッシュ下での複製制御;Controlled Replication Under Scalable Hashing）アルゴリズムその他のデータ配布アルゴリズムによるといったような決定したやり方で処理ノード１０２のディスク１０６間で配布される。実施形態の中には、グローバル冗長化データが、ＣＲＵＳＨアルゴリズムその他のデータ配布アルゴリズムによるといったような決定したやり方で処理ノード１０２の内２つ以上のディスク１０６間で配布されるものもある。例えば、第１のノード間プロテクションのコードワードは、第１のサブセットの処理ノード１０２上のディスク１０６に及んでおり、第２のノード間プロテクションのコードワードは、第１のサブセットとは異なる第２のサブセットの処理ノード１０２上のディスク１０６に及んでいる。実施形態の中には、第１サブセットおよび第２サブセットが、重複する（すなわち、少なくとも１つの処理ノード１０２を共通して含む）ものもある。
【００５４】
[0052]  実施形態の中には、ノード内冗長化計算ユニット１１０が、ディスク１０６の内の１つ以上の一部および／またはそれらに統合されるものもある。例えば、幾らかのＳＳＤは、ＳＳＤの不揮発性メモリ・チップに格納されるデータを保護するＲＡＩＤ−５ライクのまたはＲＡＩＤ−６ライクの冗長化機構を実装する。ＳＳＤの冗長化機構は、ＳＳＤに格納されるデータについてノード内冗長化計算ユニットとしてサービス提供することができる。
【００５５】
[0053]  実施形態の中には、複数の処理ノード１０２が、実質的に同一または類似に構成されるものもある。他の実施態様では、処理ノード１０２は、全てが対称という訳ではなく、ホスト（１または複数）１０４の数および／若しくはコンフィギュレーションにおける、ローカルのメモリ量、数、コンフィギュレーション、タイプおよび／若しくはディスク容量、または、他の任意のパラメータにおける、コンポーネント（１または複数）若しくはコンフィギュレーション（１または複数）のいずれかである。
【００５６】
[0054]  実施形態の中には、処理ノード１０２の少なくともいくつかは限定され、または処理能力を有さず、そして、効果的に「ディスク・オンリー」である。ディスク・オンリーの処理ノード１０２は、例えばグローバルな冗長性の一部を格納することによるように、グローバル冗長化計算に加わる。実施形態の中には、処理ノード１０２の内１つが、それぞれのホスト１０４のクラッシュによりディスク・オンリーになることもある。但し、ディスク・オンリーの処理ノード１０２が有する少なくとも幾らかのストレージは、未だグローバルにアクセス可能である。したがって、他のノード１０２からディスク・オンリーの処理ノード１０２への外部書き込みは、デルタ・データが、例えばディスク・オンリーの処理ノード１０２が有するコントローラ１０８（例えばＲＯＣ）によって、発生および送信させることを未だに可能にする。
【００５７】
[0055]  実施形態の中には、複数のノード内プロテクション機構１１０および／またはノード間プロテクション機構１１４が、次の内１つ以上に従って使用されるものもある。すなわち、保護されるディスク１０６のタイプおよび／または信頼性、保護されるディスク１０６に格納されるデータのタイプ、選択されたノード間プロテクション機構１１４によりカバーされるノード１０２の故障の確率その他要因である。
【００５８】
[0056]  実施形態の中には、本開示の全体にわたって説明される様々なステップが、単一のコンピュータ・システムまたは複数のコンピュータ・システムによって実行することができるものがあることが認識されなければならない。コンピュータ・システムは、限定しないが、パーソナル・コンピューティング・システム、メインフレーム・コンピューティング・システム、ワークステーション、イメージ・コンピュータ、並列プロセッサその他当該技術分野において如何なる公知のデバイスも含むことができる。一般に、「コンピューティング・システム」という用語は、広義には、メモリ媒体からの命令を実行する１つ以上のプロセッサを有する如何なるデバイスも含んで定義される。
【００５９】
[0057]  本願明細書に説明される実施形態によって明示される方法を実装するプログラム命令は、担持媒体を通じて送信し、または担持媒体上に格納することができる。担持媒体は、限定しないが、ワイヤ、ケーブルまたはワイヤレス伝送リンクのような伝送媒体でもよい。担持媒体はまた、限定しないが、リード・オンリ・メモリ、ランダム・アクセス・メモリ、磁気若しくは光ディスク、または磁気テープのような記憶媒体を含むことができる。
【００６０】
[0058]  本願明細書において説明される方法を明示する実施形態は、記憶媒体に格納している結果を含むことができる。結果が格納された後に、記憶媒体においてその結果にアクセス可能であり、また、本願明細書に説明される任意の方法またはシステムの実施形態により用いられ、ユーザへの表示のためにフォーマットされ、別のソフトウェア・モジュール、方法またはシステム等によって用いられる。更に、この結果は、「永久に」、「半永久に」、「一時的に」、すなわちある時間期間にわたり格納することができる。例えば、記憶媒体は、ランダム・アクセス・メモリ（ＲＡＭ）としてもよく、その結果は記憶媒体に必ずしも際限なく残存できるという訳ではない。
【００６１】
[0059]  更に、システムまたは方法として上記のとおり明示した本開示の任意の実施形態は、本願明細書において説明される他の如何なる実施形態の少なくとも一部をも含むことができるのを意図している。様々な実施形態があり、これにより、本願明細書において説明されるシステムおよび方法を遂行することができ、そして、その実施は、本開示の一実施形態が展開される文脈で変化させることになるということが、当業者にとって認められるであろう。
【００６２】
[0060]  更にまた、本発明が添付の請求の範囲によって定義されることを理解すべきである。本発明の実施形態を例示してきたにもかかわらず、様々な修正が、当業者にとって本開示の範囲および主旨から逸脱することなく行うことができるのは明白である。
【図１】
2014053005.tif 000003
【図２】
2014053005.tif 000004
【図３】
2014053005.tif 000005