(57)【要約】【課題】分散型データ複製システムにおいて、冗長な複製の状態を反映する。【解決手段】分散型データ複製システムにおける装置群のうちの１つの装置によって、方法が実行される。方法は、分散型データ複製システムにおけるオブジェクトのインデックスを記憶することを含み、そのインデックスは、オブジェクトが、分散型データ複製システム内の複数の装置によって局部的に記憶される間に複製される。方法は、また、インデックスの少なくとも一部のスキャンを実行すること、およびそのインデックスのスキャンに基づいて、オブジェクトの少なくとも１つのの冗長な複製を識別することを含む。方法は、さらに、冗長な複製を重複排除すること、および冗長な複製の状態を反映するためにインデックスを更新することを含む。【選択図】図１
2014139824.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実行可能指令を含むコンピュータ読取可能メモリであって、
前記コンピュータ読取可能メモリは、
分散化データ複製システムに含まれるオブジェクトに関連付けられたインデックスの一部のスキャンを実行するための１つまたはより多くの指令と、
前記インデックスの一部の前記スキャンに基づいて、前記オブジェクトの１つの冗長な複製を識別するための１つまたはより多くの指令と、
前記冗長な複製に関連付けられた前記インデックスの前記一部に記録を書き込むための１つまたはより多くの指令とを含む、コンピュータ読取可能メモリ。
【請求項２】
前記冗長な複製に関連した前記インデックスの一部へ変化を書き込むための１つまたはより多くの指令をさらに含み、
前記変化は、前記冗長な複製についての重複排除レコードを含み、
前記重複排除レコードは、前記冗長な複製が重複を排除されることを示す、請求項１に記載のコンピュータ読取可能メモリ。
【請求項３】
前記インデックスに含まれる前記オブジェクトの中の他の１つについてのリクエストを受信するための１つまたはより多くの指令と、
前記インデックスに基づいて、前記オブジェクトの中の前記他の１つの複製をそれから読み出すためのストレージクラスタを選択するための１つまたはより多くの指令と、
前記選択されたストレージクラスタから、前記オブジェクトの中の前記他の１つの前記複製を読み出すための１つまたはより多くの指令と、
前記リクエストを開始する装置についての前記オブジェクトの前記他の１つの前記複製を提供するための１つまたはより多くの指示とをさらに含む、請求項１に記載のコンピュータ読取可能メモリ。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
企業コンピューティングランドスケープは、中央サービスアーキテクチャが分散型ストレージクラスタへ移行したという点で、ストレージアーキテクチャにおいて抜本的な変化をもたらした。ビジネスは記憶効率を増加するための手法を模索しているので、汎用コンピュータから構築されるストレージクラスタは、新しいデータ量の多いアプリケーションのための高い性能、利用可能性、およびスケーラビリティを、モノリシックディスクアレイと比較して、わずかなコストで供給し得る。ストレージクラスタの全潜在能力を解き放つために、データは複数の地理的位置にわたって複製され、それによって、利用可能性を増大させるとともに、クライエントからのネットワーク距離を低減する。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
データの重複排除は、重複オブジェクトを識別し、重複を除去することによって必要とされる記憶空間を低減し得る。結果として、データ重複排除は、ストレージ産業について非常に重要となりつつあり、多くの重複を含み得る大規模システムの必要性によって促進されつつある。
【課題を解決するための手段】
【０００３】
要約
１つの実行例によれば、方法は、分散型データ複製システムにおける、装置群のうちの１つの装置によって実行され得る。方法は、分散型データ複製システムにおいて、オブジェクトのインデックスを記憶することを含み、オブジェクトの複製が分散型データ複製システムにおける複数の装置によって局部的に記憶される間に、そのインデックスが複製される。方法は、そのインデックスの少なくとも一部のスキャンを実行すること、および、インデックのスキャンに基づいて、オブジェクトの少なくとも１つの冗長な複製を識別することも含み得る。方法は、さらに、インデックスの一部に重複排除レコードを書き込むことによって、冗長な複製の重複排除を行なうことを含み得る。
【０００４】
他の実行例によれば、分散型データ複製システムにおける装置群のうちの１つの装置は、分散型データ複製システムにおけるオブジェクトのインデックスを記憶するための手段と、インデックスの変化を書き込んでオブジェクトのうちの１つの複製の状態を指定するための手段と、そのインデックスへの変化を分散型データ複製システムにおける複数の装置に複製するための手段と、インデックスの少なくとも一部のスキャンを実行するための手段と、インデックスのスキャンに基づいてオブジェクトのうちの１つの冗長な複製を識別するための手段と、冗長な複製を重複排除するための手段とを含み得る。
【０００５】
さらに他の実行例によれば、システムは、指令、オブジェクトのデータストア、およびオブジェクトのインデックスを記憶するためのメモリと、プロセッサとを含み得る。プロセッサは、メモリ内の指令を実行して、データストア内のオブジェクトの状態を識別し、その状態は、オブジェクトが複製を有しているか否か、および削除リクエストがそのオブジェクトに関連しているか否かに関連し、プロセッサは、オブジェクトの状態に基づいて重複排除指示レコードをそのインデックスに書き込み、その重複排除指示レコードを伴うインデックスを１つまたはより多くの装置に複製し、その１つまたはより多くの装置から、そのオブジェクトに関連する他の重複排除指示レコードを受信し、重複排除指示レコードおよび他の重複排除指示レコードは、そのオブジェクトの１つまたはより多くの複製の
削除のための基準を提供する。
【０００６】
さらに他の実行例によれば、１つまたより多くの装置によって実行される方法は、分散型データ複製システムにおける複数の装置内のオブジェクトのインデックスを記憶すること、およびそのオブジェクトを局部的に記憶する間に、分散型データ複製システムを通してそのインデックスを複製することを含み、各装置はそのインデックスの特定のサブセットにおけるオブジェクトの重複排除に関与し、方法は、そのインデックスのサブセットの各々のスキャンを実行してそのスキャンに基づいて冗長な複製を識別すること、その冗長を重複排除すること、および進行中の削除リクエストを有する複製を伴う装置からのオブジェクトを、以前に重複排除された複製を伴う装置に自動的にコピーすることをさらに含み得る。
【０００７】
さらなる実行例によれば、コンピュータ読取可能メモリは、コンピュータ実行可能指令を含み得る。コンピュータ読取可能メモリは、分散型データ複製システムにおけるオブジェクトのインデックスの一部のスキャンを実行するための１つまたはより多くの指令と、そのインデックスの一部のスキャンに基づいてオブジェクトのうちの１つの複製の冗長な複製を識別するための１つまたはより多くの指令と、その冗長な複製を重複排除するための１つまたはより多くの指令とを含み得る。
【０００８】
図面の簡単な説明
添付の図面は、この明細書に含まれるとともにこの明細書の一部を成し、明細書に記載される１つまたはより多くの実施形態を例示し、その記述とともに、これらの実施形態を説明する。
【図面の簡単な説明】
【０００９】
【図１】本明細書に記載される方法およびシステムが実現され得る例示的なネットワークの図である。
【図２】図１のファイルシステムの例示的な構成を示す図である。
【図３】図１のストレージクラスタの例示的な要素を示す図である。
【図４】図１の例示的なストレージクラスタの機能ブロック図である。
【図５】分散型マルチマスタデータ複製システムのインデックスにおいて用いられ得る、例示的なレコード構造を示す図である。
【図６Ａ】クライエント起動されるアップロード／削除動作を管理するための例示的なプロセスのフローチャートである。
【図６Ｂ】クライエント起動されるアップロード／削除動作を管理するための例示的なプロセスのフローチャートである。
【図７】分散型マルチマスタデータ複製システムにおける重複排除を実行するための例示的なプロセスのフローチャートである。
【図８】削除リクエストを管理するための例示的なプロセスのフローチャートである。
【図９】重複した複製を除去するための例示的なプロセスのフローチャートである。
【図１０】分散型マルチマスタデータ複製システムにおいて、バンド幅消費を最適化するとともに時間遅れを低減するための例示的なプロセスのフローチャートである。
【図１１】本明細書に記載された実行例に従う、例示的なグローバルインデックスの一部を示す図である。
【発明を実施するための形態】
【００１０】
詳細な説明
以下の詳細な説明は、添付の図面を参照する。異なる図面における同じ参照番号は、同じまたは類似の要素を特定し得る。また、以下の詳細な説明は、本発明を限定するものではない。
【００１１】
本明細書に記載されるシステムおよび／または方法は、不変オブジェクト（immutable object）についての利用可能性、活性（liveness）および一貫性保証を提供する複製されたストレージクラスタのための、非同期分散型重複排除アルゴリズムを提供し得る。本明細書に記載される実行例は、分散型マルチマスタデータ複製システムの下部複製層を用いて、異なるストレージクラスタ間のコンテンツアドレス可能インデックス（本明細書においては、「グローバルインデックス」とも称する。）を複製し得る。グローバルインデックスの各オブジェクトは、固有のコンテンツ処理（たとえば、ハッシュ値またはデジタル署名）を有し得る。本明細書に記載される実行例においては、冗長な複製の除去プロセスが、少なくとも１つの活性中の複製を保持し得る。
【００１２】
例示的なネットワーク構成
図１は、本明細書において説明されるシステムおよび方法が実行され得る例示的なシステム１００の図である。システム１００は、ネットワーク１３０を介して接続される、クライエント１１０−１〜１１０−Ｎ（総称してクライエント１１０、および個々にクライエント１１０とも称する。）およびストレージクラスタ１２０−１〜１２０−Ｍ（総称してストレージクラスタ１２０、および個々にストレージクラスタ１２０とも称する。）を含む。ストレージクラスタ１２０は、（図１の点線によって示されるような）ファイルシステム１４０を形成する。
【００１３】
ネットワーク１３０は、ローカルエリアネットワーク（local area network：ＬＡＮ）、広域ネットワーク（wide area network：ＷＡＮ）、電話回線ネットワーク（たとえば、公衆交換電話網（Public Switched Telephone Network：ＰＳＴＮ））、イントラネット、インターネット、類似または非類似ネットワーク、あるいはネットワークの組み合わせのような、１つまたはより多くのネットワークを含み得る。クライエント１１０およびストレージクラスタ１２０は、有線または無線接続を介してネットワーク１３０と接続し得る。
【００１４】
クライエント１１０は、パーソナルコンピュータ、無線電話、携帯情報端末（personal digital assistant：ＰＤＡ）、ラップトップ、または他のタイプの通信装置、および／または、これらの装置のうちの１つにおいて実行されるスレッドまたはプロセスのような、１つまたはより多くのタイプの装置を含み得る。一実行例においては、クライエント１１０は、そのクライエント１１０に代わってファイルデータを読出しまたは修正する（たとえば、書き込む）ためにストレージクラスタ１２０と通信するアプリケーションを含み、あるいはアプリケーションにリンクされる。
【００１５】
ストレージクラスタ１２０は、本明細書で説明される態様で情報を記憶し、処理し、検索し、およびまたは提供し得る１つまたはより多くのサーバ装置、あるいは、他のタイプのコンピュータまたは通信装置を含み得る。一実行例においては、ストレージクラスタ１２０は、ファイルに対して、大規模でランダムな読出し／書込みアクセスデータストアを維持することが可能な、１つまたはより多くのサーバ（たとえば、コンピュータシステムおよび／またはアプリケーション）を含み得る。ストレージクラスタ１２０のデータストアは、変化が生じた場合に、インデキシングシステムが迅速にインデックスの一部を更新することを許可し得る。ストレージクラスタ１２０のデータストアは、１つまたはより多くのテーブル（たとえば、ユニフォームリソースロケータ（uniform resource locator：ＵＲＬ）ごとに１つの列を含む文書テーブル、ＵＲＬ以外の値によって検索される補助テーブルなど）を含み得る。一例においては、ストレージクラスタ１２０は、非常に大規模（たとえば、数千のサーバにわたるペタバイトのデータ）に設計され得る構造データ（たとえば、文書のランダムアクセスストレージクラスタ）を管理するための、分散型記憶システム（たとえば、チャン（Chang）らによって書かれた「ビッグテーブル：構造データ用の分散型記憶システム（Bigtable: A Distributed Storage System for Structured Data）」、第７回ＯＳＤＩ会報、２０５〜２１８ページ（２００６年１１月）における「ビッグテーブル（Bigtable）」）に含まれ得る。
【００１６】
図１には示されていないが、システム１００は、１つまたはより多くの専用の民生サーバまたはハブのような、多数の他の要素を含み得る。民生サーバは、たとえば、クライエント１１０によるアクセスのために、１つまたはより多くのストレージクラスタ１２０からのデータストアの読出し専用コピーを記憶し得る。ハブは、たとえば、１つまたはより多くの民生サーバへ分配するために、１つまたはより多くのストレージクラスタ１２０からのデータストアの読出し専用コピーを記憶し得る。
【００１７】
例示的なストレージクラスタ構造
図２は、ファイルシステム１４０の例示的構成の図である。図２に示されるように、ファイルシステム１４０は、ストレージクラスタ１２０−１、１２０−２、１２０−３、および１２０−４を含み得る。一実行例においては、ファイルシステム１４０は、分散型マルチマスタデータ複製システムであり、ストレージクラスタ１２０−１、１２０−２、１２０−３、および１２０−４の各々は、他のストレージクラスタについてのマスタサーバとして動作し得る。ファイルシステム１４０においては、データは、（たとえば、複数の地理的場所において）ストレージクラスタ１２０−１、１２０−２、１２０−３、および１２０−４にわたって複製され、データ利用可能性を増加するとともにクライエント（たとえば、クライエント１１０）からのネットワーク距離を低減し得る。一般的に、分散型オブジェクトおよび参照は、異なるストレージクラスタ１２０において、動的に生成され、変化され、模造され、そして削除され得、下部データ複製層（図示せず）は、書込み順の忠実性を維持して、すべてのストレージクラスタ１２０が同じデータのバージョンに至ることを保証する。したがって、データ複製層は、単一のオブジェクトについての同じ複製についての書込み順を遵守する。
【００１８】
分散型マルチマスタデータ複製システムにおけるすべてのオブジェクトのグローバルインデックスは、各ストレージクラスタ１２０に関連し得る。各記憶されたオブジェクトは、グローバルインデックスにおいて、（ハッシュ値、デジタル署名などのような）固有のコンテンツ処理によってリスト化され得る。選択されたストレージクラスタは、各々、グローバルインデックスにおけるコンテンツ処理の個別の領域に関与するように割り当てられ得る。たとえば、単一のストレージクラスタ１２０は、特定のコンテンツ処理に関連するオブジェクトの重複排除に関与し得る。１つのストレージクラスタによってなされたグローバルインデックスへの変更は、他のストレージクラスタに複製され得る。
【００１９】
図２は、ファイルシステム１４０の例示的な機能要素を示すが、他の実行例においては、ファイルシステム１４０は、図２に記載されているよりも、より少ない要素、追加的な要素、異なる要素、または異なった配置の要素を含み得る。さらの他の実行例においては、ファイルシステム１４０の１つまたはより多くの要素は、ファイルシステム１４０の１つまたはより多くの要素によって実行されるものとして記述された１つまたはより多くのタスクを実行し得る。
【００２０】
図３は、ストレージクラスタ１２０の例示的な要素の図である。ストレージクラスタ１２０は、バス３１０と、プロセッサ３２０と、メインメモリ３３０と、読み取り専用メモリ（ＲＯＭ）３４０と、記憶装置３５０と、入力装置３６０と、出力装置３７０と、通信インターフェース３８０とを含み得る。バス３１０は、ストレージクラスタ１２０の要素間の通信を許可する、１つまたはより多くの導体を含み得る。
【００２１】
プロセッサ３２０は、指令を解釈して実行し得る、任意のプロセッサまたはマイクロプロセッサを含み得る。メインメモリ３３０は、プロセッサ３２０によって実行される情報および指令を記憶し得る、ランダムアクセスメモリ（ＲＡＭ）または他のタイプのダイナミック記憶装置を含み得る。ＲＯＭ３４０は、プロセッサ３２０による使用のための、静的情報および指令を記憶し得る、ＲＯＭ装置または他のタイプのスタティック記憶装置を含み得る。記憶装置３５０は、磁気およびまたは光記録媒体、ならびにそれに対応するドライブを含み得る。たとえば記憶装置３５０は、持続性記憶を提供する１つまたはより多くのローカルディスクを含み得る。一実行例においては、ストレージクラスタ１２０は、ファイルシステム１４０に記憶されたオブジェクトのためのメタデータを、メインメモリ３３０および／または記憶装置３５０のような１つまたはより多くのコンピュータ読取可能媒体内に維持し得る。たとえば、ストレージクラスタ１２０は、分散型マルチマスタデータ複製システムにおいて記憶されたすべてのオブジェクトのために、記憶装置３５０内にグローバルインデックスを記憶し得る。
【００２２】
入力装置３６０は、キーボード、キーパッド、ボタン、マウス、ペンなどのような、操作者がストレージクラスタ１２０に情報を入力することを許可する１つまたはより多くの機構を含み得る。出力装置３７０は、ディスプレイ、発光ダイオード（light emitting diode：ＬＥＤ）などを含む、操作者に情報を出力する１つまたはより多くの機構を含み得る。通信インターフェース３８０は、ストレージクラスタ１２０が、他の装置および／またはシステムと通信できるようにする、任意の送受信機のような機構を含み得る。たとえば、通信インターフェース３８０は、他のストレージクラスタ１２０および／またはクライエント１１０と通信するための機構を含み得る。
【００２３】
図４は、ストレージクラスタ１２０の機能ブロック図を示す。図４に示されるように、ストレージクラスタ１２０は、データストア４１０および重複排除論理４２０を含み得る。一実行例においては、図４に示されるように、データストア４１０が、ストレージクラスタ１２０内に設けられる。他の実行例においては、データストア４１０のいくつかまたはすべては、ストレージクラスタ１２０との通信により、インデックスシステムに関連する外部メモリ装置（図示せず）のような、システム１００の１つまたはより多くの装置内に記憶され得る。
【００２４】
データストア４１０は、複製インデックスストア４１２およびローカルオブジェクトストア４１４を含み得る。複製インデックスストア４１２は、分散化マルチマスタデータ複製システムの複製層の一部として含まれ得る。複製インデックスストア４１２は、グローバルインデックスに関連する情報を記憶し得る。複製インデックスストア４１２の少なくとも一部は、複数のストレージクラスタ１２０において複製され得る。各複製インデックスストア４１２についての複製の数は、ユーザ設定可能であり得る。ローカルオブジェクトストア４１４は、ストレージクラスタ１２０において局部的にオブジェクトを記憶し得る。ローカルオブジェクトストア４１４は、クライエント（たとえば、クライエント１１０）によってアップロードされた画像またはビデオのような、ファイルを含み得る。
【００２５】
複製削除論理４２０は、分散化マルチマスタデータ複製システム内のストレージクラスタ（たとえば、ストレージクラスタ１２０−１、１２０−２、１２０−３、および１２０−４）から冗長な複製を除去するための論理を含み得る。各参加ストレージクラスタについての複製削除論理４２０は、グローバルインデックスの特定のセクションに関与するように割り当てられ得る。たとえば、複製削除論理４２０は、グローバルインデックスについてのコンテンツ処理の特定の範囲に割り当てられ得る。したがって、分散化マルチマスタデータ複製システム内の１つのストレージクラスタだけが、システム内の複製オブジェクトについての破壊的操作（destructive operation）（たとえば、複製の削除）を実行することができる。
【００２６】
重複排除を容易にするために、レコードが重複排除論理４２０によって生成され、特定のコンテンツ処理に関連するグローバルインデックスの一部に追加され得る。レコードは、たとえば、活性中の複製を示すための「データ（Data）」指示子、実行中の削除リクエストを示す「削除リクエスト（DeleteRequest）」指示子、および重複排除のために選択された複製を示す「重複排除（Deduped）」指示子を含み得る。レコードフォーマットおよびその使用は、以下でより詳細に説明される。
【００２７】
図４は、ストレージクラスタ１２０の例示的な機能要素を示すが、他の実行例においては、ストレージクラスタ１２０は、図４に示されたものよりも、より少ない機能要素、追加の機能要素、異なる機能要素、または、異なる配列の機能要素を含み得る。さらに他の実行例においては、ストレージクラスタ１２０の１つまたはより多くの機能要素は、１つまたはより多くの他の機能要素によって実行されるものとして記述される１つまたはより多くの他のタスクを実行し得る。
【００２８】
例示的なレコード構造
図５は、例示的な実行例においてグローバルインデックスに書き込まれ得る、重複排除指示子レコードについての例示的なレコード構造５００の図を提供する。重複排除指示子レコードは、オブジェクト複製の特定のコンテンツ処理を有するグローバルインデックスに関連し得る。図５に示されるように、レコード構造５００は、ストレージクラスタ識別子（ＩＤ）セクション５１０と、記憶位置セクション５２０と、指示セクション５３０とを含み得る。ストレージクラスタ識別セクション５１０は、レコードが書き込まれるオブジェクト複製を記憶しているストレージクラスタ１２０についての固有の識別（たとえば、「クラスタＩＤ」）を含み得る。位置セクション５２０は、ストレージクラスタ識別セクション５１０によって識別されたストレージクラスタ１２０における複製の位置についてのアドレスを含み得る。指示セクション５３０は、たとえば、「データ」指示子、「削除リクエスト」指示子、または「重複排除」指示子を含み得る。
【００２９】
レコード構造５００は、「クラスタＩＤ：位置：指示」の形式でリスト化され得る。たとえば、複製のためのレコードは、ストレージクラスタ１２０−１によって、レコード「01：234523/2000：削除リクエスト」でグローバルインデックスに追加され得、ここで、「01」はストレージクラスタ１２０−１のクラスタＩＤであり、「234523/2000」はストレージクラスタ１２０−１内の複製が記憶される位置であり、「削除リクエスト」は指示子である。ストレージクラスタ１２０−２における同じオブジェクトの他の複製のレコードは、「02：234544/1000：データ」であり得、ここで、「02」はストレージクラスタ１２０−２のクラスタＩＤであり、「234544/1000」はストレージクラスタ１２０−２における位置であり、「データ」は指示子である。
【００３０】
例示的なプロセスフロー
図６Ａおよび図６Ｂは、クライエント起動アップロード／削除動作を管理するための例示的なプロセスのフローチャートである。図６Ａは、クライエントからオブジェクトをアップロードする例示的なプロセス６００についてのフローチャートを示す。図６Ｂは、クライエントによって削除されるオブジェクトを除去する例示的なプロセス６５０についてのフローチャートを示す。一実行例においては、プロセス６００および６５０は、ストレージクラスタ１２０の１つによって実行され得る。プロセス６００および６５０は、クライエント（たとえば、クライエント１１０）の動作に応答して実行され得る。以下に説明されるプロセス６００および６５０の特有の例については、参照は、ファイルシステム１４０のストレージクラスタ１２０−１に対してなされ、ストレージクラスタ１２０は、クラスタＩＤ「01」を含む。
【００３１】
図６Ａを参照して、プロセス６００は、アップロードファイルが、クライエントから受信されたると開始し得る（ブロック６１０）。たとえば、ストレージクラスタ１２０−１は、クライエント１１０のうちの１つから新しいファイルを受信し得る。アップロードファイルは記憶され（ブロック６２０）、アップロードファイルについての「データ」指示子がグローバルインデックスに書き込まれ得る（ブロック６３０）。たとえば、ストレージクラスタ１２０−１は、メモリ（たとえば、記憶装置３５０）にアップロードファイルを記憶し、オブジェクトについてのコンテンツ処理をグローバルインデックスに追加し得る。ストレージクラスタ１２０−１は、また、データレコード（たとえば、「01：位置：データ」）を、オブジェクトのコンテンツ処理によってアドレス指定された、複製されたグローバルインデックスに書き込み得る。
【００３２】
図６Ｂを参照して、プロセス６５０は、削除ファイルの通知が受信されると開始し得る（ブロック６６０）。たとえば、ストレージクラスタ１２０−１は、クライエント１１０のうちの１つがファイルを削除した指示を受信し得る。削除リクエストが起動され（ブロック６７０）、削除ファイルについての「削除リクエスト」指示子がグローバルインデックスに書き込まれ得る（ブロック６８０）。たとえば、ストレージクラスタ１２０−１は、削除リクエストを起動して、ファイルシステム１４０から削除ファイルを非同期に除去する。ストレージ装置１２０−１は、また、オブジェクトのコンテンツ処理によってアドレス指定された、複製グローバルインデックスに、「削除リクエスト」レコード（たとえば、「01：位置：削除リクエスト」）を書き込み得る。
【００３３】
図７は、分散型マルチマスタデータ複製システム（たとえば、ファイルシステム１４０）における重複排除を実行するための例示的なプロセス７００のフローチャートである。一実行例においては、プロセス７００は、ストレージクラスタ１２０のうちの１つによって実行され得る。他の実行例においては、プロセス７００のいくつかまたはすべてが、ストレージクラスタ１２０を含むまたは含まない、他の装置または装置群によって実行され得る。プロセス７００は、各ストレージクラスタ１２０において周期的に実行され、ストレージクラスタ１２０内のオブジェクトのすべてまたは一部のスキャンを含み得る。以下に説明されるプロセス７００の特定の例について、参照はファイルシステム１４０のストレージクラスタ１２０−１および１２０−２に対してなされ、ここでストレージクラスタ１２０−１は「01」のクラスタＩＤを含み、ストレージクラスタ１２０−２は「02」のクラスタＩＤを含む。
【００３４】
図７に示されるように、プロセス７００は、グローバルインデックスのスキャンの実行で始まり得る（ブロック７１０）。たとえば、（たとえば、重複排除論理４２０を用いた）ストレージクラスタ１２０−２は、グローバルインデックスに列挙されたすべてまたは一部のオブジェクトのスキャンを実行し得る。スキャンは、たとえば、削除のマークが付けられた複数の複製および／またはオブジェクトを識別し得る。
【００３５】
削除リクエストに遭遇したか否かが判定され得る（ブロック７２０）。たとえば、ストレージクラスタ１２０−１は、グローバルインデックスにおいて、他のストレージクラスタから（たとえば、ストレージクラスタ１２０−２から）の削除リクエスト指示子（たとえば、「02：位置：削除リクエスト」）を含むオブジェクトに遭遇し得る。削除リクエストに遭遇したと判定された場合（ブロック７２０−ＹＥＳ）は、削除リクエストが処理され得る（ブロック７３０）。たとえば、ストレージクラスタ１２０−１は、図８を参照してより詳細に説明されるように、削除リクエストを処理し得る。
【００３６】
削除リクエストに遭遇しなかったと判定された場合（ブロック７２０−ＮＯ）は、冗長な複製が存在するか否かが判定され得る（ブロック７４０）。冗長な複製は、オブジェクトについての実行中の削除リクエストを有していない、異なる位置における複製されたオブジェクトであり得る。たとえば、ストレージクラスタ１２０−１は、ストレージクラスタ１２０−１が関与するコンテンツ処理に対応する、同じオブジェクトについての複数の複製を識別し得る。複数の複製は、たとえば、異なるストレージクラスタ（たとえば、ストレージクラスタ１２０−１およびストレージクラスタ１２０−２）または同じストレージクラスタ内の異なる位置に記憶され得る。
【００３７】
冗長な複製が存在すると判定された場合（ブロック７４０−ＹＥＳ）は、冗長な複製は除去され得る（ブロック７５０）。たとえば、ストレージクラスタ１２０−１は、図９を参照してより詳細に説明されるように、冗長な複製を除去し得る。冗長な複製が存在しないと判定された場合（ブロック７４０−ＮＯ）は、プロセスはブロック７１０に戻り、グローバルインデックスの他のスキャンが実行され得る（ブロック７１０）。
【００３８】
図８は、図６のブロック６６０の削除リクエストの処理に関連した例示的な動作を示す。削除リクエストは、オブジェクトについて見つけられ得る（ブロック８１０）。たとえば、ストレージクラスタ１２０−１によって実行されるスキャンは、グローバルインデックス内において、特定のストレージクラスタにおける複製を削除するための、ストレージクラスタ１２０−１によって事前に書き込まれた削除リクエスト指示子（たとえば、「02：位置：削除リクエスト」）を有するコンテンツ処理を識別し得る。ストレージクラスタ１２０−１がそのコンテンツ処理に関与すると想定すると、ストレージクラスタ１２０−１は、動作を適用して、その複製がまさに重複排除され得るか否かを判定する。
【００３９】
重複排除指示子が存在するか否かが判定され得る（ブロック８２０）。たとえば、ストレージクラスタ１２０−１は、グローバルインデックスにおいてそのコンテンツ処理に関連する他のレコードを調べ、重複排除指示子（たとえば、「02：位置：重複排除」）が存在するか否かを判定する。重複排除指示子が存在すると判定された場合（ブロック８２０−ＹＥＳ）は、グローバルインデックスにおける複製および関連するレコードが、重複排除され得る（ブロック８３０）。たとえば、ストレージクラスタ１２０−１は、削除リクエストを起動して、（もし、あれば）ストレージクラスタ１２０−２における複製を削除し、その削除された複製についてのコンテンツ処理に関連するすべてのレコード（たとえば、「02：位置：＊」、ここで「＊」は任意の指示子）をグローバルインデックスから削除する。
【００４０】
重複排除指示子が存在しないと判定された場合（ブロック８２０−ＮＯ）は、他の活性中の複製が存在するか否かが判定され得る（ブロック８４０）。たとえば、ストレージクラスタ１２０−２は、グローバルインデックスについてのコンテンツ処理を調べて、そのオブジェクトについての他の活性中の複製が存在するか否かを判定する。グローバルインデックスは、たとえば、他のストレージクラスタからのコンテンツ処理についてのデータレコード（たとえば、「03：位置：データ」）を含み得る。
【００４１】
他の活性中の複製が存在する場合（ブロック８４０−ＹＥＳ）は、ブロック８３０を参照して上記で説明されたように、その複製は重複排除され得る。他の活性中の複製が存在しない場合（ブロック８４０−ＮＯ）は、すべての複製が削除リクエストを有しているか否かが判定され得る（ブロック８５０）。たとえば、ストレージクラスタ１２０−１は、グローバルインデックスについてのコンテンツ処理を調べ、そのコンテンツ処理に関連するすべての複製が実行中の削除リクエストを有しているか否かを判定し得る（たとえば、「＊：＊：削除リクエスト」、ここで、「＊」は、それぞれ任意のクラスタＩＤおよび任意の位置であり得る）。
【００４２】
すべての複製が削除リクエストを有していると判定された場合（ブロック８５０−ＹＥＳ）は、複製は、ブロック８３０を参照して上記で説明されたように、重複排除され得る。すべての複製が削除リクエストを有してはいないと判定された場合（ブロック８５０−ＮＯ）は、オブジェクトは、削除リクエストを起動したストレージクラスタから異なるストレージクラスタへコピーされ、グローバルインデックスが更新され得る（ブロック８６０）。たとえば、レコード「02：位置：削除リクエスト」に応答して、ストレージクラスタ１２０−１は、ストレージクラスタ１２０−２から、重複排除レコード（たとえば、「03：位置：重複排除」）がありかつ実行中の削除リクエストがない他のストレージクラスタ１２０−３へオブジェクトをコピーし得る。ストレージクラスタ１２０−１は、その複製に関連する以前の重複排除レコード（たとえば、「03：位置：重複排除」）を削除し、グローバルインデックスにおいてそのオブジェクトの対応するコンテンツ処理に、データ指示子（たとえば、「03：位置：データ」）を書き込む。
【００４３】
図９は、図７のブロック７５０の、重複参照（duplicate reference）の除去に関連する例示的な動作を示す。削除リクエストを有しない複数の複製が、識別され得る（ブロック９１０）。たとえば、ストレージクラスタ１２０−１は、グローバルインデックスを調べて、ストレージクラスタ１２０−０１が関与するコンテンツ処理に対応する実行中の削除リクエストを有しない、２つまたはより多くの複製を識別する。
【００４４】
重複排除されるべき複製を決定する基準が、適用され得る（ブロック９２０）。たとえば、ストレージクラスタ１２０−１は、ストレージクラスタ１２０−１内に記憶され得る冗長な複製の重複排除を行なうための基準を適用し得る。冗長な複製を重複排除する基準は、複製の地理的近接性、ストレージクラスタにおける利用可能な記憶容量、または他の要因のような、様々な要因に基づき得る。（たとえば、重複排除論理４２０を用いる）ストレージクラスタ１２０−１は、上記識別された、実行中の削除リクエストを有しない２つまたはより多くの複製に、その基準を適用し得る。いくつかの実行例においては、複数の複製が、重複排除されるべきであると識別され得る。他の実行例においては、ストレージクラスタ１２０−１は、（たとえば、重複排除のマークが付けられていない）１つより多くの活性中の複製を残し得る。
【００４５】
グローバルインデックスは、更新されて、重複排除された複製を「重複排除」と指定し得る（ブロック９３０）。たとえば、重複排除された各複製について、ストレージクラスタ１２０−１は、その複製に関連する以前のデータレコード（たとえば、「02：位置：データ」）を削除し、グローバルインデックスの対応するコンテンツ処理に、重複排除指示子（たとえば、「02：位置：重複排除」）を書き込み得る。
【００４６】
冗長な複製の重複排除は、グローバルインデックスの一部として複製された重複排除メッセージを用いて達成され得る。重複排除のマークが付けられた複製は、ストレージクラスタ１２０−１または他のストレージクラスタ（たとえば、ストレージクラスタ１２０−２，１２０−３，１２０−４など）に記憶され得る。一実行例においては、ストレージクラスタ１２０−１は、局部的に記憶された複製および対応する「01：位置：データ」のレコードをグローバルインデックスから削除し、「01：位置：重複排除」をグローバルインデックスに追加し得る。ストレージクラスタ１２０−１は、また、複製されたグローバルインデックスを用いて、削除メッセージを起動し、他のクラスタに記憶された複製を削除する。
【００４７】
図１０は、分散化マルチマスタデータ複製システム（たとえば、ファイルシステム１４０）における、バンド幅消費の最適化および時間遅れの低減のための例示的なプロセス１０００のフローチャートを与える。一実行例においては、プロセス１０００は、ストレージクラスタ１２０のうちの１つによって実行され得る。他の実行例においては、プロセス１０００のいくつかまたはすべてが、ストレージクラスタ１２０を含むまたは含まない、他の装置または装置群によって実行され得る。以下に説明されるプロセス１０００の特定の例について、参照はファイルシステム１４０のストレージクラスタ１２０−１でなされ、ここでストレージクラスタ１２０−１は「01」のクラスタＩＤを含む。
【００４８】
図１０に示されるように、プロセス１０００は、オブジェクトについてのリクエストの受信で開始され得る（ブロック１０１０）。たとえば、ストレージクラスタ１２０−１は、クライエント（たとえば、クライエント１１０）から、オブジェクトを取得するリクエストを受信し得る。
【００４９】
オブジェクト位置は、グローバルインデックスにおいて検索され得る（ブロック１０２０）。たとえば、ストレージクラスタ１２０−１は、オブジェクトのコンテンツ処理を用いて、複製されたグローバルインデックス内のオブジェクトについての複製位置を検索し得る。
【００５０】
「最良の」複製位置が識別され得る（ブロック１０３０）。たとえば、１つより多くの複製が利用可能であると想定すると、ストレージクラスタ１２０−１は、ネットワークリソースを最小化するように読み出すための「最良の」複製を決定し得る。たとえば、「最良の」複製は、ストレージクラスタ１２０−１に最も近い地理的位置を有する複製であり得る。他の実行例においては、「最良の」複製は、利用可能なネットワーク接続性、地理的位置、および／または他の基準の組み合わせに基づき得る。したがって、いくつかの実行例においては、オブジェクトについての「最良の」複製は、ストレージクラスタ１２０−１内に局部的に記憶され得る。
【００５１】
オブジェクトは、識別された位置から読み出され得る（ブロック１０４０）。たとえば、ストレージクラスタ１２０−１は、最も近い利用可能なストレージクラスタから「最良の」複製を要求し、クライアントの要求を満たす複製を受信し得る。そして、ストレージクラスタ１２０−１は、クライエントにその複製を送信し得る。
【００５２】
事例
図１１は、本明細書で説明される実行例に従う、例示的なグローバルインデックス部１１００を与える。インデックスは、他の情報の中で、コンテンツ処理列１１１０および重複排除指示子レコード列１１２０を含み得る。例示的なインデックス部１１００において、分散型マルチマスタデータ複製システムが、３つのストレージクラスタＸＸ、ＹＹ、およびＺＺを含むものと仮定する。重複排除アルゴリズムは、ストレージクラスタＸＸ、ＹＹ、およびＺＺの各々において周期的に実行され、グローバルインデックスのすべてまたは一部をスキャンし得る。また、レコード（たとえば、データ、削除リクエスト、および重複排除）は、ストレージクラスタＸＸ、ＹＹ、およびＺＺのうちの１つによって、特定のオブジェクトコンテンツ処理に関連するグローバルインデックスに書き込まれ得る。グローバルインデックスへの修正は、他のすべての参加クラスタ（たとえば、残余のストレージクラスタＸＸ、ＹＹ、およびＺＺ）へ複製され得る。
【００５３】
図１１に示されるように、インデックス部１１００は、コンテンツ処理と、４つのオブジェクトについての関連する削除指示子レコードを含む。「処理１１」は、複製が、ストレージクラスタＸＸ（「ＸＸ：位置０１：データ」）およびストレージクラスタＹＹ（「ＹＹ：位置０１：データ」）に記憶されていることをそれぞれ示すレコードを有する。「処理２１」は、１つの複製がストレージクラスタＸＸ（「ＸＸ：位置０２：データ」）に記憶され、ストレージクラスタＹＹの他の複製が実行中の削除リクエスト（「ＹＹ：位置０２：削除リクエスト」）を有することを示すレコードを有する。「処理３１」は、複製がストレージクラスタＹＹ（「ＹＹ：位置０３：データ」）およびストレージクラスタＺＺ（「ＺＺ：位置０１：データ」）にそれぞれ記憶されていることを示すレコードを有する。「処理３１」は、さらに、複製が、ストレージクラスタＹＹ（「ＹＹ：位置０３：削除リクエスト」）およびストレージクラスタＺＺ（「ＺＺ：位置０１：削除リクエスト」）における実行中の削除リクエストを有する２つのレコードを有する。「処理４１」は、複製がストレージクラスタＹＹに記憶されていることを示すレコード（「ＹＹ：位置０４：データ」）、およびストレージクラスタＹＹにおける実行中の削除リクエストを有する複製を示すレコード（「ＹＹ：位置０４：削除リクエスト」）を有する。処理４１は、さらに、複製の重複排除が生じたことを示す１つのレコード（「ＺＺ：位置０２：重複排除」）を有する。ストレージクラスタによって用いられる重複排除アルゴリズムは、本明細書で説明される原理に一致するガイドラインを用いて動作し得る。ストレージクラスタＸＸは、「処理１１」、「処理２１」、「処理３１」、および「処理４１」を含むグローバルインデックスの部分への関与に割り当てられるものと仮定する。
【００５４】
オブジェクトが、ストレージクラスタに完全にアップロードされると、ストレージクラスタは、オブジェクトのコンテンツ処理によってアドレス指定された複製グローバルインデックスへ、データレコード（たとえば、「クラスタＩＤ：位置：データ」）を書き込み得る。たとえば、「ＸＸ：位置０１：データ」および「ＹＹ：位置０１：データ」は、「処理１１」の複製についてのデータレコードを示す。また、「ＸＸ：位置０２：データ」は、「処理２１」の複製についてのデータレコードを示す。類似のデータレコードが、「処理３１」および「処理４１」について見ることができる。
【００５５】
オブジェクトがストレージクラスタ内で要求されると、ストレージクラスタは、オブジェクトのコンテンツ処理を用いて、複製グローバルインデックスにおける複製位置を検索し、「最良の」（たとえば、最も近い）クラスタから複製を取得する。たとえば、「処理１１」に対応するオブジェクトがストレージクラスタＺＺで要求され、ストレージクラスタＹＹがストレージクラスタＸＸよりもストレージクラスタＺＺに近いと仮定すると、ストレージクラスタＺＺは、ストレージクラスタＹＹからの「処理１１」に対応するオブジェクト複製を要求し得る。
【００５６】
オブジェクトがストレージクラスタにおいて削除されると、ストレージクラスタは、そのオブジェクトのコンテンツ処理によってアドレス指定された複製グローバルインデックスへ、「クラスタＩＤ：位置：削除リクエスト」を書き込み得る。たとえば、「ＹＹ：位置０２：削除リクエスト」は、ストレージクラスタＹＹにおける「処理２１」の削除された複製についてのレコードを示す。同様に、「ＹＹ：位置０３：削除リクエスト」および「ＺＺ：位置０１：削除リクエスト」は、それぞれ、ストレージクラスタＹＹおよびＺＺについての「処理３１」の削除された複製についてのレコードを示す。
【００５７】
ストレージクラスタにおけるスキャンが、そのストレージクラスタが関与するコンテンツ処理に対応する実行中の削除リクエストを有しない複数の複製に遭遇した場合、ストレージクラスタはそのオブジェクトの冗長な複製を削除し得る（あるいは、１つより多くの活性中の複製を残す）。他のストレージクラスタにおける削除された各複製について、ストレージクラスタは、データレコードを削除するとともに、重複排除レコードを書き込み得る。たとえば、ストレージクラスタＸＸにおけるスキャンは、複製がストレージクラスタＸＸ（「ＸＸ：位置０１：データ」）およびストレージクラスタＹＹ（「ＹＹ：位置０１：データ」）にそれぞれ記憶されていることを示すレコードを「処理１１」が有していると識別し得る。冗長な参照を除去するために与えられた基準に基づいて、ストレージクラスタＸＸは、ストレージクラスタＹＹにおける複製の削除を起動し得る。ストレージクラスタＸＸは、図１１に示されるレコード「ＹＹ：位置０１：データ」を削除するとともに、その代わりに「ＹＹ：位置０１：重複排除」を書き込み得る。
【００５８】
ストレージクラスタＸＸにおけるスキャンが、ストレージクラスタＸＸが関与するコンテンツ処理に対応する、他のストレージクラスタ（たとえば、ストレージクラスタＹＹまたはＺＺ）における複製についての削除リクエスト（たとえば、「クラスタＩＤ：位置：削除リクエスト」）に遭遇した場合、ストレージクラスタＸＸは、以下のような解析を適用し得る。削除リクエストと同じストレージクラスタおよび同じ位置についての「重複排除」レコードがある場合、そのオブジェクトの他の活性中の複製が存在する場合、または、すべての複製が実行中の削除リクエストを有している場合は、ストレージクラスタＸＸは、（もしあれば）ストレージクラスタＹＹまたはＺＺにおけるオブジェクトの複製を削除し、レコード「ＹＹ：位置：＊」または「ＺＺ：位置：＊」を削除し得る。たとえば、（レコード「ＸＸ：位置０２：データ」によって示される）他の活性中のオブジェクトが存在しているので、ストレージクラスタＹＹにおける「処理２１」についての複製およびレコード「ＹＹ：位置０２：削除リクエスト」が、ストレージクラスタＸＸによって削除され得る。同様に、ストレージクラスタＹＹおよびストレージクラスタＺＺにおける両方の複製が実行中の削除リクエストを有しているので、ストレージクラスタＹＹにおける「処理３１」についての複製およびレコード「ＹＹ：位置０３：削除リクエスト」が、ストレージクラスタＸＸによって削除され得る。
【００５９】
ストレージクラスタＸＸが、ストレージクラスタＹＹまたはＺＺにおけるオブジェクトの複製を削除できない（たとえば、「重複排除」レコードまたはオブジェクトの他の活性中の複製がなく、かつ、すべての複製が実行中の削除リクエストを有していない）場合、ストレージクラスタＸＸは、ＹＹまたはＺＺから、重複排除レコードがありかつ実行中の削除リクエストのない他のストレージクラスタへオブジェクトをコピーし、重複排除レコードを削除するとともにデータレコードを書き込み得る。たとえば、ストレージクラスタＹＹにおける「処理４１」の複製（「ＹＹ：位置０４：削除リクエスト」）は、ストレージクラスタＸＸを起動して、ストレージクラスタＺＺに「処理４１」に関連するオブジェクトをコピーさせ得る。ストレージクラスタＸＸは、グローバルインデックスを更新し、「ＺＺ：位置０２：重複排除」を「ＺＺ：位置０２：データ」に変化させる。
【００６０】
オブジェクトについてのすべての削除動作が、そのコンテンツ処理に関与するストレージクラスタにおける、スキャンプロセスによってのみ実行され得るので、アルゴリズムの正確さは直接的である。アルゴリズムは、また、異なる位置（たとえば、ＸＸ：位置１およびＸＸ：位置２）を有する同じクラスタにおける複数のオブジェクト複製を透過的に処理する。
【００６１】
結論
本明細書に記載されたシステムおよび／または方法は、分散型データ複製システムにおけるオブジェクトのグローバルインデックスを記憶するとともに、分散型データ複製システムを通して、グローバルインデックスおよびいくつかのオブジェクトを複製し得る。ストレージクラスタは、グローバルインデックスの特定のサブセットにおける重複排除のための、重要なエンティティとして割り当てられる。ストレージクラスタは、グローバルインデックスのサブセットのスキャンを実行し、そのスキャンに基づいて冗長な複製を識別し得る。ストレージクラスタは、局部的に記憶された冗長な複製、または遠隔ストレージクラスタ内の冗長な複製を重複排除し得る。
【００６２】
上記の実行例の記載は、例示および説明を提供するが、包括的であること、または、開示されたそのままの形式に本発明を限定することを意図したものではない。修正および変更が、上記の教示に照らして可能であり、または本発明の実施から得られる。
【００６３】
たとえば、他の実行例においては、重複排除アルゴリズムの同期バージョンが用いられ、それにおいては、分散型データ複製システムにおける複製層を用いるよりはむしろ、異なるストレージクラスタが直接的に通信する。
【００６４】
また、図６Ａ〜１０に関連して一連のブロックが説明されたが、他の実行例においては、ブロックの順序は修正され得る。さらに、非従属ブロックが並行して実行され得る。
【００６５】
本明細書に記載される実施形態は、図中の示された実行例において、ソフトウェア、ファームウェア、およびハードウェアの多くの異なる形式で実現され得ることが明らかであろう。本明細書に記載される実施形態を実行するために用いられる実際のソフトウェアコードまたは特別の制御ハードウェアは、本発明を限定するものではない。したがって、実施形態に動作および振る舞いは、特定のソフトウェアコードを考慮せずに説明されたが、ソフトウェアおよび制御ハードウェアは、本明細書における記述に基づく実施形態を実現するために設計され得ることが理解される。さらに、本明細書において記載された特定の実行例は、１つまたはより多くの機能を実行する「論理」または「要素」として実現され得る。この論理または要素は、プロセッサ、マイクロプロセッサ、特定用途向け集積回路、またはフィールドプログラマブルゲートアレイのようなハードウェア、あるいは、ハードウェおよびソフトウェアの組み合わせ（たとえば、プロセッサによって実行されるソフトウェア）を含み得る。語句「備える（comprises）」および／または「備えている（comprising）」は、本明細書において用いられるときは、言及された特徴、整数、ステップ、または要素の存在を特定するために採用されるが、１つまたはより多くの他の特徴、整数、ステップ、要素、またはそのグループの存在または追加を除外するものではないことが強調されるべきである。
【００６６】
たとえ、特徴の特定の組み合わせが特許請求の範囲に記載され、および／または明細書中に開示されているとしても、これらの組み合わせは、本発明の開示を制限することが意図されたものではない。実際、これらの特徴の多くは、特許請求の範囲に具体的に記載されておらず、および／または、明細書中に具体的に開示されていない手法で組み合わされ得る。
【００６７】
本願の記載において用いられる要素、動作、または指令のいずれも、そのように明示的に記載されていなければ、本発明に必須または必要不可欠なものとして解釈されるべきではない。また、本明細書で用いられる、冠詞「a」は、１つまたはより多くの事項含むことが意図される。１つの事項のみが意図される場合は、語句「one」または同様の言語が用いられる。さらに、本明細書において用いられる、句「基づいて」は、そうでないものと明示的に言及されていなければ、「少なくとも一部に基づいて」を意味することが意図される。
【図１】
2014139824.tif 000003
【図２】
2014139824.tif 000004
【図３】
2014139824.tif 000005
【図４】
2014139824.tif 000006
【図５】
2014139824.tif 000007
【図６Ａ】
2014139824.tif 000008
【図６Ｂ】
2014139824.tif 000009
【図７】
2014139824.tif 000010
【図８】
2014139824.tif 000011
【図９】
2014139824.tif 000012
【図１０】
2014139824.tif 000013
【図１１】
2014139824.tif 000014