グラフとして編成される複製ノードを使用した分散アプリケーション状態の管理のための方法及び装置の様々な実施形態、ならびにトランザクション管理のために使用され得るログサービスを実装するためにそのようなグラフを配置することの様々な実施形態が記載される。いくつかの実施形態に従って、フォールトトレラント分散アプリケーションを構築するための複製状態機械が、有向非巡回グラフ(DAG)内に配置される複数の複製ノードを使用して実装され得る。いくつかの実施態様において、ある特定の複製DAGは、1つ以上のアクセプタノード、1つ以上のコミッタノード、アクセプタノードからコミッタノードに通じるDAGエッジを含む複製経路に沿ってそれぞれが位置する0個以上の仲介ノード、及びノード障害の発生時に他のタイプのノードのうちの1つの役割を素早く引き継ぐように構成される0個以上のスタンバイノードを含み得る。複製DAGのアクセプタ、仲介、及びスタンバイノードはまとめて、本明細書では「非コミッタ」ノードと称され得る。「アクセプタ」、「仲介」「コミッタ」、及び「スタンバイ」は、DAGノードが仮定し得る役割のセットとしてまとめて称され得る。いくつかの実施形態において、アクセプタノードはまた、DAGの「ヘッド」ノードと称され得、コミッタノードはまた、「テール」ノードと称され得る。
概して、少なくともいくつかの実施形態において、ある特定の複製DAGの各ノードは、少なくともある特定のアプリケーションの状態情報を、例えば、ローカルディスクまたは他の同様のストレージデバイスに書き込まれる状態遷移記録の形態で、複製することを担い得る。アプリケーション状態情報は、本明細書では複製経路またはコミット経路と称される、DAGのアクセプタノードからコミッタノードへのエッジのセットに沿って伝播され得る。DAG内で伝播される各状態遷移メッセージは、対応する状態遷移要求が処理された(例えば、アクセプタノードで)順番を示すそれぞれのシーケンス番号または論理タイムスタンプを含み得る。シーケンス番号は、異なる実施形態において様々な技術のいずれかを使用して実装され得、例えば、アクセプタノードによって維持される簡素なN−ビットカウンタが使用され得るか、またはDAGの構成マネージャなどのDAGの管理コンポーネントによって生成される単調増加論理タイムスタンプ値(必ずしも時刻時計に関連しない)が使用され得る。ある特定の状態遷移記録が、例えば、十分な数の状態遷移記録のレプリカが複製経路に沿って保存された後に、コミッタノードに達するとき、この遷移は明示的または暗示的にコミットされ得る。ある時点におけるアプリケーションの状態は、いくつかの実施形態において、選択されたシーケンス番号までのコミットされた状態遷移すべての結果の論理蓄積として判定され得る。構成マネージャは、下に記載されるように構成−デルタメッセージを非同期的にDAGノードに伝播することによって、DAG構成に対する変更(例えば、ノードが、障害に起因してDAGを離脱するとき、またはDAGに参加/再参加するとき)を管理することを担い得る。いくつかの実施形態において、各複製ノードは、それぞれの決定論的有限状態機械を実装し得、構成マネージャは、別の決定論的有限状態機械を実装し得る。DAG構成変更を管理するために使用されるプロトコルは、様々な実施形態においてDAGの可用性または「ライブネス」を最大限にするように設計され得る。例えば、DAGノードは、少なくともいくつかの実施形態において、それらのDAG構成のビューを同期する必要がない場合があり、故に、アプリケーション状態遷移処理のために使用されるプロトコルは、複製経路に沿ったノードのうちのいくつかが他のノードとは異なる現在のDAG構成のビューを有する場合でも、正しく動作し得る。故に、1つの簡素な例示的なシナリオにおいて、DAGが順にノードA、B、C、及びDからなる(即ち、複製経路A−B−C−Dを有する)という仮定の下に、DAGの1つのノードAがその状態遷移処理の役割を実行し続ける一方で、別のノードDが、構成−デルタメッセージの結果としてノードCがDAGを離脱したことをすでに伝えられ、したがってDAGのDのビューを変更された経路A−B−Dを含むように更新したという場合があり得る。構成マネージャは、少なくともいくつかの実施形態において、現在のDAG構成に関するノードの潜在的に異なるビューにもかかわらず、状態遷移ノードの処理を停止するようにDAGノードに要求する必要がない場合がある。故に、一部の状態複製技術において必要とされ得る「Stop−the−world」構成同期期間のタイプは、本明細書に記載される種類の複製DAGを使用するときは必要とされない場合がある。
大半の動作条件下で、DAG構成変更情報を伝播するために使用される技術は、ノード障害/退出、ノード参加、もしくはノード役割変更と関連付けられた任意のダウンタイムを最小限にする、または排除すると同時に、最終的には、様々なメンバーノードにおいてDAG構成の収束された一貫性のあるビューをもたらし得る。状態管理プロトコルの正当性の形式的数学的証明は、少なくともいくつかの実施形態において利用可能であり得る。少なくともいくつかの実施形態において、複製DAGのプロトコルは、偽陽性障害検出を処理するのに特に効果的であり得る。例えば、上の実施例において、ノードDは、ノードCが実際には失敗していなかったにもかかわらず、構成マネージャによってノードCが失敗したと伝えられている場合がある。故に、状態遷移は、偽陽性障害検出から暫くの間、Cの退出を示す構成−デルタメッセージがA、B、及びDで受信されるまでの間、依然としてCによって(ならびにその隣接のB及びDによって)正確に処理され得、状態が複製されているアプリケーションが、偽陽性障害検出にもかかわらず進行することを可能にする。それがDAGから除去されたことが最終的に伝えられると、Cは、それが実際にはサービスに利用可能であることを構成マネージャに示し得、DAGに再参加することを許可され得る(例えば、スタンバイノードとして、または修正された複製経路に沿った何らかの他の位置で)。
いくつかの実施形態において、アクセプタノードは、複製DAGのクライアントからアプリケーション状態遷移要求を受信することと、ある特定の要求された遷移が最終的なコミットを受理されるべきかどうかを判定することと、受理された状態遷移記録のローカルレプリカを格納することと、受理された状態遷移記録をコミッタノードに向かってDAGの複製経路に沿って隣接ノードへ伝送することとを担い得る。使用事例によっては、状態遷移記録は、いくつかの実施形態において、書き込みペイロードを含み得、例えば、アプリケーション状態がデータベースの内容を含む場合、状態遷移記録は、状態遷移に対応するトランザクション中に書き込まれるバイトを含み得る。アクセプタノードはまた、少なくともいくつかの実施形態において、受理された状態遷移のシーケンス番号を判定または生成することを担い得る。仲介ノードは、受理された状態遷移記録のローカルレプリカを格納すること、及び受理された状態遷移を示すメッセージをコミッタノードへの経路に沿って次のノードへ伝送/転送することを担い得る。コミッタノードは、ローカルストレージに状態遷移記録のその独自のレプリカを、例えば、記録がコミットされたという指標と共に、格納し得る。対応する状態遷移がコミットされたことを示す記録は、本明細書では「コミット記録」と称され得る一方、対応する状態遷移が受理されたが、必ずしもまだコミットされていないことを示す記録は、「受理記録」と称され得る。いくつかの実施形態において、及びアプリケーションのニーズによって、コミッタノードは、状態遷移を要求したクライアントへのコミット応答の伝送(例えば、アクセプタノードを介して)を開始し得る。少なくとも1つの実施形態において、コミッタノードは、状態遷移がコミットされたことを、複製経路に沿ってノードの一部またはすべてに通知し得る。いくつかの実施形態において、コミットの指標がDAGノードで受信されると、今コミットされた状態遷移の受理記録は、対応するコミット記録によって置き換えられるか、それがこれからコミット記録を表すように修正され得る。他の実施形態において、所与のDAGノードは、同じ状態遷移についての受理記録及びコミット記録の両方を、例えば、それぞれのシーケンス番号と共に、格納し得る。いくつかの実施態様において、別個のコミット記録セット及び受理記録セットが、様々なDAGノードでローカルストレージに格納され得る一方、他の実施態様においては、一種類のみの記録(受理またはコミット)が、所与のDAGノードで所与の状態遷移について一度に格納され得る。
構成マネージャは、いくつかの実施形態において、DAG構成に対する変更を受理すること及びその変更をDAGノードに伝播することを担う、DAGの構成情報の信頼できるソースとして指定され得る。少なくともいくつかの実施形態において、構成マネージャはそれ自体が、障害に対するリカバリ力を持つように、例えば、コンセンサスを介してDAG構成変更(ノードの除去または追加など)をまとめて承認し、複数の構成マネージャストレージデバイスでDAG構成を複製するノードのフォールトトレラントクラスタとして、設計され得る。「構成−デルタ」という名称によって暗示されるように、構成マネージャによってDAGノードに送信されるメッセージは、特定の変更(例えば、DAGに参加する、もしくはDAGを離脱するノードによって引き起こされる変更、またはDAGの既存ノードの役割/位置に対する変更)の指標のみを含み、DAG構成の表現を全体として含む、またはDAGのメンバーシップ全体をリストする必要がない場合がある。故に、構成−デルタメッセージの所与の受信者は、それがこれまでに受信した構成−デルタメッセージの特定セットまたはシーケンスに基づいて、DAG構成のその独自のビューを構築することが予測され得る。いくつかの実施態様において、シーケンス番号は、例えば、構成−デルタメッセージの受信者が任意の以前の構成−デルタメッセージを見逃しているかどうかを判定することを可能にするため、構成−デルタメッセージにも割り当てられ得る。構成マネージャは、異なるDAGノードによる構成−デルタメッセージを受信する順番または相対的なタイミングを保証することを試みない場合があるため、DAG構成の現在のビューは、いくつかの実施形態において、上の実施例によって示されるように少なくともある期間は、異なるノードでは異なり得る。
一実施形態に従って、構成−デルタメッセージに応答してDAGノードが行う措置は、構成変更が受信者のすぐ隣に影響を与えるかどうかに基づいて異なり得る。DAGがアクセプタノードA、仲介ノードB、及びコミッタノードCを時間点T0で含み、初期の複製経路A−B−Cを有する別の例示的なシナリオを検討する。時間T1で、DAGの構成マネージャDCM1が、例えば、見かけ上の障害または接続性の損失の結果として、BがDAGを離脱したことに気付く。DCM1は、状態遷移要求処理におけるいかなる停止も要求することなく、それぞれの非同期型構成−デルタメッセージD1及びD2をそれぞれ残りのノードA及びCに送信し得る。Aが時間T3でD1を受信する前に、Cが時間T2でD2を受信する場合、Aは、いくらかの時間間隔(T3〜T2)の間、Bに向けられる状態遷移メッセージを送信し続け得る(しかしながら、Nが実際に失敗している場合、Aによって送信されるメッセージは、Bによって処理されない場合がある)。同様に、CがT3でD2を受信する前に、AがT2でD1を受信する場合、Cは、CがBのDAGからの離脱に気付くまでのいくらかの時間(T3〜T2)の間、それがBから受信する、Bが失敗したときにインフライト状態だったメッセージを処理し続け得る。ノードAがD1を受信すると、それがまだCからの連絡を受けていなかった場合、ノードAは、Cへの接続性を古い方の複製経路(A−B−C)と置き換わる新しく構成された複製経路(A−C)内のその新しい直近の後続として確立し得る。同様に、CがD2を受信すると、それは、Aへの接続性をその新しい直近の先行として確立し得(AがまだCに連絡していなかった場合)、少なくともいくつかの実施形態において、Cは、AからBへ伝送されたがまだCには達していない状態遷移記録の再伝送についてAに要求をサブミットし得る。例えば、Cは、再伝送要求内に、それがこれまでに受信した状態遷移記録の最大のシーケンス番号HSN1を含み得、AがHSN1より大きいシーケンス番号を有するいかなる状態遷移記録も再伝送することを可能にする。
少なくともいくつかの実施形態において、構成マネージャは、DAGノードが見かけ上不健全になったときを示すことを健全性検出機構またはサービスに依存し得、見かけ上不健全なノードのDAG構成からの除去をもたらす。分散環境内の少なくともいくつかの健全性検出機構は、ハートビート、またはノード健全性状態に関して常に適切な判断をするわけではない他の低次の機構に依存し得る。同時に、構成マネージャは、その構成−デルタメッセージを送信する前に実際のノード障害を確認するのを無期限に待つ立場にない場合があり、むしろ、それは、ノード障害の可能性が何らかの閾値(例えば、80%または90%)を超えることを判定したときに構成−デルタメッセージを伝送し得るか、いくつかの他の発見的方法を使用して、DAG構成変更及び対応するデルタメッセージをトリガし得る。先に述べたように、複製DAGで使用される状態管理プロトコルは、例えば、「Stop−the−world」停止を回避することによって、偽陽性障害「検出」の悪影響を緩和し得る。結果として、複製DAGが用いられるとき、他の状態複製技術を使用した場合に許容されていたであろうものより高速/安価な(潜在的に信頼性が低いが)障害検査機構を使用することが可能であり得る。
少なくとも1つの実施形態において、連携停止技術が複製DAGのために実装され得る。特定の条件下で、例えば、複数のDAGリソースまたはノードに関与する大規模障害イベントが検出される場合、構成マネージャは、DAGの生存ノードに、これ以上の状態遷移を処理することを中止し、それらのアプリケーション状態情報を互いに同期させ、同期されたアプリケーション状態情報をそれぞれのストレージ場所で格納し、かつ再稼働命令を待つように命令し得る。いくつかの実施態様において、アプリケーション状態をローカルに保存した後、DAGノードはそれぞれ、クリーンシャットダウン及び再起動を実行し、それらがサービスに利用可能であることを示すために再起動後に構成マネージャにレポートし得る。構成マネージャによって停止コマンドが発行される前に失敗したノードが、それがサービスに利用可能であるとレポートする場合、いくつかの実施形態において、構成マネージャは、そのようなノードに、アプリケーション状態に関して最新の状態であることが知られる別のノードとそのアプリケーション状態を同期させる(例えば、構成マネージャによって)ように命令し得る。構成マネージャは、十分な数のノードが(a)サービスに利用可能、及び(b)アプリケーション状態に関して最新の状態になるまで待機し、(潜在的に新しい)DAG構成を判定し、DAG構成を構成のメンバーノードに示す再稼働メッセージを送信することによってDAGを再稼働し得る。そのような制御及び連携停止/再起動ストラテジは、いくつかの実施形態において、別の方法で可能であり得たものよりも、大規模障害イベント後により迅速かつ信頼できるアプリケーションリカバリを可能にし得る。連携停止アプローチはまた、大規模障害に対応する以外の目的、例えば、複数の複製ノードからのアプリケーション状態情報の高速並列バックアップ/スナップショットのために、使用され得る。
上記のタイプのDAGベースの複製状態機械は、様々な実施形態において様々な異なるアプリケーションを管理するために使用され得る。いくつかの実施形態において、ログサービスが実装され得、ここでは、1つ以上のデータストア(例えば、リレーショナルまたは非リレーショナルデータベース)が、複製DAGを使用して実装される永続的な変更ログのインスタンスを介してトランザクション管理のために登録され得る。下にさらに詳細に記載されるように、楽観的並行性制御機構が、いくつかの実施形態において、そのようなログベースのトランザクションマネージャによって使用され得る。ログサービスのクライアントは、1つ以上のソースデータストアで読み取り動作を実行し、所与のトランザクション内で書き込み動作が実行されるべき1つ以上のデータストアの場所を(例えば、読み取りの結果に基づいて)判定し得る。読み取りセット、書き込みセット、並行性制御要件、及び/またはトランザクション上の論理制約の表現を含むトランザクション要求記述子は、ログサービスのコンフリクト検出器(例えば、対応する複製DAGのアクセプタノードと関連付けられたコンフリクト検出ロジック)にサブミットされ得る。コンフリクト検出器は、以前にコミットされたトランザクションの記録をトランザクション記述子の内容と一緒に使用して、トランザクション要求がコミットを受理されるかどうかを判定し得る。トランザクションがコミットを受理される場合、対応するコミット記録の複製が、ログのために確立されるDAGのいくつかの複製ノードで開始され得る。故に、ログの所与のレプリカに挿入される記録は各々が、それぞれのアプリケーション状態遷移を表し得る。例えば重複排除要件、トランザクション間コミットシーケンシング要件などのいくつかの異なる論理制約が、異なる実施形態において指定され、ログベースのトランザクションマネージャによって施行され得る。そのようなログベースのトランザクション管理機構は、いくつかの実施形態において、例えば、基礎となるデータストアが1つを超える書き込みに関与するトランザクションの原子性をネイティブにサポートし得ないとしても、所与のトランザクションの書き込みセットが複数の書き込み場所を含む、マルチアイテムトランザクション、またはマルチデータベーストランザクションのサポートを可能にし得る。コミットされたトランザクションに対応する書き込みは、少なくともいくつかの実施形態において、関連のあるデータストアに非同期的に適用され得、例えば、トランザクションがコミットされたという記録は、対応する書き込みがターゲットデータストアに伝播される前のあるときに永続的な変更ログに保存され得る。故に、永続的な変更ログは、少なくともいくつかの実施形態において、ログが状態変更を記録した後にアプリケーション状態に追いつくデータストアと共に、アプリケーション状態の信頼できるソースになり得る。
複製DAGはまた、複製されたデータベースインスタンスのため、高スループットデータストリームを管理するため、及び/または様々な実施形態における分散されたロック管理のために使用され得る。いくつかの実施形態において、複製DAGは、コンピュートインスタンスなどの仮想化リソースに対する状態変更を管理するために、プロバイダネットワーク内で使用され得る。少なくともいくつかの実施形態において、コミットされた書き込みを登録されたデータストア(書き込みの結果がデータストアのそれぞれの読み取りインターフェースを介して読み取られ得る)に伝播することに加えて、ログサービスはまた、その独自の別個のアクセスインターフェースを定義及び実装し得、関係するクライアントが、所与のクライアントアプリケーションのために格納される記録の少なくとも一部分を永続的なログインスタンスから直接読み取ることを可能にする。
例示的なシステム環境
図1は、少なくともいくつかの実施形態に従う、複製ノードの動的DAG(有向非巡回グラフ)がアプリケーション状態変更を管理するために確立される例示的なシステム環境を示す。示されるように、システム100において、アプリケーション160の状態遷移を管理するために確立される複製DAG140は、アクセプタノード110、中間ノード112、及びコミッタノード114の3つのノードを有する複製経路を含む。加えて、DAG140は、描写された実施形態において、必要な場合には他のノードのうちのいずれかの役割を引き継ぐために利用可能なスタンバイノード130を含む。ノードの他の組み合わせが、他の複製DAGに配置され得、例えば、1つを超える中間ノードがいくつかのアプリケーションには使用され得、中間ノードが他のアプリケーションには使用されない場合があり、またはスタンバイノードが確立されない場合がある。DAG140の構成に対する変更は、下に記載されるように、フォールトトレラントDAG構成マネージャ(DCM)164によって連携され得る。
アクセプタノード110は、描写された実施形態において、API(アプリケーションプログラミングインターフェース)などの1つ以上のプログラムインターフェースを介してアプリケーション状態遷移要求(STR)150を受信し得る。アクセプタノード110は、アプリケーション依存ルールまたはロジックを使用して、要求された遷移を最終的なコミットのために受理し得るか、または要求を拒否し得る。遷移が受理される場合、例えば、その遷移が他の受理された遷移に対して受理された順番を示す、シーケンス番号が、アクセプタノード110によって生成され得る。上に述べたように、いくつかの実施形態において、シーケンス番号は、受理された遷移ごとにインクリメントされるカウンタを含み得る一方で、他の実施形態においては、構成マネージャによって提供される論理クロックまたはタイムスタンプ値が使用され得る。対応するシーケンス番号を含むアプリケーション状態記録(ASR)172Aのコレクション176Aは、アクセプタノードによってローカル永続ストレージに格納され得る。いくつかの実施形態において、アプリケーション状態記録は、遷移受理記録及び遷移コミット記録の両方を含み得る(コミット記録は、アクセプタノードが、対応する遷移がコミッタノードによってコミットされたことを通知されて初めて格納される)。他の実施形態において、複製経路に沿った少なくともいくつかのノードは、受理記録のみを格納し得る。受理を示す状態遷移記録を格納した後、アクセプタノードは、承認を示す状態遷移メッセージ(STM)152Aを、複製経路に沿って、例証された構成では中間ノード112など、その後続ノードに伝送し得る。中間ノードは、対応するASRのその独自のコピー、172Bを、シーケンス番号と一緒に、そのローカルASRコレクション176Bに格納し得る。中間ノードは、その独自のSTM152Bを、現在の複製経路に沿って、隣に、例えば、描写された実施形態ではコミッタノード114に伝送し得る。少なくともいくつかの実施態様において、STM152は、ノードがすでにASRのレプリカを格納したという指標を含み得、例えば、メッセージ152Bは、受理を示すアプリケーション状態記録のそれぞれのレプリカがそれぞれノード110及び112ですでに格納されていることをコミッタノードに示し得る。
アプリケーション状態記録の十分な数のレプリカ(十分であるレプリカの正確な数は、アプリケーション160の構成パラメータであり得る)が格納されたというコミッタノードでの判定に応答して、遷移がコミットされ得る。コミッタノードのASRコレクション176Cは、描写された実施形態において、トランザクションコミットの記録(承認に対立するものとして)を含み得、故に、ASR172Cは、単なる受理ではなくコミットを示し得る。少なくともいくつかの実施形態において、コミッタノード116は、指標または通知をアクセプタノード及び/または中間ノードに伝送し得、遷移がコミットされたことを示す。他の実施形態において、アクセプタ及び/または中間ノードは、どの遷移がコミットされたかを判定するように要求を(例えば、定期的に)コミッタノード116にサブミットし得、かつそれに従ってそれらのASRコレクションを更新し得る。いくつかのアプリケーションでは、明示的コミットが必要とされ得ないため、格納されるコミットの指標がない場合があり、経路に沿ったDAGノードのそれぞれは、受理を示すそれぞれのアプリケーション状態記録を単に格納し得る。描写された実施形態において、コミット後STM154が、コミッタノードからスタンバイノード130に伝送されて、スタンバイノードがそのASRコレクション176Dを更新することを可能にし得(例えば、コミットASR172Dを格納することによって)、その結果、スタンバイノードが稼働されて別のDAGノードと置き換わる場合、そのアプリケーション状態情報は、コミッタノードのものと一致する。スタンバイノードが最後にコミットされたアプリケーション状態に合わせて最新状態に保たれるという事実は、いくつかの実施形態において、構成マネージャが、スタンバイノードを、例えば、アクセプタノード、中間ノード、またはコミッタノードの他の3つの役割のうちのいずれかのために、素早く稼働させることを可能にし得る。
フォールトトレラントDAG構成マネージャ(DCM)164は、描写された実施形態において、必要に応じて、DAG構成またはメンバーシップに対する変更を構成−デルタメッセージ166(例えば、メッセージ166A、166B、166C、及び166D)の形態でDAGノードに伝播することを担い得る。所与のDAGノードが、例えば、障害の結果として、DAG140を離脱するとき、対応する構成−デルタメッセージ166は、例えば、DCM164によって1つ以上の生存ノードに送信され得る。同様に、新しいノードがDAGに参加するとき(例えば、障害からのリカバリ後、またはアプリケーション160の耐久性レベルを増大させるため)、参加イベント、DAG内の参加ノードの位置、及び/または参加ノードに付与される役割(例えば、アクセプタ、中間、コミッタ、またはスタンバイ)を示す対応する構成−デルタメッセージは、DCMによってDAGの1つ以上の現在のメンバーノードに伝送され得る。構成−デルタメッセージ166は、互いに関して非同期であり得、かつアプリケーション状態の複製全体に影響を与えることなく任意の順番でそれらのターゲットによって受信され得る。DAGの各ノードは、他のノードが有し得る構成ビュー174とは独立に、受信した構成−デルタメッセージに基づいてDAG構成のその独自のビュー174を構築することを担い得る。故に、例えば、それぞれのノード110、112、114、及び130で受信される異なる構成−デルタメッセージの相対的な順番及び/またはタイミングが理由で、構成ビュー174A、174B、174C、及び174Dのうちの1つ以上は、いくつかの実施形態において、少なくとも短い時間間隔の間、異なり得る。少なくともいくつかの実施形態において、各DAGノードは、受信されるいくつかの構成−デルタメッセージの表現または内容をそれぞれのローカル構成変更リポジトリに格納し得る。描写された実施形態において、DCM164は、DAGノードによるアプリケーション状態処理におけるStop−the−world停止を施行し得ず、例えば、それは、構成−デルタメッセージのタイミングまたは基礎となるDAG構成変更にかかわらず、ノードがアプリケーション状態遷移メッセージを受信及び処理し続けることを可能にし得る。DAGノードが構成−デルタメッセージに応答する様式の実施例は、図2a〜2hに関して以下に説明される。
図1は、単一の線形複製経路を有するDAGまたは、各タイプにつき1つのノードを有する「鎖」を示すが、少なくともいくつかの実施形態において、複製DAGは、分岐した経路及び/または各役割のために複数のノードを含み得ることに留意されたい。つまり、いくつかのアクセプタ、中間、コミッタ、及び/またはスタンバイノードが、同じDAG内に共存し得、DAGの複製経路は、参加ノード(そこで複数の先行ノードからの遷移要求が受信されるノード)、または分割ノード(そこから遷移要求が複数の後続ノードに送信されるノード)を含み得る。アクセプタノード110またはコミッタノード116のいずれかが要求された状態遷移を拒否する場合(例えば、アクセプタノードが、アプリケーション特定の受理基準のセットが満たされないと判断するか、またはコミッタノードが受理された状態遷移要求メッセージを受信するまでに、受理された遷移のレプリカが作成された数が不十分であることのいずれかのため)、いくつかの実施形態において、遷移を要求したクライアントは、遷移がコミットされなかったことを通知され得る。次いで、クライアントは、遷移をリトライし得るか(例えば、別の状態遷移要求をサブミットすることによって)、または要求を完全に放棄することを決定し得る。いくつかの実施態様において、中間ノードはまた、遷移要求を中断することが許され得る。
図2a〜2hは、少なくともいくつかの実施形態に従う、DAGのノードのうちの1つが失敗し得たという検出に応答して、複製DAGで実行され得る例示的な動作シーケンスを示す。図2aは、3つのノード202A、202B、及び202Cを含むDAG構成の初期状態を示す。状態遷移要求(STR)150は、ノード202Aで受信される。受理された状態遷移記録は、ノード202A(STRのローカル承認後)及び202B(ノード202Bが承認されたSTM211Aを受信した後)で複製され、202C(ノード202Cが承認されたSTM211Bを受信した後)でコミットされる。DCM164は、ノード202Bが見かけ上失敗したことを示す健全性状態更新250を受信し得る。ノード202Bの状態に関する健全性状態更新は、異なる実施形態において、様々なソースのうちのいずれかから、例えば、他のノード(202Aまたは202B)のうちの1つから、またはDAGの外部の健全性監視サービス(例えば、DAGノードがインスタンス化されるプロバイダネットワークで確立される汎用リソース健全性監視サービス)から受信され得る。少なくとも1つの実施態様において、健全性状態更新は、ハートビートメッセージをDAGノードに定期的に送信し、かついくつかの連続するハートビートメッセージに対して許容できる時間窓内に応答が受信されない場合、所与のノードが不健全状態にあると判定する監視プロセスなどのDMC164自体のサブコンポーネントによって生成され得る。
描写された実施形態において、DCM164は、健全性状態更新に基づいて、ノード202BがDAGから除去されるべきであること、及び新しいノード202Dがノード202Cの後続として追加されるべきであることを決定し得る。新しいノードは、例えば、DAGの新しいコミッタノードとして稼働状態に昇格されているスタンバイノードを含み得る。DAGの新しい構成を決定し(即ち、これよりDAGは複製鎖202A−202C−202Dを含むこととなる)、永続的なリポジトリ内に新しい構成の表現を保存した後、DCM164は、ノード202Dにノード202Cの後続としてDAGに参加するようにコマンド241を発行し得る。少なくともいくつかの実施形態において、202BなどのノードのDAGからの除去は、必ずしも置換ノードの即時追加を伴わない場合がある(特に、除去後にオンラインかつ接続されたままであるDAGノードの数が、状態が複製されているアプリケーションによって必要とされる最小数のノードを超過する場合)ことに留意されたく、ノード202Dの追加は、単に、DCMがノード障害(または少なくとも見かけ上のノード障害)に対応し得る方法のうちの1つとして示される。図2bに示されるように、ノード202Bが実際には失敗していなかった(即ち、健全性更新が202Bの障害に関して誤りであった)という場合があり得る。そのような偽陽性のシナリオでは、状態遷移メッセージは、202Aから202Bに向けて、及び202Bから202Cに伝送され続け得、アプリケーションが、DCM164が除去の決定をしてから少なくとも暫くの間、進行し続けることを可能にする。
少なくともいくつかの実施形態において、202BなどのノードがDAGから除去され、かつ除去されたノードの直近の後続(例えば、202C)がDAG内に留まるとき、除去されたノードに以前は割り当てられていた役割は、直近の後続に移行され得る。故に、コミッタノードであり得たノード202Cは、ノード202Bの離脱時に中間ノードにされ得、新しく稼働されたノード202Dが、新しいコミッタノードとして指定され得る。除去されたノードが直近の後続を有しなかった場合(例えば、描写された実施例において、ノード202Bの代わりにノード202Cが除去された場合)、いくつかの実施形態において、新しく稼働されたスタンバイノードが、除去されたノードに割り当てられていた役割を付与され得る。他の実施形態において、役割は、そのような連続的/直線的方式で移行されない場合があり、例えば、構成マネージャが、どの役割が所与のノードに付与されるべきかを、除去されたノードに対するノードの相対的な位置を考慮することなく決定し得る。
ノード202BがDAGから除去されるべきであると決定した後、DCM164は、描写された実施形態において、非同期型構成−デルタメッセージ242A及び242Bそれぞれをノード202A及び202Cに送信し得る。示されるように、デルタメッセージのそれぞれは、202BがDAGを離脱し、かつ202Dが参加したことを示し得る。構成に対する2つの変更は、描写された実施形態において、単一の構成−デルタメッセージ内に示されるが、他の実施形態においては、202Bの除去及び202Dの参加について、別個の構成デルタメッセージが送信され得る。構成−デルタメッセージは、描写された実施形態において、DAG構成に対する変更のみを示し得、DAGの構成全体の表現を含まない場合がある。ノード202Aが構成−デルタメッセージ242Aを受信するまで、または他の方法で202BがDAGを離脱したことに気が付くまで(例えば、ネットワーク接続の終了に起因して)、STMは、ノード202Aからノード202Bへ向けられ続け得る。202Bが実際は失敗していなかったシナリオでは、ノード202Bは、状態遷移要求を処理すること、及びメッセージ211Bをノード202Cに向けて送信することを、ノード202BがDAGから除去されたことにノード202Cが気付くまで続け得る(例えば、202Aまたは202Cのいずれかが202Bと通信することを中止する場合)。
構成−デルタメッセージ242は、非同期型メッセージング機構を用いて送信されるため、それらは異なる時間にそれらの送信先に到着し得る。ノード202Aが、ノード202Cが構成−デルタメッセージ242Bを受信する前に構成−デルタメッセージ242Aを受信する場合、図2dに描写されるシナリオに達し得る(DAGが少なくとも一時的に分岐を含む)。メッセージ242Aに応答して、ノード202Aは、ローカルストレージに構成変更の指標を保存し、これ以上のメッセージをノード202Bに送信することを中止し得る。さらには、ノード202Aは、その新しい後継ノードが202Cであることを判定し得、したがってノード202Cとのネットワーク接続性を確立し、ノード202Cに新しい状態遷移メッセージ211Cを送信し始め得る。描写される実施形態において、状態遷移処理アクティビティは、202Bの除去を示すメッセージが残りのノードへ向かって進むにもかかわらず、DAGの様々なノードで継続し得る。ノード202Bが失敗したと仮定されるが実際には引き続き機能しているシナリオでは、例えば、ノード202BがDAGから除去されたことをノード202Aが知った後でさえ、1つ以上のインフライトの状態遷移メッセージが、ノード202Bでノード202Aから受信され得る。そのようなインフライトのメッセージを受信すると、ノード202Bは、ローカルストレージ内のメッセージに示される状態遷移情報を複製し、別の同様のSTMをノード202Cに伝送することを試み得る。ノード202Cがノード202Bの除去をまだ知らない(または、少なくともノード202Bとのその接続を終了していない)場合、ノード202Cは、ノード202Bからのメッセージを受信及び処理し得、ノード202Bが構成マネージャによってDAG構成から除去されたとしても、アプリケーションが進行することを可能にする。
ノード202Cが、ノード202Aが構成−デルタメッセージ242Aを受信する前に構成−デルタメッセージ242Bを受信する場合、図2eに示されるシナリオに達し得る。メッセージ242Bを受信すると、ノード202Cは、ノード202Bから送信される新しいメッセージを受信することを中止し得る(例えば、接続が依然として可用である場合、ノード202Bとのその接続を終了することによって)。ノード202AがDAG経路内のその新しい直近の先行であることを認識すると、ノード202Cはノード202Aへの接続性を確立し得る。ノード202Cはまた、描写された実施形態において、最大のシーケンス番号HSN1(承認されたSTMがノード202Cですでに受信されているシーケンス番号の中から)を判定し、202Cが見逃した可能性があるいかなる承認された状態遷移メッセージも(即ち、HSN1よりも大きいシーケンス番号を有するいかなる承認されたSTMも)再伝送するように、ノード202Aに要求260を送信し得る。さらには、ノード202Cはまた、その新しい後続ノード202Dへの接続性を確立し得、かつそれに続く承認されたSTM211Dをノード202Dに送信し始め得る。
ノード202A及び202Cの両方が、DAG構成変更について通知された後、図2fに示されるDAGの新しい複製経路(即ち、202A−202C−202D)は、新しく入ってくる状態遷移要求のために使用され得る。構成−デルタメッセージ242のタイミングが理由で、構成−デルタメッセージ242Aがノード202Aで受信される前に、ノード202Aが構成変更についてノード202Cから知る場合があり得ることに留意されたい。同様に、ノード202Cは、いくつかの実施形態において、新しい構成についてノード202A(あるいはノード202Dでさえも)から知り得る。故に、新しい構成についての情報がDAGの任意の所与のノードに達し得る複数の方法が存在し得、少なくともいくつかの実施形態において、DAGノードは、構成−デルタメッセージがそれらのターゲットとされる受信者のすべてに達する前でさえ、新しい複製経路の部分を使用し始め得る。
図2gに示されるように、それがDAGから除去された(例えば、実際の障害、または偽陽性障害検出のいずれかに起因して)ある時点で、ノード202Bは、それがサービスの準備が整っているということをDCM164に任意に示し得る。実際の障害の場合、例えば、ノード202Bは、最終的には修理されて再起動され得、「サービスに利用可能」メッセージ280を送信する前に、リカバリ動作のいくつかのセットを実行し得る。ネットワーク接続性損失の場合、「サービスに利用可能」メッセージは、接続性が再確立された後に送信され得る。それに応答して、描写された実施形態において、DCM164は、ノード202BをDAGのスタンバイノードとして追加し直すことを決定し得る。したがって、図2hに示されるように、DCMは、参加コマンド282をノード202Bに、構成−デルタメッセージ244A、244B、及び244Cの新しいセットをそれぞれノード202A、202B、及び202Dに送信して、ノード202Bの追加をそれらに通知し得る。図2a〜2hに示される動作シーケンスは、実施例として提供されるものであり、DAGノード及びDCMは、様々な実施形態において、ノード202Bの見かけ上の障害に応答して、図2a〜2hに示されるものとは異なる動作シーケンスを実行し得ることに留意されたい。例えば、いくつかの実施形態において、新しいノードが、ノード202Cの後続としてDAGに追加されない場合がある。また、いくつかの実施形態において、ノード202Bは、それがサービスに利用可能になった後に、必ずしも同じDAGに再参加しない場合があり、むしろ、例えば、それは、異なるDAGに配置され得るか、またはそこから新しいDAGが構成され得るノードのプール内に保持され得る。
図2a〜2hでは、障害の検出はDAG構成変更のトリガとして示されるが、概して、様々な実施形態において、いくつかの異なる検討事項のうちのいずれかがDAG構成の修正を引き起こし得る。例えば、アプリケーション所有者(またはDCM)が、データ耐久性を向上するため、または可用性の理由から、ノードをDAGに追加することを決定し得る。新しいノードの追加を示す構成−デルタメッセージは、いくつかの実施形態において、状態遷移処理における「Stop−the−world」停止を要求することなく、上記の除去に関連した伝播として、同様の非同期方式で他のDAGノードに伝播され得る。DAGノードは、いくつかの実施形態において、保守に関連した理由のために、例えば、ソフトウェアアップグレードのため、ソフトウェアエラーのデバッグのため、またはハードウェア変更のため、オフラインにされる必要があり得る。少なくとも1つの実施形態において、DAG構成は、ノードのうちの1つ以上における作業負荷レベル(例えば、1秒あたりに処理される状態遷移の数)が閾値レベルに達した、及び現在使用されているものより性能の高い(または性能の低い)ハードウェア/ソフトウェアスタックが利用されるべきであるという判定の結果として変更され得る。いくつかの実施形態において、DAG構成変更は、必ずしもノードを追加または除去することなく、ある特定のDAGノードの位置または役割を変更することに関与し得る。例えば、構成マネージャは、コミッタの役割を以前は中間ノードであったノードに交代させ、新しい構成では以前のコミッタノードを中間ノードにし得る。そのような役割変更(及び伝播される対応する構成−デルタメッセージ)は、例えば、特に同じホストがいくつかの異なるDAGのノードに使用されているマルチテナント環境においては、ロードバランシング目的のために実装され得る。そのようなマルチテナント環境は、以下にさらに詳細に記載される。
状態遷移記録及び構成−デルタメッセージ
図3は、少なくともいくつかの実施形態に従う、アプリケーション状態記録(ASR)、及び動的複製DAGで生成され得るDAG構成−デルタメッセージの例示的なコンポーネントを示す。先に示されるように、それぞれが承認されたまたはコミットされた状態遷移を表すアプリケーション状態記録のコピーは、少なくともいくつかの実施形態において、DAGの複製経路に沿ったいくつかのノードのそれぞれにおいて格納され得る。アプリケーション状態記録はまた、本明細書では状態遷移記録と称され得る。示されるように、アプリケーション状態記録320は、遷移のタイプ302の指標、例えば、要求された状態遷移の承認が記録されているかどうか、または承認された状態遷移のコミットが記録されているかどうかを含み得る。いくつかの実施形態において、先に記されるように、各DAGノードは、承認及びコミットの両方の記録を格納し得るが、他の実施形態においては、状態遷移記録のうちの1つのタイプのみが格納され得る。例えば、1つのシナリオにおいて、承認記録は、最初は非コミッタノードで複製され得、承認記録は、トランザクションがコミッタノードによって最終的にコミットされた後、コミット記録に変更され得る。少なくとも1つの実施形態において、別個の遷移タイプフィールド302が、ASRまたはASRの生成をもたらすメッセージ内に含まれない場合があり、むしろ、遷移のタイプは、ノードの現在の役割及び/またはメッセージがそこから受信されるソースDAGノードの役割に関してノードが知っていることに基づいて、DAGノードによって推測され得る。例えば、状態遷移メッセージを受信する非コミッタノードは、メッセージが承認された状態遷移を表すことを推測し得る。
状態遷移記録320記録は、描写された実施形態において、遷移データ304を含み得る。遷移データコンポーネント304の内容の性質は、その状態が管理されているアプリケーションによって異なり得る。いくつかの場合、例えば、状態遷移要求は、書き込みペイロード(書き込まれるべきバイトのいくらかの数、及びそこにバイトが書き込まれるべきアドレス(複数可)を示す)を含み得、書き込みペイロードは、遷移記録内に含まれ得る。他のアプリケーションでは、各状態遷移は、アプリケーションクライアントによって発行されるそれぞれのコマンドを示し得、コマンドの表現は、ASR内に含まれ得る。ASR320はまた、状態遷移に対応するシーケンス番号306(論理タイムスタンプも検討され得る)を含み得る。シーケンス番号は、例えば、状態遷移要求が承認されたときアクセプタノードで、または状態遷移がコミットされたときコミッタノードで生成され得る。少なくともいくつかの実施形態において、DAGを使用して管理されているアプリケーションの現在の状態は、アプリケーションのある初期状態から始めて、コミットされた状態記録の遷移データ(例えば、書き込みペイロード、コマンドなど)をシーケンス番号が増加する順に適用することによって判定され得る。いくつかの実施形態において、遷移の複製履歴情報308も、ASR内に含まれ得、例えば、DAGノードが同じ遷移についてそれぞれのASRをすでに格納していること、及び/またはそれらの記録が複製された順番TINを示す。そのような複製履歴情報は、例えば、いくつかの実施態様において、十分な数のノードが所与の状態遷移をコミットについて記録したことを確認するために、コミッタノードによって使用され得る。いくつかの実施形態において、ASRメッセージは、対応する状態遷移要求が受信されたアクセプタノードのアイデンティティを示し得るが、複製経路に沿った他のノードに関する情報を含む必要はない。少なくとも1つの実施態様において、コミッタノードは、承認された状態遷移をコミットする前に、十分な数のノードが状態遷移記録を複製したことを確認することを必要とされない場合がある。
DAG構成−デルタメッセージ370は、描写された実施形態において、構成に参加またはそれを離脱するノード(複数可)の識別子352、及び実装されている変更のタイプ354(例えば、参加対離脱)を示し得る。いくつかの実施態様において、参加(または離脱)するノードについての役割情報356は、任意に構成−デルタメッセージ内に含まれ得る。少なくともいくつかの実施形態において、アプリケーション状態シーケンス番号がアプリケーション状態遷移と関連付けられるのと同じように、DAG構成変更シーケンス番号358は、構成−デルタメッセージと共に含まれ得る。そのようなシーケンス番号は、構成−デルタメッセージの受信者によって、例えば、受信者が任意の先の構成変更を見逃しているかどうかを判定するために使用され得る。いくつかの構成変更が見逃されていた場合(例えば、ネットワークパケットがドロップされていることに起因して)、受信者ノードは、見逃された構成−デルタメッセージを再伝送するようにDCMに要求を送信し得る。構成変更シーケンス番号358は、様々な実施形態において、カウンタまたは論理タイムスタンプとしてDCMで実装され得る。DCMが複数のノードを有するクラスタを含むいくつかの実施態様において、クラスタマネージャによって維持されるグローバル論理タイムスタンプは、構成変更シーケンス番号358のためのソースとして使用され得る。
プロバイダネットワーク環境での複製DAG配置
図4は、少なくともいくつかの実施形態に従う、メンバーノードがプロバイダネットワークの複数の可用性コンテナにわたって分散される例示的な複製DAGを示す。インターネット及び/またはネットワークを介してアクセス可能な1つ以上のサービス(様々なタイプのマルチテナント及び/またはシングルテナントのクラウドベースコンピューティングもしくはストレージサービスなど)をクライアントの分散されたセットに提供するために企業または公共部門組織などの事業体によって設定されるネットワークは、本明細書ではプロバイダネットワークと呼ばれ得る。少なくともいくつかのプロバイダネットワークは、「パブリッククラウド」環境とも称され得る。所与のプロバイダネットワークは、プロバイダによって提供されるインフラストラクチャ及びサービスを実装、構成、及び分散するために必要とされる、物理及び/または仮想化コンピュータサーバのコレクション、ストレージデバイス、ネットワーク機器、ならびに同類のものなど、様々なリソースプールをホストする多数のデータセンターを含み得る。大規模プロバイダネットワーク内において、いくつかのデータセンターは、他とは異なる都市、州、または国に位置し得、いくつかの実施形態において、所与のアプリケーションに割り当てられるリソースは、いくつかのそのような場所に分散されて、所望のレベルの可用性、耐障害性、及び性能を達成し得る。
いくつかの実施形態において、プロバイダネットワークは、複数の地理的地域内に編成され得、各地域は、1つ以上の可用性コンテナを含み得、それは「アベイラビリティゾーン」とも呼ばれ得る。さらに、可用性コンテナは、所与の可用性コンテナ内のリソースが他の可用性コンテナ内の障害から保護されるような方法で(例えば、電源関連機器、冷却機器、及び/または物理的セキュリティコンポーネントなどの独立したインフラストラクチャコンポーネントと共に)設計される1つ以上の別個の物理的施設またはデータセンターを含み得る。1つの可用性コンテナ内の障害が、任意の他の可用性コンテナ内の障害をもたらすことは予測されない場合があり、故に、所与の物理ホストまたは仮想化サーバの可用性プロファイルは、異なる可用性コンテナ内の他のホストまたはサーバの可用性プロファイルから独立していることが意図される。
複製DAGの1つ以上のノードは、図4に示されるように、いくつかの実施形態において、DAGの他のノードとは異なる可用性コンテナ内にインスタンス化され得る。プロバイダネットワーク402は、描写された実施形態において、3つの可用性コンテナ466A、466B、及び466Cを含み、各可用性コンテナは、いくらかの数のノードホスト410を含む。可用性コンテナ466Aのノードホスト410Aは、例えば、DAGノード422A、ローカル永続ストレージ(例えば、1つ以上のディスクベースのデバイス)430A、及びDAGクライアントとの通信のためのフロントエンドとして使用され得るプロキシ412Aを含む。同様に、可用性コンテナ466B内のノードホスト410Bは、DAGノード422B、ローカル永続ストレージ430B、及びプロキシ412Bを含み、可用性コンテナ466C内のノードホスト410Cは、DAGノード422C、ローカル永続ストレージ430C、及びプロキシ412Cを含む。描写された実施形態において、DAGノード422(及び/またはプロキシ412)はそれぞれ、1つ以上のプロセスのセットなど、実行の1つ以上のスレッドを含み得る。ローカル永続ストレージデバイス430は、描写された実施形態において、複製経路491に沿ってアプリケーション状態情報のローカルレプリカ(及び/または複製経路491のDAGノード422で受信されるDAG構成−デルタメッセージ内容)を格納するために使用され得る。
図4の実施形態に描写されるDAGのDCMは、それ自体が、複数の可用性コンテナにわたって分散される複数のノードを含む。示されるように、可用性コンテナ466A内に位置するDCMストレージ475Aを有するDCMノード472A、及び可用性コンテナ466B内に位置するDCMストレージ475Bを有するDCMノード472Bを含む、コンセンサスベースのDCMクラスタ490が使用され得る。故に、描写されるDCMは、少なくとも可用性コンテナ境界を超えない障害に関しては、フォールトトレラントと見なされ得る。そのようなフォールトトレラントDCMのノードは、例えば、DCMによって管理されているDAGのメンバーノードに対し、本明細書では「構成ノード」と称され得る。DAG構成に対する変更(例えば、ノード除去、追加、または役割変更を含む)、DCMノード472間のコンセンサスベースのプロトコルを使用して承認され得、DAG構成の表現は、対応する構成−デルタメッセージがDAGノード422に伝送される前に、複数のDCMノードによって永続ストレージに格納される必要があり得る。DCM及び/または所与の複製DAGに使用される可用性コンテナの数は、例えば、アプリケーションのアベイラビリティ要件またはデータ耐久性要件によって、異なる実施形態において、及び異なるアプリケーションでは、様々であり得る。いくつかの実施形態において、複製DAGは、プロバイダネットワークで実装される他のサービスのリソースの構成を管理するために使用され得る。例えば、仮想化コンピューティングサービスによって使用されるコンピュートインスタンス(仮想マシン)またはインスタンスホスト(物理ホスト)の状態に対する変更は、一実施形態において、複製DAGを使用して管理され得る。
図5は、少なくともいくつかの実施形態に従う、複数の複製DAGのノードがマルチテナント方式で単一ホストに実装され得る例示的な構成を示す。示されるように、3つの複製DAG555A、555B、及び555Cのノードは、4つのDAGノードホスト510A、510B、510C、及び510Dに分散され得る。概して、ノードホストは、それらのリソースキャパシティが異なり得、例えば、あるホストのコンピューティング、ストレージ、ネットワーキング及び/またはメモリリソースは、他のホストのものとは異なり得る。例えば、ノードホスト510Bは、DAG情報に使用され得る2つのストレージデバイス530B及び530Cを有し、ノードホスト510Dは、2つのストレージデバイス530E及び530Fを有するが、ノードホスト510A及び510Cは、1つのストレージデバイス(それぞれ530A及び530D)を有する。
ホスト510Aは、DAG555Aのアクセプタノード522A、及びDAG555Cの中間ノード522Nを含む。ホスト510Bは、DAG555Aの中間ノード522B、DAG555Bのコミッタノード522K、及びDAG555Cの中間ノード522Oを含む。DAG555Aのコミッタノード522C及びDAG555Cのコミッタノード522Pは、ホスト510Cで実装され得る。最後に、DAG555Aのスタンバイノード522C、DAG555Bのアクセプタノード522J、及びDAG555Cのアクセプタノード522Mは、ホスト510Dでインスタンス化され得る。故に、概して、所与のホストは、少なくともいくつかの実施形態において、N個の異なるDAGのノードのために使用され得、かつ各DAGが、M個の異なるホストを利用し得、ここでM及びNは、構成可能なパラメータであり得る。それぞれのアプリケーション所有者に代わって確立されるいくつかのDAGのノードは、少なくともいくつかの実施形態において、マルチテナント方式で同じホスト上に実装され得、例えば、それらのアプリケーションの状態管理に利用されているリソースが他のアプリケーションの状態を管理するためにも利用されていることは、ある特定のアプリケーション所有者には明白でない場合がある。いくつかのプロバイダネットワーク環境において、所与のアプリケーションの複製DAGの所与のノードに使用される特定のホストを選択する配置サービスが実装され得る。ノードホストは、異なる実施形態において、その状態が管理されているアプリケーションの性能要件、候補ホストでの可用性リソースキャパシティ、ロードバランシングニーズ、価格設定の考慮など、因子の様々な組み合わせに基づいて選択され得る。少なくともいくつかの実施態様において、ホストごとに複数のDAGノードをインスタンス化することは、ホストにおける全体的なリソース利用レベルを、単一のDAGノードのみがインスタンス化された場合に達成され得る利用レベルに対して、増加させることに役立ち得る。例えば、特に、DAGノードに使用されるロジックのかなりの部分がシングルスレッドである実施形態において、マルチテナントシナリオではシングルテナントシナリオよりも多くのマルチコアホストのプロセッサコアが並行して使用され得、それによりホストの平均CPU使用率を増大させる。
動的DAGベースの状態複製の実装方法
上記のように、複製DAGの所与のノードは、いくつかの実施形態において、所与の時点で、いくつかの役割(例えば、アクセプタ、中間、コミッタ、またはスタンバイ)のうちの1つを付与され得る。図6は、少なくともいくつかの実施形態に従う、状態遷移要求(STR)の受信に応答して複製DAGのアクセプタノードで実行され得る動作の態様を示すフロー図である。要素601に示されるように、アクセプタノードは、アプリケーションに対するSTRを含むメッセージを、例えば、状態複製サービスのクライアントから受信し得る。STRは、部分的にアプリケーションの性質によって、異なる実施形態において様々な要素を含み得る。例えば、いくつかの実施形態において、下により詳細に記載されるように、DAGは、1つ以上のデータストアに向けられるトランザクションのための楽観的並行性制御に使用され得、STRは、以前にコミットされたトランザクションとのコンフリクトを検出するために使用され得る読み取りセット及び書き込みセットなどのデータを含み得る。状態遷移が複製DAGを使用して管理される各アプリケーションは、要求された状態遷移のための受理基準のその独自のセットを有し得、少なくともいくつかの場合において、STRの内容は、遷移が受理されるべきか、拒否されるべきかを決定するために使用され得る。いくつかの実施態様において、動作条件はまた、または代わりに、要求された状態遷移の受理/拒否のために使用され得、例えば、アクセプタノードまたはDAGの他のノードでの作業負荷レベルが閾値以上である場合、状態遷移は拒否され得る。遷移が受理基準を満たす場合(要素604において検出されるように)、新しい承認シーケンス番号が、例えば、カウンタ値をインクリメントすることによって、または何らかの他の単調増加論理タイムスタンプ値を獲得することによって、受理されたSTRのために生成され得る(要素607)。遷移が承認されたことを示す記録は、シーケンス番号と一緒に、ローカルストレージに格納され得る(要素610)。いくつかのアプリケーションでは、遷移要求は、複製されるべきデータセット(書き込みペイロードなど)を含み得、アクセプタノードも同様に、ローカルストレージにデータセットを格納し得る。1つの実施態様において、アクセプタノードは、プロバイダネットワークのある特定のホストで実行する1つ以上のプロセスを含み得、遷移の承認の記録、シーケンス番号、及び遷移のデータセットはすべて、その特定のホストの永続ディスクベースストレージデバイスに格納され得る。いくつかの実施形態において、遷移のデータ、遷移が承認されたという指標、及びシーケンス番号はすべて、ログに挿入される(または追記される)ログエントリなど、ローカルストレージに格納される単一のオブジェクトにまとめられ得る。他の実施形態において、遷移のデータセットは、遷移の承認を示す記録とは別に格納され得る。
状態遷移の記録が安全に格納された後、承認を示す状態遷移メッセージは、コミッタノードに向かってDAGの複製経路に沿って隣接ノードに伝送され得る(要素613)。いくつかの場合において、DAGのトポロジによっては、複数のそのようなメッセージは、複製経路に沿って隣接ノードに1つずつ送信され得る。先に記載されたように、DAGの各ノードは、必ずしも所与の時点で他のノードのビューと一致し得ないDAG構成のその独自のビューを有し得る。アクセプタノードは、描写された実施形態において、その承認された状態遷移メッセージをDAG構成のその現在のビューに示される隣接ノード(複数可)に、その現在のビューがDAGのDCMの観点からすると(または1つ以上の他のDAGノードの観点からすると)古くまたは誤りになってしまっている場合でさえ、向け得る。メッセージ(複数可)が送信された後、状態遷移要求の処理は、アクセプタノードで完了すると見なされ得る(要素619)。要求された遷移がアプリケーションの受理基準を満たさない場合(要素604においても検出されるように)、遷移は拒否され得る(要素616)。いくつかの実施態様において、拒否を示す通知または応答が、要求側に提供され得る。
図7は、少なくともいくつかの実施形態に従う、承認された状態遷移メッセージの受信に応答して複製DAGの中間ノードで実行され得る動作の態様を示すフロー図である。そのようなメッセージSTM1が、例えば、アクセプタノードから、または別の中間ノードから受信された後(要素701)、いくつかの実施形態において、中間ノードは、より小さいシーケンス番号を有する状態遷移メッセージが欠けているかどうか(例えば、STM1がSN1のシーケンス番号を有する場合、SN1よりも小さいシーケンス番号を有する1つ以上のSTMがまだ受信されていないかどうか)を判定し得る。そのような欠けている状態遷移メッセージの証拠が見つかった場合(要素704)、中間ノードは、描写された実施形態において、欠けているSTM(複数可)の再伝送要求を、現在知られている複製経路に沿って、直近の先行ノードに任意にサブミットし得る(要素707)。いくつかの実施態様において、中間ノードは、STM1に対応する承認された状態遷移の記録をローカルストレージに格納する前に、その再伝送要求に対する応答を受信するのを待ち得る。STM1の承認記録は、例えば、承認シーケンス番号及び遷移と関連付けられた任意のデータセット(書き込みペイロードなど)と一緒に格納され得る(要素710)。次いで、状態遷移メッセージ(受信されたメッセージと内容が同様であり得るか、受信されたメッセージと内容が同一であり得る)は、コミッタノードに向かって現在知られている複製経路(複数可)上を各隣接ノードに送信され得る(要素713)。状態遷移の承認履歴が状態遷移メッセージ内に含まれるいくつかの実施態様において、中間ノードは、その(中間ノードの)識別子を、発信する状態遷移メッセージ内に示される承認側のリストに追加し得る。
いくつかの実施形態において、STM1の承認記録をローカルストレージに保存する前に欠けているシーケンス番号をチェックする代わりに、異なるアプローチが取られ得る。例えば、中間ノードは、承認記録をローカルストレージに格納した後、及び/または対応するSTMをコミッタノードに向けて伝送した後、欠けているシーケンス番号をチェックし得る。
1つの実施態様において、所与の接続内のメッセージの順番通りの配信を保証するTCP(Transmission Control Protocol:伝送制御プロトコル)などのネットワークプロトコルが、非アクセプタノードでSTMを受信するためのプルモデルと組み合わせて使用され得る。そのような実施態様において、中間ノード、コミッタノード、またはスタンバイノードが複製経路に沿って直近の先行とのネットワーク接続を維持する限り、ネットワークプロトコルは、メッセージが失われないことを確実にすることを依拠され得る。所与のDAGノードN1で、直近の先行ノードP1への接続がそのような実施態様において失われた場合、N1は、P1への(または、P1がもはやDAGの一部ではないことを示す構成−デルタメッセージが受信された場合は、異なる先行ノードへの)新しい接続を確立すること、及び以前に受信した最大のシーケンス番号よりも大きいシーケンス番号を有するいかなるSTMも送信するようにP1に要求することを担い得る。
図8は、少なくともいくつかの実施形態に従う、承認された状態遷移メッセージの受信に応答して複製DAGのコミッタノードで実行され得る動作の態様を示すフロー図である。承認された状態遷移メッセージを、例えば、中間ノードから、またはアクセプタノードから受信すると(要素801)、コミッタノードは、状態遷移がアプリケーションのコミット基準を満たすかどうかを判定し得る。いくつかの実施形態において、コミッタノードは、STMの内容(承認履歴フィールドなど)から、これまでに保存されたアプリケーション状態記録のレプリカの数を判定することが可能であり得、遷移は、レプリカの数が閾値を超えた場合に、コミット可能であると見なされ得る。レプリカカウント閾値は、アプリケーションに基づいて異なり得、例えば、いくつかのアプリケーションにとっては、アクセプタノードにおける単一のレプリカは十分であり得る。他の実施形態において、コミッタノードはまた、遷移をコミットする前に、コミッタノードが現在のSTMのシーケンス番号よりも小さいシーケンス番号を有するすべてのSTMをすでに受信しているかどうかなど、他の因子を検討する必要があり得る。一実施形態において、例えば、コミッタノードは、現在の遷移をコミットする前にそれがすべてのそのような以前のSTMを受信及び処理するまで待つ必要があり得る。
コミット基準(アプリケーションによって異なり得る)が満たされると(要素804において検出されるように)、コミッタノードは、コミット記録を、例えば、シーケンス番号及び遷移のデータセット(ある場合)と一緒に、ローカルストレージ内のアプリケーション状態記録のそのコレクション内に格納し得る(要素807)。いくつかの実施態様において、コミット基準は、アクセプタノードですでに検証された受理基準をデフォルトとし得る。つまり、ひとたび状態遷移がアクセプタノードで承認されると、コミッタノードは、任意の追加の条件を検証する必要なく、受信したSTMに示される状態遷移をコミットし得る。いくつかの実施形態において、STMに示される承認シーケンス番号のコピーが、コミットシーケンス番号として格納され得る。いくつかの承認された遷移はコミットされない場合があるため、少なくとも一実施形態において、承認に使用されるものとは異なるシーケンス番号のセットが、コミットに使用され得る(例えば、コミットシーケンス番号のシーケンスがいかなる欠落も有しないように)。スタンバイノードがDAG用に構成される場合、コミット後のSTMは、コミッタノードから1つ以上のそのようなスタンバイノードに向けられ得る。少なくともいくつかの実施形態において、遷移がコミットされた後、例えば、他のノードがそれらのアプリケーション状態情報を更新することを可能にするため、及び/または状態遷移を要求しているクライアントに遷移がコミットされたことを示す応答を伝送するため、コミットの通知が、DAGの1つ以上の他のノードに提供され得る(要素810)。
欠けているSTMがコミット基準に関連する処理の一部として取り扱われなかったいくつかの実施形態において、コミッタノードは、欠けているSTMに関して図7に示されたものと同様のアクションを行い得る。故に、例えば、コミッタノードが、1つ以上のSTMが欠けている(受信したSTMのシーケンス番号よりも小さいシーケンス番号を有する)と判定する場合(要素813)、欠けているSTMの再伝送要求が、直近の先行ノード(複数可)に送信されて(要素816)、受信したSTMの処理を完了し得る(要素822)。コミット基準が満たされない場合、コミッタノードは、状態遷移を中断し得る(要素819)。いくつかの実施形態において、中断通知は、DAGの1つ以上の他のノードに、及び/または状態遷移を要求したクライアントに送信され得る。いくつかの実施態様において、上で述べたように、状態遷移がアクセプタノードで承認されている場合、複製DAGは、複製経路の1つ以上のノード(アクセプタノード自体を含む)が失敗したとしても、状態遷移を(最終的に)コミットすることを担い得る。状態遷移を中断することは、いくつかのそのような実施態様において、他のDAGノードからの遷移の承認記録の除去(または承認記録がたまたま格納されるノードのDAGからの実際の除去)など、比較的重大な変更を必要とし得る。図11a〜図14に関して以下にさらに詳細に記載されるように、いくつかの実施形態において、早期連携DAG停止技術が使用されて、対応する状態遷移情報が所望の数のDAGノードで複製されることなくSTMがコミッタノードに達するシナリオを回避し得る。
図9は、少なくともいくつかの実施形態に従う、複製DAGの構成マネージャ(DCM)で実行され得る動作の態様を示すフロー図である。要素901に示されるように、DAGで構成変更を潜在的にトリガし得るイベントが構成マネージャによって検出され得る。そのようなイベントは、「ノード障害の検出」(例えば、DAGノードから、またはプロバイダネットワークの健全性管理コンポーネントから)、または「サービスに利用可能」(例えば、障害後に再起動されたDAGノードから)などのメッセージを受信することを含む。いくつかの実施形態において、構成マネージャ自体が、様々なDAGノードの健全性状態を監視することを担い得、トリガイベントは、ノードのうちの1つがいくつかのハートビートメッセージまたは他の健全性チェックに対してタイムリーに応答しなかったという構成マネージャによる検出であり得る。少なくともいくつかの実施形態において、DAGノードは、任意の見かけ上のノード障害をDCMにレポートすることを担い得る(例えば、接続が突然ドロップされるとき、または閾値を超える期間に隣接ノードからメッセージが受信されないとき)。DAGノードはまた、いくつかの実施形態において、DAG構成変更を引き起こし得る差し迫った変更(ノードが保守のためにオフラインになることが計画されているときなど)をDCMに通知することを担い得る。DCMは、描写された実施形態において、示された構成変更(例えば、失敗したノードの除去、または新しいノードの参加)が、有効とされるかどうか、例えば、DCMクラスタの複数のノードに実装され得るコンセンサプロトコルに基づいて、判定し得る(要素904)。例えば、いくつかの実施態様において、DAGノードが失敗したという1つのDCMノードによる判定は、ノードが構成から除去される前に、クラスタの1つ以上の他のノードで確認される必要があり得る(例えば、他のDCMノードでDAGノードから受信されるハートビート応答をレビューすることによって)。他の実施態様において、可能性のある構成変更を適用するかどうかに関する決定は、コンセンサスベースのプロトコルを利用せずに実行され得る。シーケンス番号、またはDAG構成変更と関連付けられた論理タイムスタンプは、いくつかの実施形態において、例えば、構成変更がDAGノードで正しい順番で処理され得るようにDAGの他のノードに送信される構成−デルタメッセージ内に含めるために、判定または生成され得る。
構成変更がどのように承認されるかとは独立に、いくつかの実施形態において、構成変更の表現は、変更が完了したと見なされる前に、DCMの複数のストレージ場所で複製される必要があり得る(要素907)。構成変更についての情報を複数の場所に保存することは、DCMがDAG構成情報の信頼できるソースとして機能を果たすべき実施形態において、DCMの機能性の重要な態様であり得る。少なくともいくつかの実施態様において、構成に対する変更のみ(例えば、全体的な構成ではなく)が複製され得る。構成変更情報が保存された後、対応する構成−デルタメッセージ(たった今実装された構成に対する変更を示し、必ずしもDAGの全体的な構成ではない)がDCMからそこに送信されるべきDAGノードのセットが識別され得る(要素910)。いくつかの実施形態において、すべてのDAGメンバー(潜在的に、構成−デルタメッセージに示される構成変更の一部としてDAGから除去されているノードを含む)が、構成−デルタメッセージの送信先として選択され得る。一実施形態において、現在のDAGメンバーであると仮定されるノードのみが選択され得、例えば、構成−デルタメッセージは、ノードが除去されている、または失敗したことが知られている場合、そのノードには送信されない場合がある。他の実施形態において、メンバーのいくつかのサブセットが送信先として選択され得、そのサブセットは、構成変更を残りのノードに伝播することを担い得る。メンバーのサブセットが送信先として選択される実施形態において、DCMは、所与の時間にどの変更がどのメンバーに伝播されたかを追跡する必要があり得る。DAGノードの送信先セットが識別された後、それぞれの構成−デルタメッセージは、互いに関して非同期的に、かつ状態遷移メッセージ処理または状態遷移要求処理のいかなる停止も要求することなく、それらに送信され得る(要素913)。少なくともいくつかの実施形態において、構成−デルタメッセージは、構成変更と関連付けられた構成シーケンス番号を含み得る。いくつかの実施態様において、複合構成−デルタメッセージは、2つ以上の変更(例えば、失敗したノードの除去及び置換ノードの参加)を含み得る。
図10は、少なくともいくつかの実施形態に従う、構成マネージャからの構成−デルタメッセージの受信に応答して複製DAGのメンバーノードで実行され得る動作の態様を示すフロー図である。構成変更シーケンス番号を含むそのような構成−デルタメッセージをDCMから受信すると(要素1001)、受信者DAGノードは、描写された実施形態において、それが任意の先の構成−デルタメッセージを見逃したかどうか、例えば、新しく受信したシーケンス番号を以前に受信された最大のシーケンス番号と比較することによって判定し得る。受信者が、1つ以上の構成−デルタメッセージがまだ受信されていないことを判定する場合(要素1004)、それは、構成リフレッシュ要求をDCMに送信し得る(要素1007)。そのようなリフレッシュ要求は、DCMが見逃した構成−デルタメッセージ(または複数可)を再送信すること、例えば、DAGの現在の構成全体が示される異なるタイプのメッセージを送信することをもたらし得る。
欠けている構成−デルタメッセージが検出されない場合(要素1004に対応する動作においても)、受信者ノードは、受信した構成変更情報をローカルストレージ内の構成変更リポジトリに格納し得る。リポジトリ内に蓄積したメッセージは、受信者のDAG構成のビューを更新するために使用され得る(要素1010)。DAG構成のローカルビューを更新することは、例えば、今後の発信及び着信状態遷移メッセージに使用されるべき複製経路(または複数可)の1つ以上のDAGノード及び/または端部を判定することを含む。先に述べたように、メッセージ配信の非同期型性質が理由で、及びネットワークの異なる部分は異なる遅延を経験し得るため、構成−デルタメッセージがあるDAGノードで獲得されるシーケンスは、構成−デルタメッセージの同じセットが別のノードで受信されるシーケンスとは異なり得る。したがって、所与の時間点に2つの異なるノードで識別される複製経路は、互いに異なり得る。描写された実施形態において、受信者ノードは、複製経路上のその直近の先行ノードが変わったか、またはその直近の後続が変わったかのいずれかの場合、さらなるアクションを行い得る。直近の後続または直近の先行ノードのいずれも変わらない場合、構成−デルタメッセージの処理は、いくつかの実施形態において、構成変更情報が受信者ノードのローカルストレージに格納された後に終了し得る(要素1027)。
DAGのノードCに関して直近の先行ノードが変更されるシナリオの実施例は、A−B−CからA−Cへの複製経路の一部分の変更である。更新された構成が受信者の直近の先行ノードに対する変更に関与し、かつメッセージが新しい直近の先行ノードからまだ直接受信されていない場合(要素1013において検出されるように)、受信者ノード(現在の実施例ではノードC)は、新しい直近の先行(現在の実施例ではノードA)への接続を確立し得る。加えて、少なくともいくつかの実施形態において、受信者ノード(例えば、ノードC)はまた、新しい直近の先行(例えば、ノードA)に、受信者ノードで直前に受信したシーケンス番号より大きいシーケンス番号を有するSTMの再伝送の要求を送信し得る(要素1017)。ノードCが後続ノードを有する場合、ノードCは、任意の保留中の状態遷移メッセージをそのような後続ノードに伝送し続け得ると同時に、要求した再伝送をノードAから受信するのを待つ。
構成−デルタメッセージが、受信者の直近の後続ノードが変わったことを示し(例えば、モードAが、ノードBがDAGを離脱したことを示す上記の同じ例示的な構成−デルタメッセージを受信するとき)、かつメッセージが新しい直近の後続ノードからまだ受信されていない場合(要素1021)、受信者ノードは、新しい後続ノードへの接続を確立し得る。上の実施例では、ノードAは、その新しい直近の後続であるノードCへの接続を確立し得る。状態遷移メッセージは、続いて、新しい直近の後続に転送され得る(要素1024)。
複製DAGノードの連携停止
大量のアプリケーションのほぼ同時の機能停止を引き起こし得る大規模障害イベントは、プロバイダネットワークオペレータに対し、重大な課題を提示する。そのアプリケーションが持続的な機能停止によって影響を受ける顧客は、プロバイダネットワークが重要なアプリケーションに必要とされるサービスのレベルを提供する能力に対する信頼を失い得る。大規模障害イベントの可能性は、知的インフラストラクチャ設計によって、及びこのインフラストラクチャの高可用性特性を活用することができるアプリケーションアーキテクチャを実装することによって、軽減され得るが、大規模障害を完全に排除することは不可能であり得る。したがって、分散アプリケーションが、複数のリソースに影響を与える障害からより素早くかつ容易にリカバリすることを可能にし得る技術が、少なくともいくつかの実施形態において、開発され得る。上記のタイプの複製DAGが分散アプリケーション状態管理に用いられるいくつかの環境において、連携停止プロトコルが、分散された障害からのより効果的かつ効率的なリカバリをサポートするために使用され得る。一実施形態において、例えば、障害シナリオの検出に応答して、DAGのいくつかのノードは、それらの通常のアプリケーション状態遷移処理動作(例えば、状態遷移要求メッセージを受信すること、アプリケーション状態情報のローカルコピーを格納すること、及び状態遷移要求メッセージをそれらの複製経路(複数可)に沿って伝送すること)の実行を中止するように構成マネージャによって指示され得る。それらの動作を停止した後、ノードは、少なくともいくつかの実施形態において、それらのローカルアプリケーション状態記録を他のDAGノードと同期し、クリーンシャットダウンを実行し、再起動し得る。ノードが再起動した後、それは構成マネージャに、それがサービスの再開のために利用可能であるというレポートを返し、構成マネージャによるDAGの再稼働を待ち得る。
図11a〜11hは、少なくともいくつかの実施形態に従う、そのような連携停止プロシージャ中に複製DAGで実行され得る例示的な動作シーケンスをまとめて示す。示されたDAG内の各ノードは、コミット記録のそれぞれのセットを格納し得、各コミット記録は、対応するコミットシーケンス番号(CSN)を含む(または、例えば、ポインタを介して示す)。故に、ノードの観点からすると、ローカルコミット記録セットは、DAGを使用して管理されているアプリケーションの状態を表し得る。承認された(しかしまだコミットされていない)状態遷移の記録も、先に記載されるように、ノードのうちの一部またはすべてで保持され得る。連携停止技術は、DAGノードをDAG構成変更に関して最新の状態にしておくためにDCMが上記のように構成−デルタメッセージを伝送する動的複製DAGに即して本明細書では記載されるが、いくつかの実施形態において、同様のアプローチが他の状態複製技術に用いられ得ることに留意されたい。例えば、連携停止技術はまた、複製ノードのグループに対する構成変更が、Stop−the−world再構成間隔を使用して実装され、その間にすべてのノードが同期された方式で更新される環境で使用され得、その結果、すべてのノードが新しい構成に気付いた後にのみ、複製グループが動作可能になる。故に、動的複製DAGは、異なる実施形態において連携停止技術が実装され得るマルチノード状態複製グループ(SRG)の単に一実施例を表し得る。少なくともいくつかのそのようなSRGは、先に記載されるDCMに類似した独自の構成マネージャを有し得、かつコミッタノードに指定されるいくつかのノード、及び非コミッタノードに指定される他のノードを有し得る。
5つのノード1102A、1102B、1102C、1102D、及び1102Eを含む複製DAGが、DCM1180と一緒に図11aに示される。描写された実施例において、コミッタノード1102Eは、連携停止プロシージャがDAGに対して開始されるべきかを判定する停止トリガ検出器1106を含む。いくつかの異なるタイプの原因が、異なる実施形態において、停止プロシージャの開始を引き起こし得る。例えば、停止プロシージャは、(a)いくらかの閾値数のノードが失敗し得た(「X」記号によって示される、ノード1102B及び1102Dでの障害など)、(b)構成−デルタメッセージがコミッタノードで(または何らかの他のノードで)受信されている割合が閾値を超える、(c)ネットワークパケットまたは接続が何らかのDAGノードまたはDCMでドロップされている割合が閾値を超えるなどの理由により、開始され得る。描写された実施形態におけるコミッタノード1102Eは、コミッタノードのコミット記録セット内に表されるシーケンス番号の中で最大のシーケンス番号を含むDAG停止要求1150を送信する。この最大のシーケンス番号は、本明細書では最大のコミット済みシーケンス番号(HCSN)1108と称され得、下に記載されるように停止プロシージャのステップのうちの1つの間にDAGノード間のコミット記録セットを同期するためのリファレンスとして使用され得る。いくつかの実施形態において、停止が開始されるべきであるという初期判定は、非コミッタノードのうちの1つで、またはDCM1180自体でなされ得、ある特定のコミットシーケンス番号(理想的にはHCSNであるが必ずしもそうとは限らない)が、ノードがそれらのコミット記録セットをそこまで更新すべきであるターゲットシーケンス番号として選択され得る。
図11bに示されるように、停止要求の受信に応答して、DCM1180は、HCSNを永続ストレージ1175に保存し得る。次いで、DCMは、それぞれの停止コマンド1152を少なくともDAGノードのサブセットに、例えば、描写された例示的なシナリオではコマンド1152A及び1152Bをノード1102A及び1102Cにそれぞれ送信し得る。いくつかの実施形態において、DCM1180は、停止コマンドを、DCMで保存される最新のDAG構成に従ってDAGのメンバーであるすべてのDAGノード(1102B及び1102Dなど、失敗し得たノードを含む)に送信し得る。停止コマンドは、HCSN1108を含み得る。
停止コマンドを受信すると、DAGノードは、状態遷移要求/メッセージの処理を中止し得、代わりに、そのコミット記録セットがHSCNに対応するコミット記録を含むそれまでのすべてのコミット記録を含むことを検証するためのプロセスを開始し得る。例えば、ノード1102A及びノード1102Cは、HCSN以下のシーケンス番号を有する1つ以上のコミットされた状態遷移に関してコミッタノード1102Eによってまだ通知されていない場合があり得る。そのようなシナリオにおいては、図11cに示されるように、ノード1102Aは、コミット記録同期要求1172Bをコミッタノード1102Eに送信し得(「1a」と表記される矢印で示されるように)、ノード1102Cは、同様のコミット記録同期要求1172Bをノード1102Eに送信し得る(「1b」と表記される矢印で示されるように)。コミット記録同期要求1172はそれぞれ、要求がそこから送信されるノードでコミット記録が欠けているという指標を含み得、例えば、ノード1102Aは、それがSN1までのシーケンス番号を有するコミット記録をすでに有することを示し得る一方、ノード1102Cは、それがシーケンス番号SN2、SN3、及びSN4を有するコミット記録が欠けていることを示し得る。次いで、欠けているコミット記録1174A及び1174Bは、「2a」及び「2b」と表記される矢印によって示されるように、コミッタノードによってノード1102A及び1102Cにそれぞれ送信され得る。次いで、ノード1102A及び1102Cは、「3a」及び「3b」と表記される矢印によって示されるように、それぞれの同期確認1176A及び1176BをDCM1180に送信し得る。DCM1180は、「4」と表記される矢印によって示されるように、ノード1102A及び1102Cを、DCMの永続ストレージ1175に維持される最新ノードのリスト1133(即ち、コミッタノード1102Eのコミット記録セットを一致させるためにそれらのコミット記録セットを更新したノード)に追加し得る。
図11dにおいて示されるように、DAGのノードは、描写された実施形態において、実行を終了し、自ら再起動し得る。失敗したノード1102B及び1102Dは、例えば、それらの障害からのリカバリの一部として再起動し得る。連携停止プロシージャの一部として、ノード1102A及び1102Cは、それらのコミット記録セットがコミッタノードのそれと同期された後に、それらのコミット記録セット(及び/またはノードの動作に関する追加のメタデータ)をローカルストレージに保存し、次いで制御された再起動を開始し得る。ノード1102Eは、描写された実施形態において、それが停止要求1150を送信した後いくらかの時間間隔の間待機し(コミッタノードが少なくともいくつかの同期要求1172に応答することを可能にする)、任意の状態メタデータをローカルストレージに保存し、次いでその独自の制御された再起動を停止プロシージャの一部として開始し得る。
DAGノード1102A〜1102Eがオンラインに戻った後、それらはそれぞれ、いくつかの実施形態において、図11eに示されるように、それぞれの「サービスに利用可能」メッセージをDCM1180に送信し、それらのアプリケーション状態遷移処理動作を再開するための再稼働命令を待ち得る。DCMは、ノード1102B及び1102Dのコミット記録セットが最新ではないかもしれないということを(その最新ノードリスト1133を使用して)判別することが可能であり得、それに応答して、図11fに示されるように、それぞれの同期コマンド1194をノード1102B及び1102Dに送信し得る。少なくともいくつかの実施態様において、同期コマンドは、HCSN1108を示し得る。同期コマンド1194に応答して、ノード1102B及び1102Dはそれぞれ、それらの独自のコミット記録同期要求1172C及び1172Dを、最新であることが知られるノードに送信し得、それらのそれぞれのコミット記録セットにコミット記録が欠けていることを示す。例えば、ノード1102Bは、その同期要求1172Cをノード1102Aに送信し得る一方、ノード1102Dは、その同期要求をノード1102Eに送信し得る。いくつかの実施形態において、DCMは、コミット記録同期要求が送信されるべき送信先ノードを指定し得る。一実施形態において、すべての非コミッタDAGノードは、それらのコミット記録セットをコミッタノードと同期させる必要があり得る。ノード1102B及び1102Dは、最終的にすべてのノードが、それらのコミット記録セットをHCSNまで同期させているように、それらの欠けているコミット記録1174C及び1174Dをそれぞれ受信し得る。いくつかの実施態様において、ノード1102B及び1102Dは、それらのコミット記録セットが更新/同期されたことを示す確認をDCM1180に送信し得る。少なくとも1つの実施形態において、DCMは、その最新ノードリスト内にないノードに対して、図11fに関して上に記載されるよりもいくらか受動的な役割を果たし得る。そのような実施形態において、失敗したノード(1102Bまたは1102Dなど)がオンラインに戻ったとき、それは、新規のオンラインノードに任意のコミット記録が欠けているかどうかを判定するためにメッセージをDCMに送信する。DCMは、ノードが最新になるためにはHCSNまでのシーケンス番号を有するコミット記録が必要とされることをノードに通知し得る(例えば、単にHCSNを示すことによって)。次いで、ノードは、自らを最新状態にすること、及び一旦それがそのコミット記録をHCSNまで同期させると、DCMにレポートを戻すことを担い得る。故に、そのような実施形態において、DCMは、必ずしも同期コマンド1194を送信し得ず、むしろ、新規のオンラインノードが、それらのコミット記録セットを同期させるための主導権を取り得る。
少なくとも閾値数のノードがコミット記録セットを更新したことを確認した後、DCM1180は、再起動後のDAGの構成を判定し得る。いくつかの場合において、停止前に使用されていたのと同じ構成が再び使用され得るが、他の実施形態においては、異なる構成が選択され得る。例えば、DAGが最低で4つのノードを有することが必要とされる場合があり得るため、ノード1102A〜1102Eのうちの4つのみが最初に選択され得る。図11gに示されるように、DCM1180は、それぞれの再稼働メッセージをノードの選択されたセット(描写される実施例では5つのノードすべて)に送信し得、DAGの現在の構成を示す。次いで、DAGノードは、図11hに示されるように、通常動作を再開し得る。いくつかの実施形態において、失敗しなかったDAGノード(例えば、1102A、1102C、及び1102E)のうちの少なくともいくつかは、必ずしも自ら再起動し得ない。むしろ、それらのコミット記録セットを同期させた後、そのようなノードのうちの1つ以上は、そのような実施形態において、それらがDCMから再稼働コマンドを受信するまで、これ以上の状態遷移処理を単に延期し得る。
図12は、少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製DAGなどのSRGのコミッタノードで実行され得る動作の態様を示すフロー図である。要素1201に示されるように、コミッタノードは、SRGの連携停止のためのトリガ基準が満たされたことを判定し得る。例えば、応答をし続けるSRGノードの数が閾値を下回ったこと、またはSRGの構成変更が発生している割合が閾値を超えることをコミッタノードが検出することを含む、様々な異なるトリガ条件が、連携停止を引き起こし得る。いくつかの場合において、例えば、ネットワークパケットがドロップされる割合が閾値を超える場合、または、接続が最大許容率以上で予期せず終了されている場合、リソース作業負荷レベルまたはエラー率が、停止をトリガし得る。一実施形態において、SRGの非コミッタノード、またはDCMなどの構成マネージャは、最初に、制御された停止を引き起こさなければならない問題を検出し得、その問題についてコミッタノードに通知し得る。
制御された停止が開始されるべきであることを判定した後、コミッタノードは、描写された実施形態において、状態遷移メッセージのその通常の処理/複製を停止または中止し、任意の未処理のまだ保存されていないコミット記録をローカルストレージに保存し得る(要素1204)。次いで、コミッタノードは、HCSN(コミット記録がコミッタノードによって格納されている遷移のシーケンス番号の中で最大のコミット済みシーケンス番号)の指標を含む、停止要求をSRGの構成マネージャ(例えば、複製DAGの場合はDCM)に伝送し得る(要素1207)。HCSNは、SRGの現在稼働しているノードがそこまでそれらのコミット記録セットを同期させるべきであるターゲットコミットシーケンス番号として機能を果たし得る。
少なくともいくつかの実施形態において、それが停止要求を送信した後、コミッタノードは、いくつかのコミット記録同期要求を他のSRGノード(例えば、それらがHCSNまでのシーケンス番号を有するコミット記録のフルセットを有しないことを判定したノード)から受信し得る(要素1210)。描写された実施形態において、コミッタノードは、構成可能な時間窓中に受信される任意のそのような動機要求に応答する。次いで、コミッタノードは、任意に、クリーンシャットダウン及び再起動を実行し、サービスに利用可能メッセージをSRGの構成マネージャに送信し得る(要素1213)。いくつかの実施形態において、クリーンシャットダウン及び再起動は、省略され得、コミッタノードは、サービスに利用可能メッセージを単に送信し得るか、コミッタノードは、再稼働命令が構成マネージャから受信されるまで、これ以上の状態遷移関連処理を単に延期し得る。最終的に、コミッタノードは、DAGの現在の停止後構成を示す再稼働メッセージを構成マネージャから受信し得、次いでコミッタノードは、示された構成の通りに状態遷移関連処理を再開し得る(要素1216)。いくつかの実施形態において、新しい停止後構成では、コミッタノードがもはやコミッタの役割を付与されない場合があり得、むしろ、それは、例えば、アクセプタノード、仲介ノード、またはスタンバイノードとして構成され得る。
図13は、少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製DAGなどの状態複製グループの非コミッタノードで実行され得る動作の態様を示すフロー図である。通常動作中、非コミッタノードは、対応する遷移がコミットされた後のある時点で、コミット記録をローカルストレージに格納し得、その結果、非コミッタノードのローカルコミット記録セットは、必ずしもコミッタノードのものと同じくらいに最新状態ではない場合がある。要素1301に示されるように、非コミッタノードは、非コミッタノードがそのローカルコミット記録セットを同期させるべきターゲットシーケンス番号としてHCSNを示す停止コマンドを構成マネージャから受信し得る。
停止コマンドを受信すると、非コミッタノードは、新しい状態遷移メッセージの処理を停止または中止し得る。HCSNより小さいシーケンス番号を有するいくつかのコミット記録が、ローカルコミット記録セットから欠けている場合、非コミッタノードは、欠けている記録についてのコミット記録同期要求をコミッタノードに(または欠けているコミット記録のソースとして構成マネージャによって示される異なるノードに)送信し得る(要素1304)。そのコミット記録セットがすでにHCSNに関して最新である場合、非コミッタノードは、停止プロシージャのこの段階で他のノードと通信する必要がない場合がある。HCSNまでのシーケンス番号を有するコミット記録がローカルストレージに格納されていることを検証した後、非コミッタノードは、描写された実施形態において、同期確認メッセージを構成マネージャに送信し得る(要素1307)。次いで、非コミッタノードは、それが構成マネージャによって再稼働されるまで、これ以上のアプリケーション状態遷移処理を延期し得る。任意に、非コミッタノードは、クリーンシャットダウン及び再起動を実行し、再起動後に「サービスに利用可能」メッセージを構成マネージャに送信し得る(要素1310)。構成マネージャからの再稼働メッセージに応答して、非コミッタノードは、SRG構成のそのビューを更新し、アプリケーション状態遷移処理を再開し得る(要素1313)。停止後構成では、いくつかの場合において、異なる役割が構成マネージャによって非コミッタノードに付与され得、例えば、非コミッタノードの役割が、コミッタノードへ変更され得る。
図14は、少なくともいくつかの実施形態に従う、連携停止プロシージャ中に複製DAGなどの状態複製グループの構成マネージャで実行され得る動作の態様を示すフロー図である。要素1401に示されるように、構成マネージャは、コミット記録がコミッタノードに格納される遷移のシーケンス番号の中から最大のコミット済みシーケンス番号(HCSN)を示す停止要求をSRGのコミッタノードから受信し得る。いくつかの実施形態において、コンセンサスプロトコルが、SRG動作を停止するという決定が最終的に下される前に、構成マネージャの様々なノード間で用いられ得る。構成マネージャは、HCSNを永続ストレージに格納し(要素1404)(例えば、構成マネージャクラスタのいくつかのノードにおけるそれぞれのストレージデバイスに)、HCSNを示す停止コマンドをSRGの1つ以上の他のノードに送信し得る(要素1407)。いくつかの実施形態において、停止コマンドは、失敗したと仮定されるノードを含む、SRGのすべての既知のメンバーに送信され得る。SRGの受信者ノードはそれぞれ、それらのローカルコミット記録セットがHCSNに対応するコミット記録を含むことを検証し得る(いくつかの場合、上記のように、受信者ノードが、欠けているコミット記録をコミッタノードから獲得することを必要とし得る)。そのコミット記録セットがHCSNに関して最新状態であることを検証した後、停止コマンドの受信者は、構成マネージャにそのコミット記録セットが現在は最新であることを示す同期確認を送信し得る。したがって、SRGノードからそのような確認を受信すると、構成マネージャは、そのノードを最新ノードのリストに追加し得る(要素1410)。
いくつかの実施形態において、構成マネージャは、SRGノードからそれらがサービスに利用可能であることを示すそれぞれのメッセージを受信するのを待ち得る。そのようなメッセージをノードから受信すると(例えば、ノードがクリーンシャットダウン及び再起動を完了した後、またはノードが障害後にオンラインに戻った後)、構成マネージャは、ノードが最新ノードリスト内にあるかどうかを判定し得る。「サービスに利用可能」指標がそこから受信されるノードが、コミット記録に関して最新であることが知られていない場合、構成マネージャは、例えば、明示的同期コマンド内で、またはノードからの暗示的もしくは明示的クエリに応答して、ノードにHCSNを送信し示し得る(要素1413)。HCSNをコミット記録がそこまで更新されるべきであるターゲットシーケンス番号として使用して、次いで、ノードは、すでに最新である他のノードと通信することによって、そのローカルコミット記録セットを更新し得る。いくつかの実施形態において、構成マネージャは、同期コマンド内に、古いノードが欠けているコミット記録をそこから獲得するべきであるソースの指標を含み得る。
構成マネージャは、必要とされる最低限の数のSRGノードが、(a)サービスに利用可能であること、及び(b)アプリケーションコミット状態に関して最新であることを確認した後、構成マネージャは、SRGの初期停止後構成を確定し得る(要素1416)。次いで、構成マネージャは、構成を示す再稼働メッセージを初期構成内にあるノードの適切なセットに送信し得る(要素1419)。いくつかの実施形態において、初期構成情報は、構成−デルタメッセージのシーケンスとしてノードに提供され得る。
少なくともいくつかの実施形態において、同期のために選択されるターゲットシーケンス番号(即ち、SRGの複数のノードのそれぞれがそこまでコミット記録のそのローカルセットを更新するべきであるシーケンス番号)は、必ずしも最大のコミット済みシーケンス番号である必要はない。例えば、コミッタノードにおける最大のコミット済みシーケンス番号がSN1である場合があり得、急速に発展する大規模障害イベントの検出の結果としてSRGの動作を停止する緊急の必要性に起因して、SRG構成マネージャが、ノードにそれらのコミット記録をより小さいシーケンス番号(SN1−k)に更新した後にそれらの動作を停止することを許可しようとし得る。いくつかの実施態様において、SRGのノードは、停止/再起動前にそれらのコミット記録をいくらか小さいシーケンス番号に同期させ得、かつ停止後、例えば、ノード再起動後、最大のコミット済みシーケンス番号に同期させ、「サービスに利用可能」メッセージを構成マネージャに送信し得る。先に述べたように、いくつかの実施形態において、停止プロシージャは、非コミッタノードによって、または構成マネージャ自体によって開始され得る。
複数データ格納トランザクションのためのログベースの楽観的並行性制御
いくつかの実施形態において、上記のタイプの複製DAGは、複数の独立したデータストアに関与するトランザクションのサポートを可能にするログサービスを使用して楽観的並行性制御技術を実装するために使用され得る。図15は、少なくともいくつかの実施形態に従う、複数のデータストアへの書き込みを含み得るトランザクションをサポートする永続的な変更ログを含む例示的なシステム環境を示す。システム1500は、ログサービスを使用してインスタンス化され得る永続的な変更ログ1510を示す。描写された実施形態において、データストア1530A(例えば、NoSQLまたは非リレーショナルデータベース)及びデータストア1530B(例えば、リレーショナルデータベース)などの1つ以上のデータストア1530が、トランザクション管理のためにログサービスで登録され得る。「並行性制御」、「トランザクション管理」、及び「更新管理」という用語は、ログサービスによって提供される機能性に関して、本明細書では同義語として使用され得る。
クライアント1532は、いくつかの実施形態において、それらがある特定のアプリケーションについてログベースのトランザクション管理を使用することを望むデータソースのセットを示す登録要求を、例えば、ログサービスマネージャ1501によって提示される管理または制御プレーンプログラムインターフェースを介して、サブミットし得る。永続的な変更ログ1510は、いくつかの実施形態において、そのような登録要求に応答してインスタンス化され得る。概して、所与の永続的な変更ログインスタンスは、1つ以上の基礎となるデータストアのためのトランザクションを管理するために作成され得る。つまり、少なくともいくつかの配置において、ログベースのトランザクション管理は、複数のデータストアのために同時に使用されるのではなく、単一のデータストアのために使用され得る。「データストア」という用語は、本明細書で使用される場合、幅広い種類の永続もしくは一時データリポジトリ及び/またはデータコンシューマのうちのいずれかのインスタンスを指し得る。例えば、一部のデータストアが、マルチアイテムトランザクションのためのネイティブのサポートを必ずしも提供しない場合がある永続的な非リレーショナルデータベースを含み得る一方で、他のデータストアは、マルチアイテムトランザクションをネイティブにサポートし得る永続的なリレーショナルデータベースを含み得る。いくつかの実施形態において、ウェブサービスインターフェースを介してアクセス可能な、そのユーザが任意のサイズの非構造化データオブジェクトを格納することを可能にするプロバイダネットワークのネットワークアクセス可能なストレージサービスが、データストアのうちの1つとして登録され得る。他のタイプのデータストアは、インメモリデータベース、分散キャッシュのインスタンス、ネットワークアクセス可能なブロックストレージサービス、ファイルシステムサービス、またはマテリアライズドビューを含み得る。ログサービスによって記録されるコミットされた書き込みを、例えば、新しいデータアーティファクトを生成するために、コンシュームするエンティティは、別のタイプのデータストアを表し得、本明細書では、総称的に「データコンシューマ」と称され得る。そのようなデータストアは、例えば、ログサービスを介して管理されるデータの指定されたセットに対する指定されたクエリの結果を生成することを担う事前計算されたクエリ結果マネージャ(PQRM)(データストア1530Cの場合のように)を含み得る(データの指定されたセットは、1つ以上の異なる他のデータストアに格納されるオブジェクトを含み得る)。いくつかの実施形態において、ログサービスを介して管理される一部またはすべてのコミットされたデータのポイントインタイムスナップショットを生成するように構成されるスナップショットマネージャは、別の種類のデータストアを表し得る。そのようなログスナップショットは、異なる実施形態において、バックアップのためまたはオフライン作業負荷分析のためなど、様々な目的のために格納され得る。「データコンシューマ」という用語は、本明細書では、PQRM及びスナップショットマネージャなどのデータストアを指すために使用され得る。データストアのうちの少なくともいくつかは、他のデータストアのものとは異なる読み取りインターフェース1531を有し得、例えば、データストア1530Aのデータストア(DS)読み取りインターフェース1531Aは、描写された実施形態において、DS読み取りインターフェース1531Bまたは事前計算されたクエリインターフェース1531Cとは異なる、API、ウェブベースのインターフェース、コマンドラインツール、またはカスタムGUI(グラフィカルユーザインターフェース)のセットを含み得る。
描写された実施形態において、ログサービスクライアント1532は、トランザクション要求をローカルで構築し、次いで永続的な変更ログ1510による承認及びコミットのためのトランザクション要求をサブミット(または「オファー」)し得る。1つの実施態様において、例えば、ログサービスのクライアント側ライブラリは、クライアントが「トランザクション開始」要求の論理等価物を発行することによって候補トランザクションを開始することを可能にし得る。候補トランザクション内で、クライアントは、いくつかの読み取りをデータストア1530でオブジェクトの選択されたセットに対して実行し得、ローカルで(例えば、ローカルメモリ内で)1つ以上のデータストアに向けられる書き込みの提案されたセットを実行し得る。次いで、クライアントは、「トランザクション終了」要求の等価物を発行することによって候補トランザクションをサブミットし得る。描写された実施形態において、候補トランザクション要求1516は、ログの書き込みインターフェース1512を介して、永続的な変更ログ1510と関連付けられたコンフリクト検出器1505で受信され得る。概して、少なくともいくつかの実施形態において、所与のトランザクション要求1516は、1つ以上のデータストアからそれぞれ1つ以上の読み取り、及び1つ以上のデータストアにそれぞれ向けられる1つ以上の提案された書き込みを含み得、ここで読み取られるデータストアのセットは、書き込まれているデータストアのセットと重複する場合、またはしない場合がある。読み取りは、いくつかの実施形態において、ネイティブDS読み取りインターフェース1531を使用して実行され得る(とはいえ、下に記載されるように、いくつかのシナリオにおいては、クライアントは、永続的な変更ログ1510を介して読み取りのみの動作も実行し得る)。
所与のトランザクション要求に示される書き込みのうちの少なくともいくつかは、いくつかの実施形態において、読み取りのうちの1つ以上の結果に依存し得る。例えば、要求されたトランザクションは、1つの値V1をデータストアDS1にある場所L1から、第2の値V2をデータストアDS2にある第2の場所L2から読み取ること、関数F(V1,V2)を計算すること、及びその関数をデータストアDS3にある場所L3に格納することに関与し得る。いくつかのロックベースの並行性制御機構において、排他的ロックは、L3が更新される前に値V1及びV2が変わらないことを確実にするために、L1及びL2で獲得される必要があり得る。図15に示されるログサービスの楽観的並行性制御機構において、ロックが獲得される必要のない場合がある。むしろ、描写された実施形態において、コンフリクト検出器1505が、トランザクション記述子1516の内容、及び永続的な変更ログ1510のコミットされたトランザクションログ記録1527のセットに少なくとも部分的に基づいて、要求されたトランザクション内のデータアイテム読み取りのセットが、それらがそれぞれのデータストアから読み取られて以降、更新されているかどうかを判定し得る。下にさらに詳細に記載されるように、少なくともいくつかの実施形態において、シーケンス番号をベースとした技術を使用して、そのような読み取り−書き込みコンフリクトが存在するかどうかを判定し得る。コンフリクト検出器1505が、トランザクション中に読み取られたデータがどれも上書きされていないことを判定する場合、要求されたトランザクションは、コミットを受理され得、そのようなコミットを受理されたトランザクション1514は、永続的な変更ログでの対応するログ記録の複製のためにサブミットされ得る。「承認」及び「受理」という用語は、拒否されない要求されたトランザクションに関して、本明細書では同義語として使用され得る。対応する読み取りが発生したために読み取りデータの一部が更新された場合(または、データが更新された可能性が、閾値よりも大きいとコンフリクト検出器によって推定される場合)、要求されたトランザクション1516は、描写された実施形態において、むしろ拒否または中断され得る。並行性制御に対するこのタイプのアプローチは、トランザクションの書き込みのセットを続行するかどうかに関する決定が読み取り−書き込みコンフリクトが起こりそうもないという楽観的仮定の下に最初になされ得るという点で、楽観的と見なされ得る。その結果、読み取り−書き込みコンフリクトが実際にはまれに起こるシナリオにおいては、より従来型のロックベースの技術が使用される場合に起こり得るよりも高いスループット及び低い応答時間が達成され得る。
トランザクションがコミットを受理される場合において、コミットされたトランザクションログ記録の内容は、描写された実施形態において、コミットが成功したと見なされる前に(図16に関して下にさらに詳細に記載されるように)永続的な変更ログ1510と関連付けられた複製DAGのいくつかのノードで複製され得る。必要数のレプリカが作成されない場合、描写された実施形態において、トランザクションは拒否または中断され得る。コミットに必要とされるレプリカの数は、異なるアプリケーションまたはクライアントでは様々であり得る。コミットされたトランザクションログ記録はまた、本明細書では「コミット記録」と称され得る。いくつかの実施形態において、要求しているクライアント1532は、要求したトランザクションがコミットされるときに通知され得る。少なくとも1つの実施形態において、クライアント1532は、トランザクションが拒否されるときに通知され得、その結果、例えば、新しいトランザクション要求が、所望の更新のために生成またはサブミットされ得る。
コミットされる各トランザクションのために、少なくともいくつかの実施形態において、コミットシーケンス番号(またはアプリケーションのコミットされた状態を示す何らかの他の識別子)が、永続的な変更ログ1532で生成及び格納され得る(例えば、コミットされたトランザクションログ記録のレプリカのそれぞれの一部として)。そのようなコミットシーケンス番号は、状態遷移のための複製DAGで使用されるシーケンス番号に関して上に記載されるように、例えば、カウンタとしてまたは論理タイムスタンプとして実装され得る。コミットシーケンス番号は、例えば、いくつかの実施形態においては、コンフリクト検出器によって、または他の実施形態においては、永続的な変更ログの異なるコンポーネント(使用されている複製DAGのコミッタノードなど)で判定され得る。描写された実施形態において、所与のトランザクションがコミットされ、かつそのコミット記録が永続的な変更ログに格納された後、トランザクションの書き込みは、それらが向けられた(または、PQRM1530Cの場合のように、書き込まれたデータがコンシュームされるべきである)データストア1530のうちの1つ以上に適用または伝播され得る。いくつかの実施態様において、書き込みは、非同期方式でターゲットとされたデータストア1530にプッシュされ得る。故に、そのような実施態様において、トランザクションがコミットされるとき(即ち、コミット記録の必要とされる数のレプリカが無事に格納されたとき)と、コミットされたトランザクションのある特定の書き込み動作のペイロードが対応するデータストアに達するときとの間にはいくらかの遅延があり得る。図15に示される実施形態において、それぞれの非同期型書き込みアプライヤ1517が、関連のあるデータストアへの書き込みの一部またはすべてを伝播するために使用され得る。例えば、書き込みアプライヤ1517Aは、データストア1530Aに関連のある書き込み1515Aを適用するように構成され、書き込みアプライヤ1517Bは、データストア1530Bに関連のある書き込みをプッシュし、及び、書き込みアプライヤ1517Cは、データストア1530Cでコンシュームされるべき書き込みをプッシュする。いくつかの実施態様において、書き込みアプライヤは、永続的な変更ログ1510のサブコンポーネント(例えば、スレッドまたはプロセス)を含み得る一方、他の実施態様においては、書き込みアプライヤ1517は、永続的な変更ログの外部のエンティティとして実装され得る。いくつかの実施形態において、所与の書き込みアプライヤ1517は、1つを超えるデータストア1530に書き込みを伝播することを担い得るか、単一のデータストア1530が、複数の書き込みアプライヤ1517から書き込みを受信し得る。少なくとも1つの実施態様において、プル技術を使用して、書き込まれたデータをデータストアに伝播し得、例えば、1つ以上のデータストア1530は、書き込みアプライヤの主導で書き込まれたデータを提供されるのではなく、書き込みのための要求を永続的な変更ログ1510または書き込みアプライヤにサブミットし得る。トランザクション中に書き込まれるデータが対応するデータストアに適用された後、クライアント1532は、データストアのそれぞれの読み取りインターフェースを使用して、更新されたデータを読み取ることが可能であり得る。いくつかの実施形態において、書き込みアプライヤのうちの少なくとも1つは、同期型書き込みを実行する能力があり得る(例えば、ログサービスによってそうするように明示的に命令されるとき、またはそのアプライヤが担当するすべての書き込みのためのいずれか)。例えば、クライアントは、所与のトランザクションの少なくとも1つの書き込み(トランザクションに関与する複数のデータストアのうちの「マスター」データストアに向けられる書き込みなど)が、クライアントがトランザクションがコミットされたことを通知される前に適用されたことを確実にすることを望み得る。同期して実行されるべき特定の書き込みは、いくつかの実施形態において、トランザクション要求1516に示され得る。
いくつかの実施形態において、下にさらに詳細に記載されるように、所与のトランザクション要求1516は、トランザクションの読み取りセット(即ち、トランザクション中に読み取られるデータオブジェクトのセットを識別する情報)、トランザクションの書き込みセット(即ち、トランザクションがコミットされる場合に更新される/書き込まれるべきデータオブジェクトのセットを識別する情報)、書き込みペイロード(即ち、各書き込みのために格納されるべきデータバイトのセット)、及び/またはコンフリクトチェックデリミタ(トランザクションを受理/拒否するために調査されなければならないコミットされたトランザクションログ記録のサブセットの指標)のそれぞれのインジケータを含み得る。トランザクション要求のこれらの構成要素の一部またはすべては、対応するコミット記録内に、トランザクションのコミットシーケンス番号と一緒に格納され得る。少なくとも1つの実施形態において、永続的な変更ログ1510は、例えば、データストアからのクエリまたはログサービスクライアントからのクエリに応答して、アプリケーションの最新のコミットされた状態の識別子1590(これまでに生成された最大のコミットシーケンス番号など)を提供し得る。書き込みアプライヤは、描写された実施形態において、それらがデータストアで適用する書き込みに対応するコミットシーケンス番号を示し得る。故に、任意の所与の時間点で、クライアント1532は、(例えば、データストアにクエリすることによって)所与のデータストア1530で直前に適用された書き込みに対応するコミットシーケンス番号を判定することが可能であり得る。
少なくともいくつかの実施形態において、トランザクション要求の生成中(例えば、ログサービスのクライアントライブラリによる)、直前に適用されたコミットタイムスタンプは、トランザクション中にアクセスされるデータストアから獲得され得、そのようなコミットシーケンス番号のうちの1つ以上は、コンフリクトチェックデリミタとしてトランザクション要求内に示され得る。例えば、ある特定のクライアントがデータストアDS1にある場所L1の読み取りを含むトランザクションを開始するときに、DS1で直前に適用された書き込みに対応するコミットシーケンス番号がSN1であるというシナリオを検討する。この実施例では、トランザクションの読み取りセットは、DS1のデータのみ含むとさらに仮定する。そのようなシナリオでは、SN1は、トランザクション要求1516に含まれ得る。コンフリクト検出器は、要求されたトランザクションについて読み取り−書き込みコンフリクトが調査されるべきコミット記録のセットとしてSN1より大きいシーケンス番号を有するコミット記録を識別し得る。識別されたコミット記録の書き込みセットのうちのいずれかが要求されたトランザクションの読み取りセットと重複する場合、トランザクションは拒否/中断され得、そうでない場合は、トランザクションは、この例示的なシナリオでは、コミットを承認され得る。
描写された実施形態において、ログサービスは、1つ以上のプログラムログ読み取りインターフェース1513(例えば、API、ウェブページ、コマンドラインユーティリティ、GUIなど)を公開して、クライアント1532がログ記録を直接読み取ることを可能にし得る。他の実施形態において、変更ログ1510への直接アクセスを許可するそのような読み取りAPIは、実装されない場合がある。コミットされた特定のトランザクションを示すログ記録に直接アクセスし、それらがコミットされた順番を判定する能力は、いくつかの実施形態において、データストアのみに直接アクセスすることから可能であり得ることと比べて、新しいタイプの分析が実行されることを可能にし得る(データストアのうちの少なくとも一部は、典型的には、読み取り側にデータオブジェクトの最新の適用されたバージョンを見ることのみを許可し、データオブジェクトの履歴を見ることは許可しないため)。
図15に示される楽観的並行性制御機構は、少なくともいくつかのシナリオにおいて、基礎となるデータストアの並行性制御機構を使用して可能であり得たよりも複雑なタイプの不可分操作がサポートされることを可能にし得る。例えば、いくつかの高性能非リレーショナルデータストアは、シングルアイテムトランザクションのみを許可し得る(即ち、書き込みは1つずつ許可され得るが、複数の書き込みが単一バッチ更新でサブミットされる場合、原子性/一貫性保証は、一緒に行われる複数の書き込みには提供されない場合がある)。上記のログベースのアプローチでは、非リレーショナルデータストア(及び/または他のデータストアも同様に)の複数の場所への書き込みを包含する単一のトランザクションは、比較的容易にサポートされ得る。永続的な変更ログ1510は、関連付けられたコンフリクト検出器1505と一緒に、本明細書では、ログベースのトランザクションマネージャと称され得る。いくつかの実施形態において、書き込みアプライヤ1517はまた、トランザクションマネージャのサブコンポーネントと見なされ得る。
上で述べたように、永続的な変更ログ1510は、いくつかの実施形態において、先に記載される複製DAGを使用して実装され得る。図16は、少なくともいくつかの実施形態に従う、複製DAG1640を使用した永続的な変更ログの例示的な実施態様を示す。描写された実施形態において、DAGによって管理されるアプリケーション状態遷移は、1つ以上のデータストアのセットに向けられる読み取り及び書き込みを含むアプリケーションの一部としてログクライアント1660によって要求されるトランザクションに相当する。アプリケーションの状態は、アクセプタノード1610、中間ノード1612、コミッタノード1614、及びスタンバイノード1616においてローカルストレージに格納されるトランザクション記録1672のそれぞれのセットとして、ノード1610、1612、及び1614を含む現在の複製経路と共にモデル化され得る。いくつかの実施態様において、承認(即ち、要求されたトランザクションがコミットを承認されたことを示す)及びコミットのための別個のトランザクション記録が格納され得る一方、他の実施形態においては、単一のトランザクション記録が、トランザクションがコミットされたかどうかを示すフィールドと共に格納され得る。シーケンス番号または論理タイムスタンプは、描写された実施形態において、トランザクション記録のうちの少なくともいくつかの一部として格納され得るか、トランザクション記録のうちの少なくともいくつかによって示され得る。
要求されたトランザクション1650がコミットを承認されるべきかどうかに関する決定は、描写された実施形態において、アクセプタノード1610で実装されるコンフリクト検出器によってなされ得るが、他の実施形態においては、コンフリクト検出器は複製DAGの外側に実装され得る。フォールトトレラントログ構成マネージャ164は、構成−デルタメッセージを非同期的にDAGノード1610、1612、1614、及び1616に送信し得、各そのようなメッセージは、DAGの構成全体よりむしろDAG構成に対する変更を示し、クライアント1660によってサブミットされる、入ってくるトランザクション要求のストリームの処理を停止することをDAGノードに要求しない。各DAGノードは独立して、受信される構成−デルタメッセージを処理または集約して、現在のDAG構成のそのそれぞれのビュー1674(例えば、ノード1610ではビュー1674A、ノード1612ではビュー1674B、ノード1614ではビュー1674C、及びノード1616ではビュー1674D)に達し得る。ビュー1674のうちの少なくともいくつかは、所与の時点で他のノードにおけるものとは異なり得、故に、通常動作条件下では、異なるDAGノードが、DAG構成のそれらのビューを互いに同期させる必要がない場合がある。承認された(が、まだコミットされていない)トランザクションを示すメッセージ1652A及び1652Bは、複製経路に沿ってアクセプタノード1610及び中間ノード1612からそれぞれ伝送され得る。描写された実施形態において、コミッタノード1614は、コミットを示すメッセージ1653をアクセプタ及び中間ノード、ならびにスタンバイノード1616に伝送し得る。複製DAGの外側のエンティティとして図16の実施形態に示される、非同期型書き込みアプライヤ1692は、様々なコミットされたトランザクション記録からの書き込みを適切なデータストアまたはデータコンシューマに伝播し得る。他の実施形態において、書き込みアプライヤは、例えば、DAGノード内で実行するそれぞれのプロセスとして、複製DAG内に実装され得る。いくつかの実施態様において、DAGノードのサブセットのみが、コミットされた書き込みをそれらの送信先データソースまたはコンシューマに伝播するために、アプライヤ1692によって読み取られ得る。他の実施形態において、図16に示されるように、アプライヤは、先に記載されるように、コミットされたトランザクション記録をDAGノードのうちのいずれかから読み取り、書き込みペイロードの内容をプッシュし得る。
トランザクション要求要素
図17は、少なくともいくつかの実施形態に従う、ログサービスのクライアント1732によってサブミットされ得るトランザクション要求記述子1744の例示的なコンポーネント要素を示す。示されるように、トランザクション記述子1744は、描写された実施形態において、コンフリクトチェックデリミタ1702、読み取りセット記述子1704、書き込みセット記述子1706、書き込みペイロード(複数可)1708、及び任意の論理制約記述子1710を含み得る。示される実施例において、ログサービスクライアント1732は、トランザクション要求記述子を集めるために利用され得るクライアントライブラリ1756を含む。少なくともいくつかの実施形態において、クライアントライブラリは、トランザクション中にデータがそこから読み取られるデータストア1730A、1730B、及び1730C内のそれぞれの読み取り場所1761A、1761B、及び1761C、ならびに/またはデータがそこに書き込まれる書き込み場所1771(描写される実施例ではデータストア1730Cの)を自動的に記録し得る。いくつかの実施態様において、クライアントライブラリ1756はまた、データソース1730のそれぞれから、その書き込みがデータストアに直前に適用された直前のトランザクションの対応するコミットシーケンス番号(CSN)を獲得し得る。一実施形態において、そのようなCSNは、例えば、トランザクションの読み取りのうちのいずれかが対応するデータストアに発行される前に、取得され得る。別の実施形態において、CSNは、所与のデータストア1730から、現在のトランザクション内のそのデータストアに向けられる第1の読み取りが発行される直前に、取得され得る。
描写された実施形態において、コンフリクトチェックデリミタ1702は、直前に適用されたCSNがインプットとして提供される関数に由来し得る。例えば、1つの実施態様において、トランザクション中にすべてのデータストア読み取りから獲得されるCSNの中で最小のシーケンス番号が使用され得る。別の実施態様において、データストアのそれぞれからのCSNを含むベクトルまたはアレイが、トランザクション要求記述子のコンフリクトチェックデリミタ1702として含まれ得る。コンフリクトチェックデリミタ1702はまた、それが要求されたトランザクションが依存する1つ以上のデータストアのコミットされた状態を表すため、本明細書では、コミット状態識別子(CSI)と称され得る。いくつかの実施形態において、選択されたハッシュ関数が、読み取り場所1761A、1761B、または1761Cのそれぞれに適用されて、読み取り記述子1704に含まれるべきハッシュ値のセットを獲得し得る。同様に、選択されたハッシュ関数は(実施態様によっては、読み取り記述子に使用されたものと同じ関数、または異なる関数のいずれか)、トランザクションの書き込み(複数可)の場所に適用されて、書き込みセット記述子1706を生成し得る。他の実施形態において、ハッシュ化が使用されない場合があり、むしろ、例えば、非ハッシュ化場所識別子が、読み取り及び書き込みセットエンティティのそれぞれのために使用され得る。書き込みペイロード1708は、トランザクションに含まれる書き込みのそれぞれのために書き込まれるべきデータの表現を含み得る。任意の論理制約1710は、下にさらに詳細に記載されるように、重複検出/排除のため及び/または他のトランザクション前後に指定されたトランザクションのシーケンシングのために使用される署名を含み得る。トランザクション要求記述子1744の内容のうちの一部またはすべては、いくつかの実施形態において、永続的な変更ログ1510で複製されるトランザクション状態記録(例えば、承認されたトランザクション記録及び/またはコミットされたトランザクション記録)の一部として格納され得る。
読み取り記述子及び書き込み記述子がそこから生成される読み取り及び書き込み場所は、異なる実施形態においては、または異なるデータストアでは、異なるストレージ粒度、または異なるタイプの論理エンティティさえ表し得ることに留意されたい。例えば、ある特定のデータオブジェクトがコンテナ名(例えば、テーブル名)、ユーザ名(コンテナの所有者を示す)、及びキーのいくつかのセット(例えば、ハッシュキー及び範囲キー)の組み合わせによって表される非リレーショナルデータベースを含むデータストアの場合、読み取りセットは、タプル(コンテナID、ユーザID、ハッシュキー、範囲キー)の関数として獲得され得る。リレーショナルデータベースの場合、タプル(テーブルID、ユーザID、行ID)または(テーブルID、ユーザID)が使用され得る。
様々な実施形態において、トランザクションマネージャは、トランザクション要求及び永続的な変更ログの内容を使用して、トランザクション要求に示される読み取りとログに示される書き込みとの間のコンフリクトを識別することを担い得る。比較的単純な読み取り動作の場合、読み取られた場所に基づいてハッシュ値を生成し、読み取り場所のハッシュ値を変更ログに示される書き込みのハッシュ値と比較することは、コンフリクトを検出するのに十分であり得る。より複雑な読み取り要求の場合、いくつかの実施形態において、場所ベースのハッシュ値を使用することが常に十分ではない場合がある。例えば、読み取り要求R1がクエリ「文字「G」で始まる製品名をテーブルT1から選択せよ」を含み、かつ元の結果セットが「Good−製品1」であったシナリオを検討する。書き込みW1がR1の結果に依存するトランザクション要求が受理のために調査されるまでに、製品名「Great−製品2」がテーブル内に挿入された場合、これは、「Good−製品1」データオブジェクトの場所が、修正され得なかったために、ログの書き込み記録が示され得ないにもかかわらず、トランザクション受理決定がなされるときにR1が再実行された場合には、R1の結果セットが変わってしまうことを意味する。そのような読み取りクエリに関して読み取り−書き込みコンフリクトに対処するため、または値の範囲を伴う読み取りクエリ(例えば、「$10〜$20の価格の製品の製品名のセットを選択せよ」)の場合、いくつかの実施形態において、論理または述部ベースの読み取りセット記述子が使用され得る。故に、上記の場所ベースの読み取りセットインジケータは、読み取り−書き込みコンフリクト検出のために様々な実施形態で使用され得る結果セット変更検出メタデータの単に1つの例示的な種類と見なされ得る。
読み取り−書き込みコンフリクト検出
図18は、少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャでの読み取り−書き込みコンフリクト検出の実施例を示す。描写された実施例において、永続的な変更ログ1810に格納されるトランザクションコミット記録(CR)1852は、コミットシーケンス番号がログの上から下へ増加する順番に配置されて示される。最新のまたは直前にコミットされたトランザクションは、コミットシーケンス番号(CSN)1804F及び書き込みセット記述子(WSD)1805Fを有するCR1852Fによって表される。CR1852A、1852B、1852C、1852D、及び1852Eのそれぞれは、対応するCSN1804(例えば、それぞれCSN1804A〜1804E)及び対応するWSD1805(例えば、WSD1805A〜1805E)を含む。
示されるように、トランザクション要求記述子1844は、コンフリクトチェックデリミタ(またはコミットされた状態の識別子)1842、読み取りセット記述子1846、及び書き込みセット記述子1848を含む。(要求されたトランザクションの書き込みペイロードは示されない)。ログベースのトランザクション管理システムのコンフリクト検出器は、要求されたトランザクションの読み取りセットとのコンフリクトをチェックされるべきであるログ1810のCRのセットを識別することを必要とされ得る。コンフリクトチェックデリミタ1842は、描写された実施形態において、「一致」と表記される矢印によって示されるように、要求されたトランザクションで読み取り−書き込みコンフリクトを調査されるべきであるセット1809の開始CRを識別するためにコンフリクト検出器によって使用され得る下限CSNを示す。セット1809は、いくつかの実施形態において、直前にコミットされたトランザクション(CR1852F)までの一致するシーケンス番号で始まるすべてのCRを含み得る。CRセット1809によって示される書き込みのうちのいずれかがトランザクション要求1844に示される読み取りのうちのいずれかと重複する場合、そのような読み取り−書き込みコンフリクトは、要求されたトランザクションの拒否を引き起こし得る。異なる実施形態において、様々な機構を使用して、そのような重複が存在するかどうかをチェックし得る。一実施形態において、例えば、1つ以上のハッシュ化ベースの計算または探査を使用して、読み取りセット記述子1846に表される読み取りがCRセット1809に示される書き込みとコンフリクトするかどうかを判定し、それによりCRセットのシーケンシャルスキャンを回避し得る。いくつかの実施態様において、例えば、CRセット内の記録の数が閾値未満の場合は、CRセット1809のシーケンシャルスキャンが使用され得る。CRセット1809に示される書き込みがどれも、要求されたトランザクションの読み取りのうちのいずれかと重複しない場合、トランザクション要求の準備中に読み取られたデータのどれも、それらが読み取られて以降、変更し得なかったため、トランザクションは受理され得る。少なくとも1つの実施形態において、トランザクション要求記述子は、コンフリクトをチェックされるべきトランザクション記録のシーケンス番号に対する上限も示し得、例えば、コンフリクトチェックデリミタは、CS1852のセット内の開始点及び終了点の両方を示し得る。
楽観的ログベースの並行性制御のための方法
図19は、少なくともいくつかの実施形態に従う、ログサービスで実行され得る制御プレーン動作の態様を示すフロー図である。示される管理または構成関連の動作のうちの少なくともいくつかは、例えば、ログサービスで実装される1つ以上の管理プログラムインターフェースの呼び出しに応答して、図15に示されるものなどのログサービスマネージャ1501によって実行され得る。要素1901に示されるように、1つ以上のデータストアは、例えば、上記の読み取り−書き込みコンフリクト検出アプローチを使用して、楽観的並行性制御機構を実装するログサービスを介してトランザクション管理のために登録され得る。異なる実施形態において、例えば、リレーショナルデータベース、非リレーショナルデータベース、インメモリデータベース、プロバイダネットワーク実装されたストレージサービス、分散キャッシュコンポーネント、事前計算されたクエリ結果マネージャ、スナップショットマネージャなどのインスタンスを含む、それぞれの別個の読み取りインターフェースを有する様々なタイプのデータストアのためのトランザクション管理は、ログベースのアプローチを使用して実装され得る。いくつかの実施形態において、所与のログインスタンスを使用して管理される基礎となるデータストアのうちの一部またはすべては、いくつかの従来のリレーショナルデータベースシステムによってサポートされるACID特性(原子性、一貫性、分離性、及び耐久性)のうちの少なくともいくつかをサポートしない場合がある。
ログサービスは、例えば、プロバイダネットワークで実装されるプロビジョニングサービスの助けを借りて、登録されたデータストアのために実装されるべき永続的な変更ログの複製DAGノードに使用されるべきホストのセットを識別し得る(要素1904)。1つ以上のホストはまた、複製DAGのための構成マネージャを識別され得、例えば、先に記載されるように、DAG構成変更を実装するためにコンセンサスベースのプロトコルを利用するノードのクラスタが、いくつかの実施態様では使用され得る。複製ノード及び構成マネージャは、選択されたホストでインスタンス化され得る。コンフリクト検出器、1つ以上の書き込みアプライヤ、及び永続的な変更ログのための任意の読み取りインターフェースマネージャを含む、ログベースのトランザクション管理機構の他のコンポーネントが構成され得る(要素1907)。ログのための読み取りインターフェースマネージャは、いくつかの実施形態において、ログに直接サブミットされる(登録されたデータストアの読み取りインターフェースにサブミットされる代わりに)読み取り要求に応答することを担い得る。書き込みアプライヤは、1つの例示的な実施態様において、トランザクションがログでコミットされるときに通知をサブスクライブするそれぞれのプロセスまたはスレッドとしてインスタンス化され得る。コンフリクト検出器は、いくつかの実施形態において、ログの読み取りインターフェースを利用するモジュールを含み得る。コンフリクトマネージャの構成は、例えば、読み取り−書き込みコンフリクトが、重複排除またはシーケンシングに対応する制約チェック動作に対して識別される順番、クライアントに対する応答が提供される様式(例えば、クライアントがトランザクション拒否/コミットに関して通知されるかどうか、及びどのように通知されるか)などを確立することを含み得る。いくつかの実施形態において、コンフリクト検出器、書き込みアプライヤ、及び/またはログ読み取りインターフェースマネージャは、マルチテナント方式で実装され得、例えば、所与のコンフリクト検出器、書き込みアプライヤ、または読み取りインターフェースマネージャは、そのサービスをそれぞれのログインスタンスが確立されている複数のクライアントに提供し得る。
永続的な変更ログの様々なコンポーネントが構成された後、クライアントからのトランザクション要求の流れは、例えば、クライアントに適切なネットワークアドレス及び/または証明書を提供することによって、有効にされ得る(要素1910)。少なくともいくつかの実施形態において、ログサービスで実行される制御プレーン動作は、格納されたトランザクション状態記録のトリミングまたはアーカイビング部分を含み得る(要素1914)。いくつかのそのような実施形態において、例えば、所与の永続的な変更ログのトランザクション記録に使用されるストレージの量が閾値を超えるとき、いくつかの一番古いトランザクション記録は、異なるストレージ設備(プロバイダネットワークストレージサービス、またはトランザクション記録の最近のセットに使用されるものよりも遅いストレージデバイスのセットなど)にコピーされ得る。別の実施形態において、一番古いトランザクション記録は、単に破棄され得る。少なくとも1つの実施形態において、例えば、第1の変更ログが記録の閾値集合に達するとき、永続的な変更ログのあるインスタンスと別のインスタントとの間で切り替えることなど、他の制御プレーン動作が必要に応じて実行され得る。
図20は、少なくともいくつかの実施形態に従う、クライアントから受信されるトランザクション要求に応答してログサービスで実行され得る動作の態様を示すフロー図である。要素2001に示されるように、ログサービスのコンフリクト検出器は、例えば、コンフリクトチェックデリミタ、読み取りセット、及び永続的な変更ログがログサービスによって確立された1つ以上のデータストアにあるそれぞれの場所への1つ以上の書き込みを含む書き込みセットを示す、トランザクションT1のトランザクション要求記述子を受信し得る。コンフリクトチェックデリミタは、トランザクションの読み取りの結果がそこから獲得される1つ以上のソースデータストアのコミットされた状態を示し得、したがって、コミット状態識別子(CSI)として機能を果たし得る。CSIはまた、それらがソースデータストアのポイントインタイム論理スナップショットに相当し得るため、いくつかの環境においては「スナップショットシーケンス番号」と称され得る。永続的な変更ログに格納されるトランザクション記録のセットS1は、例えば、コンフリクトチェックデリミタ及びログに格納されるトランザクション記録のシーケンス番号を使用して、要求されたトランザクションとの潜在的コンフリクトをチェックするために識別され得る(要素2004)。そのようなセットS1は、一実施形態において、例えば、コンフリクトチェックデリミタに示されるシーケンス番号よりも大きいコミットシーケンス番号を有するトランザクションのすべての記録を含み得る。
読み取り−書き込みコンフリクトが検出される場合(要素2007)、例えば、要求されたトランザクションの読み取りセットがセットS1のトランザクションのうちの1つの書き込みセットと少なくとも部分的に重複する場合、トランザクションT1は、拒否または中断され得る(要素2022)。いくつかの実施形態において、ハッシュ関数は、そのような重複が存在するかどうかを判定するために使用され得、例えば、読み取りセットが書き込みセットと同じハッシュ値を持つ場合、コンフリクトが発生したと仮定され得る。いくつかの実施態様において、拒否の指標または通知が、トランザクション要求がそこから受信されるクライアントに提供され得、クライアントが別の要求記述子を生成しかつサブミットすることによってトランザクションをリトライすることを可能にする。コンフリクトが検出されない場合(要素2007においても判定されるように)、T1は、コミットを受理され得る(要素2010)。描写された実施形態において、T1のトランザクション記録の複製は、例えば、ログの複数の複製DAGノードで、永続ストレージに対して開始され得る。いくつかの実施形態において、T1がコミットを受理されたとき、受理シーケンス番号がT1に割り当てられ得、各レプリカ内のトランザクション要求記述子要素のうちの少なくともいくつかの内容と一緒に格納され得る。少なくとも1つの実施形態において、受理シーケンス番号は、トランザクションが最終的にコミットされる場合には、コミットシーケンス番号として機能を果たし得る。
トランザクションが管理されているアプリケーションのデータ耐久性ニーズによっては、トランザクションT1のコミットが完了する前に、閾値数のレプリカが格納される必要があり得る。十分な数のレプリカが保存される場合(要素2013において判定されるように)、コミットは成功したと見なされ得、要求しているクライアントは、いくつかの実施形態において、コミット完了に関して通知され得る(要素2014)。何らかの理由で永続ストレージに保存され得るレプリカの数が必要とされる閾値を下回る場合(要素2013においても検出されるように)、トランザクションは、中断/拒否され得る(要素2022)。T1コミット後、描写された実施形態において、T1の書き込みセットに示される書き込み動作は、対応するデータストアまたはデータコンシューマに、例えば、非同期型書き込みアプライヤによって、適用され得る(要素2016)。いくつかの実施形態において、書き込みアプライヤのうちの少なくとも1つは、同期し得、例えば、クライアントは、トランザクションがコミットされたことを、そのような同期型書き込みアプライヤが、更新が同期して適用されるべきであるトランザクションの書き込みのサブセットを完了して初めて通知され得る。更新が適用された後、更新されたデータ要素は、それぞれのデータストアの読み取りインターフェースを介して受信されるクライアント読み取り要求に応答して読み取られ得る(要素2019)。様々な登録されたデータストアによってサポートされる読み取りインターフェースに加えて、少なくともいくつかの実施形態において、永続的な変更ログ自体が、例えば、ログサービスのプログラムクエリ/読み取りインターフェースを介して、トランザクション記録内容を直接クエリされ得る。いくつかの実施態様において、データストアはすでにログ内に存在する書き込みを伝播することを非同期型アプライヤに依存し得るため、そのようなログサービスインターフェースを介してログに向けられる読み取りは、いくつかの場合において、書き込み動作の結果をデータストアに向けられる読み取りよりもより素早く見ることが可能であり得る。いくつかの実施形態において、トランザクションがログでコミットされるとすぐに書き込みをデータストアに伝播する同期型アプライヤが使用され得る。他の実施形態において、各アプライヤは、構成可能な時間窓を有し得、その中で書き込みは、対応するデータストアまたはコンシューマに伝播されなければならず、その結果、トランザクションコミットとデータストアにおけるトランザクションの修正されたデータの出現との最大遅延を調節することができるようになる。
図21は、少なくともいくつかの実施形態に従う、それぞれの特殊な一貫性目標を達成するために使用され得るトランザクション要求記述子の実施例を示す。一実施形態において、ログサービスのクライアントは、「リードアフターライト」一貫性セマンティクスを施行することを望み得、これに従って、書き込みは、それがコミットされるとすぐにすべてのリーダに見えるようになる。リードアフターライト一貫性を確実にするため、即ち、読み取りが常にそれがコミットされた直後にデータを「見る」ことを確実にするため、クライアントは、読み取りのみのトランザクションに対してさえも(書き込みを含むトランザクションに対しても)トランザクション要求をサブミットすることを望み得る。読み取りのみのトランザクション要求記述子(TRD)2144は、例えば、Null書き込みセット2106A及びNull書き込みペイロード2108Aを有するが、非Nullコンフリクトチェックデリミタ2102A及び非Null読み取りセット記述子2104Aを有する。そのような読み取りのみのトランザクション要求記述子を受信すると、コンフリクト検出器は、要求に示される読み取りセットとコンフリクトチェックデリミタに示されるシーケンス番号よりも大きいシーケンス番号でコミットされた書き込みとの間に重複が存在するかどうかをチェックし得る。コンフリクトが検出される場合、読み取りのみのトランザクションは、拒否され得、故に、たとえ要求されたトランザクションがそれらの読み取りに応じたいかなる書き込みを含まないとしても、コンフリクトチェックデリミタが生成された後に、書き込みがコミットされ得た場所への読み取りを許可しない。
少なくともいくつかの実施形態において、書き込みのみのトランザクション要求は、特定の状況下でログサービスにサブミットされ得る。いくつかのアプリケーションでは、少なくともいくらかの期間中またはいくつかのデータストアでは、クライアントが読み取り−書き込み一貫性チェックを施行することを望まない場合があり得る。むしろ、クライアントは、そのような期間中にいくつかの書き込みがコミットを無条件に受理されることを望み得る。したがって、Null読み取りセット2104B及び/またはNullコンフリクトチェックデリミタ2102Bを有するトランザクション要求記述子2145は、非Null書き込みセット記述子2106B及び非Null書き込みペイロード2108Bと共にサブミットされ得る。そのような書き込みのみの要求は、例えば、データストアもしくはオブジェクトが最初にデータを入れられているとき、または1つの書き込みクライアントのみがある期間中に要求をサブミットしていることが知られる場合、サブミットされ得る。
先に述べたように、いくつかの実施形態において、非同期型書き込みアプライヤは、コミットされた書き込みの内容を永続的な変更ログから様々なデータストアまたはデータコンシューマに伝播するために使用され得る。書き込み伝播の非同期型性質の結果として、ある時点において、コミットされた書き込みのセットがそれらの目的とするデータストアにまだ伝播されていない場合があり得る。少なくとも1つの実施形態において、書き込みのみのトランザクションを使用してそのような未適用の書き込みをフラッシュすることが可能であり得る。例えば、ある特定の書き込みアプライヤWA1が、所与のデータストアDS1に対して未処理のN個以下の未適用の書き込みを有するように構成される場合、クライアントは、DS1内の特別な書き込み場所WL1に向けられるTRD2145など、書き込みのみのトランザクション要求記述子をサブミットし得、ここでWL1は、特にまたは主として、未処理のコミットされた書き込みをフラッシュするために使用される。いくつかの場合において、そのようなTRDは、いかなる書き込みペイロードも全く有する必要がない場合がある(例えば、書き込みペイロード2108Bは、Nullに設定され得る)。そのような書き込み−適用−フラッシュのトランザクション要求が受理されるとき、新しい保留中のコミットされた書き込みがログ及びWA1の未処理要求キューに追加され得る。キューの長さが長くなるにつれて、WA1は、N個以下の未適用の書き込みというその要件を満たすために、キュー内の先にコミットされた書き込みを適用し始める必要があり得る。いくつかの実施形態において、そのような書き込み−適用−フラッシュの要求は、コミットされた書き込みがあまりに長い間保留のままになっていることがないように、定期的に、例えば、1秒に1回、サブミットされ得る。書き込み−適用−フラッシュのトランザクションのコミットされた書き込みがアプライヤのキューの先頭に達するとき、いくつかの実施態様において、物理書き込みが実施される必要はなく、むしろ、例えば、アプライヤは、トランザクションに対応するコミットシーケンス番号を直前に「適用された」書き込みのインジケータとして送信先データストアに単に送信し得る。
いくつかのアプリケーションでは、クライアントは、少なくともいくらかの期間の間、厳密なシリアライゼーションを施行することを望み得る。つまり、トランザクション中のデータ読み取りとトランザクション準備が開始されて以降にコミットされ得た書き込みとの間に任意のコンフリクトが存在するかどうかにかかわらず、1つの(書き込みを含む)トランザクションのみが、一度に処理されることを許可され得る。そのようなシナリオにおいて、クライアントは、完全なシリアライゼーショントランザクション要求記述子2146を、アプリケーションによって使用されるすべてのデータセットの内容全体を示すその読み取りセット記述子2104Cと共にログサービスにサブミットし得る。ハッシュ値が読み取られる/書き込まれる場所のインジケータとして使用され、かつ書き込みセットエントリとのビット単位の比較がコンフリクトを検出するために使用される1つの実施態様において、例えば、読み取りセット記述子2402Cに含まれるハッシュ値は、「1」のシーケンスに設定され得る(例えば、16ビットハッシュ値の場合、「1111111111111111」)。任意の書き込み含有トランザクションがそのようなTRD2146のコンフリクトチェックデリミタ2102Cよりも大きいCSNを有してコミットされた場合、TRD2146に対応するトランザクションは拒否され得る。故に、書き込みセット記述子2106C及び書き込みペイロード2108Cによって示される書き込みは、他の書き込みが記述子によって示されるコンフリクトチェック間隔内でコミットされていない場合(そのような書き込みの場所にかかわらず)にのみコミットされることになる。
重複排除及びシーケンシング制約
いくつかの実施形態において、ログサービスのクライアントは、複製エントリが1つ以上のデータストアに書き込まれないことを確実にすることを望み得る。1つのそのような実施形態において、上記のように読み取り−書き込みコンフリクト検出を実行することに加えて、ログサービスはまた、トランザクション要求に示される重複排除要件を施行する必要があり得る。図22は、少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャで受信されるトランザクション要求と関連付けられた重複排除制約の施行の実施例を示す。示されるように、トランザクション要求記述子2244は、読み取り−書き込みコンフリクトチェックデリミタ2212、読み取りセット記述子2214、書き込みセット記述子2216、及び論理制約デリミタ2218を含む。TRD2244の書き込みペイロードは、図22には示されない。論理制約記述子2218は、描写された実施形態において、それが重複排除制約を表すことを示すLCタイプフィールド2219、重複排除チェックデリミタ2220、及び排他署名(複数可)2222を含む。
要求されたトランザクションを受理するかどうか判定するために、ログサービスは、描写された実施形態において、2種類のチェック(1つは読み取り−書き込みコンフリクトを検出するため、及び1つは重複を検出するため)を実行する必要があり得る。永続的な変更ログ2210内のコミット記録2252はそれぞれ、描写された実施形態において、それぞれのコミットシーケンス番号(CSN2204)、書き込みセット記述子(WSD)2205、及び重複排除署名(DDS)2206を含み得る。読み取り−書き込みコンフリクトが発生したかどうかを判定するため、ログサービスは、読み取り−書き込みコンフリクトチェックデリミタ2212に対応するシーケンス番号で始まり、かつ直前のコミット記録2252Fで終わる、その書き込みセットが要求されたトランザクションの読み取りセット記述子2214との重複を評価されるべきである、CRセット2209を識別し得る。読み取り−書き込みコンフリクトが検出される場合(即ち、そのような重複が存在する場合)、要求されたトランザクションは、先に記載されるように拒否され得る。
要求されたトランザクションの書き込み(複数可)が重複を表すかどうかを判定するため、描写された実施形態において、重複排除チェックデリミタ2220に対応するシーケンス番号で始まり、かつ直前のコミット記録2252Fで終わる別のCRセット2259が識別され得る。CRセット2259内のコミット記録のそれぞれにおいて、ログサービスは、コミット記録に格納される重複排除署名のうちのいずれかが要求されたトランザクションの排他署名(複数可)2222と一致するかどうかをチェックし得る。そのような一致が発見される場合には重複が検出され得、要求されたトランザクションは、そのようなシナリオでは、読み取り−書き込みコンフリクトが検出されなくても拒否され得る。重複が検出されない場合、かつ読み取り−書き込みコンフリクトが検出されない場合、トランザクションは、コミットを受理され得る。
少なくともいくつかの実施形態において、重複排除署名2206は、対応するトランザクションによって書き込まれるデータアイテムを書き込みセット記述子とは異なる方法で(例えば、異なるハッシュ関数を使用して生成されるハッシュ値で、またはより多くのビットを使用して格納されるハッシュ値で)表し得る。書き込みセットのそのような異なるエンコードは、いくつかの理由のうちのいずれかのために、重複排除対読み取り−書き込みコンフリクト検出のために使用され得る。例えば、いくつかのアプリケーションでは、クライアントは、偽陽性読み取り−書き込みコンフリクト検出の結果として時折トランザクションを再サブミットしなければならないことよりも、正確に重複を検出することについてより懸念し得る。したがって、そのようなアプリケーションでは、読み取り−書き込みコンフリクト検出におけるエラーの許容率は、重複検出エラーの許容率よりも高くなり得る。したがって、いくつかの実施態様において、出力値が128または256ビットとなる暗号強度ハッシュ関数が重複排除署名には使用される一方、出力が16または32ビットを使用して格納されるより簡便なハッシュ関数が、WSDに含まれる書き込み署名には使用され得る。いくつかのシナリオにおいて、重複排除は、使用されているデータストアの小さなサブセットに必要とされ得る一方、読み取り−書き込みコンフリクトは、トランザクションのより大きなセットについてチェックされることを必要とされ得る。そのような場合において、ストレージ及びネットワーキングリソースの使用量は、いくつかの実施形態において、重複排除署名よりも小さいWDS署名を使用することによって削減され得る。読み取り−書き込みコンフリクト検出機構及び重複排除検出機構を1つにまとめるのではなく、読み取り−書き込みコンフリクト検出機構を重複排除検出機構から論理的に区別することも、他の理由で、例えば、ログサービスのユーザ間での混乱を回避するため、重複排除の別個の請求に対応することができるようするためなど、有用であり得る。
他の実施形態において、書き込みセット記述子は、読み取り−書き込みコンフリクト検出及び重複排除の両方の目的のために使用され得る(例えば、別個の排他署名は使用され得ない)。同様に、いくつかの実施形態において、同じシーケンス番号値が、読み取り−書き込みコンフリクトチェックデリミタ及び重複排除チェックデリミタとして使用され得る。即ち、読み取り−書き込みコンフリクトを調査されるコミット記録のセットは、重複もチェックされ得る。少なくとも1つの実施形態において、重複排除は、例えば、書き込み−セット記述子を使用して、トランザクション要求記述子内に論理制約記述子を含める必要なく、デフォルトで実行され得る。
いくつかのアプリケーションでは、クライアントは、トランザクションの指定されたセット間のコミット順を施行することに関心があり得、例えば、トランザクションT1、T2、及びT3それぞれのために3つの異なるトランザクション要求をサブミットするクライアントは、T1をT2より前にコミットさせること、ならびにT3をT1及びT2の両方がコミットされた後に初めてコミットさせることを望み得る。そのようなコミットシーケンシング制約は、いくつかの実施形態において、第2の種類の論理制約記述子を使用して施行され得る。図23は、少なくともいくつかの実施形態に従う、ログベースのトランザクションマネージャで受信されるトランザクション要求と関連付けられたシーケンシング制約の施行の実施例を示す。示されるように、トランザクション要求記述子2344は、読み取り−書き込みコンフリクトチェックデリミタ2312、読み取り−セット記述子2314、書き込み−セット記述子2316、及び図22の論理記述子2218とは異なる種類の論理制約デリミタ2318を含む。TRD2344の書き込みペイロードは、図23には示されない。論理制約記述子2318は、描写された実施形態において、それがシーケンシング制約を表すことを示すLCタイプフィールド2319、シーケンシングチェックデリミタ2220、ならびにトランザクションT1及びT2にそれぞれ対応する必要とされるシーケンシング署名2322A及び2322Bを含む。論理制約記述子2318は、要求されたトランザクションが、トランザクションT1及びT2の両方が(シーケンシング署名2322A及び2322Bによって表される)が先にコミットされた場合にのみコミットされることを確実にするために、TRD2344に含まれ得る。
要求されたトランザクションを受理するかどうかを判定するため、ログサービスは、もう一度、図23に示される実施例において、2種類のチェック(1つは読み取り−書き込みコンフリクト検出するため、及び1つはトランザクションT1及びT2がコミットされたことを確実にするため)を実行する必要があり得る。永続的な変更ログ2310内のコミット記録2352はそれぞれ、描写された実施形態において、それぞれのコミットシーケンス番号(CSN2304)、書き込みセット記述子(WSD)2305、及びシーケンシング署名2306を含み得る。読み取り−書き込みコンフリクトが発生したかどうかを判定するため、前と同じように、ログサービスは、読み取り−書き込みコンフリクトチェックデリミタ2312に対応するシーケンス番号で始まり、かつ直前のコミット記録2352Fで終わる、その書き込みセットが要求されたトランザクションの読み取りセット記述子2314との重複を評価されるべきである、CRセット2309を識別し得る。読み取り−書き込みコンフリクトが検出される場合(即ち、そのような重複が存在する場合)、要求されたトランザクションは、拒否され得る。
要求されたトランザクションのシーケンシング制約が満たされるどうかを判定するため、描写された実施形態において、シーケンシングチェックデリミタ2320に対応するシーケンス番号で始まり、直前のコミット記録2352Fで終わる別のCRセット2359が識別され得る。ログサービスは、必要とされる署名2322A及び2322Bと一致するシーケンシング署名を有するそれぞれのコミット記録がCRセット2359内に存在することを検証する必要があり得る。必要とされる署名2322のうちの少なくとも1つがCRセット2259内で見つかる場合、シーケンシング制約は破られ得、読み取り−書き込みコンフリクトが検出されなかったとしても、要求されたトランザクションは拒否され得る。両方のシーケンシング署名がCRセット2359内で見つかる場合、かつ読み取り−書き込みコンフリクトが検出されない場合、トランザクションは、コミットを受理され得る。
CR2352内(及びTRD2344内)に格納されるシーケンシング署名は、異なる実施形態において、様々な技術を使用して生成され得る。いくつかの実施形態において、それらは、トランザクションの書き込みセットから生成され得、別の実施形態において、シーケンシング署名は、他の因子に少なくとも部分的に基づき得る。例えば、要求しているクライアントのアイデンティティが、いくつかの実施形態において、書き込み署名に加えてシーケンシング署名内にエンコードされ得るか、トランザクションが要求された時間が、シーケンシング署名内にエンコードされ得るか、またはトランザクションが要求された場所の指標がエンコードされ得る、などである。いくつかの実施形態において、シーケンシング署名を表すための、書き込みセット署名とは異なる技術の使用に関して、上記のような同様の検討事項が適用され得る。したがって、いくつかの実施形態において、シーケンシング署名及び書き込みセット署名の両方が同じ基礎となる書き込み場所に由来するとしても、書き込みセット記述子内容を生成するために使用されるものとは異なる技術を使用して、シーケンシング署名を生成し得る。例えば、異なるハッシュ関数または異なるハッシュ値サイズが使用され得る。他の実施形態において、しかしながら、書き込みセット記述子は、読み取り−書き込みコンフリクト検出及びシーケンシング施行の両方の目的のために使用され得る(例えば、別個のシーケンシング署名は使用され得ない)。同様に、いくつかの実施形態において、同じシーケンス番号値が、読み取り−書き込みコンフリクトチェックデリミタ及びシーケンシングチェックデリミタとして使用され得る。即ち、読み取り−書き込みコンフリクトを調査されるコミット記録のセットは、シーケンシングもチェックされ得る。いくつかの場合において、書き込みセットとは無関係の任意の番号または文字列が、シーケンシング署名として使用され得る。少なくとも1つの実施形態において、制約記述子は、LCタイプフィールドを含まない場合があり、むしろ、制約の種類は、トランザクション要求内の制約記述子の部分によって示され得る。いくつかの実施形態において、例えば、LCタイプフィールドを使用する代わりに、「必須」フラグがシーケンシング署名と関連付けられ得、「排除」フラグが重複排除署名と関連付けられ得る。読み取り−書き込みコンフリクトチェックデリミタの文脈において先に述べたように、いくつかの実施形態において、CSN下限だけを指定するのではなく、制約チェックを調査されなければならないコミット記録の範囲を示すために、CSN上限もトランザクション要求記述子内で指定され得る。
いくつかの実施形態において、図23に示されるよりも複雑なシーケンシング制約が施行され得る。例えば、要求されたトランザクションのコミットの前にトランザクションT1及びT2の両方がコミットされていなければならない(任意の順番で)ことを検証するようにログサービスに単に要求するのではなく、クライアントは、T1がT2の前にコミットされていなければならないことを要求することが可能であり得る。同様に、いくつかの実施形態において、クライアントは、例えば、トランザクション{T1,T2,Tk}のいくつかのセットが要求されたトランザクションの前に何らかの指定された順番で(または任意の順番で)コミットされていなければならないこと、またトランザクション{Tp,Ts}の何らかの他のセットがコミットされていてはならないこと、といった否定順番要件を要求することが可能であり得る。
図22及び図23では、1種類の論理制約が、示されるトランザクション要求内に示される。いくつかの実施形態において、クライアントは、いくつかの異なる種類の論理制約を様々なトランザクションに施行することを望み得る。図24は、少なくともいくつかの実施形態に従う、複数の論理制約記述子を含むトランザクション要求記述子の実施例を示す。1つのシーケンシング制約が適用されることになり、1つの重複排除制約がトランザクション記述子2444によって表される同じ要求されたトランザクションのために適用されることになる。描写された実施形態において、読み取り及び書き込みセット記述子は、読み取られるまたは書き込まれる各データアイテムのために32ビット(4バイト)ハッシュ値を含む。例えば、4バイトの読み取りハッシュ署名2464A及び2464Bのそれぞれは、読み取りセット記述子2404内の2つのデータアイテム場所を表し得、4バイトの書き込みハッシュ署名2465A及び2465Bのそれぞれは、トランザクションがコミットされる場合に書き込みのターゲットとされる2つの場所を表すために、書き込みセット記述子2406に含まれ得る。読み取り−書き込みコンフリクトチェックデリミタ2402は、そのコミット記録が要求されたトランザクションとの読み取り−書き込みコンフリクトをチェックされるべき永続的な変更ログ内のシーケンス番号の範囲の下限を選択するために使用されることになる。
トランザクション要求記述子2444はまた、描写された実施形態において、シーケンシング制約記述子2408A及び重複排除制約記述子2408Bを含み得る。シーケンシング制約記述子2408Aは、制約タイプフィールド2409A、シーケンシングチェックデリミタ2410、ならびにトランザクション(そのコミットは、要求されたトランザクションが受理されるために、完了されていなければならない)に対応する2412A及び2412Bなどの1つ以上の必要とされるシーケンシング署名を含み得る。重複排除制約記述子2408Bは、制約タイプフィールド2409B、重複排除チェックデリミタ2420、及び重複排除排他署名2422を含み得る。
示されるように、描写された実施形態において、必要とされるシーケンシング署名2412A、2412B、及び重複排除署名2422はそれぞれ、128ビット(16バイト)ハッシュ署名2466A、2466B、及び2467を含み得る。故に、論理制約署名はそれぞれ、描写された実施例では、読み取り及び書き込みセット署名のためにデータアイテムごとに使用されるものよりも4倍多くのビットを占有し得、それが、読み取り−書き込みコンフリクト検出のために実行される比較に対して、論理制約関連の比較のためのハッシュ衝突の数を低減するのに役立ち得る。いくつかの実施形態において、MD5などの暗号ハッシュ関数が、シーケンシング及び/または重複排除署名のために使用され得る。暗号ハッシュ関数の使用は、少なくともいくつかのそのような実施形態において、論理制約の評価におけるエラーの可能性をゼロ近くに低減するのに役立ち得る。偽陽性ハッシュ衝突(例えば、偽陽性読み取り−書き込みコンフリクト検出)に基づくトランザクション拒否のかなり低い割合は許容であり得るが、少なくともいくつかのクライアントは、偽陽性ハッシュ衝突に起因してトランザクションの受理を回避することについてはるかに懸念し得(例えば、コミットシーケンシングの場合)、暗号強度ハッシュ関数の使用が、そのような誤ったトランザクション受理を回避するのに役立ち得る。いくつかの実施態様において、クライアントは、複製検出のため及び/またはシーケンシングの目的のために使用されるべきハッシュ関数を選択することが可能であり得る。いくつかの実施形態において、図24に示されるものとは異なるハッシュ関数及び/またはハッシュ値の長さが、重複排除署名、シーケンシング署名、及び/または読み取りもしくは書き込み署名のために使用され得、例えば、重複排除及びシーケンシング署名は、サイズが異なり得る。少なくともいくつかの実施形態において、読み取られるまたは書き込まれるデータアイテムのアドレスが、例えば、アドレスから生成されるハッシュ値を使用する代わりに、読み取り/書き込みセット署名、重複排除、及び/またはシーケンシング署名のために使用され得る。一実施形態において、重複排除及び/または書き込み署名は、データが書き込まれる場所に加えて、またはその代わりに、書き込みペイロードに由来し得る。
いくつかの実施形態において、データ完全性/妥当性制約または期限付きコミット制約など、追加の論理制約もトランザクション要求記述子内に指定され得る。例示的なデータ完全性または妥当性制約は、例えば、ある特定の値V1が、異なる値V2がDS1または何らかの他のデータストアのいずれかにすでに格納されている場合、データストアDS1にのみ格納され得ることを要求し得る。データ妥当性制約は、指定したデータタイプまたはデータアイテムが格納される許容範囲を(無条件、または指定されたデータストア場所に格納される値を条件とするかのいずれかで)定義し得る。期限付きコミット制約は、トランザクションのコミットがいつまでに完了されるべきかの期限を示し得、その期限が満たされない場合にはトランザクションは放棄または中断されなければならないという意図を有する。
図25は、少なくともいくつかの実施形態に従う、1つ以上の論理制約を示すトランザクション要求に応答してログサービスで実行され得る動作の態様を示すフロー図である。描写された実施形態において、所与のトランザクションのコミット要件は、並行性制御要件(例えば、上記の種類の読み取り−書き込みコンフリクトが見つからないという要件)、ならびに論理制約要件を含み得る。少なくともいくつかの実施形態において、重複排除及びシーケンシング論理制約の両方が単一のトランザクションのためにサポートされ得る(他の論理制約もサポートされ得るが、重複排除及びシーケンシングに関する動作のみが図25には示される)。要素2501に示されるように、トランザクションT1の1つ以上の論理制約記述子を含むトランザクション要求記述子は、ログサービスの特定の永続的な変更ログインスタンスと関連付けられたコンフリクト検出器で受信され得る。描写された実施形態において、各論理記述子では、対応するチェックデリミタが指定されて、分析されるべきコミット記録のセットを選択して、論理制約が満たされるか、破られるかを判定するために使用され得る。1つ以上の署名のそれぞれのセットはまた、各論理制約について指定され得る。要求されたトランザクションの読み取り及び書き込みセットも、読み取り−書き込みコンフリクトチェックデリミタと一緒に示され得る。先に述べたように、いくつかの実施形態において、読み取り−書き込みコンフリクトをチェックするために使用されるものと同じデリミタが、1つ以上の論理制約のために使用され得る。また、少なくとも1つの実施形態において、別個の署名は、論理制約に必要とされ得ず、むしろ、例えば、書き込みセット署名は、重複排除及び/またはシーケンシング署名として使用され得る。
読み取り−書き込みコンフリクトチェックデリミタを使用することにより、描写された実施形態において、分析されるべきコミット記録CRS1の第1のセットは識別され得る。そのようなセットは、例えば、シーケンス番号が、読み取り−書き込みコンフリクトチェックデリミタで始まり、直前に格納されたコミット記録のシーケンス番号まで(またはトランザクション要求に示される異なる上限まで)の範囲にあるそれらのコミット記録を含み得る。読み取り−書き込みコンフリクトが検出される場合(要素2504)(例えば、CRS1のコミット記録のうちのいずれかの書き込みセットが要求されたトランザクションの読み取りセットと重複する場合)、トランザクションは拒否/中断され得る(要素2531)。読み取り−書き込みコンフリクトをチェックすることはまた、本明細書では、要求されたトランザクションが並行性制御要件を満たすことを検証することと見なされ得る。いくつかの実施形態において、トランザクション要求がそこから受信されるクライアントは、トランザクションが中断されたことを通知され得る。
描写された実施形態において、読み取り−書き込みコンフリクトが検出されない場合(要素2504に対応する動作においても)、対応する記述子によって示される論理制約のそれぞれが、シーケンス内でチェックされ得る。シーケンス内の次の論理制約記述子が調査され得、新しいコミット記録セットCRS−kが、制約と関連付けられたチェックデリミタに基づいた制約分析のために選択され得る(要素2507)。例えば、CRS−kは、デリミタで始まりかつ最大の記録済みコミットシーケンス番号で終わる(またはトランザクション要求に示される異なる上限までの)範囲内のシーケンス番号を有するすべてのコミット記録を含み得る。実行されるべき分析は、論理制約記述子のタイプに基づき得る。重複排除制約がチェックされることになる場合、及び重複がCDR−kの重複排除署名及び要求されたトランザクションの比較によって見つかる場合(要素2510)、トランザクションはまた、拒否/中断され得る(要素2531)。制約が重複排除制約であり、かつ重複が見つからない場合(要素2510においても検出されるように)、及びより多くの論理制約がまだ分析されていない場合、次の論理制約記述子が調査され得、要素2507前に対応する動作が次の論理記述子に対して繰り返され得る。
制約記述子が、コミットされたトランザクションの1つ以上の必要とされる署名を示すシーケンシング制約を示す場合、シーケンシング制約のためのCRS−kは、必要とされる署名がコミットが完了したトランザクションのために実際に格納されていることを確実にするために調査され得る。必要とされるトランザクションのコミット記録が見つからない場合(要素2513において検出されるように)、要求されたトランザクションも中断/拒否され得る(要素2531)。必要とされるトランザクションのコミット記録が見つかる場合(要素2513に対応する動作にもあるように)、シーケンシング制約処理は完了し得る。読み取り−書き込みコンフリクト検出の場合、少なくともいくつかの実施形態において、論理制約チェックはまた、比較のためのハッシュ関数を使用して実施され得るため、コミット記録セットのスキャンのオーバーヘッドを回避する。任意の論理制約記述子が残っている場合(要素2516)、それらは順に調査され得る。論理制約記述子が残っていない場合(要素2516においても検出されるように)、トランザクションは、コミットを受理され得る。トランザクションのコミット記録を永続ストレージに保存するためのプロシージャは、描写された実施形態において、例えば、複製DAGのいくつかのノードで開始され得る(要素2519)。複製が成功した場合(例えば、コミット記録の十分な数のコピーがそれぞれのストレージデバイスに無事に格納される場合)(要素2522において検出されるように)、トランザクションのコミットは、完了したと見なされ得る。何らかの理由で必要とされる数のレプリカが格納されない場合、トランザクションは依然として拒否/中断され得る(要素2531)。いくつかの実施形態において、トランザクションが無事にコミットされたという通知が、要求しているクライアントに伝送され得る(要素2525)。
いくつかの実施形態において、1つを超える論理制約をチェックするための動作は、むしろ並行して実行され得る。一実施形態において、読み取り−書き込みコンフリクトチェック及び論理制約チェックの任意の組み合わせが並行して実行され得る。いくつかの実施形態において、示される論理制約のそれぞれに関する応答は、制約のうちの1つ以上が満たされないとしても、要求しているクライアントに提供され得る。例えば、重複排除制約及びシーケンシング制約を有するトランザクション要求の場合、シーケンシング制約は、重複排除制約が満たされないとしてもチェックされ得、両方の制約の評価の結果がクライアントに提供され得る。いくつかの実施態様において、クライアントは、所与のトランザクション要求の論理制約の指定されたサブセットまたはすべてがチェックされることを明示的に要求することが可能であり得る。
様々な実施形態において、図6、7、8、9、10、12、13、14、19、20、及び25のフロー図に示されるもの以外の動作が、上記のアプリケーション状態管理、連携停止、並行性制御、及び論理制約管理の技術のうちの少なくともいくつかを実装するために使用され得ることに留意されたい。示される動作のうちのいくつかは、いくつかの実施形態において実装されない場合があるか、異なる順番で、または連続的ではなく並行して実装される場合がある(図25に関して上に示されるように)。
使用事例
ログベースのトランザクション管理など、複製DAGを使用してアプリケーション状態変更を管理する上記の技術は、様々な実施形態において有用であり得る。ますます多くの組織が、自らのコンピューティングをプロバイダネットワーク環境へ移動させるようになり、それぞれの一貫性セマンティクス及びそれぞれのインターフェースを有するより多くの種類の分散ストレージアプリケーションが開発されている。一部の大規模アプリケーションは、複数のデータストアインスタンスにわたり得、複製DAG及びログベースのトランザクション管理技術は、分散ストレージアプリケーション管理に対する統一された、柔軟性のある、スケーラブルかつ高可用性のアプローチを表し得る。DAG構成のそれぞれのビューが少なくとも一時的に発散するにもかかわらずアプリケーション状態遷移を進行させるという複製DAGノードの能力は、あまり動的でない複製技術が使用される場合に起こり得るアプリケーション要求の処理における「Stop−the−world」停止のうちの少なくともいくつかを低減または排除し得る。ログベースのトランザクション管理は、クロス−データ−ストアトランザクション(ならびに原子性マルチ書き込みトランザクションをサポートしない場合のある、データストアのためのマルチアイテムトランザクション)を許可し得るだけでなく、自動化されたクエリ応答生成、スナップショット生成など等の機能を促進し得る。複数のデータストアにわたってデータ分析を実行する全く新しい方法は、ログサービスの独自の読み取りインターフェースを使用して可能になり得る。
いくつかのプロバイダネットワーク環境において、複製DAGを介したログベースのトランザクション管理は、仮想化コンピューティングサービス、ストレージサービス、またはデータベースサービスなど、プロバイダネットワークに実装される別のネットワークアクセス可能なサービスの制御プレーン構成情報を格納するために使用され得る。そのようなシナリオにおいて、ログを使用して管理されるトランザクションは、ネットワークアクセス可能なサービス(コンピュートインスタンス、または仮想コンピューティングサービスの場合には仮想化ホストなど)の様々なリソースの構成に対する変更を表し得る。
例示的なコンピュータシステム
少なくともいくつかの実施形態において、複製DAGの様々なコンポーネント及び/またはトランザクション管理のためのログサービスを実装するための技術を含む、本明細書に記載される技術のうちの1つ以上の一部分またはすべてを実装するサーバは、1つ以上のコンピュータアクセス可能な媒体を含む、またはそれにアクセスするように構成される汎用コンピュータシステムを含み得る。図26は、そのような汎用コンピューティングデバイス9000を示す。示された実施形態において、コンピューティングデバイス9000は、入力/出力(I/O)インターフェース9030を介してシステムメモリ9020(非揮発性及び揮発性両方のメモリモジュールを含み得る)に連結される1つ以上のプロセッサ9010を含む。コンピューティングデバイス9000は、I/Oインターフェース9030に連結されるネットワークインターフェース9040をさらに含む。
様々な実施形態において、コンピューティングデバイス9000は、1つのプロセッサ9010を含むユニプロセッサシステム、またはいくつかのプロセッサ9010(例えば、2つ、4つ、8つ、または他の好適な数)を含むマルチプロセッサシステムであり得る。プロセッサ9010は、命令を実行することが可能な任意の好適なプロセッサであり得る。例えば、様々な実施形態において、プロセッサ9010は、様々な命令セットアーキテクチャ(ISA)、例えば、x86、PowerPC、SPARC、もしくはMIPS ISA、または任意の他の好適なISA、のいずれかを実装する汎用または組込みプロセッサであり得る。マルチプロセッサシステムにおいて、プロセッサ9010のそれぞれは、共通して同じISAを実装し得るが、必ずしもそうであるとは限らない。いくつかの実施態様において、グラフィック処理ユニット(GPU)が、従来のプロセッサの代わりに、またはそれに加えて、使用され得る。
システムメモリ9020は、プロセッサ(複数可)9010によってアクセス可能な命令及びデータを格納するように構成され得る。少なくともいくつかの実施形態において、システムメモリ9020は、揮発性及び非揮発性両方の部分を含み得、他の実施形態においては、揮発性メモリのみが使用され得る。様々な実施形態において、システムメモリ9020の揮発性部分は、スタティックランダムアクセスメモリ(SRAM)、同期型ダイナミックRAM、または任意の他のタイプのメモリなど、任意の好適なメモリ技術を使用して実装され得る。システムメモリ(例えば、1つ以上のNVDIMMを含み得る)の非揮発性部分には、いくつかの実施形態において、NANDフラッシュデバイスなど、フラッシュベースのメモリデバイスが使用され得る。少なくともいくつかの実施形態において、システムメモリの非揮発性部分は、スーパーキャパシタまたは他の蓄電デバイス(例えば、バッテリ)などの動力源を含み得る。様々な実施形態において、メモリスタベースの抵抗変化型ランダムアクセスメモリ(ReRAM)、3次元NAND技術、強誘電RAM、磁気抵抗RAM(MRAM)、または相変化メモリ(PCM)の様々なタイプのうちのいずれかが、少なくともシステムメモリの非揮発性部分に使用され得る。示された実施形態において、上に記載される方法、技術、及びデータなどの1つ以上の所望の機能を実装するプログラム命令及びデータは、コード9025及びデータ9026としてシステムメモリ9020内に格納されて示される。
一実施形態において、I/Oインターフェース9030は、プロセッサ9010と、システムメモリ9020と、ネットワークインターフェース9040または様々なタイプの永続的及び/もしくは揮発性ストレージデバイスなどの他の周辺インターフェースを含む、デバイス内の任意の周辺デバイスとの間のI/Oトラフィックを調整するように構成され得る。いくつかの実施形態において、I/Oインターフェース9030は、任意の必須プロトコル、タイミング、または他のデータ変換を実行して、データ信号を1つのコンポーネント(例えば、システムメモリ9020)から、別のコンポーネント(例えば、プロセッサ9010)による使用に好適なフォーマットに変換し得る。いくつかの実施形態において、I/Oインターフェース9030は、例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス規格またはユニバーサルシリアルバス(USB)規格の変種など、様々なタイプの周辺バスを介して接続されるデバイスのサポートを含み得る。いくつかの実施形態において、I/Oインターフェース9030の機能は、例えばノースブリッジ及びサウスブリッジなど、2つ以上の別個のコンポーネントに分かれ得る。また、いくつかの実施形態において、システムメモリ9020へのインターフェースなど、I/Oインターフェース9030の機能性の一部またはすべてが、プロセッサ9010内に直接組み込まれ得る。
ネットワークインターフェース9040は、コンピューティングデバイス9000と、例えば、図1〜図25に示されるような他のコンピュータシステムまたはデバイスなどの、ネットワーク(複数可)9050に接続される他のデバイス9060との間でデータが交換されることを可能にするように構成され得る。様々な実施形態において、ネットワークインターフェース9040は、例えば、イーサネット(登録商標)ネットワークのタイプなど、任意の好適な有線または無線一般データネットワークを介した通信をサポートし得る。加えて、ネットワークインターフェース9040は、アナログボイスネットワークまたはデジタルファイバー通信ネットワークなどの電気通信/テレフォニーネットワークを介した通信、ファイバーチャネルSANなどのストレージエリアネットワークを介した通信、または任意の他の好適なタイプのネットワーク及び/もしくはプロトコルを介した通信をサポートし得る。
いくつかの実施形態において、システムメモリ9020は、対応する方法及び装置の実施形態を実装するための図1〜図25に関して上に記載されるようなプログラム命令及びデータを格納するように構成されるコンピュータアクセス可能な媒体の一実施形態であり得る。しかしながら、他の実施形態において、プログラム命令及び/またはデータは、異なるタイプのコンピュータアクセス可能な媒体上で受信、送信、または格納され得る。一般的に言えば、コンピュータアクセス可能な媒体は、磁気または光媒体などの非一時的なストレージ媒体またはメモリ媒体、例えば、I/Oインターフェース9030を介してコンピューティングデバイス9000に連結されるディスクまたはDVD/CDを含み得る。非一時的なコンピュータアクセス可能なストレージ媒体はまた、RAM(例えば、SDRAM、DDR SDRAM、RDRAM、SRAMなど)、ROMなど、コンピューティングデバイス9000のいくつかの実施形態において、システムメモリ9020または別のタイプのメモリとして含まれ得る、任意の揮発性または非揮発性媒体を含み得る。さらに、コンピュータアクセス可能な媒体は、ネットワークインターフェース9040を介して実装され得るものなど、ネットワーク及び/または無線リンクなどの通信媒体を介して伝えられる、電気、電磁気、もしくはデジタル信号などの伝送媒体または信号を含み得る。図26に示されるものなどの複数のコンピューティングデバイスの部分またはすべては、様々な実施形態において記載された機能性を実装するために使用され得、例えば、様々な異なるデバイス及びサーバで実行するソフトウェアコンポーネントは、連携して機能性を提供し得る。いくつかの実施形態において、記載された機能性の部分は、汎用コンピュータシステムを使用して実装されることに加えて、またはその代わりに、ストレージデバイス、ネットワークデバイス、または専用コンピュータシステムを使用して実装され得る。「コンピューティングデバイス」という用語は、本明細書で使用される場合、少なくともこれらのタイプのデバイスすべてを指し、これらのタイプのデバイスに限定されない。
先述の実施形態は、以下の条項に鑑みてよりよく理解され得る。
1.システムであって、
データアクセスインターフェースの第1のセットを実装する第1のデータストア及びデータアクセスインターフェースの第2のセットを実装する第2のデータストアを含む、プロバイダネットワークで実装されるマルチデータベースログサービスを介したトランザクション管理のための複数のデータストアを登録するための要求に応答して、前記ログサービスの特定の永続的な変更ログを指定して、前記複数のデータストアのうちの1つ以上のデータストアに向けられる書き込みの表現を格納することと、
前記マルチデータベースログサービスのコンフリクト検出器で、クライアントによって要求されるトランザクションの表現を受信することであって、前記トランザクションが、前記第1のデータストアに向けられる少なくとも第1の書き込み動作、及び前記第2のデータストアに向けられる少なくとも第2の書き込み動作を含む、受信することと、
前記コンフリクト検出器で、少なくとも部分的に前記表現の内容、及び少なくとも部分的に前記特定の永続的な変更ログの内容に基づいて、前記トランザクションがコミットされることを判定することと、
前記マルチデータベースログサービスの前記特定の永続的な変更ログに、前記トランザクションを示す1つ以上のログ記録を追加することと、
前記第1の書き込み動作を前記第1のデータストアに、及び前記第2の書き込み動作を前記第2のデータストアに適用することと、
前記データアクセスインターフェースの第1のセットを使用した前記第1のデータストアに向けられる第1のクエリに応答して、前記第1の書き込み動作の結果を含む第1の応答を提供することと、
前記データアクセスインターフェースの第2のセットを使用した前記第2のデータストアに向けられる第2のクエリに応答して、前記第2の書き込み動作の結果を含む第2の応答を提供することと、
前記マルチデータベースログサービスによって定義されるプログラムクエリインターフェースを介した前記ログサービスに向けられる第3のクエリに応答して、前記第1の書き込み動作及び前記第2の書き込み動作のうちの1つ以上の結果を含む第3の応答を提供することと、を行うように構成される、1つ以上のコンピューティングデバイスを含む、前記システム。
2.前記第1のデータストア及び前記第2のデータストアの各データストアが、非リレーショナルデータベースシステム、リレーショナルデータベースシステム、非構造化データオブジェクトへのアクセスを許可するウェブサービスインターフェースを実装するストレージサービス、インメモリデータベース、または分散キャッシュのインスタンスのうちの1つを含む、条項1に記載の前記システム。
3.前記特定の永続的な変更ログが、複数のレプリカノードを含み、前記複数のレプリカノードの各ノードが、それぞれのストレージデバイスに前記1つ以上のログ記録のログ記録のレプリカを格納する、条項1に記載の前記システム。
4.前記1つ以上のコンピューティングデバイスが、
少なくとも前記第1の書き込み動作の前記結果に従ってマテリアライズドビューを更新するようにさらに構成される、条項1に記載の前記システム。
5.前記1つ以上のコンピューティングデバイスが、
少なくとも前記第1の書き込み動作の前記結果に少なくとも部分的に基づいて、第4のクエリの事前計算された結果を生成することと、
前記第4のクエリの受信に応答して、前記事前計算された結果を提供することと、を行うようにさらに構成される、条項1に記載の前記システム。
6.1つ以上のコンピューティングデバイスによって、
データアクセスインターフェースの第1のセットを実装する第1のデータストアを含む1つ以上のデータストアに向けられる書き込みの表現を格納するために、特定の永続的な変更ログをインスタンス化することと、
前記第1のデータストアのクライアントによって要求されるトランザクションの表現を受信することであって、前記トランザクションが、前記第1のデータストアに格納されるデータオブジェクトに向けられる少なくとも第1の書き込みを含む、受信することと、
少なくとも部分的に前記表現の内容、及び少なくとも部分的に前記特定の永続的な変更ログの内容に基づいて、前記要求されたトランザクションがコミットされることを判定することと、
前記特定の永続的な変更ログに、前記第1の書き込みを示すログ記録を追加することと、
前記第1の書き込みの指標を前記特定の永続的な変更ログから前記第1のデータストアに伝播することと、を実行することを含む、方法。
7.前記第1のデータストアが、1つを超える書き込みを含む動作のセットの原子性をサポートせず、前記クライアントによって要求される前記トランザクションが、第2のデータオブジェクトに向けられる第2の書き込みを含み、前記1つ以上のコンピューティングデバイスによって、
前記要求されたトランザクションがコミットされることを判定した後、
前記特定の永続的な変更ログに、前記第2の書き込みの指標を追加することと、
前記第2の書き込みの指標を前記第1のデータストアに伝播することと、を実行することをさらに含む、条項6に記載の前記方法。
8.前記特定の永続的な変更ログが、複数のレプリカノードを含み、前記複数のレプリカノードの各ノードが、それぞれのストレージデバイスに前記ログ記録のレプリカを格納する、条項6に記載の前記方法。
9.前記複数のレプリカノードの各レプリカノードが、有向非巡回グラフ(DAG)メンバーシップ変更メッセージを前記複数のレプリカノードに伝播することを担う関連DAG構成マネージャを有するDAGのメンバーである、条項8に記載の前記方法。
10.前記複数のレプリカノードが、プロバイダネットワークの第1のデータセンターに第1のレプリカノード、及び前記プロバイダネットワークの第2のデータセンターに第2のレプリカノードを含む、条項8に記載の前記方法。
11.前記1つ以上のコンピューティングデバイスによって、
前記第1の書き込みの前記結果に従ってマテリアライズドビューを更新することを、実行することをさらに含む、条項6に記載の前記方法。
12.前記1つ以上のコンピューティングデバイスによって、
前記第1の書き込みの前記結果に少なくとも部分的に基づいて、クエリの事前計算された結果を生成することと、
前記クエリを受信することに応答して、前記事前計算された結果を提供することと、を実行することをさらに含む、条項6に記載の前記方法。
13.前記1つ以上のコンピューティングデバイスによって、
ログサービスによるトランザクション管理のための前記1つ以上のデータストアを登録するための要求を受信することを、実行することをさらに含み、前記特定の永続的な変更ログを前記インスタンス化することが、前記1つ以上のデータストアを登録するための前記要求に応答する、条項6に記載の前記方法。
14.前記1つ以上のコンピューティングデバイスによって、
前記データアクセスインターフェースの第1のセットを使用した前記第1のデータストアに向けられる第1のクエリに応答して、前記第1の書き込みの結果を含む応答を提供することと、
ログサービスのプログラムクエリインターフェースを介した前記特定の永続的な変更ログに向けられる第2のクエリに応答して、前記第1の書き込みの結果を含む第2の応答を提供することと、を実行することをさらに含む、条項6に記載の前記方法。
15.前記第1のデータストアが、プロバイダネットワークに実装されるネットワークアクセス可能なサービスの制御プレーン構成情報を含み、前記トランザクションが、前記ネットワークアクセス可能なサービスの特定のリソースの構成に対する変更を含む、条項6に記載の前記方法。
16.前記1つ以上のコンピューティングデバイスによって、
前記特定の永続的な変更ログと関連付けられたスナップショットマネージャによって、前記特定の永続的な変更ログの少なくとも一部分の内容のポイントインタイムスナップショットを格納することを、実行することをさらに含む、条項6に記載の前記方法。
17.プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、1つ以上のプロセッサ上で実行されるとき、
ログサービスで、クライアントによって要求されるトランザクションの表現を受信することであって、前記トランザクションが、第1のデータストアに格納されるデータオブジェクトに向けられる少なくとも第1の書き込みを含む、受信することと、
少なくとも部分的に前記表現の内容に基づいて、及び、少なくとも部分的に特定の永続的な変更ログの内容に基づいて、前記要求されたトランザクションがコミットされることを判定することと、
前記特定の永続的な変更ログに、前記第1の書き込みを示すログ記録の挿入を開始することと、
前記第1の書き込みを前記第1のデータストアに伝播することと、を行う、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
18.前記クライアントによって要求される前記トランザクションが、第2のデータオブジェクトに向けられる第2の書き込みを含み、前記1つ以上のコンピューティングデバイスによって、
前記要求されたトランザクションがコミットされることを判定した後、
前記特定の永続的な変更ログに、前記第2の書き込みの指標の挿入を開始することと、
前記第2の書き込みを送り先のデータストアに伝播することと、を行うことをさらに含む、条項17に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
19.前記送信先データストアが前記第1のデータストアであり、前記第1のデータストアが、1つを超える書き込み動作を含む動作のセットの原子性をサポートしない、条項18に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
20.前記送信先データストアが、前記第1のデータストアとは異なるアクセスインターフェースを有する第2のデータストアである、条項18に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
21.前記特定の永続的な変更ログが、複数のレプリカノードを含み、前記複数のレプリカノードの各レプリカノードが、それぞれのストレージデバイスに前記ログ記録のレプリカを格納する、条項17に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
22.前記複数のレプリカノードの各レプリカノードが、有向非巡回グラフ(DAG)メンバーシップ変更メッセージを前記複数のレプリカノードに伝播することを担う関連DAG構成マネージャを有するDAGのメンバーである、条項21に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
加えて、先述の実施形態はまた、以下の追加条項に鑑みてよりよく理解され得る。
1.システムであって、
特定のアプリケーションの状態情報を複製するために複数のノードを含む状態複製グループ(SRG)をインスタンス化することであって、前記SRGの少なくともいくつかのノードが、前記アプリケーションのそれぞれのコミット記録セットを格納し、コミット記録セットの各コミット記録が、前記アプリケーションの状態遷移が他の状態遷移に対してコミットされた順番を示すコミットシーケンス番号(CSN)を含み、前記SRGが、要求された状態遷移をコミットするように構成されるコミッタノードを含む、インスタンス化することと、
前記コミッタノードで、閾値条件が満たされたという検出に応答して、前記SRGの状態遷移処理動作が停止されるべきであるという判定することと、
前記コミッタノードから前記SRGのフォールトトレラント構成マネージャに、前記コミッタノードに格納される前記コミット記録セットの前記CSNの中で最大のコミットシーケンス番号(HCSN)を示す停止要求を伝送することと、
それぞれの停止コマンドを前記構成マネージャから第2のノードを含む前記SRGの1つ以上の他のノードに伝送することであって、前記停止コマンドが前記HCSNを示す、伝送することと、
前記構成マネージャから停止コマンドを受信することに応答して、前記第2のノードで状態遷移処理動作を停止することと、
前記第2のノードによって、前記第2のノードのコミット記録セットが前記HCSNを有するコミット記録を含むことを検証することと、
前記コミッタノード及び前記第2のノードによって、再稼働メッセージが前記構成マネージャから受信されるまで、状態遷移動作のこれ以上の処理を延期することと、を行うように構成される1つ以上のコンピューティングデバイスを含む、前記システム。
2.前記閾値条件が満たされたという前記検出が、メトリックが許容範囲外であるという判定を含み、前記メトリックが、(a)前記SRGの稼働ノードの数、(b)前記SRGの選択されたノードで前記フォールトトレラント構成マネージャから受信されるSRG構成−デルタメッセージの速度、または(c)前記SRGの選択されたノードへのクライアント接続の数のうちの1つ以上を含む、条項1に記載の前記システム。
3.前記1つ以上のコンピューティングデバイスが、
前記第2のノードによって、前記フォールトトレラント構成マネージャから前記停止コマンドを受信することに応答して、前記第2のノードにおける前記コミット記録セットが、HCSNを含むコミット記録を含まないことを判定することと、
前記第2のノードによって、前記コミッタノードから、前記HCSNを含むコミット記録を含む1つ以上のコミット記録を要求することと、を行うようにさらに構成される、条項1に記載の前記システム。
4.前記第2のノードが、特定のホストでの第1の実行スレッドを含み、前記1つ以上のコンピューティングデバイスが、
前記HCSNを含む前記コミット記録が前記第2のノードのコミット記録セットに格納されることを検証した後に、前記第1の実行スレッドを再起動するようにさらに構成される、条項1に記載の前記システム。
5.前記1つ以上のコンピューティングデバイスが、
前記フォールトトレラント構成マネージャによって、前記停止コマンドが送信された後に、そのコミット記録が前記HCSNまで更新された利用可能なSRGノードの数が閾値を超えることを判定することと、
前記フォールトトレラント構成マネージャによって、そのコミット記録セットが前記HCSNまで更新された各ノードに、前記SRGのターゲットとされた構成の表現を含むそれぞれの再稼働要求を伝送することと、を行うようにさらに構成される、条項4に記載の前記システム。
6.1つ以上のコンピューティングデバイスによって、
複数のノードを含む状態複製グループ(SRG)の状態遷移処理動作が停止されるべきであると判定することであって、前記SRGが、アプリケーションのそれぞれのコミット記録セットを含む状態情報を複製するために指定され、前記コミット記録セットの各コミット記録が、前記アプリケーションの前記対応する状態遷移が前記SRGでコミットされた順番を示す関連コミットシーケンス番号(CSN)を有する、判定することと、
前記SRGの1つ以上のノードのコミット記録セットがそこまで同期されるターゲットCSNを識別することと、
ぞれぞれの停止コマンドを前記SRGの構成マネージャから前記SRGの前記1つ以上の他のノードに伝送することであって、前記停止コマンドが前記ターゲットCSNを示す、伝送することと、
前記1つ以上の他のノードの特定のノードによって、前記ターゲットCSNに対応するコミット記録が、前記特定のノードのコミット記録セットに格納されることを検証することと、
前記特定のノードによって状態遷移処理動作を停止することと、を行うことを含む、方法。
7.前記SRGの前記状態遷移処理動作が停止されるべきであると前記判定することが、メトリックが許容範囲外であるという検出に応答し、前記メトリックが、(a)前記SRGの稼働ノードの数、(b)前記SRGの選択されたノードで前記構成マネージャから受信されるSRG構成−デルタメッセージの速度、または(c)前記SRGの選択されたノードへのクライアント接続の数のうちの1つ以上を含む、条項6に記載の前記方法。
8.前記SRGの前記状態遷移処理動作が停止されるべきであると前記判定することが、前記SRGのコミッタノードで実行され、前記コミッタノードが、前記アプリケーションの1つ以上の要求された状態遷移をコミットすることを担い、前記ターゲットCSNが、前記コミッタノードの前記コミット記録セットの前記CSNの中で最大のCSNである、条項6に記載の前記方法。
9.前記1つ以上のコンピューティングデバイスによって、前記検証することの前に、
前記特定のノードによって、前記構成マネージャから停止コマンドを受信することに応答して、前記第2のノードにおける前記コミット記録セットが、前記ターゲットCSNに対応するコミット記録を含まないことを判定することと、
前記特定のノードによって、前記SRGの異なるノードから、前記ターゲットCSNに対応するコミット記録を含む1つ以上のコミット記録を要求することと、を実行することをさらに含む、条項6に記載の前記方法。
10.前記特定のノードが、特定のホストで第1の実行スレッドを含み、前記1つ以上のコンピューティングデバイスによって、
前記停止の後に、前記第1の実行スレッドを再起動することを、実行することをさらに含む、条項6に記載の前記方法。
11.前記1つ以上のコンピューティングデバイスによって、
前記検証の後に、前記構成マネージャで、前記特定のノードから、前記特定ノードがそのコミット記録セットを前記ターゲットCSNまで更新したという確認を受信することと、
前記構成マネージャによって、前記SRGの最新ノードのコレクションに前記特定のノードを含めることと、を実行することをさらに含む、条項6に記載の前記方法。
12.前記1つ以上のコンピューティングデバイスによって、
前記停止の後に、前記構成マネージャで、前記SRGの第2の複数のノードから前記それぞれのノードがサービスに利用可能であることを示すそれぞれのメッセージを受信することであって、前記第2の複数のノードが、コミッタノード、前記特定のノード、及び第3のノードを含む、受信することと、
前記構成マネージャによって、前記最新ノードのコレクションを使用して、前記第3のノードのコミット記録セットが、前記ターゲットCSNに対応するコミット記録を含まないことを判定することと、
前記構成マネージャによって、前記第3のノードに、前記ターゲットCSNの指標を伝送することと、を実行することをさらに含む、条項11に記載の前記方法。
13.前記1つ以上のコンピューティングデバイスによって、
前記構成マネージャで、前記第3のノードのコミット記録セットが前記ターゲットCSNまで更新されたという確認を受信することと、
前記構成マネージャによって、そのコミット記録が前記ターゲットCSNまで更新された利用可能なSRGノードの数が閾値を超えることを判定することと、
前記構成マネージャによって、そのコミット記録セットが前記ターゲットCSNまで更新された各ノードに、前記SRGのターゲットとされた構成の表現を含むそれぞれの再稼働要求を伝送することと、を実行することをさらに含む、条項12に記載の前記方法。
14.前記SRGの前記複数のノードが、アクセプタノードからコミッタノードへの複製経路を含む有向非巡回グラフを含み、前記1つ以上のコンピューティングデバイスによって、
前記アクセプタノードで、前記状態遷移処理動作が停止されるべきであると前記判定する前に、前記アプリケーションの特定の状態遷移をコミットするようにクライアントから要求を受信することと、
前記アクセプタノードに、前記特定の状態遷移が複製を受理されたことを示す記録を格納することと、
前記第2のノードから前記複製経路を介して前記コミッタノードに、前記特定の状態遷移をコミットするように前記要求を伝播することと、
前記コミッタノードによって、前記特定の状態遷移を示すそれぞれの記録が格納された前記SRGのノードの数が、複製閾値を超えることを判定することと、
前記コミッタノードに、前記特定の状態遷移に対応するコミット記録を格納することと、を実行することをさらに含む、条項6に記載の前記方法。
15.前記アプリケーションが、データベースサービス、ログサービス、またはプロバイダネットワークサービスの制御プレーンコンポーネントのうちの1つを含む、条項6に記載の前記方法。
16.プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、1つ以上のプロセッサ上で実行されるとき、
状態複製グループ(SRG)の複数のノード間で特定のアプリケーションに関する状態情報を同期させるために使用されるべきターゲットコミットシーケンス番号(CSN)を、前記SRGでのアプリケーション状態遷移処理動作の停止前に、判定することであって、前記複数のノードが、第1のノード及び第2のノードを含み、前記第1及び第2のノードの各ノードが、前記特定のアプリケーションのそれぞれのコミット記録セットを格納し、前記セットの各コミット記録が、前記対応する状態遷移が前記SRGでコミットされた順番を示すそれぞれの関連CSNを有する、判定することと、
前記SRGの構成マネージャによって、永続ストレージデバイスに、前記ターゲットCSNを格納することと、
前記構成マネージャから前記第1のノード及び前記第2のノードのうちの少なくとも1つのノードに、前記ターゲットCSNを示すそれぞれの停止コマンドを伝送することと、
前記第1のノード及び前記第2のノードでの動作のそれぞれの停止の後に、前記第1のノード及び前記第2のノードが動作の再開に利用可能であるという、前記構成マネージャで受信される指標に応答して、
そのコミット記録セットが前記ターゲットCSNに対応するコミット記録を含む前記SRGの利用可能なノードの数が閾値を超えることを検証することと、
再稼働メッセージを、そのコミット記録セットが前記ターゲットCSNに対応するコミット記録を含む利用可能なノードの少なくともサブセットに伝送することと、を行う、前記非一時的なコンピュータアクセス可能なストレージ媒体。
17.前記命令が、前記1つ以上のプロセッサで実行されるとき、
前記アプリケーション状態遷移処理動作を停止するための要求を前記第1のノードから受信し、前記第1のノードが、要求された状態遷移をコミットすることを担うコミッタノードであり、前記要求が前記ターゲットCSNを含む、条項16に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
18.前記命令が、前記1つ以上のプロセッサで実行されるとき、
メトリックが許容範囲外であるという検出に応答して、前記アプリケーション状態遷移処理動作を停止するために判定し、前記メトリックが、(a)前記SRGの稼働ノードの数、(b)前記SRGの選択されたノードで前記構成マネージャから受信されるSRG構成−デルタメッセージの速度、または(c)前記SRGの選択されたノードへのクライアント接続の数のうちの1つ以上を含む、条項16に記載の非一時的なコンピュータアクセス可能なストレージ媒体。
19.前記SRGの前記複数のノードが有向非巡回グラフを含む、条項16に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
20.前記命令が、前記1つ以上のプロセッサで実行されるとき、コンセンサスプロトコルを利用して、前記SRGの前記状態遷移処理動作が停止されるべきであると判定する、条項16に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
加えて、先述の実施形態はまた、以下の条項に鑑みてよりよく理解され得る。
1.システムであって、
1つ以上のデータストアのためにインスタンス化されるログベースのトランザクションマネージャで、要求されたトランザクションのトランザクション記述子をクライアントから受信することであって、前記トランザクション記述子が、前記要求されたトランザクションがコミットされるべきかどうかを判定するためにチェックされるべき第1の論理制約に対応して、(a)制約タイプ、及び(b)1つ以上のデータ署名を示す、受信することと、
前記ログベースのトランザクションマネージャによって、特定の永続的なログに格納されるコミットされたトランザクションに対応する少なくともいくつかのトランザクション記録を使用して、前記要求されたトランザクションが、並行性制御要件のセットに関してコミット可能であることを判定することと、
前記ログベースのトランザクションマネージャによって、前記第1の論理制約をチェックするために調査されるべき前記特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記ログベースのトランザクションマネージャによって、前記1つ以上のデータ署名の内容を前記トランザクション記録のサブセットに格納される他のデータ署名と比較することと、
前記ログベースのトランザクションマネージャによって、1つ以上の比較の結果に少なくとも部分的に基づいて、前記第1の論理制約が前記要求されたトランザクションによって満たされたことを判定することと、
前記ログベースのトランザクションマネージャによって、前記要求されたトランザクションをコミットすることと、を行うように構成される1つ以上のコンピューティングデバイスを含む、前記システム。
2.前記第1の論理制約の前記制約タイプが重複排除であり、前記第1の論理制約が満たされることを判定するために、前記1つ以上のコンピューティングデバイスが、前記トランザクション記述子に示される前記1つ以上のデータ署名の特定のデータ署名が、前記トランザクション記録のサブセットに格納されるデータ署名と一致しないことを検証するようにさらに構成される、条項1に記載の前記システム。
3.前記第1の論理制約の前記制約タイプがコミットシーケンシングであり、前記第1の論理制約が満たされることを判定するために、前記1つ以上のコンピューティングデバイスが、前記トランザクション記述子に示される前記1つ以上のデータ署名の特定のデータ署名が、前記トランザクション記録のサブセットに格納されるデータ署名と一致することを検証するようにさらに構成される、条項1に記載の前記システム。
4.前記トランザクション記述子が、前記要求されたトランザクションがコミットされるべきかどうかを判定するためにチェックされるべき第2の論理制約に対応して、前記第1の論理制約の前記制約タイプとは異なる第2の制約タイプを示す、条項1に記載の前記システム。
5.前記トランザクション記述子が、前記第1の論理制約をチェックするために調査されるべき前記トランザクション記録のサブセットを識別するために使用されるべき少なくとも第1のデリミタを含む、条項1に記載の前記システム。
6.1つ以上のコンピューティングデバイスによって、
ログベースのトランザクションマネージャで、要求されたトランザクションに対する第1の論理制約を示すトランザクション記述子を受信することと、
前記第1の論理制約をチェックするために調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記トランザクション記述子に示される1つ以上のデータ署名の内容を前記トランザクション記録のサブセットに格納される1つ以上のデータ署名と比較することと、
前記比較の結果に少なくとも部分的に基づいて、前記第1の論理制約が前記要求されたトランザクションによって満たされることを判定することと、
前記第1の論理制約が満たされる要件を含む、前記要求されたトランザクションの1つ以上のコミット要件が満たされたと判定することに応答して、前記要求されたトランザクションをコミットすることと、を実行することを含む、方法。
7.前記第1の論理制約が、重複排除制約を含み、前記トランザクション記述子に示される前記1つ以上のデータ署名が、前記要求されたトランザクションの書き込み動作が向けられる場所を表す特定の重複排除署名を含み、前記第1の論理制約が前記要求されたトランザクションによって満たされることを前記判定することが、前記特定の重複排除署名が前記トランザクション記録のサブセットに格納される別の重複排除署名と一致しないことを検証することを含む、条項6に記載の前記方法。
8.前記第1の論理制約が、コミット−シーケンシング制約を含み、前記トランザクション記述子に示される前記1つ以上のデータ署名が、シーケンシング署名を含み、前記論理制約が前記要求されたトランザクションによって満たされることを前記判定することが、前記特定のシーケンシング署名が前記トランザクション記録のサブセットに格納される別のシーケンシング署名と一致することを検証することを含む、条項6に記載の前記方法。
9.前記トランザクション記述子が、前記要求されたトランザクションに対する第2の論理制約を示す、条項6に記載の前記方法。
10.前記第1の論理制約が重複排除制約を含み、前記第2の論理制約がコミットシーケンシング制約を含む、条項9に記載の前記方法。
11.前記1つ以上のコミット要件が、並行性制御要件を含む、条項6に記載の前記方法。
12.前記トランザクション記述子が、前記第1の論理制約をチェックするために調査されるべき前記トランザクション記録のサブセットを識別するために使用されるべき少なくとも第1のデリミタを含む、条項6に記載の前記方法。
13.前記第1のデリミタが、特定のトランザクションのコミットに対応する論理タイムスタンプを含み、前記特定のトランザクションが、前記トランザクション記述子を前記受信する前にコミットされた、条項12に記載の前記方法。
14.前記トランザクション記述子が第2の論理制約を示し、前記トランザクション記述子が、前記第2の論理制約をチェックするために調査されるべき異なるトランザクション記録のサブセットを識別するために使用されるべき異なるデリミタを含む、条項12に記載の前記方法。
15.前記トランザクション記述子が、前記要求されたトランザクションのターゲットとされた書き込み場所を示す特定の書き込み署名を含み、前記1つ以上のデータ署名が、前記ターゲットとされた書き込み場所に対応する特定の重複排除署名を含み、前記特定の重複排除署名が、前記特定の書き込み署名とは異なる、条項6に記載の前記方法。
16.前記要求されたトランザクションが、(a)リレーショナルデータベース、(b)非リレーショナルデータベース、(c)インメモリデータベース、(d)ウェブサービスインターフェースを実装するストレージサービス、(e)ファイルシステム、または(f)分散キャッシュのインスタンスのうちの1つを含むデータストアからの1つ以上の読み取りを含む、条項6に記載の前記方法。
17.プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、1つ以上のプロセッサ上で実行されるとき、
ログベースのトランザクションマネージャで、要求されたトランザクションに対する第1の論理制約を示すトランザクション記述子を受信すること、
前記第1の論理制約をチェックするために調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記トランザクション記述子に示される1つ以上のデータ署名の内容を前記トランザクション記録のサブセットに格納される1つ以上のデータ署名と比較することと、
前記1つ以上のデータ署名の前記内容を比較した結果に少なくとも部分的に基づいて、前記第1の論理制約が前記要求されたトランザクションによって満たされることを判定することと、
前記第1の論理制約が満たされる要件を含む、前記要求されたトランザクションの1つ以上のコミット要件が満たされたという判定に応答して、前記要求されたトランザクションをコミットすることと、を行う、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
18.前記第1の論理制約が、重複排除制約、またはコミットシーケンシング制約のうちの1つを含む、条項17に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
19.前記1つ以上1つ以上のコミット要件が、並行性制御要件を含む、条項17に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
20.前記トランザクション記述子が、前記コミットシーケンシング制約をチェックするために調査されるべき前記トランザクション記録のサブセットを識別するために使用されるべき少なくとも第1のデリミタを含む、条項17に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
加えて、先述の実施形態はまた、以下の条項に鑑みてよりよく理解され得る。
1.システムであって、
アプリケーションの状態を複製するために指定されるノードの有向非巡回グラフ(DAG)の第1の非コミッタノードで、前記DAGの第1のコミッタノードへの第1の複製経路の少なくとも一部分を、フォールトトレラントDAG構成マネージャから受信される構成−デルタメッセージの第1のシーケンスに少なくとも部分的に基づいて、識別することであって、前記DAGの少なくとも1つの他のノードが、前記フォールトトレラントDAG構成マネージャから構成−デルタメッセージの異なるシーケンスを受信している、識別することと、
前記第1の非コミッタノードから、1つ以上のノードのそれぞれのローカルストレージデバイスでの複製のために、前記第1の複製経路に沿って、(a)クライアントによって要求される第1の候補状態遷移の承認と、(b)前記第1の候補状態遷移が他の候補状態遷移に対して前記第1の非コミッタノードで処理される順番を示すシーケンス番号とを示す状態遷移メッセージを伝送することと、
前記フォールトトレラントDAG構成マネージャによる、前記第1の複製経路の特定のノードが前記DAGから除去されるべきであるという判定に応答して、
前記フォールトトレラントDAG構成マネージャから前記DAGの1つ以上の残りのノードへの、前記特定のノードの前記DAGからの除去を示すそれぞれの構成−デルタメッセージの伝送を、前記1つ以上の残りのノードに状態遷移の処理を停止することを命令することなく、開始することと、を行うように構成される1つ以上のコンピューティングデバイスを含む、前記システム。
2.前記1つ以上の残りのノードの第1の残りのノードによって受信される特定の構成−デルタメッセージが、前記DAGの完全なメンバーシップを示さない、条項1に記載の前記システム。
3.前記フォールトトレラントDAG構成マネージャが、前記特定のノードが前記DAGから除去されるべきであると判定するためにコンセンサスベースのプロトコルを使用する複数の構成ノードを含む、条項1に記載の前記システム。
4.前記1つ以上のコンピューティングデバイスが、
前記第1のコミッタノードに、前記候補状態遷移の記録の閾値数のレプリカが作成されたという判定に応答して、前記候補状態遷移がコミットされたという指標を格納することと、
少なくとも前記第1の非コミッタノードに、前記候補状態遷移がコミットされたことを通知することと、
前記クライアントに、前記候補状態遷移がコミットされたことを通知することと、を行うようにさらに構成される、条項1に記載の前記システム。
5.前記構成−デルタメッセージの第1のシーケンスが、第1の構成−デルタメッセージに続いて第2の構成−デルタメッセージを含み、前記構成−デルタメッセージの第2のシーケンスが、前記第2の構成−デルタメッセージに続いて前記第1の構成−デルタメッセージを含む、条項1に記載の前記システム。
6.1つ以上のコンピューティングデバイスによって、
要求された状態遷移に対応する状態遷移メッセージを複製ノードの有向非巡回グラフ(DAG)の第1の非コミッタノードから前記DAGの第1のコミッタノードに伝播することであって、前記状態遷移メッセージが、要求された状態遷移が他の要求された状態遷移に対して承認された順番を示すシーケンス番号を含む、伝播することと、
DAG構成マネージャによる、特定のノードが前記DAGに追加されるべきであるという判定に応答して、前記DAG構成マネージャから前記DAGの1つ以上の他のノードへ、前記特定のノードの前記DAGへの前記追加を示す構成−デルタメッセージの伝播を、前記1つ以上の他のノードに状態遷移メッセージの処理を停止することを命令することなく、開始することと、を実行することを含む、方法。
7.前記構成−デルタメッセージが、前記DAGの完全なメンバーシップを示さない、条項6に記載の前記方法。
8.前記1つ以上のコンピューティングデバイスによって、
前記DAG構成マネージャによる、異なるノードが前記DAGから除去されるべきであるという判定に応答して、前記DAG構成マネージャから前記DAGの少なくとも第1の残りのノードに、前記異なるノードの前記DAGからの前記除去を示す第2の構成−デルタメッセージを、前記第1の残りのノードに状態遷移メッセージの処理を停止することを命令することなく、伝播することを実行することをさらに含む、条項6に記載の前記方法。
9.前記異なるノードが、前記第1の残りのノードの直近の先行であり、
前記第1の残りのノードで、前記異なるノードから受信される直前の状態遷移メッセージを示す最大受信シーケンス番号を判定することと、
前記第1の残りのノードから前記DAGの第2の残りのノードに、前記最大受信シーケンス番号に少なくとも部分的に基づいて範囲内のシーケンス番号を有する状態遷移メッセージを伝送するように要求を伝送することであって、前記第2の残りのノードが前記異なるノードの除去前に前記異なるノードの直近の先行であった、伝送することと、をさらに含む、条項8に記載の前記方法。
10.前記要求された状態遷移が、データベースサービスに格納されるデータオブジェクトへの書き込み動作を含む、条項6に記載の前記方法。
11.前記要求された状態遷移が、ログサービスの特定のログへのログメッセージの挿入を含む、条項6に記載の前記方法。
12.前記DAG構成マネージャが、複数の構成ノードを含み、前記特定のノードが追加されるべきであると前記判定することが、前記複数の構成ノードによってコンセンサスベースのプロトコルを使用することを含む、条項6に記載の前記方法。
13.前記1つ以上の他のノードが、第1のノード及び第2のノードを含み、前記1つ以上のコンピューティングデバイスによって、
前記第1のノードで、前記DAGの異なるノードの除去を示す構成−デルタメッセージを受信する前に、及び第2のノードで、前記異なるノードの前記除去を示す構成−デルタメッセージを受信した後に、
前記異なるノードによって、異なる状態遷移メッセージを前記第2のノードから受信することと、
前記異なるノードで、前記異なる状態遷移メッセージに対応する記録を複製することと、
前記異なるノードによって、前記第1のノードに、前記異なる状態遷移メッセージを伝送することと、を実行することをさらに含む、条項6に記載の前記方法。
14.前記1つ以上のコンピューティングデバイスによって、
前記第1のコミッタノードに、前記要求された状態遷移の表現の閾値数のレプリカが作成されたという判定に応答して、前記要求された状態遷移がコミットされたという指標を格納することと、
少なくとも前記第1の非コミッタノードに、前記要求された状態遷移がコミットされたことを通知することと、
前記状態遷移を実装するための要求がそこから受信されたクライアントに、前記状態遷移がコミットされたことを通知することと、を実行することをさらに含む、条項6に記載の前記方法。
15.前記1つ以上のコンピューティングデバイスによって、
前記DAGの1つ以上のスタンバイノードをインスタンス化することと、
前記1つ以上のスタンバイノードの特定のスタンバイノードに、前記要求された状態遷移のそれぞれの表現が閾値数のDAGノードで複製された後に、前記状態遷移メッセージを伝送することと、
前記特定のスタンバイノードに、前記要求された状態遷移の記録を格納することと、
前記特定のスタンバイノードを、(a)前記DAGの失敗した非コミッタノードまたは(b)前記DAGの失敗したコミッタノードのうちの1つの置換として選択することと、を実行することをさらに含む、条項6に記載の前記方法。
16.前記第1の非コミッタノードが、プロバイダネットワークの第1のデータセンターにある第1のホストで実行するプロセスを含み、前記第1のコミッタノードが、前記プロバイダネットワークの異なるデータセンターにある異なるホストで実行する異なるプロセスを含む、条項6に記載の前記方法。
17.プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、1つ以上のプロセッサで実行されるとき、状態情報を複製するために確立されるDAGの特定のノードを実装し、前記特定のノードが、
DAG構成マネージャから、複数の構成−デルタメッセージを受信することであって、前記複数の構成−デルタメッセージの特定の構成−デルタメッセージが、(a)前記DAGへのノードの追加または(b)前記DAGからのノードの除去のうちの1つ以上を示す、受信することと、
状態遷移メッセージが前記特定のノードでそこから受信された直近の先行ノードが、前記DAGから除去されたことを示す特定の構成−デルタメッセージを前記DAG構成マネージャから受信した後に、
少なくとも前記特定の構成−デルタメッセージを使用して、異なる直近の先行ノードを識別することと、
前記異なる直近の先行ノードに、状態遷移メッセージの要求を伝送することと、を行うように構成される、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
18.前記特定のノードが、
前記特定の構成−デルタメッセージを受信した後、かつ前記状態遷移メッセージの要求に対する応答を受信する前に、特定の状態遷移メッセージを前記特定のノードの直近の後続ノードに伝送するように構成される、条項17に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
19.前記特定のノードが、
前記DAG構成マネージャから、直近の後続ノードが前記DAGから除去されたことを示す異なる構成−デルタメッセージを受信した後、
少なくとも前記異なる構成−デルタメッセージを使用して、状態遷移メッセージが前記特定のノードからそこへ送信されるべきである異なる直近の後続ノードを識別することと、
前記異なる直近の後続ノードへのネットワーク接続の確立を開始することと、を行うように構成される、条項17に記載のる非一時的なコンピュータアクセス可能なストレージ媒体。
20.プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、1つ以上のプロセッサで実行されるとき、状態情報を複製するために確立されるノードのDAGの構成マネージャを実装し、前記構成マネージャが、
コンセンサスプロトコルに少なくとも部分的に基づいて、前記DAGの特定のノードが前記DAGから除去されるべきであると判定することであって、前記特定のノードが前記DAG内の特定の位置を占有する、判定することと、
前記構成マネージャに格納される前記DAGの構成の永続的な表現から、前記特定のノードを除去することと、
前記DAGの1つ以上の残りのノードに、前記特定のノードが前記DAGから除去されたことを示す構成−デルタメッセージを、前記1つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
21.前記構成マネージャが、
前記特定のノードが前記DAGのメンバーとしてサービスに利用可能であるという判定に応答して、
前記特定のノードのために前記DAG内の異なる位置を識別することと、
前記DAGの前記1つ以上の残りのノードに、前記特定のノードが前記DAG内の前記異なる位置で前記DAGに追加されたことを示す別の構成−デルタメッセージを、前記1つ以上の残りのノードに前記アプリケーションの状態遷移に関連する処理を停止することを要求することなく、伝送することと、を行うように構成される、条項20に記載の前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
22.前記構成−デルタメッセージが、前記DAGの完全なメンバーシップを示さない、条項20に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
23.前記構成マネージャが、
前記特定のノードに前記DAGからのその除去の前に割り当てられる特定の役割を識別することであって、前記役割が、アクセプタノード、中間ノード、またはコミッタノードのうちの1つを含む、識別することと、
前記特定の役割を前記DAGの異なるノードに割り当てることであって、前記異なるノードが、(a)前記除去の前の前記特定のノードの後続ノードまたは(b)前記DAGのスタンバイノードのうちの1つを含む、割り当てることと、を行うように構成される、条項20に記載の前記非一時的なコンピュータアクセス可能なストレージ媒体。
加えて、先述の実施形態はまた、以下の条項に鑑みてよりよく理解され得る。
1.プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体であって、前記プログラム命令が、1つ以上のプロセッサ上で実行されるとき、
ログベースのトランザクションマネージャで、要求されたトランザクションのトランザクション記述子をクライアントから受信することであって、前記トランザクション記述子が、少なくとも(a)前記要求されたトランザクション中にデータがそこから読み取られるソースデータストアの第1のコミット状態識別子(CSI)、(b)前記要求されたトランザクション中にデータがそこから読み取られる1つ以上のオブジェクトを示すそれぞれの読み取り署名、及び(c)前記要求されたトランザクションのコミットに応答してそこにデータが書き込まれるべき1つ以上のオブジェクトを示すそれぞれの書き込み署名を含む、受信することと、
前記ログベースのトランザクションマネージャによって、前記第1のCSIを使用して、前記要求されたトランザクションをコミットする前にコンフリクトを調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することであって、前記特定の永続的なログが、前記ソースデータストアを含む1つ以上のデータストアと関連付けられた以前にコミットされたトランザクションに対応するトランザクション記録を含む、識別することと、
前記ログベースのトランザクションマネージャによる、前記要求されたトランザクションの前記読み取り署名によって示される前記オブジェクトがどれも、前記トランザクション記録のサブセットに示される書き込み動作によって修正されていないという判定に応答して、前記要求されたトランザクションのコミットを受理することと、を行う、前記プログラム命令を格納する非一時的なコンピュータアクセス可能なストレージ媒体。
2.前記トランザクション記述子に含まれる特定の読み取り署名が、データがそこから読み取られる前記1つ以上のオブジェクトに対応する1つ以上の読み取り場所の特定の読み取り場所から生成される第1のハッシュ値を含み、前記トランザクション記述子に含まれる特定の書き込み署名が、データがそこに書き込まれるべき前記1つ以上のオブジェクトに対応する1つ以上の書き込み場所の特定の書き込み場所から生成される第2のハッシュ値を含む、条項1に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
3.前記読み取り署名に示される前記1つ以上のオブジェクトが、第1のデータストアにある第1のオブジェクトを含み、前記CSIが、前記第1のデータストアにある以前にコミットされたトランザクションに対応する第1の論理タイムスタンプを含む、条項1に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
4.前記読み取り署名に示される前記1つ以上のオブジェクトが、第1のデータストアにある第1のオブジェクト及び第2のデータストアにある第2のオブジェクトを含み、前記CSIが、(a)前記第1のデータストアにある第1の以前にコミットされたトランザクションに対応する第1の論理タイムスタンプ、及び(b)前記第2のデータストアにある第2の以前にコミットされたトランザクションに対応する第2の論理タイムスタンプに少なくとも部分的に基づいて判定される、条項1に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
5.前記トランザクション記述子が、第1の書き込み場所に書き込まれるべきデータペイロードを含み、前記命令が、前記1つ以上のプロセッサで実行されるとき、
前記要求されたトランザクションのコミットの受理の後に、前記トランザクション要求に対応するトランザクション記録の1つ以上のレプリカを格納することと、
前記要求されたトランザクションがコミットされたという指標を提供することと、
前記要求されたトランザクションがコミットされたという指標に対して非同期的に、前記データペイロードを前記第1の書き込み場所に伝播するための動作を開始することと、を行う、条項1に記載される前記非一時的なコンピュータアクセス可能なストレージ媒体。
6.1つ以上のコンピューティングデバイスによって、
要求されたトランザクションのトランザクション記述子を受信することであって、前記トランザクション記述子が、少なくとも(a)コンフリクトチェックデリミタ、(b)前記要求されたトランザクション中にデータがそこから読み取られる1つ以上のオブジェクトを示す読み取りセット記述子、及び(c)前記要求されたトランザクションのコミットに応答してそこにデータが書き込まれるべき1つ以上のオブジェクトを示す書き込みセット記述子を含む、受信することと、
前記コンフリクトチェックデリミタを使用して、前記要求されたトランザクションをコミットする前にコンフリクトを調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記読み取りセット記述子に示される前記オブジェクトのどれも、前記トランザクション記録のサブセットに示される書き込み動作によって修正されていないという判定に応答して、前記要求されたトランザクションのコミットを受理することと、を実行することを含む、方法。
7.前記読み取りセット記述子が、データがそこから読み取られる前記1つ以上のオブジェクトに対応する1つ以上の読み取り場所の特定の読み取り場所から生成される第1のハッシュ値を含み、前記書き込みセット記述子が、データがそこに書き込まれるべき前記1つ以上のオブジェクトに対応する1つ以上の書き込み場所の特定の書き込み場所から生成される第2のハッシュ値を含む、条項6に記載の前記方法。
8.前記コンフリクトチェックデリミタが、特定のトランザクションのコミットに対応する論理タイムスタンプを含み、前記特定のトランザクションが、前記トランザクション記述子を前記受信する前にコミットされた、条項6に記載の前記方法。
9.前記読み取りセット記述子に示される前記1つ以上のオブジェクトが、第1のデータストアにある第1のオブジェクトを含み、前記1つ以上のコンピューティングデバイスによって、
第1の要求を、ログベースのトランザクションマネージャのクライアント側コンポーネントによって、前記第1のデータストアでの前記第1の要求の受信の前に前記第1のデータストアに適用された直前の書き込みを含んだ以前にコミットされたトランザクションに対応する第1の論理タイムスタンプのために、前記第1のデータストアにサブミットすることと、
前記クライアント側コンポーネントによって、前記第1の論理タイムスタンプを前記コンフリクトチェックデリミタとして選択することと、を実行することをさらに含む、条項6に記載の前記方法。
10.前記読み取りセット記述子に示される前記1つ以上のオブジェクトが、第2のデータストアにある第2のオブジェクトを含み、前記1つ以上のコンピューティングデバイスによって、
前記クライアント側コンポーネントにある前記第2のデータストアから、前記第2のデータストアに適用された異なる書き込みを含んだ異なる以前にコミットされたトランザクションに対応する第2の論理タイムスタンプを獲得することであって、前記異なる書き込みが、前記第2の論理タイムスタンプを前記クライアント側コンポーネントに提供する前に前記第2のデータストアに適用された直前の書き込みである、獲得することと、を実行することをさらに含み、
前記第1の論理タイムスタンプを前記コンフリクトチェックデリミタとして前記選択することが、前記第1の論理タイムスタンプが前記第2の論理タイムスタンプより小さいことを判定することを含む、条項9に記載の前記方法。
11.前記トランザクション記述子が、前記書き込みセット記述子に示される第1の書き込み場所に書き込まれるべきデータペイロードを含み、前記1つ以上のコンピューティングデバイスによって、
前記トランザクション要求に対応するトランザクション記録の1つ以上のコピーを、前記要求されたトランザクションのコミットを受理した後に格納することと、
前記要求されたトランザクションがコミットされたという指標を提供することと、
指標を前記提供することに対して非同期的に、前記データペイロードを前記第1の書き込み場所に書き込むための動作をスケジューリングすることと、を実行することをさらに含む、条項6に記載の前記方法。
12.前記読み取りセット記述子に示される前記1つ以上のオブジェクトが、第1のデータストアに位置するオブジェクトを含み、前記書き込みセット記述子に示される前記1つ以上のオブジェクトが、異なるデータストアに位置する別のオブジェクトを含む、条項6に記載の前記方法。
13.要求された読み取りのみのトランザクションの第2のトランザクション記述子を受信することであって、前記第2のトランザクション記述子が、(a)第2のコンフリクトチェックデリミタ、及び(b)前記読み取りのみのトランザクション中にデータがそこから読み取られる1つ以上の読み取り場所を示す第2の読み取りセット記述子を含む、受信することと、
前記要求された読み取りのみのトランザクションの少なくとも1つの読み取り場所が、前記第2のコンフリクトチェックデリミタによって示される動作の後に更新される書き込み場所に対応するということを判定することに応答して、前記読み取りのみのトランザクションが拒否されたという指標を提供することと、をさらに含む、条項6に記載の前記方法。
14.要求された書き込みのみのトランザクションの第2のトランザクション記述子を受信することであって、前記第2のトランザクション記述子が、データがそこに書き込まれるべき特定の書き込み場所を示す第2の書き込みセット記述子を含む、受信することと、
前記書き込みのみのトランザクションのコミットに対応する論理タイムスタンプを生成することと、
前記書き込みのみのトランザクション前にコミットされる特定のトランザクションに要求される書き込みに対応する少なくとも1つの書き込み動作が、まだスケジューリングされていないことを判定することと、
前記少なくとも1つの書き込み動作をスケジューリングすることと、をさらに含む、条項6に記載の前記方法。
15.前記読み取りセット記述子及び前記書き込みセット記述子のうちの少なくとも1つの記述子が、非リレーショナルデータベースシステム、リレーショナルデータベースシステム、非構造化データオブジェクトへのアクセスを許可するウェブサービスインターフェースを実装するストレージサービス、インメモリデータベース、または分散キャッシュのインスタンスのうちの1つに格納されるオブジェクトを示す、条項6に記載の前記方法。
16.システムであって、
要求されたトランザクションのトランザクション記述子をクライアントから受信することであって、前記トランザクション記述子が、少なくとも(a)コンフリクトチェックデリミタ、及び(b)前記要求されたトランザクション中にデータがそこから読み取られる1つ以上の読み取り場所を示す読み取りセット記述子を含む、受信することと、
前記コンフリクトチェックデリミタを使用して、前記要求されたトランザクションをコミットする前にコンフリクトを調査されるべき特定の永続的なログに格納されるトランザクション記録のサブセットを識別することと、
前記要求されたトランザクションの前記読み取り場所がどれも、前記トランザクション記録のサブセットに示される書き込み場所に対応しないことを判定することに応答して、前記要求されたトランザクションがコミットされたことを示す新しいトランザクション記録を前記特定の永続的なログに格納することと、を行うように構成される1つ以上のコンピューティングデバイスを含む、前記システム。
17.前記トランザクション記述子が、前記トランザクションのコミットの後にデータがそこに書き込まれるべきである1つ以上の場所を示す書き込みセット記述子を含み、前記新しいトランザクション記録が、前記書き込みセット記述子の指標を含む、条項16に記載の前記システム。
18.前記1つ以上のコンピューティングデバイスが、
前記新しいトランザクション記録の前記特定の永続的なログへの挿入に対して非同期に、前記トランザクション記述子に示される書き込みペイロードを前記書き込みセット記述子の前記1つ以上の場所の第1の書き込み場所に伝播するための動作をスケジューリングするようにさらに構成される、条項17に記載の前記システム。
19.前記読み取りセット記述子が、前記1つ以上の読み取り場所の特定の読み取り場所から生成される第1のハッシュ値を含む、条項16に記載の前記システム。
20.前記コンフリクトチェックデリミタが、特定のトランザクションのコミットに対応する論理タイムスタンプを含む、条項16に記載の前記システム。
結論
様々な実施形態は、コンピュータアクセス可能な媒体に関する先述の説明に従って実装される命令及び/またはデータを受信、送信、または格納することをさらに含み得る。一般的に言えば、コンピュータアクセス可能な媒体は、磁気または光媒体などのストレージ媒体またはメモリ媒体、例えば、ディスクまたはDVD/CD−ROM、RAM(例えば、SDRAM、DDR、RDRAM、SRAMなど)、ROMなどの揮発性もしくは非揮発性媒体、ならびにネットワーク及び/または無線リンクなどの通信媒体を介して伝えられる、電気、電磁気、もしくはデジタル信号などの伝送媒体または信号を含み得る。
図に示される、及び本明細書に説明される様々な方法は、方法の例示的な実施形態を表す。本方法は、ソフトウェア、ハードウェア、またはそれらの組み合わせにおいて実装され得る。方法の順番は変更され得、様々な要素が、追加、並べ替え、組み合わせ、省略、修正などの対象となり得る。
様々な変形形態及び変更は、本開示の利益を有する当業者にとって明白であるようになされ得る。すべてのそのような変形形態及び変更を包含すること、それにより、上記説明は限定的な意味というよりも例示的と見なされることが意図される。