(57)【特許請求の範囲】
【請求項１】
１以上のプロセッサと、
実行可能命令を非一時的に維持する１以上のコンピュータ可読媒体と、を備え、
前記実行可能命令は、前記１以上のプロセッサによって実行された際に、前記１以上のプロセッサを動作させるように構成する、システムであって、
データオブジェクトを前記システムにおいて受け取り、前記データオブジェクトは、オブジェクトデータを含み、前記システムは、３つ以上のシステムのうちの第１システムであり、それぞれのシステムは、異なる個々の地理的場所において配置されており、
前記データオブジェクトの前記オブジェクトデータのコンテンツを表す値を決定し、
前記オブジェクトデータを複数のデータチャンクに分割し、また、前記複数のデータチャンクのパリティチャンクを決定することにより、前記３つ以上のシステムの合計数と同数の複数のチャンクを決定し、
前記３つ以上のシステムのそれぞれに対応する個々のロール値を判定し、
前記個々のロール値と、前記オブジェクトデータの前記コンテンツを表す前記値と、に基づいて、前記チャンクの個々のチャンクを前記３つ以上のシステムの個々のシステムに送信する、
システム。
【請求項２】
前記個々のロール値と、前記オブジェクトデータの前記コンテンツを表す前記値と、に基づいて前記チャンクの個々のチャンクを前記３つ以上のシステムの個々のシステムに送信する前記動作は、
ハッシュ化アルゴリズムを使用することにより、前記コンテンツを表す前記値として、前記オブジェクトデータからハッシュ値を決定し、
前記ハッシュ値及び前記個々のロール値の関数に基づいて、前記個々のチャンクを受け取るべき前記３つ以上のシステムの個々のシステムを決定することを含む、請求項１に記載のシステム。
【請求項３】
前記ハッシュ値及び前記個々のロール値の前記関数に基づいて前記個々のチャンクを受け取るべき前記３つ以上のシステムの個々のシステムを決定する前記動作は、
前記ハッシュ値に対するモジュロ演算の結果を判定し、前記モジュロ演算は、前記システムの前記合計数に基づいており、
前記モジュロ演算の前記結果及び前記個々のロール値に基づいて、前記個々のチャンクを受け取るべき前記３つ以上のシステムの個々のシステムを決定し、
前記モジュロ演算の前記結果を前記ロール値のうちの１つにマッチングし、ロール値の昇順又は降順に基づいて順番に前記チャンクを分散させることにより、前記３つ以上のシステムの個々のものに前記個々のチャンクを送信することを更に含む、請求項２に記載のシステム。
【請求項４】
前記ハッシュ値及び前記個々のロール値の前記関数に基づいて前記個々のチャンクを受け取るべき前記個々のシステムを決定する前記動作は、
前記ハッシュ値に対するモジュロ演算の結果を判定し、前記モジュロ演算は、前記３つ以上のシステムの前記合計数に基づいており、
前記モジュロ演算の前記結果及び前記個々のロール値に基づいて、前記個々のチャンクを受け取るべき前記３つ以上のシステムの個々のシステムを決定し、
前記モジュロ演算の前記結果を前記ロール値の１つにマッチングし、ロール値の昇順又は降順に基づいて順番に前記チャンクを分散させることにより、ラウンドロビン分散を使用して前記個々のチャンクを前記３つ以上のシステムの個々のシステムに送信し、前記順番は、前記オブジェクトデータの前記コンテンツ内のデータの順序に基づいている、
ことを更に含む、請求項２に記載のシステム。
【請求項５】
前記動作は、
前記複数のチャンクのうちの１つのチャンクが、前記３つ以上のシステムのそれぞれのシステムにおいて維持されるように、前記システムに割り当てられた前記ロール値に基づいて、前記システムによって前記チャンクの１つを保持すること
を更に含む、請求項１に記載のシステム。
【請求項６】
前記データオブジェクトと共にオブジェクトメタデータを受け取り、
チャンクを受け取るそれぞれのシステムに、コンテンツを表す前記値を含む前記オブジェクトメタデータの少なくとも一部分を送信する請求項１に記載のシステム。
【請求項７】
前記動作は、
前記システムによって保持されているチャンクが前記システムによって既に記憶されているチャンクの複製であると決定するために、前記システムによって保持されている前記チャンクのデータを前記システムによって既に記憶されているチャンクのデータと比較することにより、前記システムにおいて重複排除を実行することを更に含む、請求項１に記載のシステム。
【請求項８】
前記動作は、
前記システムによって保持されている前記チャンクのメタデータをメタデータデータ構造に追加し、
前記チャンクの前記メタデータを前記システムによって既に記憶されている前記チャンクの前記データに対するポインタと関連付け、
前記システムによって保持されている前記チャンクの前記データを削除する必要があること
を示すことを更に含む、請求項７に記載のシステム。
【請求項９】
前記異なる個々の地理的場所において配置されている前記３つ以上のシステムのうちのそれぞれのその他のシステムは、そのシステムによって受け取られた前記チャンクが、そのシステムによって既に受け取られているチャンクのデータの複製であるデータを有するかどうかを決定するように構成されている、請求項７に記載のシステム。
【請求項１０】
前記システムによって保持されている前記チャンクの前記データを前記システムによって既に保存されている前記チャンクの前記データと比較する前記動作は、
前記システムによって保持されている前記チャンクの前記データを表すフィンガプリントを決定し、
前記フィンガプリントを前記システムによって既に記憶されている複数の個々のチャンクについて予め生成されているフィンガプリントデータ構造内の複数のフィンガプリントと比較し、
前記フィンガプリントと前記フィンガプリントデータ構造内の前記フィンガプリントのうちの１つとの間のマッチに基づいて、前記システムによって保持されている前記チャンクの前記データと前記フィンガプリントデータ構造内の前記マッチングしたフィンガプリントに対応する前記システムによって既に記憶されている前記チャンクの前記データとのバイトごとの比較を実行することを含む
請求項７に記載のシステム。
【請求項１１】
前記システムは、閾値時間にわたって前記オブジェクトデータの完全なバージョンを保持するように構成されており、
前記動作は、
前記オブジェクトデータが前記システムによって既に記憶されているデータの複製であると決定し、
前記データオブジェクトについて、前記システムによって既に記憶されている前記データに対するポインタを生成し、
前記オブジェクトデータを削除する必要があることを示し、
前記閾値時間が満了したことを決定し、
前記システムによって既に記憶されている前記データを、前記オブジェクトデータを複数のデータチャンクに分割し、また、前記複数のデータチャンクのパリティチャンクを決定することにより、前記３つ以上のシステムの合計数と同数の複数のチャンクを決定するための前記オブジェクトデータとして使用することを
を更に含む、請求項１に記載のシステム。
【請求項１２】
前記動作は、
クライアント装置から、前記データオブジェクトに対する要求を受け取り、
前記その他のシステムからＭ−２個のチャンクを受け取り、ここで、Ｍは、前記システムの前記合計数であり、
前記システムで保持されているチャンク及び前記Ｍ−２個の他のチャンクから前記オブジェクトデータを再構築し、
前記再構築されたオブジェクトデータを前記クライアント装置に送信する
ことを更に含む、請求項１に記載のシステム。
【請求項１３】
前記Ｍ−２個のチャンク又は前記システムにおいて保持されている前記チャンクのうちの１つは、前記パリティチャンクであり、前記動作は、
前記パリティチャンクと、前記Ｍ−２個のチャンク及び前記システムにおいて保持されている前記チャンクの内の他のものと、を使用することにより、消失データチャンクのデータを決定し、
前記パリティチャンクと、前記Ｍ−２個のチャンク及び前記システムにおいて保持されている前記チャンクの内の他のものと、を使用して決定された前記消失データチャンクの前記データを使用することにより、前記オブジェクトデータを再構築する
ことを更に含む、請求項１２に記載のシステム。
【請求項１４】
方法であって、
システムで、前記システムの１以上のプロセッサにより、オブジェクトデータを含むデータオブジェクトを受け取り、ここで、前記システムは、３つ以上のシステムのうちの第１システムであり、それぞれのシステムは、異なる個々の地理的場所において配置されており、
前記１以上のプロセッサにより、前記データオブジェクトの前記オブジェクトデータのコンテンツを表す値を決定し、
前記１以上のプロセッサにより、前記オブジェクトデータを複数のデータチャンクに分割し、前記複数のデータチャンクについてパリティチャンクを決定することにより、前記３つ以上のシステムの合計数と同数の複数のチャンクを決定し、
前記１以上のプロセッサにより、前記３つ以上のシステムのそれぞれに対応する個々のロール値を決定し、
前記１以上のプロセッサにより、前記個々のロール値及び前記オブジェクトデータの前記コンテンツを表す前記値に基づいて前記チャンクのそれぞれのチャンクを前記３つ以上のシステムのそれぞれのシステムに送信する
方法。
【請求項１５】
命令を非一時的に保存する１以上のコンピュータ可読媒体であって、
前記命令は、１以上のプロセッサによって実行された際に、
データオブジェクトをシステムにおいて受け取ること、ここで、前記データオブジェクトは、オブジェクトデータを含み、前記システムは、３つ以上のシステムのうちの第１システムであり、それぞれのシステムは、異なる個々の地理的場所において配置されており、
前記データオブジェクトの前記オブジェクトデータのコンテンツを表す値を決定すること、
前記オブジェクトデータを複数のデータチャンクに分割し、前記複数のデータチャンクについてパリティチャンクを決定することにより、前記３つ以上のシステムの合計数と同数の複数のチャンクを決定すること、
前記３つ以上のシステムのそれぞれに対応する個々のロール値を決定すること、
前記個々のロール値及び前記オブジェクトデータの前記コンテンツを表す前記値に基づいて前記チャンクの個々のチャンクを前記３つ以上のシステムの個々のシステムに送信することと、
を行うように、システムの前記１以上のプロセッサをプログラムする、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ保護及びデータ重複排除の技術分野に関する。
【背景技術】
【０００２】
データオブジェクトは、データをオブジェクトとして管理するオブジェクトストレージアーキテクチャに保存することができる。それぞれのオブジェクトは、典型的に、オブジェクトデータ（例えば、データコンテンツ）、オブジェクトデータを記述するメタデータ、及びグローバルに区別可能な識別子を含む。いくつかの状況において、データの消失に対する冗長性保護を提供するために、記憶されているオブジェクトデータをイレイジャーコーディングされてもよい。イレイジャーコーディングは、データを複数のデータチャンクに分割ことを含みうる。データチャンクについて、パリティデータがエンコードされ、且つ、データチャンク及びパリティデータは、異なる記憶媒体上において、及び／又は、異なる地理的場所において、などのように、異なる記憶場所の組に跨って、記憶されうる。記憶場所のうちの１つのオブジェクトデータのデータチャンクが、損傷され、破壊され、或いは、その他により利用不能となった場合に、記憶場所のうちの別のものに記憶されているパリティデータを使用することにより、オブジェクトデータを再構築することができる。
【０００３】
これに加えて、コンピュータシステム内のデータ量を低減するために、データの重複排除を使用してもよい。一例として、新しいデータが、コンピュータシステムによって既に受け取られているデータと同一であるとコンピュータシステムが決定した場合に、システムは、新しいデータに関する情報をコンピュータシステムによって既に受けられているデータに対してリンクしてもよく、これにより、新しいデータの記憶又はそのデータのその他の方法による維持の必要性を回避してもよい。一例として、データコンテンツ全体の追加又は維持ではなく、コンピュータシステムは、予め受け取ったデータに対するポインタとともに、新しいデータに関するメタデータを追加するだけでよい。
【発明の概要】
【課題を解決するための手段】
【０００４】
いくつかの実装形態は、データオブジェクトのチャンクを記憶することができる分散型トポロジーのシステムを含む。例えば、コンピュータシステムは、オブジェクトデータと、オブジェクトメタデータと、を含むデータオブジェクト受け取ってもよい。システムは、３以上のシステムのうちの１つであってよく、また、それぞれのシステムは、異なる個別の地理的場所に配置されていてもよい。システムは、オブジェクトデータのコンテンツを表す値を決定してもよい。システムは、システムの合計数に基づいてオブジェクトデータを複数のデータチャンクに分割することにより、複数のチャンクを更に決定してもよく、また、複数のデータチャンクについて少なくとも１つのパリティチャンクを決定してもよい。システムは、分散型トポロジー内のシステムのそれぞれに対応する個々のロール値を決定してもよく、また、ロール値及びオブジェクトデータコンテンツを表す値に基づいてチャンクの個々のものをシステムの個々のシステムに送信してもよい。いくつかの例においては、それぞれのシステムは、受け取ったチャンク及び個々のシステムによって既に記憶されているチャンクに基づいて、その他のシステムとは独立的に、データ重複排除を実行してもよい。
【図面の簡単な説明】
【０００５】
添付図面を参照し、詳細に説明する。図においては、参照符号の１つ又は複数の最も左側の桁は、参照符号が最初に出現している図を識別している。異なる図における同一の参照符号の使用は、類似の又は同一の項目又は特徴を示している。
【０００６】
【図１】図１は、いくつかの実装形態に係る、イレイジャーコーディングされたオブジェクトを記憶及び重複排除するシステムのアーキテクチャ例を示す。
【０００７】
【図２】図２は、いくつかの実装形態に係る、オブジェクトをデータチャンクに分割すること、及び、パリティチャンクを決定することの一例を示す。
【０００８】
【図３】図３は、いくつかの実装形態に係る、地理的なオブジェクトチャンクの分散の一例を示す。
【０００９】
【図４】図４は、いくつかの実装形態に係る、地理的に分散されたチャンクからのオブジェクトデータの再構築の一例を示す。
【００１０】
【図５】図５は、いくつかの実装形態に係る、地理的に分散された、パリティチャンクを含むチャンクからのオブジェクトデータの再構築の一例を示す。
【００１１】
【図６】図６は、いくつかの実装形態に係る、オブジェクトをデータチャンクに分割すること、及び、パリティチャンクを決定することの一例を示す。
【００１２】
【図７】図７は、いくつかの実装形態に係る、オブジェクトチャンクの地理的な分散の一例を示す。
【００１３】
【図８】図８は、いくつかの実装形態に係る、オブジェクトをデータチャンクに分割すること、及び、パリティチャンクを決定することの一例を示す。
【００１４】
【図９】図９は、いくつかの実装形態に係る、オブジェクトチャンクの地理的な分散の一例を示す。
【００１５】
【図１０】図１０は、いくつかの実装形態に係る、複製オブジェクトチャンクの決定の一例を示す。
【００１６】
【図１１】図１１は、いくつかの実装形態に係る、複製オブジェクトチャンクの重複排除の一例を示す。
【００１７】
【図１２】図１２は、いくつかの実装形態に係る、オブジェクトデータがチャンクに低減される前及び後における複製オブジェクトデータの重複排除の一例を示す。
【００１８】
【図１３】図１３は、いくつかの実装形態に係る、データチャンク及びパリティチャンクの決定の一例を示す。
【００１９】
【図１４】図１４は、いくつかの実装形態に係る、オブジェクトチャンクの分散のプロセス例を示すフロー図である。
【００２０】
【図１５】図１５は、いくつかの実装形態に係る、オブジェクトチャンクの重複排除のプロセス１５００の例を示すフロー図である。
【００２１】
【図１６】図１６は、いくつかの実装形態に係る、演算システムの構成例を示す。
【００２２】
【図１７】図１７は、いくつかの実装形態に係る、演算システムの構成例を示す。
【発明を実施するための形態】
【００２３】
本明細書におけるいくつかの実装形態は、オブジェクトチャンクを地理的に分散された記憶場所のイレイジャーコーディングトポロジーに構成されたシステムに分散させるための技法及び構成を含む。本明細書における例は、複製オブジェクトデータを有するオブジェクトの複製チャンクが分散型トポロジー内の同一の個々のシステムに記憶されることを保証し、これにより、システムによる複製データコンテンツのローカルな識別及び除去を可能にすることによって、分散型トポロジーにおける重複排除を提供している。これに加えて、いくつかの例は、分散型トポロジー内のすべてのシステムに跨るデータチャンクの代わりにパリティチャンクを使用することにより、オブジェクトデータの再構築と関連する演算負荷を均衡させている。従って、本明細書における実装形態は、同一のシステムに記憶されているすべてのパリティチャンクを有するなどの、チャンクストレージロールの静的割当の結果として生じる演算ペナルティにより、いずれか１つのシステムに不利益をもたらすことを回避している。
【００２４】
本明細書におけるいくつかの例は、地理的に分散したイレイジャーコーディングを使用した分散型のオブジェクトストレージを提供している。本明細書における分散型トポロジーにおいて記憶されたオブジェクトデータは、チャンクに分割してもよく、チャンクは、分散型トポロジーに跨って分散させてもよい。本明細書における分散型トポロジーは、異なる地理的記憶場所においてそれぞれが配置された、チャンクを記憶することができる固定数のシステムを含んでもよい。従って、それぞれのシステムが、オブジェクトのデータチャンク又はデータチャンクから決定されたパリティチャンクのうちのいずれか１つを受け取り、また、維持するように、オブジェクトのチャンクを固定数のシステムに跨って分散させてもよい。
【００２５】
トポロジー内には、記憶場所及びシステムが存在していることから、オブジェクトデータがイレイジャーコーディング済みのデータチャンクに低減される際には、オブジェクトデータを同一数のチャンク（パリティチャンクを含む）に低減してもよく、従って、トポロジー内のそれぞれのシステムは、正確にオブジェクトのチャンクのうちの１つを記憶することができる。このように、本明細書におけるオブジェクト保存技法は、記憶場所のうちの１つにおけるシステムの完全な消失の結果としてもたらされるデータ消失に対する保護を実行してもよく、更に、例えば、オブジェクトデータの完全な複写を記憶することによって消費されるものよりも少ない量のストレージを消費しつつ、この保護を提供してもよい。
【００２６】
一例として、分散型トポロジー内のそれぞれのシステムが、固定したチャンク責任を有するのではなく、本明細書における分散型トポロジー内の個々のシステムが、動的なチャンク責任を有するようにしてもよい。この結果、それぞれのシステムは、いくつかのデータチャンク又はパリティチャンクを記憶する責任を担うようにしてもよい。しかし、同一のデータを有する任意の２つのオブジェクトについては、本明細書のそれぞれのシステムは、割り当てられたロールに基づいて、固定したチャンク責任を有するようにしてもよい。従って、例えば、オブジェクト１及びオブジェクト２などの、同一データを有する任意の２つのオブジェクトについて、オブジェクト１の第１チャンクが、分散型トポロジー内の特定のシステム（例えば、システム「Ｄ」）上に記憶されている場合には、オブジェクト２の第１チャンクも、場合によっては、その代わりにその他のシステムのうちの１つに記憶されるのではなく、システム「Ｄ」に記憶される。
【００２７】
いくつかの例においては、分散型トポロジー内のシステムのうちの特定のものに対するチャンクの分散は、少なくとも部分的に、ＳＨＡ−２５６、ＭＤ５、又はこれらに類似したものなどの決定論的なハッシュ化アルゴリズムを使用することにより、実現してもよい。例えば、決定論的なハッシュ化アルゴリズムがオブジェクトデータに適用された際には、の結果は、オブジェクトデータのデータコンテンツを表すハッシュ値（即ち、「ハッシュ」）である。使用されるハッシュアルゴリズムの特性に起因し、これらのハッシュ化アルゴリズムを、異なるコンテンツを有するデータの任意の２つデータのセットに対して適用した結果、同一のハッシュ値が得られる可能性は、極めてあり得ない。更に、これらのハッシュ化アルゴリズムを同一のコンテンツを有する任意の２つのデータのセットに適用した結果、同一のハッシュ値が得られることは、保証されている（即ち、ハッシュアルゴリズムは、決定論的であり、且つ、アルゴリズムが適用されるコンテンツに基づいた結果を提供する）。オブジェクトデータのハッシュ値が演算された後に、それぞれのチャンクごとに分散型トポロジー内のターゲットシステムを決定するために、ハッシュ値を使用してもよい。
【００２８】
ハッシュ値に基づいて、それぞれのチャンクごとに、分散型トポロジー内のシステムのうちの個々のシステムに対してマッピングが決定されてもよい。マッピング技法は、同一のハッシュ値について、チャンクが同一の記憶場所に分散されるように、一貫性を有してもよい。一例として、それぞれのチャンク用の対応するシステム場所を決定するために、モジュロ演算が適用されてもよい。例えば、４つの異なる記憶場所を有する分散型トポロジーでは、オブジェクトを受け取り、チャンクを分散させるシステムは、ハッシュ値を演算し、且つ、ｍｏｄｕｌｏ（４）をハッシュ値に対して適用してもよく、この場合に、適用されるモジュロ値は、分散型トポロジー内の異なるシステムの数に等しい。「ハッシュ値ｍｏｄ（４）」のケースには、この演算の結果は、０と３の間の整数である。
【００２９】
それぞれの異なる記憶場所／システムには、個々のロール、即ち、０、１、２、又は３、が割り当てられてもよい。更に、異なる記憶場所の数に基づいて、オブジェクトデータは多くのチャンクに分割されてもよい。例えば、Ｍ個の記憶場所／システムが存在している場合には、オブジェクトデータはＭ−１個のデータチャンクに分割されてもよく、Ｍ−１個のデータチャンクに対して、１つのパリティチャンクが生成されてもよい。オブジェクトデータの第１データチャンクは、モジュロ演算の結果にマッチするロール値を有するシステムに記憶してもよい。オブジェクトのそれぞれの後続のデータチャンクは、次の最大のロール数を有するそれぞれの後続の記憶場所において保存され、パリティチャンクは、順番における最後に保存されてもよい。相対的に大きなロール値を有する記憶場所が存在していない場合には、次のチャンクは、ロール値＝０を有するシステムに記憶される。
【００３０】
ハッシュ化アルゴリズムは、分散型トポロジー内のすべてのシステムに跨るパリティチャンクの均等な分散を保証するために十分にランダムであるハッシュ値を返すことができる。従って、分散型トポロジー内のシステムのいずれかのものが、その他のシステムよりも格段に大きな百分率でパリティチャンクを有する可能性は、小さく、これにより、データチャンクの代わりにパリティチャンクを使用してデータオブジェクトが再構築される際の演算負荷が相対的に均等に分散される。更に、本明細書において記述されているチャンクを分散させる方法は、複製オブジェクトデータからのすべての複製チャンクが、分散型トポロジー内の同一のシステムに記憶されることを保証している。従って、本明細書における例においては、それぞれのシステムが重複排除をローカルに実行してもよく、分散型トポロジーに跨るグローバルな重複排除管理に対する要件が存在しない。更に、４つのシステムが存在している例においては、この例においてデータ保護を提供するために使用されるストレージの量は、オリジナルのオブジェクトデータサイズの１．３３倍であり、これは、オブジェクトデータの完全な複写を記憶することによって使用されるサイズの２倍超の大きな節約である。
【００３１】
説明を目的として、いくつかの実装形態例は、イレイジャーコーディングされたオブジェクトデータを記憶及び重複排除するべく相互の通信状態にある複数のシステムの環境において、記述されている。但し、本明細書における実装形態は、提供されている特定の例に限定されるものではなく、且つ、本明細書における開示に鑑み当業者には明らかであるように、その他の種類の演算及びストレージシステムアーキテクチャ、その他の種類のストレージ環境、その他の種類のクライアント構成、その他の種類のデータなどに拡張してもよい。
【００３２】
図１は、いくつかの実装形態に係る、オブジェクトを記憶及び重複排除するべく構成された分散型ストレージトポグラフィ１００のアーキテクチャ例を示している。複数のシステム１０２は、複数のそれぞれの記憶場所１０４〜１１０において、分散型トポロジーに配置されている。例えば、第１システム１０２（１）は、第１記憶場所１０４に配置され、第２システム１０２（２）は、第２記憶場所１０６に配置され、第３システム１０２（３）は、第３記憶場所１０８に配置され、また、第４システム１０２（４）は、第４記憶場所１１０に配置されている。更に、この例においては、４つのシステム及び記憶場所が示されているが、その他の例におけるシステム及び記憶場所の数は、４に限定されるものではなく、また、３〜３００個のシステムの範囲のように、３つ以上のシステムであってもよい。
【００３３】
それぞれのシステム１０２は、少なくとも１つのサービス演算装置１１２と、少なくとも１つのストレージ装置１１４と、を含んでもよい。従って、１つ以上のサービス演算システム１１２（１）及び１つ以上のストレージ装置１１４（１）が、第１システム１０２（１）内に含まれてもよく、１つ以上のサービス演算装置１１２（２）及び１つ以上のストレージ装置１１４（２）が、第２システム１０２（２）内において含まれてもよく、１つ以上のサービス演算装置１１２（３）及び１つ以上のストレージ装置１１４（３）が、第３システム１０２（３）内に含まれてもよく、また、１つ以上のサービス演算装置１１２（４）及び１つ以上のストレージ装置１１４（４）が、第４システム１０２（４）内に含まれてもよい。更に、この例においては、のサービス演算装置１１２（複数も可）及びストレージ装置１１４（複数も可）が、別個に示されているが、その他の例においては、ストレージ装置１１４（複数も可）は、更に後述するように、サービス演算装置１１２（複数も可）に内蔵されていてもよく、或いは、この内部に含まれていてもよい。更に、システム１０２は、本開示において記述及び図示されているハードウェア構成に限定されるものではなく、オブジェクトストレージとして機能し、且つ、本明細書において記述されている機能を実行することができる、任意の適切な又は望ましいハードウェア構成を含んでもよく、また、システム１０２のうちの１つのハードウェア構成は、システム１０２の別のものにおけるものと異なってもよい。
【００３４】
それぞれのシステム１０２（１）〜１０２（４）内の少なくとも１つのサービス演算装置１１２は、個々のシステム１０２（１）〜１０２（４）のストレージ装置１１４（複数も可）において記憶されている複数のオブジェクトチャンク１１８に関するメタデータを保存するために使用されているメタデータデータ構造１１６を含み、管理し、或いは、アクセスする。例えば、メタデータデータ構造１１６は、データベース、表、又は任意の他の適切なデータ構造であってよい。メタデータデータ構造１１６に含まれているメタデータは、パス、名称、所有者、オブジェクトデータから決定されたハッシュ値などのような、それぞれのオブジェクト及び／又は対応するオブジェクトチャンクに関する情報を含んでもよい。これに加えて、更に後述するように、メタデータデータ構造１１６は、それぞれのシステム１０２（１）〜１０２（４）における重複排除をサポートするために、重複排除メタデータを含んでもよい。例えば、重複排除の際に、オブジェクトチャンクが、システム１０２において既に保存されているオブジェクトチャンクの複製であると識別された際には、メタデータデータ構造１１６内のメタデータエントリが、複製チャンクのために生成及び／又は維持されてもよいが、複製チャンクのオブジェクトデータ自体は、削除されてもよく、また、システムによって既に保存されているチャンクのオブジェクトデータを指し示している複製チャンク用のポインタが、メタデータデータベース１１６内に追加されてもよい。重複排除技法については、更に後述する。
【００３５】
システム１０２（１）〜１０２（４）は、１以上のネットワーク１２０上で相互に通信することができる。１以上のネットワーク１２０は、インターネットなどのワイドエリアネットワーク、イントラネットなどのローカルエリアネットワーク（ＬＡＮ）、セルラーネットワークなどの無線ネットワーク、Ｗｉ−Ｆｉなどのローカル無線ネットワーク、及び／又はＢＬＵＥＴＯＯＴＨ（登録商標）などの近距離無線通信、ファイバーチャネル、光ファイバ、Ｅｔｈｅｒｎｅｔ、又は他のそのようなネットワークを含む有線ネットワーク、又は直接有線接続、或いは、これらの任意の組合せを含む任意の適切なネットワークを含んでもよい。従って、１以上のネットワーク１２０は、有線及び／又は無線通信技術の両方を含んでもよい。このような通信に使用されるコンポーネントは、ネットワークの種類、選択された環境、又は、これらの両方に少なくとも部分的に依存しうる。このようなネットワーク上において通信するためのプロトコルについては、周知であり、本明細書においては、詳細な説明を省略することとする。従って、サービス演算装置１１２は、有線又は無線接続及びこれらの組合せを使用する、１以上のネットワーク１２０上において通信することができる。
【００３６】
これに加えて、サービス演算装置１１２の少なくともいくつかは、１以上のネットワーク１２４を介してクライアント装置１２２（１）〜１２２（Ｎ）と通信することができる。それぞれのクライアント装置１２２（１）〜１２２（Ｎ）は、例えば、システム１０２上のストレージのためのデータオブジェクトの送信及び／又はシステム１０２からの記憶されたオブジェクトの受信のためなどのように、個々のサービス演算装置１１２と通信するなどのために、個々のクライアント装置１２２（１）〜１２２（Ｎ）上において稼働しうるクライアントアプリケーション１２６（１）〜１２６（Ｎ）の個々のインスタンスを含んでもよい。いくつかのケースにおいては、アプリケーション１２６は、ブラウザを含んでいてもよく、或いは、ブラウザを通じて動作してもよいが、その他のケースにおいては、アプリケーション１２６は、１以上のネットワーク１２４上においてサービス演算装置１１２との間の通信を可能にする通信機能を有する任意のその他の種類のアプリケーションを含んでもよい。
【００３７】
１以上のネットワーク１２４は、いくつかの例においては、ＬＡＮであってよい。他の例においては、１以上のネットワーク１２４は、１以上のネットワーク１２０との関係において上述したネットワークのうちのいずれかであってよい。いくつかのケースにおいては、ユーザ１２８及び／又はクライアント装置１１２又はクライアントアプリケーション１２６は、複数の記憶場所１０４〜１１０のうちの特定の記憶場所において１以上のサービス演算装置１１２にアクセスするために、割り当ててもよい。例えば、記憶場所１０４がボストンに位置し、ユーザ１２８（１）が、ボストンエリア内において働いている従業員である場合には、ユーザ１２８（１）は、他の記憶場所１０６〜１１０のその他のサービス演算装置１１２（２）〜１１２（４）ではなく、演算装置１１２（１）（複数も可）のそれぞれにアクセスするように、割り当ててもよい。一例として、様々なユーザ１２８又はユーザのグループは、負荷の均衡化やローカルオフィスシステムへの従業員アクセスの制限などのために、記憶場所１０４〜１１０のうちの特定のものにおけるサービス演算装置１１２（複数も可）のうちの特定のものに対するアクセスのみを付与されてもよい。更に、この例においては、４つのシステム１０２（１）〜１０２（４）及び記憶場所１０４〜１１０が示されているが、他の例においては、３つ以上などの、異なる数のシステム／記憶場所が使用されてもよく、この場合に、上限は、技術的な実行可能性ではなく、実際的な且つ減少するリターンに基づいている。
【００３８】
図２は、いくつかの実装形態に係る、オブジェクトをデータチャンクに分割すること、及び、パリティチャンクを決定することの一例を示している。この例においては、ユーザ１２８（１）が、オブジェクト２０１を第１システム１０２（１）に送信するものと仮定する。第１システム１０２（１）は、クライアント装置１２２（１）からオブジェクト２０１を受け取っている。例えば、オブジェクト２０１は、オブジェクトデータ２０２と、オブジェクトメタデータ２０３と、を含んでもよい。オブジェクトメタデータ２０３は、上述のように、オブジェクト識別子、オブジェクト種類、オブジェクトサイズ、オブジェクト所有者、生成日付などを含んでもよい。本明細書の例においては、「オブジェクトデータ」は、オブジェクトのデータコンテンツのみを意味し、オブジェクトメタデータを除いてもよい。同様に、オブジェクトメタデータは、オブジェクトデータを除いてもよい。
【００３９】
図示の例においては、分散型トポロジー１００内のシステム１０２の間においてデータチャンクを分散させることを目的として、第１システム１０２（１）は、２０４で示されているように、０に等しいロール値を有し、第２システム１０２（２）は、２０６で示されているように、１に等しいロール値を有し、第３システム１０２（３）は、２０８で示されているように、２に等しいロール値を有し、且つ、第４システム１０２（４）は、２１０において示されているように、３に等しいロール値を有する。これらのロール値は、システム管理者により、または、その他の技法を通じて、割り当てることができるが、典型的に、本明細書において記述されている重複排除技法の実装を可能にするべく、一定に留まることになる。
【００４０】
第１システム１０２（１）は、オブジェクト２０１のオブジェクトデータ２０２を３つのほぼ等しいサイズのオブジェクトデータチャンク、即ち、データチャンク２０２（Ａ）、データチャンク２０２（Ｂ）、及びデータチャンク２０２（Ｃ）、に分割している。いくつかのケースにおいては、チャンク２０２（Ａ）〜２０２（Ｃ）それぞれは、オリジナルのオブジェクトデータ２０２からの連続したバイトを含んでもよい。１つの単純な例として、９９９バイトのファイルが３つのチャンクに分割される場合には、チャンク２０２（Ａ）は、バイト０〜３３２を収容してもよく、チャンク２０２（Ｂ）は、バイト３３３〜６６５を収容してもよく、チャンク２０２（Ｃ）は、バイト６６６〜９９８を収容してもよい。３つのデータチャンク２０２（Ａ）〜２０２（Ｃ）からオリジナルのオブジェクトデータを再構築するために、第１システム１０２（１）（或いは、システム１０２のうちの別の１つ）は、チャンク２０２（Ａ）＋２０２（Ｂ）＋２０２（Ｃ）を単純に連結してもよい。従って、複数のデータチャンクからの完全なオブジェクトデータの再構築は、非常に小さな演算オーバーヘッドをもたらしうる。オブジェクトデータをチャンクに分割するための一代替技法については、図１３に関して後述する。
【００４１】
第１システム１０２（１）は、パリティチャンク２０２（Ｐ）を演算するために、データチャンク２０２（Ａ）〜２０２（Ｃ）を使用してもよい。パリティチャンク２０２（Ｐ）は、典型的には、データチャンク２０２（Ａ）〜２０２（Ｃ）の個々のものとほぼ同一のサイズであってよい。従って、４つの記憶場所を含む図示の例においては、パリティチャンク２０２（Ｐ）及びデータチャンク２０２（Ａ）〜２０２（Ｃ）のうちの任意の２つは、残りのデータチャンクのオブジェクトデータを演算するために使用してもよい。これは、数式を適用することによって実現される。単純化された一例として、以下の式：Ａ＋Ｂ＋Ｃ＝Ｐを検討しよう。Ａ、Ｂ、Ｃの値が与えられた場合に、例えば、２＋３＋４＝Ｐ、従って、Ｐ＝９というように、パリティＰを演算することができる。任意の単一の値が消失した場合に、その値は、既知の値及びパリティを使用することにより、２＋Ｂ＋４＝９、従って、Ｂ＝３と演算することができる。一例として、当技術分野において既知のように、パリティデータは、データチャンク２０２（Ａ）〜２０２（Ｃ）について、パリティデータを決定するための排他的ＯＲ関数（ＸＯＲ）を使用することにより、演算することができる。この結果、データチャンク２０２（Ａ）、２０２（Ｂ）、又は２０２（Ｃ）のうちの１つが利用不能である場合に、オブジェクトデータ２０２は、パリティチャンク２０２（Ｐ）及びその他の２つのデータチャンクを使用することにより、依然として再構築することができる。更に、この例において、単一のパリティチャンクが使用されているが、他の例においては、複数のパリティチャンクが存在してもよい。
【００４２】
第１システム１０２（１）は、オブジェクトデータ２０２からハッシュ値を更に演算してもよい。上述のように、システム１０２（１）は、ＳＨＡ−２５６アルゴリズム、ＭＤ５アルゴリズム、又はこれらに類似したものなどの、いくつかの周知の決定論的なハッシュアルゴリズムのうちのいずれかを使用してもよい。更に、２１２で示されているように、第１システムは、ハッシュアルゴリズムを使用して決定されたハッシュ値のｍｏｄｕｌｏ（４）を演算してもよい。この演算の結果は、常に、０〜３の範囲の整数となる。例えば、４つのシステム１０２（１）〜１０２（４）が存在していることから、ｍｏｄｕｌｏ（４）が使用されている。５つのシステムが存在している場合には、ｍｏｄｕｌｏ（５）が使用されてもよく、６つのシステムが存在している場合には、ｍｏｄｕｌｏ（６）が使用されてもよく、以下同様である。従って、この結果が、いずれの記憶場所が、イレイジャーコーディングされたオブジェクトデータの第１チャンクを記憶するために割り当てられるのか、を決定する。
【００４３】
更に、「ハッシュ値ｍｏｄｕｌｏ（システムの数）」という式を使用し、また、結果に対してマッチしているシステムに第１データチャンクを配置することは、本明細書においてチャンクを一貫性を有して分散させる唯一の方法ではない。例えば、システムは、必ずしも第１データチャンクではない、データチャンクのうちの任意のものにより、供給シーケンスを開始してもよく、パリティチャンクによって開始してもよく、ロール値の昇順ではなく、ロール値の降順においてチャンクを分散させてもよく、且つ、以下同様である。これに加えて、システムの数のモジュロを使用するのではなく、モジュロは、チャンクの配置用の可能な順列の数又はこれに類似したものを使用することにより、判定されてもよい。更に、ハッシュ値から、パリティサイトのほぼ均等な分散を有するチャンクの割当の順列への、その他のタイプの関数が使用されてもよい。従って、本明細書において開示されている利益を有する当業者には、多数のその他の変形が明らかとなるであろう。
【００４４】
この例において、ハッシュ値ｍｏｄ（４）が１に等しいと仮定する。これは、分散型トポロジー内の割り当てられたストレージロール値＝１を有する記憶場所（即ち、図示の例において、第２システム１０２（２））が、オブジェクト２０１のオブジェクトデータのチャンク２０２（Ａ）を保存する責任を担うことを意味している。それぞれの連続するチャンクは、パリティチャンクが順番において最後である状態で、それぞれ、次の最も大きなロール値を有するそれぞれの連続するシステム１０２上に記憶してもよい。相対的に大きなロール値を有するシステムが存在していない場合には、次のチャンクは、ロール値＝０のストレージシステムに記憶される。従って、第１システム１０２（１）は、オブジェクトデータをデータチャンク２０２（Ａ）〜２０２（Ｃ）及びパリティチャンク２０２（Ｐ）に低減し、システムの割り当てられたロール値との間の対応性に基づいて、１以上のネットワーク１２０上において、チャンクをその他のシステム１０２（２）、１０２（３）、及び１０２（４）に送信してもよい。
【００４５】
図３は、いくつかの実装形態に係る、地理的なオブジェクトチャンクの分散の一例を示している。オブジェクトデータをデータチャンク２０２（Ａ）、２０２（Ｂ）、及び２０２（Ｃ）と、パリティチャンク２０２（Ｐ）と、に低減した後に、チャンクの個々のものは、上述の分散マッピング技法に従って、システムトポロジー１００内のシステム１０２（２）〜１０２（４）のうちの別個のシステムに送信されてもよい。上述のように、それぞれのシステム１０２は、オブジェクトデータのハッシュから決定されたマッピング関数と、個々の記憶場所１０４〜１１０のシステム１０２（１）〜１０２（４）のそれぞれに対して割り当てられた割当済みのロール値と、に基づいて、オブジェクトチャンク２０２（Ａ）、２０２（Ｂ）、２０２（Ｃ）、又は２０２（Ｐ）のうちの単一のものを保存してもよい。これに加えて、それぞれのオブジェクトチャンクが、その他のシステム１０２（２）〜１０２（４）に送信される際に、送信するシステム１０２（１）は、オブジェクト２０１及び特定のチャンクと関連するオブジェクトメタデータ２０３を送信してもよい。それぞれのシステム１０２（２）〜１０２（４）に送信されるオブジェクトメタデータ２０３は、上述のオブジェクトメタデータの種類と、更に、オブジェクトデータ２０２について決定されたハッシュ値と、を含んでもよい。
【００４６】
この例においては、ハッシュ値のｍｏｄｕｌｏ（４）は、１に等しく、これは、２０６に示されているように、第２システム１０２（２）に割り当てられているロール値に対応している。従って、第１システム１０２（１）は、オブジェクトデータの第１データチャンク２０２（Ａ）を第２システム１０２（２）に送信し、且つ、相対的に大きなロール値が存在しなくなる時点まで、ロール値の昇順に従って、オブジェクトの残りのチャンクを分配し、なくなった時点で、第１システム１０２（１）は、ロール０において始まる分配を継続する。従って、この技法に基づいて、２に等しいロール値を有する第３システム１０２（３）が、第２チャンク２０２（Ｂ）を受け取り、３に等しいロール値を有する第４システム１０２（４）が、第３データチャンク２０２（Ｃ）を受け取り、また、０に等しいロール値を有する第１システム１０２（１）が、パリティチャンク２０２（Ｐ）を保持する。
【００４７】
オブジェクトメタデータ２０３は、個々のオブジェクトチャンクと共に送信されてもよく、または、これとは別個に送信されてもよい。個々のシステムは、メタデータ２０３を受け取り、受け取ったオブジェクトチャンクに関連して、その個々のメタデータデータ構造１１６内に保存する。更に、本明細書においては、「ハッシュ値ｍｏｄｕｌｏ（４）」を使用することが、オブジェクトデータのコンテンツに基づいて、データチャンクと複数のシステム１０２との間において一貫性を有するマッピングを確立するための１つの技法として記述されているが、本明細書における開示の利益を有する当業者には、様々なその他のマッピング技法が明らかとなるであろう。従って、本明細書における実装形態は、記述されている特定の技法に限定されるものではない。
【００４８】
図４は、いくつかの実装形態に係る、地理的に分散されたチャンクからのオブジェクトの再構築の一例を示している。分散型トポロジー１００内のオブジェクトストレージシステム１０２のうちの１つのシステムからの記憶されているオブジェクトが、ユーザ１２８によって要求された際に、要求を受け取ったシステム１０２は、チャンクからオブジェクトデータ２０２を再生成するために、ローカルに記憶されているチャンクと、その他の個々の記憶場所のその他のシステム１０２から取得された２つの更なるデータチャンクとを使用してもよい。この活動によって消費されるネットワーク帯域幅を制限するために、再構築システム１０２は、リモートシステム１０２から、オリジナルのオブジェクトデータを再生成するために必要とされる最小数のチャンクを取得してもよい。ローカルチャンクは、データチャンク又はパリティチャンクのいずれであってもよい。但し、ローカルチャンクがパリティチャンクである際には、システムは、典型的には、オブジェクトデータ２０２の再構築を可能とするための、不足しているデータチャンクの演算からもたらされる、更なるオーバーヘッドを被る。
【００４９】
図示の例においては、第４システム１０２（４）が、オブジェクト２０１へのアクセスを要求する要求４０２をクライアント装置１２２（Ｎ）から受け取るものと仮定する。要求の受取に応答して、第４システム１０２（４）は、自身が、要求されているオブジェクト２０１のデータチャンク２０２（Ｃ）を有していると決定してもよく、オブジェクトデータ２０２を再構築するために、２つの更なるチャンクを要求する。第４システム１０２（４）がデータチャンク２０２（Ｃ）と共に受け取ったオブジェクトメタデータ２０３に基づいて、第４システムは、オブジェクトデータ２０２のその他のデータチャンク２０２（Ａ）及び２０２（Ｂ）と、パリティチャンク２０２（Ｐ）と、の場所を決定してもよい。一例として、第４システム１０２（４）は、オブジェクトメタデータ２０３と共に受け取ったオブジェクトデータハッシュ値を使用してもよく、また、その他のシステムのいずれがその他のチャンクのいずれを保存しているのかを決定するために、ハッシュ値のｍｏｄｕｌｏ（４）を算出してもよい。
【００５０】
従って、最小量の演算処理によってオブジェクトデータを再構築するために、第４システム１０２（４）は、分散型トポロジー１００内の、システム１０２（１）及び１０２（２）から、２つのその他のデータチャンク２０２（Ａ）及び２０２（Ｂ）のそれぞれを取得してもよい。一例として、第４システム１０２（４）は、オブジェクトメタデータ２０３内において含まれているハッシュ値に基づいて、及び、いずれのシステム１０２がパリティチャンクではなくデータチャンクを維持しているのかを決定するための上述のｍｏｄｕｌｏ（４）演算を適用することにより、２つのその他のデータチャンクの場所を決定することができる。２つのその他のデータチャンクを受け取った際に、第４システム１０２（４）は、オリジナルのオブジェクトデータを再生成するために、単純に３つのデータチャンク２０２（Ａ）、２０２（Ｂ）、及び２０２（Ｃ）を１つに連結してもよい。次いで、第４システム１０２（４）は、再構築されたオブジェクトデータ２０２及びオブジェクト識別子などの任意の関連するオブジェクトメタデータ２０３又はこれらに類似したものを含むオブジェクト２０１を要求元のクライアント演算装置１２２（Ｎ）に送信することにより、クライアント演算装置１２２（Ｎ）からの要求４０２に応答してもよい。
【００５１】
図５は、いくつかの実装形態に係る、パリティチャンクを含む地理的に分散されたチャンクからのオブジェクトの再構築の一例を示している。この例においては、第１クライアント装置１２２（１）におけるユーザ１２８（１）が、オブジェクト２０１へのアクセスを要求する要求５０２を第１システム１０２（１）に送信するものと仮定する。更に、一例として、第３システム１０２（３）において障害が発生し、その結果、要求５０２が受け取られた時点において、チャンク２０２（Ｂ）が、損傷している、消失している、或いは、その他の方法で利用不能になっている、ものと仮定する。第１システム１０２（１）は、図４に関して上述したように、第２システム１０２（２）及び第４システム１０２（４）から、第１データチャンク２０２（Ａ）及び第３データチャンク２０２（Ｃ）をそれぞれ取得することができる。次いで、第１システム１０２（１）は、第１チャンク２０２（Ａ）、第３チャンク２０２（Ｃ）、及びパリティチャンク２０２（Ｐ）を使用することにより、オブジェクトデータ２０２を再構築してもよい。
【００５２】
パリティチャンク２０２（Ｐ）を使用したオブジェクトデータの再構築には、パリティチャンク２０２（Ｐ）及びその他の２つのチャンク２０２（Ａ）及び２０２（Ｃ）を使用することにより、消失したデータチャンク２０２（Ｂ）を演算する必要があり、典型的には、チャンク２０２（Ｂ）が利用可能である場合よりも大きな演算オーバーヘッドが生じうる。また、データチャンク２０２（Ｂ）の使用とは対照的に、パリティチャンク２０２（Ｐ）を使用したオブジェクトデータ２０２の再構築は、また、典型的には、データチャンク２０２（Ｂ）の取得よりも多くの時間を必要としうる。但し、いくつかのケースにおいては、演算オーバーヘッド及び時間遅延の増大は、システム及びネットワークのレイテンシー、ネットワークの輻輳等に照らして均衡させることができる。例えば、システム１０２（３）が、地理的に第１システム１０２（１）からなんらかの距離において配置されるか、或いは、低速ネットワーク接続上に配置されるか、或いは、いくつかのネットワークホップ上に配置され、データチャンク２０２（Ｂ）が利用可能である場合にも、データチャンク２０２（Ｂ）の取得が、パリティチャンク２０２（Ｐ）を使用したデータチャンク２０２（Ｂ）の演算よりも長い時間を所要しうるケースがこれに該当しうる。この結果、このような状況においては、第１システム１０２（１）は、単に最も迅速に取得されうる２つのデータチャンクのみを取得し、オブジェクトデータを再構築するために、パリティチャンク２０２（Ｐ）及び２つの取得されたデータチャンクを使用してもよい。いくつかの例では、それぞれのシステム１０２は、オブジェクトデータを再構築するためにパリティチャンクを使用するのかどうか、または、パリティチャンクを使用する代わりにデータチャンクを取得するのかどうか、を決定するために、ネットワークレイテンシー情報を維持してもよい。
【００５３】
図６は、いくつかの実装形態に係る、オブジェクトのデータチャンクへの分割、及び、パリティチャンクの決定の一例を示している。この例においては、ユーザ１２８（２）が、オブジェクトデータ６０２及びメタデータ６０３を有する第２オブジェクト６０１を送信し、この場合に、オブジェクトデータ６０２は、上述の第１オブジェクト２０１のものとは異なっているものと仮定する。例えば、ユーザ１２８（２）は、オブジェクト６０１を第３システム１０２（３）に送信するために、クライアント装置１２２（２）を使用するものと仮定する。第３システム１０２（３）は、オブジェクトメタデータ６０３をそのメタデータデータ構造１１６（３）内に記憶してもよく、また、オブジェクトデータ６０２をメタデータとは別個に記憶してもよい。
【００５４】
更に、第３システム１０２（３）は、図２及び図３に関して上述した例において第１システム１０２（１）によって使用されたものと同一のハッシュアルゴリズムを使用することにより、オブジェクトデータ６０２のハッシュ値を演算してもよい。次いで、第３システム１０２（３）は、オブジェクトデータ６０２のハッシュ値ｍｏｄｕｌｏ（４）を決定してもよい。この例においては、ハッシュｍｏｄｕｌｏ（４）の計算の結果は、６０４で示されているように、２の結果を返すものと仮定する。
【００５５】
これに加えて、システム１０２（３）は、オブジェクトデータ６０２を３つのデータチャンク６０２（Ａ）、６０２（Ｂ）、及び６０２（Ｃ）に分割してもよい。更に、システム１０２（３）は、上述のように、３つのデータチャンク６０２（Ａ）〜６０２（Ｃ）についてパリティチャンク６０２（Ｐ）を算出してもよい。この結果、システム１０２（３）は、図７に関して更に後述するように、データチャンク及び／又はパリティチャンクを分散型トポロジー１００内の他のシステム１０２に分散させる準備が整っている。
【００５６】
図７は、いくつかの実装形態に係る、オブジェクトチャンクの地理的な分散の一例を示している。上述のように、オブジェクトチャンクを分散させるための本明細書において記述されている技法は、ほぼランダムなチャンク記憶の分散を結果的にもたらすことができる。この実質的にランダムな分散に起因して、パリティチャンクの記憶に関する演算ペナルティが、分散型トポロジー１００内のすべてのシステム１０２の間において均等に分散される。
【００５７】
この例においては、ハッシュ値ｍｏｄ（４）の計算が２となることに基づいて、第１データチャンク６０２（Ａ）は、第３システム１０２（３）において保持され、その理由は、第３システム１０２（３）が、２０８で示されているように、２に等しいロール値を有するからである。残りのチャンクは、第２データチャンク６０２（Ｂ）が、２１０で示されているように、３に等しいロール値を有する第４システム１０２（４）に送信され、第３データチャンク６０２（Ｃ）が、２０４で示されているように、０に等しいロール値を有する第１システム１０２（１）に送信され、また、パリティチャンク６０２（Ｐ）が、２０６でて示されているように、１に等しいロール値を有する第２システム１０２（２）に送信される、ように、ラウンドロビン方式で順番に分散される。更には、上述のように、オブジェクト６０１用のオブジェクトメタデータ６０３も、個々のチャンク６０２（Ｂ）、６０２（Ｃ）、及び６０２（Ｐ）と共に、或いは、別個の送信において、個々のシステム１０２（４）、１０２（１）、及び１０２（２）のそれぞれに送信してもよい。
【００５８】
図８は、いくつかの実装形態に係る、オブジェクトのデータチャンクへの分割、及び、パリティチャンクの決定の一例を示している。オブジェクトストレージシステム内において、重複排除技法を使用することにより、オブジェクトデータによって消費されるストレージの量を劇的に低減することができる。一例として、オブジェクトストレージシステムによって受け取られた異なるオブジェクトのコンテンツデータを比較することにより、ファイルに基づいた重複排除を実行してもよい。データのコンテンツが複数のオブジェクトについて同一であるとシステムが決定した場合には、オブジェクトストレージシステムは、複製データを有する複数のオブジェクトのメタデータをストレージ上のオブジェクトデータコンテンツの単一のインスタンスに対してリンクすることにより、オブジェクトストレージシステムから複製データを除去することができる。
【００５９】
本明細書において記述されている技法を使用することにより、複製データを有するオブジェクトがイレイジャーコーディングされたチャンクに低減された際には、結果としてのチャンクも複製である。但し、イレイジャーコーディングされたチャンクが、分散型トポロジー内の複数のストレージシステムに跨ってランダムに分散された場合には、複製チャンクは、複数の異なる記憶場所において保存され、これにより、複製データの識別及び除去が困難になりうる。本明細書における実装形態は、同一のデータを有するチャンクが分散型トポロジー１００内の同一のストレージシステムに保存されることを保証し、これにより、分散型トポロジー１００内のそれぞれのローカルシステム１０２が複製データを独立的に識別及び除去することを可能にすることにより、この課題に対処している。従って、本明細書における実装形態は、グローバルな重複排除管理システムを必要としてはおらず、これを利用してもいない。
【００６０】
図８の例において、ユーザ１２８（Ｎ）が、上述の第１オブジェクト２０１のオブジェクトデータ２０２と同一のオブジェクトデータ８０２を有する第３オブジェクト８０１と、オブジェクトメタデータ８０３と、を送信するものと仮定する。例えば、ユーザ１２８（Ｎ）は、オブジェクト８０１を第４システム１０２（４）に送信するために、クライアント装置１２２（Ｎ）を使用するものと仮定する。第４システム１０２（４）は、オブジェクトメタデータをそのメタデータデータ構造（図８に、図示せず）内に記憶してもよく、また、オブジェクトデータ８０２をメモリ、ディスク、又はその他の記憶領域内に記憶してもよい。
【００６１】
更には、第４システム１０２（４）は、図２及び図３に関して上述した例の第１システム１０２（１）によって使用されたものと同一のハッシュアルゴリズムを使用することにより、オブジェクトデータ８０２のハッシュ値を演算してもよい。次いで、第４システム１０２（４）は、オブジェクトデータ８０２のハッシュ値ｍｏｄｕｌｏ（４）を決定してもよい。この例においては、ハッシュｍｏｄｕｌｏ（４）の計算の結果は、８０４で示されているように、１の結果を返すものと仮定する。
【００６２】
これに加えて、第４システム１０２（４）は、オブジェクトデータ８０２を３つのデータチャンク８０２（Ａ）、８０２（Ｂ）、及び８０２（Ｃ）に分割してもよい。更に、第４システム１０２（４）は、上述のように、３つのデータチャンク８０２（Ａ）〜８０２（Ｃ）についてのパリティチャンク８０２（Ｐ）を算出してもよい。この結果、第４システム１０２（４）は、図９に関して更に後述するように、データチャンク及び／又はパリティチャンクを分散型トポロジー内のその他のシステムに分散させるための準備が整っている。
【００６３】
図９は、いくつかの実装形態に係る、オブジェクトチャンクの地理的分散の一例を示している。上述のように、第４システム１０２（４）は、１の結果を返すハッシュｍｏｄｕｌｅ（４）演算を使用して、オブジェクトデータの記憶責任を演算してもよい。これは、第１システム１０２（１）が、同一のオブジェクトデータ２０２を有する第１オブジェクト２０１の記憶責任を決定した際と同一の結果である。従って、本明細書における分散技法は、同一のオブジェクトデータは、常に、同一のイレイジャーコーディングされたチャンクについて、同一の記憶責任が割り当てられることを保証している。
【００６４】
この例においては、第２システムが、２０６で示されているように、１に等しいロール値を有するから、１に等しいハッシュｍｏｄ（４）の計算に基づいて、第１データチャンク８０２（Ａ）は、第２システム１０２（２）に送信される。従って、第２データチャンク８０２（Ｂ）は、２０８で示されているように、２に等しいロール値を有する第３システム１０２（３）に送信され、第３データチャンク８０２（Ｃ）は、２１０で示されているように、３に等しいロール値を有する第４システム１０２（４）において保持され、また、パリティチャンク８０２（Ｐ）は、２０４で示されているように、０に等しいロール値を有する第１システム１０２（１）に送信される。更に、上述のように、決定されたハッシュ値を含むオブジェクト８０１のオブジェクトメタデータ８０３は、個々のチャンク８０２（Ｐ）、８０２（Ａ）、及び８０２（Ｂ）と共に、或いは、別個の送信において、個々のシステム１０２（１）、１０２（２）、及び１０２（３）のそれぞれに送信されてもよい。
【００６５】
図１０は、いくつかの実装形態に係る、複製のイレイジャーコーディングされたオブジェクトチャンクの決定の一例を示している。それぞれの記憶場所１０４〜１１０における個々のストレージシステム１０２（１）〜１０２（４）は、それぞれ、重複排除プログラム１００２の個々のインスタンスを含んでもよい。従って、第１システム１０２（１）は、重複排除プログラム１００２（１）を含み、第２システム１０２（２）は、重複排除プログラム１００２（２）を含み、第３システム１０２（３）は、重複排除プログラム１００２（３）を含み、また、第４システム１０２（４）は、重複排除プログラム１００２（４）を含む。上述のように、本明細書における分散技法の実装は、複製オブジェクトデータの複製のイレイジャーコーディングされたチャンクが常に同一の記憶場所において保存され、また、そのため重複排除の候補であることを保証している。
【００６６】
重複排除用の様々な技法を重複排除プログラム１００２によって採用してもよい。一例として、重複排除プログラム１００２は、個々のローカルシステムによって記憶されたすべてのデータチャンクのフィンガプリントを含むローカルフィンガプリントデータ構造１００４を維持してもよい。従って、第１システム１０２（１）は、フィンガプリントデータ構造１００４（１）を含み、第２システム１０２（２）は、フィンガプリントデータ構造１００４（２）を含み、第３システム１０２（３）は、フィンガプリントデータ構造１００４（３）を含み、第４システム１０２（４）は、フィンガプリントデータ構造１００４（４）を含む。
【００６７】
例えば、フィンガプリントは、ハッシュアルゴリズム又はその他の既知のフィンガプリント処理技法の使用などを通じて、それぞれのチャンクのコンテンツを示すように生成することができる。この結果、新しいイレイジャーコーディングされたチャンクがシステム１０２によって受け取られた際に、重複排除プログラム１００２は、新しいチャンクの新しいフィンガプリントを生成することができ、また、新しいフィンガプリントをフィンガプリントデータ構造１００４内に既に存在しているフィンガプリントと比較することができる。フィンガプリントデータ構造１００４内に既に存在しているフィンガプリントとの間においてマッチが見出された場合に、重複排除プログラムは、新たに受け取られたチャンクが、実際に、既に受け取られているチャンクの複製であることを確認するために、対応するイレイジャーコーディングされたチャンクのバイトごとの比較を実行するなどにより、データが実際に複製であることを保証するために、更に十分な比較を実行してもよい。
【００６８】
従って、１００６で示されているように、第１システム１０２（１）上の重複排除プログラム１００２（１）は、新しく受け取られたパリティチャンク８０２（Ｐ）が、予め受け取られているパリティチャンク２０２（Ｐ）の複製であると決定してもよく、１００８で示されているように、第２システム１０２（２）上の重複排除プログラム１００２（２）は、新たに受け取られたデータチャンク８０２（Ａ）が、予め受け取られているデータチャンク２０２（Ａ）の複製であると決定してもよく、１０１０で示されているように、第３システム１０２（３）上の重複排除プログラム１００２（３）は、新たに受け取られたデータチャンク８０２（Ｂ）が、予め受け取られたデータチャンク２０２（Ｂ）の複製であると決定してもよく、１０１２で示されているように、第４システム１０２（４）上の重複排除プログラム１００２（４）は、データチャンク８０２（Ｃ）が、予め受け取られたデータチャンク２０２（Ｃ）の複製であると決定してもよい。
【００６９】
図１１は、いくつかの実装形態に係る、複製オブジェクトチャンクの重複排除の一例を示している。複製データの決定に続いて、図１０に関して上述したように、個々のシステム１０２は、複製データの重複排除を実行してもよい。一例として、第１システム１０２（１）上の重複排除プログラム１００２（１）は、複製データを削除するか、または、さもなければ、削除のために複製データをマーキングし、且つ、例えば、既存のパリティチャンク２０２（Ｐ）などの、既存のデータを指し示すポインタ１１０２をメタデータデータ構造１１６（１）に追加する。重複排除プログラム１００２（１）は、ポインタ１１０２を新たに受け取られたパリティチャンク８０２Ｐ（図１１に、図示せず）について受け取られたオブジェクトメタデータ８０３（図１１には、示されていない）と関連付けてもよい。同様に、第２システム１０２（２）上の重複排除プログラム１００２（２）も、複製データを削除するか、さもなければ、削除のために複製データをマーキングし、且つ、例えば、既存のデータチャンク２０２（Ａ）などの、既存のデータを指し示すポインタ１１０４をメタデータデータ構造１１６（２）に追加する。重複排除プログラム１００２（２）は、ポインタ１１０４を新たに受け取られたパリティチャンク８０２（Ａ）（図１１に、図示せず）について受け取られたオブジェクトメタデータ８０３（図１１に、図示せず）と関連付けてもよい。これに加えて、第３システム１０２（３）上の重複排除プログラム１００２（３）も、複製データを削除するか、或いは、さもなければ、削除のために複製データをマーキングし、且つ、例えば、既存のデータチャンク２０２（Ｂ）などの、既存のデータを指し示すポインタ１１０６をメタデータデータ構造１１６（３）に追加する。重複排除プログラム１００２（３）は、ポインタ１１０６を新たに受け取られたパリティチャンク８０２（Ｂ）（図１１に、図示せず）について受け取られたオブジェクトメタデータ８０３（図１１に、図示せず）と関連付けてもよい。最後に、第４システム１０２（４）上の重複排除プログラム１００２（４）も、複製データを削除するか、または、さもなければ、削除のために複製データをマーキングし、且つ、例えば、既存のデータチャンク２０２（Ｃ）などの、既存のデータを指し示すポインタ１１０８をメタデータデータ構造１１６（４）に追加する。重複排除プログラム１００２（４）は、ポインタ１１０８を新たに受け取られたパリティチャンク８０２（Ｂ）（図１１には、図示せず）について受け取られたオブジェクトメタデータ８０３（図１１に、図示せず）と関連付けてもよい。従って、本明細書における分散及び重複排除技法を使用することにより、システム１０２は、分散型トポロジー１００の全体を通じて保存されたイレイジャーコーディングされたオブジェクトデータについて最大記憶効率を維持することができる。
【００７０】
図１２は、いくつかの実装形態に係る、オブジェクトデータがチャンクに低減される前又は後における複製オブジェクトデータの重複排除の一例を示している。この例において、第４システム１０２（４）は、オブジェクトデータ１２０２を有する第４オブジェクト１２０１と、オブジェクトデータ１２０６を有する第５オブジェクト１２０５との２つの更なるオブジェクトを受け取ったと仮定する。更に、この例においては、第４システム１０２（４）は、オブジェクトデータをチャンクに分割し、パリティを演算し、且つ、チャンクをその他のシステム１０２（１）〜１０２（３）に分散させる前に、１週間、２週間、１か月等の、規定された閾値期間にわたって、オブジェクトデータの完全なバージョンを維持するように構成されているものと仮定する。
【００７１】
従って、この例においては、重複排除プログラム１００２（４）は、１２０８で示されているように、完全なオブジェクトデータが維持される規定された閾値時間において、第５オブジェクトデータ１２０６が、第４オブジェクトデータ１２０２の複製であると決定している。これが発生した際には、重複排除プログラム１００２（４）は、第５オブジェクトデータ１２０４を削除し、第１オブジェクト１２０１のオブジェクトデータ１２０２を指し示す、第２オブジェクト１２０５のメタデータ（図１２に、図示せず）と関連付けたポインタを生成する。
【００７２】
その後に、第４オブジェクト１２０１のオブジェクトデータ１２０２の完全なバージョンを維持するための規定された時間閾値が満了したが、第５オブジェクト１２０５のオブジェクトデータ１２０６の完全な複写を維持するための規定された時間閾値が、まだ満了していないものと仮定する。従って、システム１０２（４）は、オブジェクトデータ１２０２をデータチャンクに分割し、パリティチャンクを決定し、例えば、図８及び図９に関して上述したように、割り当てられたロールに基づいて、個々のチャンクをその他のシステム１０２（１）〜１０２（３）に送信する。この結果、データチャンク１２０２（Ｃ）が、第４システム１０２（４）上で保持されることになる。その後に、重複排除プログラム１００２（４）は、図９に関して上述したように、それがシステム１０２（４）によって既に保存されているチャンク２０２（Ｃ）の複製であることに基づいて、データチャンク１２０２（Ｃ）を重複排除する。
【００７３】
更には、オブジェクトデータ１２０２を指し示す第２オブジェクト１２０５からのポインタが依然として存在していることから、オブジェクトデータ１２０２は、いまだシステム１０２（４）から削除されてはいない。その後に、オブジェクトデータ１２０６の完全なバージョンを維持するための規定された時間閾値が満了した際に、システム１０２（４）は、オブジェクトデータ１２０２をデータチャンクに分割し、パリティチャンクを決定し、例えば、図８及び図９に関して上述したように、割り当てられたロール値に基づいて、個々のチャンクをその他のシステム１０２（１）〜１０２（３）に送信する。この結果、データチャンク１２０６（Ｃ）は、第４システム１０２（４）上に保持されることになる。その後に、重複排除プログラム１００２（４）は、図９に関して上述したように、それがシステム１０２（４）によって既に保存されているチャンク２０２（Ｃ）の複製であることに基づいて、データチャンク１２０６（Ｃ）を重複排除する。
【００７４】
図１３は、いくつかの実装形態に係る、データチャンク及びパリティチャンクの決定の一例１３００を示している。いくつかの例においては、オブジェクトデータ２０２は、上述のように、データの開始時点に始まり、また、データの第１の３分の１から第１チャンクを生成し、データの第２の３分の１から第２チャンクを生成し、また、データの第３の３分の１から第３チャンクを生成し、また、次いで、これらの３つのチャンクからパリティを算出するなどにより、単に３つの等しいサイズのチャンクに分割されてもよい。
【００７５】
但し、この例においては、データチャンクは、オブジェクトデータのブロックをインターリーブすることにより、生成されている。従って、当初、オブジェクトデータ２０２は、オブジェクトデータ２０２をチャンクに分割する前に、複数の等しいサイズのブロック１３０２に分割してもよい。例えば、ブロックサイズは、２５６バイト、５１２バイト、１０２４バイトなどのような、任意の望ましいブロックサイズであってよい。一例として、ブロックサイズは、オブジェクトデータのサイズに基づいてもよい。例えば、非常に大きなデータオブジェクトは、相対的に大きなブロックに分割されてもよい一方、相対的に小さなデータオブジェクトは、相対的に小さなブロックサイズに分割されてもよい。
【００７６】
図示のように、オブジェクトデータ２０２は、第１ブロック１３０２（１）、第２ブロック１３０２（２）、第３ブロック１３０２（３）、第４ブロック１３０２（４）、第５ブロック１３０２（５）、第６ブロック１３０２（６）、第７ブロック１３０２（７）、第８ブロック１３０２（８）、第９ブロック１３０２（９）などを有する。データチャンクを生成する際には、第１ブロックから始まるシーケンスにおいて、ブロックは、複数のデータチャンクに交互に追加される。したがって、第１ブロック１３０２（１）は、第１データチャンク２０２（Ａ）の初めに追加され、第２ブロック１３０２（２）は、第２データチャンク２０２（Ｂ）の初めに追加され、且つ、第３ブロック１３０２（３）は、第３データチャンク２０２（Ｃ）の開始点に追加される。次に、第４ブロック１３０２（４）は、第１ブロック１３０２（１）に後続する位置において第１データチャンク２０２（Ａ）に追加され、第５ブロック１３０２（５）は、第２ブロック１３０２（２）に後続する位置において第２データチャンク２０２（Ｂ）に追加され、第６ブロック１３０２（６）は、第３ブロック１３０２（３）に後続する位置において第３データチャンク２０２（Ｃ）に追加される。このプロセスは、オブジェクトデータ２０２内のすべてのブロック１３０２がデータチャンク２０２（Ａ）〜２０２（Ｃ）へ分散されるまで継続されてもよい。
【００７７】
３つのデータチャンク２０２（Ａ）〜２０２（Ｃ）に対するパリティチャンク２０２（Ｐ）を算出する際に、システムは、インターリーブされたブロックを使用することにより、パリティ計算を実行してもよい。したがって、１３０４で示されているように、システムは、第１パリティブロック１３０６を演算するために、第１データチャンク２０２（Ａ）からの第１データブロック１３０２（１）と、第２データチャンク２０２（Ｂ）からの第２データブロック１３０２（２）と、第３データチャンク２０２（Ｃ）からの第３データブロック１３０２（３）とについてのパリティを算出してもよい。従って、パリティブロック１３０６は、オブジェクトデータ２０２の最初の３つのブロック１３０２（１）〜１３０２（３）のパリティデータを含む。パリティチャンク２０２（Ｐ）の計算は、次のパリティブロック１３０８を算出するためにデータブロック１３０２（４）〜１３０２（６）を次に選択することにより、この方式で継続してもよい。
【００７８】
この結果、このインターリーブされた方式によってデータチャンクを構成し、また、インターリーブされたデータに基づいてパリティチャンクを決定することにより、パリティチャンクを使用してオブジェクトデータを再構築する際に、パリティチャンクを使用して消失チャンクを再構築し、更に、単一パスにおいて、再構築されたデータをその他の２つのチャンクからのデータと連結することが可能でる。その理由は、ブロックが、消失チャンクデータを再生成するため及びその他のデータチャンクのブロックからのデータと再生成されたデータを連結するためにパリティデータを使用する間においてメモリに維持するためには十分に小さいからである。一方で、単純にオブジェクトデータ２０２を３分の１に分割することにより、データチャンクを生成する上述の第１の技法を使用した場合には、結果的に、パリティデータから消失データを再生成する際に、２つのパス、即ち、パリティデータから消失データを演算し、且つ、演算されたデータを記憶場所に保存するための１つのパスと、再生成されたデータをその他のチャンクからのデータと連結するための第２のパスと、が必要となりうる。更に、本明細書には、データをチャンクに分割し、パリティチャンクを算出する技法のいくつかの例が記述されているが、本明細書における開示の利益を有する当業者には、多数のその他の変形が明らかとなるであろう。
【００７９】
図１４及び図１５は、いくつかの実装形態に係るプロセス例を示すフロー図である。プロセスは、論理フロー図において、ブロックの集合体として示されており、ブロックは、動作のシーケンスを表し、これらのいくつか又はすべては、ハードウェア、ソフトウェア、又はこれらの組合せによって実装してもよい。ソフトウェアのコンテキストでは、ブロックは、１つ又は複数のプロセッサによって実行された際に、記述されている動作を実行するようにプロセッサをプログラムする、１つ又は複数のコンピュータ可読媒体上において保存されたコンピュータ実行可能命令を表してもよい。一般に、コンピュータ可読命令は、特定の機能を実行する、または、特定のデータタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。ブロックが記述されている順序は、限定として解釈してはならない。プロセス又は代替プロセスを実装するために、任意の数の記述されているブロックを任意の順序において及び／又は並行して組み合わせることが可能であり、また、すべてのブロックの実行が必要とされているわけではない。説明を目的として、プロセスは、本明細書においては、例において記述されている環境、フレームワーク、及びシステムを参照して記述されているが、プロセスは、様々なその他の環境、フレームワーク、及びシステムにおいて実装することもできる。
【００８０】
図１４は、いくつかの実装形態に係る、オブジェクトチャンクの分散のプロセス１４００の例を示すフロー図である。いくつかのケースにおいては、プロセス１４００は、サービス演算装置１１２又はその他の適切な演算装置のうちの少なくとも１つにより、少なくとも部分的に実行されてもよい。
【００８１】
１４０２で、演算装置は、異なる個々の地理的場所に配置されている少なくとも３つのシステムを有するシステムの分散型トポロジーを構成してもよい。一例として、システムは、異なる都市、異なる州、異なる国に配置されてもよく、または、さもなければ、異なる地理的領域内に配置されてもよい。
【００８２】
１４０４で、演算装置は、３つ以上のシステムのうちの第１システムにおいてデータオブジェクトを受け取ってもよく、データオブジェクトは、オブジェクトデータと、オブジェクトメタデータと、を含む。
【００８３】
１４０６で、演算装置は、データオブジェクトのオブジェクトデータのコンテンツを表す値を決定してもよい。
【００８４】
１４０８で、演算装置は、システムの合計数に基づいて、オブジェクトデータを複数のデータチャンクに分割し、複数のデータチャンクについてのパリティチャンクを決定することにより、複数のチャンクを決定してもよい。
【００８５】
１４１０で、演算装置は、システムのそれぞれに対応する個々のロール値を決定してもよい。
【００８６】
１４１２で、演算装置は、個々のロール値及びオブジェクトのコンテンツを表す値に基づいて、チャンクの個々のチャンクをシステムの個々のシステムに送信してもよい。
【００８７】
１４１４で、演算装置は、クライアント装置から、データオブジェクトの要求を受け取ってもよい。
【００８８】
１４１６で、演算装置は、Ｍ−２個のチャンクをその他のシステムから受け取ってもよく、ここで、Ｍは、システムの合計数である。
【００８９】
１４１８で、演算装置は、システムにおいて保持されているチャンク及びＭ−２個のその他のチャンクからオブジェクトデータを再構築してもよい。
【００９０】
１４２０で、演算装置は、要求に応答して、再構築されたオブジェクトデータをクライアント装置に送信してもよい。
【００９１】
図１５は、いくつかの実装形態に係る、オブジェクトチャンクを重複排除するプロセス１５００の例を示すフロー図である。いくつかのケースにおいては、プロセス１５００は、サービス演算装置１１２（複数も可）又はその他の適切な演算装置（複数も可）により、少なくとも部分的に実行されてもよい。いくつかの例においては、プロセス１５００は、上述のプロセス１４００と組合せて実行されてもよい。
【００９２】
１５０２で、演算装置は、異なる個々の地理的場所に配置された少なくとも３つのシステムを有するシステムの分散型トポロジーを構成してもよい。
【００９３】
１５０４で、演算装置は、オブジェクトチャンクを生成してもよく、或いは、さもなければ、受け取ってもよく、ここで、オブジェクトチャンクは、データオブジェクトに対応するデータチャンク又はパリティチャンクのうちの１つである。
【００９４】
１５０６で、演算装置は、システムによって受け取られたチャンクのメタデータをメタデータデータ構造に追加してもよい。
【００９５】
１５０８で、演算装置は、受け取られたチャンクが、システムによって既に保存されているチャンクの複製であると決定するために、受け取られたチャンクのデータをシステムによって既に保存されているチャンクのデータと比較することにより、システムにおいてデータ重複排除してもよい。
【００９６】
１５１０で、受け取られたチャンクが複製であることを決定したことに基づいて、演算装置は、チャンクのメタデータをシステムによって既に保存されているチャンクのデータに対するポインタと関連付けてもよい。
【００９７】
１５１２で、演算装置は、システムによって受け取られたチャンクのデータを削除される必要があることを示してもよい。
【００９８】
本明細書において記述されているプロセス例は、説明を目的として提供されたプロセスの例であるに過ぎない。本明細書における開示に鑑み、当業者には、多数のその他の変形が明らかとなるであろう。更に、本明細書における開示は、プロセスを実行するための適切なフレームワーク、アーキテクチャ、及び環境のいくつかの例について記述しているが、本明細書における実装形態は、図示及び説明されている特定の例に限定されるものではない。更に、本開示は、記述されているように、また、図面において示されているように、様々な例示用の実装形態を提供している。但し、本開示は、本明細書において記述及び図示されている実装形態に限定されるものではなく、当業者には、わかるように、或いは、知られるように、その他の実装形態に拡張することができる。
【００９９】
図１６は、いくつかの実装形態に係る演算システム１０２の構成例を示している。この例においては、演算システム１０２は、本明細書において記述されているオブジェクトストレージシステムの機能を実行しうるように構成されたサービス演算装置１１２（本明細書においては、ノードとも呼称される）のクラスタ又はその他の複数のサービス演算装置１１２であってよい。いくつかの例においては、演算システム１０２は、１つにネットワーク接続された独立型ノードの冗長型のアレイ（ＲＡＩＮ：ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｎｏｄｅ）と呼称することができる。図示の例においては、複数のサービス演算装置１１２は、ネットワークスイッチ１６０２のペアとの通信状態にある。ネットワークスイッチ１６０２は、サービス演算装置１１２の間におけるピアツーピア通信を可能にするための内部スイッチとして機能する第１スイッチ１６０２（１）と、サービス演算装置１１２に対する外部アクセスを可能にするための外部スイッチとして機能する第２スイッチ１６０２（２）と、を含んでもよい。それぞれのスイッチ１６０２は、クラスタ又はその他の演算システム構成におけるすべての潜在的なサービス演算装置１１２を扱うための十分なポートを含んでもよい。
【０１００】
また、この例における演算システム１０２は、配電ユニット（ＰＤＵ：ｐｏｗｅｒ  ｄｉｓｔｒｉｂｕｔｉｏｎ  ｕｎｉｔ）１６０４と、無停電電源装置（ＵＰＳ：ｕｎｉｎｔｅｒｒｕｐｔｉｂｌｅ  ｐｏｗｅｒ  ｓｕｐｐｌｙ）１６０６と、を含んでもよい。ＰＤＵ１６０４は、サービス演算装置１１２及びスイッチ１６０２に電源供給するために使用され、また、ＵＰＳ１６０６は、電源の変動及び／又は障害のケースにおいてノード及びスイッチを保護することができる。上述のように、演算システム１０２は、上述の１以上のネットワーク１２０及び１２４などの、ネットワークに接続されていてもよく、ネットワークは、本明細書の別の場所において列挙されているように、インターネット又はその他のＷＡＮ、ＬＡＮ、または、その他のタイプのネットワークを含んでもよい。
【０１０１】
サービス演算装置１１２は、同種のものから構成されてもよく、または、異種のものから構成されてもよい。典型的なサービス演算装置１１２は、ＬＩＮＵＸ（登録商標）、ＷＩＮＤＯＷＳ（登録商標）等の、オペレーティングシステム１６０８を実行してもよい。これに加えて、サービス演算装置１１２のいくつか又はすべては、更に後述するように、オブジェクトデータ及び／又はシステムデータを保存するための、１以上のハードディスクドライブ（ＨＤＤ：Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及び／又は１以上の半導体ドライブ（ＳＳＤ：Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｄｒｉｖｅ）を含んでもよく、または、これらにアクセスしてもよい。一例として、サービス演算装置１１２は、任意の数の方法によって実施されうる１以上のサーバー又はその他のタイプの演算装置を含んでもよい。例えば、サーバーのケースにおいては、モジュール、その他の機能的コンポーネント、及びデータストレージの少なくとも一部分は、サーバーのクラスタ、サーバーファーム又はデータセンタ、クラウドによってホスティングされた演算装置などの内部のように、少なくとも１つのサーバー上において実装してもよいが、これに加えて、或いは、この代わりに、その他のコンピュータアーキテクチャを使用してもよい。
【０１０２】
図示の例においては、例示用のサービス演算装置１１２は、１以上のプロセッサ１６１２、１以上のコンピュータ可読媒体１６１４、及び１以上の通信インターフェイス１６１６を含むか、或いは、これらと関連付けられていてもよい。それぞれのプロセッサ１６１２は、単一の処理ユニット又はいくつかの処理ユニットであってよく、また、１以上の演算ユニット又は複数の処理コアを含むことができる。１つ又は複数のプロセッサ１６１２は、１以上の中央処理ユニット、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシーン、論理回路、グラフィクス処理ユニット、及び／又は動作命令に基づいて信号を操作する任意の装置として実装することができる。例えば、１つ又は複数のプロセッサ１６１２は、本明細書において記述されているアルゴリズム及びプロセスを実行するように具体的にプログラミング又は構成された任意の適切なタイプの１つ又は複数のハードウェアプロセッサ及び／又は論理回路であってよい。プロセッサ１６１２（複数も可）は、コンピュータ可読媒体１６１４内に記憶されているコンピュータ可読命令をフェッチ及び実行するように構成されることが可能であり、また、これらの命令は、本明細書において記述されている機能を実行するようにプロセッサ１６１２（複数も可）をプログラムすることができる。
【０１０３】
いくつかのケースにおいては、コンピュータ可読媒体１６１４は、図１に関して上述したストレージ装置１１４の少なくとも一部分を含んでもよい。ストレージ装置は、ＳＳＤ及び／又はＨＤＤ等を含んでもよい。更に、コンピュータ可読媒体１６１４は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの、情報の記憶のための任意のタイプの技術において実装された揮発性及び不揮発性メモリ及び／又は着脱自在及び非着脱自在の媒体を含んでもよい。従って、コンピュータ可読媒体１６１４は、これに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、又はその他のメモリ技術、光ストレージ、ソリッドステートストレージ、磁気テープ、磁気ディスクストレージ、ＲＡＩＤストレージシステム、ストレージアレイ、ネットワークアタッチトストレージ、ストレージエリアネットワーク、クラウドストレージ、或いは、望ましい情報を保存するために使用され、且つ、演算装置によってアクセス可能である、任意のその他の媒体を含んでもよい。ノード１０２の構成に応じて、コンピュータ可読媒体１６１４は、言及された際に、非一時的なコンピュータ可読媒体が、エネルギー、搬送波信号、電磁波、及び／又は信号自体を排除する程度に、有体の非一時的な媒体であってよい。
【０１０４】
コンピュータ可読媒体１６１４は、１つ又は複数のプロセッサ１６１２によって実行可能な任意の数の機能的コンポーネントを記憶するために使用されてもよい。多くの実装形態においては、これらの機能的コンポーネントは、１以上のプロセッサ１６１２によって実行可能であり、また、実行された際に、本明細書においてサービス演算装置１１２（複数も可）に帰されているアクションを実行するようにプロセッサ１６１２（複数も可）を具体的にプログラミングする、１以上のコンピュータプログラム、アプリケーション、又はこれらの一部分、実行可能コード、又はその他の実行可能命令であってよい。コンピュータ可読媒体１６１４内に記憶されている機能的コンポーネントは、データオブジェクトをクライアント装置に送信し、且つ、データオブジェクトをクライアント装置から受け取るなどのために、クライアント装置と通信しうるサーバープログラム１６１８を含んでもよい。機能的コンポーネントは、オブジェクトをチャンクに分割し、パリティチャンクを決定し、また、割り当てられたロールに基づいて分散型トポロジー内のその他のシステムにチャンクを分散させるなどのために、本明細書において記述されたイレイジャーコーディング及びストレージ管理アルゴリズムを実行しうるストレージマネージャプログラム１６２０を更に含んでもよい。これに加えて、ストレージマネージャプログラム１６２０は、図９〜図１２に関して上述したものなどの、本明細書において記述されている重複排除アルゴリズムのうちの１以上を提供しうる重複排除プログラム１００２を含んでいてもよく、或いは、これらにアクセスできてもよい。コンピュータ可読媒体１６１４に記憶されている更なる機能的コンポーネントは、サービス演算装置１１２の様々な機能を制御及び管理するためのオペレーティングシステム１６０８を含んでもよい。一例として、これらの機能的コンポーネントは、コンピュータ可読媒体１６１４のストレージ部分内に記憶されてもよく、コンピュータ可読媒体１６１４のローカルメモリ部分に読み込まれてもよく、また、１以上のプロセッサ１６１２によって実行されてもよい。
【０１０５】
これに加えて、コンピュータ可読媒体１６１４は、本明細書において記述されている機能及びサービスを実行するために使用されるデータ及びデータ構造を記憶するようにしてもよい。例えば、コンピュータ可読媒体１６１４は、システム１０２によって記憶されているオブジェクトチャンク１１８に関するメタデータを維持するために、メタデータデータ構造１１６を記憶してもよい。また、コンピュータ可読媒体１６１４は、重複排除プログラム１００２によって使用されうるフィンガプリントデータ構造１００４を記憶してもよい。これに加えて、コンピュータ可読媒体１６１４は、オブジェクトチャンク１１８を記憶してもよい。また、サービス演算装置１１２は、プログラムやドライバなどを含みうるその他の機能的コンポーネント及びデータと、機能的コンポーネントによって使用又は生成されるデータと、を含んでいてもよく、または、これらを維持してもよい。更に、サービス演算装置１１２は、多くのその他の論理的な、プログラム的な、及び、物理的な、コンポーネントを含んでいてもよく、これらのうちの記述されているのは、本明細書における説明に関係するその例であるに過ぎない。
【０１０６】
通信インターフェイス１６１６（複数も可）は、上述のネットワーク１２０（複数も可）及び１２４上などにおいて、様々なその他の装置との間の通信を可能にするための、１以上のインターフェイス及びハードウェアコンポーネントを含んでもよい。例えば、通信インターフェイス１６１６（複数も可）は、本明細書の別の場所において更に列挙されているように、ＬＡＮ、インターネット、ケーブルネットワーク、セルラーネットワーク、無線ネットワーク（例えば、Ｗｉ−Ｆｉ）及び有線ネットワーク（例えば、ファイバーチャネル、光ファイバ、Ｅｔｈｅｒｎｅｔ）、直接接続のみならず、ＢＬＵＥＴＯＯＴＨ（登録商標）などの近距離通信、並びに、これらに類似したものの１以上を通じて、通信を可能にしてもよい。更には、上述の演算システム１０２の例は、本明細書の例において記述されている機能を実行しうるオブジェクトストレージシステムとして使用するのに適した演算システム１０２の一例であるに過ぎない。
【０１０７】
図１７は、いくつかの実装形態に係る、演算システム１０２の構成の他の例を示している。システム１０２は、１以上のネットワーク１７０４などを介して、ストレージシステム１７０２と通信しうる、または、その他の方法でこれに結合された、少なくとも１つのサービス演算装置１１２を含む。典型的には、１以上のネットワーク１７０４は、これに限定されないが、ＬＡＮ、ファイバーチャネルネットワークなどのストレージエリアネットワーク（ＳＡＮ：ｓｔｏｒａｇｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）、又はこれらに類似したものを含んでもよい、また、本明細書において記述されているその他のタイプのネットワーク、直接接続、又はこれらに類似したものを含んでもよい。
【０１０８】
いくつかの例においては、少なくとも１つのサービス演算装置１１２は、任意の数の方式によって実施されうる１以上のサーバー又はその他のタイプの演算装置を含んでもよい。例えば、サーバーのケースにおいては、プログラム、その他の機能的コンポーネント、及びデータストレージの少なくとも一部分は、複数のサーバー、サーバーファーム、データセンタ、クラウドによってホスティングされた演算サービスなどの内部のように、少なくとも１つのサーバー上において実装してもよいが、これに加えて、又はこの代わりに、その他のコンピュータアーキテクチャを使用してもよい。図示の例においては、サービス演算装置１１２は、１以上のプロセッサ１７１０、１つ又は複数のコンピュータ可読媒体１７１２、及び１以上の通信インターフェイス１７１４を含むか、或いは、これらと関連付けられていてもよい。
【０１０９】
それぞれのプロセッサ１７１０は、単一の処理ユニット又はいくつかの処理ユニットであってもよく、また、単一の又は複数の演算ユニット、または、複数の処理コアを含んでもよい。プロセッサ１７１０（複数も可）は、１以上の中央処理ユニット、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシーン、論理回路、グラフィクスプロセッサ、及び／又は動作命令に基づいて信号を操作する任意の装置として実装してもよい。一例として、プロセッサ１７１０（複数も可）は、本明細書において記述されているアルゴリズム及びプロセスを実行するように具体的にプログラミング又は構成された任意の適切なタイプの１以上のハードウェアプロセッサ及び／又は論理回路を含んでもよい。プロセッサ１７１０（複数も可）は、本明細書において記述されている機能を実行するようにプロセッサ１７１０（複数も可）をプログラムするために実行されうる、コンピュータ可読媒体１７１２に記憶されたコンピュータ可読命令をフェッチ及び実行するように構成されてもよい。
【０１１０】
コンピュータ可読媒体１７１２は、コンピュータ可読命令、データ構造、プログラムモジュール、又はその他のデータなどの、情報の記憶のための任意のタイプの技術において実装された揮発性及び不揮発性メモリ及び／又は着脱自在及び非着脱自在の媒体を含んでもよい。例えば、コンピュータ可読媒体１７１２は、これに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又はその他のメモリ技術、光ストレージ、ソリッドステートストレージ、磁気テープ、磁気ディスクストレージ、ＲＡＩＤストレージシステム、ストレージアレイ、ネットワークアタッチトストレージ、ストレージエリアネットワーク、クラウドストレージ、或いは、望ましい情報を記憶するために使用され、且つ、演算装置によってアクセス可能である、任意のその他の媒体を含んでもよい。サービス演算装置１１２の構成に応じて、コンピュータ可読媒体１７１２は、言及された際に、非一時的なコンピュータ可読媒体が、エネルギー、搬送波信号、電磁波、及び／又は信号自体などの媒体を排除する、程度に、有体の非一時的な媒体であってよい。いくつかのケースにおいては、コンピュータ可読媒体１７１２は、サービス演算装置１１２と同一の場所に位置してもよい。一方、その他の例においては、コンピュータ可読媒体１７１２は、サービス演算装置１１２から部分的に離れていてもよい。例えば、いくつかのケースにおいては、コンピュータ可読媒体１７１２は、ストレージシステム１７０２内のストレージの一部分を含んでもよい。
【０１１１】
コンピュータ可読媒体１７１２は、プロセッサ１７１０（複数も可）によって実行可能な任意の数の機能的コンポーネントを記憶するために、使用してもよい。多くの実装形態においては、これらの機能的コンポーネントは、プロセッサ１７１０（複数も可）によって実行可能であり、実行された際に、本明細書においてサービス演算装置１１２に帰されているアクションを実行するようにプロセッサ１７１０（複数も可）を具体的にプログラムする、命令又はプログラムを含む。コンピュータ可読媒体１７１２内において保存されている機能的コンポーネントは、サーバープログラム１７１６、ストレージマネージャプログラム１７１８、及び重複排除プログラム１００２を含んでいてもよく、このそれぞれは、１以上のコンピュータプログラム、アプリケーション、又はこれらの一部分、実行可能コード、或いは、その他の実行可能命令を含んでもよい。例えば、サーバープログラム１７１６は、クライアント装置及びストレージシステム１７０２との間の通信機能を提供してもよい。ストレージマネージャプログラム１７１８は、ストレージシステム１７０２に記憶されているオブジェクトチャンク１１８を含むオブジェクトデータに対応するオブジェクトメタデータ又はこれに類似したものを含むメタデータデータ構造１１６を生成し及び管理するためのデータベース管理機能を含んでもよい。ストレージマネージャプログラム１７１８は、オブジェクトをチャンクに分割する、チャンクをイレイジャーコーディングする、チャンクを分散させる、及び、ストレージシステム１７０２を重複排除するために重複排除プログラム１００２を使用する、機能を更に実行してもよい。コンピュータ可読媒体１７１２内に記憶されている更なる機能的コンポーネントは、サービス演算装置１１２の様々な機能を制御し、及び管理するためのオペレーティングシステム１７２０を含んでもよい。いくつかのケースにおいては、機能的コンポーネントは、コンピュータ可読媒体１７１２のストレージ部分内に記憶されてもよく、コンピュータ可読媒体１７１２のローカルメモリ部分に読み込まれてもよく、また、１以上のプロセッサ１７１０によって実行されてもよい。
【０１１２】
これに加えて、コンピュータ可読媒体１７１２は、本明細書において記述されている機能及びサービスを実行するために使用されるデータ及びデータ構造を記憶してもよい。例えば、コンピュータ可読媒体１７１２は、メタデータデータ構造１１６及びフィンガプリントデータ構造１００４を記憶してもよい。また、サービス演算装置１１２は、プログラムやドライバなどを含みうるその他の機能的コンポーネント及びデータと、機能的コンポーネントによって使用又は生成されるデータと、を含んでいてもよく、或いは、これらを維持してもよい。更に、サービス演算装置１１２は、多くの他の論理的な、プログラム的な、及び、物理的な、コンポーネントを含んでいてもよく、これらのうちの上述されているものは、本明細書における説明に関係している例であるに過ぎない。
【０１１３】
通信インターフェイス１７１４（複数も可）は、ネットワーク１２０、１２４、及び１７０４上などの、様々なその他の装置との間の通信を可能にするための、１以上のインターフェイス及びハードウェアコンポーネントを含んでもよい。従って、通信インターフェイス１７１４は、ストレージシステム１７０２と通信するための接続を提供する１以上のポートと、クライアント装置１０８と通信するためのネットワーク１２０（複数も可）に対する接続を提供する１以上のポートと、を含んでいてもよく、或いは、これを結合してもよい。例えば、通信インターフェイス１７１４（複数も可）は、本明細書の別の場所において更に列挙されているように、ＬＡＮ、インターネット、ケーブルネットワーク、セルラーネットワーク、無線ネットワーク（例えば、Ｗｉ−Ｆｉ）及び有線ネットワーク（例えば、ファイバーチャネル、光ファイバ、Ｅｔｈｅｒｎｅｔ）、直接接続のみならず、ＢＬＵＥＴＯＯＴＨ（登録商標）などの近距離通信、並びに、これらに類似したもののうちの１以上を通じた通信を可能にしてもよい。
【０１１４】
ストレージシステム１７０２は、１以上のストレージ演算装置１７３０を含んでいてもよく、これらは、サービス演算装置１１２に関して上述した例のいずれかなどの、１以上のサーバー又は任意のその他の適切な演算装置を含んでもよい。ストレージ演算装置１７３０（複数も可）は、それぞれ、１以上のプロセッサ１７３２、１以上のコンピュータ可読媒体１７３４、及び１以上の通信インターフェイス１７３６を含んでもよい。例えば、プロセッサ１７３２は、プロセッサ１７１０に関して上述した例のいずれかに対応していてもよく、コンピュータ可読媒体１７３４は、コンピュータ可読媒体１７１２に関して上述した例のいずれかに対応していてもよく、また、通信インターフェイス１７３６は、通信インターフェイス１７１４に関して上述した例のいずれかに対応していてもよい。
【０１１５】
これに加えて、コンピュータ可読媒体１７３４は、ストレージシステム１７０２内に含まれているストレージ１７４０上におけるデータの記憶を管理するための１以上のプロセッサ１７３２によって実行される機能的コンポーネントとして、ストレージプログラム１７３８を含んでもよい。ストレージ１７４０は、ストレージ装置１１４の１以上のアレイ１７４４上においてデータを記憶するために、ストレージ１７４０と関連する１以上のコントローラ１７４２を含んでもよい。例えば、コントローラ１７４２は、ＲＡＩＤ構成又は任意のその他の適切なストレージ構成においてアレイ１７４４を構成するため、及び／又は、ストレージ装置１１４に基づいた論理ユニットをストレージプログラム１７３８に対して提示するため、及び、基礎をなす物理的ストレージ装置１１４上に記憶されているデータオブジェクト１１８などのデータを管理するために、アレイ１７４４を制御してもよい。ストレージ装置１１４は、ハードディスクドライブ、ソリッドステートドライブ、光ドライブ、磁気テープ、これらの組合せなどのような、任意のタイプのストレージ装置であってよい。これに加えて、いくつかのシステム例について記述されているが、本明細書における開示の利益を有する当業者には、本明細書における分散型のオブジェクトストレージ、イレイジャーコーディング、及び重複排除技法を実装しうる多数のその他のシステムが明らかとなるであろう。
【０１１６】
本明細書において記述されている様々な命令、プロセス、及び技法は、本明細書において、コンピュータ可読媒体上において保存される、且つ、プロセッサ（複数も可）によって実行される、プログラムモジュールなどの、コンピュータ実行可能命令の一般的なコンテキストにおいて検討してもよい。一般に、プログラムモジュールは、特定のタスクを実行するための、又は特定の抽象的データタイプを実装するための、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、実行可能コードなどを含む。これらのプログラムモジュール等は、仮想マシーン又はその他のジャストインタイムコンパイル実行環境などにおいて、ネイティブコードとして実行されてもよく、或いは、ダウンロードされて実行されてもよい。典型的には、プログラムモジュールの機能は、様々な実装形態において、適宜、組み合わせられてもよく、或いは、分散されてもよい。これらのモジュール及び技法の実装形態は、コンピュータストレージ媒体上に記憶されてもよく、或いは、なんらかの通信媒体の形態に跨って送信されてもよい。
【０１１７】
主題は、構造的特徴及び／又は方法的行為に固有の言語において記述されているが、添付の請求項において定義されている主題は、必ずしも、記述されている特定の特徴又は行為に限定されるものではないことを理解されたい。むしろ、特定の特徴及び行為は、請求項を実装する例示用の形態として開示されている。
【図１】
0006934068.tif 000002
【図２】
0006934068.tif 000003
【図３】
0006934068.tif 000004
【図４】
0006934068.tif 000005
【図５】
0006934068.tif 000006
【図６】
0006934068.tif 000007
【図７】
0006934068.tif 000008
【図８】
0006934068.tif 000009
【図９】
0006934068.tif 000010
【図１０】
0006934068.tif 000011
【図１１】
0006934068.tif 000012
【図１２】
0006934068.tif 000013
【図１３】
0006934068.tif 000014
【図１４】
0006934068.tif 000015
【図１５】
0006934068.tif 000016
【図１６】
0006934068.tif 000017
【図１７】
0006934068.tif 000018