(58)【調査した分野】(Int.Cl.,DB名)
前記複数のデータセンタの前記第1のサブセット内の前記第1の複数のホストに、前記データセットの前記第1の複数のコピーを書き込むステップは、第1に順序付けられたホストにデータを書き込むステップを含む、
請求項12に記載のコンピュータ実施方法。
【発明を実施するための形態】
【0006】
実施の一形態は、複数のデータセンタ内のホストにデータセットを記憶することを含むコンピュータ実施(computer-implemented)データ処理方法に関する。データセンタ及びデータセンタ内のホストは、例えば、複数段(multi-tiered)リング構成に従って構成され得る。実施の一形態において、ハッシュ構成は、データセットの書込及び読出が発生するデータセンタ及びホストを選択するためのリング構成を実施するために用いられる。他の実施の形態において、バージョン履歴は、ホストにおける書込及び読出も行われ、また、バージョン履歴は、読出が発生した後のデータセット間の一時的な関係の評価に用いられる。
【0007】
発明の詳細な説明及び特定の実施例は、本発明の好適な実施の形態を示すと同時に、限定ではなく例示として与えられるということは理解されるべきである。本発明の範囲内において、その精神から離れることなく、多くの変形及び変更が可能であり、本発明は、総てのそのような変形を包含する。
【0008】
I.システム構成(System Architecture)
図1を参照すると、実施の一形態に係るデータ処理システム100が示されている。データ処理システム100は、ユーザコンピュータ102と、通信ネットワーク104と、ネットワークサービスシステム106とを含んでいる。ユーザコンピュータ102は、通信ネットワーク104を介してネットワークサービスシステム106にアクセスし得る。ネットワークサービスシステム106は、ネットワークインタフェース110と、データセットサービス112と、一つ又は複数の他のサービス114とを含んでいる。ネットワークインタフェース110は、通信ネットワーク104を介してユーザからデータを受信し、ユーザにデータを供給する。例えば、ネットワークインタフェース110は、データセットサービス112により保持されているデータセットへのアクセスに加えて、他のサービス114により生成され及び/又は保持されている他のデータへのアクセスを、ユーザコンピュータ102に提供し得る。
【0009】
データセットサービスは、データセットを記憶し得るデータ記憶システム118を含んでいる。データ状態は、システム106内におけるユーザインタラクション(ユーザ相互作用)に基づいて及び/又は他の変化に基づいて時間と共に変化し得る。ここで、用語「データセット」は、時間と共に変化し得る任意のデータに関連する。例えば、各データセットは、当該データセットから付加、除去及び/又は変更され得る一つ又は複数の項目を含み得る。データ記憶システム118は、システム障害(例えば、ホスト障害、ネットワーク障害等)の場合には、後述するように、データセットが高度の一貫性を有して利用可能(可用)に存続するように、高可用性の方法において情報を記憶するように構成されている。実施の一形態において、データ記憶システム118は、バークリー(Berkeley)データベーストランザクションデータ記憶システムを用いて実現されている。
【0010】
ここで
図2も参照すると、
図2は、データ処理システム100の他の実施例を提供している。
図2の例においては、ネットワークサービスシステム106は商業ウェブサイトシステム116であり、ネットワークインタフェース110はネットワークショッピングインタフェース120である。商業ウェブサイトシステム116は、例えば、数千又はそれ以上のホストを含む分散型計算方式環境において実現され得る。商業ウェブサイトシステム116は、アイテム(例えば、商品、サービス、予約申込等)の買い物をするためにユーザコンピュータ102を操作するユーザにとってアクセス可能である商業ウェブサイト(例えば、オンライン小売ウェブサイト)を提供し得る。そのような実施の形態においては、ネットワークショッピングインタフェース120は、アイテムの表示及び/又は販売を容易にするために、ウェブサイト上のグラフィックデータ及び/又はテキストデータをユーザに提供する。ユーザに提供されるデータは、価格、寸法、利用可能性、購入のために現在選択されているアイテム等のアイテム情報を含み得る。商業ショッピングインタフェース120は、ユーザが関心を持っているアイテムを示すデータ、トランザクションの完了を必要とするデータ等、ユーザからのデータを受信するように構成されることも可能である。
【0011】
図2の実施例においては、データセットサービス112は、ウェブサイトのユーザによって購入のために又は購入可能性のために選択されたアイテムのリストを保持するショッピングカートデータサービス122となるべきものとして示されている。そのような実施例においては、各データセットは、特定の顧客に関連するショッピングカートであり得る。データセットは、ショッピングカート内のアイテムのためのアイテム識別情報、ユーザが選択したかもしれないがまだ購入していないアイテムのためのアイテム情報、ショッピングカート内のアイテムの数量情報等を含み得る。ショッピングカートデータサービス122は、ショッピングカートに関連する他のビジネスロジックを含み得るショッピングカートサービス124を通じてアクセスされ得る。ウェブサイトシステム116は、例えばユーザのショッピングカートの全部又は一部を表示するウェブページ等、データセットの全部又は一部を含むウェブページを、ウェブサイトのユーザのために表示し得る。他の例示的な実施の形態においては、データセットは、ユーザのインタラクション(相互作用)に基づいて、又は、訪問者の便宜のために、又は、ウェブサイトの操作を容易にするために、ウェブサイトシステム116により収集され得る他のデータを含み得る。例えば、データセットサービス112は、特定のエンティティ(構成要素、実体)に関連するデータセット(例えば、ウェブサイトの異なるユーザ、ウェブサイト上の異なるセッション、ウェブサイト上で実施される異なるトランザクション、ウェブサイトによって提供される異なるアイテム、ウェブサイトによって提供されるアイテムの異なるカテゴリ、ウェブサイト上で表示される異なる広告、ウェブサイトの異なるページ等に関連するデータセット)も保持し得る。
図2はウェブサイトシステムを示しているが、理解されるであろうように、データ処理システム100は、他のアプリケーションにおいても使用され得る。
【0012】
再度
図1を参照すると、データセットサービス112は、ローカル(局所)プロセス及びリモート(遠隔)プロセスの両方との関連において使用され得る。リモートプロセスとの関連においては、データセットサービス112に対する読出及び書込要求は、通信ネットワーク104経由でリモートプロセスから受信され得る。例えば、ネットワークサービスシステム106は、アプリケーションプログラムインタフェース(API)を介してインタネットを通じてリモートプロセスにアクセス可能なサービスを提供し得る。そのようなサービス要求は、サードパーティによって、例えばそれら自体のデータ処理システムの動作における援助(アシスト)を行うために、行われ得る。
【0013】
ここで
図3乃至
図6を参照すると、データセットサービス112の構成及び動作が詳細に示されている。
図3に示されるように、データセットサービス112は、複数のホスト130を含み得る。ここで、用語「複数」は、二つ又はそれより多いことを意味する。例えば、データセットサービス112は、数十、数百若しくは数千又はそれより多いホストを含み得る。実施の一形態において、各ホスト130は、機能的に等価である(例えば、同一コードを実行し、又は、同一コードの関連するバージョンを実行する)。各ホスト130は、後述する
図3乃至
図16に記載された動作を実行するように構成された、格納されたプログラムロジックを含み得る。以下に述べられるように、データセット記憶システム118は、各ホスト130がデータセットの一部を記憶するように、各ホスト130に亘って分散される。各ホスト130は、(キー値ペア(key-value pairs)の)データのサブセットを記憶し、システムは、各データセットのNの複製(ここで、Nは、複製係数、又は、データセットを複製する回数を表す正の整数である)を保持することを試みる。値Nは、設定可能であり、データの耐久性、可用性及び一貫性のいずれにも作用する。システム内にSの物理的なホストがあるとすると、全システム106は、S≧Nの物理的なホストを含み(Sが小さいほど全システムの可用性は低くなるが)、各ホスト130は、データセットの約N/Sを記憶する。代替的に、異種のホスト130が使用される場合、各ホスト130は、システム106内に重み付けをする各ホスト130の重みに比例するいくらかのデータセットを記憶する。各ホスト130の重みは、各ホスト130の資源に基づいて決定され得る。例えば、各ホスト130の重みは、より高性能なホスト130がより多くのデータセットを記憶するように、各ホスト130の相対的な性能に基づいて(例えば、処理能力、記憶容量、及び/又は、ネットワーク容量に基づいて決定されるように)決定され得る。Nの値は、例えば、データセットごと又はデータタイプごとの基準で可用性/耐久性が設定されることを許容するために、データセットごと又はデータタイプごとの基準で設定可能なものとされ得る。
【0014】
図4に示されるように、クライアントプロセス134(例えば、サービス114のうちの一つ)から受信されるデータを記憶するために、データセットサービス112は、クライアントプロセス134から書込要求を受信し(ステップ150)、その後、複数のホスト130にデータ書込を行うことによって応答する(ステップ152)。(この出願の目的のため、用語「クライアントプロセス」とは、任意の他のプログラムロジックからの、例えばここではデータセットサービス112からの、データセットを要求することがある任意のプログラムロジックをいう。)実施の一形態においては、後述するように、データは、優先リストに基づいて複数のホストに書き込まれる。データが書き込まれた後、書込動作が実行されたことを確認する応答が、クライアントプロセス134に送信される(ステップ154)。例示的な書込動作が、
図7乃至
図12、
図13A乃至
図13B及び
図14A乃至
図14Bとの関連において詳細に記載されている。
【0015】
図5に示されるように、クライアントプロセス134にデータを供給するために、データセットサービス112は、クライアントプロセス134から読出要求を受信し(ステップ160)、その後、複数のホスト130においてデータ読出を行うことによって応答する(ステップ162)。データが読み出された後、読出動作が実行されたことを確認し且つ要求されたデータを含む応答が、クライアントプロセス134に送信される(ステップ164)。例示的な読出動作が、
図15A乃至
図15Bとの関連において詳細に記載されている。
【0016】
図6に関しては、総ての関連するネットワーク接続及びホスト130が健全である(例えば、利用可能であり応答する)場合、読出動作に関係するホスト130は、典型的には、一貫性のあるデータを供給する。しかし、一つ又は複数のネットワーク接続又はホスト130に故障又は障害が発生している場合、ホスト130は、同一データセットの異なるバージョンを供給し得る。従って、
図6に示されるように、クライアントプロセスにおいてデータセットが受信された後(ステップ170)、データセットは、調整されて一致させられ得る(ステップ172)。調整されて一致させられたデータセットは、その後、記憶のためにデータセットサービス112に送信され得る(ステップ174)。以下に詳細に記載されるように、同一データセットの一貫性のないバージョンの存在は、データバージョニング(data versioning)構成を用いて削除され得る。データバージョニング構成は、一貫性のないバージョンを調整するために、バージョン調整ロジック136(
図3に示されるように、クライアントプロセス134の一部として又はクライアントプロセス134との関連において提供される)によっても使用され得る。例示的なデータバージョニング構成が、
図16との関連において以下に詳細に記載される。
【0017】
II.読出/書込動作の協調(Coordination of Read/Write Operations)
A.ホスト間のデータセットの区分化(Partitioning Data Sets over Hosts)
図7乃至
図8を参照すると、実施の一形態において、データセットサービス112は、システム106内のホスト間にデータセットを区分化するための機構を含んでいる。実施の一形態において、以下に記載されるように、一貫性ハッシュ構成は、データがホスト130間に相対的に均等に分散されるように、データセットを記憶するために使用され得る。他の実施の形態においては、他のデータ区分化構成が使用され得る。
【0018】
先ず
図7を参照すると、実施の一形態において、データセットサービス112によって記憶されているデータにアクセスするために(例えば、読出動作又は書込動作を介して)、クライアントプロセスは、各要求が参照する、データセットのためのキーを含むデータ要求を送信する。例えば、ショッピングカートアプリケーションとの関連においては、キーは、ショッピングカートが関係するユーザのユーザIDに基づいて生成され得る(例えば、ユーザIDがキーとして使用され得る)。キーは、データセットに関連し且つハッシュ関数への入力としての使用に適当な任意のデータ値であり得る。
図7に示されるように、キーは、キーの関数としてのハッシュ値hを順次生成するハッシュ関数182に適用される。実施の一形態において、ハッシュ関数182は、ハッシュ範囲に亘るハッシュ値のほぼ均一な分散を達成する。図示された実施の形態においては、ハッシュ値は、ハッシュ範囲{0,2
128}に亘って分散するように示されているが、ハッシュ値の任意の数、又は、実際上は任意の大きさのハッシュ範囲が使用され得る。
【0019】
データセットサービス112においてアクティブな(活動状態にある)参加者になると、各ホスト130は、ハッシュ範囲に亘る位置のセットを割り当てられる。説明の目的のために、ここでの考察の残りの部分では、データセットサービス112を実施するホストが、ホストA、ホストB、ホストC、ホストD及びホストEとして示されている五つのホスト130であると仮定する。実際には、データセットサービス112が、数十、数百若しくは数千又はそれより多いホスト130により実施され得ることは、理解されるであろう。
【0020】
図8を参照すると、
図8は、読出動作又は書込動作に対する責任(分担)がハッシュ値に基づいて特定のホスト130に割り当てられる方法を示している。各ホスト130は、ハッシュ範囲内におけるそれ自体の位置から先行するホスト130の位置までに亘るハッシュ値との関連において読出/書込動作に対して責任を有する。例えば、ホストA,B,C,D,Eがハッシュ値h
1,h
2,h
3,h
4,h
5にそれぞれ位置しているとすると、ホストBは、ハッシュ値h
1≦h≦h
2の範囲に対して責任を有し、ホストCは、ハッシュ値h
2≦h≦h
3の範囲に対して責任を有し、以下、同様となる。ホストAに対する責任(分担)「ラップアラウンド(wrap around)」の割当は、即ち、ホストAが、ハッシュ値h
5<h≦2
128及び0≦h≦h
1の範囲に対して責任を有することである。実施において、例えば、キーk
1及びk
2を有するデータセットは、キーk
1及びk
2をハッシュすることによりリング184上におけるそれらの位置を与えて、ホスト130に割り当てられ、その後、リング184を時計回りに周回して、データセットのハッシュされたキーよりも大きい値の位置を有する最初のホスト130を見出す。キーk
1の場合、対応するデータセットが割り当てられる、より大きい位置を有する最初のホストは、ホストAである。キーk
2の場合、対応するデータセットが割り当てられる、より大きい位置を有する最初のホストは、ホストBである。
【0021】
図7乃至
図8に示される構成は、各ホスト130がリング184上におけるそれ自体とその先行ホスト130との間のリング184の範囲に対して責任を有するという結果になる。例えば、ホストBは、それ自体とホストAとの間のリング184の部分に対して責任を有する。ある一つのホスト130が参加又は離脱したとすると、そのことは、リング184上におけるその直近の後続ホストの責任(分担)に影響を与えるだけであり、他の総てのホスト130は影響を受けない。これが
図9に示されており、そこでは、ホストFの追加が、リング184上におけるその直近の後続ホストであるホストBの責任(分担)に影響を与えるが、ホストA等の他のホストの責任(分担)には影響を与えない。従って、個々のホスト130は、各ホスト130に対するデータセットの区分化の全体的な再配置を伴うことなく、追加又は除去されることが可能であり、それにより、増加スケーラビリティ(拡大縮小可能性)(scalability)が増進される。
【0022】
1.データ複製(Data Replication)
ここで
図10乃至
図11を参照すると、
図7乃至
図8のハッシュ構成は、データ複製の支援のために使用され得る。
図10においては、リング184上における直近の後続ホスト130に対して単にデータセットが割り当てられるよりむしろ、データセットは、最初のNの後続ホスト130に割り当てられている。後述するように、データセットサービス112は、ホスト130間にデータのNの複製があり、各ホスト130がそれ自体とそのN番目の先行ホストとの間のリング184の範囲に対して責任を有するということを保証するために機能する。
【0023】
図11に示されるように、このような構成においては、各キーは、当該キーに基づいて生成されたハッシュ値からリング184を時計回りに周回したときにホスト130のそれぞれが最初に遭遇を受ける順序である、ホスト130の優先リスト190を有している。優先リスト190は、データセットにアクセスするために(例えば、読出又は書込のために)使用されるホスト130の優先順序を表している。総てのホスト130が健全である場合、優先リスト190における上位Nのホストがデータセットを記憶する。特定のホスト130に障害が発生した場合、又は、ネットワークパーティションが発生した場合、データセットは、優先リスト190においてより低いランク付けのホスト130に一時的に記憶され得る。複数のホスト130に障害が発生した場合、データセットは、優先リスト190においてより低いランク付けの複数のホスト130に記憶され得る。N=3のとき、キーk
1に関連するデータセットにアクセスしているクライアントプロセス134は、キーk
1の位置からリング184を時計回りに周回することによって分かるように、ホストA,B及びDに(より上位のホストのいずれかが利用不可能である場合には次にホストEにさらにホストCに)この順序で読出又は書込を行う。キーk
2に関連するデータセットにアクセスしているクライアントプロセス134は、キーk
2のハッシュ位置からリング184を時計回りに周回することによって分かるように、ホストB,D,Eに(より上位のホストのいずれかが利用不可能である場合には次にホストCにさらにホストAに)この順序で読出又は書込を行う。以上に述べたように、値Nは設定可能な値であり、従って、データセットのより多くの複製を許容するために、より多くのホスト130がシステム106に付加され得る。従って、データセットの可用性のレベルは設定可能であり、適当な数のホスト130を使用して所望するだけの高さに設定され得る。
【0024】
総てのホスト130が利用可能である場合、同一データセットにおける連続する動作はNのホストの同一セットにアクセスし、従って一貫性を有する(即ち、動作は、同一キーにおける先行動作により読出/書込が行われた同一データにアクセスする)。ネットワーク又はホストの障害がある場合、同一データセットへの連続する動作は、ホスト130の異なるセットにアクセスすることがあるが、動作は、アクセスされるホストのセットにいくらかの重複がある限り、依然として一貫性を有し得る。例えば、キーk
1における第1の動作が、ホストA,B及びDにアクセスし得る。その後、ホストBが利用不可能になった場合、キーk
1における第2の動作は、ホストA,D及びEにアクセスし得る。従って、優先リスト190における最上位の利用可能なホスト130にアクセスすることにより、動作から動作へのホストの利用可能性の小さい変化は、一貫性に否定的な影響を与えない。その理由は、後続のアクセスが、重複するホストを含み得るからである。(非一貫性という結果になる)ホストセットの間に重複が存在しない状態となるためには、少なくともNのホストの利用可能性(可用性)は、二つの連続する動作の間に変化しなければならない。以上に述べたように、値Nは設定可能な値であり、従って、一貫性の確率保証は設定可能であり、所望するだけ高く設定し得る。これは、大域(global)一貫性(システム応答は、データに対してなされた最新の絶対的な変更を反映する)、及び、主観的一貫性(システム応答は、現在の要求を行っているクライアントによりなされた最新の変更を反映する)の両方の確率保証を含む。
【0025】
実施の一形態において、データセット上におけるクライアント動作は、複数のロケーション(例えばサーバ)において提供され得る。また、同一データセット上における連続する動作は、異なるサーバによって提供され得る。実施の一形態において、所定のデータセットを記憶するホスト130にアクセスするために、サーバは、ホスト130の利用可能性(優先リスト190において最上位であるNの利用可能なホストを選択するために)に加えて、ハッシュ空間におけるホスト位置に関する情報(優先リスト190を計算するために)を記憶する。ネットワーク又はホストの障害が存在する際には、異なるサーバが、ホストの利用可能性に関する異なる情報を記憶し得る。システムに結合され又は離脱するホストが存在する際には、異なるサーバが、ハッシュ空間におけるセット位置に関する異なる情報を記憶し得る。例えば、サーバXは、ホストAがデータセットサービス112に結合したことを認識しないことがある。従って、キーk
1を有するデータセット上における動作の提供において、サーバXは、ホストB、D及びEにアクセスし得る。別のサーバYは、ホストAとホストAのハッシュ位置とを既に認識している可能性がある。この情報に基づいて、キーk
1上における後続の動作を提供する際には、サーバYは、ホストA、B及びDにアクセスし得る。従って、優先リスト190における最上位の利用可能なホスト130にアクセスすることにより、書込及び読出動作の間に少なくとも一つのホストにアクセスする確率は増加する。以上に述べたように、一貫性のこの確率保証は、Nの値によって決定される。
【0026】
実施の一形態においては、優先リスト190は、ハッシュ関数182の動作によって実施され得る(例えば、分離して記憶されることなく)。他の実施の形態においては、優先リスト190は、記憶され得る。理解されるであろうように、他の要因が、優先リスト190を構成する際に考慮に入れられることがある。優先リスト190は、そのような要因を考慮に入れるために、手動で又は自動的に構成され得る。例えば、可用性及び耐久性をさらに改善するために、同一優先リスト190内に相互関係障害の確率が比較的低いホスト130が含まれるように、優先リスト190が構成され得る。例えば、システム100が複数のネットワークに亘って分散させられている場合、同時に故障することがありそうもないホスト130の集合があり得る。従って、システム100は、データセットのNの複製のために、障害の相互関係が低くなるようにNのホストを選択することによって、可用性及び耐久性を最大化することができる。同様に、低い障害相互関係は、ホスト130が異なるハードウェア上で運転され、異なるプログラムロジック実行を用い、地理的に異なる領域において運転され、それらが組み合わせられる場合にも存在し得る。例えば、リング184を時計回りに周回するときに、遭遇したホスト130が、考慮されるべきことが望ましい任意の追加的な標準(criteria)に適合するか否かの評価に、規則の集合が適用され得る。遭遇したホスト130が追加的な標準に適合しない場合、利用可能なホストの検索が、追加的な標準に適合するホストに遭遇するまで、リング184の周回を前進して継続され得る。
【0027】
他の構成も、地理的な多様性を実現するために用いられ得る。そのような構成の実施例が、
図17乃至
図25との関連において以下に詳細に記述される。
【0028】
2.負荷平衡(Load Balancing)
図12を参照すると、ホスト130は、負荷平衡を促進するために、即ち、データ及び負荷の不均一な分散を回避するために、リング184上の複数の位置に割り当てられ得る。そうでなければ、リング184上における各ホスト130の無作為な位置割当によって、データ及び負荷の不均一な分散が発生し得る。従って、
図12において、ホストA,B,C,D,Eは、リング184上の複数の位置に割り当てられている。この複数の位置決めは、各ホスト130に割り当てられたデータセットの数の分散を減少させる傾向がある。その理由は、リング184上における増加した多数の無作為の配置が、各ホスト130に割り当てられたデータセットの数に平均値への集中を引き起こす傾向があるからである。従って、より多くの位置をリング184上における各ホスト130に割り当てることは、負荷平衡を改善する。実施の一形態において、遭遇した各ホスト130の最初の実例だけが優先リスト190に配置される。キーk
1の場合、対応するデータセットが割り当てられている、より大きい位置の最初のホストは、ホストAである。N=4の場合、キーk
1に関連するデータセットにアクセスするプロセスは、ホストA,B,C,Dに対して読出又は書込を行う。キーk
1のための優先リスト190は、リング184上における複数の位置を有するホストのために、及び、異なる順序で遭遇するホストのために、上記とは異なる。キーk
2の場合、対応するデータセットが割り当てられている、より大きい位置の最初のホストは、ホストBである。キーk
2に関連するデータセットにアクセスするクライアントプロセス134は、ホストB,C,D,Aに対してその順序で読出又は書込を行う。他の例示的な実施の形態においては、遭遇する各ホスト130の複数の実例は、例えば、以前は利用不可能であったホスト130を再試行するために、優先リスト190に配置され得る。
【0029】
ホスト130をリング184上の複数の位置に割り当てることは、異種のハードウェアの使用を容易にし、即ち、より性能の高いホスト130がリング184上のより多くの位置に割り当てられ、より性能の低いホスト130がリング184上のより少ない位置に割り当てられ得る。例えば、
図12において、ホストEは、他のどのホストよりも少ない位置を有しており、従って、性能の低いホストであると想定される。理解されるであろうように、あるホストの範囲が使用されることがあり、各ホストは、他のホスト130より性能が高いか又は低い。特定のホスト130に割り当てられている位置の数は、当該特定のホスト130の相対的な性能の関数であり得る。
【0030】
加えて、十分な数の位置が各ホスト130に割り当てられたとすると、各ホスト130は、他のホスト130のそれぞれと後続/先行関係を有し得る。従って、ホスト130のうちの一つが利用不可能になり又は使用解除されたとすると、使用解除されたホストにより処理されていた負荷は、データ可用性を失うことなく残余の利用可能なホスト130に亘ってほぼ均等に分散させられ得る。同様に、あるホスト130が再度利用可能になった場合又は新たなホスト130がデータセットサービス112に追加された場合は、その新たに利用可能になったホスト130は、他の利用可能なホスト130のそれぞれからおおよそ均等な量の負荷を軽減し得る。
【0031】
B.読出/書込アクセス動作(Read/Write Access Operations)
ここで
図13A乃至
図13B、
図14A乃至
図14B及び
図15A乃至
図15Bを参照すると、読出及び書込動作が示されている。読出/書込動作は、クライアントプロセス134によりデータセットサービス112に対して行われるサービス要求によって引き起こされ得る。サービス要求を受信すると、データセットサービス112は、要求された動作を実行し、クライアントプロセス134に対して応答を供給する。
【0032】
データセットサービス112においては、ホスト130のうちの一つが、読出又は書込要求を調整するための責任を有する。読出又は書込要求を調整するための責任を有するホスト130を、ここではコーディネータ(調整者)と称する。実施の一形態において、コーディネータは、優先リスト190に載せられた最初のホスト130であり、ローカル読出又は書込動作の実行を含む読出又は書込要求を調整する。例えば、サービス要求は、最初は別のホスト130によって受信されることがあり、当該ホスト130は、コーディネータとして機能するホスト130(例えば、優先リスト190における最上位ホスト)にそのサービス要求を転送することを決定し得る。他の実施の形態においては、コーディネータは、優先リスト190に載っていないホスト130等の他のホスト130であり得る。例えば、コーディネータは、偶然に最初に読出又は書込要求を受信したが、たまたま優先リスト190の最上位付近にはなく、優先リスト190の最上位付近にあるホストにそのサービス要求を転送することを決定しないホスト130であり得る。実施例を提供する目的のために、ここでは、コーディネータは優先リスト190に載せられた最初のホスト130であるものとする。
【0033】
実施の一形態においては、上述のように、読出及び書込動作は、潜在的にダウンしている又はアクセス不可能なホスト130をスキップしながら、優先リスト190における上位Nの健全なホストにアクセスし得る。総てのホスト130が健全である場合は、あるキーの優先リスト190における上位Nのホストがアクセスされ得る。ホスト障害又はネットワークパーティションが存在する場合、優先リスト190におけるより下位のホスト130が代わりにアクセスされることがあり、それにより高可用性が維持される。
【0034】
先ず
図13A乃至
図13Bを参照すると、例示的な書込動作が示されている。
図13Aにおいて、バージョンV
n+1のための書込要求が、ホストAによってクライアントプロセス134から受信される(上述のように、直接に又は間接に、のどちらでも)。
図12に示されるようなリング184上におけるホスト130の分散を想定すると、キーk
1のための優先リスト190は、P
L={A,B,C,D,E}である。この実施例において、ホストAはコーディネータであり、書込動作をローカルに実行する(ステップ150)。ホストAは、その後、新しいバージョンV
n+1を残余の最上位にランクされているN−1の到達可能なホストであるホストB及びCにコピーし(例えば、N=3のとき)、それはその後に、書込動作の実行及び追加的なコピーの記憶も行う(ステップ152)。
【0035】
データセットが記憶されるとき、データ自体に加えて、当該データに関連するキー、及び、ベクトルクロックも記憶される。キーは、データセットが後に識別されることを可能にする。ベクトルクロックは、同一データセットの異なるバージョン間の因果関係を捕捉するためのデータバージョニングのために使用され、データセットのバージョンに関連する{ホストID,カウンタ}ペアのリストを含む。ベクトルクロックの使用を通じたデータバージョニングは、
図16との関係において詳細に後述される。
【0036】
図13Bにおいては、ホストB及びCは、書込動作が成功したか否かをホストAに折り返し報告し、ホストAは、書込動作が成功したか否かの確認をクライアントプロセス134に応答する(ステップ154)。実施の形態において、成功と考えられるべき書込動作のために、書込動作は、Wが設定可能な値であってW≦Nであるとすると、Wのホストにおいて成功しなければならない。従って、例えば、N=3かつW=2とすると、書込動作は、三つのホスト130において試行されたとしても、二つのホスト130において成功すれば、成功であると考えられる。書込動作が一つ又は複数のホスト130において成功したとすると、データセットのコピーは、詳細に後述するように、依然としていつかは優先リスト190における上位Nのホストに移動し得るということを意味し得る。従って、上述したテストに従って書込動作が成功であると考えられなかったとしても、上位Nのホストにおけるデータセットの最終的な一貫性は依然として実現され得る。
【0037】
図14A乃至
図14Bを参照すると、データハンドオフを伴う例示的な書込動作が示されている。データハンドオフは、あるデータセットのための優先リスト190における最上位にランクされているNのホストに対してデータを移動させることを試行する機構又は手順である。例えば、上述のように、コーディネータは、一般に、優先リスト190における上位Nのホストに対してデータの送信を試行する。しかしながら、一つ又は複数のホスト130がダウンしている場合、コーディネータは、優先リスト190におけるより下位のホスト130に対してデータを送信する。優先リスト190は、書込動作に(及び読出動作に)関係することとなるホスト130の適切に規定された順序を提供し、データハンドオフ機構は、優先リスト190における最上位にランクされているNのホストに対してデータを移動させて返すために使用される。
【0038】
従って、
図14Aに示されるように、ホストAは、
図13AのようにバージョンV
n+1のための書込要求を受信する。ホストAは、その後、書込動作を実行し、残余の最上位にランクされているNの到達可能なホストであるホストB及びCに新しいバージョンをコピーすることを試行する。図示された実施例においては、ホストCが一時的に故障しており、従って、ホストDにおける書込が試行される。ホストDにおいて書き込まれたデータは、そのいくらか後の時点でホストDが当該データをホストCに転送し得るように、どのホスト130がデータを受信して書込を行うべきか(例えば、ホストC)を提案するヒントと共にタグを付され得る。
図14Bにおいて、ホストCが健全である場合、データハンドオフが行われ、データはホストCにコピーし戻される(copied back)。データは、このようにして、優先リスト190における最上位にランクされたNのホストの一つであるホストCに移動し戻される。
【0039】
実施の一形態においては、関連する技術がデータセットの喪失したコピーを回復するために使用され得る。例えば、ホスト130が参加又は離脱して優先リスト190に対応する変更があるとすると、データの不適切な配置が発生し得る。例えば、システム100に追加されたホスト130は、優先リスト190における他のホストの序列に不適切な配置を発生させる。そのような状況において、データハンドオフを実行するために、ホスト130のペアは、それらが共通に共有する領域の比較を定期的に実行し、その後、比較の間に検出されたいかなる差異も調整して一致させるために、必要なデータ転送を実行し得る。例えば、キーの領域を自体のために保持している、上位Nのホストの一つではないホスト(送信者)は、上位Nのホストの任意の一つ(受信者)を無作為に選択し得る。別の実施例として、上記ホストは、上位Nのホストのなかから、例えば、当該データを有している可能性の低いホストを選択し得る。その理由は、上記ホストがデータセットサービス112に最近参加したものだからである。上記二つのホスト130は、その後、低レベルデータベース比較を継続してもよく、送信者は、比較によって検出されたいかなる差異も調整して一致させるために、受信者が記憶しているものよりも新しいデータセットを転送し得る。データは、優先リスト190における少なくとも一つのホスト130に移動されることが可能であり、従って、優先リスト190における残余のホスト130に増殖される。例えば、残余のホスト130への増殖は、いくつかのキーのセットに対する優先リスト190における上位Nのホストに含まれているホスト130のペアに記憶されているデータセットを比較することによって実行され得る。実施の一形態においては、二つのホストに記憶されているデータ間の差異を効果的に見出すために、マークルツリー(Merkle tree)が使用され得る。例えば、マークルツリーは、ツリーの各ノードがそのサブツリー(subtree)におけるデータから算出された合計(又はハッシュ値)を含んでいるところで、及び、リーフ(leaves)が一つ又は複数のデータ値(例えば、キー、バージョン及びクロック)のハッシュを含んでいるところで、使用され得る。ツリーのコンテンツにおける差異は、ブランチ(branch)に沿ってデータ合計(ハッシュ値)が異なっている当該ブランチを再帰的に展開する(recursing down)ことによって見出され得る。比較の効果を改善するために、マークルツリーは、ブルームフィルタ(Bloom filter)を使用してコード化(符号化)され得る。
【0040】
上述した機構を用いて、データセットサービス112は、データセットの最も新しいバージョンのコピーをその優先リスト190における上位Nのホストに動的に移動するために、進行中の試行を行う。従って、データセットの最も新しいバージョンのコピーが最初はその優先リスト190におけるより下位のホスト130にコピーされることがあったとしても、当該コピーは最終的には優先リスト190における上位Nのホストに移動し戻され、上位Nのホストにおけるデータセットの最終的な一貫性に帰着する。
【0041】
図15A乃至
図15Bを参照すると、優先リスト190を用いて実行される例示的な読出動作148が示されている。
図15Aにおいて、読出要求は、ホストAによってクライアントプロセス134から受信される(上述のように、直接に又は間接に、のどちらでも)(ステップ160)。ホストAは、ローカル読出を行うためにホストB及びCからのデータを並行に要求することにより読出動作を調整する。ホストB及びCは、要求された読出動作を実行する。
図15Bにおいて、ホストAは、ホストB及びCから読出結果を受信し(ステップ162)、クライアントプロセス134に対して応答を供給する。
【0042】
読出要求を受信するとき、コーディネータは、そのキーに対する優先リスト190における最上位にランクされているNの到達可能なホスト130からの、そのキーに対するデータの総ての存在するバージョンを要求することがあり、その後、クライアントプロセス134に対して結果を戻す前に、Rの応答を待つ(ここで、Rは、良好な読出動作に参加することが必要とされるホストの数である)。
図15A乃至
図15Bの実施例においては、値Rは、3に等しく設定される。
【0043】
値Wと同様に、値Rは設定可能である。例えば、R=1であるとすると、ホストAは良好な読出について一度応答し、その読出からのデータは、クライアントプロセス134へ使用のために戻される。別の実施例として、R=2であるとすると、ホストA及びBの両方において読出が実行されるまでデータが戻されないことがある。二つの読出が実行されると、システム100は、データが同一バージョンであることを認識し、R=1のときと同一のデータを戻す。さらに別の実施例として、R=3であるとすると、ホストA,B及びCにおいて読出が実行されるまでデータが戻されないことがある。
【0044】
値R及びWは、一貫性及び高性能を提供するために、Nより小さくなるように設定され得る。R+W>Nとなるような値R及びWの設定は、読出及び書込動作に関係するホスト130のセットの間における重複の設定可能な高い確率が存在するクォーラムのようなシステム(quorum-like system)をもたらす。より高いNが設定されると、少なくとも一つの複製が存在する可能性が高いので、システムは可用性及び耐久性を有する可能性が高くなる。一方、データは、ホスト130の同一セットに書き込まれ又はホスト130の同一セットから読み出される必要がないことは注目され得る。例えば、データセットは、優先リスト190におけるより下位のホスト130に書き込まれ、優先リスト190におけるより上位のホスト130にデータハンドオフを通じて移動されることがあり、その後、最終的には、優先リスト190におけるより上位のホスト130から読み出される。優先リスト190における上位Nのホストにおけるデータセットの可能性のある一貫性は、達成される。他の実施の形態においては、R及びWは、Nよりも十分に小さくなるように(例えば、R+W<N)設定されることがあり、データセットのコピーは、(コーディネータに加えて)W−1のホストにのみ送信され得る。そのような実施の形態においては、上述のデータ回復機構は、上位Nのホストの残余のものにデータセットを増殖させるために使用され得る。
【0045】
実施の一形態において、データセットサービス112のためのアプリケーションプログラムインタフェースは、以下のように設定され得る。例えば、コマンドは、以下の形態を有し得る。
【0046】
write(Key, Value, Context)→ResultCode
(書込(キー、値、コンテキスト)→結果コード)
read(Key) →ValueList, Context, ResultCode
(読出(キー)→値リスト、コンテキスト、結果コード)
ここで、キー(Key)は、バイトの非有界シーケンスであり、値(Value)は、データ(バイトの非有界シーケンス)及びメタデータ(値が書き込まれた最終時刻を含む、値についての情報、ダイアグノスティック(診断)及びデバッグ情報等を包含する、読出専用の、任意の、拡張可能なデータセット)を含むオブジェクトであり、値リスト(ValueList)は、値(Value)のリストであり、コンテキスト(Context)は、読出−変更−書込サイクルに対するベクトルクロック状態をトラック(追跡)するために記憶システムによって内部構造において使用されるオペーク(opaque)オブジェクト(不透明なオブジェクト)であり、結果コード(ResultCode)は、読出又は書込動作が成功したか否かについてのコード表示である。
【0047】
書込動作は、介在する書込がそのキーについて既に起こったことを意味するコンテキストの無効が発生していない限り、キーによって識別される値を、値パラメータによって特定される値に変更する。実施の一形態において、クライアントプロセス134は、読出−変更−書込サイクル(楽観的ロック(optimistic locking))を再始動する。他の実施の形態においては、クライアントプロセス134は、データセットのコンフリクト(矛盾)するバージョンが存在し得る場合に、書込動作が継続することを許可し得る。読出動作は、キーに関連する値のための、データセットサービス112内におけるルックアップを実行する。良好に読み出された任意の及び総ての値は、値リストに戻される。オペークコンテキストオブジェクトは、後続の更新動作において使用するために戻される。複数の値が戻される場合、クライアントプロセス134は、総ての値に対して調整動作を実行することが期待される。後続の更新が(戻されたコンテキストを使用して)実行される場合、更新された値が値リストに戻された総ての値の調整を表すという仮定は、(もしあれば)その値に任意の追加的な変更を加える。
【0048】
理解されるであろうように、アプリケーションプログラムインタフェースにおける複雑性のより大きい又は小さいレベルが用いられ得る。例えば、実施の一形態において、値オブジェクトは、どの程度の期間だけデータが維持されるべきか、例えば、その結果、古い/放棄されたデータが最終的に削除されてもよいか、に関する情報が特定されることを可能にするタイプパラメータを含み得る。
【0049】
他の実施の形態において、キーは、二つの部分(パーティションキー、オブジェクトキー)に分割されて使用され得る。そのような実施の形態においては、パーティションキーは、キーパラメータに関して上述したように、そのキーに対する優先リスト190を生成するためにハッシュされ得る。同一のパーティションキーを共有する二つのデータセットは、従って同一の優先リスト190を有し、それ故に非常に高い確率でそれらのデータセットのそれぞれのコピーは、ホスト130の同一セットに属することとなる。パーティションキーを共有する総てのキーに対する優先リスト190の上位Nのホストのなかにホストの同一セットがあるので、そのような機構は、数個のデータセットに同時にアクセスすることを最適化として許容する。例えば、
図2の商業ウェブサイトの例において、特定のユーザに関連する総てのデータセット(例えば、ショッピングカート、プロファイル、クレジットカード情報等)をホスト130の同一セットに記憶することは望ましいことであり得る。それらのデータセットのそれぞれについて同一のパーティションキーを使用することにより、データセットは、ホスト130の同一セットに記憶される。(パーティションキー、オブジェクトキー)組合せは、ユーザに対する各個人のデータセットを一意に識別する。この構成によって可能となる他の最適化は、パーティションキーを共有するキーにおける範囲問合せ(range query)である。例えば、そのような範囲問合せは、所定のパーティションキーに対する優先リスト190の上位Nのホストのうちの単一ホスト130にアクセスすることによって、そのパーティションキーに対する総てのオブジェクトキーを通して繰り返すために使用され得る。
【0050】
他の実施の形態においては、書き込まれているデータのタイプをクライアントプロセス134が特定し得るように、タイプパラメータは、書込コマンド(例えば、write(Key, Value, Context, Type)→ResultCode(書込(キー、値、コンテキスト、タイプ)→結果コード))に付加され得る。データセットサービス112は、データが最後にアクセスされてから所定量の時間経過後に、(例えば、そのデータが最早必要とされない場合に、記憶領域を再利用するために)そのデータを削除するように設定され得る。削除前に許容される時間は、データのタイプに基づき得る。タイプは、(例えば、データのいくつかのタイプは他のタイプのデータよりも重要であり得るということに基づいて)データセットサービス112が記憶すべきデータのコピーの数を決定するためにも使用され得る。
【0051】
他の実施の形態において、読出コンテキストは、読出コマンドに対する入力として通過させられることもあり得る(例えば、read(Key, Context) →ValueList, Context, ResultCode(読出(キー、コンテキスト)→値リスト、コンテキスト、結果コード))。そのような実施の形態においては、読出コマンドに対する入力として通過した読出コンテキストは、先行する読出の結果として得られることがある。読出動作に対する入力として読出コンテキストを通過させ戻すことにより、クライアントプロセス134は、先行する読出動作の間にアクセスされたデータセットの特定のバージョンの検索において重要性を指示し得る。理解されるであろうように、アプリケーションプログラムインタフェース上における他のバージョンもあり得る。
【0052】
III.データバージョニング(Data Versioning)
A.ベクトルクロックの動作(Operation of Vector Clocks)
図16を参照して、データバージョニング構成について説明する。前述したように、高可用性を提供するために、データセットサービス112は、同一データの複数のバージョンが異なるホスト130上に同時に存在することを許容する。データセットの最も新しいバージョンのコピーをその優先リスト190における上位Nのホストに移動するために、進行中の試行が行われるが、このプロセスは瞬間的なものではない。移動が発生する前には、データセットのより古いバージョンのコピーが、その優先リスト190におけるいくつかのホストに、優先リスト190における最上位又は最上位に近いホストにさえ、存在し得る。従って、例えば、一つのホスト130が一時的に失われた古い変更を反映した一つのバージョンを有し、別のホスト130が古い変更が利用不可能になると同時になされた新しい変更を反映した別のバージョンを有することがある。
【0053】
実施の一形態において、同一のデータセットの二つのコピーがそのデータセットの異なるバージョンであって相互に関して差異を有しているか否かを判定することができるようにすることが望ましい。二つのバージョンが相互に先祖と子孫の関係にある(例えば、一方のバージョンが単に古くなっただけで他方のバージョンに組み込まれている)状況を、二つのバージョンがコンフリクト(矛盾)する(例えば、各バージョンが他方のバージョンに反映されていないデータを含んでいる)状況から区別することができるように、それらの差異にアクセスすることができるようにすることも望ましい。
【0054】
実施の一形態において、バージョン履歴は、データセットの各コピーと共に記憶される。例えば、バージョン履歴は、同一データセットの異なるバージョン間の因果関係を捕捉するベクトルクロックの形態で記憶され得る。ベクトルクロックは、二つのバージョンがコンフリクトするか否かを判定することが可能となるように、データセットのバージョン履歴に関する十分な情報を簡潔に記憶し得る。実施の一形態において、ベクトルクロックは、データセットのバージョンに関連する{ホストID、カウンタ}({host ID, counter})ペアのリストを含む。ホストID(host ID)値は、書込動作を調整(コーディネート)したホストを示す。カウンタ(counter)値は、そのホストがデータセットに書込を行った回数を示している。カウンタ値は、データバージョンについての因果関係、即ち、どのような変更がそのバージョンに先行するかについての要約をコード化(符号化)する。
【0055】
データセットの二つのバージョンが因果関係を示す順序を有するか(従って一方を無視してもよいか)又は並列のブランチ(分岐)であるか(従って調整が必要であるか)の判定を試みる場合、それらのベクトルクロックを検査するだけで十分である。一つのベクトルクロックが、他のベクトルクロックのなかで総てのホストIDに対して最大の又は最大に等しいカウンタ値を有している場合、前者は後者の子孫であり、後者は無視することができる。従って、ベクトルクロックは、データ展開の複数のブランチをまとめて一つに戻すために、同一データの複数のバージョンを調整することをクライアントプロセス134に可能にさせる。
【0056】
図16は、データセットサービス112により使用され得るデータバージョニングの実施例を示している。ステップ400において、最初は、データセットは空(empty)である。ステップ402において、クライアントプロセス134は、ホストAを使用して空データバージョンV
0を更新する。書込を調整(コーディネート)するホストAは、先行するバージョンのクロックをコピーし、ホストAに関連するカウンタ値を増加させ、データバージョンV
1に対するベクトルクロックを生成する。この場合、これが最初の更新なので、カウンタは、1にインクリメントされる。データセットサービス112は、データバージョンV
1及びそれに関連するベクトルクロック[(A,1)]を記憶する、例えば、ホストAが、ローカル書込動作を実行し、さらに、追加的なローカル書込動作を実行して追加的なコピーを記憶するために新しいバージョンをホストB及びCに送信する。データセットサービス112が商業ウェブサイトシステム内にショッピングカート情報を記憶する例示的な実施の一形態において、この更新は、アイテムをショッピングカートに追加するビジターのために発生し得る。理解されるであろうように、データセットの新しい「バージョン」を構成するものは、アプリケーションに依存して変化し得る。
【0057】
図16において、コーディネータは、優先リスト190における最上位にランクされているNの到達可能なホストの一つである。上述のように、コーディネータは、コーディネータは、優先リスト190における最上位にランクされているNの到達可能なホストの一つではないホスト130であり得る。そのような実施例においては、書込要求を受信したとき、コーディネータは、新しいバージョンに対するベクトルクロックを生成してその新しいバージョンをローカルに記憶するために、そのキーに対する優先リスト190における最上位にランクされているNの到達可能なホストの一つを選択し得る。その後、コーディネータは、既に説明したように、残余の最上位にランクされているNの到達可能なホストにその新しいバージョンを(その新しいベクトルクロックと共に)送信し得る。
【0058】
ステップ404において、同一のクライアントプロセス134は、ホストAを使用してデータバージョンV
1を更新する。書込を調整(コーディネート)するホストAは、先行するバージョンのクロックをコピーし、ホストAに関連するカウンタ値を2に増加させ、データバージョンV
2に対するベクトルクロックを生成する。再度、ホストAは、データバージョンV
2及びその関連するベクトルクロック[(A,2)]をホストB及びCに転送し、追加的なコピーを記憶する。バージョンV
2はバージョンV
1に由来し、従ってバージョンV
1を上書きするが、まだバージョンV
2を認識していないホストパーティションに残存しているバージョンV
1の複製が存在し得る。
【0059】
ステップ406において、要求を調整(コーディネート)するために、同一プロセスがホストBを使用してデータバージョンV
2を更新する。新しいホストBが更新を調整(コーディネート)するので、新しいベクトルクロックエントリが、このホストBとの関連においてカウンタ値1で生成される。データセットサービス112は、データバージョンV
3及びその関連するベクトルクロック[(A,2);(B,1)]を記憶する。データバージョンV
2に対するベクトルクロックも、バージョン履歴を保持するために又は実行されるべきより複雑な調整を可能とするために、所望される場合には記憶され得る。ステップ406の後、バージョンV
1は認識しているがバージョンV
2は認識していないホストが、バージョンV
3及びその関連するベクトルクロックを受信することがある。そのホストは、バージョンV
1及びバージョンV
3のそれぞれのベクトルクロック[(A,1)]及び[(A,2);(B,1)]を比較することによって、バージョンV
1が因果関係においてバージョンV
3に先行し従ってバージョンV
3により上書きされるべきことを意味していることを判定することができる。一方、事象の異常なシーケンスが発生して、データバージョンV
3に対するベクトルクロックがバージョンV
1のクロックにおける総てのホストに対して小さい又は等しいカウンタを有する場合、バージョンV
3は、バージョンV
1の先祖であり、抹消され得る。
【0060】
ステップ408において、異なるクライアントプロセス134は、バージョンV
2を読み出し、ホストCを使用してバージョンV
2の更新を試行する。例えば、ホストB及びCは、利用不可能である場合がある。本実施例においては、ホストCが、ステップ406の書込動作に関係しておらず、バージョンV
3を認識していないものとする。新しいホストCが更新を調整(コーディネート)するので、新しいベクトルクロックエントリは、このホストCとの関連においてカウンタ値1で生成される。データセットサービス112は、データバージョンV
4及びその関連するベクトルクロック[(A,2);(C,1)]を記憶する。ステップ408において、バージョンV
1又はバージョンV
2を認識しているホストは、バージョンV
4及びその関連するベクトルクロックを受信したときに、バージョンV
1及びバージョンV
2が新しいデータによって上書きされること及び抹消され得ることを、決定し得る。
【0061】
ステップ410において、クライアントプロセス134は、バージョンV
3及びバージョンV
4の両方を読み出す。例えば、読出動作は、ホストAによって調整(コーディネート)されることがあり、かつ、ホストB及びCも関係することがある。ホストAは、ベクトルクロック[(A,2)]を有するデータセットのそれ自身のコピーと、ベクトルクロック[(A,2);(B,1)]を有する、ホストBからのデータセットのコピーと、ベクトルクロック[(A,2);(C,1)]を有する、ホストCからのデータセットのコピーとを得る。当該読出のコンテキストは、バージョンV
3及びバージョンV
4のクロックの要約、即ち、[(A,2);(B,1);(C,1)]である。ベクトルクロックの検査からは、バージョンV
3及びバージョンV
4のそれぞれには、相互に反映されていない変更が含まれているので、ホストAは、バージョンV
3とバージョンV
4との間にいかなる因果関係も存在しないことを見出すことになる。従って、バージョンV
3及びバージョンV
4は調整される。
【0062】
実施の一形態において、データセットサービス112(この例では、ホストA)は、調整をどのように実行するかを順番に決定するクライアントプロセス134(及び/又はクライアントプロセス134に関連するバージョン調整ロジック136)に複数のバージョンを提供する。この構成は、調整を実行するために使用される任意のビジネスロジックに、記憶され、又は、データセットサービス112よりむしろクライアントプロセス134と関連付けられることを可能とする。クライアントプロセス134とバージョン調整ロジック136とは分離したものとして示されているが、クライアントプロセス134とバージョン調整ロジック136とが統合された形態で提供され得ることは理解されるであろう。他の実施の形態においては、バージョン調整ロジック136は、データセットサービス112と共に提供され得る。複数のバージョンは、例えば、いずれを保持するかを決定するためのバージョン上のデフォルト序列を使用することにより、単一の調整されたバージョンを生成するために異なる複数のバージョンを併合することにより、データの分析を実行して矛盾をどのように取り扱うかを矛盾ごとに決定することにより、等々により、調整され得る。理解されるであろうように、アプリケーションに依存して、異なる方策が、異なる状況ではより最適であり得る。
【0063】
ステップ412において、書込要求がクライアントプロセス134から受信される。ホストAは、書込を調整(コーディネート)し、ベクトルクロックにおける対応するカウンタ値を更新する。更新されたバージョンは、調整動作に関係しない、クライアントプロセス134により実行された他の変更を含み得る。新しいバージョンV
5は、ベクトルクロック[(A,3);(B,1);(C,1)]を有することになる。
【0064】
データセットに対して調整に加えてどのような変更が実行されたかに拘わらず、ステップ412において、ホストAがカウンタ値を[(A,3);(B,1);(C,1)]に更新することは理解されるであろう。ベクトルクロック[(A,2);(B,1);(C,1)]を有するいかなるバージョンも存在しないので、ベクトルクロック内のカウンタの更新は、親クロックを新しいクロックから区別する。加えて、複数のクライアントプロセスが同時に調整を試行し得る(例えば、調整のために異なるホストを使用して)が異なる結果に到達し得る(例えば、変更のみならず調整も加える異なる併合ロジック等のために、)ので、カウンタを増加させることが望ましい。もしカウンタが更新されなければ、異なる併合試行が同一クロック即ち[(A,2);(B,1);(C,1)]に割り当てられることがあり、従って、相互に区別することができなくなる。
【0065】
B.ベクトルクロック情報及び切捨(Vector Clock Information and Truncation)
実施の一形態において、{ホストID、カウンタ}({host ID, counter})ペアのみを含むよりもむしろ、ベクトルクロックは、多数の追加的な値を含み、以下のような形態を有する。
【0066】
ベクトルクロック
={(<ホストID><ホスト情報><キー情報>),<カウンタ>,<タイムスタンプ>}
( VectorClock
={(<HostID><host-gen><key-gen>),<counter>,<time-stamp>})
ホストID(host ID)は、ホストに対する固有の識別子であり、カウンタパラメータは、データバージョンに対応する因果関係情報をコード化(符号化)し、上述した{ホストID、カウンタ}({host ID, counter})ペアに対応する。実施の一形態において、(<ホストID><ホスト情報><キー情報>)((<HostID><host-gen><key-gen>))パラメータの組合せは、ホストID単独に関して前述したような態様で機能する。即ち、三つのパラメータ(<ホストID><ホスト情報><キー情報>)のいずれか一つでも異なっていれば、ホストは、異なるホストであると考えられる(即ち、データセットの異なるバージョン間にいかなる因果関係も伴い得ない)。
【0067】
実施の一形態において、ホスト130は、ベクトルクロックを同時にディスクには書き込まない。従って、ホストが各キーに対して生成されたシーケンス番号を見落とすことがあり、その結果そのシーケンス番号が再使用され、それによりベクトルクロックの一貫性が損なわれるという可能性が存在する。見落としの危険性(例えば、ホスト障害後に)が認識されると、ホスト130は、その<ホスト情報>(<host-gen>)パラメータを更新し、総ての未来のベクトルクロックに対して、完全に異なるホストとなるように生成し(任意のキーに対して)、完全に異なるホストとなって見えるようにする。従って、ホスト130が再起動されたときに<ホスト情報>パラメータをインクリメントすることは、障害の前に生成されたベクトルクロックを、再起動後に生成されたベクトルクロックから区別することを可能にする。理解されるであろうように、各ベクトルクロックに対するカウンタは、無限に単調増加する。実施の一形態において、無限のカウンタ番号を回避するために、各ホストは、例えば、<ホスト情報>パラメータをインクリメントすることにより、新しい固有の識別性を強制的に、定期的に選択する。例えば、再起動後に新しい固有の識別性を割り当てられたホストは、それにより、<カウンタ>(<counter>)パラメータをゼロに設定もする。これは、識別性を変更する前に単一のホスト130が調整(コーディネート)できる書込の回数によって、可能性のある最高のカウンタ値が制限される結果をもたらす。他の実施の形態において、識別性の変更は、そのカウンタ値の一つ又は複数が所定の閾値に到達したときに、ホストにおいて自動的にトリガされ得る。
【0068】
<キー情報>(<key-gen>)パラメータは、キー生成カウンタをトラック(追跡)するために使用され得る。実施の一形態において、データハンドオフ後に、ホスト130は、得られたいかなるデータも削除する。これが、優先リスト190において下位にあるホスト130のための記憶容量を節約する。同時に、ホスト130は、データハンドオフ後にインクリメントされた<キー情報>パラメータを保持し、それにより、次回にホスト130が書込動作を実行することを要求されたと仮定した場合におけるいかなる因果関係も回避する。例えば、ホストDが、ベクトルクロック[(A,3),(D,1)]を有するデータセットのバージョンに対する書込動作を調整(コーディネート)し、データハンドオフを実行し、その後、ベクトルクロック[(A,2)]を有するデータセットのバージョンに対する別の書込動作を調整することを要求される場合、更新されたデータセットがベクトルクロック[(A,3),(D,2)]を有するようにすることは不適当である。この状況において新しい<キー情報>値を割り当てることにより、ホスト130は、新しいホストであるかのごとく見えるようになり、それにより、二つのバージョン間の因果関係の出現を回避する。実施の一形態において、各ホスト130は、キーごとに別個の<キー情報>を保持し、また、ベクトルクロックは変更された識別性(例えば、変更された<ホストID>又は更新されたその<ホスト情報>)を保持するので、各ホスト130は、対応してベクトルクロックが生成された総てのキーについてキーの世代を記憶する。同様に、各ホスト130は、対応する<キー情報>パラメータ又は<ホスト情報>パラメータのいずれかが更新されてから、キーに対するベクトルクロックにおいて使用された最後の<カウンタ>パラメータも記憶し得る。
【0069】
<タイムスタンプ>パラメータは、データセットの世代及びそのベクトルクロック内のエントリを監視するために使用され得る。いくつかのアプリケーションにおいては、データが所定の世代を超えた場合、そのデータを削除することが望ましい。例えば、ショッピングカートアプリケーションにおいて、数日、数週間、数月又は数年等の期間に亘って放置されているショッピングカートは、削除することが望ましい場合がある。タイムスタンプは、この方法におけるデータセットの削除を支援(サポート)するために使用され得る。加えて、タイムスタンプは、ベクトルクロック切捨(Vector Clock Truncation)のためにも使用され得る。理解されるであろうように、データセットとの関係において書込動作が調整(コーディネート)された異なるホスト(又は異なる<ホスト情報>若しくは<キー情報>を有する同一ホスト)のリストの長さが増加するのに伴い、そのデータセットに対するベクトルクロックの長さも増加する(即ち、ベクトルクロックに含まれる{ホストID、カウンタ}({host ID, counter})ペアのリストの長さが増加するからである)。従って、所定数だけ世代を重ねたベクトルクロックは、タイムスタンプを使用して、削除され又は切り捨てられ得る。
【0070】
他の実施の形態においては、データセットにおける変更をトラック(追跡)するために、ベクトルクロックを使用するよりむしろ、他のバージョン履歴機構が使用され得る。例えば、ハッシュ履歴も使用され得る。ここで、用語「バージョン履歴(version history)」とは、データセットにおける変更を経時的にトラック(追跡)するために(即ち、変更が存在することをトラックするために、であって、必ずしも変更の性質をトラックするために、ではない)使用され得る任意のデータ構造をいう。理解され得るように、異なるバージョン履歴機構は、ディスク領域使用量、バンド幅、古いバージョンが削除されたときの一貫性の保持、因果関係における先行の検出の速度及び容易さ、等による異なるトレードオフを提供し得る。実施の一形態において、データセットの二つ又はそれ以上のコピー間の因果関係における先行(又はその不存在、上記ではコンフリクト(矛盾)と称された)の検出を可能とするバージョン履歴機構が使用される。バージョン履歴機構は、バージョンコンフリクトを許容して、データの損失なしに(可用性)を発生させるために、及び、優先リストにおける上位のホストへのデータ移動の際に一貫性の保持を容易にするために、使用され得る。
【0071】
IV.複数データセンタ(Multiple Data Centers)
A.複数データセンタ構成の構造(Architecture of Multiple Data Center Arrangement)
図17乃至
図25を参照すると、データ処理システム100の他の実施の形態が示されている。
図17乃至
図25において、データセットは、複数段(multi-tiered)リング構成に従ってホスト130間に分割されている。複数段リング構成は、例えば、各ホストが異なる地理的ロケーションに(例えば、異なる都市、異なる国、異なる大陸に存在し得る異なるデータセンタに)配置されているデータセット記憶システムを実施するために使用され得る。例えば、ホスト間における相互関係障害の確率を低減するために、データは、そのような異なるデータセンタ間で複製され得る。単一のデータセンタの障害が全システムの可用性に重大な影響を与える可能性は非常に小さい。加えて、クライアント要求をより近いデータセンタに転送することにより(ネットワーク待ち時間(network latency)によって)、端末間(end-to-end)データ検索応答時間は短縮され得る。複数段リング構成は、他の理由のために、例えば、共有データセンタ内に位置するホスト等においても使用され得る。例えば、リングの異なる段は、データセンタ内の領域、データセンタ内のホストの特定のラック(rack)等を特定するために使用され得る。一つの実施例を提供する目的のために、
図17においては、各ホストが異なるデータセンタに配置されているデータセット記憶システムを実施するために、複数段リング構成が使用されることが想定されている。
【0072】
先ず
図17を参照すると、
図17は、データ処理システム100が2段又は2レベルリング構成を備えている実施の形態を示している。2段リング構成は、
図1及び/又は
図2に示されたデータセットサービス112を実施するために使用され得る。
図17において、データ処理システム100は、上位レベルリング504上に論理的に配置されている複数のデータセンタ502を備えている。四つのデータセンタ502が示されているが、実際には、任意の数のデータセンタ502が使用され得ることは理解されるであろう。
【0073】
データセンタ502は、通信ネットワーク508によって相互に接続され得る(例えば、広域ネットワーク、インタネット等)。データセンタ502間のメッセージ通信は、
図25との関連において詳細に後述されるように、メッセージフィルタ510を通過し得る。
図1乃至
図2におけるように、データセンタ502のそれぞれは、通信ネットワーク104(例えば、インタネット)経由で種々のユーザコンピュータ102によってアクセスされ得る。
【0074】
データセンタ502のそれぞれは、各下位レベルリング184上に論理的に配置されている複数のホスト130をさらに備えている。図示されている実施例においては、各下位レベルリング184は、異なるデータセンタ502に対応している。各データセンタ502内では、各リング184上のホスト130はまた、
図3乃至
図16との関連において上述したように動作し得る。下位レベルリング184は、同種又は異種(例えば、異なる数のホスト、異なるハッシュ関数、異なる構成等を有する)であり得る。さらに、以下に説明するように、データセンタ502に関する上位レベルリング504の動作は、ホスト130に関して
図3乃至
図16との関係において上述した通りのリング184の動作と同一であり得る。
【0075】
図18を参照すると、実施の一形態において、データセット記憶システム118は、各データセンタ502がデータセットの一部を記憶するように、各データセンタ502に分散され得る。データセンタ502のそれぞれは、上位レベルリング504上におけるハッシュ値の一つの範囲(又は、詳細に後述するように、上位レベルリング504上におけるハッシュ値の範囲の組(複数の範囲))に対して責任を有するものとすることができ、その場合、ホスト130及びリング184との関連において上述したのと同様の態様で、各データセンタ502は、ハッシュ範囲におけるそれ自体の位置から先行するデータセンタ502の位置までに延在するハッシュ値との関係において読出/書込動作に責任を有する。データセットへのアクセスの要求が受信されたとき(例えば、読出動作又は書込動作を通じて)、データセットがアクセスされ得るデータセンタ502を決定するために、上位レベルリング504のためのハッシュ関数にキーが適用される。(
図18において、符号DC1−DC4はそれぞれ、
図17における四つのデータセンタ502の異なる一つを示している。) データセットがアクセスされ得るホスト130を、関係するデータセンタ502内で決定するために、キーは、下位レベルリング184のためのハッシュ関数にも適用される。上位レベルリング504のために使用されるハッシュ関数は、下位レベルリング184のために使用されるハッシュ関数と同一のもの又は異なるものであり得る。同様に、上述のように、下位レベルリング184のそれぞれのために使用されるハッシュ関数は、他の下位レベルリング184のために使用されるハッシュ関数と同一のもの又は異なるものであり得る。
図18に示された構成のマッピングでは、個々のデータセンタ502は、データセンタ502へのデータセットの分割についての全体的な再マッピングを行うことなく、追加し又は除去することが可能であり、それによりスケーラビリティ(拡大縮小可能性)(scalability)が増進される。
【0076】
実施の一形態において、データセンタ間のデータ複製も、ホスト130との関連において
図10について上述したのと同様の態様により、支援(サポート)され得る。従って、
図18に示したように、リング504上の直近のデータセンタ502に単純にデータセットが割り当てられるよりむしろ、データセットは、最初のMの後続するデータセンタ502に割り当てられるものとしてもよい。データセットサービス112は、データセットがMのデータセンタにおいて複製されることを保証するために動作することが可能であり、各データセンタ502は、それ自体とそのM番目の先行するデータセンタ502との間のリング504上の範囲に対して責任を有し得る。
【0077】
所定のデータセットの複製を記憶するデータセンタ502の数は、例えば、データセットごとの基準、データタイプごとの基準等で設定可能であるものとし得る。理解されるであろうように、保持される各データセットの複製の数は、特に、可用性の望ましいレベル及び通信ネットワーク508上の更新通信量の望ましいレベルに基づいて決定され得る。即ち、異なるデータセンタに亘ってより多くの複製が記憶されるほど、可用性は増加する。しかし、データセットの複製されたコピーを、一貫性を有するように保持するための更新の間に、通信ネットワーク508上のネットワーク通信量も増加する。データセットが一つのデータセンタ502内で複製されるべきものと仮定すると、データセットを複製するデータセンタ502内のホストの数も、例えば、データセンタごとの基準、データセットごとの基準、データタイプごとの基準等に基づいて、設定可能であるものとし得る。
【0078】
実施の一形態において、データセンタ間の負荷平衡も、ホスト130との関連において
図12について上述したのと同様の態様により、支援(サポート)され得る。例えば、データセンタ502は、リング504上の複数の位置に割り当てられ得る。そのような構成は、当該構成を使用しなかったとするとリング504上における各データセンタ502の無作為の位置割り当てによって発生し得る不均一なデータ及び負荷の分散を回避するために使用され得る。そのような複数配置は、各データセンタ502に割り当てられるデータセットの数の不均一を低減するように作用する。その理由は、リング184上における無作為配置の増加した数は、各データセンタ502に割り当てられたデータセットの数を平均値に収束させるように作用するからである。加えて、リング504上の複数の位置へのデータセンタ502の割当ては、異種のデータセンタの使用を容易にもする、即ち、より性能の高いデータセンタ502(例えば、処理能力、記憶容量及び/又はネットワーク容量に基づいて決定される)がリング504上のより多くの位置を割り当てられ、より性能の低いデータセンタ502がリング504上のより少ない位置を割り当てられるようにし得る。さらに加えて、リング504上の複数の位置へのデータセンタ502の割当ては、データセンタ間での負荷の移動も容易にする。その理由は、各データセンタ502が、他のデータセンタ502のそれぞれと後続/先行関係を有し得るからである(リング504上の各データセンタ502に十分な数の位置が割り当てられているものとする)。従って、例えば、データセンタ502のうちの一つが利用不可能又は非動作状態になったとすると、非動作状態になったデータセンタ502により処理されていた負荷は、データ可用性を損なうことなく、残余の利用可能な各データセンタ502にほぼ均等に分散させられ得る。
【0079】
図19を参照すると、各データセットは、各データセンタ502がキーに基づいて生成されたハッシュ値からリング504上を時計回りに周回するときに最初に遭遇する他のデータセンタ502の優先リスト519を有し得る。優先リスト519は、データセットへのアクセス(例えば、読出、書込等)に使用されるデータセンタ502の好適な順序を表している。総てのデータセンタ502が利用可能である場合、優先リスト519における上位Mのデータセンタ502がデータセットを記憶する。同一データセットにおける連続する動作がMのデータセンタの同一セットにアクセスすることがあり、従って一貫性を有するものであり得る(即ち、同一キーにおける先行する動作によって読出/書込が行われた同一データに、動作がアクセスする)。優先リスト519における一つ又は複数のデータセンタに故障が発生した場合、又は、ネットワークパーティションが存在する場合、データセットは、優先リスト519における下位にランク付けされた一つ又は複数のデータセンタ502に一時的に記憶され、それにより高可用性が維持される。加えて、同一データセットへの連続する動作がデータセンタ502の異なるセットにアクセスすることがあるが、アクセスされるデータセンタ502のセットにいくらかの重複がある限り、動作は依然として一貫性を有し得る。優先リスト519において上位の利用可能なデータセンタ502にアクセスすることにより、動作から動作へのホストの利用可能性における小さい変化は、一貫性に否定的な影響を与えない。その理由は、後続のアクセスが、重複するデータセンタを含み得るからである。
【0080】
優先リスト519は、例えば、ハッシュ関数に基づいて算定され得る。実施の一形態において、所定のデータセットを記憶しているデータセンタ502にアクセスするために、各ホスト130は、データセンタ502の利用可能性(優先リスト519における上位Mの利用可能なデータセンタを選択するために)に加えて、ハッシュ空間におけるデータセンタ位置に関する情報(優先リスト519を算定するために)も記憶し得る。他の実施の形態においては、例えば、記憶される優先リスト519が、ハッシュ関数に基づいて構成されること、及び、優先リスト519を構成する際に考慮に入れることが望ましい場合がある他の関数に基づいて構成されることを可能とするために、優先リスト519は、記憶され得る。
【0081】
B.アクセス動作(Access Operations)
図20乃至
図24を参照すると、データセンタ502に記憶されているデータセットへのアクセスに関連する動作が示されている。
図20は、実施の一形態に係る
図17のシステムにより実行されるアクセス動作のフローチャートである。
図21乃至
図24は、実施の一形態に係る
図20のアクセス動作の態様を詳細に示す図である。
【0082】
ステップ602において、ユーザコンピュータ102との接続がデータセンタ502により確立される。理解されるであろうように、各データセンタ502は、データセットサービス112を実現するホスト130だけでなく、ネットワークインタフェース110及び他のサービス114を実現する他のホストも含み得る。従って、
図21を参照すると、例えば、ネットワークインタフェース110を実現するホストの一つであり得るホスト532との接続が確立され得る。
【0083】
実施の一形態において、ユーザコンピュータ102との接続は、一つのデータセンタ502(例えば、無作為基準による可能性もある)において確立される場合があり、その後、他のデータセンタ502に転送される。例えば、
図21において、ユーザコンピュータ102との接続は、一つのデータセンタDC4内のホスト532によって確立されることがあり(ステップ602)、その後、例えば、より近いものであってもよく、より少ない負荷しか掛かっていないものであってもよく、及び/又は、接続を維持するためにより適したものとなるような他の特性を示すものであってもよい、他のデータセンタDC1内の他のホスト534に転送される(ステップ604)。
【0084】
ステップ606において、データアクセス要求(例えば、読出要求、書込要求等)が受信される。
図22を参照すると、データアクセス要求は、クライアントプロセス134を実行しているものであり得るホスト536から、データセットサービス112内のホスト130によって受信され得る(
図3参照)。例えば、上述の
図2において示した実施例との関係においては、ホスト534は、ネットワークインタフェース110を実現するホストの一つである場合があり、ユーザコンピュータ102に接続されている場合があり、ホスト536は、ショッピングカートサービス124を実現するホストの一つである場合があり、ホスト534から要求を受信する場合があり、ホスト130は、データセットサービス112を実現するホストの一つである場合があり、ホスト536からアクセス要求を受信する場合がある。データセットへのアクセス要求がデータセンタ502内のホスト130において受信されると、ステップ608において、ホスト130は、データセットがデータセンタ502内にローカルに記憶されているか否かを判定する。データセットは、データセンタ502内にローカルに記憶され得る。その理由は、例えば、データセンタ502が優先リスト519における上位Mのデータセンタの一つだからであり、データセンタ502が優先リスト519における下位のデータセンタであるが優先リスト519における上位Mのデータセンタの一つであるデータセンタ502にデータセットを移動するまで一時的にデータセットを記憶しているからであり、データセンタ502がユーザとの接続を確立してデータセットの貸し出された(leased)コピーを一時的に記憶しているからであり(詳細に後述するように)、又は、別の理由があるからである。データセットがローカルに記憶されている場合は、ステップ610において、応答は、データセットの一つ又は複数のローカルコピー(場合によっては一つ以上のバージョン)に基づいて供給され得る。そうでない場合は、ホスト130は、他のデータセンタ502からデータセットの一つ又は複数のコピー(場合によっては一つ以上のバージョン)を取得し得る。データセットのコンフリクト(矛盾)するバージョン(例えば、一つのデータセンタ内からのコンフリクトバージョン、異なるデータセンタからのコンフリクトバージョン、又は、その両方)が存在する場合、そのようないかなるコンフリクトバージョンも、データセットを要求する特定のクライアントプロセス134に関連するデータセットバージョン調整ロジック136に報告され、上述のように、データセットバージョン調整ロジック136により解決され得る。例を挙げる目的のために、データセンタDC1が、データセットの複製を記憶するMのデータセンタの一つではないものと仮定する。従って、データセンタDC1におけるホスト130が、他のデータセンタからデータセットのコピーを得るためにコーディネータとして動作する。
【0085】
ステップ612において、アクセス要求が受信された後、データセットに対するキーが、上位レベルリング504及び下位レベルリング184に対するハッシュ関数に適用される。ステップ614において、
図22を参照すると、データセンタDC1におけるホスト130(コーディネータとして動作する)が、優先リスト519における一つ又は複数の上位のデータセンタからのデータを要求する。実施の一形態において、ホスト130は、上位レベルリング504に対するハッシュ関数にキーを適用して、データセンタDC2及びDC3にアクセス要求を送信する(例えば、データセンタDC2及びDC3がそのデータセットに対する優先リスト519の上位にあることが判定された後に)。アクセス要求がデータセンタDC2及びDC3における各ホスト130により受信されると、それらのホスト130は、下位レベルリング184に対するハッシュ関数にキーを適用して、そのデータセットを記憶する各データセンタ内のホスト130を判別する。この手法において、データセンタDC1におけるホスト130にとって、遠隔のデータセンタDC2及びDC3のリング184上におけるホスト130の位置に関する情報を記憶することは、必要ではない。他の実施の形態においては、各データセンタ502における各ホスト130はこの情報を記憶し、データセンタDC1におけるホスト130は、上位レベルリング504及び下位レベルリング184の両方に対してキーを適用し得る。
【0086】
実施の一形態において、ユーザコンピュータ102との接続が確立されたときに、データセットはプリフェッチ(pre-fetch:先取り)され得る。例えば、
図2のショッピングカートの実施例との関係においては、ユーザコンピュータ102は、ホスト534との接続を確立し得るが、それは、ショッピングカートデータセットに対する要求が行われるいくらか前であり得る。例えば、ユーザは、ショッピングカートデータセットに対してアクセスすることを必要とするアクション(動作)が実行される前の時間は買い物を行い得る。従って、ショッピングカートデータセットに対してアクセスすることを必要とするアクションをユーザが実行するのを待たずに、ユーザコンピュータ102との接続が確立されると直ちに、データセットは、遠隔のデータセンタ502からの読出動作を実行することによりプリフェッチされ得る。この構成は、通信ネットワーク508経由でデータセット取得することに関連するネットワーク待ち時間(network latency)を回避するために用いられ得る。
【0087】
ステップ616において、遠隔のデータセンタ502は、アクセス要求を処理し、データセンタDC1におけるホスト130により受信される応答を送信する。実施の一形態においては、良好な読出動作のために、読出動作は、R
DCのデータセンタにおいて良好に行われなければならない。ここで、R
DCは、設定可能な値であって、R
DC≦Mである。実施の一形態においては、良好と考えられる書込動作のために、書込動作は、W
DCのデータセンタにおいて良好に行われなければならない。ここで、W
DCは、設定可能な値であって、W
DC≦Mである。R
DC+W
DC>MとなるようなR
DC及びW
DCの設定は、読出及び書込動作に関係するデータセンタ502のセットの間における重複の設定可能な高い確率が存在するクォーラムのようなシステム(quorum-like system)をもたらす。
【0088】
理解されるであろうように、データセンタ502からのデータセットにアクセスする場合、ホスト130に関して上述したように、データセットは、データセンタ502の同一のセットに書き込まれる必要はなく、また、データセンタ502の同一のセットから読み出される必要もない。例えば、データセットは、優先リスト519における下位のデータセンタ502に書き込まれて、優先リスト519における上位のデータセンタ502にデータハンドオフを通じて移動され、その後、最終的に優先リスト519における上位のデータセンタ502から読み出され得る。この態様において、優先リスト519の上位Mのデータセンタにおけるデータセットの最終的な一貫性は、実現され得る。データセンタ502はまた、それらが共有している範囲の下位レベルデータベース比較を周期的に実行し、その後、比較の間に検出されたいかなる差異も調整するために必要なデータ転送を実行する(例えば、データセットの喪失したコピーのために)。従って、データセットサービス112は、それらの優先リスト519における上位Mのデータセンタにデータセットの最新バージョンのコピーを動的に移動させる進行中の試行を行い得る。たとえデータセットの最新バージョンのコピーが、その優先リスト519の下位にあるデータセンタ502に最初はコピーされることがあり、又は、別の理由により上位Mのデータセンタの一つにおいて喪失することがあるとしても、そのコピーは、優先リスト519における上位Mのデータセンタへ最終的に移動し戻され、上位Mのデータセンタにおけるデータセットの最終的な一貫性に帰着する。
【0089】
ステップ618において、種々のホスト130及びデータセンタ502から受信される総てのデータセットについてのバージョン履歴は、異なるデータセンタから受信されるデータセット間の一貫性をチェックするために比較される。実施の一形態において、バージョン履歴はベクトルクロックであり、
図16との関連において上述したベクトルクロック構成は、異なるデータセンタ502に記憶されている同一データセットの異なるバージョン間の因果関係を捕捉するために使用される。例えば、いかなる所与の二つのホスト130も、それらが異なるセンタ内のものであったとしても、相互に区別され得るように、総てのホスト130は、普遍的に固有の<ホストID>(<Host ID>)を与えられ得る。そのような構成においては、データバージョニングを実行するために使用されるロジックは、ホスト130が複数段(multi-tiered)リング構成に従って組織的構造を与えられているという事実を必ずしも認識している(又は考慮に入れている)必要はない。他の実施の形態において、データバージョニングは、下位レベルリング184のレベルにおいて、及び、上位レベルリング504のレベルにおいて、分離して実行される。そのような実施の形態においては、ベクトルクロックは、書込動作をコーディネート(調整)したデータセンタを示す<データセンタID>(<data center ID>)パラメータを含み得る。
【0090】
ステップ620において、
図24を参照すると、データセットは、遠隔のデータセンタにおいてリフレッシュされる。実施の一形態において、一旦データセットが取得されると、データセットは、ある時間期間(ここでは「貸出時間(lease time)」と称する)に亘ってデータセンタDC1に保持される。その後、貸出(lease)が未だ終了していないという条件で、未来の読出動作がローカルに実行される。例えば、データセンタがデータセットへの読出を受信すると、そのデータセンタは、読出要求を送信することなく、ローカルホスト130からのデータセットを遠隔のデータセンタ502へ返送する。書込動作に関しては、実施の一形態において、書込動作は、上述したように、メッセージフィルタを使用して制御され得る。他の実施の形態において、書込動作は、読出動作について上述したのと同様の貸出構成を使用して実行され得る。即ち、データセンタがデータセットへの更新を受信すると、ホスト130は、その更新をローカルに実行し、貸出の終了時にのみ、その更新を他のデータセンタ502に非同期的に伝達する。データセットのローカルコピー上で動作を行うことにより、ユーザコンピュータ102において体験される待ち時間は、減少させられる。他の実施の形態においては、メッセージフィルタも貸出構成も使用されず、更新は、直ちに他のデータセンタ502に伝達される。
【0091】
ネットワークサービス、例えば、小売ウェブサイトとの関係において、貸出時間は、ユーザコンピュータ102の平均セッション時間に基づいて決定されてもよく、ユーザコンピュータ102とのセッションが実行中(アクティブ)であるときは延長され得る。しかし、この貸出時間の間は、データセットが複数のデータセンタにおいて同時にアクセスされる場合(例えば、複数のユーザコンピュータ102が、異なるデータセンタにおける同一のデータセットにアクセスしている場合)、コンフリクトがデータセットの異なるコピーにおいて発生する可能性もある。そのような状況においては、ローカルコピーをリフレッシュし(
図24に示されるように)、そのローカルコピーを他のデータセンタに保持されている他の複製コピーと同期させることが望ましいことであり得る。異なるデータセンタ502に記憶されているデータセットにコンフリクトが発生するという点については、そのようなコンフリクトは、データセットバージョン調整ロジック136によって解決され得る。
【0092】
C.メッセージフィルタ動作(Message Filter Operations)
図25を参照すると、実施の一形態において、例えば、データセンタにデータを記憶するためのコストがネットワーク通信量(例えば、ピークネットワーク通信量、平均ネットワーク通信量等)のレベルによって影響を受ける場合、可用性の望ましいレベルになお適合させながら、データセンタ間の通信オーバヘッドを減少させることは望ましいことであり得る。例えば、他のデータセンタへのデータセットの即時の伝達を回避して、通信(トラフィック)バーストが平滑化されるようにすることは、望ましいことであり得る。
【0093】
そのために、データセンタ502のそれぞれにおけるメッセージフィルタ510は、ネットワーク通信量を変調するために使用され得る。各メッセージフィルタ510は、対応するデータセンタ502内においてロジック的(論理的)に集中化され得る。メッセージフィルタ510は、データセンタ502内のホスト130からの書込要求を受信して、その書込要求を即時に又は遅延した態様で伝達するように構成され得る。
図25に示されるように、データセンタ502は、バースト552を伴うネットワーク通信量を発生する。メッセージフィルタ510は、バーストを平滑化して、ネットワーク通信量が時間期間に亘って分散させられた帯域幅波形554を生成するために動作する。他の実施例として、メッセージフィルタ510は、データセットのより古いバージョンを廃棄して(ベクトルクロックの分析に基づいて)、データセットの最新のバージョンのみを転送するために構成され得る。メッセージフィルタ510はまた、信頼性の高いメッセージ記憶システムとしても構成され得る。例えば、データセンタ502がダウンした場合又はメッセージを受信するために利用不可能になった場合、メッセージフィルタ510は、メッセージを記憶し、データセンタ502がオンラインに復帰したときにそのメッセージを送信するように構成され得る。
【0094】
本発明は、図面を参照して、以上に説明されている。それらの図面は、本発明に係るシステム、方法及びプログラムを実施する特定の実施の形態についてのある一定の詳細を示している。しかし、図面による本発明の記載は、図面中に存在し得るいかなる限定も本発明に課するものと解釈されるべきではない。本発明は、方法、システム、及び、その動作を達成するための任意の機械読取可能な記録媒体上のプログラム製品を企図している。本発明の実施の形態は、既存のコンピュータプロセッサを使用して、又は、この若しくは他の目的のために組み込まれた専用コンピュータプロセッサにより、又は、結線接続されたシステムにより、実施され得る。
【0095】
上述したように、本発明の範囲内にある実施の形態は、その上に記録された機械実行可能な命令若しくはデータ構造を運搬又は保持するための機械読取可能な記録媒体を含むプログラム製品を含む。そのような機械読取可能な記録媒体は、汎用若しくは専用のコンピュータ又はプロセッサを有する他の機械によりアクセス可能な任意の利用可能な記録媒体とすることができる。例として、そのような機械読取可能な記録媒体は、RAM、ROM、EPROM、EEPROM、CD−ROM若しくは他の光学ディスク記録媒体、磁気ディスク記録媒体若しくは他の磁気記録装置、又は、機械実行可能な命令若しくはデータ構造の形態でのプログラムコードを運搬若しくは記憶するために使用可能であり、汎用若しくは専用コンピュータ又はプロセッサを有する他の機械によりアクセス可能な任意の他の記録媒体を含み得る。情報が、ネットワーク若しくは他の通信接続(結線接続、無線のいずれか、又は、結線接続若しくは無線の組合せ)を通じて機械に転送され又は供給されると、その機械は、機械読取可能な記録媒体としての接続を適当に調査する。従って、そのような任意の接続は、機械読取可能な記録媒体と適当に称される。上記の組合せも、機械読取可能な記録媒体の範囲内に含まれる。機械実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ又は専用処理機械に、ある一定の機能若しくは機能のグループを実行させるための命令及びデータを含む。
【0096】
本発明の実施の形態は、例えば、ネットワーク接続環境における機械によって実行されるプログラムモジュールの形態におけるプログラムコード等の、機械実行可能な命令を含むプログラム製品による実施の一形態において実施され得る方法ステップの一般的な前後関係において記載されている。概して、プログラムモジュールは、特定のタスクを実行し又は特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。機械実行可能な命令、関連するデータ構造、及び、プログラムモジュールは、ここに開示されている方法のステップを実行するためのプログラムコードの例を表している。そのような実行可能な命令又は関連するデータ構造の特定のシーケンスは、そのようなステップにおいて説明された機能を実施するための対応する動作の例を示している。
【0097】
本発明の実施の形態は、プロセッサを有する一つ又は複数の遠隔コンピュータへの論理的(ロジック的)結合を使用するネットワーク接続環境において実施され得る。論理的結合は、ここでは例として示されるものであって限定ではないローカルエリアネットワーク(LAN)及びワイドエリア(広域)ネットワーク(WAN)を含み得る。そのようなネットワーク接続環境は、職場全域若しくは事業全域コンピュータネットワーク、イントラネット及びインタネットにおいて一般的であり、異なる通信プロトコルの幅広い変形を使用し得る。当該技術分野における通常の知識を有する者は、そのようなネットワーク計算方式環境が典型的には、パーソナルコンピュータ、ハンドヘルド(手持ち式)装置、マルチプロセッサシステム、マイクロプロセッサベースの又はプログラム可能なコンシューマ(消費者)電子機器、ネットワークPC、サーバ、ミニ(小型)コンピュータ、メインフレームコンピュータ等を含む多くの種類のコンピュータシステム構成を包含することを理解するであろう。従って、
図1に図示されたユーザコンピュータ102は、デスクトップコンピュータ、ラップトップコンピュータ、セットトップボックス、携帯(個人)情報端末(personal digital assistant:PDA)、携帯電話、メディアプレーヤ、ウェブパッド、タブレット等を含み得るが、それらには限定されない。本発明の実施の形態は、通信ネットワークを通じて(結線接続リンク、無線リンクのいずれかにより、又は、結線接続リンク若しくは無線リンクの組合せにより)連結(リンク)されている局所(ローカル)及び遠隔(リモート)の処理装置によりタスクが実行される分散型計算方式環境においても実施され得る。分散型計算方式環境においては、プログラムモジュールは、局所(ローカル)及び遠隔(リモート)のメモリ記憶装置に配置され得る。
【0098】
本発明の全体的なシステム又は部分を実施するための例示的なシステムは、演算処理装置、システムメモリ、及び、当該システムメモリを含む多様なシステム構成要素(コンポーネント)を当該演算処理装置に結合するシステムバスを含む、コンピュータの形態における汎用計算方式装置を含み得る。システムメモリは、読出専用メモリ(ROM)及びランダムアクセスメモリ(RAM)を含み得る。コンピュータは、磁気ハードディスクからの読出及び磁気ハードディスクへの書込を行うための磁気ハードディスク駆動装置、取り外し可能磁気ディスクからの読出及び取り外し可能磁気ディスクへの書込を行うための磁気ディスク駆動装置、CD−ROM又は他の光学記録媒体等の取り外し可能光学ディスクからの読出及び取り外し可能光学ディスクへの書込を行うための光学ディスク駆動装置を含み得る。駆動装置及びそれらの関連する機械読出可能な記録媒体は、機械実行可能な命令、データ構造、プログラムモジュール、及び、コンピュータのための他のデータの不揮発性記憶装置を提供する。
【0099】
ここで提供されているフローチャートは方法ステップの特定の順序を示しているが、それらのステップの順序は図示されているものとは異なり得ることが理解される点に留意すべきである。また二つ又はそれ以上のステップは、同時に又は部分的に同時に実行され得る。そのような変更は、選択されたソフトウェア及びハードウェアシステム並びに設計者の選択に依存することになる。総てのそのような変更は、本発明の範囲内にあることが理解される。同様に、本発明のソフトウェア及びウェブ手段は、種々のデータベース検索ステップ、相関ステップ、比較ステップ及び決定ステップを達成するための、規則に基づくロジック及び他のロジックによる標準プログラミング技術によって達成され得る。ここで及び特許請求の範囲で使用される単語「エンジン(engine)」は、ソフトウェアコードの一つ又は複数のラインを使用する手段、及び/又は、ハードウェア手段、及び/又は、手動入力を受信するための装置を包含することが意図されているということも留意されるべきである。エンジン、インタフェース、データベース、ブラウザ等の構成要素(コンポーネント)は、相互に通信し得る。そのような構成要素は、統合された態様で提供されるからであり、それらは、ネットワーク等の通信リンクを通じて相互に通信するからであり、及び/又は、その他の理由によるからである。
【0100】
本発明の実施の形態についての以上の記載は、例示及び説明の目的のために提示されているものである。総てを網羅すること又は本発明を開示された通りの正確な形態に限定することは意図されておらず、変形及び変更は、上記教示に鑑みて可能であり、本発明の実施から獲得され得る。実施の形態は、当該技術分野における通常の知識を有する者が本発明を企図された特定用途に適当な種々の態様で及び種々の変形と共に利用することができるように、本発明の原理及びその実施上の応用を説明するために選択されて記載されたものである。
【0101】
以下は、この出願の親出願の(特願2013−246423)の親出願(特願2009−525761)の出願当初の請求項である。
[請求項1]
複数のデータセンタに及び前記複数のデータセンタ内の複数のホストに複数のデータセットを記憶するための分担をマッピングするように構成されたマッピングロジックと、
前記複数のデータセンタの第1のサブセット内の前記複数のホストの第1のサブセットに、前記複数のデータセットのうちの一つであるデータセットの第1の複数のコピーを書き込むように構成されたデータセット複製ロジックと、
前記複数のデータセンタの第2のサブセット内の前記複数のホストの第2のサブセットで、前記データセットの第2の複数のコピーを読み出すように構成されたデータセット検索ロジックと、
前記データセットの前記第2の複数のコピー間の因果関係を評価するように構成されたデータセット比較ロジックと、
を備えていることを特徴とするコンピュータ実施データ記憶システム。
[請求項2]
前記マッピングロジックは、ハッシュ関数に基づいてハッシュ値を生成するように構成されたロジックを含むことを特徴とする請求項1に記載のシステム。
[請求項3]
前記ハッシュ関数は、前記ハッシュ関数に対する出力値の範囲を含むハッシュ範囲を有し、前記ハッシュ値は、前記ハッシュ範囲内にあることを特徴とする請求項2に記載のシステム。
[請求項4]
個々の前記データセンタが、前記ハッシュ範囲の複数の異なる部分にある前記複数のデータセットのサブセットを記憶する分担を有するように、前記複数のデータセンタのそれぞれは、前記ハッシュ範囲内にある複数の位置を有することを特徴とする請求項3に記載のシステム。
[請求項5]
個々の前記データセンタが、前記ハッシュ範囲の複数の異なる部分にある前記複数のデータセットのサブセットを記憶する分担を有するように、前記データセンタのそれぞれは、前記ハッシュ範囲内にある複数の位置を有することを特徴とする請求項4に記載のシステム。
[請求項6]
前記ハッシュ値は第1のハッシュ値であり、前記ハッシュ関数は第1のハッシュ関数であり、前記ハッシュ範囲は第1のハッシュ範囲であり、前記マッピングロジックは、第2のハッシュ関数に基づいて第2のハッシュ値を生成するように構成されたロジックを含むことを特徴とする請求項4に記載のシステム。
[請求項7]
個々の前記データセンタが、前記第2のハッシュ範囲の複数の異なる部分にある前記複数のデータセットのサブセットを記憶する分担を有するように、前記データセンタのそれぞれは、前記第2のハッシュ範囲内にある複数の位置を有することを特徴とする請求項6に記載のシステム。
[請求項8]
データ貸出の終了後に前記データセットの他のコピーを更新するように構成されている貸出ロジックをさらに備えていることを特徴とする請求項1に記載のシステム。
[請求項9]
それぞれが前記データセンタのそれぞれと関連し、前記データセンタ間のネットワーク通信量を変調するように構成されている複数のメッセージフィルタをさらに備えていることを特徴とする請求項1に記載のシステム。
[請求項10]
前記データセット検索ロジックは、前記データセットの前記第2の複数のコピーをプリフェッチするように構成されていることを特徴とする請求項1に記載のシステム。
[請求項11]
前記データセット比較ロジックは、前記データセットの前記第2の複数のコピーのそれぞれに関連して記憶されたバージョン履歴に基づいて前記因果関係を評価するように構成されていることを特徴とする請求項1に記載のシステム。
[請求項12]
前記バージョン履歴は、それぞれのハッシュ履歴を含むことを特徴とする請求項11に記載のシステム。
[請求項13]
前記バージョン履歴は、それぞれのベクトルクロックを含むことを特徴とする請求項11に記載のシステム。
[請求項14]
以前の変更の要約を含む、データセットについての因果関係情報をコード化するカウンタを、前記ベクトルクロックは、それぞれ含むことを特徴とする請求項13に記載のシステム。
[請求項15]
前記複数のデータセンタの前記第1のサブセットと前記複数のデータセンタの前記第2のサブセットとは同一であり、前記複数のホストの前記第1のサブセットと前記複数のホストの前記第2のサブセットとは同一であることを特徴とする請求項1に記載のシステム。
[請求項16]
複数のデータセンタに複数のデータセットを記憶するための分担をマッピングし、
データセットのコピーのそれぞれについてのバージョン履歴の書込を含めて、前記複数のデータセンタのサブセットに前記データセットの前記コピーを記憶し、
前記データセットの前記コピーについての前記バージョン履歴に基づいて前記データセットの前記コピー間の因果関係を評価する、
ことを含むことを特徴とするコンピュータ実施データ処理方法。
[請求項17]
前記バージョン履歴は、それぞれのハッシュ履歴をそれぞれ含むことを特徴とする請求項16に記載の方法。
[請求項18]
前記バージョン履歴は、それぞれのベクトルクロックをそれぞれ含むことを特徴とする請求項16に記載の方法。
[請求項19]
以前の変更の要約を含む、データセットについての因果関係情報をコード化するカウンタを、前記ベクトルクロックは、それぞれ含むことを特徴とする請求項18に記載の方法。
[請求項20]
前記書込は、優先リストに従って実行されることを特徴とする請求項16に記載の方法。
[請求項21]
前記優先リストは、ハッシュ関数に基づいて生成されることを特徴とする請求項20に記載の方法。
[請求項22]
ハッシュキー及び前記ハッシュ関数に基づいてハッシュ値を生成することをさらに含み、前記ハッシュキーは、前記データセットに関連するものであり、前記ハッシュ関数に入力として適用されることを特徴とする請求項21に記載の方法。
[請求項23]
前記ハッシュ関数は、前記ハッシュ関数に対する出力値の範囲を含むハッシュ範囲を有し、前記ハッシュ値は、前記ハッシュ範囲内にあることを特徴とする請求項22に記載の方法。
[請求項24]
前記ハッシュ関数は、前記複数のデータセットを前記複数のデータセンタに記憶するための分担をマッピングすることを特徴とする請求項23に記載の方法。
[請求項25]
前記複数のデータセンタの前記サブセットは、前記ハッシュ値に基づいて、及び、他のデータセンタが利用不可能であるか否かに基づいて、前記データセットを記憶するために選択されることを特徴とする請求項24に記載の方法。
[請求項26]
個々の前記データセンタが、前記ハッシュ範囲の複数の異なる部分にある前記複数のデータセットのサブセットを記憶する分担を有するように、前記データセンタのそれぞれは、前記ハッシュ範囲内にある複数の位置を有することを特徴とする請求項25に記載の方法。
[請求項27]
前記ハッシュ値は第1のハッシュ値であり、前記ハッシュ関数は第1のハッシュ関数であり、前記ハッシュ範囲は第1のハッシュ範囲であり、前記マッピングのロジックは、第2のハッシュ関数に基づいて第2のハッシュ値を生成するように構成されたロジックを含むことを特徴とする請求項26に記載の方法。
[請求項28]
個々の前記データセンタが、前記第2のハッシュ範囲の複数の異なる部分にある前記複数のデータセットのサブセットを記憶する分担を有するように、前記複数のデータセンタのそれぞれは複数のホストを含み、前記複数のホストのそれぞれは、前記第2のハッシュ範囲内にある複数の位置を有することを特徴とする請求項27に記載の方法。
[請求項29]
前記記憶は、優先リストに従って実行され、前記優先リストは、前記データセットのコピーが記憶されるべきデータセンタの順位を規定することを特徴とする請求項16に記載の方法。
[請求項30]
前記データセットのコピーのうちの一つを第1のデータセンタから第2のデータセンタへ、前記第2のデータセンタが利用可能になった後に移動することをさらに含み、前記第2のデータセンタは、前記優先リストにおいて前記第1のデータセンタよりも上位にあることを特徴とする請求項26に記載の方法。
[請求項31]
前記複数のデータセンタは、ネットワークを通じてユーザがアクセス可能なネットワークサービスシステムを実現することを特徴とする請求項16に記載の方法。
[請求項32]
前記ネットワークサービスシステムは、ユーザがアクセス可能なウェブサイトを提供することを特徴とする請求項31に記載の方法。
[請求項33]
前記ウェブサイトは、商業ウェブサイトであることを特徴とする請求項32に記載の方法。
[請求項34]
前記データセットは、ユーザのうちの一人のためのショッピングカートについてのショッピングカートデータを含むことを特徴とする請求項33に記載の方法。
[請求項35]
前記データセットの前記コピー間の因果関係の評価は、前記データセットの前記コピーがコンフリクトするコピーを含むか否かの判定を含むことを特徴とする請求項16に記載の方法。
[請求項36]
前記データセットの前記コンフリクトするコピーを、クライアントプロセスに調整のために提供することをさらに含むことを特徴とする請求項35に記載の方法。
[請求項37]
請求項16乃至36のいずれか一項に記載の方法を実行するためのコンピュータプログラム。