(57)【特許請求の範囲】
【請求項１】
分散コンピューティング環境においてデータを地理的に離れた地点間でコピーする(geo replicating)ための、プロセッサーとメモリーとを利用する前記分散コンピューティング環境におけるコンピューターによって実施される方法であって、
一次データストア(a primary data store)においてクライアントからデータを受信するステップ(1102)と、
前記一次データストアのログに前記データを書き込むステップ(1104)と、
前記ログに書き込まれた(written)前記データにコミットＩＤで注釈をつける(annotating)ステップ（1106）であって、前記レコードは、二次データストア(a secondary data store)における前記データの再生(replay)を円滑にする(facilitating)、ステップと、
前記一次データストアにおいて前記データがコミットされたこと(committal)の確認(acknowledgement)を前記クライアントに通信するステップ(1108)と、
前記レコードで注釈がつけられた前記データを前記二次データストアに通信するステップ(1110)と、
前記二次データストアから、データが、前記二次データストア(1112)に記憶された、という確認を受信するステップであって、メッセージのコミットIDが、コミットされる前記データに関連する特定の識別子を含むものと、
更新されたコミットＩＤを伴うメッセージを、前記一次データストアから、前記二次データストアに通信する（1116）ステップと、
前記メッセージのコミットＩＤが、前記二次データストアにおいて前記データのコミットを許可するかどうかを判定する（1210）ステップと、
前記メッセージのコミットＩＤが、前記データのコミットを許可した後に、前記二次データストアにおいて前記データをコミットする（1212）ステップと、
を含む方法。
【請求項２】
前記レコードで注釈がつけられた前記データを前記二次データストアに通信するステップは、前記二次データストアにおけるフロントエンド(front end)に通信され、それにより、前記フロントエンドは、前記データが前記二次データストアに向けられていることを検証する(validates)ようになる請求項１に記載の方法。
【請求項３】
プロセッサーと、メモリーとを有するコンピューティングシステムによって実行されると、前記コンピューティングシステムに、分散コンピューティング環境においてデータを地理的に離れた地点間でコピーするための手段を実装させるコンピューター実行可能命令が実装されている(embodied)１つまたは複数のコンピューター記憶媒体であって、
前記手段は、
二次データストアにおいて一次データストアからデータを受信する手段（1202）であって、前記データには、コミットＩＤで注釈がつけられる、手段と、
前記二次データストアにおけるログに前記データを格納する手段（1204）と、
前記一次データストアに、前記ログに前記データが格納されたことの確認を通信する手段（1206）であって、前記二次データストアからの当該確認が、前記データを識別する識別子を含むものと、
前記更新されたコミットＩＤを受信する（1208）ことに応じて、前記データが、前記二次データストアに通信されることが許可される（1210）ように、受信された確認に基づいて、前記一次データストアにおいて前記コミットＩＤを更新する（1114）手段であって、前記メッセージのコミットＩＤが、前記コミットされるデータに関連する特定の識別子を含むものと、
前記一次データストアからコミットＩＤを有するメッセージを受信する手段（1208）と、
を含む、
媒体。
【請求項４】
前記手段は、前記二次データストアから第２のデータを受信して、前記第２のデータが、第１のメッセージの第１のメッセージＩＤと順次になっていない(not sequential with)第２のメッセージＩＤで注釈がつけられる(annotated)ようにする手段をさらに含む
請求項３に記載の媒体。
【請求項５】
前記ログは、前記データ、前記コミットＩＤ、および前記第１のメッセージＩＤを保持するログである請求項４に記載の媒体。
【請求項６】
前記コミットＩＤおよび前記データで注釈がつけられた情報は、同様のエポック番号(epoch #)を含む請求項３に記載の媒体。
【請求項７】
第１のジオロケーションに地理的に配置された一次データストアであって、
（１）パーティション、
（２）データを格納するように構成された１つまたは複数のログ
を備える、一次データストアと、
第２のジオロケーションに地理的に(geographically)配置された(located)二次データストアであって、
（１）非順次の(non-sequential)着信する(incoming)データを当該二次データストアの適切な(appropriate)パーティション(partition)にルーティングするように構成されたフロントエンドアプリケーションであって、前記着信するデータは、前記一次データストアから前記二次データストアに通信されるデータであり、当該二次データストアの前記適切なパーティションが、前記着信するデータに関連付けられたオブジェクトを現在保持しているパーティションを含む、フロントエンドアプリケーション、
（２）前記着信するデータを保持するように構成された当該二次データストアのパーティション、および
（３）前記フロントエンドアプリケーションによってルーティングされる前記非順次の着信するデータを受信するように構成された第２のパーティションに関連付けられた(associated)ログであって、前記一次データストアから当該二次データストアに通信されるコミットＩＤに基づいて順番どおりに(ordered manner)前記非順次の着信するデータをコミットする、ログ
備える二次データストアと
を備える分散コンピューティング環境においてデータを地理的に離れた地点間でコピーするためのシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明の一実施例は、例えば、分散ストレージ環境における非同期レプリケーションに関する。
【背景技術】
【０００２】
[0001]分散ストレージ環境は、データストレージおよびデータ操作を実行するのに、ネットワークによって接続されることが可能な、地理的に離隔した構成要素に依拠する。分散ストレージ環境のユーザーが、ユーザーのアカウントの１つまたは複数に関するデータが特定の地理的ロケーションに保持されることを所望する可能性がある。例えば、一部の顧客は、政治的な理由で、自分のデータが、特定の国に置かれた施設に格納されないことを所望する可能性がある。同様に、顧客が、自然災害にまつわる潜在的な利用可能性の問題を小さくするように、互いに離隔した複数の地理的ロケーションに自分のデータが格納されることを所望する可能性もある。その結果、顧客が、様々な地理的ロケーションでデータが保持され、さらに／またはレプリケートされることを決める可能性がある。離隔したロケーションでデータを保持するとともに、そのデータの書込みに成功したという確認を提供するための方法が、後段で与えられる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本願発明の一実施例は、例えば、分散ストレージ環境における非同期レプリケーションに関する。
【課題を解決するための手段】
【０００４】
[0002]本発明の実施形態は、分散ストレージ環境においてデータを非同期でレプリケートするためのシステム、方法、およびコンピューター記憶媒体に関する。非同期レプリケーションを実現するのに、一次データストアにおいてアプリケーションによって受信されたデータが、一次データストアにおいてコミットされて、一次データストアからアプリケーションに成功が戻されることを可能にする。一次データストアは、特定のトランザクションの識別子などの情報でこのトランザクションに注釈をつけることが可能である。注釈をつけられたデータは、次に、一次データストアとは独立である二次データストアに通信することが可能である。次に、二次データストアが、そのデータおよび注釈をつけられた情報を、二次データストアにおける最終的な再生およびコミットのために１つまたは複数のログに書き込むことが可能である。次に、二次データストアは、二次データストアのログへのそのデータの書込みの確認を一次データストアに通信することが可能である。一次データストアは、二次データストアがログにデータを少なくとも書き込んだことの確認を受信した後、一次データストアにおいてデータをコミットすることに成功したことの確認をクライアントに通信することが可能である。さらなる実施形態は、識別子を介してデータのコミットを許可する命令を受信したことに応答して、二次データストアにおいてデータを再生すること、およびコミットすることを含むことが可能である。
【０００５】
[0003]この「発明の概要」は、「発明を実施するための形態」において後段でさらに説明される概念選定を、簡略化した形態で紹介するように与えられる。この「発明の概要」は、主張される主題の重要な特徴、または不可欠な特徴を特定することを意図しておらず、主張される主題の範囲を決定する助けとして使用されることも意図していない。
【０００６】
[0004]本発明の例示的な実施形態を、参照により本明細書に組み込まれている添付の図面を参照して、後段で詳細に説明する。
【図面の簡単な説明】
【０００７】
【図１】[0005]本発明の実施形態を実施するのに適した例示的なコンピューティングデバイスを示す図である。
【図２】[0006]本発明の実施形態による分散コンピューティング環境内の例示的な地理的区域を示すブロック図である。
【図３】[0007]本発明の実施形態による例示的なストレージスタンプを示すブロック図である。
【図４】[0008]本発明の実施形態によるデータのジオレプリケーションのための例示的なシステムを示すブロック図である。
【図５】[0009]本発明の実施形態によるコミット識別情報（コミットＩＤ）を示すブロック図である。
【図６】[0010]本発明の態様によるコミットＩＤに関する特定のメッセージをどのように扱うべきかを決定するための方法を示す図である。
【図７】[0011]本発明の実施形態による、一次データストアから二次データストアにデータを送るための例示的なシステムを示すブロック図である。
【図８】[0012]本発明の態様による例示的な非同期ジオレプリケーションに関する時間的フローを示すブロック図である。
【図９】[0013]本発明の態様による、結果整合性を有する例示的な同期レプリケーション方法に関する時間的フローを示すブロック図である。
【図１０】[0014]本発明の態様による、強い整合性を有する例示的な同期レプリケーション方法に関する時間的フローを示すブロック図である。
【図１１】[0015]本発明の実施形態による、一次データストアから見た非同期レプリケーション方法を示す図である。
【図１２】[0016]本発明の実施形態による、二次データストアから見た非同期レプリケーション方法を示す図である。
【発明を実施するための形態】
【０００８】
[0017]本発明の実施形態の主題を、法定要件を満たすように詳細に本明細書で説明する。しかし、この説明自体は、本特許の範囲を限定することを意図していない。そうではなく、本発明者らは、主張される主題が、現在または将来の他の技術と連携して、本出願において説明されるステップとは異なるステップ、またはそのようなステップと類似したステップの組合せを含むように、他の方法で実現されることも可能であることを企図している。
【０００９】
[0018]本発明の実施形態は、分散コンピューティング環境においてデータを非同期でレプリケートするためのシステム、方法、およびコンピューター記憶媒体に関する。非同期レプリケーションを実現するのに、一次データストアにおいて受信されたデータに、識別子などの情報で注釈をつけることが可能である。一次データストアは、一次データストアにおいてデータをコミットすることに成功したことの確認をクライアントに通信して戻すことが可能である。次に、注釈をつけられたデータが、一次データストアとは地理的に異なる二次データストアに通信することが可能である。次に、二次データストアが、そのデータおよび注釈をつけられた情報を、二次データストアにおける最終的な再生およびコミットのために１つまたは複数のログに書き込むことが可能である。次に、二次データストアが、ログへのデータの書込みの確認を一次データストアに通信して戻すことが可能である。さらなる実施形態は、識別子を介してデータのコミットを許可する命令を受信したことに応答して、二次データストアにおいてデータをコミットすることを含むことが可能である。
【００１０】
[0019]したがって、一態様において、本発明は、分散コンピューティング環境においてデータをジオレプリケートするための、プロセッサーと、メモリーとを利用する分散コンピューティング環境におけるコンピューターによって実施される方法を提供する。この方法は、一次データストアにおいてクライアントからデータを受信するステップから成る。さらに、この方法は、ログに書き込まれたデータにレコードで注釈をつけるステップを含むことが可能である。このレコードは、この例において、二次データストアにおけるデータの再生を可能にする。この方法は、一次データストアのログにデータを書き込むステップをさらに記載する。この方法は、一次データストアにおいてデータがコミットされたことの確認をクライアントに通信するステップからさらに成る。さらに、この方法は、レコードで注釈がつけられたデータを二次データストアに通信するステップを含む。
【００１１】
[0020]別の態様において、本発明は、プロセッサーと、メモリーとを有するコンピューティングシステムによって実行されると、コンピューティングシステムに、分散コンピューティング環境においてデータをジオレプリケートするための方法を実行させるコンピューター実行可能命令が実体化されたコンピューター記憶媒体を提供する。この方法は、二次データストアにおいてデータを受信するステップを含む。このデータは、一次データストアから受信される。また、この方法は、二次データストアにおいてログにデータを格納するステップも含む。さらに、この方法は、このログにデータが格納されたことの確認を一次データストアに通信するステップを含む。さらに、この方法は、コミットＩＤを有するメッセージを一次データストアから受信するステップを含む。この方法は、そのコミットＩＤが二次データストアにおけるデータのコミットを許可すると決定するステップを続けて記載する。また、この方法は、二次データストアにおいてそのデータをコミットするステップも含む。
【００１２】
[0021]本発明の第３の態様は、分散コンピューティング環境においてデータをジオレプリケートするためのシステムを提供する。このシステムは、第１の地理的区域内に地理的に置かれた一次データストアを備える。一次データストアは、第１のパーティションと、データを格納するように構成された１つまたは複数のログとを備える。このシステムは、第２の地理的区域内に地理的に置かれた二次データストアからさらに成る。二次データストアは、非順次の着信するデータを二次データストアの適切なパーティションにルーティングするように構成されたフロントエンドアプリケーションを備える。着信するデータは、一次データストアから二次データストアに通信される。二次データストアは、着信するデータを保持するように構成された二次データストアのパーティションからさらに成る。さらに、二次データストアは、フロントエンドアプリケーションによってルーティングされた非順次の着信するデータを受信するように構成されたパーティションに関連付けられたログを備える。このデータは、このデータが受信される順序でログに書き込まれることが可能であるが、このデータは、一次データストアから二次データストアに通信されたコミットＩＤに基づいて、このデータが二次データストアにおいて順次にコミットされるように再生されることが可能である。
【００１３】
[0022]本発明の実施形態の概略を簡単に説明したので、本発明の実施形態を実施するのに適した例示的な動作環境を以下に説明する。
[0023]図面を全般に参照し、特に図１を最初に参照すると、本発明の実施形態を実施するのに適した例示的な動作環境が示され、さらにコンピューティングデバイス１００として全体的に示されている。コンピューティングデバイス１００は、適切なコンピューティング環境の一例に過ぎず、本発明の用法または機能の範囲について全く限定を示唆することは意図していない。また、コンピューティングデバイス１００が、例示されるモジュール／構成要素のうちのいずれのモジュール／構成要素と関係してであれ、またはそのようなモジュール／構成要素のいずれの組合せと関係してであれ、依存関係も要件も有すると解釈してはならない。
【００１４】
[0024]実施形態は、コンピューター、または携帯情報端末もしくは他のハンドヘルドデバイスなどの他のマシンによって実行される、プログラムモジュールなどのコンピューター実行可能命令を含む、コンピューターコードまたはマシン使用可能命令の一般的な脈絡で説明されることが可能である。一般に、ルーチン、プログラム、オブジェクト、モジュール、データ構造などを含め、プログラムモジュールとは、特定のタスクを実行する、または特定の抽象データ型を実装するコードを指す。実施形態は、ハンドヘルドデバイス、家庭用電子機器、汎用コンピューター、専用コンピューティングデバイス、サーバー、ルーティングデバイス、分散コンピューティングデバイスなどを含め、様々なシステム構成で実施されることが可能である。また、実施形態は、通信ネットワークを介して結び付けられた複数の遠隔処理デバイスによってタスクが実行される分散コンピューティング環境において実施されることも可能である。
【００１５】
[0025]引き続き図１を参照すると、コンピューティングデバイス１００は、以下のデバイス、すなわち、メモリー１１２、１つまたは複数のプロセッサー１１４、１つまたは複数のプレゼンテーションモジュール１１６、入出力（Ｉ／Ｏ）ポート１１８、Ｉ／Ｏモジュール１２０、および例示的な電源装置１２２を直接、または間接的に結合するバス１１０を含む。バス１１０は、１つまたは複数のバス（アドレスバス、データバス、またはアドレスバスとデータバスの組合せなどの）であり得るものを代表する。図１の様々なブロックは、簡明のため、線で示されるものの、現実には、様々なモジュールを区分けすることは、それほど明瞭ではない。例えば、ディスプレイデバイスなどのプレゼンテーションモジュールをＩ／Ｏモジュールと見なすことが可能である。また、プロセッサーが、メモリーを有する。本発明者らは、当技術分野の性質がそのようなものであることを認識するとともに、図１の図示は、１つまたは複数の実施形態に関連して使用され得る例示的なコンピューティングデバイスを示すに過ぎないことを再び述べておく。図１の範囲内ですべて企図されるとともに、「コンピューター」または「コンピューティングデバイス」と呼ばれる、「ワークステーション」、「サーバー」、「ラップトップ」、「ハンドヘルドデバイス」、「サーバー」、「データストア」などのカテゴリの間の区別は行わない。
【００１６】
[0026]コンピューティングデバイス１００は、通常、様々なコンピューター可読媒体を含む。例として、限定としてではなく、コンピューター可読媒体は、以下の一時的でないコンピューター記憶媒体、すなわち、ランダムアクセスメモリー（ＲＡＭ）、読取り専用メモリー（ＲＯＭ）、電子的に消去可能なプログラマブル読取り専用メモリー（ＥＥＰＲＯＭ）、フラッシュメモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）または他の光媒体もしくはホログラフィック媒体、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、あるいは所望される情報を符号化するのに使用され得るとともに、コンピューティングデバイス１００によってアクセスされ得る他の任意の媒体を備えることが可能である。或る例示的な実施形態において、コンピューター可読媒体は、非一時的媒体である。
【００１７】
[0027]メモリー１１２は、揮発性メモリーおよび／または不揮発性メモリーの形態でコンピューター記憶媒体を含む。このメモリーは、リムーバブルであっても、非リムーバブルであっても、リムーバブルと非リムーバブルの組合せであってもよい。例示的なハードウェアデバイスは、ソリッドステートメモリー、ハードドライブ、光ディスクドライブなどを含む。コンピューティングデバイス１００は、メモリー１１２またはＩ／Ｏモジュール１２０などの様々なエンティティからデータを読み取る１つまたは複数のプロセッサーを含む。（複数の）プレゼンテーションモジュール１１６は、ユーザーまたは他のデバイスにデータ指示を提示する。例示的なプレゼンテーションモジュールには、ディスプレイデバイス、スピーカ、印刷モジュール、振動モジュールなどが含まれる。Ｉ／Ｏポート１１８は、コンピューティングデバイス１００が、いくつかは組み込まれていることが可能な、Ｉ／Ｏモジュール１２０を含む他のデバイスに論理的に結合されることを可能にする。例示的なモジュールには、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、プリンタ、ワイヤレスデバイスなどが含まれる。コンピューティングデバイス１００は、様々な形態で表れることが可能であるものと理解される。例えば、コンピューティングデバイス１００のいくつかの部分が、第１の地理的ロケーションに物理的に配置されることが可能である一方で、他の部分が、異なる地理的ロケーションに物理的に配置されることが可能である。したがって、コンピューティングデバイス１００に従来、該当する所望される結果を依然として実現しながら、様々なデバイス、サービス、アプリケーション、および層が、様々なロケーションにわたって配置されてもよいことが企図される。
【００１８】
[0028]図２を参照すると、本発明の実施形態による例示的な地理的区域（「ジオ区域」）２００を示すブロック図が与えられている。一般に、ジオ区域は、政治的境界および／または統治の境界によって一緒にグループ化された地理的ロケーションを集めたものである。例えば、或るジオ区域が、米国を含むことが可能であり、第２のジオ区域が、欧州を含むことが可能であり、さらに第３のジオ区域が、アジア太平洋地域を含むことが可能である。
【００１９】
[0029]後段でさらに詳細に説明されるとおり、或るクライアントが、或る特定のジオ区域内で、ただし、そのジオ区域内の異なる地理的ロケーションでデータをレプリケートすることを所望する可能性がある。例えば、或るクライアントが、アメリカ合衆国内のクライアントのデータのすべてをアメリカ合衆国を治める法律の支配下に保つこと（異なるジオ区域内でそのデータをレプリケートするのではなく）を所望する可能性がある。しかし、事業継続計画（災害復旧計画）のために、そのクライアントが、米国内の異なる地理的ロケーション（「ジオロケーション」）（後段で説明される）においてそのデータがレプリケートされることを必要とする可能性がある。その結果、そのデータに、第１の地理的ロケーション内に存在することが可能なジオロケーションＡ２０２経由でアクセスが行われることが可能である。次に、そのデータが、ジオロケーションＡ２０６とは地理的に異なる第２のジオロケーションＢ２０４においてレプリケートされることも可能である。
【００２０】
[0030]ジオロケーションは、１つまたは複数のストレージスタンプ（後段で説明される）を保持する地理的ロケーションである。ジオロケーションの例には、第１のジオロケーションとしてのストレージスタンプの米国ベースのグループ化であるワシントン州シアトル市、および第２のジオロケーションとしてのストレージスタンプの米国ベースのグループ化であるアイオワ州デモイン市が含まれる。シアトル市とデモイン市の間の大きな物理的距離のため、シアトル市で自然災害または他の事業に支障を来たす活動が生じた場合、デモイン市は、その活動の影響から遮断されていることが可能である。
【００２１】
[0031]ストレージスタンプ（本明細書で「データストア」とも呼ばれる）は、１つまたは複数のプロセッサーに結合されることが可能な物理的ドライブまたは他のコンピューター可読メモリーを集めたものである。例えば、ストレージスタンプは、２ペタバイトから２０ペタバイトまでのストレージを保持する１０〜２０のラックのストレージのクラスタを備えることが可能である。ストレージスタンプは、より大きいストレージ容量、またはより小さいストレージ容量を有することも企図される。共通のジオロケーションに関連する複数のストレージスタンプは、地理的に近接していることが可能である（例えば、共通のデータセンタ内）。互いに比較的近接していることの結果として、共通のジオロケーションのストレージスタンプ間には、一般に、高いレベルの接続が存在する。しかし、共通のジオロケーションにおけるストレージスタンプは、一般に、互いに近接しているため、１つのストレージスタンプの接続が失われることをもたらす事象（例えば、自然災害）が、その同一のジオロケーション内の別のストレージスタンプに影響を及ぼす可能性が高い。
【００２２】
[0032]したがって、本発明の或る態様は、互いに地理的に離隔していることが可能な２つ以上のストレージスタンプの間でデータのレプリケーションを可能にすることである。したがって、第２のジオロケーションと第１のジオロケーションが十分な距離（例えば、１００マイル、１，０００マイル、１０，０００マイル、１２，５００マイルなど）で地理的に離隔しているように、第１のジオロケーションにおける第１のストレージスタンプの中で保持されるデータが、第２のジオロケーションにおける第２のストレージスタンプにレプリケートされることが企図される。第２のストレージスタンプが第１のストレージスタンプと同一のジオ区域内に存在することが企図される。また、逆に、第２のストレージスタンプが、第１のストレージスタンプとは異なるジオロケーションにあることも企図される。
【００２３】
[0033]図２に戻ると、ジオロケーションＡ２０２とジオロケーションＢ２０４が共通のジオ区域２００内に位置している（この限定的でない例において）。ジオロケーションＡ２０２は、ストレージスタンプ２０６と、ストレージスタンプ２０８とを備える。同様に、第２のジオロケーションＢ２０４は、ストレージスタンプＣ２１０と、ストレージスタンプＤ２１２とを備える。前述したとおり、ジオロケーションは、任意のサイズの任意の数のストレージスタンプを有してもよいことが企図される。
【００２４】
[0034]本発明の実施形態は、所与のアカウントに関して、またはアカウントのいくつかの部分に関してデータが格納される一次ジオロケーションおよび二次ジオロケーションを有することを企図する。アカウントに関連する顧客が、例示的な実施形態において、一次ジオロケーション（例えば、ジオロケーションＡ２０２）を選択することが可能である。さらに、顧客によって規定される、または信頼性、冗長性、および／または利用可能性の度合いに基づくいくつかの基準に基づいて、二次ジオロケーション（例えば、ジオロケーションＢ２０４）が顧客のために選択されることが企図される。しかし、一次ジオロケーションおよび／または二次ジオロケーションが、顧客によって選択される、または顧客のために選択されることも企図される。
【００２５】
[0035]図３を参照すると、本発明の実施形態による、例示的なストレージスタンプ３００のブロック図が示されている。ストレージスタンプ３００は、或る例示的な実施形態において、前述したとおり、図２のジオロケーションＡ２０２内に位置していることが可能である。ストレージスタンプは、いくつかのパーティションを備えることが可能である。パーティションは、所与のストレージスタンプに関するストレージ容量のサブセットである。したがって、ストレージスタンプに格納されたデータは、少なくとも部分的に、そのデータを格納するパーティションのパーティション識別子に基づいて識別されることが可能である。或る例示的な実施形態において、ストレージスタンプを利用する１つまたは複数のアカウントを管理するのに複数のパーティションが利用されることが可能である。しかし、アカウントが２つ以上のパーティションを利用してもよいことが企図される（後段で説明されるとおり）。
【００２６】
[0036]ストレージスタンプ３００は、パーティションＡ３０２と、パーティションＢ３０４と、パーティションＣ３０６とを有するものとして示される。パーティションＡ３０２は、この例において、アカウントＡ３０６およびアカウントＢ３０８に関連するデータを保持する。パーティションＢ３０４は、アカウントＣ３１０に関連するデータを保持する。パーティションＣ３０５もまた、アカウントＡ３０６を含む。例示的な実施形態において、アカウントＡ３０６は、パーティションＡ３０２およびパーティションＣ３０５などの複数のパーティションにまたがって広がる。前述の例において任意の数のアカウント、および任意の数のパーティションが設けられることが可能であること、および例示は、説明のために与えられていることを理解されたい。
【００２７】
[0037]データのジオレプリケーションは、分散コンピューティング環境内のいくつかの異なるレベルで行われるものとして企図される。例えば、所与のストレージスタンプ上に格納されたデータが、別のストレージスタンプにジオレプリケートされることが企図される。同様に、特定のアカウントに関連するデータがジオレプリケートされることが企図される。さらに、特定のパーティションに保持されるデータがジオレプリケートされることが企図される。したがって、ジオレプリケーションは、システム内の任意の粒度レベルで実行されることが可能であるものとして企図される。
【００２８】
[0038]或る例示的な実施形態において、ジオレプリケーションは、アカウントに一次ジオロケーション、および１つまたは複数の二次ジオロケーションが割り当てられるように、アカウントレベルで行われることが企図される。アカウントレベルにおけるジオレプリケーションは、１つのジオロケーションから別のジオロケーションに移行することを所望する特定のストレージアカウントに関するジオフェイルオーバーを可能にするのに重要であり得る。さらに、アカウントレベルのジオレプリケーションは、顧客が、リソース（例えば、スペース、金銭）を節約するように特定のアカウントに関してジオレプリケーションをオンにすること、またはオフにすることを許すことが可能である。さらに、レプリケーション（例えば、ジオレプリケーション）は、アカウントに関連するデータの一部分に関してオンにされる、またはオフにされることが可能であることも企図される。
【００２９】
[0039]図４を参照すると、本発明の実施形態による、データのジオレプリケーションのための例示的なシステム４００のブロック図が示されている。システム４００は、一次データストア４０２と、二次データストア４０４とを備える。一次ストレージスタンプは、パーティションサーバーＡ４０８およびパーティションサーバーＢ４１０などの複数のパーティションを備える。パーティションサーバーＡ４０８は、この例において、メモリーテーブル４１２と、ログ４１４とを備える。
【００３０】
[0040]或る例示的な実施形態において、パーティションサーバーは、複数のメモリーテーブルおよび／または複数のログを備えることが可能である。例えば、或るパーティションが、更新ログ、ブロックログ、ページログ、および／またはジオメッセージログを備えることが可能である。或る例示的な実施形態において、ログは、そのログが追加専用のディスクリートのデータストリームであるように分散コンピューティング環境のストリーム層内に配置される。
【００３１】
[0041]ストレージスタンプの一部分（例えば、ストレージノード）の障害の後、ログストリームに依拠して、ストレージスタンプのデータの再確立が行われることが可能である。例えば、データが、或る特定のパーティションにおいてストレージスタンプにコミットされることが可能であるが、そのパーティションの障害の後に、そのパーティションの状態が、少なくとも部分的に、そのパーティションに関連する１つまたは複数のログを再生することによって再現される。データは、特定のストレージスタンプに、そのストレージスタンプの１つまたは複数のログに再生される（例えば、書き込まれる）までは、「コミット」されないことが可能である。或る例示的な実施形態において、データスタンプに単に格納されるだけ、または書き込まれるだけのデータと、データスタンプにコミットされるデータの間の区別が存在する。例えば、或るデータが、或るストレージスタンプに書き込まれることが可能であるが、そのデータには、そのデータがそのストレージスタンプにコミットされるまで、クライアントがアクセスすることができない。或る例示的な実施形態において、ログからのデータのコミットは、ログからのデータを順に読み出すこと（または再生すること）によって行われることが可能であり、このことは、厳密に順次にではなく、単に順に行われることが可能である。
【００３２】
[0042]後段でより詳細に説明されるとおり、データが非順次に受信されることが可能である。しかし、そのデータを順次にコミットすることが所望され得る。或る例示的な実施形態において、非順次に受信されたデータを、そのデータの一部分がストレージスタンプに順次にコミットされることが可能になるまで、ログの中に保持することが所望され得る。
【００３３】
[0043]図４に戻ると、システム４００は、ネットワーク４０６を備える。システム４００の様々な構成要素は、限定なしに、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）および／またはワイドエリアネットワーク（ＷＡＮ）を含むことが可能なネットワーク４０６を介して互いに通信することが可能である。そのようなネットワーキング環境は、オフィス、企業全体のコンピューターネットワーク、イントラネット、およびインターネットにおいて一般的である。例えば、分散コンピューティング環境において、ネットワークを介して異種の構成要素の通信を可能にすることが一般的である。このため、ネットワーク４０６を本明細書でより詳細に説明することはしない。
【００３４】
[0044]二次データストア４０４は、ＸＦＥ４２４（フロントエンドとも呼ばれる）と、パーティションサーバーＣ４２０と、パーティションサーバーＤ４２２とを備える。パーティションサーバーＣ４２０は、この例において、ＧＭＬ４２８（ジオメッセージログとも呼ばれる）と、メモリーテーブル４３２と、ログ４３４とを備える。パーティションサーバーＡ４０８に関連して前述したとおり、１つまたは複数のメモリーテーブルおよび／または１つまたは複数のログが所与のパーティション内で利用されることが可能であることが企図される。
【００３５】
[0045]ＸＦＥ４２４は、所与のスタンプに関するフロントエンドサービスである。ＸＦＥが扱うように構成されている機能としてとりわけ、ＸＦＥは、ジオレプリケーションの目的で１つのストレージスタンプから別のストレージスタンプに送られるメッセージである、着信するジオメッセージを処理して、ＸＦＥによって受信されたデータが、関連するストレージスタンプにコミットされることが意図されていることを確実にする。また、ＸＦＥは、ジオメッセージの中に存在するトランザクションを検査して、データがコミットされるべきストレージスタンプ内の特定のパーティションを識別することも可能である。また、ＸＦＥは、ジオメッセージを適切なパーティションおよび／または適切なログに転送すること、データが格納されたこと／コミットされたことの確認を受信すること、および／またはデータのステータスについての確認をデータの１つまたは複数の送信元に供給することを担うことも可能である。
【００３６】
[0046]ＧＭＬ４２８は、ジオメッセージログである。例示的な実施形態において、ジオメッセージは、二次データスタンプにおいて受信されると、ほとんど即時にＧＭＬに書き込まれる。ジオメッセージのこのほぼ即時の書込みにより、二次データストアが、二次データストアにデータが恒久的に書き込まれた（しかしまだコミットはされていない可能性がある）ことの確認を、供給側の一次データストアに戻すことが可能になり得る。この例において、一次側は、成功が戻されるのに、二次データストア上でジオトランザクションのいくつか（例えば、ジオメッセージのいくつかの部分）が再実行されるのを待つ必要がない。したがって、ジオメッセージは、ＧＭＬに書き込まれ、その後、後の時点で再生される。
【００３７】
[0047]ＧＭＬを利用するこのプロセスにより、一次データストアが、二次データストア上でジオメッセージが再生されることに遅延があった場合に、ジオメッセージを送信することをブロックされないため、一次データストアが二次データストアから切り離されることが可能である。或る例示的な実施形態において、このことは、一次側がブロックされた場合、一次側は、渋滞しはじめる可能性があるため、重要であり得る。しかし、二次データストアが一次データストアについていっている場合、ジオメッセージは、ＧＭＬを使用する必要なしに、または、少なくともＧＭＬから読み出す必要なしに、メモリーから直接に再生されることが可能である。
【００３８】
[0048]或る例示的な実施形態において、ＧＭＬは、完全にバイパスされ得ることが企図される。代わりに、着信するジオメッセージは、パーティションにデータをコミットすることを直接にサポートするパーティションの１つまたは複数のログ（またはチェックポイントプロセス）に直接に書き込まれることが可能である。
【００３９】
[0049]ジオレプリケートされるべきデータの例示的なフローが、図４に示される。例えば、データ４１６が、一次データストア４０２において受信される。この例において、データ４１６は、クライアント（アプリケーション、サービス、プログラムなど）からであることが可能である。データ４１６が、この例において、非同期方法を要求するアカウントに関連するか、結果整合性を有する同期方法を要求するアカウントに関連するか、強い整合性を有する同期方法を要求するアカウントに関連するかに依存して、フローは、変化することが可能である。しかし、概略的な説明のために、非同期方法が、図４に示される。データのフローは、他のタイプまたは他の構成のジオレプリケーションの場合、変化する可能性があるものと理解されたい。
【００４０】
[0050]アカウント制御ユニット（「ＡＣＵ」）が、ジオレプリケートされることが意図されるのがいずれのアカウントであり、さらにアカウント内のいずれの情報であるか、およびそれらのアカウントおよび情報がどのようにジオレプリケートされるべきかを識別するように構成されることが可能である。例えば、ＡＣＵが、一次データストア４０２におけるデータ４１６を検査して、データ４１６が、非同期ジオレプリケーション（例えば）を所望するアカウントに関連することを特定することが可能である。各データスタンプが、そのスタンプにおいてアカウントを制御するＡＣＵを有することが可能である。例えば、一次側４０２が、ＡＣＵ  Ｐ４０９を有する一方で、二次側が、ＡＣＵ  Ｓ４２１を有する。
【００４１】
[0051]或る例示的な実施形態において、ＡＣＵは、各スタンプにおいて実行されるサービスである。ＡＣＵは、レプリケーションプロセスを実行するように各ストレージスタンプにおいて一連の動作を実行することを担うことが可能である。例えば、ＡＣＵは、関連するストレージスタンプにおいてアカウントに関してレプリケーションをオンにすること、およびオフにすることを担うことが可能である。後段で説明されるとおり、ロケーションサービス４０３が、ＡＣＵと通信して、様々なレプリケーションプロセスに関する高レベルの指示を発行することが可能である。例えば、ＡＣＵは、テーブルマスターと通信して、パーティションを分割すること、パーティションをマージすること、およびパーティションをレプリケートすることなどの様々な動作を実行することが可能である。また、ＡＣＵは、移行開始コマンド、ブートストラップコマンド、または他のレプリケーション指向のコマンドなどの他のコマンドをロケーションサービスから受信することも可能である。また、ＡＣＵは、アカウントに対して実行されている各コマンドの進行を追跡することも可能である。その後、ロケーションサービスが、ロケーションサービスのコマンドに関して様々なスタンプがどのように進行しているかについての更新をＡＣＵから取得する、または受信することが可能である。
【００４２】
[0052]ロケーションサービス４０３は、前述したとおり、レプリケーションの高レベル機能を制御することを担うことが可能である。例えば、ロケーションサービスは、レプリケーション割り当ておよび移行割り当て（例えば、所与のアカウントに関して、いずれのスタンプが一次側であり、いずれのスタンプが二次側であるか）を保つことが可能である。また、ロケーションサービスは、アカウントレプリケーションの制御における最高の権限の役割をすることも可能である。コンピューティングデバイス、またはコンピューティング環境において実行されているプロセスのセットであることが可能なロケーションサービスは、スタンプの間でレプリケートされている／移行させられているストレージアカウントに関するレプリケーション状態および移行状態を追加することを担うことが可能である。
【００４３】
[0053]或る例示的な実施形態において、ロケーションサービス４０３が、所与のアカウントに関して一次側および／または二次側であるすべてのストレージスタンプに関して、すべてのストレージアカウント作成トランザクション、ストレージアカウント削除トランザクション、およびストレージアカウント更新トランザクションを実行する。この例において、ロケーションサービス４０３は、アカウント作成／削除、アカウント許可変更、およびアカウントのドメイン名を変更するためのアカウントキーを更新することを含むことが可能なストレージアカウント情報を、ストレージアカウントに関する様々なスタンプにわたって整合性があるように保つことができる。さらに、ロケーションサービスは、スタンプにおけるフロントエンド（例えば、ＸＦＥ４２４）および／またはＡＣＵ（例えば、ＡＣＵ  Ｓ４２１）と通信して、（複数の）スタンプにおけるレプリケーションプロセスに関する動作を制御すること、および監視することが可能である。したがって、ロケーションサービス４０３が、レプリケーションの全体的なプロセスを管理することを担うことが可能である一方で、各スタンプにおけるＡＣＵが、ロケーションサービスと通信すること、および特定のスタンプにおける所望される動作の実行を監視することを担うことが可能である。
【００４４】
[0054]後段で説明されるとおり、データ４１６には、二次データスタンプにおけるデータの再生を円滑にするように１つまたは複数のレコードで注釈がつけられることが可能である（ジオメッセージ注釈つきレコードの後段の説明を参照）。注釈をつけられたデータは、この例では、ネットワーク４０６を介して一次データストア４０２から二次データストア４０４に通信されるデータ４１８である。二次データストア４０４のＸＦＥ４２４が、ジオメッセージの形態であることが可能なデータ４１８を受信する。次に、ＸＦＥ４２４が、パーティションサーバーＣ４２０のＧＭＬ４２８に書き込まれるべきトランザクション（例えば、データ４１８内の部分）を識別することが可能である。例えば、データ４１８に関連するアカウントが、パーティションサーバーＣ４２０にコミットされることが可能である。
【００４５】
[0055]ＸＦＥ４２４からＧＭＬ４２８に通信されるデータの部分は、データ４２６である。次に、データ４２６は、パーティションサーバーＣ４２０に後にコミットするためにＧＭＬ４２８に書き込まれる（例えば、永続化される）ことが可能である。この例示的な非同期地理的レプリケーションモデルにおいて、パーティションサーバーＣ４２０にコミットされるようにＧＭＬから再生されるデータは、データ４３０である。データ４３０は、データ４２６の一部分であることが可能であり、またはメモリーテーブル４３２および／またはログ４３４の中のデータ４３０のエントリを介してパーティションサーバーＣ４２０にコミットするために順に（例えば、順次に）再生される、それまでに受信されている複数のデータの組合せであることが可能である。さらに、複数のトランザクション（例えば、データ）が、順序が乱れて再生される複数のトランザクションが互いに依存しない場合に、順序が乱れて再生されてもよいことが企図される。この順序が乱れた再生は、再生がより速いレートで行われることを可能にする。しかし、或る例示的な実施形態において、バッチトランザクションにより、バッチ全体が再生されること、またはバッチ全体が再生されないことが要求されることも企図される。
【００４６】
[0056]ＧＭＬ４２８に戻る。データ４２６がＧＭＬ４２８に書き込まれたことを示す確認４３６が、ＧＭＬ４２８から（またはＧＭＬ４２８に代行して、サービスユニットまたは制御ユニットによって）ＸＦＥ４２４に通信されることが可能である。その結果、ＸＦＥ４２４（またはＸＦＥ４２４に代行するサービスユニットまたは制御ユニット）が、データ４１６（またはデータ４１８またはデータ４３０）の永続化の確認４３８を二次データストア４０４に通信する。後段で説明されるとおり、確認４３８を受信したことの結果、コミットＩＤが、更新され、生成され、さらに／または一次データスタンプから通信されることが可能である。
【００４７】
[0057]或る例示的な実施形態において、一次データストア４０２から二次データストア４０４に通信されるデータは、バッチ処理されるジオメッセージの形態になっている。バッチ処理されるジオメッセージは、様々なパーティションを宛先とすることが可能ないくつかのトランザクションを含む。この例では、ＸＦＥ４２４が、バッチ処理されるジオメッセージ内の様々なトランザクションを識別し、さらに適切なトランザクションを適切なパーティションに転送することが可能である。引き続きこの例に関して、ＸＦＥ４２４が、ＸＦＥ４２４がジオメッセージからのトランザクションを送ったパーティションのすべてから成功を受信すると、ＸＦＥ４２４は、一次データストア４０２（またはジオメッセージの送信元である特定の一次側）に確認４３８を送信することが可能である。この例におけるこの時点で、二次データストア４０４におけるデータは、ＧＭＬ４２８から他の１つまたは複数のログ（例えば、更新ログ、ブロブログ）に再生されていないことが可能であり、この再生は、後に非同期で行われることが可能である。一次データストア４０２（または一次データストア４０２の送信元パーティション）が、エポック番号および／またはシーケンス番号（後段で説明される）のセットに関して受信されている確認を保持することが可能である。受信された確認に基づいて、一次データストア４０２は、コミットＩＤが、将来のジオメッセージに含められるように進められることが可能であるかどうかを決定する。
【００４８】
[0058]前述の例は、後段でより詳細に説明される概念を概説するように与えられる。
[0059]図４に示される構成、および本明細書で説明される他の構成は、単に例として提示されていることを理解されたい。示される構成および要素に加えて、またはそのような構成および要素の代わりに、他の構成および要素（例えば、マシン、インターフェース、機能、順序、および機能のグループ化など）が使用されることが可能であり、さらに一部の要素は、完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、ディスクリートの構成要素もしくは分散型の構成要素として、または他の構成要素と連携して、さらに任意の適切な組合せおよびロケーションで実施されることが可能な機能上のエンティティである。１つまたは複数のエンティティによって実行されるものとして本明細書で説明される様々な機能は、ハードウェア、ファームウェア、および／またはソフトウェアによって実行されることが可能である。例えば、様々な機能は、メモリーの中に格納された命令を実行するプロセッサーによって実行されることが可能である。
【００４９】
[0060]図４に示される構成要素のそれぞれは、例えば、図１を参照して説明されるコンピューティングデバイス１００などの任意のタイプのコンピューティングデバイスであることが可能である。本発明の範囲内で、任意の数のデータストア、パーティションサーバー、フロントエンド、ログ、ネットワーク、および／またはメモリーテーブルが、システム４００内部で使用されることが可能であることを理解されたい。さらに、示されない他の構成要素が、システム４００内部に含められることも可能である。
【００５０】
[0061]したがって、任意の数の構成要素が、本発明の実施形態の範囲内で、所望される機能を実現するのに使用されることが可能である。図４の様々な構成要素は、簡明のため、線で示されるものの、現実には、様々な構成要素を区分けすることは、それほど明瞭ではない。さらに、図４のいくつかの構成要素は、個別のブロックとして示されるものの、これらの図の性質および数は、例示的であり、限定するものと解釈されるべきではない。
【００５１】
[0062]図５を参照すると、本発明の実施形態による、コミット識別情報（「コミットＩＤ」）５００のブロック図が示されている。コミットＩＤは、レプリケーション中にデータが順次にコミットされることを確実にするのに利用される識別情報である。本発明の実施形態は、データの順次の通信（またはデータの順次の受信）を要求しないため、コミットＩＤが、ストレージスタンプにおいてデータが順次にコミットされることを確実にするのに利用される。コミットＩＤは、宛先パーティションが、そのストレージスタンプおよび／またはそのパーティション範囲に関してジオメッセージ／トランザクション（データ）をどこまでコミットすることができるかを指定することが可能である（例えば、コミットＩＤは、様々なパーティションにわたって様々であることが可能である）。コミットＩＤは、（図５に示されるとおり）スタンプＩＤ５０２、パーティション番号（＃）５０３、パーティション範囲５０４、エポック番号（＃）５０６、および／またはシーケンス番号（＃）５０８を含むことが可能である。コミットＩＤは、より多くの情報部分を含んでも、より少ない情報部分を含んでもよいことが理解されよう。しかし、或る例示的な実施形態において、コミットＩＤは、少なくとも、エポック番号と、シーケンス番号とを含む。
【００５２】
[0063]スタンプＩＤ５０２は、送信元スタンプの識別子である。例えば、スタンプＩＤにより、二次データスタンプにデータを供給する一次ストレージスタンプが一意に識別されることが可能である。パーティション範囲５０４は、或る例示的な実施形態において、コミット前進が適用されるべき送信元キー範囲（例えば、二次データストア上にコミットされることが可能なアイテムの範囲）を表す。しかし、パーティション範囲は、パーティションが、親の区域内でコミットを行っているが、パーティションの区域からトランザクションを送信している場合、送信元パーティションのキー範囲とは異なること、またはメッセージＩＤの中のパーティション範囲とは異なることが可能である。
【００５３】
[0064]エポック番号およびシーケンス番号は、増加するが、番号の間にギャップが存在することが可能な順次の値である（例えば、有効な順番は、１、２、３、６、７…を含むことが可能である）。エポック番号は、概念的にチャプター番号と考えられることが可能であり、さらにシーケンス番号は、新たなチャプターごとに新たに始まるチャプターのページ番号と考えられることが可能である。その結果、特定のトランザクション、または特定のパーティションが、エポック番号およびシーケンス番号を利用して識別されることが可能である。エポック番号５０６は、コミットが来る（または関連している）パーティションのインスタンスを表す。パーティション番号５０３は、供給を受けているパーティションの現在のライブのインスタンスを表す。パーティションにロードが行われるたびに、この番号は、増加する。
【００５４】
[0065]シーケンス番号５０８（ｓｅｑ＃）は、コミットされるべき順次の最新のトランザクションを表す。このことは、二次ストレージスタンプに、そのエポック番号および順次番号までのすべてのトランザクションが二次ストレージスタンプ上でコミットされ得ることを告げる。エポック番号は、パーティションの分割またはマージが行われるたびに変わる。同一の二次データスタンプに対してジオメッセージ（例えば、データ）を乱れた順序で、並行に送信することを許すのに、所与のトランザクション（トランザクションＸ）に関するコミットＩＤが、そのトランザクションを有するジオメッセージに関する確認が二次側から受信され、さらにトランザクションＸより早期のトランザクションを有する他のすべてのジオメッセージに関する確認が二次側から受信された後、一次側から二次側に送信される。
【００５５】
[0066]コミットＩＤに同様に関連して、ジオメッセージが、スタンプＩＤと、パーティション番号と、パーティションキー範囲とを備えることが可能である。スタンプＩＤ、パーティション番号、およびパーティションキー範囲は、ジオメッセージ全体に関連する。さらに、ジオメッセージは、１つまたは複数のトランザクションを備えることも可能である。この例において、各トランザクションは、エポック番号と、シーケンス番号とを有する。この例において、エポック番号およびシーケンス番号は、トランザクションレベルで一意であるのに対して、スタンプＩＤおよびパーティション番号は、ジオメッセージレベルにある。
【００５６】
[0067]コミットＩＤは、一次データスタンプから二次データスタンプに送信されるデータに付随することが可能である。例えば、一次側（データスタンプ／ストア）から二次側（データスタンプ／ストア）に送信される各ジオメッセージが、一次側からのコミットＩＤを含むことが可能である。したがって、一次側は、所与のコミットＩＤまでを含む順次のデータが二次側においてコミットされることを許可する識別子を、所与の通信の上に乗せていることが可能である。或る例示的な実施形態において、コミットＩＤは、ＧＭＬにトランザクションを書き込むことについて一次側が確認を受信している、二次側においてＧＭＬに書き込まれた連続する最大のトランザクションを示す。確認が二次側から受信されているため、一次側は、少なくともコミットＩＤまでを含むデータが、二次側の少なくともＧＭＬに永続化されていることを確実にすることができる（二次側で既にコミットされているのではないとしても）。
【００５７】
[0068]しかし、コミットＩＤは、規定の間隔で、またはコミットＩＤ通信において規定された期間、活動がないと、通信されて、二次側がデータをコミットすることを進めることを許すことも企図される。このことは、一次側の送信元パーティションに関する最新のコミットＩＤが、送信元パーティションのデータの一部分を含むことが可能な所与の二次側のパーティションのすべてに送信されることを確実にする。したがって、宛先のパーティションは、ＧＭＬから再生されるのを待っている保留中のトランザクションをコミットすることを進めることができる。
【００５８】
[0069]二次側が、データを順次にコミットするためにどのようにコミットＩＤを利用することが可能であるかの例が、図６の例示的なブロック図に示され、このブロック図は、本発明の態様により、コミットＩＤに関する特定のトランザクションをどのように扱うべきかを決定する方法６００を表す。この例において、ジオメッセージは、二次側のＧＭＬに書き込まれ、さらにコミットＩＤが受信されて、その後、いずれのジオメッセージがＧＭＬから二次側にコミットされるべきかを決定するように評価されるものと想定される。
【００５９】
[0070]ブロック６０２で、ジオメッセージのパーティション番号が現在のコミットＩＤより大きいかどうかの決定が行われる。例えば、ジオメッセージが、このジオメッセージの送信元を識別するパーティション番号を備えるメッセージＩＤを含むことが可能である。同様に、ジオメッセージ内のトランザクションに、エポック番号およびシーケンス番号が関連付けられていることが可能である。ジオメッセージのパーティション番号が、コミットＩＤのパーティション番号より大きい場合、ブロック６０４に示されるとおり、このジオメッセージは、無視されることが可能である。本明細書で使用される、ジオメッセージを「無視する」とは、単に、そのジオメッセージがコミットされる状態にないこと（先行する順次のジオメッセージが欠落していること）を意味するに過ぎないことが可能である。或る例示的な実施形態において、二次データストアが、再生のために複製のトランザクションを無視することを許すようにパーティションが再ロードされる場合、パーティション番号が使用される。一次データストア上でパーティションが再ロードされると、そのパーティションは、そのパーティションのパーティション番号をインクリメントし、さらにそのパーティションは、最後のコミットＩＤからメッセージを再び送信することを開始する。この例において、すべてのジオメッセージは、そのジオメッセージと一緒にパーティション番号が送信される。また、コミットＩＤは、コミットＩＤを送信する時点の現行のパーティション番号であるパーティション番号も有する。
【００６０】
[0071]或る例示的な実施形態において、コミットＩＤは、データを再生する二次データストアに関連するエンジンである二次再生エンジンに、少なくとも以下、すなわち、（１）より小さいパーティション番号を有するジオメッセージに関して、コミットＩＤのエポック番号およびシーケンス番号までのトランザクションだけしか再生しないこと、（２）より小さいパーティション番号からの他のすべてのトランザクションを、それらのトランザクションが、より大きいエポック番号／シーケンス番号を有する場合、それらのトランザクションは、複製であり、一次パーティションから再送されるので、無視することを行うよう告げる。
【００６１】
[0072]しかし、ブロック６０２の決定が、ジオメッセージのパーティション番号が現在のコミットＩＤ以下であることであった場合、解析は、ブロック６０６に進む。ブロック６０６で、ジオメッセージの中の各トランザクションのエポック番号が、現在のコミットＩＤより大きいかどうかの決定が行われる。トランザクションのエポック番号が現在のコミットＩＤより大きい場合、それらのトランザクションは、ブロック６０８に示されるとおり、無視されることが可能である。
【００６２】
[0073]しかし、トランザクションのエポック番号が、ブロック６０６で、コミットＩＤ以下であると決定された場合、ブロック６１０で、そのトランザクションのエポック番号が、コミットＩＤと等しいかどうかの決定が実行される。エポック番号は、パーティションの分割またはマージとともに変えられることが可能であるため、より小さいエポック番号は、より大きいエポック番号に先行するすべてのジオメッセージトランザクションが、二次側のログ（例えば、ＧＭＬ）の中に永続化されていることを示す。したがって、コミットＩＤのエポック番号より早期のエポック番号を有する、二次側で永続化されたジオメッセージトランザクションは、ブロック６１４に示されるとおり、二次側にコミットされる。
【００６３】
[0074]しかし、ジオメッセージのエポック番号がコミットＩＤのエポック番号と等しい場合、ブロック６１２で示されるとおり、各トランザクションのシーケンス番号が現在のコミットＩＤのシーケンス番号より大きいかどうかの決定が実行される。シーケンス番号がコミットＩＤより大きい場合、そのジオメッセージは、無視されることが可能である。ジオメッセージの中のトランザクションのシーケンス番号が現在のコミットＩＤより大きくはない場合、やはりブロック６１２で示されるとおり、そのトランザクションは、コミットされ得る。ブロック６１４で示されるとおり、コミットＩＤの現在のエポック番号の最大のシーケンス番号までのすべてのトランザクションが、二次側にコミットされる。
【００６４】
[0075]メッセージＩＤおよびコミットＩＤは、前述したとおり、エポック番号と、シーケンス番号とを含むことが可能である。一次データストアからのパーティションなどの送信元パーティションは、エポック番号値およびシーケンス番号値と以下の相互作用を有することが可能である。或る例示的な実施形態において、パーティションにロード、分割、またはマージが行われるたびに、そのもたらされるパーティションに関して使用されるエポック番号が、親パーティションに関する以前のエポック番号より大きく設定される。しかし、パーティションに関するエポック番号は、そのパーティションに依然としてロードが行われている場合、変わらないことが企図される。この例において、エポック番号が変えられる（例えば、増加される）場合はいつでも、シーケンス番号は、初期値（例えば、０）にリセットされる。さらに、或る例示的な実施形態において、一次データストアの更新ログ、ブロックログ、および／またはブロブログに書き込まれるすべてのトランザクションは、エポック番号と、シーケンス番号とを含む。トランザクションに関連するのと同じこれらの番号が、次に、順序どおりの再生を可能にするように宛先パーティションにおいて利用される。一次側は、一次側が二次側に通信した最後のコミットＩＤを把握しておくだけでよく、そのような最後のコミットＩＤは、メタデータストリーム／ログの中に、または更新／コミットログの中に保持されることが可能である。通信された最後のコミットＩＤ、および二次側に通信されている注釈をつけられたデータだけを保持すればよいことにより、このプロセスは、二次側に第２のコミットメッセージを送信しなければならないことを防ぐ。さらに、一次側がフェイルオーバーした場合、一次側は、一次側で保持された最後のコミットＩＤから始めて、ジオトランザクションを送信することから開始することができる。同一のコミットＩＤが、新たなパーティション番号で送信されることが可能であり、このことは、二次データストアが、より大きいエポック番号を有するトランザクション、およびより大きいシーケンス番号を有する等しいエポック番号を有するトランザクションを除いて、そのコミットＩＤまでのすべてをコミットすべきことを示すため、パーティション番号により、二次データストアが複製のトランザクションを無視することが可能になる。これらのトランザクションは、この例では、これらのトランザクションが再送されるため、無視されることが可能である。
【００６５】
[0076]前述した説明は、一次側がエポック番号およびシーケンス番号をどのように扱うかに注目したが、以下の説明は、例示的な二次側がエポック番号およびシーケンス番号をどのように扱うかに注目する。
【００６６】
[0077]或る例示的な実施形態において、各二次パーティションが、宛先パーティションの範囲内の各スタンプＩＤに関するコミットＩＤ（例えば、更新ログ、ブロックログ、ページログ、および／またはメタデータストリームの中に保持される）を表すバケットのリストを保持する。この例において、バケットのこのセットは、各一次スタンプＩＤに関して、最新のコミットＩＤのコミットされたパーティション範囲、エポック番号、およびシーケンス番号の最新のリストを表す。したがって、これらのバケットは、各宛先パーティションが、複数の送信元パーティションから要求を受信することが可能であるので（後段で図７に関して説明されるとおり）、各パーティションが、そのパーティションに関するエポック番号およびシーケンス番号を保持することを可能にする。ジオメッセージと一緒に送られることが可能なパーティション番号は、送信元パーティションから再送されている可能性がある（例えば、送信元パーティションフェイルオーバーのため）ジオメッセージのいくつかの部分（またはジオメッセージの全体）を無視するのに使用されることが可能である。二次側によるパーティション番号、エポック番号、およびシーケンス番号のさらなる用法については、図８に関連して後段で説明する。
【００６７】
[0078]図７を参照すると、本発明の実施形態による、一次側７０２から二次側７０４にデータを送るための例示的なシステム７００のブロック図が示されている。図７に示すように、二次側７０４のパーティションが１つのパーティション、または複数のパーティションからデータを受信することが可能である。
【００６８】
[0079]一次側７０２は、パーティション１  ７０６と、パーティション２  ７０８とを備える。パーティション１  ７０６は、キー範囲ＡからＭに及ぶデータを含む。パーティション２  ７０８は、キー範囲ＮからＺに及ぶデータを含む。しかし、二次側７０４は、キー範囲ＡからＺのデータを保持することを意図する３つのパーティションを備え、したがって、この例では、一次側７０２と二次側７０４の間に平行でない関係がもたらされる。二次側は、パーティション３  ７１０と、パーティション４  ７１２と、パーティション５  ７１４とを備える。
【００６９】
[0080]パーティション３  ７１０は、ＡからＣのキー範囲からのデータを保持することを意図している。パーティション４  ７１２は、ＤからＰのキー範囲からのデータを保持することを意図している。パーティション５  ７１４は、ＱからＺのキー範囲からのデータを保持することを意図している。複数の送信元からのデータをコミットするタスクを実現するため、バケット範囲が保たれることが可能である。換言すると、二次側は、様々な送信元パーティションからの様々なコミットＩＤを把握している範囲バケットを保持することが可能である。これらの範囲バケットは、その後、二次側のログ（例えば、ＧＭＬ）からデータを再生して、そのデータを順次にコミットする際に、二次側によって利用されることが可能である。
【００７０】
[0081]範囲バケット法の利用は、アカウントによって利用されるパーティションの数を減らす最適化として使用されることが可能である。例えば、或るアカウントが一次側で５つのパーティションを利用しているが、データは、２つのパーティションにコミットされることも可能である場合、二次側は、レプリケーション中に二次側における２つのパーティションの中にそのアカウントのデータをコミットすることが可能である。さらに、範囲バケット法の概念は、二次側におけるＧＭＬが送信側についていくことができない状況において実施されてもよい。この状況において、二次側における宛先パーティションは、代わりに、範囲バケット法に依拠して各二次側における後の再生を円滑にして、２つ以上のパーティションの間でデータを分割してもよい。この例において、使用される二次パーティションのそれぞれは、そのパーティション自らのＧＭＬを有することが可能であり、このことは、単一のＧＭＬにかかる負担を軽減する。
【００７１】
[0082]例えば、二次データストアが余りにも多くのロードを有する場合、パーティションを分割する決定が行われることが可能である。この決定は、適切な分割ロケーションについての標識として一次データストアから受け取られた範囲を利用することが可能である。
【００７２】
[0083]図８を参照すると、本発明の態様による、非同期ジオレプリケーションのプロセスフロー８００のブロック図が示されている。この例において、プロセスフロー８００は、クライアント８０２、一次データスタンプ（一次側）８０４、および二次データスタンプ（二次側）８０６の間で生じる。さらなるエンティティ、マシン、構成要素、アプリケーション、サービスなどが、非同期の地理的レプリケーションを実行するプロセスフローに組み込まれてもよいものと理解されたい。
【００７３】
[0084]クライアント８０２が、データ８０８を一次側８０４に通信する。前述したとおり、クライアント８０２は、一次側８０４を、データをコミットするための一次ジオロケーションとして利用するように割り当てられている、または選択されているアカウントに関連付けられていることが可能である。一次側８０４が、ＸＦＥに依拠して、一次側８０４に向けられたデータ８０８を検証することが可能である。データ８０８を受信すると、一次側８１０は、データ８０８をログ（またはストリーム）に書き込むことが可能である。一次側８０４は、代替として（またはさらに）データ８０８を一次側８０４にコミットすることが可能である。データ８０８をコミットすることは、一次側８０４のメモリーテーブル８１０およびログ８１２にデータ８０８を（任意の順序で）永続化させることを含むことが可能である。
【００７４】
[0085]或る例示的な実施形態において、一次側８０４のログまたは他のデータストリームにデータが書き込まれると、成功の確認８１４がクライアント８０４に戻されることが可能である。さらなる例示的な実施形態において、データ８０８が一次側８０４にコミットされると、確認８１４がクライアント８０２に供給される。
【００７５】
[0086]二次ジオロケーションにデータを実際にコミットするのに先立ってクライアント８０２に成功確認を供給することによって、クライアントからデータを通信してから成功の確認を受信するまでの経過時間が短縮されることが可能である。しかし、後段でより詳細に説明されるとおり、一次側と二次側の両方にデータが少なくとも書き込まれると（完全にコミットされることとの対比で）、クライアントに成功確認を戻す同期ジオレプリケーション方法が、実施されることも可能である。同期ジオレプリケーションは、クライアントからデータを通信してから、一次側（または二次側）から成功の確認を受信するまでに、より大きい待ち時間を要求する可能性がある。
【００７６】
[0087]図８に戻ると、成功確認８１４が供給された後、一次側８０４が、ジオメッセージ８１６を二次側８０６に通信する。或る例示的な実施形態において、ジオメッセージは、ジオ注釈つきレコード（「ＧＡＲ」）などのレコードで注釈をつけられているデータ８０８である。別の例示的な実施形態において、ジオメッセージは、特定のジオロケーション、スタンプ、および／またはパーティションに関するジオメッセージを形成するようにバッチ処理されているトランザクションを集めたもの（通信されたデータグループを集めたもの）である。ジオメッセージは、そのジオメッセージを一意に識別するメッセージＩＤ（例えば、エポック番号およびシーケンス番号）を含むことが可能である。さらに、ジオメッセージは、一次側８０４からのコミットＩＤを含むようにさらに注釈をつけられることが可能である。
【００７７】
[0088]或る例示的な実施形態において、ＧＡＲは、二次スタンプのパーティション上のログを再生／実行するのに使用されるトランザクションログと一緒に格納されたさらなる情報である。各トランザクションにつき１つのＧＡＲが格納されていることが可能である。トランザクションを構成する多くのログエントリが存在することが可能であり、最終のコミットログエントリは、トランザクションに関する。この事例において、トランザクションに関するＧＡＲは、この最終のコミットログエントリと一緒に格納されることが可能である。この情報は、（ａ）宛先において、トランザクションをどのようにして正しく再生し、さらにつなげるべきかを決定するのに使用される、元のトランザクションが何であったか（例えば、プットブロック、プットブロックリストなど）を示すことが可能であり、さらに（ｂ）宛先においてトランザクションを再実行するようにさらなる情報（例えば、前回に変更された時刻、プットブロックリストに関して、ブロックがコミットされたリストから来たか、またはコミットされていないリストから来たかを示す最終のブロックリスト）を含むことが可能である。最も原始的な形態において、ＧＡＲは、一次側で実行されるべき着信するトランザクション全体を含むことが可能であるが、二次側でトランザクションを完全に、さらに決定論的に再生するのに十分な情報が含められていなければならず、このことは、トランザクションのタイプに依存して、より多くの情報がＧＡＲに関して格納されることをもたらす。例えば、この情報には、タイムスタンプおよびＥＴａｇなどの、トランザクションの実行中に計算された結果が含まれ得る。さらに、ＧＡＲは、一次ログに書き込まれ、さらにすべてのジオトランザクションと一緒に二次側に送信されるトランザクションキーレコードを含むことが可能である。このレコードは、キーと、トランザクションのジオトランザクションＩＤ（例えば、一次側のエポック番号およびシーケンス番号）を含むことが可能である。
【００７８】
[0089]パーティションサーバー上で実行されるトランザクションは、例示的な３つのログストリーム（例えば、更新ログ、ブロックログ、およびページログ）のうちの１つに書き込まれた１つまたは複数のレコードを有する。パーティションが、負荷分散またはノード障害のために別のノード（例えば、データストア）に再ロードされた場合、メモリーテーブルを再生成するようにトランザクションを再生するのにログが使用され得る。その結果、ジオレプリケーションは、パーティションがジオレプリケーションの送信元となることを許すパーティションにおけるさらなるログストリームを必要としないことが可能である。このことは、部分的には、ジオトランザクションが、ライブのジオレプリケーションに関する更新／ブロック／ページログ（およびブートストラップレプリケーションに関するファイルテーブル）からパッケージとしてまとめられることが可能であるためである。
【００７９】
[0090]ジオレプリケーションに関して、ＧＡＲが、既存のログストリームの中のトランザクションに追加されることが可能である。ログに既に書き込まれているものとともに、このＧＡＲは、ジオレプリケーションのために二次ストレージスタンプ上でトランザクションを再実行／再生するのに必要とされるさらなる情報を含むことが可能である。しかし、ＧＡＲは、一次側におけるログの再生のための意味を有さないことが可能である。代わりに、ＧＡＲは、二次ストレージスタンプに送られて、二次スタンプにおけるトランザクションをどのように再実行／再生すべきかを指定することが可能であるように存在する。さらに、ＧＡＲの一部は、ログの中に格納される代わりに、ログの中に既に入っている情報から動的に生成されることも可能である。この場合、ＧＡＲは、必要な条件および特別な値で生成され、さらにＧＡＲは、ジオメッセージに追加されてから、二次側に送信される。
【００８０】
[0091]ジオメッセージは、或る例示的な実施形態において、１）メッセージフォーマットバージョンと、２）このメッセージが圧縮されているか否かを告げるフィールドと、３）ジオメッセージが表すストレージアカウント名のリストであり得る、メッセージアカウント部分とを含むことが可能である。これらのアカウント名は、それらのアカウントに、メッセージが着信するスタンプにおける二次側として印がつけられていることをＸＦＥが確かめることによって、検証されることが可能である。また、ジオメッセージは、４）テーブル名と、５）テーブルバージョン、すなわち、テーブルのスキーマバージョンと、６）ロングレコードバージョン、つまり、メッセージの中のトランザクションログレコードのバージョン番号と、７）メッセージがファンアウトすることが意図されているか否かを告げるフィールドを含むことも可能であり、ただし、ファンアウトとは、このメッセージを、送信元パーティションによって表されるパーティション範囲に関する二次側のターゲットパーティションのすべてに送信することを意味する。ファンアウトが指定されていない場合、ジオメッセージの中でストレージアカウントが指定されて、ジオメッセージを二次側のターゲットパーティションだけに送信することが容認可能である。
【００８１】
[0092]また、ジオメッセージは、８）メッセージＩＤから成ることも可能であり、メッセージＩＤは、このパーティションから所与のストレージスタンプに向かうジオトランザクションのグループを表す。メッセージＩＤは、ａ）スタンプＩＤ、つまり、送信元スタンプと、ｂ）パーティションの所与の実行中のインスタンスから送信されているメッセージのすべてを識別するのに使用される、パーティション番号とを含むことが可能である。このことは、特に、パーティション再ロードの問題、および最近のジオトランザクションが、異なるように再びパッケージにされて、二次パーティションに再送されることが可能であるという事実に対処するのに使用され、さらにパーティション番号は、二次側でこのことが潜在的にいつ行われる可能性があるかを特定するのに使用される。メッセージＩＤはまた、ｃ）メッセージの中のトランザクションに関する範囲である、パーティション範囲から成ることが可能である。
【００８２】
[0093]また、ジオメッセージは、９）コミットＩＤから成ることも可能であり、前述したとおり、コミットＩＤは、送信元パーティションからのいずれのエポック番号およびシーケンス番号までが二次側においてコミットされるように考慮され得るかを表す情報を含むことが可能である。
【００８３】
[0094]また、ジオメッセージは、１０）それぞれの別個のパーティションキーに関するバッチから成ることも可能である。これらのバッチは、このジオメッセージの一部としてのトランザクションのバッチセットを表すことが可能である。ジオトランザクションのセットが一緒に実行される必要がある場合、それらのジオトランザクションのセットは、同一のバッチの中に入っていることが可能である。バッチのすべてが（範囲に基づいて）、ジオメッセージに関する宛先テーブルサーバーのそれぞれに送信される必要があるのではない場合、ＸＦＥが、異なる複数のテーブルサーバーにわたるジオメッセージを分割することができるのは、バッチのレベルにおいてである。各バッチは、ａ）パーティションキーと、ｂ）このパーティションキーに関するレコードバッファの中のレコードオフセットおよびレコードサイズと、ｃ）トランザクションを再生するのに使用され、さらに二次側でジオトランザクションがいつコミットされ得るかを示すのに使用されるジオトランザクションＩＤ、およびジオトランザクションのキー情報のリスト、すなわち、１．バッチに関するパーティション範囲であるパーティション範囲、２．エポック番号（バッチの中のジオトランザクションのすべてが同一のエポック番号を有さなければならない）、３．シーケンス番号（このバッチの中の各ジオトランザクションに関してシーケンス番号が存在する）とを含むことが可能である。さらに、ジオメッセージは、１１）メッセージの中のトランザクションに関するデータログレコードから成ることも可能である。
【００８４】
[0095]図８に戻ると、ジオメッセージ８１６が二次側８０６に通信される。二次側８０６の宛先パーティションは、ジオメッセージが乱れた順序で（非順次で）着信するのを見ることが可能である。しかし、ジオトランザクションが、二次側８０６のＧＭＬから再生される際、順序どおりのコミットが、宛先パーティションにおいて執行されることが可能である。ジオトランザクションに関するメッセージＩＤの中で与えられるエポック番号およびシーケンス番号が、順序どおりのコミットをもたらすのに使用される。さらに、宛先パーティションは、穴のあるシーケンス番号を受信する可能性があり、いつコミットすべきかを知る必要がある。これらの穴は、送信元パーティションが、異なるＮ個の宛先パーティションにトランザクションを送信する可能性があり、したがって、すべての宛先パーティションが、所与の送信元からすべてのトランザクションを受信するわけではない場合に生じる可能性がある。コミットＩＤに含められるスタンプＩＤ／パーティション範囲／エポック番号／シーケンス番号により、宛先パーティションが、その二次側およびパーティション範囲に関してジオメッセージ／トランザクションをどこまでコミットすることができるかが指定される。
【００８５】
[0096]次に、二次側８０６が、ジオメッセージ８１６のデータをログ８１８に書き込むことが可能である。或る例示的な実施形態において、ログは、二次側８０６のパーティションに関するＧＭＬである。パーティションに着信するジオメッセージのすべては、パーティションのジオメッセージログの中に格納される。新たなジオメッセージが二次側８０６に着信すると、この例において、このジオメッセージは、ＧＭＬの中に格納され、さらに成功が二次側８０６のＸＦＥに戻される。このジオメッセージは、ジオトランザクションをコミットすることを進めることができるか否かを示すコミットＩＤを含むことが可能である。そのコミットＩＤの中のシーケンス番号より早期のシーケンス番号を有するジオメッセージは、コミットされることが可能であり、さらにそれらのメッセージは、前述した注釈情報を使用して二次側８０６で再生される。二次側８０６における再生中、この例では、対応するログレコードが、更新される必要がある値とともに更新ログ、ブロックログ、および／またはページログの中に格納される。
【００８６】
[0097]引き続きこの例に関して、ＧＭＬからトランザクションが再生される際、トランザクションは、フィールド（例えば、ＴＢＬポインタおよびＣＢＬポインタ）が正しく更新されて、対応する更新／ブロック／ページログの中に再生される。別個のＧＭＬで始めること（既存のログを使用することとの対比で）の利点は、ジオメッセージ情報のすべてがそのＧＭＬの中に限って含まれることである。次に、宛先パーティションにおいてデータのジオ再生が実行された後、トランザクションが存在するためのすべてが、更新／ブロック／ページログおよびメモリーテーブルの中に入っており、それらのログ、またはその情報の再生を扱うのにロジックが変更されなくてもよい。このことにより、特に、パーティション再生ログは、二次ロケーションでパーティションが再ロードされる際に迅速なパーティションロード時間を得るように小さいままにされることが可能であるので、ＧＭＬからのジオメッセージの再生が、パーティションのログからのパーティション再生ログロジックとは分離されたままになる。
【００８７】
[0098]この例において、ＧＭＬから更新／ブロック／ページログおよびメモリーテーブルの中に再生することにより、パーティションのライブ状態のデータをコミットしてから、ＧＭＬに関して「消費済み」レコードを前に進める更新が生成される。その結果、二次側８０６上のパーティションを再ロードする際（例えば、障害が生じた場合に）、ＧＭＬから再生を開始すべきポイントが特定されなければならない。そのポイントは、ジオトランザクションの再生中に更新／ブロック／ページログの中に格納されるジオトランザクションと一緒に「消費済みＩＤ」を格納することによって特定される。この消費済みＩＤは、ＧＭＬから再生された最後のジオトランザクションのスタンプ／パーティションキー範囲／エポック／シーケンス番号を含むことが可能である。しかし、パーティションキー範囲は、トランザクションレコードが適切なキーを識別することが可能であるため、格納されなくてもよいことが企図される。さらに、パーティションのキー範囲の所与の部分に関して最大の消費済みＩＤが保持されることが可能であり、最大の消費済みＩＤは、潜在的に、チェックポイントが実行されるたびにＧＭＬの中に格納される。チェックポイントレコードに対するポインタは、メタデータストリームの中に格納されることが可能である。ＧＭＬの中の最後のポイントからの再生成は、チェックポイントの中に格納された消費済みＩＤ、および更新／ブロック／ページログから再生する際に見出された消費済みＩＤから最大の消費済みＩＤを取り出すことによって達せられることが可能である。
【００８８】
[0099]図８に戻ると、ログ８１８にデータを書き込んだ後、二次側８０６が（例えば、ＸＦＥによって）、データが書き込まれた（またはコミットされた）ことの確認８２０を一次側８０４に通信することが可能である。確認８２０は、いずれのエポック番号、およびいずれのシーケンス番号が二次側８０６に書き込まれたかを識別する、ジオメッセージ８１６に関連付けられたメッセージＩＤを含むことが可能である。次に、一次側が、コミットＩＤ８２２を更新することが可能である。最終的に、後続のジオメッセージの一部として、またはファンアウトタイプのメッセージの結果、更新されたコミットＩＤ８２２が、二次側８０６に通信されて、ＧＭＬの中に保持されたデータのより多くの量が二次側８０６でコミットされることを許すことが可能である。
【００８９】
[00100]図９を参照すると、本発明の態様による、結果整合性を有する同期レプリケーション方法に関する時間的フローを示すブロック図９００が示されている。図８に関連して前述した構成要素と同様に、図９００は、クライアント９０２と、一次側９０４と、二次側９０６とを備える。
【００９０】
[00101]図８に関連して説明した例示的な非同期方法とは対照的に、同期ジオレプリケーションは、データが二次側９０６および一次側に少なくとも書き込まれた後でないと、クライアント９０４に確認を供給しない。このことは、データが二次側にコミットされた後にクライアントに確認を供給する、図１０の例示的な方法において説明される、強い整合性を有する同期レプリケーションとさらに対照をなす。
【００９１】
[00102]クライアント９０２が、データ９０８を一次側９０４に通信する。データ９０８を受信すると、一次側９０４は、このデータを、後にコミットするために１つまたは複数のログに書き込むことが可能である（図示せず）。さらに、前述したとおり、一次側９０４は、１つまたは複数のレコード、情報、および／または識別子でデータ９０８に注釈をつけることが可能である。例えば、データ９０８は、ジオレプリケーションプロセス（例えば、二次側９０６における再生）のために使用可能なメッセージＩＤ、コミットＩＤ、ＧＡＲ、および／またはさらなる情報を含むことが可能である。
【００９２】
[00103]一次側９０４は、二次側９０６にジオメッセージ９１０を通信する。このジオメッセージは、データ９０８を備えることが可能である。また、このジオメッセージは、個別のトランザクションなどの、データのさらなる１つまたは複数の部分を備えることも可能である。さらに、ジオメッセージ９１０が、ジオメッセージ９１０に関連付けられたメッセージＩＤと、二次側９０６がコミットを行うことを可能にするエポック番号およびシーケンス番号を識別するコミットＩＤとをさらに備えることが企図される。
【００９３】
[00104]ジオメッセージ９１０を受信した後、二次側９０６は、ジオメッセージ９１０の関連するデータを適切なログ９１２に書き込む。例えば、二次側９０６のＸＦＥが、ジオメッセージのデータが書き込まれるべき二次側９０６内部の特定のパーティションを識別することが可能である。二次側９０６の特定のパーティションが特定されると、次に、ジオメッセージのデータ関連部分が、二次側９０６のその識別されたパーティションのＧＭＬに書き込まれることが可能である。
【００９４】
[00105]さらに、二次側９０６が、ジオメッセージ９１０と一緒に受信されたコミットＩＤを検査することが可能である（図示せず）。この例では、コミットＩＤは、一次側が、二次側９０６におけるログにジオメッセージ９１０が書き込まれたことの確認をまだ受信していないため、ジオメッセージ９１０に固有のエポック番号およびシーケンス番号を含まない。したがって、ジオメッセージ９１０と一緒に受信されていることが可能なコミットＩＤは、ジオメッセージ９１０に関連するそれぞれの値より小さいエポック番号および／またはシーケンス番号を有することになる。
【００９５】
[00106]図示される例示的な方法に戻ると、二次側９０６が、ジオメッセージ９１０のデータの書込みが成功したことの確認９１４を二次側９０６の１つまたは複数のログに通信する。或る例示的な実施形態において、二次側９０６のＧＭＬが、データの書込みが成功したことの指示をＸＦＥに供給する。次に、二次側９０６のＸＦＥが、一次側９０４にこの確認を供給することを担う（図４に関して前述した例示的な方法と同様に）。
【００９６】
[00107]一次側９０４は、確認９１４を受信した結果、一次側においてデータをコミットする（９１６）。前述したとおり、データをコミットすることは、一次側９０４のログにデータを書き込むこと、およびメモリーテーブルに関係のあるエントリがポピュレートされることを許すことを含むことが可能であり、このことは、データが要求側のクライアントによってアクセスされることを可能にする。或る例示的な実施形態において、ログに書き込まれたデータは、要求側のクライアントによって直接にアクセスされ得る、コミットされているデータとは異なり、要求側のクライアントによって直接にアクセスされ得ない。
【００９７】
[00108]一次側９０４は、一次側９０４においてデータがコミットされたことを確認した後、成功の確認９１８をクライアント９０２に通信する。確認９１８は、この例では、一次側９０４においてデータ９０８がコミットされたこと、および二次側９０６のログにデータ９０８が、最低限でも、書き込まれたことを示す。確認９１８は、そのような情報を明示的に示しても、暗黙に示してもよい。
【００９８】
[00109]一次側は、確認９１８の通信と同時に、確認９１８の通信に先立って、または確認９１８の通信の後に、コミットＩＤ９２０を二次側９０６に通信することが可能である。コミットＩＤ９２０は、二次側から確認９１４を受信した結果、更新されている更新されたコミットＩＤであることが可能である。前述したとおり、コミットＩＤ９２０などのコミットＩＤは、ジオメッセージと一緒に二次側に通信されることが可能であり、またはファンアウトタイプのメッセージ（例えば、事前定義された持続時間の満了）の結果、通信されることが可能である。
【００９９】
[00110]二次側９０６が、そのコミットＩＤまでを含む連続したメッセージＩＤを有する、ＧＭＬなどのログの中に保持されるデータをコミットする。前述したとおり、二次側は、関連付けられたメッセージＩＤに基づいて順次にデータをコミットすることが可能である。したがって、そのコミットＩＤまでを含むログの中に保持されたメッセージＩＤにギャップが存在する場合、連続するメッセージＩＤにおけるギャップまでのメッセージＩＤに関連付けられているデータだけがコミットされる。
【０１００】
[00111]図１０を参照すると、本発明の態様による、強い整合性を有する例示的な同期レプリケーション方法のブロック図１０００が示されている。図１０００は、やはり、クライアント１００２と、一次側１００４と、二次側１００６とを含む。
【０１０１】
[00112]クライアント１００２が、データ１００８を一次側１００４に通信する。一次側１００４が、このデータを解析して、一次側１００４内部で保持されている、このデータに関連付けられたオブジェクトを特定する。いずれの（複数の）オブジェクトがデータ１００８に関連付けられているかを特定した後、一次側１００４は、関連付けられたオブジェクト１０１０を一次側１００４内部でロックする。オブジェクト１０１０をロックすることは、クライアントがそのオブジェクトにアクセスすることを防止すること、そのオブジェクトに対する書込み（後に書き込まれるべきデータ１００８以外の）を防止すること、そのオブジェクトの読取りを防止することなどを含むことが可能である。代替として、オブジェクトをロックすることは、そのオブジェクトに関してトランザクションが保留中であることを単に明確にする。
【０１０２】
[00113]オブジェクト１０１０をロックした後、一次側１００４は、ジオメッセージ１０１２を二次側１００６に通信する。ジオメッセージ１０１２は、情報としてとりわけ、データ１００８を含むことが可能である。前述したとおり、ジオメッセージ１０１２は、データ１００８と、メッセージＩＤと、コミットＩＤと、ＧＡＲと、ジオレプリケーションを円滑にする他の情報とを備えることが可能である。
【０１０３】
[00114]二次側１００６が、データ１００８に関連付けられたオブジェクトに対する読取りおよび書込みをブロックする。二次側は、いずれの（複数の）オブジェクトがデータ１００８に関連付けられているかを独立に（一次側１００４によって実施されるプロセスと同様に）識別してもよく、または二次側は、一次側１００４からのジオメッセージ１０１２の一部として、いずれの（複数の）オブジェクトがデータ１００８に関連付けられているかについての指示を受信してもよい。オブジェクト１０１４に対する読取り／書込みをブロックした後、二次側１００６は、確認１０１６を一次側１００４に通信する。確認１０１６は、ログにデータ１００８を書き込むことに成功したことの指示、オブジェクト１０１４に対する読取り／書込みをブロックすることに成功したことの指示、および／またはジオメッセージ１０１２のメッセージＩＤを含むことが可能である。
【０１０４】
[00115]この例示的な方法において、後段で説明されるとおり、一次側は、データの或る部分を、二次側がデータの同様の部分をコミットするのに先立ってコミットする。しかし、二次側が、一次側に先立ってデータをコミットすることも可能であり、このことにより、一次側と二次側の間で通信される確認が少なくなること、または少なくともそのような１つまたは複数の確認が変更されることが可能であるものと理解される。或る例示的な実施形態において、一次側が、クライアントによって要求されるデータの第１の源であり、したがって、関連付けられたオブジェクトがロック（またはブロック）されている可能性がある一方で、データを一次側に先にコミットさせておくことにより、最新の情報が一次側で適時に利用可能であることが確実になり得るので、二次側でデータをコミットするのに先立って、一次側でデータをコミットすることが有利である。さらなる理由も本明細書で企図される。
【０１０５】
[00116]図１０に戻ると、確認１０１６を受信した後、一次側は、データ１００８に関連付けられたオブジェクトの読取りをブロックする（１０１８）。オブジェクトの読取りをブロックした後、一次側１００４は、データ１００８を一次側１００４にコミットする（１０２０）。データ１００８をコミットした（１０２０）後、一次側１００４は、ジオメッセージ１０１２に関連付けられたデータをコミットするよう二次側１００６に命令１０２２を通信する。命令１０２２は、ジオメッセージ１０１２にあらかじめ関連付けられたメッセージＩＤを含むことが可能である。この例示的な方法において、コミットＩＤは、データが強い整合性でコミットされる、つまり、オブジェクトに対するその後の更新が、前のトランザクションの成功が受信されるまで実行されないことが可能であるので、利用されないことが可能である。
【０１０６】
[00117]二次側１００６は、データをコミットする命令１０２２を受信した後、データをコミットする（１０２４）。次に、二次側１００６は、ブロックを取り除き、要求側のクライアントによってオブジェクトが読み取られることを許す（１０２６）。オブジェクトがブロック解除されると、二次側１００６は、オブジェクトが読取り可能であること（したがって、データがコミットされたこと）を示す確認１０２８を一次側１００４に通信する。また、一次側１００４も、確認１０２８を受信すると、オブジェクトをブロック解除して、要求側のクライアントによってオブジェクトが読み取られることを許す状態にオブジェクトを入れるようにする（１０３０）。一次側１００４および二次側１００６が、データ１００８に関連付けられたオブジェクトが読み取られることを許すと、一次側１００４は、データ１００８がコミットされ、さらにジオレプリケートされた（強い整合性で）ことを示す確認１０３２をクライアント１００２に通信する。
【０１０７】
[00118]以上、非同期レプリケーションおよび同期レプリケーションに関する例示的な実施形態の大まかな概略を概説したので、以下が与えられる。例示的な実施形態において、非同期レプリケーションは、データが変更され、このことが、クライアントに確認が送信されることを許すと、データが、一次データストアに「コミット」されたと見なす。一次データストアにおいて変更されたこのデータは、次に、ストレージアカウントの二次ジオロケーションに背景でレイジーにレプリケートされることが可能である。この例において、レプリケーションは、一次側が書き込むクリティカルなパスを外れたところで行われて、環境内の待ち時間を短縮する。しかし、災害が生じるとともに、一次データストアが失われた場合、一次側におけるストレージアカウントの最近の更新も失われる可能性がある。より高いレベルの信頼度をもたらすのに、同期レプリケーションは、データが一次データストアおよび二次データストアに書き込まれるのを確実にしてから、クライアントに確認を供給する。したがって、災害が一次データストアに影響を及ぼす場合でさえ、データは、依然として、アクセスできる可能性があるが、ただし、同期レプリケーションの代償として、より大きい待ち時間を伴う。
【０１０８】
[00119]図１１を参照すると、本発明の実施形態による、一次データストアから見た非同期レプリケーション方法１１００が示されている。ブロック１１０２で、一次データストア（例えば、ストレージスタンプ）が、クライアントからデータを受信する。この例示的な実施形態において、このデータは、１つまたは複数のサービスをもたらすようにクライアントによって利用されるオブジェクトを更新するために使用可能である。
【０１０９】
[00120]ブロック１１０４で、この受信されたデータが一次データストアのログに書き込まれる。例えば、ＸＦＥが、着信するデータを検査して、一次データストアが、この着信するデータを保持するための適切なデータストアであると決定することが可能である。ＸＦＥは、この例では、このデータを保持するための適切なパーティションを識別することも可能である。適切なパーティションには、受信されたデータに関連付けられたオブジェクトを現在、保持しているパーティションが含まれることが可能である。さらに、受信されたデータが、特定のパーティションに関するログに書き込まれることが企図される。換言すると、データが、分散コンピューティングシステムのプロセスにより、データをコミットするために一次側の１つまたは複数のログ（例えば、更新、ブロック、および／またはページ）に書き込まれることが企図される。
【０１１０】
[00121]ブロック１１０６で、受信されたデータにレコードで注釈がつけられる。或る例示的な実施形態において、このレコードは、ＧＡＲ（前述した）である。また、このレコードがメッセージＩＤ、コミットＩＤなどであることも企図される。例えば、データに注釈としてつけられるレコードは、そのデータが、二次データストアにおいてコミットするために二次データストアにおいて再生されることを許すことが可能である。データは、一次側でログに書き込まれるのに先立って、レコードで注釈がつけられることが企図される。このことは、将来、このログからのより効率的なレプリケーションを許すことが可能である。その結果、特定の順序は、図１１によって暗示されない。
【０１１１】
[00122]ブロック１１０８で、一次データストアが、受信されたデータがコミットされたことの確認をクライアントに通信する。方法１１００には示されないが、一次データストアは、受信されたデータが書き込まれたログから受信されたデータを再生することによって、受信されたデータをコミットすることが可能である。さらに、ブロック１１０４でデータが書き込まれた（複数の）ログが、メモリーテーブルおよび／またはさらなる１つまたは複数のログにその後、ポピュレートすることを介してデータのコミットを実行していることが企図される。受信されたデータをコミットするのに実施されるプロセスにかかわらず、データは、クライアントが、データがコミットされたことの確認を受信することを可能にするように一次側でコミットされる。
【０１１２】
[00123]ブロック１１１０で、一次側が、注釈をつけられたデータを二次側に通信する。本発明の或る例示的な実施形態において、ＡＣＵが、いずれの二次側がこの注釈をつけられたデータを受信すべきかを識別する。前述したとおり、注釈をつけられたデータは、このデータのデータストア源を一意に識別するエポック番号およびシーケンス番号を含むメッセージＩＤを含むことが可能である。さらに、注釈をつけられたデータは、二次側が、コミットＩＤによって識別される値までを含む連続するデータをコミットすることを許すコミットＩＤを含むことも可能であることが企図される。
【０１１３】
[00124]注釈をつけられたデータは、このデータに関連付けられた特定のデータストアに通信されてもよく、または注釈をつけられたデータは、注釈をつけられたデータの一部分にそれぞれが関心を有することが可能な複数のデータストアに通信されてもよい（例えば、ジオメッセージが、いくつかのデータストアにわたる複数のトランザクションを備えることが可能である）。二次データストアのフロントエンド（例えば、ＸＦＥ）が、注釈をつけられたデータを受信することが可能である。フロントエンドは、この注釈をつけられたデータの少なくとも一部分が、関連付けられたパーティションに関係があるかどうかを決定することが可能である。また、フロントエンドは、このデータが書き込まれるべきパーティションの適切なログ（例えば、ＧＭＬ）を識別することも可能である。
【０１１４】
[00125]ブロック１１１２で、一次データストアが、二次データストアにデータが書き込まれたことの確認を受信する。この確認は、このデータをログに書き込んだ特定のパーティションに関連付けられた二次データストアにおけるフロントエンドサービスによって通信されることが可能である。さらに、この確認は、二次データストアに書き込まれた（または短に格納された）データの識別子を含むだけの電子メッセージであることが企図される。例えば、この確認は、ログに書き込まれたデータに関連付けられたメッセージＩＤを含むことが可能である。
【０１１５】
[00126]ブロック１１１４で、一次データストアがコミットＩＤを更新する。コミットＩＤは、この例では、二次側が受信されたデータをログに書き込んだことの確認を受信した結果、更新される。しかし、コミットＩＤは、二次データストアから確認を受信した結果、更新されないことも可能であるものと理解される。例えば、前に送信されたジオメッセージが二次データストアに書き込まれなかった（したがって、確認が戻されなかった）場合、コミットＩＤが反映するように更新され得る連続する順次のメッセージＩＤが利用できない可能性がある。さらに、ブロック１１１０において通信された注釈をつけられたデータが、二次側に書きこまれた連続するメッセージＩＤにおける以前のギャップを表すデータである可能性があり、したがって、ブロック１１１４の更新されたコミットＩＤは、そのデータに関する二次データストアからの確認の中で受け取られるメッセージＩＤを超えた範囲まで及ぶ可能性がある。
【０１１６】
[00127]ブロック１１１６で、一次側が、コミットＩＤを二次データストアに通信する。或る例示的な実施形態において、コミットＩＤは、二次データストアに送信されるデータの後続の部分と一緒に通信される（またはそのような部分で注釈をつけられる）ことが企図される。例えば、後続のジオメッセージが、更新されたコミットＩＤを含むことが可能である。代替として、更新されたコミットＩＤを有する専用の電子メッセージが、一次側から二次側に通信されることが企図される。このコミットＩＤは、二次側に既にスケジュールされている通信の結果、またはファンアウトタイプのメッセージの結果、通信されることが可能である。いずれにしても、更新されたコミットＩＤは、或る例示的な実施形態において一次データストアから二次データストアに通信される。
【０１１７】
[00128]図１１には示されないが、二次データストアは、一次データストアから二次データストアに通信されたデータをコミットすることが企図される。データのコミットは、一次データストアから二次データストアにコミットＩＤ、または後続のコミットＩＤが通信されたことの結果であることが可能である。二次データストアは、コミットされるべきデータに関連付けられた一意の識別子を包含する更新されたコミットＩＤが受信されると、二次データストアにおいてデータのコミットを許可することが可能である。
【０１１８】
[00129]図１２を参照すると、本発明の実施形態による、二次データストアから見た非同期レプリケーション方法１２００が示されている。ブロック１２０２で、二次データストアが、一次データストアからデータを受信する。受信されるデータは、ジオメッセージであることが可能である。さらに、受信されるデータは、レコード、メッセージＩＤ，コミットＩＤ、および／または以上に類する情報などの情報で注釈がつけられていることが可能である。前述したとおり、ＸＦＥなどのフロントエンドサービスが、着信するデータを受信し、このデータが二次データストア（または特定のパーティション）に適切であることを検証することが企図される。
【０１１９】
[00130]ブロック１２０４で、このデータが二次データストアのログに格納される。例えば、このデータは、ＧＭＬまたは他のストリームベースのログに書き込まれることが可能であり、このＧＭＬまたはログから、データは、コミットのために最終的に再生されることが可能である。メッセージＩＤおよびコミットＩＤを含むことが可能なこのデータは、或る例示的な実施形態において、ＧＭＬに書き込まれる。
【０１２０】
[00131]ブロック１２０６で、二次データストアから一次データストアに確認が通信される。この確認は、メッセージＩＤ、またはブロック１２０４でログに書き込まれたデータの別の識別子を含むことが可能である。或る例示的な実施形態において、この確認は、二次データストアのフロントエンドサービスによって通信される。
【０１２１】
[00132]ブロック１２０８で、コミットＩＤを有するメッセージが、一次データストアから受信される。このコミットＩＤは、ブロック１２０２でデータと一緒に以前に受信されたコミットＩＤからの更新されたコミットＩＤであることが可能である。例えば、ブロック１２０６の確認が受信されると、一次データストアが、ブロック１２０４で格納されたデータを反映して、二次データストアにおいてコミットされ得るものとしてコミットＩＤを更新することが可能である。前述したとおり、ブロック１２０８で受信されるメッセージは、一次データストアから二次データストアにさらなるデータが通信されたことの結果であることが可能である。代替として、ブロック１２０８で受信されるメッセージは、一次データストアから二次データストアに前のメッセージが通信されて以来、或る時間が経過したことの結果であることが企図される。
【０１２２】
[00133]ブロック１２１０で、ブロック１２０８で受信されたコミットＩＤが、二次データストアにおいてデータをコミットすることを許可するかどうかの決定が行われる。或る例示的な実施形態において、このコミットＩＤは、それまでにコミットされていないデータであるさらなるデータが、二次データストアにおいてコミットされることを許可する。コミットされるべきデータには、ブロック１２０２で受信されたデータが含まれることが可能である。前述したとおり、このコミットＩＤは、ブロック１２０２で受信されたデータに関連付けられたエポック番号およびシーケンス番号以上であるエポック番号およびシーケンス番号を含む可能性がある。この例示的な実施形態において、コミットＩＤを受信したことは、以前の何らかの時点で、二次データストアが、コミットＩＤまでを含む連続するエポック番号およびシーケンス番号のそれぞれに関して確認を供給したことを示す。このコミットＩＤは、以前に受信されたデータに注釈としてつけられていたのと同様の情報を含むことが可能である。例えば、このコミットＩＤは、以前にデータで注釈がつけられていたメッセージＩＤの情報と同様の情報を含むことが可能である。
【０１２３】
[00134]ブロック１２１２で、ブロック１２０２で受信されたデータが、二次データストアにコミットされる。或る例示的な実施形態において、ブロック１２０８で受信されたコミットＩＤが、データのコミットを許可している。
【０１２４】
[00135]示される様々な構成要素、および示されない構成要素の異なる多数の構成が、本発明の趣旨および範囲を逸脱することなく可能である。本発明の実施形態は、限定する意図ではなく、例示する意図で説明してきた。本発明の範囲を逸脱しない代替の実施形態が、当業者には明白となろう。当業者は、本発明の範囲を逸脱することなく、前述した改良を実施する代替の手段を開発することができる。いくつかの方法が特定の順序で説明されてきたが、それらの活動は、様々な順番および順序で実行されることが可能であることが企図される。
【０１２５】
[00136]いくつかの特徴および部分的組合せが有用であり、さらに他の特徴および部分的組合せと関連なしに使用されることが可能であるとともに、特許請求の範囲に含まれるものと企図される。様々な図にリストアップされるすべてのステップが、説明される特定の順序で実行される必要はない。
【０１２６】
[00137]示される様々な構成要素、および示されない構成要素の異なる多数の構成が、本発明の趣旨および範囲を逸脱することなく可能である。本発明の実施形態は、限定する意図ではなく、例示する意図で説明してきた。本発明の範囲を逸脱しない代替の実施形態が、当業者には明白となろう。当業者は、本発明の範囲を逸脱することなく、前述した改良を実施する代替の手段を開発することができる。いくつかの方法が特定の順序で説明されてきたが、それらの活動は、様々な順番および順序で実行されることが可能であることが企図される。
【０１２７】
[00138]いくつかの特徴および部分的組合せが有用であり、さらに他の特徴および部分的組合せと関連なしに使用されることが可能であるとともに、特許請求の範囲に含まれるものと企図される。様々な図にリストアップされるすべてのステップが、説明される特定の順序で実行される必要はない。
【図１】
0006047154.tif 000002
【図２】
0006047154.tif 000003
【図３】
0006047154.tif 000004
【図４】
0006047154.tif 000005
【図５】
0006047154.tif 000006
【図６】
0006047154.tif 000007
【図７】
0006047154.tif 000008
【図８】
0006047154.tif 000009
【図９】
0006047154.tif 000010
【図１０】
0006047154.tif 000011
【図１１】
0006047154.tif 000012
【図１２】
0006047154.tif 000013