(57)【要約】      （修正有）【課題】グラフとして編成される複製ノードを使用した分散アプリケーション状態の管理のための方法及び装置を提供する。【解決手段】分散システムであって、状態情報を複製するために確立されるノードの有向非巡回グラフ（ＤＡＧ）の構成マネージャを備える。構成マネージャは、コンセンサスプロトコルに少なくとも部分的に基づいて、ＤＡＧの特定のノードがＤＡＧから除去されるべきであると判定し、前記特定のノードはＤＡＧ内の特定の位置を占有し、構成マネージャに格納されるＤＡＧの構成の永続的な表現から、特定のノードを除去する。ＤＡＧの１つ以上の残りのノードに、特定のノードがＤＡＧから除去されたことを示す構成−デルタメッセージを、１つ以上の残りのノードにアプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送する。【選択図】図１
2018156683.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
状態情報を複製するために確立されるノードの有向非巡回グラフ（ＤＡＧ）の構成マネージャを実装するよう構成される１つ以上のコンピューティングデバイスを備え、前記構成マネージャは、
コンセンサスプロトコルに少なくとも部分的に基づいて、前記ＤＡＧの特定のノードが前記ＤＡＧから除去されるべきであると判定することと、前記特定のノードは前記ＤＡＧ内の特定の位置を占有し、
前記構成マネージャに格納される前記ＤＡＧの構成の永続的な表現から、前記特定のノードを除去することと、
前記ＤＡＧの１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧから除去されたことを示す構成−デルタメッセージを、前記１つ以上の残りのノードにアプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、前記システム。
【請求項２】
前記構成マネージャが、
前記特定のノードが前記ＤＡＧのメンバーとしてサービスに利用可能であるという判定に応答して、
前記特定のノードのために前記ＤＡＧ内の異なる位置を識別することと、
前記ＤＡＧの前記１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧ内の前記異なる位置で前記ＤＡＧに追加されたことを示す別の構成−デルタメッセージを、前記１つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、請求項１に記載のシステム。
【請求項３】
前記構成−デルタメッセージが、前記ＤＡＧの完全なメンバーシップを示さない、請求項１に記載のシステム。
【請求項４】
前記構成マネージャが、
前記特定のノードに前記ＤＡＧからのその除去の前に割り当てられる特定の役割を識別することと、前記役割は、アクセプタノード、中間ノード、またはコミッタノードのうちの１つを含み、
前記特定の役割を前記ＤＡＧの異なるノードに割り当てることと、前記異なるノードは、（ａ）前記除去の前の前記特定のノードの後続ノードまたは（ｂ）前記ＤＡＧのスタンバイノード、のうちの１つを含み、
を行うように構成される、請求項１に記載のシステム。
【請求項５】
前記構成マネージャが、
前記ＤＡＧ構成マネージャによる、異なるノードが前記ＤＡＧから除去されるべきであるという判定に応答して、前記ＤＡＧ構成マネージャから前記ＤＡＧの少なくとも第１の残りのノードに、前記異なるノードの前記ＤＡＧからの前記除去を示す第２の構成−デルタメッセージを、前記第１の残りのノードに状態遷移メッセージの処理を停止することを命令することなく、伝播するよう構成される、請求項１に記載のシステム。
【請求項６】
状態情報を複製するために確立されるノードのＤＡＧの構成マネージャを実装する１つ以上のコンピューティングデバイスによって、
コンセンサスプロトコルに少なくとも部分的に基づいて、前記ＤＡＧの特定のノードが前記ＤＡＧから除去されるべきであると判定することであって、前記特定のノードは前記ＤＡＧ内の特定の位置を占有する、前記判定することと、
前記構成マネージャに格納される前記ＤＡＧの構成の永続的な表現から、前記特定のノードを除去することと、
前記ＤＡＧの１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧから除去されたことを示す構成−デルタメッセージを、前記１つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、
を実行することを含む、方法。
【請求項７】
前記１つ以上のコンピューティングデバイスによって、
前記特定のノードが前記ＤＡＧのメンバーとしてサービスに利用可能であるという判定に応答して、
前記特定のノードのために前記ＤＡＧ内の異なる位置を識別することと、
前記ＤＡＧの前記１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧ内の前記異なる位置で前記ＤＡＧに追加されたことを示す別の構成−デルタメッセージを、前記１つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、
を実行することをさらに含む、請求項６に記載の方法。
【請求項８】
前記構成−デルタメッセージが、前記ＤＡＧの完全なメンバーシップを示さない、請求項６に記載の方法。
【請求項９】
前記１つ以上のコンピューティングデバイスによって、
前記特定のノードに前記ＤＡＧからのその除去の前に割り当てられる特定の役割を識別することであって、前記役割は、アクセプタノード、中間ノード、またはコミッタノードのうちの１つを含む、前記識別することと、
前記特定の役割を前記ＤＡＧの異なるノードに割り当てることであって、前記異なるノードは、（ａ）前記除去の前の前記特定のノードの後続ノードまたは（ｂ）前記ＤＡＧのスタンバイノード、のうちの１つを含む、前記割り当てることと、
を実行することをさらに含む、請求項６に記載の方法。
【請求項１０】
前記１つ以上のコンピューティングデバイスによって、
前記ＤＡＧ構成マネージャによる、異なるノードが前記ＤＡＧから除去されるべきであるという判定に応答して、前記ＤＡＧ構成マネージャから前記ＤＡＧの少なくとも第１の残りのノードに、前記異なるノードの前記ＤＡＧからの前記除去を示す第２の構成−デルタメッセージを、前記第１の残りのノードに状態遷移メッセージの処理を停止することを命令することなく、伝播すること、
を実行することをさらに含む、請求項６に記載の方法。
【請求項１１】
プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサで実行されるとき、状態情報を複製するために確立されるノードのＤＡＧの構成マネージャを実装し、前記構成マネージャが、
コンセンサスプロトコルに少なくとも部分的に基づいて、前記ＤＡＧの特定のノードが前記ＤＡＧから除去されるべきであると判定することと、前記特定のノードは前記ＤＡＧ内の特定の位置を占有し、
前記構成マネージャに格納される前記ＤＡＧの構成の永続的な表現から、前記特定のノードを除去することと、
前記ＤＡＧの１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧから除去されたことを示す構成−デルタメッセージを、前記１つ以上の残りのノードにアプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
【請求項１２】
前記構成マネージャが、
前記特定のノードが前記ＤＡＧのメンバーとしてサービスに利用可能であるという判定に応答して、
前記特定のノードのために前記ＤＡＧ内の異なる位置を識別することと、
前記ＤＡＧの前記１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧ内の前記異なる位置で前記ＤＡＧに追加されたことを示す別の構成−デルタメッセージを、前記１つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、請求項１１に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
【請求項１３】
前記構成−デルタメッセージが、前記ＤＡＧの完全なメンバーシップを示さない、請求項１１に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
【請求項１４】
前記構成マネージャが、
前記特定のノードに前記ＤＡＧからのその除去の前に割り当てられる特定の役割を識別することであって、前記役割が、アクセプタノード、中間ノード、またはコミッタノードのうちの１つを含む、識別することと、
前記特定の役割を前記ＤＡＧの異なるノードに割り当てることと、前記異なるノードは、（ａ）前記除去の前の前記特定のノードの後続ノードまたは（ｂ）前記ＤＡＧのスタンバイノード、のうちの１つを含み、
を行うように構成される、請求項１１に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
【請求項１５】
前記１つ以上のコンピューティングデバイスによって、
前記ＤＡＧ構成マネージャによる、異なるノードが前記ＤＡＧから除去されるべきであるという判定に応答して、前記ＤＡＧ構成マネージャから前記ＤＡＧの少なくとも第１の残りのノードに、前記異なるノードの前記ＤＡＧからの前記除去を示す第２の構成−デルタメッセージを、前記第１の残りのノードに状態遷移メッセージの処理を停止することを命令することなく、伝播することを実行することをさらに含む、請求項１１に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
近年、ますます多くの計算アプリケーションが分散環境に実装されている。所与の分散アプリケーションは、例えば、プロバイダネットワークのいくつかのデータセンターに広がる多数の物理及び／または仮想化サーバを利用し得、多くの異なる国の顧客に対応し得る。所与のアプリケーションに関与するサーバの数が増加するにつれて、及び／またはアプリケーションのネットワークの複雑性が増大するにつれて、様々な種類の障害イベント（プロセスもしくはサーバの見かけ上もしくは実際の障害、ネットワークメッセージレイテンシにおける著しい遅延、またはサーバのペア間の接続性の損失など）が、必然的に高い比率で引き起こされる。したがって、分散アプリケーションの設計者は、高水準のアプリケーション性能（例えば、アプリケーション要求に対する高スループット及び低応答時間）の維持を試みると同時に、アプリケーション構成状態の変更に応答するという課題に直面する。
【０００２】
状態情報を管理するための一部の従来の技術は、一貫した様式でアプリケーション状態を実装するために状態情報をロックすることを伴い得る。残念ながら、アプリケーション状態及び／またはデータのために使用されるロック機構は、アプリケーションのサイズ及び複雑性が増大すると、それ自体が性能ボトルネックとなり得ることが多い。他の技術は、ロックを回避し得るが、変更された状態情報をアプリケーションのコンポーネント間で伝播するために、通常動作を停止しなければならない場合がある。そのような「Ｓｔｏｐ−ｔｈｅ−ｗｏｒｌｄ」期間は、問題になり得るが、世界中の異なるタイムゾーンに広がった何百または何千もの顧客によるミッションクリティカルな作業負荷に使用されるレイテンシの影響を受けやすいアプリケーションの場合は特にそうである。
【図面の簡単な説明】
【０００３】
【図１】少なくともいくつかの実施形態に従う、複製ノードの動的ＤＡＧ（有向非巡回グラフ）がアプリケーション状態変更を管理するために確立される例示的なシステム環境を示す。
【図２ａ−２ｈ】少なくともいくつかの実施形態に従う、ＤＡＧのノードのうちの１つが失敗し得たという検出に応答して、複製ＤＡＧで実行され得る例示的な動作シーケンスをまとめて示す。
【図３】少なくともいくつかの実施形態に従う、アプリケーション状態記録、及び動的複製ＤＡＧで生成され得るＤＡＧ構成−デルタメッセージの例示的なコンポーネントを示す。
【図４】少なくともいくつかの実施形態に従う、メンバーノードがプロバイダネットワークの複数の可用性コンテナにわたって分散される例示的な複製ＤＡＧを示す。
【図５】少なくともいくつかの実施形態に従う、複数の複製ＤＡＧのノードがマルチテナント方式で単一ホストに実装され得る例示的な構成を示す。
【図６】少なくともいくつかの実施形態に従う、状態遷移要求の受信に応答して複製ＤＡＧのアクセプタノードで実行され得る動作の態様を示すフロー図である。
【図７】少なくともいくつかの実施形態に従う、承認された状態遷移メッセージの受信に応答して複製ＤＡＧの中間ノードで実行され得る動作の態様を示すフロー図である。
【図８】少なくともいくつかの実施形態に従う、承認された状態遷移メッセージの受信に応答して複製ＤＡＧのコミッタノードで実行され得る動作の態様を示すフロー図である。
【図９】少なくともいくつかの実施形態に従う、複製ＤＡＧの構成マネージャで実行され得る動作の態様を示すフロー図である。
【図１０】少なくともいくつかの実施形態に従う、構成マネージャからの構成−デルタメッセージの受信に応答して複製ＤＡＧのメンバーノードで実行され得る動作の態様を示すフロー図である。
【図１１ａ−１１ｈ】少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧで実行され得る例示的な動作シーケンスをまとめて示す。
【図１２】少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧなどの状態複製グループのコミッタノードで実行され得る動作の態様を示すフロー図である。
【図１３】少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧなどの状態複製グループの非コミッタノードで実行され得る動作の態様を示すフロー図である。
【図１４】少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧなどの状態複製グループの構成マネージャで実行され得る動作の態様を示すフロー図である。
【図１５】少なくともいくつかの実施形態に従う、複数のデータストアへの書き込みを含み得るトランザクションをサポートする永続的な変更ログを含む例示的なシステム環境を示す。
【図１６】少なくともいくつかの実施形態に従う、複製ＤＡＧを使用した永続的な変更ログの例示的な実施態様を示す。
【図１７】少なくともいくつかの実施形態に従う、ログサービスのクライアントによってサブミットされ得るトランザクション要求記述子の例示的なコンポーネント要素を示す。
【図１８】少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャでの読み取り−書き込みコンフリクト検出の実施例を示す。
【図１９】少なくともいくつかの実施形態に従う、ログサービスで実行され得る制御プレーン動作の態様を示すフロー図である。
【図２０】少なくともいくつかの実施形態に従う、クライアントから受信されるトランザクション要求に応答してログサービスで実行され得る動作の態様を示すフロー図である。
【図２１】少なくともいくつかの実施形態に従う、それぞれの特殊な一貫性目標を達成するために使用され得るトランザクション要求記述子の実施例を示す。
【図２２】少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャで受信されるトランザクション要求と関連付けられた重複排除制約の施行の実施例を示す。
【図２３】少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャで受信されるトランザクション要求と関連付けられたシーケンシング制約の施行の実施例を示す。
【図２４】少なくともいくつかの実施形態に従う、複数の論理制約記述子を含むトランザクション要求記述子の実施例を示す。
【図２５】少なくともいくつかの実施形態に従う、１つ以上の論理制約を示すトランザクション要求に応答してログサービスで実行され得る動作の態様を示すフロー図である。
【図２６】少なくともいくつかの実施形態で使用され得る例示的なコンピューティングデバイスを示すブロック図である。
【０００４】
実施形態は、いくつかの実施形態及び説明図のために例として本明細書に記載されるが、実施形態が、記載される実施形態または図面に限定されないことを当業者は認識するものとする。図面及びそれに対する詳細説明は、実施形態を開示される特定の形態に限定することが意図されるものではなく、むしろ、添付の特許請求の範囲によって定義される趣旨及び範囲内に入るすべての修正形態、均等物、ならびに代替物を網羅することが意図されることを理解するべきである。本明細書に使用される見出しは、構成の目的のみのためであり、説明の範囲または特許請求の範囲を限定するために使用されることを意味しない。本出願全体にわたって使用される場合、「ｍａｙ」という単語は、義務的な意味（即ち、しなければならないことを意味する）よりも、許容的な意味（即ち、そうする潜在性を有することを意味する）に使用される。同様に、「ｉｎｃｌｕｄｅ」、「ｉｎｃｌｕｄｉｎｇ」、及び「ｉｎｃｌｕｄｅｓ」という単語は、含むことを意味するが、限定することを意味しない。
【発明を実施するための形態】
【０００５】
グラフとして編成される複製ノードを使用した分散アプリケーション状態の管理のための方法及び装置の様々な実施形態、ならびにトランザクション管理のために使用され得るログサービスを実装するためにそのようなグラフを配置することの様々な実施形態が記載される。いくつかの実施形態に従って、フォールトトレラント分散アプリケーションを構築するための複製状態機械が、有向非巡回グラフ（ＤＡＧ）内に配置される複数の複製ノードを使用して実装され得る。いくつかの実施態様において、ある特定の複製ＤＡＧは、１つ以上のアクセプタノード、１つ以上のコミッタノード、アクセプタノードからコミッタノードに通じるＤＡＧエッジを含む複製経路に沿ってそれぞれが位置する０個以上の仲介ノード、及びノード障害の発生時に他のタイプのノードのうちの１つの役割を素早く引き継ぐように構成される０個以上のスタンバイノードを含み得る。複製ＤＡＧのアクセプタ、仲介、及びスタンバイノードはまとめて、本明細書では「非コミッタ」ノードと称され得る。「アクセプタ」、「仲介」「コミッタ」、及び「スタンバイ」は、ＤＡＧノードが仮定し得る役割のセットとしてまとめて称され得る。いくつかの実施形態において、アクセプタノードはまた、ＤＡＧの「ヘッド」ノードと称され得、コミッタノードはまた、「テール」ノードと称され得る。
【０００６】
概して、少なくともいくつかの実施形態において、ある特定の複製ＤＡＧの各ノードは、少なくともある特定のアプリケーションの状態情報を、例えば、ローカルディスクまたは他の同様のストレージデバイスに書き込まれる状態遷移記録の形態で、複製することを担い得る。アプリケーション状態情報は、本明細書では複製経路またはコミット経路と称される、ＤＡＧのアクセプタノードからコミッタノードへのエッジのセットに沿って伝播され得る。ＤＡＧ内で伝播される各状態遷移メッセージは、対応する状態遷移要求が処理された（例えば、アクセプタノードで）順番を示すそれぞれのシーケンス番号または論理タイムスタンプを含み得る。シーケンス番号は、異なる実施形態において様々な技術のいずれかを使用して実装され得、例えば、アクセプタノードによって維持される簡素なＮ−ビットカウンタが使用され得るか、またはＤＡＧの構成マネージャなどのＤＡＧの管理コンポーネントによって生成される単調増加論理タイムスタンプ値（必ずしも時刻時計に関連しない）が使用され得る。ある特定の状態遷移記録が、例えば、十分な数の状態遷移記録のレプリカが複製経路に沿って保存された後に、コミッタノードに達するとき、この遷移は明示的または暗示的にコミットされ得る。ある時点におけるアプリケーションの状態は、いくつかの実施形態において、選択されたシーケンス番号までのコミットされた状態遷移すべての結果の論理蓄積として判定され得る。構成マネージャは、下に記載されるように構成−デルタメッセージを非同期的にＤＡＧノードに伝播することによって、ＤＡＧ構成に対する変更（例えば、ノードが、障害に起因してＤＡＧを離脱するとき、またはＤＡＧに参加／再参加するとき）を管理することを担い得る。いくつかの実施形態において、各複製ノードは、それぞれの決定論的有限状態機械を実装し得、構成マネージャは、別の決定論的有限状態機械を実装し得る。ＤＡＧ構成変更を管理するために使用されるプロトコルは、様々な実施形態においてＤＡＧの可用性または「ライブネス」を最大限にするように設計され得る。例えば、ＤＡＧノードは、少なくともいくつかの実施形態において、それらのＤＡＧ構成のビューを同期する必要がない場合があり、故に、アプリケーション状態遷移処理のために使用されるプロトコルは、複製経路に沿ったノードのうちのいくつかが他のノードとは異なる現在のＤＡＧ構成のビューを有する場合でも、正しく動作し得る。故に、１つの簡素な例示的なシナリオにおいて、ＤＡＧが順にノードＡ、Ｂ、Ｃ、及びＤからなる（即ち、複製経路Ａ−Ｂ−Ｃ−Ｄを有する）という仮定の下に、ＤＡＧの１つのノードＡがその状態遷移処理の役割を実行し続ける一方で、別のノードＤが、構成−デルタメッセージの結果としてノードＣがＤＡＧを離脱したことをすでに伝えられ、したがってＤＡＧのＤのビューを変更された経路Ａ−Ｂ−Ｄを含むように更新したという場合があり得る。構成マネージャは、少なくともいくつかの実施形態において、現在のＤＡＧ構成に関するノードの潜在的に異なるビューにもかかわらず、状態遷移ノードの処理を停止するようにＤＡＧノードに要求する必要がない場合がある。故に、一部の状態複製技術において必要とされ得る「Ｓｔｏｐ−ｔｈｅ−ｗｏｒｌｄ」構成同期期間のタイプは、本明細書に記載される種類の複製ＤＡＧを使用するときは必要とされない場合がある。
【０００７】
大半の動作条件下で、ＤＡＧ構成変更情報を伝播するために使用される技術は、ノード障害／退出、ノード参加、もしくはノード役割変更と関連付けられた任意のダウンタイムを最小限にする、または排除すると同時に、最終的には、様々なメンバーノードにおいてＤＡＧ構成の収束された一貫性のあるビューをもたらし得る。状態管理プロトコルの正当性の形式的数学的証明は、少なくともいくつかの実施形態において利用可能であり得る。少なくともいくつかの実施形態において、複製ＤＡＧのプロトコルは、偽陽性障害検出を処理するのに特に効果的であり得る。例えば、上の実施例において、ノードＤは、ノードＣが実際には失敗していなかったにもかかわらず、構成マネージャによってノードＣが失敗したと伝えられている場合がある。故に、状態遷移は、偽陽性障害検出から暫くの間、Ｃの退出を示す構成−デルタメッセージがＡ、Ｂ、及びＤで受信されるまでの間、依然としてＣによって（ならびにその隣接のＢ及びＤによって）正確に処理され得、状態が複製されているアプリケーションが、偽陽性障害検出にもかかわらず進行することを可能にする。それがＤＡＧから除去されたことが最終的に伝えられると、Ｃは、それが実際にはサービスに利用可能であることを構成マネージャに示し得、ＤＡＧに再参加することを許可され得る（例えば、スタンバイノードとして、または修正された複製経路に沿った何らかの他の位置で）。
【０００８】
いくつかの実施形態において、アクセプタノードは、複製ＤＡＧのクライアントからアプリケーション状態遷移要求を受信することと、ある特定の要求された遷移が最終的なコミットを受理されるべきかどうかを判定することと、受理された状態遷移記録のローカルレプリカを格納することと、受理された状態遷移記録をコミッタノードに向かってＤＡＧの複製経路に沿って隣接ノードへ伝送することとを担い得る。使用事例によっては、状態遷移記録は、いくつかの実施形態において、書き込みペイロードを含み得、例えば、アプリケーション状態がデータベースの内容を含む場合、状態遷移記録は、状態遷移に対応するトランザクション中に書き込まれるバイトを含み得る。アクセプタノードはまた、少なくともいくつかの実施形態において、受理された状態遷移のシーケンス番号を判定または生成することを担い得る。仲介ノードは、受理された状態遷移記録のローカルレプリカを格納すること、及び受理された状態遷移を示すメッセージをコミッタノードへの経路に沿って次のノードへ伝送／転送することを担い得る。コミッタノードは、ローカルストレージに状態遷移記録のその独自のレプリカを、例えば、記録がコミットされたという指標と共に、格納し得る。対応する状態遷移がコミットされたことを示す記録は、本明細書では「コミット記録」と称され得る一方、対応する状態遷移が受理されたが、必ずしもまだコミットされていないことを示す記録は、「受理記録」と称され得る。いくつかの実施形態において、及びアプリケーションのニーズによって、コミッタノードは、状態遷移を要求したクライアントへのコミット応答の伝送（例えば、アクセプタノードを介して）を開始し得る。少なくとも１つの実施形態において、コミッタノードは、状態遷移がコミットされたことを、複製経路に沿ってノードの一部またはすべてに通知し得る。いくつかの実施形態において、コミットの指標がＤＡＧノードで受信されると、今コミットされた状態遷移の受理記録は、対応するコミット記録によって置き換えられるか、それがこれからコミット記録を表すように修正され得る。他の実施形態において、所与のＤＡＧノードは、同じ状態遷移についての受理記録及びコミット記録の両方を、例えば、それぞれのシーケンス番号と共に、格納し得る。いくつかの実施態様において、別個のコミット記録セット及び受理記録セットが、様々なＤＡＧノードでローカルストレージに格納され得る一方、他の実施態様においては、一種類のみの記録（受理またはコミット）が、所与のＤＡＧノードで所与の状態遷移について一度に格納され得る。
【０００９】
構成マネージャは、いくつかの実施形態において、ＤＡＧ構成に対する変更を受理すること及びその変更をＤＡＧノードに伝播することを担う、ＤＡＧの構成情報の信頼できるソースとして指定され得る。少なくともいくつかの実施形態において、構成マネージャはそれ自体が、障害に対するリカバリ力を持つように、例えば、コンセンサスを介してＤＡＧ構成変更（ノードの除去または追加など）をまとめて承認し、複数の構成マネージャストレージデバイスでＤＡＧ構成を複製するノードのフォールトトレラントクラスタとして、設計され得る。「構成−デルタ」という名称によって暗示されるように、構成マネージャによってＤＡＧノードに送信されるメッセージは、特定の変更（例えば、ＤＡＧに参加する、もしくはＤＡＧを離脱するノードによって引き起こされる変更、またはＤＡＧの既存ノードの役割／位置に対する変更）の指標のみを含み、ＤＡＧ構成の表現を全体として含む、またはＤＡＧのメンバーシップ全体をリストする必要がない場合がある。故に、構成−デルタメッセージの所与の受信者は、それがこれまでに受信した構成−デルタメッセージの特定セットまたはシーケンスに基づいて、ＤＡＧ構成のその独自のビューを構築することが予測され得る。いくつかの実施態様において、シーケンス番号は、例えば、構成−デルタメッセージの受信者が任意の以前の構成−デルタメッセージを見逃しているかどうかを判定することを可能にするため、構成−デルタメッセージにも割り当てられ得る。構成マネージャは、異なるＤＡＧノードによる構成−デルタメッセージを受信する順番または相対的なタイミングを保証することを試みない場合があるため、ＤＡＧ構成の現在のビューは、いくつかの実施形態において、上の実施例によって示されるように少なくともある期間は、異なるノードでは異なり得る。
【００１０】
一実施形態に従って、構成−デルタメッセージに応答してＤＡＧノードが行う措置は、構成変更が受信者のすぐ隣に影響を与えるかどうかに基づいて異なり得る。ＤＡＧがアクセプタノードＡ、仲介ノードＢ、及びコミッタノードＣを時間点Ｔ０で含み、初期の複製経路Ａ−Ｂ−Ｃを有する別の例示的なシナリオを検討する。時間Ｔ１で、ＤＡＧの構成マネージャＤＣＭ１が、例えば、見かけ上の障害または接続性の損失の結果として、ＢがＤＡＧを離脱したことに気付く。ＤＣＭ１は、状態遷移要求処理におけるいかなる停止も要求することなく、それぞれの非同期型構成−デルタメッセージＤ１及びＤ２をそれぞれ残りのノードＡ及びＣに送信し得る。Ａが時間Ｔ３でＤ１を受信する前に、Ｃが時間Ｔ２でＤ２を受信する場合、Ａは、いくらかの時間間隔（Ｔ３〜Ｔ２）の間、Ｂに向けられる状態遷移メッセージを送信し続け得る（しかしながら、Ｎが実際に失敗している場合、Ａによって送信されるメッセージは、Ｂによって処理されない場合がある）。同様に、ＣがＴ３でＤ２を受信する前に、ＡがＴ２でＤ１を受信する場合、Ｃは、ＣがＢのＤＡＧからの離脱に気付くまでのいくらかの時間（Ｔ３〜Ｔ２）の間、それがＢから受信する、Ｂが失敗したときにインフライト状態だったメッセージを処理し続け得る。ノードＡがＤ１を受信すると、それがまだＣからの連絡を受けていなかった場合、ノードＡは、Ｃへの接続性を古い方の複製経路（Ａ−Ｂ−Ｃ）と置き換わる新しく構成された複製経路（Ａ−Ｃ）内のその新しい直近の後続として確立し得る。同様に、ＣがＤ２を受信すると、それは、Ａへの接続性をその新しい直近の先行として確立し得（ＡがまだＣに連絡していなかった場合）、少なくともいくつかの実施形態において、Ｃは、ＡからＢへ伝送されたがまだＣには達していない状態遷移記録の再伝送についてＡに要求をサブミットし得る。例えば、Ｃは、再伝送要求内に、それがこれまでに受信した状態遷移記録の最大のシーケンス番号ＨＳＮ１を含み得、ＡがＨＳＮ１より大きいシーケンス番号を有するいかなる状態遷移記録も再伝送することを可能にする。
【００１１】
少なくともいくつかの実施形態において、構成マネージャは、ＤＡＧノードが見かけ上不健全になったときを示すことを健全性検出機構またはサービスに依存し得、見かけ上不健全なノードのＤＡＧ構成からの除去をもたらす。分散環境内の少なくともいくつかの健全性検出機構は、ハートビート、またはノード健全性状態に関して常に適切な判断をするわけではない他の低次の機構に依存し得る。同時に、構成マネージャは、その構成−デルタメッセージを送信する前に実際のノード障害を確認するのを無期限に待つ立場にない場合があり、むしろ、それは、ノード障害の可能性が何らかの閾値（例えば、８０％または９０％）を超えることを判定したときに構成−デルタメッセージを伝送し得るか、いくつかの他の発見的方法を使用して、ＤＡＧ構成変更及び対応するデルタメッセージをトリガし得る。先に述べたように、複製ＤＡＧで使用される状態管理プロトコルは、例えば、「Ｓｔｏｐ−ｔｈｅ−ｗｏｒｌｄ」停止を回避することによって、偽陽性障害「検出」の悪影響を緩和し得る。結果として、複製ＤＡＧが用いられるとき、他の状態複製技術を使用した場合に許容されていたであろうものより高速／安価な（潜在的に信頼性が低いが）障害検査機構を使用することが可能であり得る。
【００１２】
少なくとも１つの実施形態において、連携停止技術が複製ＤＡＧのために実装され得る。特定の条件下で、例えば、複数のＤＡＧリソースまたはノードに関与する大規模障害イベントが検出される場合、構成マネージャは、ＤＡＧの生存ノードに、これ以上の状態遷移を処理することを中止し、それらのアプリケーション状態情報を互いに同期させ、同期されたアプリケーション状態情報をそれぞれのストレージ場所で格納し、かつ再稼働命令を待つように命令し得る。いくつかの実施態様において、アプリケーション状態をローカルに保存した後、ＤＡＧノードはそれぞれ、クリーンシャットダウン及び再起動を実行し、それらがサービスに利用可能であることを示すために再起動後に構成マネージャにレポートし得る。構成マネージャによって停止コマンドが発行される前に失敗したノードが、それがサービスに利用可能であるとレポートする場合、いくつかの実施形態において、構成マネージャは、そのようなノードに、アプリケーション状態に関して最新の状態であることが知られる別のノードとそのアプリケーション状態を同期させる（例えば、構成マネージャによって）ように命令し得る。構成マネージャは、十分な数のノードが（ａ）サービスに利用可能、及び（ｂ）アプリケーション状態に関して最新の状態になるまで待機し、（潜在的に新しい）ＤＡＧ構成を判定し、ＤＡＧ構成を構成のメンバーノードに示す再稼働メッセージを送信することによってＤＡＧを再稼働し得る。そのような制御及び連携停止／再起動ストラテジは、いくつかの実施形態において、別の方法で可能であり得たものよりも、大規模障害イベント後により迅速かつ信頼できるアプリケーションリカバリを可能にし得る。連携停止アプローチはまた、大規模障害に対応する以外の目的、例えば、複数の複製ノードからのアプリケーション状態情報の高速並列バックアップ／スナップショットのために、使用され得る。
【００１３】
上記のタイプのＤＡＧベースの複製状態機械は、様々な実施形態において様々な異なるアプリケーションを管理するために使用され得る。いくつかの実施形態において、ログサービスが実装され得、ここでは、１つ以上のデータストア（例えば、リレーショナルまたは非リレーショナルデータベース）が、複製ＤＡＧを使用して実装される永続的な変更ログのインスタンスを介してトランザクション管理のために登録され得る。下にさらに詳細に記載されるように、楽観的並行性制御機構が、いくつかの実施形態において、そのようなログベースのトランザクションマネージャによって使用され得る。ログサービスのクライアントは、１つ以上のソースデータストアで読み取り動作を実行し、所与のトランザクション内で書き込み動作が実行されるべき１つ以上のデータストアの場所を（例えば、読み取りの結果に基づいて）判定し得る。読み取りセット、書き込みセット、並行性制御要件、及び／またはトランザクション上の論理制約の表現を含むトランザクション要求記述子は、ログサービスのコンフリクト検出器（例えば、対応する複製ＤＡＧのアクセプタノードと関連付けられたコンフリクト検出ロジック）にサブミットされ得る。コンフリクト検出器は、以前にコミットされたトランザクションの記録をトランザクション記述子の内容と一緒に使用して、トランザクション要求がコミットを受理されるかどうかを判定し得る。トランザクションがコミットを受理される場合、対応するコミット記録の複製が、ログのために確立されるＤＡＧのいくつかの複製ノードで開始され得る。故に、ログの所与のレプリカに挿入される記録は各々が、それぞれのアプリケーション状態遷移を表し得る。例えば重複排除要件、トランザクション間コミットシーケンシング要件などのいくつかの異なる論理制約が、異なる実施形態において指定され、ログベースのトランザクションマネージャによって施行され得る。そのようなログベースのトランザクション管理機構は、いくつかの実施形態において、例えば、基礎となるデータストアが１つを超える書き込みに関与するトランザクションの原子性をネイティブにサポートし得ないとしても、所与のトランザクションの書き込みセットが複数の書き込み場所を含む、マルチアイテムトランザクション、またはマルチデータベーストランザクションのサポートを可能にし得る。コミットされたトランザクションに対応する書き込みは、少なくともいくつかの実施形態において、関連のあるデータストアに非同期的に適用され得、例えば、トランザクションがコミットされたという記録は、対応する書き込みがターゲットデータストアに伝播される前のあるときに永続的な変更ログに保存され得る。故に、永続的な変更ログは、少なくともいくつかの実施形態において、ログが状態変更を記録した後にアプリケーション状態に追いつくデータストアと共に、アプリケーション状態の信頼できるソースになり得る。
【００１４】
複製ＤＡＧはまた、複製されたデータベースインスタンスのため、高スループットデータストリームを管理するため、及び／または様々な実施形態における分散されたロック管理のために使用され得る。いくつかの実施形態において、複製ＤＡＧは、コンピュートインスタンスなどの仮想化リソースに対する状態変更を管理するために、プロバイダネットワーク内で使用され得る。少なくともいくつかの実施形態において、コミットされた書き込みを登録されたデータストア（書き込みの結果がデータストアのそれぞれの読み取りインターフェースを介して読み取られ得る）に伝播することに加えて、ログサービスはまた、その独自の別個のアクセスインターフェースを定義及び実装し得、関係するクライアントが、所与のクライアントアプリケーションのために格納される記録の少なくとも一部分を永続的なログインスタンスから直接読み取ることを可能にする。
【００１５】
例示的なシステム環境
図１は、少なくともいくつかの実施形態に従う、複製ノードの動的ＤＡＧ（有向非巡回グラフ）がアプリケーション状態変更を管理するために確立される例示的なシステム環境を示す。示されるように、システム１００において、アプリケーション１６０の状態遷移を管理するために確立される複製ＤＡＧ１４０は、アクセプタノード１１０、中間ノード１１２、及びコミッタノード１１４の３つのノードを有する複製経路を含む。加えて、ＤＡＧ１４０は、描写された実施形態において、必要な場合には他のノードのうちのいずれかの役割を引き継ぐために利用可能なスタンバイノード１３０を含む。ノードの他の組み合わせが、他の複製ＤＡＧに配置され得、例えば、１つを超える中間ノードがいくつかのアプリケーションには使用され得、中間ノードが他のアプリケーションには使用されない場合があり、またはスタンバイノードが確立されない場合がある。ＤＡＧ１４０の構成に対する変更は、下に記載されるように、フォールトトレラントＤＡＧ構成マネージャ（ＤＣＭ）１６４によって連携され得る。
【００１６】
アクセプタノード１１０は、描写された実施形態において、ＡＰＩ（アプリケーションプログラミングインターフェース）などの１つ以上のプログラムインターフェースを介してアプリケーション状態遷移要求（ＳＴＲ）１５０を受信し得る。アクセプタノード１１０は、アプリケーション依存ルールまたはロジックを使用して、要求された遷移を最終的なコミットのために受理し得るか、または要求を拒否し得る。遷移が受理される場合、例えば、その遷移が他の受理された遷移に対して受理された順番を示す、シーケンス番号が、アクセプタノード１１０によって生成され得る。上に述べたように、いくつかの実施形態において、シーケンス番号は、受理された遷移ごとにインクリメントされるカウンタを含み得る一方で、他の実施形態においては、構成マネージャによって提供される論理クロックまたはタイムスタンプ値が使用され得る。対応するシーケンス番号を含むアプリケーション状態記録（ＡＳＲ）１７２Ａのコレクション１７６Ａは、アクセプタノードによってローカル永続ストレージに格納され得る。いくつかの実施形態において、アプリケーション状態記録は、遷移受理記録及び遷移コミット記録の両方を含み得る（コミット記録は、アクセプタノードが、対応する遷移がコミッタノードによってコミットされたことを通知されて初めて格納される）。他の実施形態において、複製経路に沿った少なくともいくつかのノードは、受理記録のみを格納し得る。受理を示す状態遷移記録を格納した後、アクセプタノードは、承認を示す状態遷移メッセージ（ＳＴＭ）１５２Ａを、複製経路に沿って、例証された構成では中間ノード１１２など、その後続ノードに伝送し得る。中間ノードは、対応するＡＳＲのその独自のコピー、１７２Ｂを、シーケンス番号と一緒に、そのローカルＡＳＲコレクション１７６Ｂに格納し得る。中間ノードは、その独自のＳＴＭ１５２Ｂを、現在の複製経路に沿って、隣に、例えば、描写された実施形態ではコミッタノード１１４に伝送し得る。少なくともいくつかの実施態様において、ＳＴＭ１５２は、ノードがすでにＡＳＲのレプリカを格納したという指標を含み得、例えば、メッセージ１５２Ｂは、受理を示すアプリケーション状態記録のそれぞれのレプリカがそれぞれノード１１０及び１１２ですでに格納されていることをコミッタノードに示し得る。
【００１７】
アプリケーション状態記録の十分な数のレプリカ（十分であるレプリカの正確な数は、アプリケーション１６０の構成パラメータであり得る）が格納されたというコミッタノードでの判定に応答して、遷移がコミットされ得る。コミッタノードのＡＳＲコレクション１７６Ｃは、描写された実施形態において、トランザクションコミットの記録（承認に対立するものとして）を含み得、故に、ＡＳＲ１７２Ｃは、単なる受理ではなくコミットを示し得る。少なくともいくつかの実施形態において、コミッタノード１１６は、指標または通知をアクセプタノード及び／または中間ノードに伝送し得、遷移がコミットされたことを示す。他の実施形態において、アクセプタ及び／または中間ノードは、どの遷移がコミットされたかを判定するように要求を（例えば、定期的に）コミッタノード１１６にサブミットし得、かつそれに従ってそれらのＡＳＲコレクションを更新し得る。いくつかのアプリケーションでは、明示的コミットが必要とされ得ないため、格納されるコミットの指標がない場合があり、経路に沿ったＤＡＧノードのそれぞれは、受理を示すそれぞれのアプリケーション状態記録を単に格納し得る。描写された実施形態において、コミット後ＳＴＭ１５４が、コミッタノードからスタンバイノード１３０に伝送されて、スタンバイノードがそのＡＳＲコレクション１７６Ｄを更新することを可能にし得（例えば、コミットＡＳＲ１７２Ｄを格納することによって）、その結果、スタンバイノードが稼働されて別のＤＡＧノードと置き換わる場合、そのアプリケーション状態情報は、コミッタノードのものと一致する。スタンバイノードが最後にコミットされたアプリケーション状態に合わせて最新状態に保たれるという事実は、いくつかの実施形態において、構成マネージャが、スタンバイノードを、例えば、アクセプタノード、中間ノード、またはコミッタノードの他の３つの役割のうちのいずれかのために、素早く稼働させることを可能にし得る。
【００１８】
フォールトトレラントＤＡＧ構成マネージャ（ＤＣＭ）１６４は、描写された実施形態において、必要に応じて、ＤＡＧ構成またはメンバーシップに対する変更を構成−デルタメッセージ１６６（例えば、メッセージ１６６Ａ、１６６Ｂ、１６６Ｃ、及び１６６Ｄ）の形態でＤＡＧノードに伝播することを担い得る。所与のＤＡＧノードが、例えば、障害の結果として、ＤＡＧ１４０を離脱するとき、対応する構成−デルタメッセージ１６６は、例えば、ＤＣＭ１６４によって１つ以上の生存ノードに送信され得る。同様に、新しいノードがＤＡＧに参加するとき（例えば、障害からのリカバリ後、またはアプリケーション１６０の耐久性レベルを増大させるため）、参加イベント、ＤＡＧ内の参加ノードの位置、及び／または参加ノードに付与される役割（例えば、アクセプタ、中間、コミッタ、またはスタンバイ）を示す対応する構成−デルタメッセージは、ＤＣＭによってＤＡＧの１つ以上の現在のメンバーノードに伝送され得る。構成−デルタメッセージ１６６は、互いに関して非同期であり得、かつアプリケーション状態の複製全体に影響を与えることなく任意の順番でそれらのターゲットによって受信され得る。ＤＡＧの各ノードは、他のノードが有し得る構成ビュー１７４とは独立に、受信した構成−デルタメッセージに基づいてＤＡＧ構成のその独自のビュー１７４を構築することを担い得る。故に、例えば、それぞれのノード１１０、１１２、１１４、及び１３０で受信される異なる構成−デルタメッセージの相対的な順番及び／またはタイミングが理由で、構成ビュー１７４Ａ、１７４Ｂ、１７４Ｃ、及び１７４Ｄのうちの１つ以上は、いくつかの実施形態において、少なくとも短い時間間隔の間、異なり得る。少なくともいくつかの実施形態において、各ＤＡＧノードは、受信されるいくつかの構成−デルタメッセージの表現または内容をそれぞれのローカル構成変更リポジトリに格納し得る。描写された実施形態において、ＤＣＭ１６４は、ＤＡＧノードによるアプリケーション状態処理におけるＳｔｏｐ−ｔｈｅ−ｗｏｒｌｄ停止を施行し得ず、例えば、それは、構成−デルタメッセージのタイミングまたは基礎となるＤＡＧ構成変更にかかわらず、ノードがアプリケーション状態遷移メッセージを受信及び処理し続けることを可能にし得る。ＤＡＧノードが構成−デルタメッセージに応答する様式の実施例は、図２ａ〜２ｈに関して以下に説明される。
【００１９】
図１は、単一の線形複製経路を有するＤＡＧまたは、各タイプにつき１つのノードを有する「鎖」を示すが、少なくともいくつかの実施形態において、複製ＤＡＧは、分岐した経路及び／または各役割のために複数のノードを含み得ることに留意されたい。つまり、いくつかのアクセプタ、中間、コミッタ、及び／またはスタンバイノードが、同じＤＡＧ内に共存し得、ＤＡＧの複製経路は、参加ノード（そこで複数の先行ノードからの遷移要求が受信されるノード）、または分割ノード（そこから遷移要求が複数の後続ノードに送信されるノード）を含み得る。アクセプタノード１１０またはコミッタノード１１６のいずれかが要求された状態遷移を拒否する場合（例えば、アクセプタノードが、アプリケーション特定の受理基準のセットが満たされないと判断するか、またはコミッタノードが受理された状態遷移要求メッセージを受信するまでに、受理された遷移のレプリカが作成された数が不十分であることのいずれかのため）、いくつかの実施形態において、遷移を要求したクライアントは、遷移がコミットされなかったことを通知され得る。次いで、クライアントは、遷移をリトライし得るか（例えば、別の状態遷移要求をサブミットすることによって）、または要求を完全に放棄することを決定し得る。いくつかの実施態様において、中間ノードはまた、遷移要求を中断することが許され得る。
【００２０】
図２ａ〜２ｈは、少なくともいくつかの実施形態に従う、ＤＡＧのノードのうちの１つが失敗し得たという検出に応答して、複製ＤＡＧで実行され得る例示的な動作シーケンスを示す。図２ａは、３つのノード２０２Ａ、２０２Ｂ、及び２０２Ｃを含むＤＡＧ構成の初期状態を示す。状態遷移要求（ＳＴＲ）１５０は、ノード２０２Ａで受信される。受理された状態遷移記録は、ノード２０２Ａ（ＳＴＲのローカル承認後）及び２０２Ｂ（ノード２０２Ｂが承認されたＳＴＭ２１１Ａを受信した後）で複製され、２０２Ｃ（ノード２０２Ｃが承認されたＳＴＭ２１１Ｂを受信した後）でコミットされる。ＤＣＭ１６４は、ノード２０２Ｂが見かけ上失敗したことを示す健全性状態更新２５０を受信し得る。ノード２０２Ｂの状態に関する健全性状態更新は、異なる実施形態において、様々なソースのうちのいずれかから、例えば、他のノード（２０２Ａまたは２０２Ｂ）のうちの１つから、またはＤＡＧの外部の健全性監視サービス（例えば、ＤＡＧノードがインスタンス化されるプロバイダネットワークで確立される汎用リソース健全性監視サービス）から受信され得る。少なくとも１つの実施態様において、健全性状態更新は、ハートビートメッセージをＤＡＧノードに定期的に送信し、かついくつかの連続するハートビートメッセージに対して許容できる時間窓内に応答が受信されない場合、所与のノードが不健全状態にあると判定する監視プロセスなどのＤＭＣ１６４自体のサブコンポーネントによって生成され得る。
【００２１】
描写された実施形態において、ＤＣＭ１６４は、健全性状態更新に基づいて、ノード２０２ＢがＤＡＧから除去されるべきであること、及び新しいノード２０２Ｄがノード２０２Ｃの後続として追加されるべきであることを決定し得る。新しいノードは、例えば、ＤＡＧの新しいコミッタノードとして稼働状態に昇格されているスタンバイノードを含み得る。ＤＡＧの新しい構成を決定し（即ち、これよりＤＡＧは複製鎖２０２Ａ−２０２Ｃ−２０２Ｄを含むこととなる）、永続的なリポジトリ内に新しい構成の表現を保存した後、ＤＣＭ１６４は、ノード２０２Ｄにノード２０２Ｃの後続としてＤＡＧに参加するようにコマンド２４１を発行し得る。少なくともいくつかの実施形態において、２０２ＢなどのノードのＤＡＧからの除去は、必ずしも置換ノードの即時追加を伴わない場合がある（特に、除去後にオンラインかつ接続されたままであるＤＡＧノードの数が、状態が複製されているアプリケーションによって必要とされる最小数のノードを超過する場合）ことに留意されたく、ノード２０２Ｄの追加は、単に、ＤＣＭがノード障害（または少なくとも見かけ上のノード障害）に対応し得る方法のうちの１つとして示される。図２ｂに示されるように、ノード２０２Ｂが実際には失敗していなかった（即ち、健全性更新が２０２Ｂの障害に関して誤りであった）という場合があり得る。そのような偽陽性のシナリオでは、状態遷移メッセージは、２０２Ａから２０２Ｂに向けて、及び２０２Ｂから２０２Ｃに伝送され続け得、アプリケーションが、ＤＣＭ１６４が除去の決定をしてから少なくとも暫くの間、進行し続けることを可能にする。
【００２２】
少なくともいくつかの実施形態において、２０２ＢなどのノードがＤＡＧから除去され、かつ除去されたノードの直近の後続（例えば、２０２Ｃ）がＤＡＧ内に留まるとき、除去されたノードに以前は割り当てられていた役割は、直近の後続に移行され得る。故に、コミッタノードであり得たノード２０２Ｃは、ノード２０２Ｂの離脱時に中間ノードにされ得、新しく稼働されたノード２０２Ｄが、新しいコミッタノードとして指定され得る。除去されたノードが直近の後続を有しなかった場合（例えば、描写された実施例において、ノード２０２Ｂの代わりにノード２０２Ｃが除去された場合）、いくつかの実施形態において、新しく稼働されたスタンバイノードが、除去されたノードに割り当てられていた役割を付与され得る。他の実施形態において、役割は、そのような連続的／直線的方式で移行されない場合があり、例えば、構成マネージャが、どの役割が所与のノードに付与されるべきかを、除去されたノードに対するノードの相対的な位置を考慮することなく決定し得る。
【００２３】
ノード２０２ＢがＤＡＧから除去されるべきであると決定した後、ＤＣＭ１６４は、描写された実施形態において、非同期型構成−デルタメッセージ２４２Ａ及び２４２Ｂそれぞれをノード２０２Ａ及び２０２Ｃに送信し得る。示されるように、デルタメッセージのそれぞれは、２０２ＢがＤＡＧを離脱し、かつ２０２Ｄが参加したことを示し得る。構成に対する２つの変更は、描写された実施形態において、単一の構成−デルタメッセージ内に示されるが、他の実施形態においては、２０２Ｂの除去及び２０２Ｄの参加について、別個の構成デルタメッセージが送信され得る。構成−デルタメッセージは、描写された実施形態において、ＤＡＧ構成に対する変更のみを示し得、ＤＡＧの構成全体の表現を含まない場合がある。ノード２０２Ａが構成−デルタメッセージ２４２Ａを受信するまで、または他の方法で２０２ＢがＤＡＧを離脱したことに気が付くまで（例えば、ネットワーク接続の終了に起因して）、ＳＴＭは、ノード２０２Ａからノード２０２Ｂへ向けられ続け得る。２０２Ｂが実際は失敗していなかったシナリオでは、ノード２０２Ｂは、状態遷移要求を処理すること、及びメッセージ２１１Ｂをノード２０２Ｃに向けて送信することを、ノード２０２ＢがＤＡＧから除去されたことにノード２０２Ｃが気付くまで続け得る（例えば、２０２Ａまたは２０２Ｃのいずれかが２０２Ｂと通信することを中止する場合）。
【００２４】
構成−デルタメッセージ２４２は、非同期型メッセージング機構を用いて送信されるため、それらは異なる時間にそれらの送信先に到着し得る。ノード２０２Ａが、ノード２０２Ｃが構成−デルタメッセージ２４２Ｂを受信する前に構成−デルタメッセージ２４２Ａを受信する場合、図２ｄに描写されるシナリオに達し得る（ＤＡＧが少なくとも一時的に分岐を含む）。メッセージ２４２Ａに応答して、ノード２０２Ａは、ローカルストレージに構成変更の指標を保存し、これ以上のメッセージをノード２０２Ｂに送信することを中止し得る。さらには、ノード２０２Ａは、その新しい後継ノードが２０２Ｃであることを判定し得、したがってノード２０２Ｃとのネットワーク接続性を確立し、ノード２０２Ｃに新しい状態遷移メッセージ２１１Ｃを送信し始め得る。描写される実施形態において、状態遷移処理アクティビティは、２０２Ｂの除去を示すメッセージが残りのノードへ向かって進むにもかかわらず、ＤＡＧの様々なノードで継続し得る。ノード２０２Ｂが失敗したと仮定されるが実際には引き続き機能しているシナリオでは、例えば、ノード２０２ＢがＤＡＧから除去されたことをノード２０２Ａが知った後でさえ、１つ以上のインフライトの状態遷移メッセージが、ノード２０２Ｂでノード２０２Ａから受信され得る。そのようなインフライトのメッセージを受信すると、ノード２０２Ｂは、ローカルストレージ内のメッセージに示される状態遷移情報を複製し、別の同様のＳＴＭをノード２０２Ｃに伝送することを試み得る。ノード２０２Ｃがノード２０２Ｂの除去をまだ知らない（または、少なくともノード２０２Ｂとのその接続を終了していない）場合、ノード２０２Ｃは、ノード２０２Ｂからのメッセージを受信及び処理し得、ノード２０２Ｂが構成マネージャによってＤＡＧ構成から除去されたとしても、アプリケーションが進行することを可能にする。
【００２５】
ノード２０２Ｃが、ノード２０２Ａが構成−デルタメッセージ２４２Ａを受信する前に構成−デルタメッセージ２４２Ｂを受信する場合、図２ｅに示されるシナリオに達し得る。メッセージ２４２Ｂを受信すると、ノード２０２Ｃは、ノード２０２Ｂから送信される新しいメッセージを受信することを中止し得る（例えば、接続が依然として可用である場合、ノード２０２Ｂとのその接続を終了することによって）。ノード２０２ＡがＤＡＧ経路内のその新しい直近の先行であることを認識すると、ノード２０２Ｃはノード２０２Ａへの接続性を確立し得る。ノード２０２Ｃはまた、描写された実施形態において、最大のシーケンス番号ＨＳＮ１（承認されたＳＴＭがノード２０２Ｃですでに受信されているシーケンス番号の中から）を判定し、２０２Ｃが見逃した可能性があるいかなる承認された状態遷移メッセージも（即ち、ＨＳＮ１よりも大きいシーケンス番号を有するいかなる承認されたＳＴＭも）再伝送するように、ノード２０２Ａに要求２６０を送信し得る。さらには、ノード２０２Ｃはまた、その新しい後続ノード２０２Ｄへの接続性を確立し得、かつそれに続く承認されたＳＴＭ２１１Ｄをノード２０２Ｄに送信し始め得る。
【００２６】
ノード２０２Ａ及び２０２Ｃの両方が、ＤＡＧ構成変更について通知された後、図２ｆに示されるＤＡＧの新しい複製経路（即ち、２０２Ａ−２０２Ｃ−２０２Ｄ）は、新しく入ってくる状態遷移要求のために使用され得る。構成−デルタメッセージ２４２のタイミングが理由で、構成−デルタメッセージ２４２Ａがノード２０２Ａで受信される前に、ノード２０２Ａが構成変更についてノード２０２Ｃから知る場合があり得ることに留意されたい。同様に、ノード２０２Ｃは、いくつかの実施形態において、新しい構成についてノード２０２Ａ（あるいはノード２０２Ｄでさえも）から知り得る。故に、新しい構成についての情報がＤＡＧの任意の所与のノードに達し得る複数の方法が存在し得、少なくともいくつかの実施形態において、ＤＡＧノードは、構成−デルタメッセージがそれらのターゲットとされる受信者のすべてに達する前でさえ、新しい複製経路の部分を使用し始め得る。
【００２７】
図２ｇに示されるように、それがＤＡＧから除去された（例えば、実際の障害、または偽陽性障害検出のいずれかに起因して）ある時点で、ノード２０２Ｂは、それがサービスの準備が整っているということをＤＣＭ１６４に任意に示し得る。実際の障害の場合、例えば、ノード２０２Ｂは、最終的には修理されて再起動され得、「サービスに利用可能」メッセージ２８０を送信する前に、リカバリ動作のいくつかのセットを実行し得る。ネットワーク接続性損失の場合、「サービスに利用可能」メッセージは、接続性が再確立された後に送信され得る。それに応答して、描写された実施形態において、ＤＣＭ１６４は、ノード２０２ＢをＤＡＧのスタンバイノードとして追加し直すことを決定し得る。したがって、図２ｈに示されるように、ＤＣＭは、参加コマンド２８２をノード２０２Ｂに、構成−デルタメッセージ２４４Ａ、２４４Ｂ、及び２４４Ｃの新しいセットをそれぞれノード２０２Ａ、２０２Ｂ、及び２０２Ｄに送信して、ノード２０２Ｂの追加をそれらに通知し得る。図２ａ〜２ｈに示される動作シーケンスは、実施例として提供されるものであり、ＤＡＧノード及びＤＣＭは、様々な実施形態において、ノード２０２Ｂの見かけ上の障害に応答して、図２ａ〜２ｈに示されるものとは異なる動作シーケンスを実行し得ることに留意されたい。例えば、いくつかの実施形態において、新しいノードが、ノード２０２Ｃの後続としてＤＡＧに追加されない場合がある。また、いくつかの実施形態において、ノード２０２Ｂは、それがサービスに利用可能になった後に、必ずしも同じＤＡＧに再参加しない場合があり、むしろ、例えば、それは、異なるＤＡＧに配置され得るか、またはそこから新しいＤＡＧが構成され得るノードのプール内に保持され得る。
【００２８】
図２ａ〜２ｈでは、障害の検出はＤＡＧ構成変更のトリガとして示されるが、概して、様々な実施形態において、いくつかの異なる検討事項のうちのいずれかがＤＡＧ構成の修正を引き起こし得る。例えば、アプリケーション所有者（またはＤＣＭ）が、データ耐久性を向上するため、または可用性の理由から、ノードをＤＡＧに追加することを決定し得る。新しいノードの追加を示す構成−デルタメッセージは、いくつかの実施形態において、状態遷移処理における「Ｓｔｏｐ−ｔｈｅ−ｗｏｒｌｄ」停止を要求することなく、上記の除去に関連した伝播として、同様の非同期方式で他のＤＡＧノードに伝播され得る。ＤＡＧノードは、いくつかの実施形態において、保守に関連した理由のために、例えば、ソフトウェアアップグレードのため、ソフトウェアエラーのデバッグのため、またはハードウェア変更のため、オフラインにされる必要があり得る。少なくとも１つの実施形態において、ＤＡＧ構成は、ノードのうちの１つ以上における作業負荷レベル（例えば、１秒あたりに処理される状態遷移の数）が閾値レベルに達した、及び現在使用されているものより性能の高い（または性能の低い）ハードウェア／ソフトウェアスタックが利用されるべきであるという判定の結果として変更され得る。いくつかの実施形態において、ＤＡＧ構成変更は、必ずしもノードを追加または除去することなく、ある特定のＤＡＧノードの位置または役割を変更することに関与し得る。例えば、構成マネージャは、コミッタの役割を以前は中間ノードであったノードに交代させ、新しい構成では以前のコミッタノードを中間ノードにし得る。そのような役割変更（及び伝播される対応する構成−デルタメッセージ）は、例えば、特に同じホストがいくつかの異なるＤＡＧのノードに使用されているマルチテナント環境においては、ロードバランシング目的のために実装され得る。そのようなマルチテナント環境は、以下にさらに詳細に記載される。
【００２９】
状態遷移記録及び構成−デルタメッセージ
図３は、少なくともいくつかの実施形態に従う、アプリケーション状態記録（ＡＳＲ）、及び動的複製ＤＡＧで生成され得るＤＡＧ構成−デルタメッセージの例示的なコンポーネントを示す。先に示されるように、それぞれが承認されたまたはコミットされた状態遷移を表すアプリケーション状態記録のコピーは、少なくともいくつかの実施形態において、ＤＡＧの複製経路に沿ったいくつかのノードのそれぞれにおいて格納され得る。アプリケーション状態記録はまた、本明細書では状態遷移記録と称され得る。示されるように、アプリケーション状態記録３２０は、遷移のタイプ３０２の指標、例えば、要求された状態遷移の承認が記録されているかどうか、または承認された状態遷移のコミットが記録されているかどうかを含み得る。いくつかの実施形態において、先に記されるように、各ＤＡＧノードは、承認及びコミットの両方の記録を格納し得るが、他の実施形態においては、状態遷移記録のうちの１つのタイプのみが格納され得る。例えば、１つのシナリオにおいて、承認記録は、最初は非コミッタノードで複製され得、承認記録は、トランザクションがコミッタノードによって最終的にコミットされた後、コミット記録に変更され得る。少なくとも１つの実施形態において、別個の遷移タイプフィールド３０２が、ＡＳＲまたはＡＳＲの生成をもたらすメッセージ内に含まれない場合があり、むしろ、遷移のタイプは、ノードの現在の役割及び／またはメッセージがそこから受信されるソースＤＡＧノードの役割に関してノードが知っていることに基づいて、ＤＡＧノードによって推測され得る。例えば、状態遷移メッセージを受信する非コミッタノードは、メッセージが承認された状態遷移を表すことを推測し得る。
【００３０】
状態遷移記録３２０記録は、描写された実施形態において、遷移データ３０４を含み得る。遷移データコンポーネント３０４の内容の性質は、その状態が管理されているアプリケーションによって異なり得る。いくつかの場合、例えば、状態遷移要求は、書き込みペイロード（書き込まれるべきバイトのいくらかの数、及びそこにバイトが書き込まれるべきアドレス（複数可）を示す）を含み得、書き込みペイロードは、遷移記録内に含まれ得る。他のアプリケーションでは、各状態遷移は、アプリケーションクライアントによって発行されるそれぞれのコマンドを示し得、コマンドの表現は、ＡＳＲ内に含まれ得る。ＡＳＲ３２０はまた、状態遷移に対応するシーケンス番号３０６（論理タイムスタンプも検討され得る）を含み得る。シーケンス番号は、例えば、状態遷移要求が承認されたときアクセプタノードで、または状態遷移がコミットされたときコミッタノードで生成され得る。少なくともいくつかの実施形態において、ＤＡＧを使用して管理されているアプリケーションの現在の状態は、アプリケーションのある初期状態から始めて、コミットされた状態記録の遷移データ（例えば、書き込みペイロード、コマンドなど）をシーケンス番号が増加する順に適用することによって判定され得る。いくつかの実施形態において、遷移の複製履歴情報３０８も、ＡＳＲ内に含まれ得、例えば、ＤＡＧノードが同じ遷移についてそれぞれのＡＳＲをすでに格納していること、及び／またはそれらの記録が複製された順番ＴＩＮを示す。そのような複製履歴情報は、例えば、いくつかの実施態様において、十分な数のノードが所与の状態遷移をコミットについて記録したことを確認するために、コミッタノードによって使用され得る。いくつかの実施形態において、ＡＳＲメッセージは、対応する状態遷移要求が受信されたアクセプタノードのアイデンティティを示し得るが、複製経路に沿った他のノードに関する情報を含む必要はない。少なくとも１つの実施態様において、コミッタノードは、承認された状態遷移をコミットする前に、十分な数のノードが状態遷移記録を複製したことを確認することを必要とされない場合がある。
【００３１】
ＤＡＧ構成−デルタメッセージ３７０は、描写された実施形態において、構成に参加またはそれを離脱するノード（複数可）の識別子３５２、及び実装されている変更のタイプ３５４（例えば、参加対離脱）を示し得る。いくつかの実施態様において、参加（または離脱）するノードについての役割情報３５６は、任意に構成−デルタメッセージ内に含まれ得る。少なくともいくつかの実施形態において、アプリケーション状態シーケンス番号がアプリケーション状態遷移と関連付けられるのと同じように、ＤＡＧ構成変更シーケンス番号３５８は、構成−デルタメッセージと共に含まれ得る。そのようなシーケンス番号は、構成−デルタメッセージの受信者によって、例えば、受信者が任意の先の構成変更を見逃しているかどうかを判定するために使用され得る。いくつかの構成変更が見逃されていた場合（例えば、ネットワークパケットがドロップされていることに起因して）、受信者ノードは、見逃された構成−デルタメッセージを再伝送するようにＤＣＭに要求を送信し得る。構成変更シーケンス番号３５８は、様々な実施形態において、カウンタまたは論理タイムスタンプとしてＤＣＭで実装され得る。ＤＣＭが複数のノードを有するクラスタを含むいくつかの実施態様において、クラスタマネージャによって維持されるグローバル論理タイムスタンプは、構成変更シーケンス番号３５８のためのソースとして使用され得る。
【００３２】
プロバイダネットワーク環境での複製ＤＡＧ配置
図４は、少なくともいくつかの実施形態に従う、メンバーノードがプロバイダネットワークの複数の可用性コンテナにわたって分散される例示的な複製ＤＡＧを示す。インターネット及び／またはネットワークを介してアクセス可能な１つ以上のサービス（様々なタイプのマルチテナント及び／またはシングルテナントのクラウドベースコンピューティングもしくはストレージサービスなど）をクライアントの分散されたセットに提供するために企業または公共部門組織などの事業体によって設定されるネットワークは、本明細書ではプロバイダネットワークと呼ばれ得る。少なくともいくつかのプロバイダネットワークは、「パブリッククラウド」環境とも称され得る。所与のプロバイダネットワークは、プロバイダによって提供されるインフラストラクチャ及びサービスを実装、構成、及び分散するために必要とされる、物理及び／または仮想化コンピュータサーバのコレクション、ストレージデバイス、ネットワーク機器、ならびに同類のものなど、様々なリソースプールをホストする多数のデータセンターを含み得る。大規模プロバイダネットワーク内において、いくつかのデータセンターは、他とは異なる都市、州、または国に位置し得、いくつかの実施形態において、所与のアプリケーションに割り当てられるリソースは、いくつかのそのような場所に分散されて、所望のレベルの可用性、耐障害性、及び性能を達成し得る。
【００３３】
いくつかの実施形態において、プロバイダネットワークは、複数の地理的地域内に編成され得、各地域は、１つ以上の可用性コンテナを含み得、それは「アベイラビリティゾーン」とも呼ばれ得る。さらに、可用性コンテナは、所与の可用性コンテナ内のリソースが他の可用性コンテナ内の障害から保護されるような方法で（例えば、電源関連機器、冷却機器、及び／または物理的セキュリティコンポーネントなどの独立したインフラストラクチャコンポーネントと共に）設計される１つ以上の別個の物理的施設またはデータセンターを含み得る。１つの可用性コンテナ内の障害が、任意の他の可用性コンテナ内の障害をもたらすことは予測されない場合があり、故に、所与の物理ホストまたは仮想化サーバの可用性プロファイルは、異なる可用性コンテナ内の他のホストまたはサーバの可用性プロファイルから独立していることが意図される。
【００３４】
複製ＤＡＧの１つ以上のノードは、図４に示されるように、いくつかの実施形態において、ＤＡＧの他のノードとは異なる可用性コンテナ内にインスタンス化され得る。プロバイダネットワーク４０２は、描写された実施形態において、３つの可用性コンテナ４６６Ａ、４６６Ｂ、及び４６６Ｃを含み、各可用性コンテナは、いくらかの数のノードホスト４１０を含む。可用性コンテナ４６６Ａのノードホスト４１０Ａは、例えば、ＤＡＧノード４２２Ａ、ローカル永続ストレージ（例えば、１つ以上のディスクベースのデバイス）４３０Ａ、及びＤＡＧクライアントとの通信のためのフロントエンドとして使用され得るプロキシ４１２Ａを含む。同様に、可用性コンテナ４６６Ｂ内のノードホスト４１０Ｂは、ＤＡＧノード４２２Ｂ、ローカル永続ストレージ４３０Ｂ、及びプロキシ４１２Ｂを含み、可用性コンテナ４６６Ｃ内のノードホスト４１０Ｃは、ＤＡＧノード４２２Ｃ、ローカル永続ストレージ４３０Ｃ、及びプロキシ４１２Ｃを含む。描写された実施形態において、ＤＡＧノード４２２（及び／またはプロキシ４１２）はそれぞれ、１つ以上のプロセスのセットなど、実行の１つ以上のスレッドを含み得る。ローカル永続ストレージデバイス４３０は、描写された実施形態において、複製経路４９１に沿ってアプリケーション状態情報のローカルレプリカ（及び／または複製経路４９１のＤＡＧノード４２２で受信されるＤＡＧ構成−デルタメッセージ内容）を格納するために使用され得る。
【００３５】
図４の実施形態に描写されるＤＡＧのＤＣＭは、それ自体が、複数の可用性コンテナにわたって分散される複数のノードを含む。示されるように、可用性コンテナ４６６Ａ内に位置するＤＣＭストレージ４７５Ａを有するＤＣＭノード４７２Ａ、及び可用性コンテナ４６６Ｂ内に位置するＤＣＭストレージ４７５Ｂを有するＤＣＭノード４７２Ｂを含む、コンセンサスベースのＤＣＭクラスタ４９０が使用され得る。故に、描写されるＤＣＭは、少なくとも可用性コンテナ境界を超えない障害に関しては、フォールトトレラントと見なされ得る。そのようなフォールトトレラントＤＣＭのノードは、例えば、ＤＣＭによって管理されているＤＡＧのメンバーノードに対し、本明細書では「構成ノード」と称され得る。ＤＡＧ構成に対する変更（例えば、ノード除去、追加、または役割変更を含む）、ＤＣＭノード４７２間のコンセンサスベースのプロトコルを使用して承認され得、ＤＡＧ構成の表現は、対応する構成−デルタメッセージがＤＡＧノード４２２に伝送される前に、複数のＤＣＭノードによって永続ストレージに格納される必要があり得る。ＤＣＭ及び／または所与の複製ＤＡＧに使用される可用性コンテナの数は、例えば、アプリケーションのアベイラビリティ要件またはデータ耐久性要件によって、異なる実施形態において、及び異なるアプリケーションでは、様々であり得る。いくつかの実施形態において、複製ＤＡＧは、プロバイダネットワークで実装される他のサービスのリソースの構成を管理するために使用され得る。例えば、仮想化コンピューティングサービスによって使用されるコンピュートインスタンス（仮想マシン）またはインスタンスホスト（物理ホスト）の状態に対する変更は、一実施形態において、複製ＤＡＧを使用して管理され得る。
【００３６】
図５は、少なくともいくつかの実施形態に従う、複数の複製ＤＡＧのノードがマルチテナント方式で単一ホストに実装され得る例示的な構成を示す。示されるように、３つの複製ＤＡＧ５５５Ａ、５５５Ｂ、及び５５５Ｃのノードは、４つのＤＡＧノードホスト５１０Ａ、５１０Ｂ、５１０Ｃ、及び５１０Ｄに分散され得る。概して、ノードホストは、それらのリソースキャパシティが異なり得、例えば、あるホストのコンピューティング、ストレージ、ネットワーキング及び／またはメモリリソースは、他のホストのものとは異なり得る。例えば、ノードホスト５１０Ｂは、ＤＡＧ情報に使用され得る２つのストレージデバイス５３０Ｂ及び５３０Ｃを有し、ノードホスト５１０Ｄは、２つのストレージデバイス５３０Ｅ及び５３０Ｆを有するが、ノードホスト５１０Ａ及び５１０Ｃは、１つのストレージデバイス（それぞれ５３０Ａ及び５３０Ｄ）を有する。
【００３７】
ホスト５１０Ａは、ＤＡＧ５５５Ａのアクセプタノード５２２Ａ、及びＤＡＧ５５５Ｃの中間ノード５２２Ｎを含む。ホスト５１０Ｂは、ＤＡＧ５５５Ａの中間ノード５２２Ｂ、ＤＡＧ５５５Ｂのコミッタノード５２２Ｋ、及びＤＡＧ５５５Ｃの中間ノード５２２Ｏを含む。ＤＡＧ５５５Ａのコミッタノード５２２Ｃ及びＤＡＧ５５５Ｃのコミッタノード５２２Ｐは、ホスト５１０Ｃで実装され得る。最後に、ＤＡＧ５５５Ａのスタンバイノード５２２Ｃ、ＤＡＧ５５５Ｂのアクセプタノード５２２Ｊ、及びＤＡＧ５５５Ｃのアクセプタノード５２２Ｍは、ホスト５１０Ｄでインスタンス化され得る。故に、概して、所与のホストは、少なくともいくつかの実施形態において、Ｎ個の異なるＤＡＧのノードのために使用され得、かつ各ＤＡＧが、Ｍ個の異なるホストを利用し得、ここでＭ及びＮは、構成可能なパラメータであり得る。それぞれのアプリケーション所有者に代わって確立されるいくつかのＤＡＧのノードは、少なくともいくつかの実施形態において、マルチテナント方式で同じホスト上に実装され得、例えば、それらのアプリケーションの状態管理に利用されているリソースが他のアプリケーションの状態を管理するためにも利用されていることは、ある特定のアプリケーション所有者には明白でない場合がある。いくつかのプロバイダネットワーク環境において、所与のアプリケーションの複製ＤＡＧの所与のノードに使用される特定のホストを選択する配置サービスが実装され得る。ノードホストは、異なる実施形態において、その状態が管理されているアプリケーションの性能要件、候補ホストでの可用性リソースキャパシティ、ロードバランシングニーズ、価格設定の考慮など、因子の様々な組み合わせに基づいて選択され得る。少なくともいくつかの実施態様において、ホストごとに複数のＤＡＧノードをインスタンス化することは、ホストにおける全体的なリソース利用レベルを、単一のＤＡＧノードのみがインスタンス化された場合に達成され得る利用レベルに対して、増加させることに役立ち得る。例えば、特に、ＤＡＧノードに使用されるロジックのかなりの部分がシングルスレッドである実施形態において、マルチテナントシナリオではシングルテナントシナリオよりも多くのマルチコアホストのプロセッサコアが並行して使用され得、それによりホストの平均ＣＰＵ使用率を増大させる。
【００３８】
動的ＤＡＧベースの状態複製の実装方法
上記のように、複製ＤＡＧの所与のノードは、いくつかの実施形態において、所与の時点で、いくつかの役割（例えば、アクセプタ、中間、コミッタ、またはスタンバイ）のうちの１つを付与され得る。図６は、少なくともいくつかの実施形態に従う、状態遷移要求（ＳＴＲ）の受信に応答して複製ＤＡＧのアクセプタノードで実行され得る動作の態様を示すフロー図である。要素６０１に示されるように、アクセプタノードは、アプリケーションに対するＳＴＲを含むメッセージを、例えば、状態複製サービスのクライアントから受信し得る。ＳＴＲは、部分的にアプリケーションの性質によって、異なる実施形態において様々な要素を含み得る。例えば、いくつかの実施形態において、下により詳細に記載されるように、ＤＡＧは、１つ以上のデータストアに向けられるトランザクションのための楽観的並行性制御に使用され得、ＳＴＲは、以前にコミットされたトランザクションとのコンフリクトを検出するために使用され得る読み取りセット及び書き込みセットなどのデータを含み得る。状態遷移が複製ＤＡＧを使用して管理される各アプリケーションは、要求された状態遷移のための受理基準のその独自のセットを有し得、少なくともいくつかの場合において、ＳＴＲの内容は、遷移が受理されるべきか、拒否されるべきかを決定するために使用され得る。いくつかの実施態様において、動作条件はまた、または代わりに、要求された状態遷移の受理／拒否のために使用され得、例えば、アクセプタノードまたはＤＡＧの他のノードでの作業負荷レベルが閾値以上である場合、状態遷移は拒否され得る。遷移が受理基準を満たす場合（要素６０４において検出されるように）、新しい承認シーケンス番号が、例えば、カウンタ値をインクリメントすることによって、または何らかの他の単調増加論理タイムスタンプ値を獲得することによって、受理されたＳＴＲのために生成され得る（要素６０７）。遷移が承認されたことを示す記録は、シーケンス番号と一緒に、ローカルストレージに格納され得る（要素６１０）。いくつかのアプリケーションでは、遷移要求は、複製されるべきデータセット（書き込みペイロードなど）を含み得、アクセプタノードも同様に、ローカルストレージにデータセットを格納し得る。１つの実施態様において、アクセプタノードは、プロバイダネットワークのある特定のホストで実行する１つ以上のプロセスを含み得、遷移の承認の記録、シーケンス番号、及び遷移のデータセットはすべて、その特定のホストの永続ディスクベースストレージデバイスに格納され得る。いくつかの実施形態において、遷移のデータ、遷移が承認されたという指標、及びシーケンス番号はすべて、ログに挿入される（または追記される）ログエントリなど、ローカルストレージに格納される単一のオブジェクトにまとめられ得る。他の実施形態において、遷移のデータセットは、遷移の承認を示す記録とは別に格納され得る。
【００３９】
状態遷移の記録が安全に格納された後、承認を示す状態遷移メッセージは、コミッタノードに向かってＤＡＧの複製経路に沿って隣接ノードに伝送され得る（要素６１３）。いくつかの場合において、ＤＡＧのトポロジによっては、複数のそのようなメッセージは、複製経路に沿って隣接ノードに１つずつ送信され得る。先に記載されたように、ＤＡＧの各ノードは、必ずしも所与の時点で他のノードのビューと一致し得ないＤＡＧ構成のその独自のビューを有し得る。アクセプタノードは、描写された実施形態において、その承認された状態遷移メッセージをＤＡＧ構成のその現在のビューに示される隣接ノード（複数可）に、その現在のビューがＤＡＧのＤＣＭの観点からすると（または１つ以上の他のＤＡＧノードの観点からすると）古くまたは誤りになってしまっている場合でさえ、向け得る。メッセージ（複数可）が送信された後、状態遷移要求の処理は、アクセプタノードで完了すると見なされ得る（要素６１９）。要求された遷移がアプリケーションの受理基準を満たさない場合（要素６０４においても検出されるように）、遷移は拒否され得る（要素６１６）。いくつかの実施態様において、拒否を示す通知または応答が、要求側に提供され得る。
【００４０】
図７は、少なくともいくつかの実施形態に従う、承認された状態遷移メッセージの受信に応答して複製ＤＡＧの中間ノードで実行され得る動作の態様を示すフロー図である。そのようなメッセージＳＴＭ１が、例えば、アクセプタノードから、または別の中間ノードから受信された後（要素７０１）、いくつかの実施形態において、中間ノードは、より小さいシーケンス番号を有する状態遷移メッセージが欠けているかどうか（例えば、ＳＴＭ１がＳＮ１のシーケンス番号を有する場合、ＳＮ１よりも小さいシーケンス番号を有する１つ以上のＳＴＭがまだ受信されていないかどうか）を判定し得る。そのような欠けている状態遷移メッセージの証拠が見つかった場合（要素７０４）、中間ノードは、描写された実施形態において、欠けているＳＴＭ（複数可）の再伝送要求を、現在知られている複製経路に沿って、直近の先行ノードに任意にサブミットし得る（要素７０７）。いくつかの実施態様において、中間ノードは、ＳＴＭ１に対応する承認された状態遷移の記録をローカルストレージに格納する前に、その再伝送要求に対する応答を受信するのを待ち得る。ＳＴＭ１の承認記録は、例えば、承認シーケンス番号及び遷移と関連付けられた任意のデータセット（書き込みペイロードなど）と一緒に格納され得る（要素７１０）。次いで、状態遷移メッセージ（受信されたメッセージと内容が同様であり得るか、受信されたメッセージと内容が同一であり得る）は、コミッタノードに向かって現在知られている複製経路（複数可）上を各隣接ノードに送信され得る（要素７１３）。状態遷移の承認履歴が状態遷移メッセージ内に含まれるいくつかの実施態様において、中間ノードは、その（中間ノードの）識別子を、発信する状態遷移メッセージ内に示される承認側のリストに追加し得る。
【００４１】
いくつかの実施形態において、ＳＴＭ１の承認記録をローカルストレージに保存する前に欠けているシーケンス番号をチェックする代わりに、異なるアプローチが取られ得る。例えば、中間ノードは、承認記録をローカルストレージに格納した後、及び／または対応するＳＴＭをコミッタノードに向けて伝送した後、欠けているシーケンス番号をチェックし得る。
【００４２】
１つの実施態様において、所与の接続内のメッセージの順番通りの配信を保証するＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ：伝送制御プロトコル）などのネットワークプロトコルが、非アクセプタノードでＳＴＭを受信するためのプルモデルと組み合わせて使用され得る。そのような実施態様において、中間ノード、コミッタノード、またはスタンバイノードが複製経路に沿って直近の先行とのネットワーク接続を維持する限り、ネットワークプロトコルは、メッセージが失われないことを確実にすることを依拠され得る。所与のＤＡＧノードＮ１で、直近の先行ノードＰ１への接続がそのような実施態様において失われた場合、Ｎ１は、Ｐ１への（または、Ｐ１がもはやＤＡＧの一部ではないことを示す構成−デルタメッセージが受信された場合は、異なる先行ノードへの）新しい接続を確立すること、及び以前に受信した最大のシーケンス番号よりも大きいシーケンス番号を有するいかなるＳＴＭも送信するようにＰ１に要求することを担い得る。
【００４３】
図８は、少なくともいくつかの実施形態に従う、承認された状態遷移メッセージの受信に応答して複製ＤＡＧのコミッタノードで実行され得る動作の態様を示すフロー図である。承認された状態遷移メッセージを、例えば、中間ノードから、またはアクセプタノードから受信すると（要素８０１）、コミッタノードは、状態遷移がアプリケーションのコミット基準を満たすかどうかを判定し得る。いくつかの実施形態において、コミッタノードは、ＳＴＭの内容（承認履歴フィールドなど）から、これまでに保存されたアプリケーション状態記録のレプリカの数を判定することが可能であり得、遷移は、レプリカの数が閾値を超えた場合に、コミット可能であると見なされ得る。レプリカカウント閾値は、アプリケーションに基づいて異なり得、例えば、いくつかのアプリケーションにとっては、アクセプタノードにおける単一のレプリカは十分であり得る。他の実施形態において、コミッタノードはまた、遷移をコミットする前に、コミッタノードが現在のＳＴＭのシーケンス番号よりも小さいシーケンス番号を有するすべてのＳＴＭをすでに受信しているかどうかなど、他の因子を検討する必要があり得る。一実施形態において、例えば、コミッタノードは、現在の遷移をコミットする前にそれがすべてのそのような以前のＳＴＭを受信及び処理するまで待つ必要があり得る。
【００４４】
コミット基準（アプリケーションによって異なり得る）が満たされると（要素８０４において検出されるように）、コミッタノードは、コミット記録を、例えば、シーケンス番号及び遷移のデータセット（ある場合）と一緒に、ローカルストレージ内のアプリケーション状態記録のそのコレクション内に格納し得る（要素８０７）。いくつかの実施態様において、コミット基準は、アクセプタノードですでに検証された受理基準をデフォルトとし得る。つまり、ひとたび状態遷移がアクセプタノードで承認されると、コミッタノードは、任意の追加の条件を検証する必要なく、受信したＳＴＭに示される状態遷移をコミットし得る。いくつかの実施形態において、ＳＴＭに示される承認シーケンス番号のコピーが、コミットシーケンス番号として格納され得る。いくつかの承認された遷移はコミットされない場合があるため、少なくとも一実施形態において、承認に使用されるものとは異なるシーケンス番号のセットが、コミットに使用され得る（例えば、コミットシーケンス番号のシーケンスがいかなる欠落も有しないように）。スタンバイノードがＤＡＧ用に構成される場合、コミット後のＳＴＭは、コミッタノードから１つ以上のそのようなスタンバイノードに向けられ得る。少なくともいくつかの実施形態において、遷移がコミットされた後、例えば、他のノードがそれらのアプリケーション状態情報を更新することを可能にするため、及び／または状態遷移を要求しているクライアントに遷移がコミットされたことを示す応答を伝送するため、コミットの通知が、ＤＡＧの１つ以上の他のノードに提供され得る（要素８１０）。
【００４５】
欠けているＳＴＭがコミット基準に関連する処理の一部として取り扱われなかったいくつかの実施形態において、コミッタノードは、欠けているＳＴＭに関して図７に示されたものと同様のアクションを行い得る。故に、例えば、コミッタノードが、１つ以上のＳＴＭが欠けている（受信したＳＴＭのシーケンス番号よりも小さいシーケンス番号を有する）と判定する場合（要素８１３）、欠けているＳＴＭの再伝送要求が、直近の先行ノード（複数可）に送信されて（要素８１６）、受信したＳＴＭの処理を完了し得る（要素８２２）。コミット基準が満たされない場合、コミッタノードは、状態遷移を中断し得る（要素８１９）。いくつかの実施形態において、中断通知は、ＤＡＧの１つ以上の他のノードに、及び／または状態遷移を要求したクライアントに送信され得る。いくつかの実施態様において、上で述べたように、状態遷移がアクセプタノードで承認されている場合、複製ＤＡＧは、複製経路の１つ以上のノード（アクセプタノード自体を含む）が失敗したとしても、状態遷移を（最終的に）コミットすることを担い得る。状態遷移を中断することは、いくつかのそのような実施態様において、他のＤＡＧノードからの遷移の承認記録の除去（または承認記録がたまたま格納されるノードのＤＡＧからの実際の除去）など、比較的重大な変更を必要とし得る。図１１ａ〜図１４に関して以下にさらに詳細に記載されるように、いくつかの実施形態において、早期連携ＤＡＧ停止技術が使用されて、対応する状態遷移情報が所望の数のＤＡＧノードで複製されることなくＳＴＭがコミッタノードに達するシナリオを回避し得る。
【００４６】
図９は、少なくともいくつかの実施形態に従う、複製ＤＡＧの構成マネージャ（ＤＣＭ）で実行され得る動作の態様を示すフロー図である。要素９０１に示されるように、ＤＡＧで構成変更を潜在的にトリガし得るイベントが構成マネージャによって検出され得る。そのようなイベントは、「ノード障害の検出」（例えば、ＤＡＧノードから、またはプロバイダネットワークの健全性管理コンポーネントから）、または「サービスに利用可能」（例えば、障害後に再起動されたＤＡＧノードから）などのメッセージを受信することを含む。いくつかの実施形態において、構成マネージャ自体が、様々なＤＡＧノードの健全性状態を監視することを担い得、トリガイベントは、ノードのうちの１つがいくつかのハートビートメッセージまたは他の健全性チェックに対してタイムリーに応答しなかったという構成マネージャによる検出であり得る。少なくともいくつかの実施形態において、ＤＡＧノードは、任意の見かけ上のノード障害をＤＣＭにレポートすることを担い得る（例えば、接続が突然ドロップされるとき、または閾値を超える期間に隣接ノードからメッセージが受信されないとき）。ＤＡＧノードはまた、いくつかの実施形態において、ＤＡＧ構成変更を引き起こし得る差し迫った変更（ノードが保守のためにオフラインになることが計画されているときなど）をＤＣＭに通知することを担い得る。ＤＣＭは、描写された実施形態において、示された構成変更（例えば、失敗したノードの除去、または新しいノードの参加）が、有効とされるかどうか、例えば、ＤＣＭクラスタの複数のノードに実装され得るコンセンサプロトコルに基づいて、判定し得る（要素９０４）。例えば、いくつかの実施態様において、ＤＡＧノードが失敗したという１つのＤＣＭノードによる判定は、ノードが構成から除去される前に、クラスタの１つ以上の他のノードで確認される必要があり得る（例えば、他のＤＣＭノードでＤＡＧノードから受信されるハートビート応答をレビューすることによって）。他の実施態様において、可能性のある構成変更を適用するかどうかに関する決定は、コンセンサスベースのプロトコルを利用せずに実行され得る。シーケンス番号、またはＤＡＧ構成変更と関連付けられた論理タイムスタンプは、いくつかの実施形態において、例えば、構成変更がＤＡＧノードで正しい順番で処理され得るようにＤＡＧの他のノードに送信される構成−デルタメッセージ内に含めるために、判定または生成され得る。
【００４７】
構成変更がどのように承認されるかとは独立に、いくつかの実施形態において、構成変更の表現は、変更が完了したと見なされる前に、ＤＣＭの複数のストレージ場所で複製される必要があり得る（要素９０７）。構成変更についての情報を複数の場所に保存することは、ＤＣＭがＤＡＧ構成情報の信頼できるソースとして機能を果たすべき実施形態において、ＤＣＭの機能性の重要な態様であり得る。少なくともいくつかの実施態様において、構成に対する変更のみ（例えば、全体的な構成ではなく）が複製され得る。構成変更情報が保存された後、対応する構成−デルタメッセージ（たった今実装された構成に対する変更を示し、必ずしもＤＡＧの全体的な構成ではない）がＤＣＭからそこに送信されるべきＤＡＧノードのセットが識別され得る（要素９１０）。いくつかの実施形態において、すべてのＤＡＧメンバー（潜在的に、構成−デルタメッセージに示される構成変更の一部としてＤＡＧから除去されているノードを含む）が、構成−デルタメッセージの送信先として選択され得る。一実施形態において、現在のＤＡＧメンバーであると仮定されるノードのみが選択され得、例えば、構成−デルタメッセージは、ノードが除去されている、または失敗したことが知られている場合、そのノードには送信されない場合がある。他の実施形態において、メンバーのいくつかのサブセットが送信先として選択され得、そのサブセットは、構成変更を残りのノードに伝播することを担い得る。メンバーのサブセットが送信先として選択される実施形態において、ＤＣＭは、所与の時間にどの変更がどのメンバーに伝播されたかを追跡する必要があり得る。ＤＡＧノードの送信先セットが識別された後、それぞれの構成−デルタメッセージは、互いに関して非同期的に、かつ状態遷移メッセージ処理または状態遷移要求処理のいかなる停止も要求することなく、それらに送信され得る（要素９１３）。少なくともいくつかの実施形態において、構成−デルタメッセージは、構成変更と関連付けられた構成シーケンス番号を含み得る。いくつかの実施態様において、複合構成−デルタメッセージは、２つ以上の変更（例えば、失敗したノードの除去及び置換ノードの参加）を含み得る。
【００４８】
図１０は、少なくともいくつかの実施形態に従う、構成マネージャからの構成−デルタメッセージの受信に応答して複製ＤＡＧのメンバーノードで実行され得る動作の態様を示すフロー図である。構成変更シーケンス番号を含むそのような構成−デルタメッセージをＤＣＭから受信すると（要素１００１）、受信者ＤＡＧノードは、描写された実施形態において、それが任意の先の構成−デルタメッセージを見逃したかどうか、例えば、新しく受信したシーケンス番号を以前に受信された最大のシーケンス番号と比較することによって判定し得る。受信者が、１つ以上の構成−デルタメッセージがまだ受信されていないことを判定する場合（要素１００４）、それは、構成リフレッシュ要求をＤＣＭに送信し得る（要素１００７）。そのようなリフレッシュ要求は、ＤＣＭが見逃した構成−デルタメッセージ（または複数可）を再送信すること、例えば、ＤＡＧの現在の構成全体が示される異なるタイプのメッセージを送信することをもたらし得る。
【００４９】
欠けている構成−デルタメッセージが検出されない場合（要素１００４に対応する動作においても）、受信者ノードは、受信した構成変更情報をローカルストレージ内の構成変更リポジトリに格納し得る。リポジトリ内に蓄積したメッセージは、受信者のＤＡＧ構成のビューを更新するために使用され得る（要素１０１０）。ＤＡＧ構成のローカルビューを更新することは、例えば、今後の発信及び着信状態遷移メッセージに使用されるべき複製経路（または複数可）の１つ以上のＤＡＧノード及び／または端部を判定することを含む。先に述べたように、メッセージ配信の非同期型性質が理由で、及びネットワークの異なる部分は異なる遅延を経験し得るため、構成−デルタメッセージがあるＤＡＧノードで獲得されるシーケンスは、構成−デルタメッセージの同じセットが別のノードで受信されるシーケンスとは異なり得る。したがって、所与の時間点に２つの異なるノードで識別される複製経路は、互いに異なり得る。描写された実施形態において、受信者ノードは、複製経路上のその直近の先行ノードが変わったか、またはその直近の後続が変わったかのいずれかの場合、さらなるアクションを行い得る。直近の後続または直近の先行ノードのいずれも変わらない場合、構成−デルタメッセージの処理は、いくつかの実施形態において、構成変更情報が受信者ノードのローカルストレージに格納された後に終了し得る（要素１０２７）。
【００５０】
ＤＡＧのノードＣに関して直近の先行ノードが変更されるシナリオの実施例は、Ａ−Ｂ−ＣからＡ−Ｃへの複製経路の一部分の変更である。更新された構成が受信者の直近の先行ノードに対する変更に関与し、かつメッセージが新しい直近の先行ノードからまだ直接受信されていない場合（要素１０１３において検出されるように）、受信者ノード（現在の実施例ではノードＣ）は、新しい直近の先行（現在の実施例ではノードＡ）への接続を確立し得る。加えて、少なくともいくつかの実施形態において、受信者ノード（例えば、ノードＣ）はまた、新しい直近の先行（例えば、ノードＡ）に、受信者ノードで直前に受信したシーケンス番号より大きいシーケンス番号を有するＳＴＭの再伝送の要求を送信し得る（要素１０１７）。ノードＣが後続ノードを有する場合、ノードＣは、任意の保留中の状態遷移メッセージをそのような後続ノードに伝送し続け得ると同時に、要求した再伝送をノードＡから受信するのを待つ。
【００５１】
構成−デルタメッセージが、受信者の直近の後続ノードが変わったことを示し（例えば、モードＡが、ノードＢがＤＡＧを離脱したことを示す上記の同じ例示的な構成−デルタメッセージを受信するとき）、かつメッセージが新しい直近の後続ノードからまだ受信されていない場合（要素１０２１）、受信者ノードは、新しい後続ノードへの接続を確立し得る。上の実施例では、ノードＡは、その新しい直近の後続であるノードＣへの接続を確立し得る。状態遷移メッセージは、続いて、新しい直近の後続に転送され得る（要素１０２４）。
【００５２】
複製ＤＡＧノードの連携停止
大量のアプリケーションのほぼ同時の機能停止を引き起こし得る大規模障害イベントは、プロバイダネットワークオペレータに対し、重大な課題を提示する。そのアプリケーションが持続的な機能停止によって影響を受ける顧客は、プロバイダネットワークが重要なアプリケーションに必要とされるサービスのレベルを提供する能力に対する信頼を失い得る。大規模障害イベントの可能性は、知的インフラストラクチャ設計によって、及びこのインフラストラクチャの高可用性特性を活用することができるアプリケーションアーキテクチャを実装することによって、軽減され得るが、大規模障害を完全に排除することは不可能であり得る。したがって、分散アプリケーションが、複数のリソースに影響を与える障害からより素早くかつ容易にリカバリすることを可能にし得る技術が、少なくともいくつかの実施形態において、開発され得る。上記のタイプの複製ＤＡＧが分散アプリケーション状態管理に用いられるいくつかの環境において、連携停止プロトコルが、分散された障害からのより効果的かつ効率的なリカバリをサポートするために使用され得る。一実施形態において、例えば、障害シナリオの検出に応答して、ＤＡＧのいくつかのノードは、それらの通常のアプリケーション状態遷移処理動作（例えば、状態遷移要求メッセージを受信すること、アプリケーション状態情報のローカルコピーを格納すること、及び状態遷移要求メッセージをそれらの複製経路（複数可）に沿って伝送すること）の実行を中止するように構成マネージャによって指示され得る。それらの動作を停止した後、ノードは、少なくともいくつかの実施形態において、それらのローカルアプリケーション状態記録を他のＤＡＧノードと同期し、クリーンシャットダウンを実行し、再起動し得る。ノードが再起動した後、それは構成マネージャに、それがサービスの再開のために利用可能であるというレポートを返し、構成マネージャによるＤＡＧの再稼働を待ち得る。
【００５３】
図１１ａ〜１１ｈは、少なくともいくつかの実施形態に従う、そのような連携停止プロシージャ中に複製ＤＡＧで実行され得る例示的な動作シーケンスをまとめて示す。示されたＤＡＧ内の各ノードは、コミット記録のそれぞれのセットを格納し得、各コミット記録は、対応するコミットシーケンス番号（ＣＳＮ）を含む（または、例えば、ポインタを介して示す）。故に、ノードの観点からすると、ローカルコミット記録セットは、ＤＡＧを使用して管理されているアプリケーションの状態を表し得る。承認された（しかしまだコミットされていない）状態遷移の記録も、先に記載されるように、ノードのうちの一部またはすべてで保持され得る。連携停止技術は、ＤＡＧノードをＤＡＧ構成変更に関して最新の状態にしておくためにＤＣＭが上記のように構成−デルタメッセージを伝送する動的複製ＤＡＧに即して本明細書では記載されるが、いくつかの実施形態において、同様のアプローチが他の状態複製技術に用いられ得ることに留意されたい。例えば、連携停止技術はまた、複製ノードのグループに対する構成変更が、Ｓｔｏｐ−ｔｈｅ−ｗｏｒｌｄ再構成間隔を使用して実装され、その間にすべてのノードが同期された方式で更新される環境で使用され得、その結果、すべてのノードが新しい構成に気付いた後にのみ、複製グループが動作可能になる。故に、動的複製ＤＡＧは、異なる実施形態において連携停止技術が実装され得るマルチノード状態複製グループ（ＳＲＧ）の単に一実施例を表し得る。少なくともいくつかのそのようなＳＲＧは、先に記載されるＤＣＭに類似した独自の構成マネージャを有し得、かつコミッタノードに指定されるいくつかのノード、及び非コミッタノードに指定される他のノードを有し得る。
【００５４】
５つのノード１１０２Ａ、１１０２Ｂ、１１０２Ｃ、１１０２Ｄ、及び１１０２Ｅを含む複製ＤＡＧが、ＤＣＭ１１８０と一緒に図１１ａに示される。描写された実施例において、コミッタノード１１０２Ｅは、連携停止プロシージャがＤＡＧに対して開始されるべきかを判定する停止トリガ検出器１１０６を含む。いくつかの異なるタイプの原因が、異なる実施形態において、停止プロシージャの開始を引き起こし得る。例えば、停止プロシージャは、（ａ）いくらかの閾値数のノードが失敗し得た（「Ｘ」記号によって示される、ノード１１０２Ｂ及び１１０２Ｄでの障害など）、（ｂ）構成−デルタメッセージがコミッタノードで（または何らかの他のノードで）受信されている割合が閾値を超える、（ｃ）ネットワークパケットまたは接続が何らかのＤＡＧノードまたはＤＣＭでドロップされている割合が閾値を超えるなどの理由により、開始され得る。描写された実施形態におけるコミッタノード１１０２Ｅは、コミッタノードのコミット記録セット内に表されるシーケンス番号の中で最大のシーケンス番号を含むＤＡＧ停止要求１１５０を送信する。この最大のシーケンス番号は、本明細書では最大のコミット済みシーケンス番号（ＨＣＳＮ）１１０８と称され得、下に記載されるように停止プロシージャのステップのうちの１つの間にＤＡＧノード間のコミット記録セットを同期するためのリファレンスとして使用され得る。いくつかの実施形態において、停止が開始されるべきであるという初期判定は、非コミッタノードのうちの１つで、またはＤＣＭ１１８０自体でなされ得、ある特定のコミットシーケンス番号（理想的にはＨＣＳＮであるが必ずしもそうとは限らない）が、ノードがそれらのコミット記録セットをそこまで更新すべきであるターゲットシーケンス番号として選択され得る。
【００５５】
図１１ｂに示されるように、停止要求の受信に応答して、ＤＣＭ１１８０は、ＨＣＳＮを永続ストレージ１１７５に保存し得る。次いで、ＤＣＭは、それぞれの停止コマンド１１５２を少なくともＤＡＧノードのサブセットに、例えば、描写された例示的なシナリオではコマンド１１５２Ａ及び１１５２Ｂをノード１１０２Ａ及び１１０２Ｃにそれぞれ送信し得る。いくつかの実施形態において、ＤＣＭ１１８０は、停止コマンドを、ＤＣＭで保存される最新のＤＡＧ構成に従ってＤＡＧのメンバーであるすべてのＤＡＧノード（１１０２Ｂ及び１１０２Ｄなど、失敗し得たノードを含む）に送信し得る。停止コマンドは、ＨＣＳＮ１１０８を含み得る。
【００５６】
停止コマンドを受信すると、ＤＡＧノードは、状態遷移要求／メッセージの処理を中止し得、代わりに、そのコミット記録セットがＨＳＣＮに対応するコミット記録を含むそれまでのすべてのコミット記録を含むことを検証するためのプロセスを開始し得る。例えば、ノード１１０２Ａ及びノード１１０２Ｃは、ＨＣＳＮ以下のシーケンス番号を有する１つ以上のコミットされた状態遷移に関してコミッタノード１１０２Ｅによってまだ通知されていない場合があり得る。そのようなシナリオにおいては、図１１ｃに示されるように、ノード１１０２Ａは、コミット記録同期要求１１７２Ｂをコミッタノード１１０２Ｅに送信し得（「１ａ」と表記される矢印で示されるように）、ノード１１０２Ｃは、同様のコミット記録同期要求１１７２Ｂをノード１１０２Ｅに送信し得る（「１ｂ」と表記される矢印で示されるように）。コミット記録同期要求１１７２はそれぞれ、要求がそこから送信されるノードでコミット記録が欠けているという指標を含み得、例えば、ノード１１０２Ａは、それがＳＮ１までのシーケンス番号を有するコミット記録をすでに有することを示し得る一方、ノード１１０２Ｃは、それがシーケンス番号ＳＮ２、ＳＮ３、及びＳＮ４を有するコミット記録が欠けていることを示し得る。次いで、欠けているコミット記録１１７４Ａ及び１１７４Ｂは、「２ａ」及び「２ｂ」と表記される矢印によって示されるように、コミッタノードによってノード１１０２Ａ及び１１０２Ｃにそれぞれ送信され得る。次いで、ノード１１０２Ａ及び１１０２Ｃは、「３ａ」及び「３ｂ」と表記される矢印によって示されるように、それぞれの同期確認１１７６Ａ及び１１７６ＢをＤＣＭ１１８０に送信し得る。ＤＣＭ１１８０は、「４」と表記される矢印によって示されるように、ノード１１０２Ａ及び１１０２Ｃを、ＤＣＭの永続ストレージ１１７５に維持される最新ノードのリスト１１３３（即ち、コミッタノード１１０２Ｅのコミット記録セットを一致させるためにそれらのコミット記録セットを更新したノード）に追加し得る。
【００５７】
図１１ｄにおいて示されるように、ＤＡＧのノードは、描写された実施形態において、実行を終了し、自ら再起動し得る。失敗したノード１１０２Ｂ及び１１０２Ｄは、例えば、それらの障害からのリカバリの一部として再起動し得る。連携停止プロシージャの一部として、ノード１１０２Ａ及び１１０２Ｃは、それらのコミット記録セットがコミッタノードのそれと同期された後に、それらのコミット記録セット（及び／またはノードの動作に関する追加のメタデータ）をローカルストレージに保存し、次いで制御された再起動を開始し得る。ノード１１０２Ｅは、描写された実施形態において、それが停止要求１１５０を送信した後いくらかの時間間隔の間待機し（コミッタノードが少なくともいくつかの同期要求１１７２に応答することを可能にする）、任意の状態メタデータをローカルストレージに保存し、次いでその独自の制御された再起動を停止プロシージャの一部として開始し得る。
【００５８】
ＤＡＧノード１１０２Ａ〜１１０２Ｅがオンラインに戻った後、それらはそれぞれ、いくつかの実施形態において、図１１ｅに示されるように、それぞれの「サービスに利用可能」メッセージをＤＣＭ１１８０に送信し、それらのアプリケーション状態遷移処理動作を再開するための再稼働命令を待ち得る。ＤＣＭは、ノード１１０２Ｂ及び１１０２Ｄのコミット記録セットが最新ではないかもしれないということを（その最新ノードリスト１１３３を使用して）判別することが可能であり得、それに応答して、図１１ｆに示されるように、それぞれの同期コマンド１１９４をノード１１０２Ｂ及び１１０２Ｄに送信し得る。少なくともいくつかの実施態様において、同期コマンドは、ＨＣＳＮ１１０８を示し得る。同期コマンド１１９４に応答して、ノード１１０２Ｂ及び１１０２Ｄはそれぞれ、それらの独自のコミット記録同期要求１１７２Ｃ及び１１７２Ｄを、最新であることが知られるノードに送信し得、それらのそれぞれのコミット記録セットにコミット記録が欠けていることを示す。例えば、ノード１１０２Ｂは、その同期要求１１７２Ｃをノード１１０２Ａに送信し得る一方、ノード１１０２Ｄは、その同期要求をノード１１０２Ｅに送信し得る。いくつかの実施形態において、ＤＣＭは、コミット記録同期要求が送信されるべき送信先ノードを指定し得る。一実施形態において、すべての非コミッタＤＡＧノードは、それらのコミット記録セットをコミッタノードと同期させる必要があり得る。ノード１１０２Ｂ及び１１０２Ｄは、最終的にすべてのノードが、それらのコミット記録セットをＨＣＳＮまで同期させているように、それらの欠けているコミット記録１１７４Ｃ及び１１７４Ｄをそれぞれ受信し得る。いくつかの実施態様において、ノード１１０２Ｂ及び１１０２Ｄは、それらのコミット記録セットが更新／同期されたことを示す確認をＤＣＭ１１８０に送信し得る。少なくとも１つの実施形態において、ＤＣＭは、その最新ノードリスト内にないノードに対して、図１１ｆに関して上に記載されるよりもいくらか受動的な役割を果たし得る。そのような実施形態において、失敗したノード（１１０２Ｂまたは１１０２Ｄなど）がオンラインに戻ったとき、それは、新規のオンラインノードに任意のコミット記録が欠けているかどうかを判定するためにメッセージをＤＣＭに送信する。ＤＣＭは、ノードが最新になるためにはＨＣＳＮまでのシーケンス番号を有するコミット記録が必要とされることをノードに通知し得る（例えば、単にＨＣＳＮを示すことによって）。次いで、ノードは、自らを最新状態にすること、及び一旦それがそのコミット記録をＨＣＳＮまで同期させると、ＤＣＭにレポートを戻すことを担い得る。故に、そのような実施形態において、ＤＣＭは、必ずしも同期コマンド１１９４を送信し得ず、むしろ、新規のオンラインノードが、それらのコミット記録セットを同期させるための主導権を取り得る。
【００５９】
少なくとも閾値数のノードがコミット記録セットを更新したことを確認した後、ＤＣＭ１１８０は、再起動後のＤＡＧの構成を判定し得る。いくつかの場合において、停止前に使用されていたのと同じ構成が再び使用され得るが、他の実施形態においては、異なる構成が選択され得る。例えば、ＤＡＧが最低で４つのノードを有することが必要とされる場合があり得るため、ノード１１０２Ａ〜１１０２Ｅのうちの４つのみが最初に選択され得る。図１１ｇに示されるように、ＤＣＭ１１８０は、それぞれの再稼働メッセージをノードの選択されたセット（描写される実施例では５つのノードすべて）に送信し得、ＤＡＧの現在の構成を示す。次いで、ＤＡＧノードは、図１１ｈに示されるように、通常動作を再開し得る。いくつかの実施形態において、失敗しなかったＤＡＧノード（例えば、１１０２Ａ、１１０２Ｃ、及び１１０２Ｅ）のうちの少なくともいくつかは、必ずしも自ら再起動し得ない。むしろ、それらのコミット記録セットを同期させた後、そのようなノードのうちの１つ以上は、そのような実施形態において、それらがＤＣＭから再稼働コマンドを受信するまで、これ以上の状態遷移処理を単に延期し得る。
【００６０】
図１２は、少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧなどのＳＲＧのコミッタノードで実行され得る動作の態様を示すフロー図である。要素１２０１に示されるように、コミッタノードは、ＳＲＧの連携停止のためのトリガ基準が満たされたことを判定し得る。例えば、応答をし続けるＳＲＧノードの数が閾値を下回ったこと、またはＳＲＧの構成変更が発生している割合が閾値を超えることをコミッタノードが検出することを含む、様々な異なるトリガ条件が、連携停止を引き起こし得る。いくつかの場合において、例えば、ネットワークパケットがドロップされる割合が閾値を超える場合、または、接続が最大許容率以上で予期せず終了されている場合、リソース作業負荷レベルまたはエラー率が、停止をトリガし得る。一実施形態において、ＳＲＧの非コミッタノード、またはＤＣＭなどの構成マネージャは、最初に、制御された停止を引き起こさなければならない問題を検出し得、その問題についてコミッタノードに通知し得る。
【００６１】
制御された停止が開始されるべきであることを判定した後、コミッタノードは、描写された実施形態において、状態遷移メッセージのその通常の処理／複製を停止または中止し、任意の未処理のまだ保存されていないコミット記録をローカルストレージに保存し得る（要素１２０４）。次いで、コミッタノードは、ＨＣＳＮ（コミット記録がコミッタノードによって格納されている遷移のシーケンス番号の中で最大のコミット済みシーケンス番号）の指標を含む、停止要求をＳＲＧの構成マネージャ（例えば、複製ＤＡＧの場合はＤＣＭ）に伝送し得る（要素１２０７）。ＨＣＳＮは、ＳＲＧの現在稼働しているノードがそこまでそれらのコミット記録セットを同期させるべきであるターゲットコミットシーケンス番号として機能を果たし得る。
【００６２】
少なくともいくつかの実施形態において、それが停止要求を送信した後、コミッタノードは、いくつかのコミット記録同期要求を他のＳＲＧノード（例えば、それらがＨＣＳＮまでのシーケンス番号を有するコミット記録のフルセットを有しないことを判定したノード）から受信し得る（要素１２１０）。描写された実施形態において、コミッタノードは、構成可能な時間窓中に受信される任意のそのような動機要求に応答する。次いで、コミッタノードは、任意に、クリーンシャットダウン及び再起動を実行し、サービスに利用可能メッセージをＳＲＧの構成マネージャに送信し得る（要素１２１３）。いくつかの実施形態において、クリーンシャットダウン及び再起動は、省略され得、コミッタノードは、サービスに利用可能メッセージを単に送信し得るか、コミッタノードは、再稼働命令が構成マネージャから受信されるまで、これ以上の状態遷移関連処理を単に延期し得る。最終的に、コミッタノードは、ＤＡＧの現在の停止後構成を示す再稼働メッセージを構成マネージャから受信し得、次いでコミッタノードは、示された構成の通りに状態遷移関連処理を再開し得る（要素１２１６）。いくつかの実施形態において、新しい停止後構成では、コミッタノードがもはやコミッタの役割を付与されない場合があり得、むしろ、それは、例えば、アクセプタノード、仲介ノード、またはスタンバイノードとして構成され得る。
【００６３】
図１３は、少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧなどの状態複製グループの非コミッタノードで実行され得る動作の態様を示すフロー図である。通常動作中、非コミッタノードは、対応する遷移がコミットされた後のある時点で、コミット記録をローカルストレージに格納し得、その結果、非コミッタノードのローカルコミット記録セットは、必ずしもコミッタノードのものと同じくらいに最新状態ではない場合がある。要素１３０１に示されるように、非コミッタノードは、非コミッタノードがそのローカルコミット記録セットを同期させるべきターゲットシーケンス番号としてＨＣＳＮを示す停止コマンドを構成マネージャから受信し得る。
【００６４】
停止コマンドを受信すると、非コミッタノードは、新しい状態遷移メッセージの処理を停止または中止し得る。ＨＣＳＮより小さいシーケンス番号を有するいくつかのコミット記録が、ローカルコミット記録セットから欠けている場合、非コミッタノードは、欠けている記録についてのコミット記録同期要求をコミッタノードに（または欠けているコミット記録のソースとして構成マネージャによって示される異なるノードに）送信し得る（要素１３０４）。そのコミット記録セットがすでにＨＣＳＮに関して最新である場合、非コミッタノードは、停止プロシージャのこの段階で他のノードと通信する必要がない場合がある。ＨＣＳＮまでのシーケンス番号を有するコミット記録がローカルストレージに格納されていることを検証した後、非コミッタノードは、描写された実施形態において、同期確認メッセージを構成マネージャに送信し得る（要素１３０７）。次いで、非コミッタノードは、それが構成マネージャによって再稼働されるまで、これ以上のアプリケーション状態遷移処理を延期し得る。任意に、非コミッタノードは、クリーンシャットダウン及び再起動を実行し、再起動後に「サービスに利用可能」メッセージを構成マネージャに送信し得る（要素１３１０）。構成マネージャからの再稼働メッセージに応答して、非コミッタノードは、ＳＲＧ構成のそのビューを更新し、アプリケーション状態遷移処理を再開し得る（要素１３１３）。停止後構成では、いくつかの場合において、異なる役割が構成マネージャによって非コミッタノードに付与され得、例えば、非コミッタノードの役割が、コミッタノードへ変更され得る。
【００６５】
図１４は、少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製ＤＡＧなどの状態複製グループの構成マネージャで実行され得る動作の態様を示すフロー図である。要素１４０１に示されるように、構成マネージャは、コミット記録がコミッタノードに格納される遷移のシーケンス番号の中から最大のコミット済みシーケンス番号（ＨＣＳＮ）を示す停止要求をＳＲＧのコミッタノードから受信し得る。いくつかの実施形態において、コンセンサスプロトコルが、ＳＲＧ動作を停止するという決定が最終的に下される前に、構成マネージャの様々なノード間で用いられ得る。構成マネージャは、ＨＣＳＮを永続ストレージに格納し（要素１４０４）（例えば、構成マネージャクラスタのいくつかのノードにおけるそれぞれのストレージデバイスに）、ＨＣＳＮを示す停止コマンドをＳＲＧの１つ以上の他のノードに送信し得る（要素１４０７）。いくつかの実施形態において、停止コマンドは、失敗したと仮定されるノードを含む、ＳＲＧのすべての既知のメンバーに送信され得る。ＳＲＧの受信者ノードはそれぞれ、それらのローカルコミット記録セットがＨＣＳＮに対応するコミット記録を含むことを検証し得る（いくつかの場合、上記のように、受信者ノードが、欠けているコミット記録をコミッタノードから獲得することを必要とし得る）。そのコミット記録セットがＨＣＳＮに関して最新状態であることを検証した後、停止コマンドの受信者は、構成マネージャにそのコミット記録セットが現在は最新であることを示す同期確認を送信し得る。したがって、ＳＲＧノードからそのような確認を受信すると、構成マネージャは、そのノードを最新ノードのリストに追加し得る（要素１４１０）。
【００６６】
いくつかの実施形態において、構成マネージャは、ＳＲＧノードからそれらがサービスに利用可能であることを示すそれぞれのメッセージを受信するのを待ち得る。そのようなメッセージをノードから受信すると（例えば、ノードがクリーンシャットダウン及び再起動を完了した後、またはノードが障害後にオンラインに戻った後）、構成マネージャは、ノードが最新ノードリスト内にあるかどうかを判定し得る。「サービスに利用可能」指標がそこから受信されるノードが、コミット記録に関して最新であることが知られていない場合、構成マネージャは、例えば、明示的同期コマンド内で、またはノードからの暗示的もしくは明示的クエリに応答して、ノードにＨＣＳＮを送信し示し得る（要素１４１３）。ＨＣＳＮをコミット記録がそこまで更新されるべきであるターゲットシーケンス番号として使用して、次いで、ノードは、すでに最新である他のノードと通信することによって、そのローカルコミット記録セットを更新し得る。いくつかの実施形態において、構成マネージャは、同期コマンド内に、古いノードが欠けているコミット記録をそこから獲得するべきであるソースの指標を含み得る。
【００６７】
構成マネージャは、必要とされる最低限の数のＳＲＧノードが、（ａ）サービスに利用可能であること、及び（ｂ）アプリケーションコミット状態に関して最新であることを確認した後、構成マネージャは、ＳＲＧの初期停止後構成を確定し得る（要素１４１６）。次いで、構成マネージャは、構成を示す再稼働メッセージを初期構成内にあるノードの適切なセットに送信し得る（要素１４１９）。いくつかの実施形態において、初期構成情報は、構成−デルタメッセージのシーケンスとしてノードに提供され得る。
【００６８】
少なくともいくつかの実施形態において、同期のために選択されるターゲットシーケンス番号（即ち、ＳＲＧの複数のノードのそれぞれがそこまでコミット記録のそのローカルセットを更新するべきであるシーケンス番号）は、必ずしも最大のコミット済みシーケンス番号である必要はない。例えば、コミッタノードにおける最大のコミット済みシーケンス番号がＳＮ１である場合があり得、急速に発展する大規模障害イベントの検出の結果としてＳＲＧの動作を停止する緊急の必要性に起因して、ＳＲＧ構成マネージャが、ノードにそれらのコミット記録をより小さいシーケンス番号（ＳＮ１−ｋ）に更新した後にそれらの動作を停止することを許可しようとし得る。いくつかの実施態様において、ＳＲＧのノードは、停止／再起動前にそれらのコミット記録をいくらか小さいシーケンス番号に同期させ得、かつ停止後、例えば、ノード再起動後、最大のコミット済みシーケンス番号に同期させ、「サービスに利用可能」メッセージを構成マネージャに送信し得る。先に述べたように、いくつかの実施形態において、停止プロシージャは、非コミッタノードによって、または構成マネージャ自体によって開始され得る。
【００６９】
複数データ格納トランザクションのためのログベースの楽観的並行性制御
いくつかの実施形態において、上記のタイプの複製ＤＡＧは、複数の独立したデータストアに関与するトランザクションのサポートを可能にするログサービスを使用して楽観的並行性制御技術を実装するために使用され得る。図１５は、少なくともいくつかの実施形態に従う、複数のデータストアへの書き込みを含み得るトランザクションをサポートする永続的な変更ログを含む例示的なシステム環境を示す。システム１５００は、ログサービスを使用してインスタンス化され得る永続的な変更ログ１５１０を示す。描写された実施形態において、データストア１５３０Ａ（例えば、ＮｏＳＱＬまたは非リレーショナルデータベース）及びデータストア１５３０Ｂ（例えば、リレーショナルデータベース）などの１つ以上のデータストア１５３０が、トランザクション管理のためにログサービスで登録され得る。「並行性制御」、「トランザクション管理」、及び「更新管理」という用語は、ログサービスによって提供される機能性に関して、本明細書では同義語として使用され得る。
【００７０】
クライアント１５３２は、いくつかの実施形態において、それらがある特定のアプリケーションについてログベースのトランザクション管理を使用することを望むデータソースのセットを示す登録要求を、例えば、ログサービスマネージャ１５０１によって提示される管理または制御プレーンプログラムインターフェースを介して、サブミットし得る。永続的な変更ログ１５１０は、いくつかの実施形態において、そのような登録要求に応答してインスタンス化され得る。概して、所与の永続的な変更ログインスタンスは、１つ以上の基礎となるデータストアのためのトランザクションを管理するために作成され得る。つまり、少なくともいくつかの配置において、ログベースのトランザクション管理は、複数のデータストアのために同時に使用されるのではなく、単一のデータストアのために使用され得る。「データストア」という用語は、本明細書で使用される場合、幅広い種類の永続もしくは一時データリポジトリ及び／またはデータコンシューマのうちのいずれかのインスタンスを指し得る。例えば、一部のデータストアが、マルチアイテムトランザクションのためのネイティブのサポートを必ずしも提供しない場合がある永続的な非リレーショナルデータベースを含み得る一方で、他のデータストアは、マルチアイテムトランザクションをネイティブにサポートし得る永続的なリレーショナルデータベースを含み得る。いくつかの実施形態において、ウェブサービスインターフェースを介してアクセス可能な、そのユーザが任意のサイズの非構造化データオブジェクトを格納することを可能にするプロバイダネットワークのネットワークアクセス可能なストレージサービスが、データストアのうちの１つとして登録され得る。他のタイプのデータストアは、インメモリデータベース、分散キャッシュのインスタンス、ネットワークアクセス可能なブロックストレージサービス、ファイルシステムサービス、またはマテリアライズドビューを含み得る。ログサービスによって記録されるコミットされた書き込みを、例えば、新しいデータアーティファクトを生成するために、コンシュームするエンティティは、別のタイプのデータストアを表し得、本明細書では、総称的に「データコンシューマ」と称され得る。そのようなデータストアは、例えば、ログサービスを介して管理されるデータの指定されたセットに対する指定されたクエリの結果を生成することを担う事前計算されたクエリ結果マネージャ（ＰＱＲＭ）（データストア１５３０Ｃの場合のように）を含み得る（データの指定されたセットは、１つ以上の異なる他のデータストアに格納されるオブジェクトを含み得る）。いくつかの実施形態において、ログサービスを介して管理される一部またはすべてのコミットされたデータのポイントインタイムスナップショットを生成するように構成されるスナップショットマネージャは、別の種類のデータストアを表し得る。そのようなログスナップショットは、異なる実施形態において、バックアップのためまたはオフライン作業負荷分析のためなど、様々な目的のために格納され得る。「データコンシューマ」という用語は、本明細書では、ＰＱＲＭ及びスナップショットマネージャなどのデータストアを指すために使用され得る。データストアのうちの少なくともいくつかは、他のデータストアのものとは異なる読み取りインターフェース１５３１を有し得、例えば、データストア１５３０Ａのデータストア（ＤＳ）読み取りインターフェース１５３１Ａは、描写された実施形態において、ＤＳ読み取りインターフェース１５３１Ｂまたは事前計算されたクエリインターフェース１５３１Ｃとは異なる、ＡＰＩ、ウェブベースのインターフェース、コマンドラインツール、またはカスタムＧＵＩ（グラフィカルユーザインターフェース）のセットを含み得る。
【００７１】
描写された実施形態において、ログサービスクライアント１５３２は、トランザクション要求をローカルで構築し、次いで永続的な変更ログ１５１０による承認及びコミットのためのトランザクション要求をサブミット（または「オファー」）し得る。１つの実施態様において、例えば、ログサービスのクライアント側ライブラリは、クライアントが「トランザクション開始」要求の論理等価物を発行することによって候補トランザクションを開始することを可能にし得る。候補トランザクション内で、クライアントは、いくつかの読み取りをデータストア１５３０でオブジェクトの選択されたセットに対して実行し得、ローカルで（例えば、ローカルメモリ内で）１つ以上のデータストアに向けられる書き込みの提案されたセットを実行し得る。次いで、クライアントは、「トランザクション終了」要求の等価物を発行することによって候補トランザクションをサブミットし得る。描写された実施形態において、候補トランザクション要求１５１６は、ログの書き込みインターフェース１５１２を介して、永続的な変更ログ１５１０と関連付けられたコンフリクト検出器１５０５で受信され得る。概して、少なくともいくつかの実施形態において、所与のトランザクション要求１５１６は、１つ以上のデータストアからそれぞれ１つ以上の読み取り、及び１つ以上のデータストアにそれぞれ向けられる１つ以上の提案された書き込みを含み得、ここで読み取られるデータストアのセットは、書き込まれているデータストアのセットと重複する場合、またはしない場合がある。読み取りは、いくつかの実施形態において、ネイティブＤＳ読み取りインターフェース１５３１を使用して実行され得る（とはいえ、下に記載されるように、いくつかのシナリオにおいては、クライアントは、永続的な変更ログ１５１０を介して読み取りのみの動作も実行し得る）。
【００７２】
所与のトランザクション要求に示される書き込みのうちの少なくともいくつかは、いくつかの実施形態において、読み取りのうちの１つ以上の結果に依存し得る。例えば、要求されたトランザクションは、１つの値Ｖ１をデータストアＤＳ１にある場所Ｌ１から、第２の値Ｖ２をデータストアＤＳ２にある第２の場所Ｌ２から読み取ること、関数Ｆ（Ｖ１，Ｖ２）を計算すること、及びその関数をデータストアＤＳ３にある場所Ｌ３に格納することに関与し得る。いくつかのロックベースの並行性制御機構において、排他的ロックは、Ｌ３が更新される前に値Ｖ１及びＶ２が変わらないことを確実にするために、Ｌ１及びＬ２で獲得される必要があり得る。図１５に示されるログサービスの楽観的並行性制御機構において、ロックが獲得される必要のない場合がある。むしろ、描写された実施形態において、コンフリクト検出器１５０５が、トランザクション記述子１５１６の内容、及び永続的な変更ログ１５１０のコミットされたトランザクションログ記録１５２７のセットに少なくとも部分的に基づいて、要求されたトランザクション内のデータアイテム読み取りのセットが、それらがそれぞれのデータストアから読み取られて以降、更新されているかどうかを判定し得る。下にさらに詳細に記載されるように、少なくともいくつかの実施形態において、シーケンス番号をベースとした技術を使用して、そのような読み取り−書き込みコンフリクトが存在するかどうかを判定し得る。コンフリクト検出器１５０５が、トランザクション中に読み取られたデータがどれも上書きされていないことを判定する場合、要求されたトランザクションは、コミットを受理され得、そのようなコミットを受理されたトランザクション１５１４は、永続的な変更ログでの対応するログ記録の複製のためにサブミットされ得る。「承認」及び「受理」という用語は、拒否されない要求されたトランザクションに関して、本明細書では同義語として使用され得る。対応する読み取りが発生したために読み取りデータの一部が更新された場合（または、データが更新された可能性が、閾値よりも大きいとコンフリクト検出器によって推定される場合）、要求されたトランザクション１５１６は、描写された実施形態において、むしろ拒否または中断され得る。並行性制御に対するこのタイプのアプローチは、トランザクションの書き込みのセットを続行するかどうかに関する決定が読み取り−書き込みコンフリクトが起こりそうもないという楽観的仮定の下に最初になされ得るという点で、楽観的と見なされ得る。その結果、読み取り−書き込みコンフリクトが実際にはまれに起こるシナリオにおいては、より従来型のロックベースの技術が使用される場合に起こり得るよりも高いスループット及び低い応答時間が達成され得る。
【００７３】
トランザクションがコミットを受理される場合において、コミットされたトランザクションログ記録の内容は、描写された実施形態において、コミットが成功したと見なされる前に（図１６に関して下にさらに詳細に記載されるように）永続的な変更ログ１５１０と関連付けられた複製ＤＡＧのいくつかのノードで複製され得る。必要数のレプリカが作成されない場合、描写された実施形態において、トランザクションは拒否または中断され得る。コミットに必要とされるレプリカの数は、異なるアプリケーションまたはクライアントでは様々であり得る。コミットされたトランザクションログ記録はまた、本明細書では「コミット記録」と称され得る。いくつかの実施形態において、要求しているクライアント１５３２は、要求したトランザクションがコミットされるときに通知され得る。少なくとも１つの実施形態において、クライアント１５３２は、トランザクションが拒否されるときに通知され得、その結果、例えば、新しいトランザクション要求が、所望の更新のために生成またはサブミットされ得る。
【００７４】
コミットされる各トランザクションのために、少なくともいくつかの実施形態において、コミットシーケンス番号（またはアプリケーションのコミットされた状態を示す何らかの他の識別子）が、永続的な変更ログ１５３２で生成及び格納され得る（例えば、コミットされたトランザクションログ記録のレプリカのそれぞれの一部として）。そのようなコミットシーケンス番号は、状態遷移のための複製ＤＡＧで使用されるシーケンス番号に関して上に記載されるように、例えば、カウンタとしてまたは論理タイムスタンプとして実装され得る。コミットシーケンス番号は、例えば、いくつかの実施形態においては、コンフリクト検出器によって、または他の実施形態においては、永続的な変更ログの異なるコンポーネント（使用されている複製ＤＡＧのコミッタノードなど）で判定され得る。描写された実施形態において、所与のトランザクションがコミットされ、かつそのコミット記録が永続的な変更ログに格納された後、トランザクションの書き込みは、それらが向けられた（または、ＰＱＲＭ１５３０Ｃの場合のように、書き込まれたデータがコンシュームされるべきである）データストア１５３０のうちの１つ以上に適用または伝播され得る。いくつかの実施態様において、書き込みは、非同期方式でターゲットとされたデータストア１５３０にプッシュされ得る。故に、そのような実施態様において、トランザクションがコミットされるとき（即ち、コミット記録の必要とされる数のレプリカが無事に格納されたとき）と、コミットされたトランザクションのある特定の書き込み動作のペイロードが対応するデータストアに達するときとの間にはいくらかの遅延があり得る。図１５に示される実施形態において、それぞれの非同期型書き込みアプライヤ１５１７が、関連のあるデータストアへの書き込みの一部またはすべてを伝播するために使用され得る。例えば、書き込みアプライヤ１５１７Ａは、データストア１５３０Ａに関連のある書き込み１５１５Ａを適用するように構成され、書き込みアプライヤ１５１７Ｂは、データストア１５３０Ｂに関連のある書き込みをプッシュし、及び、書き込みアプライヤ１５１７Ｃは、データストア１５３０Ｃでコンシュームされるべき書き込みをプッシュする。いくつかの実施態様において、書き込みアプライヤは、永続的な変更ログ１５１０のサブコンポーネント（例えば、スレッドまたはプロセス）を含み得る一方、他の実施態様においては、書き込みアプライヤ１５１７は、永続的な変更ログの外部のエンティティとして実装され得る。いくつかの実施形態において、所与の書き込みアプライヤ１５１７は、１つを超えるデータストア１５３０に書き込みを伝播することを担い得るか、単一のデータストア１５３０が、複数の書き込みアプライヤ１５１７から書き込みを受信し得る。少なくとも１つの実施態様において、プル技術を使用して、書き込まれたデータをデータストアに伝播し得、例えば、１つ以上のデータストア１５３０は、書き込みアプライヤの主導で書き込まれたデータを提供されるのではなく、書き込みのための要求を永続的な変更ログ１５１０または書き込みアプライヤにサブミットし得る。トランザクション中に書き込まれるデータが対応するデータストアに適用された後、クライアント１５３２は、データストアのそれぞれの読み取りインターフェースを使用して、更新されたデータを読み取ることが可能であり得る。いくつかの実施形態において、書き込みアプライヤのうちの少なくとも１つは、同期型書き込みを実行する能力があり得る（例えば、ログサービスによってそうするように明示的に命令されるとき、またはそのアプライヤが担当するすべての書き込みのためのいずれか）。例えば、クライアントは、所与のトランザクションの少なくとも１つの書き込み（トランザクションに関与する複数のデータストアのうちの「マスター」データストアに向けられる書き込みなど）が、クライアントがトランザクションがコミットされたことを通知される前に適用されたことを確実にすることを望み得る。同期して実行されるべき特定の書き込みは、いくつかの実施形態において、トランザクション要求１５１６に示され得る。
【００７５】
いくつかの実施形態において、下にさらに詳細に記載されるように、所与のトランザクション要求１５１６は、トランザクションの読み取りセット（即ち、トランザクション中に読み取られるデータオブジェクトのセットを識別する情報）、トランザクションの書き込みセット（即ち、トランザクションがコミットされる場合に更新される／書き込まれるべきデータオブジェクトのセットを識別する情報）、書き込みペイロード（即ち、各書き込みのために格納されるべきデータバイトのセット）、及び／またはコンフリクトチェックデリミタ（トランザクションを受理／拒否するために調査されなければならないコミットされたトランザクションログ記録のサブセットの指標）のそれぞれのインジケータを含み得る。トランザクション要求のこれらの構成要素の一部またはすべては、対応するコミット記録内に、トランザクションのコミットシーケンス番号と一緒に格納され得る。少なくとも１つの実施形態において、永続的な変更ログ１５１０は、例えば、データストアからのクエリまたはログサービスクライアントからのクエリに応答して、アプリケーションの最新のコミットされた状態の識別子１５９０（これまでに生成された最大のコミットシーケンス番号など）を提供し得る。書き込みアプライヤは、描写された実施形態において、それらがデータストアで適用する書き込みに対応するコミットシーケンス番号を示し得る。故に、任意の所与の時間点で、クライアント１５３２は、（例えば、データストアにクエリすることによって）所与のデータストア１５３０で直前に適用された書き込みに対応するコミットシーケンス番号を判定することが可能であり得る。
【００７６】
少なくともいくつかの実施形態において、トランザクション要求の生成中（例えば、ログサービスのクライアントライブラリによる）、直前に適用されたコミットタイムスタンプは、トランザクション中にアクセスされるデータストアから獲得され得、そのようなコミットシーケンス番号のうちの１つ以上は、コンフリクトチェックデリミタとしてトランザクション要求内に示され得る。例えば、ある特定のクライアントがデータストアＤＳ１にある場所Ｌ１の読み取りを含むトランザクションを開始するときに、ＤＳ１で直前に適用された書き込みに対応するコミットシーケンス番号がＳＮ１であるというシナリオを検討する。この実施例では、トランザクションの読み取りセットは、ＤＳ１のデータのみ含むとさらに仮定する。そのようなシナリオでは、ＳＮ１は、トランザクション要求１５１６に含まれ得る。コンフリクト検出器は、要求されたトランザクションについて読み取り−書き込みコンフリクトが調査されるべきコミット記録のセットとしてＳＮ１より大きいシーケンス番号を有するコミット記録を識別し得る。識別されたコミット記録の書き込みセットのうちのいずれかが要求されたトランザクションの読み取りセットと重複する場合、トランザクションは拒否／中断され得、そうでない場合は、トランザクションは、この例示的なシナリオでは、コミットを承認され得る。
【００７７】
描写された実施形態において、ログサービスは、１つ以上のプログラムログ読み取りインターフェース１５１３（例えば、ＡＰＩ、ウェブページ、コマンドラインユーティリティ、ＧＵＩなど）を公開して、クライアント１５３２がログ記録を直接読み取ることを可能にし得る。他の実施形態において、変更ログ１５１０への直接アクセスを許可するそのような読み取りＡＰＩは、実装されない場合がある。コミットされた特定のトランザクションを示すログ記録に直接アクセスし、それらがコミットされた順番を判定する能力は、いくつかの実施形態において、データストアのみに直接アクセスすることから可能であり得ることと比べて、新しいタイプの分析が実行されることを可能にし得る（データストアのうちの少なくとも一部は、典型的には、読み取り側にデータオブジェクトの最新の適用されたバージョンを見ることのみを許可し、データオブジェクトの履歴を見ることは許可しないため）。
【００７８】
図１５に示される楽観的並行性制御機構は、少なくともいくつかのシナリオにおいて、基礎となるデータストアの並行性制御機構を使用して可能であり得たよりも複雑なタイプの不可分操作がサポートされることを可能にし得る。例えば、いくつかの高性能非リレーショナルデータストアは、シングルアイテムトランザクションのみを許可し得る（即ち、書き込みは１つずつ許可され得るが、複数の書き込みが単一バッチ更新でサブミットされる場合、原子性／一貫性保証は、一緒に行われる複数の書き込みには提供されない場合がある）。上記のログベースのアプローチでは、非リレーショナルデータストア（及び／または他のデータストアも同様に）の複数の場所への書き込みを包含する単一のトランザクションは、比較的容易にサポートされ得る。永続的な変更ログ１５１０は、関連付けられたコンフリクト検出器１５０５と一緒に、本明細書では、ログベースのトランザクションマネージャと称され得る。いくつかの実施形態において、書き込みアプライヤ１５１７はまた、トランザクションマネージャのサブコンポーネントと見なされ得る。
【００７９】
上で述べたように、永続的な変更ログ１５１０は、いくつかの実施形態において、先に記載される複製ＤＡＧを使用して実装され得る。図１６は、少なくともいくつかの実施形態に従う、複製ＤＡＧ１６４０を使用した永続的な変更ログの例示的な実施態様を示す。描写された実施形態において、ＤＡＧによって管理されるアプリケーション状態遷移は、１つ以上のデータストアのセットに向けられる読み取り及び書き込みを含むアプリケーションの一部としてログクライアント１６６０によって要求されるトランザクションに相当する。アプリケーションの状態は、アクセプタノード１６１０、中間ノード１６１２、コミッタノード１６１４、及びスタンバイノード１６１６においてローカルストレージに格納されるトランザクション記録１６７２のそれぞれのセットとして、ノード１６１０、１６１２、及び１６１４を含む現在の複製経路と共にモデル化され得る。いくつかの実施態様において、承認（即ち、要求されたトランザクションがコミットを承認されたことを示す）及びコミットのための別個のトランザクション記録が格納され得る一方、他の実施形態においては、単一のトランザクション記録が、トランザクションがコミットされたかどうかを示すフィールドと共に格納され得る。シーケンス番号または論理タイムスタンプは、描写された実施形態において、トランザクション記録のうちの少なくともいくつかの一部として格納され得るか、トランザクション記録のうちの少なくともいくつかによって示され得る。
【００８０】
要求されたトランザクション１６５０がコミットを承認されるべきかどうかに関する決定は、描写された実施形態において、アクセプタノード１６１０で実装されるコンフリクト検出器によってなされ得るが、他の実施形態においては、コンフリクト検出器は複製ＤＡＧの外側に実装され得る。フォールトトレラントログ構成マネージャ１６４は、構成−デルタメッセージを非同期的にＤＡＧノード１６１０、１６１２、１６１４、及び１６１６に送信し得、各そのようなメッセージは、ＤＡＧの構成全体よりむしろＤＡＧ構成に対する変更を示し、クライアント１６６０によってサブミットされる、入ってくるトランザクション要求のストリームの処理を停止することをＤＡＧノードに要求しない。各ＤＡＧノードは独立して、受信される構成−デルタメッセージを処理または集約して、現在のＤＡＧ構成のそのそれぞれのビュー１６７４（例えば、ノード１６１０ではビュー１６７４Ａ、ノード１６１２ではビュー１６７４Ｂ、ノード１６１４ではビュー１６７４Ｃ、及びノード１６１６ではビュー１６７４Ｄ）に達し得る。ビュー１６７４のうちの少なくともいくつかは、所与の時点で他のノードにおけるものとは異なり得、故に、通常動作条件下では、異なるＤＡＧノードが、ＤＡＧ構成のそれらのビューを互いに同期させる必要がない場合がある。承認された（が、まだコミットされていない）トランザクションを示すメッセージ１６５２Ａ及び１６５２Ｂは、複製経路に沿ってアクセプタノード１６１０及び中間ノード１６１２からそれぞれ伝送され得る。描写された実施形態において、コミッタノード１６１４は、コミットを示すメッセージ１６５３をアクセプタ及び中間ノード、ならびにスタンバイノード１６１６に伝送し得る。複製ＤＡＧの外側のエンティティとして図１６の実施形態に示される、非同期型書き込みアプライヤ１６９２は、様々なコミットされたトランザクション記録からの書き込みを適切なデータストアまたはデータコンシューマに伝播し得る。他の実施形態において、書き込みアプライヤは、例えば、ＤＡＧノード内で実行するそれぞれのプロセスとして、複製ＤＡＧ内に実装され得る。いくつかの実施態様において、ＤＡＧノードのサブセットのみが、コミットされた書き込みをそれらの送信先データソースまたはコンシューマに伝播するために、アプライヤ１６９２によって読み取られ得る。他の実施形態において、図１６に示されるように、アプライヤは、先に記載されるように、コミットされたトランザクション記録をＤＡＧノードのうちのいずれかから読み取り、書き込みペイロードの内容をプッシュし得る。
【００８１】
トランザクション要求要素
図１７は、少なくともいくつかの実施形態に従う、ログサービスのクライアント１７３２によってサブミットされ得るトランザクション要求記述子１７４４の例示的なコンポーネント要素を示す。示されるように、トランザクション記述子１７４４は、描写された実施形態において、コンフリクトチェックデリミタ１７０２、読み取りセット記述子１７０４、書き込みセット記述子１７０６、書き込みペイロード（複数可）１７０８、及び任意の論理制約記述子１７１０を含み得る。示される実施例において、ログサービスクライアント１７３２は、トランザクション要求記述子を集めるために利用され得るクライアントライブラリ１７５６を含む。少なくともいくつかの実施形態において、クライアントライブラリは、トランザクション中にデータがそこから読み取られるデータストア１７３０Ａ、１７３０Ｂ、及び１７３０Ｃ内のそれぞれの読み取り場所１７６１Ａ、１７６１Ｂ、及び１７６１Ｃ、ならびに／またはデータがそこに書き込まれる書き込み場所１７７１（描写される実施例ではデータストア１７３０Ｃの）を自動的に記録し得る。いくつかの実施態様において、クライアントライブラリ１７５６はまた、データソース１７３０のそれぞれから、その書き込みがデータストアに直前に適用された直前のトランザクションの対応するコミットシーケンス番号（ＣＳＮ）を獲得し得る。一実施形態において、そのようなＣＳＮは、例えば、トランザクションの読み取りのうちのいずれかが対応するデータストアに発行される前に、取得され得る。別の実施形態において、ＣＳＮは、所与のデータストア１７３０から、現在のトランザクション内のそのデータストアに向けられる第１の読み取りが発行される直前に、取得され得る。
【００８２】
描写された実施形態において、コンフリクトチェックデリミタ１７０２は、直前に適用されたＣＳＮがインプットとして提供される関数に由来し得る。例えば、１つの実施態様において、トランザクション中にすべてのデータストア読み取りから獲得されるＣＳＮの中で最小のシーケンス番号が使用され得る。別の実施態様において、データストアのそれぞれからのＣＳＮを含むベクトルまたはアレイが、トランザクション要求記述子のコンフリクトチェックデリミタ１７０２として含まれ得る。コンフリクトチェックデリミタ１７０２はまた、それが要求されたトランザクションが依存する１つ以上のデータストアのコミットされた状態を表すため、本明細書では、コミット状態識別子（ＣＳＩ）と称され得る。いくつかの実施形態において、選択されたハッシュ関数が、読み取り場所１７６１Ａ、１７６１Ｂ、または１７６１Ｃのそれぞれに適用されて、読み取り記述子１７０４に含まれるべきハッシュ値のセットを獲得し得る。同様に、選択されたハッシュ関数は（実施態様によっては、読み取り記述子に使用されたものと同じ関数、または異なる関数のいずれか）、トランザクションの書き込み（複数可）の場所に適用されて、書き込みセット記述子１７０６を生成し得る。他の実施形態において、ハッシュ化が使用されない場合があり、むしろ、例えば、非ハッシュ化場所識別子が、読み取り及び書き込みセットエンティティのそれぞれのために使用され得る。書き込みペイロード１７０８は、トランザクションに含まれる書き込みのそれぞれのために書き込まれるべきデータの表現を含み得る。任意の論理制約１７１０は、下にさらに詳細に記載されるように、重複検出／排除のため及び／または他のトランザクション前後に指定されたトランザクションのシーケンシングのために使用される署名を含み得る。トランザクション要求記述子１７４４の内容のうちの一部またはすべては、いくつかの実施形態において、永続的な変更ログ１５１０で複製されるトランザクション状態記録（例えば、承認されたトランザクション記録及び／またはコミットされたトランザクション記録）の一部として格納され得る。
【００８３】
読み取り記述子及び書き込み記述子がそこから生成される読み取り及び書き込み場所は、異なる実施形態においては、または異なるデータストアでは、異なるストレージ粒度、または異なるタイプの論理エンティティさえ表し得ることに留意されたい。例えば、ある特定のデータオブジェクトがコンテナ名（例えば、テーブル名）、ユーザ名（コンテナの所有者を示す）、及びキーのいくつかのセット（例えば、ハッシュキー及び範囲キー）の組み合わせによって表される非リレーショナルデータベースを含むデータストアの場合、読み取りセットは、タプル（コンテナＩＤ、ユーザＩＤ、ハッシュキー、範囲キー）の関数として獲得され得る。リレーショナルデータベースの場合、タプル（テーブルＩＤ、ユーザＩＤ、行ＩＤ）または（テーブルＩＤ、ユーザＩＤ）が使用され得る。
【００８４】
様々な実施形態において、トランザクションマネージャは、トランザクション要求及び永続的な変更ログの内容を使用して、トランザクション要求に示される読み取りとログに示される書き込みとの間のコンフリクトを識別することを担い得る。比較的単純な読み取り動作の場合、読み取られた場所に基づいてハッシュ値を生成し、読み取り場所のハッシュ値を変更ログに示される書き込みのハッシュ値と比較することは、コンフリクトを検出するのに十分であり得る。より複雑な読み取り要求の場合、いくつかの実施形態において、場所ベースのハッシュ値を使用することが常に十分ではない場合がある。例えば、読み取り要求Ｒ１がクエリ「文字「Ｇ」で始まる製品名をテーブルＴ１から選択せよ」を含み、かつ元の結果セットが「Ｇｏｏｄ−製品１」であったシナリオを検討する。書き込みＷ１がＲ１の結果に依存するトランザクション要求が受理のために調査されるまでに、製品名「Ｇｒｅａｔ−製品２」がテーブル内に挿入された場合、これは、「Ｇｏｏｄ−製品１」データオブジェクトの場所が、修正され得なかったために、ログの書き込み記録が示され得ないにもかかわらず、トランザクション受理決定がなされるときにＲ１が再実行された場合には、Ｒ１の結果セットが変わってしまうことを意味する。そのような読み取りクエリに関して読み取り−書き込みコンフリクトに対処するため、または値の範囲を伴う読み取りクエリ（例えば、「＄１０〜＄２０の価格の製品の製品名のセットを選択せよ」）の場合、いくつかの実施形態において、論理または述部ベースの読み取りセット記述子が使用され得る。故に、上記の場所ベースの読み取りセットインジケータは、読み取り−書き込みコンフリクト検出のために様々な実施形態で使用され得る結果セット変更検出メタデータの単に１つの例示的な種類と見なされ得る。
【００８５】
読み取り−書き込みコンフリクト検出
図１８は、少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャでの読み取り−書き込みコンフリクト検出の実施例を示す。描写された実施例において、永続的な変更ログ１８１０に格納されるトランザクションコミット記録（ＣＲ）１８５２は、コミットシーケンス番号がログの上から下へ増加する順番に配置されて示される。最新のまたは直前にコミットされたトランザクションは、コミットシーケンス番号（ＣＳＮ）１８０４Ｆ及び書き込みセット記述子（ＷＳＤ）１８０５Ｆを有するＣＲ１８５２Ｆによって表される。ＣＲ１８５２Ａ、１８５２Ｂ、１８５２Ｃ、１８５２Ｄ、及び１８５２Ｅのそれぞれは、対応するＣＳＮ１８０４（例えば、それぞれＣＳＮ１８０４Ａ〜１８０４Ｅ）及び対応するＷＳＤ１８０５（例えば、ＷＳＤ１８０５Ａ〜１８０５Ｅ）を含む。
【００８６】
示されるように、トランザクション要求記述子１８４４は、コンフリクトチェックデリミタ（またはコミットされた状態の識別子）１８４２、読み取りセット記述子１８４６、及び書き込みセット記述子１８４８を含む。（要求されたトランザクションの書き込みペイロードは示されない）。ログベースのトランザクション管理システムのコンフリクト検出器は、要求されたトランザクションの読み取りセットとのコンフリクトをチェックされるべきであるログ１８１０のＣＲのセットを識別することを必要とされ得る。コンフリクトチェックデリミタ１８４２は、描写された実施形態において、「一致」と表記される矢印によって示されるように、要求されたトランザクションで読み取り−書き込みコンフリクトを調査されるべきであるセット１８０９の開始ＣＲを識別するためにコンフリクト検出器によって使用され得る下限ＣＳＮを示す。セット１８０９は、いくつかの実施形態において、直前にコミットされたトランザクション（ＣＲ１８５２Ｆ）までの一致するシーケンス番号で始まるすべてのＣＲを含み得る。ＣＲセット１８０９によって示される書き込みのうちのいずれかがトランザクション要求１８４４に示される読み取りのうちのいずれかと重複する場合、そのような読み取り−書き込みコンフリクトは、要求されたトランザクションの拒否を引き起こし得る。異なる実施形態において、様々な機構を使用して、そのような重複が存在するかどうかをチェックし得る。一実施形態において、例えば、１つ以上のハッシュ化ベースの計算または探査を使用して、読み取りセット記述子１８４６に表される読み取りがＣＲセット１８０９に示される書き込みとコンフリクトするかどうかを判定し、それによりＣＲセットのシーケンシャルスキャンを回避し得る。いくつかの実施態様において、例えば、ＣＲセット内の記録の数が閾値未満の場合は、ＣＲセット１８０９のシーケンシャルスキャンが使用され得る。ＣＲセット１８０９に示される書き込みがどれも、要求されたトランザクションの読み取りのうちのいずれかと重複しない場合、トランザクション要求の準備中に読み取られたデータのどれも、それらが読み取られて以降、変更し得なかったため、トランザクションは受理され得る。少なくとも１つの実施形態において、トランザクション要求記述子は、コンフリクトをチェックされるべきトランザクション記録のシーケンス番号に対する上限も示し得、例えば、コンフリクトチェックデリミタは、ＣＳ１８５２のセット内の開始点及び終了点の両方を示し得る。
【００８７】
楽観的ログベースの並行性制御のための方法
図１９は、少なくともいくつかの実施形態に従う、ログサービスで実行され得る制御プレーン動作の態様を示すフロー図である。示される管理または構成関連の動作のうちの少なくともいくつかは、例えば、ログサービスで実装される１つ以上の管理プログラムインターフェースの呼び出しに応答して、図１５に示されるものなどのログサービスマネージャ１５０１によって実行され得る。要素１９０１に示されるように、１つ以上のデータストアは、例えば、上記の読み取り−書き込みコンフリクト検出アプローチを使用して、楽観的並行性制御機構を実装するログサービスを介してトランザクション管理のために登録され得る。異なる実施形態において、例えば、リレーショナルデータベース、非リレーショナルデータベース、インメモリデータベース、プロバイダネットワーク実装されたストレージサービス、分散キャッシュコンポーネント、事前計算されたクエリ結果マネージャ、スナップショットマネージャなどのインスタンスを含む、それぞれの別個の読み取りインターフェースを有する様々なタイプのデータストアのためのトランザクション管理は、ログベースのアプローチを使用して実装され得る。いくつかの実施形態において、所与のログインスタンスを使用して管理される基礎となるデータストアのうちの一部またはすべては、いくつかの従来のリレーショナルデータベースシステムによってサポートされるＡＣＩＤ特性（原子性、一貫性、分離性、及び耐久性）のうちの少なくともいくつかをサポートしない場合がある。
【００８８】
ログサービスは、例えば、プロバイダネットワークで実装されるプロビジョニングサービスの助けを借りて、登録されたデータストアのために実装されるべき永続的な変更ログの複製ＤＡＧノードに使用されるべきホストのセットを識別し得る（要素１９０４）。１つ以上のホストはまた、複製ＤＡＧのための構成マネージャを識別され得、例えば、先に記載されるように、ＤＡＧ構成変更を実装するためにコンセンサスベースのプロトコルを利用するノードのクラスタが、いくつかの実施態様では使用され得る。複製ノード及び構成マネージャは、選択されたホストでインスタンス化され得る。コンフリクト検出器、１つ以上の書き込みアプライヤ、及び永続的な変更ログのための任意の読み取りインターフェースマネージャを含む、ログベースのトランザクション管理機構の他のコンポーネントが構成され得る（要素１９０７）。ログのための読み取りインターフェースマネージャは、いくつかの実施形態において、ログに直接サブミットされる（登録されたデータストアの読み取りインターフェースにサブミットされる代わりに）読み取り要求に応答することを担い得る。書き込みアプライヤは、１つの例示的な実施態様において、トランザクションがログでコミットされるときに通知をサブスクライブするそれぞれのプロセスまたはスレッドとしてインスタンス化され得る。コンフリクト検出器は、いくつかの実施形態において、ログの読み取りインターフェースを利用するモジュールを含み得る。コンフリクトマネージャの構成は、例えば、読み取り−書き込みコンフリクトが、重複排除またはシーケンシングに対応する制約チェック動作に対して識別される順番、クライアントに対する応答が提供される様式（例えば、クライアントがトランザクション拒否／コミットに関して通知されるかどうか、及びどのように通知されるか）などを確立することを含み得る。いくつかの実施形態において、コンフリクト検出器、書き込みアプライヤ、及び／またはログ読み取りインターフェースマネージャは、マルチテナント方式で実装され得、例えば、所与のコンフリクト検出器、書き込みアプライヤ、または読み取りインターフェースマネージャは、そのサービスをそれぞれのログインスタンスが確立されている複数のクライアントに提供し得る。
【００８９】
永続的な変更ログの様々なコンポーネントが構成された後、クライアントからのトランザクション要求の流れは、例えば、クライアントに適切なネットワークアドレス及び／または証明書を提供することによって、有効にされ得る（要素１９１０）。少なくともいくつかの実施形態において、ログサービスで実行される制御プレーン動作は、格納されたトランザクション状態記録のトリミングまたはアーカイビング部分を含み得る（要素１９１４）。いくつかのそのような実施形態において、例えば、所与の永続的な変更ログのトランザクション記録に使用されるストレージの量が閾値を超えるとき、いくつかの一番古いトランザクション記録は、異なるストレージ設備（プロバイダネットワークストレージサービス、またはトランザクション記録の最近のセットに使用されるものよりも遅いストレージデバイスのセットなど）にコピーされ得る。別の実施形態において、一番古いトランザクション記録は、単に破棄され得る。少なくとも１つの実施形態において、例えば、第１の変更ログが記録の閾値集合に達するとき、永続的な変更ログのあるインスタンスと別のインスタントとの間で切り替えることなど、他の制御プレーン動作が必要に応じて実行され得る。
【００９０】
図２０は、少なくともいくつかの実施形態に従う、クライアントから受信されるトランザクション要求に応答してログサービスで実行され得る動作の態様を示すフロー図である。要素２００１に示されるように、ログサービスのコンフリクト検出器は、例えば、コンフリクトチェックデリミタ、読み取りセット、及び永続的な変更ログがログサービスによって確立された１つ以上のデータストアにあるそれぞれの場所への１つ以上の書き込みを含む書き込みセットを示す、トランザクションＴ１のトランザクション要求記述子を受信し得る。コンフリクトチェックデリミタは、トランザクションの読み取りの結果がそこから獲得される１つ以上のソースデータストアのコミットされた状態を示し得、したがって、コミット状態識別子（ＣＳＩ）として機能を果たし得る。ＣＳＩはまた、それらがソースデータストアのポイントインタイム論理スナップショットに相当し得るため、いくつかの環境においては「スナップショットシーケンス番号」と称され得る。永続的な変更ログに格納されるトランザクション記録のセットＳ１は、例えば、コンフリクトチェックデリミタ及びログに格納されるトランザクション記録のシーケンス番号を使用して、要求されたトランザクションとの潜在的コンフリクトをチェックするために識別され得る（要素２００４）。そのようなセットＳ１は、一実施形態において、例えば、コンフリクトチェックデリミタに示されるシーケンス番号よりも大きいコミットシーケンス番号を有するトランザクションのすべての記録を含み得る。
【００９１】
読み取り−書き込みコンフリクトが検出される場合（要素２００７）、例えば、要求されたトランザクションの読み取りセットがセットＳ１のトランザクションのうちの１つの書き込みセットと少なくとも部分的に重複する場合、トランザクションＴ１は、拒否または中断され得る（要素２０２２）。いくつかの実施形態において、ハッシュ関数は、そのような重複が存在するかどうかを判定するために使用され得、例えば、読み取りセットが書き込みセットと同じハッシュ値を持つ場合、コンフリクトが発生したと仮定され得る。いくつかの実施態様において、拒否の指標または通知が、トランザクション要求がそこから受信されるクライアントに提供され得、クライアントが別の要求記述子を生成しかつサブミットすることによってトランザクションをリトライすることを可能にする。コンフリクトが検出されない場合（要素２００７においても判定されるように）、Ｔ１は、コミットを受理され得る（要素２０１０）。描写された実施形態において、Ｔ１のトランザクション記録の複製は、例えば、ログの複数の複製ＤＡＧノードで、永続ストレージに対して開始され得る。いくつかの実施形態において、Ｔ１がコミットを受理されたとき、受理シーケンス番号がＴ１に割り当てられ得、各レプリカ内のトランザクション要求記述子要素のうちの少なくともいくつかの内容と一緒に格納され得る。少なくとも１つの実施形態において、受理シーケンス番号は、トランザクションが最終的にコミットされる場合には、コミットシーケンス番号として機能を果たし得る。
【００９２】
トランザクションが管理されているアプリケーションのデータ耐久性ニーズによっては、トランザクションＴ１のコミットが完了する前に、閾値数のレプリカが格納される必要があり得る。十分な数のレプリカが保存される場合（要素２０１３において判定されるように）、コミットは成功したと見なされ得、要求しているクライアントは、いくつかの実施形態において、コミット完了に関して通知され得る（要素２０１４）。何らかの理由で永続ストレージに保存され得るレプリカの数が必要とされる閾値を下回る場合（要素２０１３においても検出されるように）、トランザクションは、中断／拒否され得る（要素２０２２）。Ｔ１コミット後、描写された実施形態において、Ｔ１の書き込みセットに示される書き込み動作は、対応するデータストアまたはデータコンシューマに、例えば、非同期型書き込みアプライヤによって、適用され得る（要素２０１６）。いくつかの実施形態において、書き込みアプライヤのうちの少なくとも１つは、同期し得、例えば、クライアントは、トランザクションがコミットされたことを、そのような同期型書き込みアプライヤが、更新が同期して適用されるべきであるトランザクションの書き込みのサブセットを完了して初めて通知され得る。更新が適用された後、更新されたデータ要素は、それぞれのデータストアの読み取りインターフェースを介して受信されるクライアント読み取り要求に応答して読み取られ得る（要素２０１９）。様々な登録されたデータストアによってサポートされる読み取りインターフェースに加えて、少なくともいくつかの実施形態において、永続的な変更ログ自体が、例えば、ログサービスのプログラムクエリ／読み取りインターフェースを介して、トランザクション記録内容を直接クエリされ得る。いくつかの実施態様において、データストアはすでにログ内に存在する書き込みを伝播することを非同期型アプライヤに依存し得るため、そのようなログサービスインターフェースを介してログに向けられる読み取りは、いくつかの場合において、書き込み動作の結果をデータストアに向けられる読み取りよりもより素早く見ることが可能であり得る。いくつかの実施形態において、トランザクションがログでコミットされるとすぐに書き込みをデータストアに伝播する同期型アプライヤが使用され得る。他の実施形態において、各アプライヤは、構成可能な時間窓を有し得、その中で書き込みは、対応するデータストアまたはコンシューマに伝播されなければならず、その結果、トランザクションコミットとデータストアにおけるトランザクションの修正されたデータの出現との最大遅延を調節することができるようになる。
【００９３】
図２１は、少なくともいくつかの実施形態に従う、それぞれの特殊な一貫性目標を達成するために使用され得るトランザクション要求記述子の実施例を示す。一実施形態において、ログサービスのクライアントは、「リードアフターライト」一貫性セマンティクスを施行することを望み得、これに従って、書き込みは、それがコミットされるとすぐにすべてのリーダに見えるようになる。リードアフターライト一貫性を確実にするため、即ち、読み取りが常にそれがコミットされた直後にデータを「見る」ことを確実にするため、クライアントは、読み取りのみのトランザクションに対してさえも（書き込みを含むトランザクションに対しても）トランザクション要求をサブミットすることを望み得る。読み取りのみのトランザクション要求記述子（ＴＲＤ）２１４４は、例えば、Ｎｕｌｌ書き込みセット２１０６Ａ及びＮｕｌｌ書き込みペイロード２１０８Ａを有するが、非Ｎｕｌｌコンフリクトチェックデリミタ２１０２Ａ及び非Ｎｕｌｌ読み取りセット記述子２１０４Ａを有する。そのような読み取りのみのトランザクション要求記述子を受信すると、コンフリクト検出器は、要求に示される読み取りセットとコンフリクトチェックデリミタに示されるシーケンス番号よりも大きいシーケンス番号でコミットされた書き込みとの間に重複が存在するかどうかをチェックし得る。コンフリクトが検出される場合、読み取りのみのトランザクションは、拒否され得、故に、たとえ要求されたトランザクションがそれらの読み取りに応じたいかなる書き込みを含まないとしても、コンフリクトチェックデリミタが生成された後に、書き込みがコミットされ得た場所への読み取りを許可しない。
【００９４】
少なくともいくつかの実施形態において、書き込みのみのトランザクション要求は、特定の状況下でログサービスにサブミットされ得る。いくつかのアプリケーションでは、少なくともいくらかの期間中またはいくつかのデータストアでは、クライアントが読み取り−書き込み一貫性チェックを施行することを望まない場合があり得る。むしろ、クライアントは、そのような期間中にいくつかの書き込みがコミットを無条件に受理されることを望み得る。したがって、Ｎｕｌｌ読み取りセット２１０４Ｂ及び／またはＮｕｌｌコンフリクトチェックデリミタ２１０２Ｂを有するトランザクション要求記述子２１４５は、非Ｎｕｌｌ書き込みセット記述子２１０６Ｂ及び非Ｎｕｌｌ書き込みペイロード２１０８Ｂと共にサブミットされ得る。そのような書き込みのみの要求は、例えば、データストアもしくはオブジェクトが最初にデータを入れられているとき、または１つの書き込みクライアントのみがある期間中に要求をサブミットしていることが知られる場合、サブミットされ得る。
【００９５】
先に述べたように、いくつかの実施形態において、非同期型書き込みアプライヤは、コミットされた書き込みの内容を永続的な変更ログから様々なデータストアまたはデータコンシューマに伝播するために使用され得る。書き込み伝播の非同期型性質の結果として、ある時点において、コミットされた書き込みのセットがそれらの目的とするデータストアにまだ伝播されていない場合があり得る。少なくとも１つの実施形態において、書き込みのみのトランザクションを使用してそのような未適用の書き込みをフラッシュすることが可能であり得る。例えば、ある特定の書き込みアプライヤＷＡ１が、所与のデータストアＤＳ１に対して未処理のＮ個以下の未適用の書き込みを有するように構成される場合、クライアントは、ＤＳ１内の特別な書き込み場所ＷＬ１に向けられるＴＲＤ２１４５など、書き込みのみのトランザクション要求記述子をサブミットし得、ここでＷＬ１は、特にまたは主として、未処理のコミットされた書き込みをフラッシュするために使用される。いくつかの場合において、そのようなＴＲＤは、いかなる書き込みペイロードも全く有する必要がない場合がある（例えば、書き込みペイロード２１０８Ｂは、Ｎｕｌｌに設定され得る）。そのような書き込み−適用−フラッシュのトランザクション要求が受理されるとき、新しい保留中のコミットされた書き込みがログ及びＷＡ１の未処理要求キューに追加され得る。キューの長さが長くなるにつれて、ＷＡ１は、Ｎ個以下の未適用の書き込みというその要件を満たすために、キュー内の先にコミットされた書き込みを適用し始める必要があり得る。いくつかの実施形態において、そのような書き込み−適用−フラッシュの要求は、コミットされた書き込みがあまりに長い間保留のままになっていることがないように、定期的に、例えば、１秒に１回、サブミットされ得る。書き込み−適用−フラッシュのトランザクションのコミットされた書き込みがアプライヤのキューの先頭に達するとき、いくつかの実施態様において、物理書き込みが実施される必要はなく、むしろ、例えば、アプライヤは、トランザクションに対応するコミットシーケンス番号を直前に「適用された」書き込みのインジケータとして送信先データストアに単に送信し得る。
【００９６】
いくつかのアプリケーションでは、クライアントは、少なくともいくらかの期間の間、厳密なシリアライゼーションを施行することを望み得る。つまり、トランザクション中のデータ読み取りとトランザクション準備が開始されて以降にコミットされ得た書き込みとの間に任意のコンフリクトが存在するかどうかにかかわらず、１つの（書き込みを含む）トランザクションのみが、一度に処理されることを許可され得る。そのようなシナリオにおいて、クライアントは、完全なシリアライゼーショントランザクション要求記述子２１４６を、アプリケーションによって使用されるすべてのデータセットの内容全体を示すその読み取りセット記述子２１０４Ｃと共にログサービスにサブミットし得る。ハッシュ値が読み取られる／書き込まれる場所のインジケータとして使用され、かつ書き込みセットエントリとのビット単位の比較がコンフリクトを検出するために使用される１つの実施態様において、例えば、読み取りセット記述子２４０２Ｃに含まれるハッシュ値は、「１」のシーケンスに設定され得る（例えば、１６ビットハッシュ値の場合、「１１１１１１１１１１１１１１１１」）。任意の書き込み含有トランザクションがそのようなＴＲＤ２１４６のコンフリクトチェックデリミタ２１０２Ｃよりも大きいＣＳＮを有してコミットされた場合、ＴＲＤ２１４６に対応するトランザクションは拒否され得る。故に、書き込みセット記述子２１０６Ｃ及び書き込みペイロード２１０８Ｃによって示される書き込みは、他の書き込みが記述子によって示されるコンフリクトチェック間隔内でコミットされていない場合（そのような書き込みの場所にかかわらず）にのみコミットされることになる。
【００９７】
重複排除及びシーケンシング制約
いくつかの実施形態において、ログサービスのクライアントは、複製エントリが１つ以上のデータストアに書き込まれないことを確実にすることを望み得る。１つのそのような実施形態において、上記のように読み取り−書き込みコンフリクト検出を実行することに加えて、ログサービスはまた、トランザクション要求に示される重複排除要件を施行する必要があり得る。図２２は、少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャで受信されるトランザクション要求と関連付けられた重複排除制約の施行の実施例を示す。示されるように、トランザクション要求記述子２２４４は、読み取り−書き込みコンフリクトチェックデリミタ２２１２、読み取りセット記述子２２１４、書き込みセット記述子２２１６、及び論理制約デリミタ２２１８を含む。ＴＲＤ２２４４の書き込みペイロードは、図２２には示されない。論理制約記述子２２１８は、描写された実施形態において、それが重複排除制約を表すことを示すＬＣタイプフィールド２２１９、重複排除チェックデリミタ２２２０、及び排他署名（複数可）２２２２を含む。
【００９８】
要求されたトランザクションを受理するかどうか判定するために、ログサービスは、描写された実施形態において、２種類のチェック（１つは読み取り−書き込みコンフリクトを検出するため、及び１つは重複を検出するため）を実行する必要があり得る。永続的な変更ログ２２１０内のコミット記録２２５２はそれぞれ、描写された実施形態において、それぞれのコミットシーケンス番号（ＣＳＮ２２０４）、書き込みセット記述子（ＷＳＤ）２２０５、及び重複排除署名（ＤＤＳ）２２０６を含み得る。読み取り−書き込みコンフリクトが発生したかどうかを判定するため、ログサービスは、読み取り−書き込みコンフリクトチェックデリミタ２２１２に対応するシーケンス番号で始まり、かつ直前のコミット記録２２５２Ｆで終わる、その書き込みセットが要求されたトランザクションの読み取りセット記述子２２１４との重複を評価されるべきである、ＣＲセット２２０９を識別し得る。読み取り−書き込みコンフリクトが検出される場合（即ち、そのような重複が存在する場合）、要求されたトランザクションは、先に記載されるように拒否され得る。
【００９９】
要求されたトランザクションの書き込み（複数可）が重複を表すかどうかを判定するため、描写された実施形態において、重複排除チェックデリミタ２２２０に対応するシーケンス番号で始まり、かつ直前のコミット記録２２５２Ｆで終わる別のＣＲセット２２５９が識別され得る。ＣＲセット２２５９内のコミット記録のそれぞれにおいて、ログサービスは、コミット記録に格納される重複排除署名のうちのいずれかが要求されたトランザクションの排他署名（複数可）２２２２と一致するかどうかをチェックし得る。そのような一致が発見される場合には重複が検出され得、要求されたトランザクションは、そのようなシナリオでは、読み取り−書き込みコンフリクトが検出されなくても拒否され得る。重複が検出されない場合、かつ読み取り−書き込みコンフリクトが検出されない場合、トランザクションは、コミットを受理され得る。
【０１００】
少なくともいくつかの実施形態において、重複排除署名２２０６は、対応するトランザクションによって書き込まれるデータアイテムを書き込みセット記述子とは異なる方法で（例えば、異なるハッシュ関数を使用して生成されるハッシュ値で、またはより多くのビットを使用して格納されるハッシュ値で）表し得る。書き込みセットのそのような異なるエンコードは、いくつかの理由のうちのいずれかのために、重複排除対読み取り−書き込みコンフリクト検出のために使用され得る。例えば、いくつかのアプリケーションでは、クライアントは、偽陽性読み取り−書き込みコンフリクト検出の結果として時折トランザクションを再サブミットしなければならないことよりも、正確に重複を検出することについてより懸念し得る。したがって、そのようなアプリケーションでは、読み取り−書き込みコンフリクト検出におけるエラーの許容率は、重複検出エラーの許容率よりも高くなり得る。したがって、いくつかの実施態様において、出力値が１２８または２５６ビットとなる暗号強度ハッシュ関数が重複排除署名には使用される一方、出力が１６または３２ビットを使用して格納されるより簡便なハッシュ関数が、ＷＳＤに含まれる書き込み署名には使用され得る。いくつかのシナリオにおいて、重複排除は、使用されているデータストアの小さなサブセットに必要とされ得る一方、読み取り−書き込みコンフリクトは、トランザクションのより大きなセットについてチェックされることを必要とされ得る。そのような場合において、ストレージ及びネットワーキングリソースの使用量は、いくつかの実施形態において、重複排除署名よりも小さいＷＤＳ署名を使用することによって削減され得る。読み取り−書き込みコンフリクト検出機構及び重複排除検出機構を１つにまとめるのではなく、読み取り−書き込みコンフリクト検出機構を重複排除検出機構から論理的に区別することも、他の理由で、例えば、ログサービスのユーザ間での混乱を回避するため、重複排除の別個の請求に対応することができるようするためなど、有用であり得る。
【０１０１】
他の実施形態において、書き込みセット記述子は、読み取り−書き込みコンフリクト検出及び重複排除の両方の目的のために使用され得る（例えば、別個の排他署名は使用され得ない）。同様に、いくつかの実施形態において、同じシーケンス番号値が、読み取り−書き込みコンフリクトチェックデリミタ及び重複排除チェックデリミタとして使用され得る。即ち、読み取り−書き込みコンフリクトを調査されるコミット記録のセットは、重複もチェックされ得る。少なくとも１つの実施形態において、重複排除は、例えば、書き込み−セット記述子を使用して、トランザクション要求記述子内に論理制約記述子を含める必要なく、デフォルトで実行され得る。
【０１０２】
いくつかのアプリケーションでは、クライアントは、トランザクションの指定されたセット間のコミット順を施行することに関心があり得、例えば、トランザクションＴ１、Ｔ２、及びＴ３それぞれのために３つの異なるトランザクション要求をサブミットするクライアントは、Ｔ１をＴ２より前にコミットさせること、ならびにＴ３をＴ１及びＴ２の両方がコミットされた後に初めてコミットさせることを望み得る。そのようなコミットシーケンシング制約は、いくつかの実施形態において、第２の種類の論理制約記述子を使用して施行され得る。図２３は、少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャで受信されるトランザクション要求と関連付けられたシーケンシング制約の施行の実施例を示す。示されるように、トランザクション要求記述子２３４４は、読み取り−書き込みコンフリクトチェックデリミタ２３１２、読み取り−セット記述子２３１４、書き込み−セット記述子２３１６、及び図２２の論理記述子２２１８とは異なる種類の論理制約デリミタ２３１８を含む。ＴＲＤ２３４４の書き込みペイロードは、図２３には示されない。論理制約記述子２３１８は、描写された実施形態において、それがシーケンシング制約を表すことを示すＬＣタイプフィールド２３１９、シーケンシングチェックデリミタ２２２０、ならびにトランザクションＴ１及びＴ２にそれぞれ対応する必要とされるシーケンシング署名２３２２Ａ及び２３２２Ｂを含む。論理制約記述子２３１８は、要求されたトランザクションが、トランザクションＴ１及びＴ２の両方が（シーケンシング署名２３２２Ａ及び２３２２Ｂによって表される）が先にコミットされた場合にのみコミットされることを確実にするために、ＴＲＤ２３４４に含まれ得る。
【０１０３】
要求されたトランザクションを受理するかどうかを判定するため、ログサービスは、もう一度、図２３に示される実施例において、２種類のチェック（１つは読み取り−書き込みコンフリクト検出するため、及び１つはトランザクションＴ１及びＴ２がコミットされたことを確実にするため）を実行する必要があり得る。永続的な変更ログ２３１０内のコミット記録２３５２はそれぞれ、描写された実施形態において、それぞれのコミットシーケンス番号（ＣＳＮ２３０４）、書き込みセット記述子（ＷＳＤ）２３０５、及びシーケンシング署名２３０６を含み得る。読み取り−書き込みコンフリクトが発生したかどうかを判定するため、前と同じように、ログサービスは、読み取り−書き込みコンフリクトチェックデリミタ２３１２に対応するシーケンス番号で始まり、かつ直前のコミット記録２３５２Ｆで終わる、その書き込みセットが要求されたトランザクションの読み取りセット記述子２３１４との重複を評価されるべきである、ＣＲセット２３０９を識別し得る。読み取り−書き込みコンフリクトが検出される場合（即ち、そのような重複が存在する場合）、要求されたトランザクションは、拒否され得る。
【０１０４】
要求されたトランザクションのシーケンシング制約が満たされるどうかを判定するため、描写された実施形態において、シーケンシングチェックデリミタ２３２０に対応するシーケンス番号で始まり、直前のコミット記録２３５２Ｆで終わる別のＣＲセット２３５９が識別され得る。ログサービスは、必要とされる署名２３２２Ａ及び２３２２Ｂと一致するシーケンシング署名を有するそれぞれのコミット記録がＣＲセット２３５９内に存在することを検証する必要があり得る。必要とされる署名２３２２のうちの少なくとも１つがＣＲセット２２５９内で見つかる場合、シーケンシング制約は破られ得、読み取り−書き込みコンフリクトが検出されなかったとしても、要求されたトランザクションは拒否され得る。両方のシーケンシング署名がＣＲセット２３５９内で見つかる場合、かつ読み取り−書き込みコンフリクトが検出されない場合、トランザクションは、コミットを受理され得る。
【０１０５】
ＣＲ２３５２内（及びＴＲＤ２３４４内）に格納されるシーケンシング署名は、異なる実施形態において、様々な技術を使用して生成され得る。いくつかの実施形態において、それらは、トランザクションの書き込みセットから生成され得、別の実施形態において、シーケンシング署名は、他の因子に少なくとも部分的に基づき得る。例えば、要求しているクライアントのアイデンティティが、いくつかの実施形態において、書き込み署名に加えてシーケンシング署名内にエンコードされ得るか、トランザクションが要求された時間が、シーケンシング署名内にエンコードされ得るか、またはトランザクションが要求された場所の指標がエンコードされ得る、などである。いくつかの実施形態において、シーケンシング署名を表すための、書き込みセット署名とは異なる技術の使用に関して、上記のような同様の検討事項が適用され得る。したがって、いくつかの実施形態において、シーケンシング署名及び書き込みセット署名の両方が同じ基礎となる書き込み場所に由来するとしても、書き込みセット記述子内容を生成するために使用されるものとは異なる技術を使用して、シーケンシング署名を生成し得る。例えば、異なるハッシュ関数または異なるハッシュ値サイズが使用され得る。他の実施形態において、しかしながら、書き込みセット記述子は、読み取り−書き込みコンフリクト検出及びシーケンシング施行の両方の目的のために使用され得る（例えば、別個のシーケンシング署名は使用され得ない）。同様に、いくつかの実施形態において、同じシーケンス番号値が、読み取り−書き込みコンフリクトチェックデリミタ及びシーケンシングチェックデリミタとして使用され得る。即ち、読み取り−書き込みコンフリクトを調査されるコミット記録のセットは、シーケンシングもチェックされ得る。いくつかの場合において、書き込みセットとは無関係の任意の番号または文字列が、シーケンシング署名として使用され得る。少なくとも１つの実施形態において、制約記述子は、ＬＣタイプフィールドを含まない場合があり、むしろ、制約の種類は、トランザクション要求内の制約記述子の部分によって示され得る。いくつかの実施形態において、例えば、ＬＣタイプフィールドを使用する代わりに、「必須」フラグがシーケンシング署名と関連付けられ得、「排除」フラグが重複排除署名と関連付けられ得る。読み取り−書き込みコンフリクトチェックデリミタの文脈において先に述べたように、いくつかの実施形態において、ＣＳＮ下限だけを指定するのではなく、制約チェックを調査されなければならないコミット記録の範囲を示すために、ＣＳＮ上限もトランザクション要求記述子内で指定され得る。
【０１０６】
いくつかの実施形態において、図２３に示されるよりも複雑なシーケンシング制約が施行され得る。例えば、要求されたトランザクションのコミットの前にトランザクションＴ１及びＴ２の両方がコミットされていなければならない（任意の順番で）ことを検証するようにログサービスに単に要求するのではなく、クライアントは、Ｔ１がＴ２の前にコミットされていなければならないことを要求することが可能であり得る。同様に、いくつかの実施形態において、クライアントは、例えば、トランザクション｛Ｔ１，Ｔ２，Ｔｋ｝のいくつかのセットが要求されたトランザクションの前に何らかの指定された順番で（または任意の順番で）コミットされていなければならないこと、またトランザクション｛Ｔｐ，Ｔｓ｝の何らかの他のセットがコミットされていてはならないこと、といった否定順番要件を要求することが可能であり得る。
【０１０７】
図２２及び図２３では、１種類の論理制約が、示されるトランザクション要求内に示される。いくつかの実施形態において、クライアントは、いくつかの異なる種類の論理制約を様々なトランザクションに施行することを望み得る。図２４は、少なくともいくつかの実施形態に従う、複数の論理制約記述子を含むトランザクション要求記述子の実施例を示す。１つのシーケンシング制約が適用されることになり、１つの重複排除制約がトランザクション記述子２４４４によって表される同じ要求されたトランザクションのために適用されることになる。描写された実施形態において、読み取り及び書き込みセット記述子は、読み取られるまたは書き込まれる各データアイテムのために３２ビット（４バイト）ハッシュ値を含む。例えば、４バイトの読み取りハッシュ署名２４６４Ａ及び２４６４Ｂのそれぞれは、読み取りセット記述子２４０４内の２つのデータアイテム場所を表し得、４バイトの書き込みハッシュ署名２４６５Ａ及び２４６５Ｂのそれぞれは、トランザクションがコミットされる場合に書き込みのターゲットとされる２つの場所を表すために、書き込みセット記述子２４０６に含まれ得る。読み取り−書き込みコンフリクトチェックデリミタ２４０２は、そのコミット記録が要求されたトランザクションとの読み取り−書き込みコンフリクトをチェックされるべき永続的な変更ログ内のシーケンス番号の範囲の下限を選択するために使用されることになる。
【０１０８】
トランザクション要求記述子２４４４はまた、描写された実施形態において、シーケンシング制約記述子２４０８Ａ及び重複排除制約記述子２４０８Ｂを含み得る。シーケンシング制約記述子２４０８Ａは、制約タイプフィールド２４０９Ａ、シーケンシングチェックデリミタ２４１０、ならびにトランザクション（そのコミットは、要求されたトランザクションが受理されるために、完了されていなければならない）に対応する２４１２Ａ及び２４１２Ｂなどの１つ以上の必要とされるシーケンシング署名を含み得る。重複排除制約記述子２４０８Ｂは、制約タイプフィールド２４０９Ｂ、重複排除チェックデリミタ２４２０、及び重複排除排他署名２４２２を含み得る。
【０１０９】
示されるように、描写された実施形態において、必要とされるシーケンシング署名２４１２Ａ、２４１２Ｂ、及び重複排除署名２４２２はそれぞれ、１２８ビット（１６バイト）ハッシュ署名２４６６Ａ、２４６６Ｂ、及び２４６７を含み得る。故に、論理制約署名はそれぞれ、描写された実施例では、読み取り及び書き込みセット署名のためにデータアイテムごとに使用されるものよりも４倍多くのビットを占有し得、それが、読み取り−書き込みコンフリクト検出のために実行される比較に対して、論理制約関連の比較のためのハッシュ衝突の数を低減するのに役立ち得る。いくつかの実施形態において、ＭＤ５などの暗号ハッシュ関数が、シーケンシング及び／または重複排除署名のために使用され得る。暗号ハッシュ関数の使用は、少なくともいくつかのそのような実施形態において、論理制約の評価におけるエラーの可能性をゼロ近くに低減するのに役立ち得る。偽陽性ハッシュ衝突（例えば、偽陽性読み取り−書き込みコンフリクト検出）に基づくトランザクション拒否のかなり低い割合は許容であり得るが、少なくともいくつかのクライアントは、偽陽性ハッシュ衝突に起因してトランザクションの受理を回避することについてはるかに懸念し得（例えば、コミットシーケンシングの場合）、暗号強度ハッシュ関数の使用が、そのような誤ったトランザクション受理を回避するのに役立ち得る。いくつかの実施態様において、クライアントは、複製検出のため及び／またはシーケンシングの目的のために使用されるべきハッシュ関数を選択することが可能であり得る。いくつかの実施形態において、図２４に示されるものとは異なるハッシュ関数及び／またはハッシュ値の長さが、重複排除署名、シーケンシング署名、及び／または読み取りもしくは書き込み署名のために使用され得、例えば、重複排除及びシーケンシング署名は、サイズが異なり得る。少なくともいくつかの実施形態において、読み取られるまたは書き込まれるデータアイテムのアドレスが、例えば、アドレスから生成されるハッシュ値を使用する代わりに、読み取り／書き込みセット署名、重複排除、及び／またはシーケンシング署名のために使用され得る。一実施形態において、重複排除及び／または書き込み署名は、データが書き込まれる場所に加えて、またはその代わりに、書き込みペイロードに由来し得る。
【０１１０】
いくつかの実施形態において、データ完全性／妥当性制約または期限付きコミット制約など、追加の論理制約もトランザクション要求記述子内に指定され得る。例示的なデータ完全性または妥当性制約は、例えば、ある特定の値Ｖ１が、異なる値Ｖ２がＤＳ１または何らかの他のデータストアのいずれかにすでに格納されている場合、データストアＤＳ１にのみ格納され得ることを要求し得る。データ妥当性制約は、指定したデータタイプまたはデータアイテムが格納される許容範囲を（無条件、または指定されたデータストア場所に格納される値を条件とするかのいずれかで）定義し得る。期限付きコミット制約は、トランザクションのコミットがいつまでに完了されるべきかの期限を示し得、その期限が満たされない場合にはトランザクションは放棄または中断されなければならないという意図を有する。
【０１１１】
図２５は、少なくともいくつかの実施形態に従う、１つ以上の論理制約を示すトランザクション要求に応答してログサービスで実行され得る動作の態様を示すフロー図である。描写された実施形態において、所与のトランザクションのコミット要件は、並行性制御要件（例えば、上記の種類の読み取り−書き込みコンフリクトが見つからないという要件）、ならびに論理制約要件を含み得る。少なくともいくつかの実施形態において、重複排除及びシーケンシング論理制約の両方が単一のトランザクションのためにサポートされ得る（他の論理制約もサポートされ得るが、重複排除及びシーケンシングに関する動作のみが図２５には示される）。要素２５０１に示されるように、トランザクションＴ１の１つ以上の論理制約記述子を含むトランザクション要求記述子は、ログサービスの特定の永続的な変更ログインスタンスと関連付けられたコンフリクト検出器で受信され得る。描写された実施形態において、各論理記述子では、対応するチェックデリミタが指定されて、分析されるべきコミット記録のセットを選択して、論理制約が満たされるか、破られるかを判定するために使用され得る。１つ以上の署名のそれぞれのセットはまた、各論理制約について指定され得る。要求されたトランザクションの読み取り及び書き込みセットも、読み取り−書き込みコンフリクトチェックデリミタと一緒に示され得る。先に述べたように、いくつかの実施形態において、読み取り−書き込みコンフリクトをチェックするために使用されるものと同じデリミタが、１つ以上の論理制約のために使用され得る。また、少なくとも１つの実施形態において、別個の署名は、論理制約に必要とされ得ず、むしろ、例えば、書き込みセット署名は、重複排除及び／またはシーケンシング署名として使用され得る。
【０１１２】
読み取り−書き込みコンフリクトチェックデリミタを使用することにより、描写された実施形態において、分析されるべきコミット記録ＣＲＳ１の第１のセットは識別され得る。そのようなセットは、例えば、シーケンス番号が、読み取り−書き込みコンフリクトチェックデリミタで始まり、直前に格納されたコミット記録のシーケンス番号まで（またはトランザクション要求に示される異なる上限まで）の範囲にあるそれらのコミット記録を含み得る。読み取り−書き込みコンフリクトが検出される場合（要素２５０４）（例えば、ＣＲＳ１のコミット記録のうちのいずれかの書き込みセットが要求されたトランザクションの読み取りセットと重複する場合）、トランザクションは拒否／中断され得る（要素２５３１）。読み取り−書き込みコンフリクトをチェックすることはまた、本明細書では、要求されたトランザクションが並行性制御要件を満たすことを検証することと見なされ得る。いくつかの実施形態において、トランザクション要求がそこから受信されるクライアントは、トランザクションが中断されたことを通知され得る。
【０１１３】
描写された実施形態において、読み取り−書き込みコンフリクトが検出されない場合（要素２５０４に対応する動作においても）、対応する記述子によって示される論理制約のそれぞれが、シーケンス内でチェックされ得る。シーケンス内の次の論理制約記述子が調査され得、新しいコミット記録セットＣＲＳ−ｋが、制約と関連付けられたチェックデリミタに基づいた制約分析のために選択され得る（要素２５０７）。例えば、ＣＲＳ−ｋは、デリミタで始まりかつ最大の記録済みコミットシーケンス番号で終わる（またはトランザクション要求に示される異なる上限までの）範囲内のシーケンス番号を有するすべてのコミット記録を含み得る。実行されるべき分析は、論理制約記述子のタイプに基づき得る。重複排除制約がチェックされることになる場合、及び重複がＣＤＲ−ｋの重複排除署名及び要求されたトランザクションの比較によって見つかる場合（要素２５１０）、トランザクションはまた、拒否／中断され得る（要素２５３１）。制約が重複排除制約であり、かつ重複が見つからない場合（要素２５１０においても検出されるように）、及びより多くの論理制約がまだ分析されていない場合、次の論理制約記述子が調査され得、要素２５０７前に対応する動作が次の論理記述子に対して繰り返され得る。
【０１１４】
制約記述子が、コミットされたトランザクションの１つ以上の必要とされる署名を示すシーケンシング制約を示す場合、シーケンシング制約のためのＣＲＳ−ｋは、必要とされる署名がコミットが完了したトランザクションのために実際に格納されていることを確実にするために調査され得る。必要とされるトランザクションのコミット記録が見つからない場合（要素２５１３において検出されるように）、要求されたトランザクションも中断／拒否され得る（要素２５３１）。必要とされるトランザクションのコミット記録が見つかる場合（要素２５１３に対応する動作にもあるように）、シーケンシング制約処理は完了し得る。読み取り−書き込みコンフリクト検出の場合、少なくともいくつかの実施形態において、論理制約チェックはまた、比較のためのハッシュ関数を使用して実施され得るため、コミット記録セットのスキャンのオーバーヘッドを回避する。任意の論理制約記述子が残っている場合（要素２５１６）、それらは順に調査され得る。論理制約記述子が残っていない場合（要素２５１６においても検出されるように）、トランザクションは、コミットを受理され得る。トランザクションのコミット記録を永続ストレージに保存するためのプロシージャは、描写された実施形態において、例えば、複製ＤＡＧのいくつかのノードで開始され得る（要素２５１９）。複製が成功した場合（例えば、コミット記録の十分な数のコピーがそれぞれのストレージデバイスに無事に格納される場合）（要素２５２２において検出されるように）、トランザクションのコミットは、完了したと見なされ得る。何らかの理由で必要とされる数のレプリカが格納されない場合、トランザクションは依然として拒否／中断され得る（要素２５３１）。いくつかの実施形態において、トランザクションが無事にコミットされたという通知が、要求しているクライアントに伝送され得る（要素２５２５）。
【０１１５】
いくつかの実施形態において、１つを超える論理制約をチェックするための動作は、むしろ並行して実行され得る。一実施形態において、読み取り−書き込みコンフリクトチェック及び論理制約チェックの任意の組み合わせが並行して実行され得る。いくつかの実施形態において、示される論理制約のそれぞれに関する応答は、制約のうちの１つ以上が満たされないとしても、要求しているクライアントに提供され得る。例えば、重複排除制約及びシーケンシング制約を有するトランザクション要求の場合、シーケンシング制約は、重複排除制約が満たされないとしてもチェックされ得、両方の制約の評価の結果がクライアントに提供され得る。いくつかの実施態様において、クライアントは、所与のトランザクション要求の論理制約の指定されたサブセットまたはすべてがチェックされることを明示的に要求することが可能であり得る。
【０１１６】
様々な実施形態において、図６、７、８、９、１０、１２、１３、１４、１９、２０、及び２５のフロー図に示されるもの以外の動作が、上記のアプリケーション状態管理、連携停止、並行性制御、及び論理制約管理の技術のうちの少なくともいくつかを実装するために使用され得ることに留意されたい。示される動作のうちのいくつかは、いくつかの実施形態において実装されない場合があるか、異なる順番で、または連続的ではなく並行して実装される場合がある（図２５に関して上に示されるように）。
【０１１７】
使用事例
ログベースのトランザクション管理など、複製ＤＡＧを使用してアプリケーション状態変更を管理する上記の技術は、様々な実施形態において有用であり得る。ますます多くの組織が、自らのコンピューティングをプロバイダネットワーク環境へ移動させるようになり、それぞれの一貫性セマンティクス及びそれぞれのインターフェースを有するより多くの種類の分散ストレージアプリケーションが開発されている。一部の大規模アプリケーションは、複数のデータストアインスタンスにわたり得、複製ＤＡＧ及びログベースのトランザクション管理技術は、分散ストレージアプリケーション管理に対する統一された、柔軟性のある、スケーラブルかつ高可用性のアプローチを表し得る。ＤＡＧ構成のそれぞれのビューが少なくとも一時的に発散するにもかかわらずアプリケーション状態遷移を進行させるという複製ＤＡＧノードの能力は、あまり動的でない複製技術が使用される場合に起こり得るアプリケーション要求の処理における「Ｓｔｏｐ−ｔｈｅ−ｗｏｒｌｄ」停止のうちの少なくともいくつかを低減または排除し得る。ログベースのトランザクション管理は、クロス−データ−ストアトランザクション（ならびに原子性マルチ書き込みトランザクションをサポートしない場合のある、データストアのためのマルチアイテムトランザクション）を許可し得るだけでなく、自動化されたクエリ応答生成、スナップショット生成など等の機能を促進し得る。複数のデータストアにわたってデータ分析を実行する全く新しい方法は、ログサービスの独自の読み取りインターフェースを使用して可能になり得る。
【０１１８】
いくつかのプロバイダネットワーク環境において、複製ＤＡＧを介したログベースのトランザクション管理は、仮想化コンピューティングサービス、ストレージサービス、またはデータベースサービスなど、プロバイダネットワークに実装される別のネットワークアクセス可能なサービスの制御プレーン構成情報を格納するために使用され得る。そのようなシナリオにおいて、ログを使用して管理されるトランザクションは、ネットワークアクセス可能なサービス（コンピュートインスタンス、または仮想コンピューティングサービスの場合には仮想化ホストなど）の様々なリソースの構成に対する変更を表し得る。
【０１１９】
例示的なコンピュータシステム
少なくともいくつかの実施形態において、複製ＤＡＧの様々なコンポーネント及び／またはトランザクション管理のためのログサービスを実装するための技術を含む、本明細書に記載される技術のうちの１つ以上の一部分またはすべてを実装するサーバは、１つ以上のコンピュータアクセス可能な媒体を含む、またはそれにアクセスするように構成される汎用コンピュータシステムを含み得る。図２６は、そのような汎用コンピューティングデバイス９０００を示す。示された実施形態において、コンピューティングデバイス９０００は、入力／出力（Ｉ／Ｏ）インターフェース９０３０を介してシステムメモリ９０２０（非揮発性及び揮発性両方のメモリモジュールを含み得る）に連結される１つ以上のプロセッサ９０１０を含む。コンピューティングデバイス９０００は、Ｉ／Ｏインターフェース９０３０に連結されるネットワークインターフェース９０４０をさらに含む。
【０１２０】
様々な実施形態において、コンピューティングデバイス９０００は、１つのプロセッサ９０１０を含むユニプロセッサシステム、またはいくつかのプロセッサ９０１０（例えば、２つ、４つ、８つ、または他の好適な数）を含むマルチプロセッサシステムであり得る。プロセッサ９０１０は、命令を実行することが可能な任意の好適なプロセッサであり得る。例えば、様々な実施形態において、プロセッサ９０１０は、様々な命令セットアーキテクチャ（ＩＳＡ）、例えば、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、もしくはＭＩＰＳ  ＩＳＡ、または任意の他の好適なＩＳＡ、のいずれかを実装する汎用または組込みプロセッサであり得る。マルチプロセッサシステムにおいて、プロセッサ９０１０のそれぞれは、共通して同じＩＳＡを実装し得るが、必ずしもそうであるとは限らない。いくつかの実施態様において、グラフィック処理ユニット（ＧＰＵ）が、従来のプロセッサの代わりに、またはそれに加えて、使用され得る。
【０１２１】
システムメモリ９０２０は、プロセッサ（複数可）９０１０によってアクセス可能な命令及びデータを格納するように構成され得る。少なくともいくつかの実施形態において、システムメモリ９０２０は、揮発性及び非揮発性両方の部分を含み得、他の実施形態においては、揮発性メモリのみが使用され得る。様々な実施形態において、システムメモリ９０２０の揮発性部分は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、同期型ダイナミックＲＡＭ、または任意の他のタイプのメモリなど、任意の好適なメモリ技術を使用して実装され得る。システムメモリ（例えば、１つ以上のＮＶＤＩＭＭを含み得る）の非揮発性部分には、いくつかの実施形態において、ＮＡＮＤフラッシュデバイスなど、フラッシュベースのメモリデバイスが使用され得る。少なくともいくつかの実施形態において、システムメモリの非揮発性部分は、スーパーキャパシタまたは他の蓄電デバイス（例えば、バッテリ）などの動力源を含み得る。様々な実施形態において、メモリスタベースの抵抗変化型ランダムアクセスメモリ（ＲｅＲＡＭ）、３次元ＮＡＮＤ技術、強誘電ＲＡＭ、磁気抵抗ＲＡＭ（ＭＲＡＭ）、または相変化メモリ（ＰＣＭ）の様々なタイプのうちのいずれかが、少なくともシステムメモリの非揮発性部分に使用され得る。示された実施形態において、上に記載される方法、技術、及びデータなどの１つ以上の所望の機能を実装するプログラム命令及びデータは、コード９０２５及びデータ９０２６としてシステムメモリ９０２０内に格納されて示される。
【０１２２】
一実施形態において、Ｉ／Ｏインターフェース９０３０は、プロセッサ９０１０と、システムメモリ９０２０と、ネットワークインターフェース９０４０または様々なタイプの永続的及び／もしくは揮発性ストレージデバイスなどの他の周辺インターフェースを含む、デバイス内の任意の周辺デバイスとの間のＩ／Ｏトラフィックを調整するように構成され得る。いくつかの実施形態において、Ｉ／Ｏインターフェース９０３０は、任意の必須プロトコル、タイミング、または他のデータ変換を実行して、データ信号を１つのコンポーネント（例えば、システムメモリ９０２０）から、別のコンポーネント（例えば、プロセッサ９０１０）による使用に好適なフォーマットに変換し得る。いくつかの実施形態において、Ｉ／Ｏインターフェース９０３０は、例えば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス規格またはユニバーサルシリアルバス（ＵＳＢ）規格の変種など、様々なタイプの周辺バスを介して接続されるデバイスのサポートを含み得る。いくつかの実施形態において、Ｉ／Ｏインターフェース９０３０の機能は、例えばノースブリッジ及びサウスブリッジなど、２つ以上の別個のコンポーネントに分かれ得る。また、いくつかの実施形態において、システムメモリ９０２０へのインターフェースなど、Ｉ／Ｏインターフェース９０３０の機能性の一部またはすべてが、プロセッサ９０１０内に直接組み込まれ得る。
【０１２３】
ネットワークインターフェース９０４０は、コンピューティングデバイス９０００と、例えば、図１〜図２５に示されるような他のコンピュータシステムまたはデバイスなどの、ネットワーク（複数可）９０５０に接続される他のデバイス９０６０との間でデータが交換されることを可能にするように構成され得る。様々な実施形態において、ネットワークインターフェース９０４０は、例えば、イーサネット（登録商標）ネットワークのタイプなど、任意の好適な有線または無線一般データネットワークを介した通信をサポートし得る。加えて、ネットワークインターフェース９０４０は、アナログボイスネットワークまたはデジタルファイバー通信ネットワークなどの電気通信／テレフォニーネットワークを介した通信、ファイバーチャネルＳＡＮなどのストレージエリアネットワークを介した通信、または任意の他の好適なタイプのネットワーク及び／もしくはプロトコルを介した通信をサポートし得る。
【０１２４】
いくつかの実施形態において、システムメモリ９０２０は、対応する方法及び装置の実施形態を実装するための図１〜図２５に関して上に記載されるようなプログラム命令及びデータを格納するように構成されるコンピュータアクセス可能な媒体の一実施形態であり得る。しかしながら、他の実施形態において、プログラム命令及び／またはデータは、異なるタイプのコンピュータアクセス可能な媒体上で受信、送信、または格納され得る。一般的に言えば、コンピュータアクセス可能な媒体は、磁気または光媒体などの非一時的なストレージ媒体またはメモリ媒体、例えば、Ｉ／Ｏインターフェース９０３０を介してコンピューティングデバイス９０００に連結されるディスクまたはＤＶＤ／ＣＤを含み得る。非一時的なコンピュータアクセス可能なストレージ媒体はまた、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなど、コンピューティングデバイス９０００のいくつかの実施形態において、システムメモリ９０２０または別のタイプのメモリとして含まれ得る、任意の揮発性または非揮発性媒体を含み得る。さらに、コンピュータアクセス可能な媒体は、ネットワークインターフェース９０４０を介して実装され得るものなど、ネットワーク及び／または無線リンクなどの通信媒体を介して伝えられる、電気、電磁気、もしくはデジタル信号などの伝送媒体または信号を含み得る。図２６に示されるものなどの複数のコンピューティングデバイスの部分またはすべては、様々な実施形態において記載された機能性を実装するために使用され得、例えば、様々な異なるデバイス及びサーバで実行するソフトウェアコンポーネントは、連携して機能性を提供し得る。いくつかの実施形態において、記載された機能性の部分は、汎用コンピュータシステムを使用して実装されることに加えて、またはその代わりに、ストレージデバイス、ネットワークデバイス、または専用コンピュータシステムを使用して実装され得る。「コンピューティングデバイス」という用語は、本明細書で使用される場合、少なくともこれらのタイプのデバイスすべてを指し、これらのタイプのデバイスに限定されない。
【０１２５】
先述の実施形態は、以下の条項に鑑みてよりよく理解され得る。
１．システムであって、
データアクセスインターフェースの第１のセットを実装する第１のデータストア及びデータアクセスインターフェースの第２のセットを実装する第２のデータストアを含む、プロバイダネットワークで実装されるマルチデータベースログサービスを介したトランザクション管理のための複数のデータストアを登録するための要求に応答して、前記ログサービスの特定の永続的な変更ログを指定して、前記複数のデータストアのうちの１つ以上のデータストアに向けられる書き込みの表現を格納することと、
前記マルチデータベースログサービスのコンフリクト検出器で、クライアントによって要求されるトランザクションの表現を受信することであって、前記トランザクションが、前記第１のデータストアに向けられる少なくとも第１の書き込み動作、及び前記第２のデータストアに向けられる少なくとも第２の書き込み動作を含む、受信することと、
前記コンフリクト検出器で、少なくとも部分的に前記表現の内容、及び少なくとも部分的に前記特定の永続的な変更ログの内容に基づいて、前記トランザクションがコミットされることを判定することと、
前記マルチデータベースログサービスの前記特定の永続的な変更ログに、前記トランザクションを示す１つ以上のログ記録を追加することと、
前記第１の書き込み動作を前記第１のデータストアに、及び前記第２の書き込み動作を前記第２のデータストアに適用することと、
前記データアクセスインターフェースの第１のセットを使用した前記第１のデータストアに向けられる第１のクエリに応答して、前記第１の書き込み動作の結果を含む第１の応答を提供することと、
前記データアクセスインターフェースの第２のセットを使用した前記第２のデータストアに向けられる第２のクエリに応答して、前記第２の書き込み動作の結果を含む第２の応答を提供することと、
前記マルチデータベースログサービスによって定義されるプログラムクエリインターフェースを介した前記ログサービスに向けられる第３のクエリに応答して、前記第１の書き込み動作及び前記第２の書き込み動作のうちの１つ以上の結果を含む第３の応答を提供することと、を行うように構成される、１つ以上のコンピューティングデバイスを含む、前記システム。
２．前記第１のデータストア及び前記第２のデータストアの各データストアが、非リレーショナルデータベースシステム、リレーショナルデータベースシステム、非構造化データオブジェクトへのアクセスを許可するウェブサービスインターフェースを実装するストレージサービス、インメモリデータベース、または分散キャッシュのインスタンスのうちの１つを含む、条項１に記載の前記システム。
３．前記特定の永続的な変更ログが、複数のレプリカノードを含み、前記複数のレプリカノードの各ノードが、それぞれのストレージデバイスに前記１つ以上のログ記録のログ記録のレプリカを格納する、条項１に記載の前記システム。
４．前記１つ以上のコンピューティングデバイスが、
少なくとも前記第１の書き込み動作の前記結果に従ってマテリアライズドビューを更新するようにさらに構成される、条項１に記載の前記システム。
５．前記１つ以上のコンピューティングデバイスが、
少なくとも前記第１の書き込み動作の前記結果に少なくとも部分的に基づいて、第４のクエリの事前計算された結果を生成することと、
前記第４のクエリの受信に応答して、前記事前計算された結果を提供することと、を行うようにさらに構成される、条項１に記載の前記システム。
６．１つ以上のコンピューティングデバイスによって、
データアクセスインターフェースの第１のセットを実装する第１のデータストアを含む１つ以上のデータストアに向けられる書き込みの表現を格納するために、特定の永続的な変更ログをインスタンス化することと、
前記第１のデータストアのクライアントによって要求されるトランザクションの表現を受信することであって、前記トランザクションが、前記第１のデータストアに格納されるデータオブジェクトに向けられる少なくとも第１の書き込みを含む、受信することと、
少なくとも部分的に前記表現の内容、及び少なくとも部分的に前記特定の永続的な変更ログの内容に基づいて、前記要求されたトランザクションがコミットされることを判定することと、
前記特定の永続的な変更ログに、前記第１の書き込みを示すログ記録を追加することと、
前記第１の書き込みの指標を前記特定の永続的な変更ログから前記第１のデータストアに伝播することと、を実行することを含む、方法。
７．前記第１のデータストアが、１つを超える書き込みを含む動作のセットの原子性をサポートせず、前記クライアントによって要求される前記トランザクションが、第２のデータオブジェクトに向けられる第２の書き込みを含み、前記１つ以上のコンピューティングデバイスによって、
前記要求されたトランザクションがコミットされることを判定した後、
前記特定の永続的な変更ログに、前記第２の書き込みの指標を追加することと、
前記第２の書き込みの指標を前記第１のデータストアに伝播することと、を実行することをさらに含む、条項６に記載の前記方法。
８．前記特定の永続的な変更ログが、複数のレプリカノードを含み、前記複数のレプリカノードの各ノードが、それぞれのストレージデバイスに前記ログ記録のレプリカを格納する、条項６に記載の前記方法。
９．前記複数のレプリカノードの各レプリカノードが、有向非巡回グラフ（ＤＡＧ）メンバーシップ変更メッセージを前記複数のレプリカノードに伝播することを担う関連ＤＡＧ構成マネージャを有するＤＡＧのメンバーである、条項８に記載の前記方法。
１０．前記複数のレプリカノードが、プロバイダネットワークの第１のデータセンターに第１のレプリカノード、及び前記プロバイダネットワークの第２のデータセンターに第２のレプリカノードを含む、条項８に記載の前記方法。
１１．前記１つ以上のコンピューティングデバイスによって、
前記第１の書き込みの前記結果に従ってマテリアライズドビューを更新することを、実行することをさらに含む、条項６に記載の前記方法。
１２．前記１つ以上のコンピューティングデバイスによって、
前記第１の書き込みの前記結果に少なくとも部分的に基づいて、クエリの事前計算された結果を生成することと、
前記クエリを受信することに応答して、前記事前計算された結果を提供することと、を実行することをさらに含む、条項６に記載の前記方法。
１３．前記１つ以上のコンピューティングデバイスによって、
ログサービスによるトランザクション管理のための前記１つ以上のデータストアを登録するための要求を受信することを、実行することをさらに含み、前記特定の永続的な変更ログを前記インスタンス化することが、前記１つ以上のデータストアを登録するための前記要求に応答する、条項６に記載の前記方法。
１４．前記１つ以上のコンピューティングデバイスによって、
前記データアクセスインターフェースの第１のセットを使用した前記第１のデータストアに向けられる第１のクエリに応答して、前記第１の書き込みの結果を含む応答を提供することと、
ログサービスのプログラムクエリインターフェースを介した前記特定の永続的な変更ログに向けられる第２のクエリに応答して、前記第１の書き込みの結果を含む第２の応答を提供することと、を実行することをさらに含む、条項６に記載の前記方法。
１５．前記第１のデータストアが、プロバイダネットワークに実装されるネットワークアクセス可能なサービスの制御プレーン構成情報を含み、前記トランザクションが、前記ネットワークアクセス可能なサービスの特定のリソースの構成に対する変更を含む、条項６に記載の前記方法。
１６．前記１つ以上のコンピューティングデバイスによって、
前記特定の永続的な変更ログと関連付けられたスナップショットマネージャによって、前記特定の永続的な変更ログの少なくとも一部分の内容のポイントインタイムスナップショットを格納することを、実行することをさらに含む、条項６に記載の前記方法。
１７．プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサ上で実行されるとき、
ログサービスで、クライアントによって要求されるトランザクションの表現を受信することであって、前記トランザクションが、第１のデータストアに格納されるデータオブジェクトに向けられる少なくとも第１の書き込みを含む、受信することと、
少なくとも部分的に前記表現の内容に基づいて、及び、少なくとも部分的に特定の永続的な変更ログの内容に基づいて、前記要求されたトランザクションがコミットされることを判定することと、
前記特定の永続的な変更ログに、前記第１の書き込みを示すログ記録の挿入を開始することと、
前記第１の書き込みを前記第１のデータストアに伝播することと、を行う、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
１８．前記クライアントによって要求される前記トランザクションが、第２のデータオブジェクトに向けられる第２の書き込みを含み、前記１つ以上のコンピューティングデバイスによって、
前記要求されたトランザクションがコミットされることを判定した後、
前記特定の永続的な変更ログに、前記第２の書き込みの指標の挿入を開始することと、
前記第２の書き込みを送り先のデータストアに伝播することと、を行うことをさらに含む、条項１７に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
１９．前記送信先データストアが前記第１のデータストアであり、前記第１のデータストアが、１つを超える書き込み動作を含む動作のセットの原子性をサポートしない、条項１８に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２０．前記送信先データストアが、前記第１のデータストアとは異なるアクセスインターフェースを有する第２のデータストアである、条項１８に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２１．前記特定の永続的な変更ログが、複数のレプリカノードを含み、前記複数のレプリカノードの各レプリカノードが、それぞれのストレージデバイスに前記ログ記録のレプリカを格納する、条項１７に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２２．前記複数のレプリカノードの各レプリカノードが、有向非巡回グラフ（ＤＡＧ）メンバーシップ変更メッセージを前記複数のレプリカノードに伝播することを担う関連ＤＡＧ構成マネージャを有するＤＡＧのメンバーである、条項２１に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
【０１２６】
加えて、先述の実施形態はまた、以下の追加条項に鑑みてよりよく理解され得る。
１．システムであって、
特定のアプリケーションの状態情報を複製するために複数のノードを含む状態複製グループ（ＳＲＧ）をインスタンス化することであって、前記ＳＲＧの少なくともいくつかのノードが、前記アプリケーションのそれぞれのコミット記録セットを格納し、コミット記録セットの各コミット記録が、前記アプリケーションの状態遷移が他の状態遷移に対してコミットされた順番を示すコミットシーケンス番号（ＣＳＮ）を含み、前記ＳＲＧが、要求された状態遷移をコミットするように構成されるコミッタノードを含む、インスタンス化することと、
前記コミッタノードで、閾値条件が満たされたという検出に応答して、前記ＳＲＧの状態遷移処理動作が停止されるべきであるという判定することと、
前記コミッタノードから前記ＳＲＧのフォールトトレラント構成マネージャに、前記コミッタノードに格納される前記コミット記録セットの前記ＣＳＮの中で最大のコミットシーケンス番号（ＨＣＳＮ）を示す停止要求を伝送することと、
それぞれの停止コマンドを前記構成マネージャから第２のノードを含む前記ＳＲＧの１つ以上の他のノードに伝送することであって、前記停止コマンドが前記ＨＣＳＮを示す、伝送することと、
前記構成マネージャから停止コマンドを受信することに応答して、前記第２のノードで状態遷移処理動作を停止することと、
前記第２のノードによって、前記第２のノードのコミット記録セットが前記ＨＣＳＮを有するコミット記録を含むことを検証することと、
前記コミッタノード及び前記第２のノードによって、再稼働メッセージが前記構成マネージャから受信されるまで、状態遷移動作のこれ以上の処理を延期することと、を行うように構成される１つ以上のコンピューティングデバイスを含む、前記システム。
２．前記閾値条件が満たされたという前記検出が、メトリックが許容範囲外であるという判定を含み、前記メトリックが、（ａ）前記ＳＲＧの稼働ノードの数、（ｂ）前記ＳＲＧの選択されたノードで前記フォールトトレラント構成マネージャから受信されるＳＲＧ構成−デルタメッセージの速度、または（ｃ）前記ＳＲＧの選択されたノードへのクライアント接続の数のうちの１つ以上を含む、条項１に記載の前記システム。
３．前記１つ以上のコンピューティングデバイスが、
前記第２のノードによって、前記フォールトトレラント構成マネージャから前記停止コマンドを受信することに応答して、前記第２のノードにおける前記コミット記録セットが、ＨＣＳＮを含むコミット記録を含まないことを判定することと、
前記第２のノードによって、前記コミッタノードから、前記ＨＣＳＮを含むコミット記録を含む１つ以上のコミット記録を要求することと、を行うようにさらに構成される、条項１に記載の前記システム。
４．前記第２のノードが、特定のホストでの第１の実行スレッドを含み、前記１つ以上のコンピューティングデバイスが、
前記ＨＣＳＮを含む前記コミット記録が前記第２のノードのコミット記録セットに格納されることを検証した後に、前記第１の実行スレッドを再起動するようにさらに構成される、条項１に記載の前記システム。
５．前記１つ以上のコンピューティングデバイスが、
前記フォールトトレラント構成マネージャによって、前記停止コマンドが送信された後に、そのコミット記録が前記ＨＣＳＮまで更新された利用可能なＳＲＧノードの数が閾値を超えることを判定することと、
前記フォールトトレラント構成マネージャによって、そのコミット記録セットが前記ＨＣＳＮまで更新された各ノードに、前記ＳＲＧのターゲットとされた構成の表現を含むそれぞれの再稼働要求を伝送することと、を行うようにさらに構成される、条項４に記載の前記システム。
６．１つ以上のコンピューティングデバイスによって、
複数のノードを含む状態複製グループ（ＳＲＧ）の状態遷移処理動作が停止されるべきであると判定することであって、前記ＳＲＧが、アプリケーションのそれぞれのコミット記録セットを含む状態情報を複製するために指定され、前記コミット記録セットの各コミット記録が、前記アプリケーションの前記対応する状態遷移が前記ＳＲＧでコミットされた順番を示す関連コミットシーケンス番号（ＣＳＮ）を有する、判定することと、
前記ＳＲＧの１つ以上のノードのコミット記録セットがそこまで同期されるターゲットＣＳＮを識別することと、
ぞれぞれの停止コマンドを前記ＳＲＧの構成マネージャから前記ＳＲＧの前記１つ以上の他のノードに伝送することであって、前記停止コマンドが前記ターゲットＣＳＮを示す、伝送することと、
前記１つ以上の他のノードの特定のノードによって、前記ターゲットＣＳＮに対応するコミット記録が、前記特定のノードのコミット記録セットに格納されることを検証することと、
前記特定のノードによって状態遷移処理動作を停止することと、を行うことを含む、方法。
７．前記ＳＲＧの前記状態遷移処理動作が停止されるべきであると前記判定することが、メトリックが許容範囲外であるという検出に応答し、前記メトリックが、（ａ）前記ＳＲＧの稼働ノードの数、（ｂ）前記ＳＲＧの選択されたノードで前記構成マネージャから受信されるＳＲＧ構成−デルタメッセージの速度、または（ｃ）前記ＳＲＧの選択されたノードへのクライアント接続の数のうちの１つ以上を含む、条項６に記載の前記方法。
８．前記ＳＲＧの前記状態遷移処理動作が停止されるべきであると前記判定することが、前記ＳＲＧのコミッタノードで実行され、前記コミッタノードが、前記アプリケーションの１つ以上の要求された状態遷移をコミットすることを担い、前記ターゲットＣＳＮが、前記コミッタノードの前記コミット記録セットの前記ＣＳＮの中で最大のＣＳＮである、条項６に記載の前記方法。
９．前記１つ以上のコンピューティングデバイスによって、前記検証することの前に、
前記特定のノードによって、前記構成マネージャから停止コマンドを受信することに応答して、前記第２のノードにおける前記コミット記録セットが、前記ターゲットＣＳＮに対応するコミット記録を含まないことを判定することと、
前記特定のノードによって、前記ＳＲＧの異なるノードから、前記ターゲットＣＳＮに対応するコミット記録を含む１つ以上のコミット記録を要求することと、を実行することをさらに含む、条項６に記載の前記方法。
１０．前記特定のノードが、特定のホストで第１の実行スレッドを含み、前記１つ以上のコンピューティングデバイスによって、
前記停止の後に、前記第１の実行スレッドを再起動することを、実行することをさらに含む、条項６に記載の前記方法。
１１．前記１つ以上のコンピューティングデバイスによって、
前記検証の後に、前記構成マネージャで、前記特定のノードから、前記特定ノードがそのコミット記録セットを前記ターゲットＣＳＮまで更新したという確認を受信することと、
前記構成マネージャによって、前記ＳＲＧの最新ノードのコレクションに前記特定のノードを含めることと、を実行することをさらに含む、条項６に記載の前記方法。
１２．前記１つ以上のコンピューティングデバイスによって、
前記停止の後に、前記構成マネージャで、前記ＳＲＧの第２の複数のノードから前記それぞれのノードがサービスに利用可能であることを示すそれぞれのメッセージを受信することであって、前記第２の複数のノードが、コミッタノード、前記特定のノード、及び第３のノードを含む、受信することと、
前記構成マネージャによって、前記最新ノードのコレクションを使用して、前記第３のノードのコミット記録セットが、前記ターゲットＣＳＮに対応するコミット記録を含まないことを判定することと、
前記構成マネージャによって、前記第３のノードに、前記ターゲットＣＳＮの指標を伝送することと、を実行することをさらに含む、条項１１に記載の前記方法。
１３．前記１つ以上のコンピューティングデバイスによって、
前記構成マネージャで、前記第３のノードのコミット記録セットが前記ターゲットＣＳＮまで更新されたという確認を受信することと、
前記構成マネージャによって、そのコミット記録が前記ターゲットＣＳＮまで更新された利用可能なＳＲＧノードの数が閾値を超えることを判定することと、
前記構成マネージャによって、そのコミット記録セットが前記ターゲットＣＳＮまで更新された各ノードに、前記ＳＲＧのターゲットとされた構成の表現を含むそれぞれの再稼働要求を伝送することと、を実行することをさらに含む、条項１２に記載の前記方法。
１４．前記ＳＲＧの前記複数のノードが、アクセプタノードからコミッタノードへの複製経路を含む有向非巡回グラフを含み、前記１つ以上のコンピューティングデバイスによって、
前記アクセプタノードで、前記状態遷移処理動作が停止されるべきであると前記判定する前に、前記アプリケーションの特定の状態遷移をコミットするようにクライアントから要求を受信することと、
前記アクセプタノードに、前記特定の状態遷移が複製を受理されたことを示す記録を格納することと、
前記第２のノードから前記複製経路を介して前記コミッタノードに、前記特定の状態遷移をコミットするように前記要求を伝播することと、
前記コミッタノードによって、前記特定の状態遷移を示すそれぞれの記録が格納された前記ＳＲＧのノードの数が、複製閾値を超えることを判定することと、
前記コミッタノードに、前記特定の状態遷移に対応するコミット記録を格納することと、を実行することをさらに含む、条項６に記載の前記方法。
１５．前記アプリケーションが、データベースサービス、ログサービス、またはプロバイダネットワークサービスの制御プレーンコンポーネントのうちの１つを含む、条項６に記載の前記方法。
１６．プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサ上で実行されるとき、
状態複製グループ（ＳＲＧ）の複数のノード間で特定のアプリケーションに関する状態情報を同期させるために使用されるべきターゲットコミットシーケンス番号（ＣＳＮ）を、前記ＳＲＧでのアプリケーション状態遷移処理動作の停止前に、判定することであって、前記複数のノードが、第１のノード及び第２のノードを含み、前記第１及び第２のノードの各ノードが、前記特定のアプリケーションのそれぞれのコミット記録セットを格納し、前記セットの各コミット記録が、前記対応する状態遷移が前記ＳＲＧでコミットされた順番を示すそれぞれの関連ＣＳＮを有する、判定することと、
前記ＳＲＧの構成マネージャによって、永続ストレージデバイスに、前記ターゲットＣＳＮを格納することと、
前記構成マネージャから前記第１のノード及び前記第２のノードのうちの少なくとも１つのノードに、前記ターゲットＣＳＮを示すそれぞれの停止コマンドを伝送することと、
前記第１のノード及び前記第２のノードでの動作のそれぞれの停止の後に、前記第１のノード及び前記第２のノードが動作の再開に利用可能であるという、前記構成マネージャで受信される指標に応答して、
そのコミット記録セットが前記ターゲットＣＳＮに対応するコミット記録を含む前記ＳＲＧの利用可能なノードの数が閾値を超えることを検証することと、
再稼働メッセージを、そのコミット記録セットが前記ターゲットＣＳＮに対応するコミット記録を含む利用可能なノードの少なくともサブセットに伝送することと、を行う、前記非一時的なコンピュータアクセス可能なストレージ媒体。
１７．前記命令が、前記１つ以上のプロセッサで実行されるとき、
前記アプリケーション状態遷移処理動作を停止するための要求を前記第１のノードから受信し、前記第１のノードが、要求された状態遷移をコミットすることを担うコミッタノードであり、前記要求が前記ターゲットＣＳＮを含む、条項１６に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
１８．前記命令が、前記１つ以上のプロセッサで実行されるとき、
メトリックが許容範囲外であるという検出に応答して、前記アプリケーション状態遷移処理動作を停止するために判定し、前記メトリックが、（ａ）前記ＳＲＧの稼働ノードの数、（ｂ）前記ＳＲＧの選択されたノードで前記構成マネージャから受信されるＳＲＧ構成−デルタメッセージの速度、または（ｃ）前記ＳＲＧの選択されたノードへのクライアント接続の数のうちの１つ以上を含む、条項１６に記載の非一時的なコンピュータアクセス可能なストレージ媒体。
１９．前記ＳＲＧの前記複数のノードが有向非巡回グラフを含む、条項１６に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
２０．前記命令が、前記１つ以上のプロセッサで実行されるとき、コンセンサスプロトコルを利用して、前記ＳＲＧの前記状態遷移処理動作が停止されるべきであると判定する、条項１６に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
【０１２７】
加えて、先述の実施形態はまた、以下の条項に鑑みてよりよく理解され得る。
１．システムであって、
１つ以上のデータストアのためにインスタンス化されるログベースのトランザクションマネージャで、要求されたトランザクションのトランザクション記述子をクライアントから受信することであって、前記トランザクション記述子が、前記要求されたトランザクションがコミットされるべきかどうかを判定するためにチェックされるべき第１の論理制約に対応して、（ａ）制約タイプ、及び（ｂ）１つ以上のデータ署名を示す、受信することと、
前記ログベースのトランザクションマネージャによって、特定の永続的なログに格納されるコミットされたトランザクションに対応する少なくともいくつかのトランザクション記録を使用して、前記要求されたトランザクションが、並行性制御要件のセットに関してコミット可能であることを判定することと、
前記ログベースのトランザクションマネージャによって、前記第１の論理制約をチェックするために調査されるべき前記特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記ログベースのトランザクションマネージャによって、前記１つ以上のデータ署名の内容を前記トランザクション記録のサブセットに格納される他のデータ署名と比較することと、
前記ログベースのトランザクションマネージャによって、１つ以上の比較の結果に少なくとも部分的に基づいて、前記第１の論理制約が前記要求されたトランザクションによって満たされたことを判定することと、
前記ログベースのトランザクションマネージャによって、前記要求されたトランザクションをコミットすることと、を行うように構成される１つ以上のコンピューティングデバイスを含む、前記システム。
２．前記第１の論理制約の前記制約タイプが重複排除であり、前記第１の論理制約が満たされることを判定するために、前記１つ以上のコンピューティングデバイスが、前記トランザクション記述子に示される前記１つ以上のデータ署名の特定のデータ署名が、前記トランザクション記録のサブセットに格納されるデータ署名と一致しないことを検証するようにさらに構成される、条項１に記載の前記システム。
３．前記第１の論理制約の前記制約タイプがコミットシーケンシングであり、前記第１の論理制約が満たされることを判定するために、前記１つ以上のコンピューティングデバイスが、前記トランザクション記述子に示される前記１つ以上のデータ署名の特定のデータ署名が、前記トランザクション記録のサブセットに格納されるデータ署名と一致することを検証するようにさらに構成される、条項１に記載の前記システム。
４．前記トランザクション記述子が、前記要求されたトランザクションがコミットされるべきかどうかを判定するためにチェックされるべき第２の論理制約に対応して、前記第１の論理制約の前記制約タイプとは異なる第２の制約タイプを示す、条項１に記載の前記システム。
５．前記トランザクション記述子が、前記第１の論理制約をチェックするために調査されるべき前記トランザクション記録のサブセットを識別するために使用されるべき少なくとも第１のデリミタを含む、条項１に記載の前記システム。
６．１つ以上のコンピューティングデバイスによって、
ログベースのトランザクションマネージャで、要求されたトランザクションに対する第１の論理制約を示すトランザクション記述子を受信することと、
前記第１の論理制約をチェックするために調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記トランザクション記述子に示される１つ以上のデータ署名の内容を前記トランザクション記録のサブセットに格納される１つ以上のデータ署名と比較することと、
前記比較の結果に少なくとも部分的に基づいて、前記第１の論理制約が前記要求されたトランザクションによって満たされることを判定することと、
前記第１の論理制約が満たされる要件を含む、前記要求されたトランザクションの１つ以上のコミット要件が満たされたと判定することに応答して、前記要求されたトランザクションをコミットすることと、を実行することを含む、方法。
７．前記第１の論理制約が、重複排除制約を含み、前記トランザクション記述子に示される前記１つ以上のデータ署名が、前記要求されたトランザクションの書き込み動作が向けられる場所を表す特定の重複排除署名を含み、前記第１の論理制約が前記要求されたトランザクションによって満たされることを前記判定することが、前記特定の重複排除署名が前記トランザクション記録のサブセットに格納される別の重複排除署名と一致しないことを検証することを含む、条項６に記載の前記方法。
８．前記第１の論理制約が、コミット−シーケンシング制約を含み、前記トランザクション記述子に示される前記１つ以上のデータ署名が、シーケンシング署名を含み、前記論理制約が前記要求されたトランザクションによって満たされることを前記判定することが、前記特定のシーケンシング署名が前記トランザクション記録のサブセットに格納される別のシーケンシング署名と一致することを検証することを含む、条項６に記載の前記方法。
９．前記トランザクション記述子が、前記要求されたトランザクションに対する第２の論理制約を示す、条項６に記載の前記方法。
１０．前記第１の論理制約が重複排除制約を含み、前記第２の論理制約がコミットシーケンシング制約を含む、条項９に記載の前記方法。
１１．前記１つ以上のコミット要件が、並行性制御要件を含む、条項６に記載の前記方法。
１２．前記トランザクション記述子が、前記第１の論理制約をチェックするために調査されるべき前記トランザクション記録のサブセットを識別するために使用されるべき少なくとも第１のデリミタを含む、条項６に記載の前記方法。
１３．前記第１のデリミタが、特定のトランザクションのコミットに対応する論理タイムスタンプを含み、前記特定のトランザクションが、前記トランザクション記述子を前記受信する前にコミットされた、条項１２に記載の前記方法。
１４．前記トランザクション記述子が第２の論理制約を示し、前記トランザクション記述子が、前記第２の論理制約をチェックするために調査されるべき異なるトランザクション記録のサブセットを識別するために使用されるべき異なるデリミタを含む、条項１２に記載の前記方法。
１５．前記トランザクション記述子が、前記要求されたトランザクションのターゲットとされた書き込み場所を示す特定の書き込み署名を含み、前記１つ以上のデータ署名が、前記ターゲットとされた書き込み場所に対応する特定の重複排除署名を含み、前記特定の重複排除署名が、前記特定の書き込み署名とは異なる、条項６に記載の前記方法。
１６．前記要求されたトランザクションが、（ａ）リレーショナルデータベース、（ｂ）非リレーショナルデータベース、（ｃ）インメモリデータベース、（ｄ）ウェブサービスインターフェースを実装するストレージサービス、（ｅ）ファイルシステム、または（ｆ）分散キャッシュのインスタンスのうちの１つを含むデータストアからの１つ以上の読み取りを含む、条項６に記載の前記方法。
１７．プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサ上で実行されるとき、
ログベースのトランザクションマネージャで、要求されたトランザクションに対する第１の論理制約を示すトランザクション記述子を受信すること、
前記第１の論理制約をチェックするために調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記トランザクション記述子に示される１つ以上のデータ署名の内容を前記トランザクション記録のサブセットに格納される１つ以上のデータ署名と比較することと、
前記１つ以上のデータ署名の前記内容を比較した結果に少なくとも部分的に基づいて、前記第１の論理制約が前記要求されたトランザクションによって満たされることを判定することと、
前記第１の論理制約が満たされる要件を含む、前記要求されたトランザクションの１つ以上のコミット要件が満たされたという判定に応答して、前記要求されたトランザクションをコミットすることと、を行う、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
１８．前記第１の論理制約が、重複排除制約、またはコミットシーケンシング制約のうちの１つを含む、条項１７に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
１９．前記１つ以上１つ以上のコミット要件が、並行性制御要件を含む、条項１７に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２０．前記トランザクション記述子が、前記コミットシーケンシング制約をチェックするために調査されるべき前記トランザクション記録のサブセットを識別するために使用されるべき少なくとも第１のデリミタを含む、条項１７に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
【０１２８】
加えて、先述の実施形態はまた、以下の条項に鑑みてよりよく理解され得る。
１．システムであって、
アプリケーションの状態を複製するために指定されるノードの有向非巡回グラフ（ＤＡＧ）の第１の非コミッタノードで、前記ＤＡＧの第１のコミッタノードへの第１の複製経路の少なくとも一部分を、フォールトトレラントＤＡＧ構成マネージャから受信される構成−デルタメッセージの第１のシーケンスに少なくとも部分的に基づいて、識別することであって、前記ＤＡＧの少なくとも１つの他のノードが、前記フォールトトレラントＤＡＧ構成マネージャから構成−デルタメッセージの異なるシーケンスを受信している、識別することと、
前記第１の非コミッタノードから、１つ以上のノードのそれぞれのローカルストレージデバイスでの複製のために、前記第１の複製経路に沿って、（ａ）クライアントによって要求される第１の候補状態遷移の承認と、（ｂ）前記第１の候補状態遷移が他の候補状態遷移に対して前記第１の非コミッタノードで処理される順番を示すシーケンス番号とを示す状態遷移メッセージを伝送することと、
前記フォールトトレラントＤＡＧ構成マネージャによる、前記第１の複製経路の特定のノードが前記ＤＡＧから除去されるべきであるという判定に応答して、
前記フォールトトレラントＤＡＧ構成マネージャから前記ＤＡＧの１つ以上の残りのノードへの、前記特定のノードの前記ＤＡＧからの除去を示すそれぞれの構成−デルタメッセージの伝送を、前記１つ以上の残りのノードに状態遷移の処理を停止することを命令することなく、開始することと、を行うように構成される１つ以上のコンピューティングデバイスを含む、前記システム。
２．前記１つ以上の残りのノードの第１の残りのノードによって受信される特定の構成−デルタメッセージが、前記ＤＡＧの完全なメンバーシップを示さない、条項１に記載の前記システム。
３．前記フォールトトレラントＤＡＧ構成マネージャが、前記特定のノードが前記ＤＡＧから除去されるべきであると判定するためにコンセンサスベースのプロトコルを使用する複数の構成ノードを含む、条項１に記載の前記システム。
４．前記１つ以上のコンピューティングデバイスが、
前記第１のコミッタノードに、前記候補状態遷移の記録の閾値数のレプリカが作成されたという判定に応答して、前記候補状態遷移がコミットされたという指標を格納することと、
少なくとも前記第１の非コミッタノードに、前記候補状態遷移がコミットされたことを通知することと、
前記クライアントに、前記候補状態遷移がコミットされたことを通知することと、を行うようにさらに構成される、条項１に記載の前記システム。
５．前記構成−デルタメッセージの第１のシーケンスが、第１の構成−デルタメッセージに続いて第２の構成−デルタメッセージを含み、前記構成−デルタメッセージの第２のシーケンスが、前記第２の構成−デルタメッセージに続いて前記第１の構成−デルタメッセージを含む、条項１に記載の前記システム。
６．１つ以上のコンピューティングデバイスによって、
要求された状態遷移に対応する状態遷移メッセージを複製ノードの有向非巡回グラフ（ＤＡＧ）の第１の非コミッタノードから前記ＤＡＧの第１のコミッタノードに伝播することであって、前記状態遷移メッセージが、要求された状態遷移が他の要求された状態遷移に対して承認された順番を示すシーケンス番号を含む、伝播することと、
ＤＡＧ構成マネージャによる、特定のノードが前記ＤＡＧに追加されるべきであるという判定に応答して、前記ＤＡＧ構成マネージャから前記ＤＡＧの１つ以上の他のノードへ、前記特定のノードの前記ＤＡＧへの前記追加を示す構成−デルタメッセージの伝播を、前記１つ以上の他のノードに状態遷移メッセージの処理を停止することを命令することなく、開始することと、を実行することを含む、方法。
７．前記構成−デルタメッセージが、前記ＤＡＧの完全なメンバーシップを示さない、条項６に記載の前記方法。
８．前記１つ以上のコンピューティングデバイスによって、
前記ＤＡＧ構成マネージャによる、異なるノードが前記ＤＡＧから除去されるべきであるという判定に応答して、前記ＤＡＧ構成マネージャから前記ＤＡＧの少なくとも第１の残りのノードに、前記異なるノードの前記ＤＡＧからの前記除去を示す第２の構成−デルタメッセージを、前記第１の残りのノードに状態遷移メッセージの処理を停止することを命令することなく、伝播することを実行することをさらに含む、条項６に記載の前記方法。
９．前記異なるノードが、前記第１の残りのノードの直近の先行であり、
前記第１の残りのノードで、前記異なるノードから受信される直前の状態遷移メッセージを示す最大受信シーケンス番号を判定することと、
前記第１の残りのノードから前記ＤＡＧの第２の残りのノードに、前記最大受信シーケンス番号に少なくとも部分的に基づいて範囲内のシーケンス番号を有する状態遷移メッセージを伝送するように要求を伝送することであって、前記第２の残りのノードが前記異なるノードの除去前に前記異なるノードの直近の先行であった、伝送することと、をさらに含む、条項８に記載の前記方法。
１０．前記要求された状態遷移が、データベースサービスに格納されるデータオブジェクトへの書き込み動作を含む、条項６に記載の前記方法。
１１．前記要求された状態遷移が、ログサービスの特定のログへのログメッセージの挿入を含む、条項６に記載の前記方法。
１２．前記ＤＡＧ構成マネージャが、複数の構成ノードを含み、前記特定のノードが追加されるべきであると前記判定することが、前記複数の構成ノードによってコンセンサスベースのプロトコルを使用することを含む、条項６に記載の前記方法。
１３．前記１つ以上の他のノードが、第１のノード及び第２のノードを含み、前記１つ以上のコンピューティングデバイスによって、
前記第１のノードで、前記ＤＡＧの異なるノードの除去を示す構成−デルタメッセージを受信する前に、及び第２のノードで、前記異なるノードの前記除去を示す構成−デルタメッセージを受信した後に、
前記異なるノードによって、異なる状態遷移メッセージを前記第２のノードから受信することと、
前記異なるノードで、前記異なる状態遷移メッセージに対応する記録を複製することと、
前記異なるノードによって、前記第１のノードに、前記異なる状態遷移メッセージを伝送することと、を実行することをさらに含む、条項６に記載の前記方法。
１４．前記１つ以上のコンピューティングデバイスによって、
前記第１のコミッタノードに、前記要求された状態遷移の表現の閾値数のレプリカが作成されたという判定に応答して、前記要求された状態遷移がコミットされたという指標を格納することと、
少なくとも前記第１の非コミッタノードに、前記要求された状態遷移がコミットされたことを通知することと、
前記状態遷移を実装するための要求がそこから受信されたクライアントに、前記状態遷移がコミットされたことを通知することと、を実行することをさらに含む、条項６に記載の前記方法。
１５．前記１つ以上のコンピューティングデバイスによって、
前記ＤＡＧの１つ以上のスタンバイノードをインスタンス化することと、
前記１つ以上のスタンバイノードの特定のスタンバイノードに、前記要求された状態遷移のそれぞれの表現が閾値数のＤＡＧノードで複製された後に、前記状態遷移メッセージを伝送することと、
前記特定のスタンバイノードに、前記要求された状態遷移の記録を格納することと、
前記特定のスタンバイノードを、（ａ）前記ＤＡＧの失敗した非コミッタノードまたは（ｂ）前記ＤＡＧの失敗したコミッタノードのうちの１つの置換として選択することと、を実行することをさらに含む、条項６に記載の前記方法。
１６．前記第１の非コミッタノードが、プロバイダネットワークの第１のデータセンターにある第１のホストで実行するプロセスを含み、前記第１のコミッタノードが、前記プロバイダネットワークの異なるデータセンターにある異なるホストで実行する異なるプロセスを含む、条項６に記載の前記方法。
１７．プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサで実行されるとき、状態情報を複製するために確立されるＤＡＧの特定のノードを実装し、前記特定のノードが、
ＤＡＧ構成マネージャから、複数の構成−デルタメッセージを受信することであって、前記複数の構成−デルタメッセージの特定の構成−デルタメッセージが、（ａ）前記ＤＡＧへのノードの追加または（ｂ）前記ＤＡＧからのノードの除去のうちの１つ以上を示す、受信することと、
状態遷移メッセージが前記特定のノードでそこから受信された直近の先行ノードが、前記ＤＡＧから除去されたことを示す特定の構成−デルタメッセージを前記ＤＡＧ構成マネージャから受信した後に、
少なくとも前記特定の構成−デルタメッセージを使用して、異なる直近の先行ノードを識別することと、
前記異なる直近の先行ノードに、状態遷移メッセージの要求を伝送することと、を行うように構成される、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
１８．前記特定のノードが、
前記特定の構成−デルタメッセージを受信した後、かつ前記状態遷移メッセージの要求に対する応答を受信する前に、特定の状態遷移メッセージを前記特定のノードの直近の後続ノードに伝送するように構成される、条項１７に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
１９．前記特定のノードが、
前記ＤＡＧ構成マネージャから、直近の後続ノードが前記ＤＡＧから除去されたことを示す異なる構成−デルタメッセージを受信した後、
少なくとも前記異なる構成−デルタメッセージを使用して、状態遷移メッセージが前記特定のノードからそこへ送信されるべきである異なる直近の後続ノードを識別することと、
前記異なる直近の後続ノードへのネットワーク接続の確立を開始することと、を行うように構成される、条項１７に記載のる非一時的なコンピュータアクセス可能なストレージ媒体。
２０．プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサで実行されるとき、状態情報を複製するために確立されるノードのＤＡＧの構成マネージャを実装し、前記構成マネージャが、
コンセンサスプロトコルに少なくとも部分的に基づいて、前記ＤＡＧの特定のノードが前記ＤＡＧから除去されるべきであると判定することであって、前記特定のノードが前記ＤＡＧ内の特定の位置を占有する、判定することと、
前記構成マネージャに格納される前記ＤＡＧの構成の永続的な表現から、前記特定のノードを除去することと、
前記ＤＡＧの１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧから除去されたことを示す構成−デルタメッセージを、前記１つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２１．前記構成マネージャが、
前記特定のノードが前記ＤＡＧのメンバーとしてサービスに利用可能であるという判定に応答して、
前記特定のノードのために前記ＤＡＧ内の異なる位置を識別することと、
前記ＤＡＧの前記１つ以上の残りのノードに、前記特定のノードが前記ＤＡＧ内の前記異なる位置で前記ＤＡＧに追加されたことを示す別の構成−デルタメッセージを、前記１つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、条項２０に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２２．前記構成−デルタメッセージが、前記ＤＡＧの完全なメンバーシップを示さない、条項２０に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
２３．前記構成マネージャが、
前記特定のノードに前記ＤＡＧからのその除去の前に割り当てられる特定の役割を識別することであって、前記役割が、アクセプタノード、中間ノード、またはコミッタノードのうちの１つを含む、識別することと、
前記特定の役割を前記ＤＡＧの異なるノードに割り当てることであって、前記異なるノードが、（ａ）前記除去の前の前記特定のノードの後続ノードまたは（ｂ）前記ＤＡＧのスタンバイノードのうちの１つを含む、割り当てることと、を行うように構成される、条項２０に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
【０１２９】
加えて、先述の実施形態はまた、以下の条項に鑑みてよりよく理解され得る。
１．プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、１つ以上のプロセッサ上で実行されるとき、
ログベースのトランザクションマネージャで、要求されたトランザクションのトランザクション記述子をクライアントから受信することであって、前記トランザクション記述子が、少なくとも（ａ）前記要求されたトランザクション中にデータがそこから読み取られるソースデータストアの第１のコミット状態識別子（ＣＳＩ）、（ｂ）前記要求されたトランザクション中にデータがそこから読み取られる１つ以上のオブジェクトを示すそれぞれの読み取り署名、及び（ｃ）前記要求されたトランザクションのコミットに応答してそこにデータが書き込まれるべき１つ以上のオブジェクトを示すそれぞれの書き込み署名を含む、受信することと、
前記ログベースのトランザクションマネージャによって、前記第１のＣＳＩを使用して、前記要求されたトランザクションをコミットする前にコンフリクトを調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することであって、前記特定の永続的なログが、前記ソースデータストアを含む１つ以上のデータストアと関連付けられた以前にコミットされたトランザクションに対応するトランザクション記録を含む、識別することと、
前記ログベースのトランザクションマネージャによる、前記要求されたトランザクションの前記読み取り署名によって示される前記オブジェクトがどれも、前記トランザクション記録のサブセットに示される書き込み動作によって修正されていないという判定に応答して、前記要求されたトランザクションのコミットを受理することと、を行う、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
２．前記トランザクション記述子に含まれる特定の読み取り署名が、データがそこから読み取られる前記１つ以上のオブジェクトに対応する１つ以上の読み取り場所の特定の読み取り場所から生成される第１のハッシュ値を含み、前記トランザクション記述子に含まれる特定の書き込み署名が、データがそこに書き込まれるべき前記１つ以上のオブジェクトに対応する１つ以上の書き込み場所の特定の書き込み場所から生成される第２のハッシュ値を含む、条項１に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
３．前記読み取り署名に示される前記１つ以上のオブジェクトが、第１のデータストアにある第１のオブジェクトを含み、前記ＣＳＩが、前記第１のデータストアにある以前にコミットされたトランザクションに対応する第１の論理タイムスタンプを含む、条項１に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
４．前記読み取り署名に示される前記１つ以上のオブジェクトが、第１のデータストアにある第１のオブジェクト及び第２のデータストアにある第２のオブジェクトを含み、前記ＣＳＩが、（ａ）前記第１のデータストアにある第１の以前にコミットされたトランザクションに対応する第１の論理タイムスタンプ、及び（ｂ）前記第２のデータストアにある第２の以前にコミットされたトランザクションに対応する第２の論理タイムスタンプに少なくとも部分的に基づいて判定される、条項１に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
５．前記トランザクション記述子が、第１の書き込み場所に書き込まれるべきデータペイロードを含み、前記命令が、前記１つ以上のプロセッサで実行されるとき、
前記要求されたトランザクションのコミットの受理の後に、前記トランザクション要求に対応するトランザクション記録の１つ以上のレプリカを格納することと、
前記要求されたトランザクションがコミットされたという指標を提供することと、
前記要求されたトランザクションがコミットされたという指標に対して非同期的に、前記データペイロードを前記第１の書き込み場所に伝播するための動作を開始することと、を行う、条項１に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
６．１つ以上のコンピューティングデバイスによって、
要求されたトランザクションのトランザクション記述子を受信することであって、前記トランザクション記述子が、少なくとも（ａ）コンフリクトチェックデリミタ、（ｂ）前記要求されたトランザクション中にデータがそこから読み取られる１つ以上のオブジェクトを示す読み取りセット記述子、及び（ｃ）前記要求されたトランザクションのコミットに応答してそこにデータが書き込まれるべき１つ以上のオブジェクトを示す書き込みセット記述子を含む、受信することと、
前記コンフリクトチェックデリミタを使用して、前記要求されたトランザクションをコミットする前にコンフリクトを調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記読み取りセット記述子に示される前記オブジェクトのどれも、前記トランザクション記録のサブセットに示される書き込み動作によって修正されていないという判定に応答して、前記要求されたトランザクションのコミットを受理することと、を実行することを含む、方法。
７．前記読み取りセット記述子が、データがそこから読み取られる前記１つ以上のオブジェクトに対応する１つ以上の読み取り場所の特定の読み取り場所から生成される第１のハッシュ値を含み、前記書き込みセット記述子が、データがそこに書き込まれるべき前記１つ以上のオブジェクトに対応する１つ以上の書き込み場所の特定の書き込み場所から生成される第２のハッシュ値を含む、条項６に記載の前記方法。
８．前記コンフリクトチェックデリミタが、特定のトランザクションのコミットに対応する論理タイムスタンプを含み、前記特定のトランザクションが、前記トランザクション記述子を前記受信する前にコミットされた、条項６に記載の前記方法。
９．前記読み取りセット記述子に示される前記１つ以上のオブジェクトが、第１のデータストアにある第１のオブジェクトを含み、前記１つ以上のコンピューティングデバイスによって、
第１の要求を、ログベースのトランザクションマネージャのクライアント側コンポーネントによって、前記第１のデータストアでの前記第１の要求の受信の前に前記第１のデータストアに適用された直前の書き込みを含んだ以前にコミットされたトランザクションに対応する第１の論理タイムスタンプのために、前記第１のデータストアにサブミットすることと、
前記クライアント側コンポーネントによって、前記第１の論理タイムスタンプを前記コンフリクトチェックデリミタとして選択することと、を実行することをさらに含む、条項６に記載の前記方法。
１０．前記読み取りセット記述子に示される前記１つ以上のオブジェクトが、第２のデータストアにある第２のオブジェクトを含み、前記１つ以上のコンピューティングデバイスによって、
前記クライアント側コンポーネントにある前記第２のデータストアから、前記第２のデータストアに適用された異なる書き込みを含んだ異なる以前にコミットされたトランザクションに対応する第２の論理タイムスタンプを獲得することであって、前記異なる書き込みが、前記第２の論理タイムスタンプを前記クライアント側コンポーネントに提供する前に前記第２のデータストアに適用された直前の書き込みである、獲得することと、を実行することをさらに含み、
前記第１の論理タイムスタンプを前記コンフリクトチェックデリミタとして前記選択することが、前記第１の論理タイムスタンプが前記第２の論理タイムスタンプより小さいことを判定することを含む、条項９に記載の前記方法。
１１．前記トランザクション記述子が、前記書き込みセット記述子に示される第１の書き込み場所に書き込まれるべきデータペイロードを含み、前記１つ以上のコンピューティングデバイスによって、
前記トランザクション要求に対応するトランザクション記録の１つ以上のコピーを、前記要求されたトランザクションのコミットを受理した後に格納することと、
前記要求されたトランザクションがコミットされたという指標を提供することと、
指標を前記提供することに対して非同期的に、前記データペイロードを前記第１の書き込み場所に書き込むための動作をスケジューリングすることと、を実行することをさらに含む、条項６に記載の前記方法。
１２．前記読み取りセット記述子に示される前記１つ以上のオブジェクトが、第１のデータストアに位置するオブジェクトを含み、前記書き込みセット記述子に示される前記１つ以上のオブジェクトが、異なるデータストアに位置する別のオブジェクトを含む、条項６に記載の前記方法。
１３．要求された読み取りのみのトランザクションの第２のトランザクション記述子を受信することであって、前記第２のトランザクション記述子が、（ａ）第２のコンフリクトチェックデリミタ、及び（ｂ）前記読み取りのみのトランザクション中にデータがそこから読み取られる１つ以上の読み取り場所を示す第２の読み取りセット記述子を含む、受信することと、
前記要求された読み取りのみのトランザクションの少なくとも１つの読み取り場所が、前記第２のコンフリクトチェックデリミタによって示される動作の後に更新される書き込み場所に対応するということを判定することに応答して、前記読み取りのみのトランザクションが拒否されたという指標を提供することと、をさらに含む、条項６に記載の前記方法。
１４．要求された書き込みのみのトランザクションの第２のトランザクション記述子を受信することであって、前記第２のトランザクション記述子が、データがそこに書き込まれるべき特定の書き込み場所を示す第２の書き込みセット記述子を含む、受信することと、
前記書き込みのみのトランザクションのコミットに対応する論理タイムスタンプを生成することと、
前記書き込みのみのトランザクション前にコミットされる特定のトランザクションに要求される書き込みに対応する少なくとも１つの書き込み動作が、まだスケジューリングされていないことを判定することと、
前記少なくとも１つの書き込み動作をスケジューリングすることと、をさらに含む、条項６に記載の前記方法。
１５．前記読み取りセット記述子及び前記書き込みセット記述子のうちの少なくとも１つの記述子が、非リレーショナルデータベースシステム、リレーショナルデータベースシステム、非構造化データオブジェクトへのアクセスを許可するウェブサービスインターフェースを実装するストレージサービス、インメモリデータベース、または分散キャッシュのインスタンスのうちの１つに格納されるオブジェクトを示す、条項６に記載の前記方法。
１６．システムであって、
要求されたトランザクションのトランザクション記述子をクライアントから受信することであって、前記トランザクション記述子が、少なくとも（ａ）コンフリクトチェックデリミタ、及び（ｂ）前記要求されたトランザクション中にデータがそこから読み取られる１つ以上の読み取り場所を示す読み取りセット記述子を含む、受信することと、
前記コンフリクトチェックデリミタを使用して、前記要求されたトランザクションをコミットする前にコンフリクトを調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記要求されたトランザクションの前記読み取り場所がどれも、前記トランザクション記録のサブセットに示される書き込み場所に対応しないことを判定することに応答して、前記要求されたトランザクションがコミットされたことを示す新しいトランザクション記録を前記特定の永続的なログに格納することと、を行うように構成される１つ以上のコンピューティングデバイスを含む、前記システム。
１７．前記トランザクション記述子が、前記トランザクションのコミットの後にデータがそこに書き込まれるべきである１つ以上の場所を示す書き込みセット記述子を含み、前記新しいトランザクション記録が、前記書き込みセット記述子の指標を含む、条項１６に記載の前記システム。
１８．前記１つ以上のコンピューティングデバイスが、
前記新しいトランザクション記録の前記特定の永続的なログへの挿入に対して非同期に、前記トランザクション記述子に示される書き込みペイロードを前記書き込みセット記述子の前記１つ以上の場所の第１の書き込み場所に伝播するための動作をスケジューリングするようにさらに構成される、条項１７に記載の前記システム。
１９．前記読み取りセット記述子が、前記１つ以上の読み取り場所の特定の読み取り場所から生成される第１のハッシュ値を含む、条項１６に記載の前記システム。
２０．前記コンフリクトチェックデリミタが、特定のトランザクションのコミットに対応する論理タイムスタンプを含む、条項１６に記載の前記システム。
【０１３０】
結論
様々な実施形態は、コンピュータアクセス可能な媒体に関する先述の説明に従って実装される命令及び／またはデータを受信、送信、または格納することをさらに含み得る。一般的に言えば、コンピュータアクセス可能な媒体は、磁気または光媒体などのストレージ媒体またはメモリ媒体、例えば、ディスクまたはＤＶＤ／ＣＤ−ＲＯＭ、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの揮発性もしくは非揮発性媒体、ならびにネットワーク及び／または無線リンクなどの通信媒体を介して伝えられる、電気、電磁気、もしくはデジタル信号などの伝送媒体または信号を含み得る。
【０１３１】
図に示される、及び本明細書に説明される様々な方法は、方法の例示的な実施形態を表す。本方法は、ソフトウェア、ハードウェア、またはそれらの組み合わせにおいて実装され得る。方法の順番は変更され得、様々な要素が、追加、並べ替え、組み合わせ、省略、修正などの対象となり得る。
【０１３２】
様々な変形形態及び変更は、本開示の利益を有する当業者にとって明白であるようになされ得る。すべてのそのような変形形態及び変更を包含すること、それにより、上記説明は限定的な意味というよりも例示的と見なされることが意図される。
【図１】
2018156683.tif 000003
【図２ａ】
2018156683.tif 000004
【図２ｂ】
2018156683.tif 000005
【図２ｃ】
2018156683.tif 000006
【図２ｄ】
2018156683.tif 000007
【図２ｅ】
2018156683.tif 000008
【図２ｆ】
2018156683.tif 000009
【図２ｇ】
2018156683.tif 000010
【図２ｈ】
2018156683.tif 000011
【図３】
2018156683.tif 000012
【図４】
2018156683.tif 000013
【図５】
2018156683.tif 000014
【図６】
2018156683.tif 000015
【図７】
2018156683.tif 000016
【図８】
2018156683.tif 000017
【図９】
2018156683.tif 000018
【図１０】
2018156683.tif 000019
【図１１ａ】
2018156683.tif 000020
【図１１ｂ】
2018156683.tif 000021
【図１１ｃ】
2018156683.tif 000022
【図１１ｄ】
2018156683.tif 000023
【図１１ｅ】
2018156683.tif 000024
【図１１ｆ】
2018156683.tif 000025
【図１１ｇ】
2018156683.tif 000026
【図１１ｈ】
2018156683.tif 000027
【図１２】
2018156683.tif 000028
【図１３】
2018156683.tif 000029
【図１４】
2018156683.tif 000030
【図１５】
2018156683.tif 000031
【図１６】
2018156683.tif 000032
【図１７】
2018156683.tif 000033
【図１８】
2018156683.tif 000034
【図１９】
2018156683.tif 000035
【図２０】
2018156683.tif 000036
【図２１】
2018156683.tif 000037
【図２２】
2018156683.tif 000038
【図２３】
2018156683.tif 000039
【図２４】
2018156683.tif 000040
【図２５】
2018156683.tif 000041
【図２６】
2018156683.tif 000042
【外国語明細書】
2018156683000001.pdf