(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-09
(45)【発行日】2024-01-17
(54)【発明の名称】分散コンピューティング環境で分散調整エンジンを非破壊的にアップグレードする方法、装置およびシステム
(51)【国際特許分類】
G06F 9/46 20060101AFI20240110BHJP
G06F 9/52 20060101ALI20240110BHJP
【FI】
G06F9/46 420Z
G06F9/46 430
G06F9/52 150Z
(21)【出願番号】P 2021510075
(86)(22)【出願日】2019-10-10
(86)【国際出願番号】 US2019055508
(87)【国際公開番号】W WO2020091966
(87)【国際公開日】2020-05-07
【審査請求日】2022-09-30
(32)【優先日】2018-10-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】515154894
【氏名又は名称】サイラタ,インク.
(74)【代理人】
【識別番号】100115738
【氏名又は名称】鷲頭 光宏
(74)【代理人】
【識別番号】100121681
【氏名又は名称】緒方 和文
(72)【発明者】
【氏名】エムシー キーオウン,マーク,パトリック
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2016/0105507(US,A1)
【文献】特表2016-510924(JP,A)
【文献】国際公開第2018/118930(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/46
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
分散システムであって、
複数のサーバノードであって、各サーバノードがクライアントアプリケーションを含み、前記クライアントアプリケーションの状態を変更し、対応する提案を生成するためのクライアント要求を受け取るように構成される、複数のサーバノードと;
第1バージョンの分散調整エンジン(DConE)であって、前記複数のサーバノードの少なくとも1つに結合し、入力キューで提案を受け取るように構成され、前記第1バージョンのDConEは、前記提案について合意に達し、第1の順序の合意を前記複数のサーバノードの少なくとも1つに結合している出力キューで出力するようにさらに構成され、前記第1の順序の合意は、前記クライアントアプリケーションが前記第1の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定し、前記第1バージョンのDConEは、バージョン変更提案に関して前記入力キューを監視し、それについて合意に達し、前記バージョン変更提案についての合意を前記出力キューに配置し、それ以降は前記入力キューで前記提案についてそれ以上合意に達しないようにさらに構成される、第1バージョンの分散調整エンジン(DConE)と;
入力キューおよび前記出力キューに結合している第2バージョンのDConEであって、前記第2バージョンのDConEは、前記バージョン変更提案について合意に達した後は、前記入力キューの前記提案について合意に達し、かつ前記バージョン変更提案についての合意から始まる前記出力キューで第2の順序の合意を出力するようにさらに構成され、前記第2の順序の合意は、合意に達した提案を含み、前記クライアントアプリケーションが前記第2の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定する、第2バージョンのDConEと
を有し、
前記バージョン変更提案は、前記入力キュー上のそれ以降の提案を、前記第1バージョンのDConEから前記第2バージョンのDConEへ切り替えるよう指示するものであり、各クライアントアプリケーションは、前記バージョン変更提案に対応する前記合意を受け取った後に前記第1バージョンのDConEから受け取った合意済みの提案を、前記入力キューを介して前記第2バージョンのDConEに送り返すようにさらに構成される、
分散システム。
【請求項2】
前記第1バージョンのDConEは、前記複数のサーバノードの各々に対して前記第1バージョンのDConEのインスタンスを有し、前記第2バージョンのDConEは、前記複数のサーバノードの各々に対して前記第2バージョンのDConEのインスタンスを有する、請求項1に記載の分散システム。
【請求項3】
前記第1バージョンおよび第2バージョンのDConEは、コンピュータネットワークを介して前記複数のサーバノードに結合される、請求項1に記載の分散システム。
【請求項4】
前記第1バージョンのDConEは、前記バージョン変更提案に対応する前記合意が達成された後に前記第1バージョンのDConEが有効な提案についての合意に達し終えた後、オフにされる、請求項1に記載の分散システム。
【請求項5】
前記第1の順序の合意および第2の順序の合意の各合意は、
提案と;
前記提案について合意に達した前記DConEのバージョン番号およびバージョンシーケンス番号を含む、グローバルシーケンス番号(GSN)と
を含む、請求項1に記載の分散システム。
【請求項6】
各々の前記クライアントアプリケーションは、GSNが所定のバージョン番号と一致するバージョン番号を含んでいる提案のみを実行するように構成される、請求項5に記載の分散システム。
【請求項7】
前記所定のバージョン番号は、前記第1バージョンのDConEと前記第2バージョンのDConEから選択される、請求項6に記載の分散システム。
【請求項8】
前記提案は、前記クライアントアプリケーションの状態を変更するためのアプリケーション提案の少なくとも1つ、および前記第1または第2バージョンのDConEを制御するかその構成を変更するように構成されているDConE制御提案を含む、請求項1に記載の分散システム。
【請求項9】
前記第2バージョンのDConEは、
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を拒否すること;
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を受け入れ、それについて合意に達すること;および
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を、前記第2バージョンのDConEを制御するか構成するように構成された、意味の上ではほぼ同じである制御提案に入れ替えること
のうちの1つを行うようにさらに構成される、請求項8に記載の分散システム。
【請求項10】
複数のサーバノードのクライアントアプリケーションの一貫性を維持するコンピュータ実装方法であって、
前記複数のサーバノードの少なくとも1つに結合している第1バージョンの分散調整エンジン(DConE)を提供し、前記第1バージョンのDConEでは:
入力キューで提案を受け取り、前記提案について合意に達し、前記複数のサーバノードの前記少なくとも1つに結合している出力キューで第1の順序の合意を出力し、前記第1の順序の合意は、前記クライアントアプリケーションが前記第1の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定し、;かつ
バージョン変更提案に関して前記入力キューを監視し、前記バージョン変更提案について合意に達し、前記バージョン変更提案についての合意を前記出力キューで出力し、それ以降に前記入力キューで前記提案についてそれ以上合意に達成するのを停止し;
前記複数のサーバノードの少なくとも1つに結合している第2バージョンのDConEを提供し、前記第2バージョンのDConEでは:
前記バージョン変更提案に対応する合意を前記出力キューに出力した後、前記入力キューで前記提案について合意に達し、前記バージョン変更提案に対応する合意から始まる前記出力キューで第2の順序の合意を出力し、前記第2の順序の合意は、合意に達した提案を含み、前記クライアントアプリケーションが前記第2の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定し、
前記バージョン変更提案は、前記入力キュー上のそれ以降の提案を、前記第1バージョンのDConEから前記第2バージョンのDConEへ切り替えるよう指示するものであり、前記バージョン変更提案についての合意を受け取った後に前記第1バージョンのDConEから受け取った合意済みの提案を、前記入力キューを介して前記第2バージョンのDConEに送り返して、前記第2バージョンのDConEがそれについて合意に達することができるようにする
ことを含む、コンピュータ実装方法。
【請求項11】
前記バージョン変更提案に対応する前記合意が達成された後に前記第1バージョンのDConEが有効な提案について合意に達し終えた後、前記第1バージョンのDConEをオフにすることをさらに含む、請求項10に記載のコンピュータ実装方法。
【請求項12】
前記第1の順序の合意および第2の順序の合意の各合意は、
提案と;
前記提案について合意に達した前記DConEのバージョン番号およびバージョンシーケンス番号を含む、グローバルシーケンス番号(GSN)と
を含む、請求項10に記載のコンピュータ実装方法。
【請求項13】
各々の前記クライアントアプリケーションを、GSNが所定のバージョン番号と一致するバージョン番号を含んでいる提案のみを実行するように構成することをさらに含む、請求項12に記載のコンピュータ実装方法。
【請求項14】
前記所定のバージョン番号を、前記第1バージョンのDConEから前記第2バージョンのDConEに変更することをさらに含む、請求項13に記載のコンピュータ実装方法。
【請求項15】
合意済みの提案を前記第2バージョンのDConEに送り返すことは、前記クライアントアプリケーションのうちの1つによって実行される、請求項10に記載のコンピュータ実装方法。
【請求項16】
前記提案は、前記クライアントアプリケーションの状態を変更するためのアプリケーション提案の少なくとも1つと、前記第1または第2バージョンのDConEを制御するかその構成を変更するように構成されているDConE制御提案を含む、請求項10に記載のコンピュータ実装方法。
【請求項17】
前記第2バージョンのDConEが、
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を拒否すること;
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を受け入れ、それについて合意に達すること;および
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を、前記第2バージョンのDConEを制御するか構成するように構成された、意味の上ではほぼ同じである制御提案に入れ替えること
のうちの1つを行うことをさらに含む、請求項16に記載のコンピュータ実装方法。
【請求項18】
複数のサーバノードでクライアントアプリケーションの一貫性を維持するコンピュータ実装方法であって、
第1バージョンの分散調整エンジン(DConE)を提供することと;
前記第1バージョンのDConEで、提案について合意に達し、前記クライアントアプリケーションが前記第1バージョンのDConEで合意した提案を実行してそれに応じてそのそれぞれの状態を更新する順序を指定する第1の順序の合意を生成することと;
第2バージョンのDConEを提供することと;
前記第1バージョンのDConEでバージョン変更提案について合意に達することと;
前記バージョン変更提案について合意に達した後、前記第2バージョンのDConEで提案について合意に達するのを停止し、前記クライアントアプリケーションが前記第2バージョンのDConEで合意した前記提案を実行してそれに応じてそのそれぞれの状態を更新する順序を指定する第2の順序の合意を生成することと;
前記バージョン変更提案は、それ以降の提案を、前記第1バージョンのDConEから前記第2バージョンのDConEへ切り替えるよう指示するものであり、前記バージョン変更提案について合意に達した後に前記第1バージョンのDConEから受け取った合意済みの提案を、前記第2バージョンのDConEに送り返して、前記第2バージョンのDConEがそれについて合意に達することができるようにすることと
を含む、コンピュータ実装方法。
【請求項19】
前記バージョン変更提案に対応する前記合意が達成された後に前記第1バージョンのDConEが有効な提案について合意に達し終えた後、前記第1バージョンのDConEをオフにすることをさらに含む、請求項18に記載のコンピュータ実装方法。
【請求項20】
前記提案は、前記クライアントアプリケーションの状態を変更するためのアプリケーション提案の少なくとも1つと、前記第1または第2バージョンのDConEを制御するかその構成を変更するように構成されているDConE制御提案を含む、請求項18に記載のコンピュータ実装方法。
【請求項21】
前記第2バージョンのDConEが、
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を拒否すること;
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を受け入れ、それについて合意に達すること;および
前記第1バージョンのDConEを制御するか構成するように構成された制御提案を、前記第2バージョンのDConEを制御するか構成するように構成された、意味の上ではほぼ同じである制御提案に入れ替えること
のうちの1つを行うことをさらに含む、請求項20に記載のコンピュータ実装方法。
【発明の詳細な説明】
【背景技術】
【0001】
本明細書に開示する実施形態の分野は、分散システムを含む。特に、実施形態は、提案を受け入れ、アプリケーションによって消費される対応する順序付けされた合意を生成するためにワイドエリアネットワーク(WAN)を介した分散調整エンジンのインスタンスを使用する分散システム(および同システムによって可能になる機能)に及ぶ。ただし、分散調整エンジンは、分散調整エンジンが合意を生成しているアプリケーションを途絶したり、提案および合意の流れを中断したりすることなく、時折アップグレードしなければならない。
【図面の簡単な説明】
【0002】
【
図1】1つの実施形態に従って構成したシステムのブロック図である。
【0003】
【0004】
【
図3】1つの実施形態による、フォーマットされ、かつ/または入力キューに格納されたクライアント提案の図である。
【0005】
【
図4】1つの実施形態による、フォーマットされ、かつ/または出力キューに格納された合意済みの提案(例えば合意)を示す図である。
【0006】
【
図5】1つの実施形態による分散システムを示し、そのような分散システムでクライアントアプリケーションの一貫性を維持するコンピュータ実装方法の様々な態様を示すブロック図である。
【0007】
【
図6】1つの実施形態によるコンピュータ実装方法のフローチャートである。
【0008】
【
図7】本明細書に図示し説明した実施形態を実施し得るコンピューティングデバイスのブロック図である。
【発明を実施するための形態】
【0009】
定義
分散システム:分散システムは、別々のプロセスの集合を含んでおり、プロセスは、空間的に離れていてよく、メッセージまたはイベントの交換を通して互いに通信してよい。
【0010】
複製状態マシン:複製状態マシンの手法とは、サーバを複製してクライアントとサーバレプリカとの相互作用を調整することによってフォールトトレラントサービスを実装する方法である。状態マシンの状態は学習者全員で同じように進展するため、これらの状態マシンは「複製」される。単一サーバのレプリカを分散システムの別々のプロセッサで実行し、プロトコルを使用してクライアントとこれらのレプリカとの相互作用を調整する。複製状態マシンの1つの例および実装形態が、その状態を決定論的な方法で消費する決定論的な状態マシンである。
【0011】
合意:合意とは、提案者が生成して学習者に配信された潜在的な複数の提案イベントのうちの選択された1つである。
【0012】
合意のグローバルシーケンス:1つの実施形態によれば、クライアント提案は、少なくとも大多数の承認者に送信され、合意され、合意のグローバルシーケンスに配信される。合意のグローバルシーケンスを受け取るサーバノードおよびクライアントアプリケーションは、次に、基礎となるトランザクションを合意のグローバルシーケンスが指定した順序で実行し、それに応じて状態を更新してよく、それによってすべてのクライアントアプリケーションが同じ順序で更新されるのを確実にする。
【0013】
分散合意/調整エンジン(DConE):1つの実施形態では、パクソスコンセンサスプロトコルの新規の生産グレードの実装を通じて、順序付けされた合意トランザクションのグローバルシーケンスを生成するために合意または調整エンジンを必要とする。例示的なDConEが、同一出願人による、同時係属中である2008年2月13日出願の米国特許出願第12/069,986号に記載されており、同文献の全容を参照して本願に援用する。DConEは、フォールトトレラントであり、継続的に使用できる決定論的な複製状態マシンである。DConEは、提案者が生成したイベントを収集し、それを編成して承認者の助けを借りて順序付けしたグローバルシーケンスにして、それをそのシーケンスで学習者に配信することによって動作する。学習者は、配信されたイベントの順序付けされたシーケンスを扱ってビジネスロジックを実装する(例えばトランザクションを実装する)。DConEは、合意済みの提案の同じ順序のグローバルシーケンスで、それぞれのトランザクション提案イベントを少なくとも一回各学習者ノードに配信することを保証する。
【0014】
非ブロッキング:本明細書では、「非ブロッキング」という用語は、一連の処理を完全または部分的に可能にしておくと同時にその一連の処理に変化を加える能力を指す。
【0015】
提案者:1つの実施形態によれば、提案者は、トランザクション(アプリケーション、データセットなどの状態を変化させるための提案)を提示するように構成されそれを可能にするプロセスである。
【0016】
承認者:1つの実施形態によれば、承認者は、提案者が出す提案の順序を決定することに加担するように構成されているプロセスである。1つの実施形態によれば、ある提案が合意のグローバルシーケンスで特定の場所を取ることを大多数の承認者が決定した場合のみ、それが合意となる(例えば合意済みの提案)。承認者は、1つの実施形態によれば、合意の順序の決定だけに加担するように構成されてよく、合意の基本的内容を推論しない/関心を持たない(本明細書に記載したように、合意の値はDConEには不透明である)。承認者は、アプリケーションに無関係のエンティティとして構成されてよい。
【0017】
学習者:1つの実施形態によれば、学習者は、提案者と承認者との間でなされた合意を学習し、その出力提案シーケンスを通じて、合意を決定論的な順序でアプリケーションに適用する。1つの実施形態では、複製状態マシンごとに一連の合意を永続的に記録できる永続ストアと同じように、合意のIDが提供される。各々の提案は、特定のメンバーシップの各学習者に少なくとも一回配信されることが保証されている。
分散調整エンジン(DConE)
【0018】
1つの実施形態によれば、DConEは、高性能のエンタープライズ版パクソスアルゴリズムを実装する。パクソスアルゴリズムでは、複製状態マシンが分散システムの各ノードとともにインストールされる。次に複製状態マシンは、各ノードでのトランザクション順序を同じにする(同時である必要はない)トランザクション管理を交換する協調的手法を配信するためのピアとして機能する。パクソスアルゴリズムを実装しているサーバノードで複製された状態マシンは、3つの役割:(1)提案者;(2)承認者;および(3)学習者のいずれか1つを満たすことができる。パクソスアルゴリズムには次の3つの段階があり、コンセンサスに達するプロセスで繰り返されてよい。(1)ノードを調整者または提案者として選出する。(2)トランザクションの提案をピアにブロードキャストし、次にピアは、提案を受け入れるか拒否する学習者の役割を引き受ける。そして(3)承認。大多数のノードが提案者を認めてその提案を承認すると、コンセンサスに達することができる。調整者の役割を引き受けた複製状態マシンは、次にコミットメッセージをブロードキャストしてすべてのピアにトランザクションを続行するよう通知する。
【0019】
同じ提案に対して複数のノードが調整者として機能しようとするシナリオを避けるため、パクソスは、連続する調整者のノードに順序を割り当て、提案番号に関して合意される値を選択する際に各調整者の選択を制限する。これをサポートするために、各ノードは、ノードが確認した最も直近に合意した提案のシーケンス番号の形跡を維持する。ノードが提案を出すとき、ノードは、認識している最後の値よりも高い値を持つ提案のシーケンス番号を生成し、それを他のノードにブロードキャストする。他のノードの大多数が、それよりも高いシーケンス番号を確認していないことを示す応答をした場合、ノードは、提案の調整者または先導者として機能することを許可される。その時点で、他の調整者は、現在の提案に関してコンセンサスに達するまで続行できない。提案者のシーケンス番号は、同時に調整者になろうとする他のノードに使用されることはなく、それ以降の提案はすべて、それ以降のトランザクションについてコンセンサスに達するためにはそれよりも高いシーケンス番号を使用しなければならない。
DConEとのコンセンサスの達成
【0020】
分散されたトランザクション処理に対するDConEの手法を理解するために、以下に、アクティブ-アクティブ構成の複製能力をサポートする各DConEのインスタンスの中核構成要素、すなわち提案マネージャ、ローカルシーケンサ、合意マネージャ、およびグローバルシーケンサについて詳述する。任意のノードのクライアントで処理するために分散システムに提案が送信されると、DConEのローカルインスタンスの提案マネージャ構成要素は、トランザクションに対する提案を生成し、この提案はトランザクションデータを含む。このようなトランザクションデータは、少なくともクライアントのIDおよび提案された変更を含んでいてよい。次にDConEインスタンスは、その提案にローカルシーケンス番号(LSN)を割り当てる。LSNは、その場所にある他のすべてのトランザクションと比較してトランザクションが送信された順序を反映している。LSNは、連続番号である必要はなく、単に一意である必要がある。次にローカルシーケンサは、割り当てられたローカルシーケンス番号の付いた提案をその提案ログに保存する。以下に説明する合意プロセス中にDConEのローカルインスタンスが提案をピアに送信できるようになる前にネットワークまたはサーバの停止が起きた場合、回復後にその提案を再送信する。
【0021】
次に、DConEの合意マネージャが合意番号を決定し、合意番号は、ローカルDConEインスタンスが他のノードのピアに送信するという提案に対して提案されたグローバルシーケンス番号(GSN)を表している。パクソスに従えば、合意番号は単に、全ノードに承認された最後の提案のGSNの増分である。次にこの合意番号を使用して、全ノードにわたる提案順序に関してコンセンサスを取得し、単一コピー等価を維持するようにする。次に、合意番号の付いた提案は、合意ログに書き込まれてよい。各々のDConEインスタンスの合意ログまたは複製された台帳は、少なくとも完了した合意をすべて含み、完了した合意が生じたサーバノードとは無関係である。ネットワークが停止した場合、合意ログは、ノードが分散システム内の他のノードへの接続を失う前にどこで中断したかを示し、それをDConEの自動回復プロセスで役立てる。
【0022】
次に、ローカルDConEインスタンスの合意マネージャによって合意プロトコルを開始してよく、提案は、そのピアに送信されてよい。DConEインスタンスのピアのクォーラムが提案について合意に達すると、グローバルトランザクションの順序がその時点で達成されているため、合意番号は全ノードにわたるGSNとして使用される。クォーラムの概念により、全ノードが使用可能になるか合意することを必要とせずに、DConEが合意に達することが可能になる。クォーラムの概念は、DConEのパフォーマンスおよびそのフォールトトレランスに重要な要素である。
【0023】
合意が競合する提案に先取りされた場合、合意マネージャは、新たな合意番号を用いて合意に達するよう繰り返し試みる。合意が再試行されるたびに、合意ログに新たな合意番号のエントリが作成される。クォーラムによって合意に達すると、ローカルアプリケーションノードは、合意された提案をそのグローバルシーケンスにエンキューする。その時点でローカルDConEインスタンスは、トランザクションを合意されたグローバルシーケンス番号の順序でそれぞれのロックスケジューラに渡して処理する。提案を発信したDConEインスタンスは、トランザクションの実行を完了するために他のノードを待つことはないことに注意することが重要である。DConEインスタンスは、合意に達するのを待って、ユーザがWANを介してLAN速度のパフォーマンスを経験できるようにするだけである。
ローカルシーケンスの維持
【0024】
DConEは、パフォーマンスの理由から同時の合意をサポートするため、クォーラムが順不同で合意に達する可能性がある。つまり、別のノードで事前に送信されたがまだ合意されていない提案の後に送信された提案について合意に達する可能性がある。
【0025】
DConEは、複数のサーバノードから提案を受け取り、その提案を一意のグローバル順序に照合し、他の1つひとつのサーバノードにアクセスできるようにすることを想起されたい。DConE上に構築されたアプリケーションのことも検討されたい。場合によっては、特定のサーバノードでは、先着順または先入れ先出し(FIFO)を実装し、到着時間に基づいて提案を処理し、提案が同じ順序で出力されることを確実にすることが望ましいことがある。この種の順序付けは、例えば公平性ポリシーまたは因果的順序付けの制約によって命令されてよく、この制約は、1つの実施形態によれば、複数のサーバノードが発行した提案をすべて取得してそのすべてに関してコンセンサスに達することによって満たされる2つの要件である。いかなる後処理も決定論的な方法で実行される。DConEから生じる出力は、DConEのプロパティであるサーバノード全体で同一であるため、後処理工程から生じる出力は、全サーバノードで同一の合意シーケンスになり、そのためサーバノードは、アプリケーション全体で一貫性を維持するためにGSNで命令された順序で消費される。
【0026】
以下は、提案の送信のローカルシーケンスを維持しつつDConEがグローバルトランザクションの順序を決定することを可能にする1つの実施形態を示している。サーバノードが最初の2つの提案をDConEに送信し、提案マネージャがそれぞれの提案にLSN1およびLSN2を割り当てると仮定する。さらに、GSNが1から25である合計25の提案が合意されていて、他のサーバノードから介入の提案が送信されていないと仮定する。さらに、クォーラムはLSN1に関して合意に達する前にLSN2に関して合意に達したと仮定する。ローカルシーケンスがアプリケーションにとって重要ではなかった場合、LSN2は合意番号およびGSN26を有し、LSN1は合意番号およびGSN27を有することになる。すると提案は、どのサーバノードでもその順序で書き込まれる。提案が生じた場所に関係なくローカルシーケンスをすべてのノードで維持するようにすることが要件である場合、1つの実施形態では、LSNと、合意番号(この場合、GSNになる場合とならない場合がある)と、提案者のID(提案が生じたDConEインスタンスに対してグローバルに一意の識別子を表わす)との組み合わせを使用して、ローカルシーケンスの順序を維持するグローバルシーケンスを作成する。実際に、グローバルシーケンスは、提案者のID内にローカルシーケンスの順序で分類され、以下に考察する各サーバノードのロックスケジューラに渡される。
ロックスケジューラ
【0027】
DConEが合意済みの提案を各々のサーバノードで動作しているアプリケーションに渡す、各サーバノードのロックスケジューラ。ロックスケジューラは、分散型ロックマネージャではなくデータベーススケジューラのように機能する。「ロックスケジューラ」という用語は、同時制御のためにアプリケーションによって指定されたロックに依存しているために、競合していない多数のトランザクションを平行して処理できるということに由来している。ロックスケジューラは、グローバルな順序には依存しない。ロックスケジューラがトランザクションを各サイトの基本アプリケーションに送信する順序は、そのサーバノードのそれぞれのDConEインスタンスから渡されるグローバルにシーケンスされたイベント(GSNキュー)のローカルキューによって決まる。これによって、各サーバノードの完全にローカルなロックスケジューラは、グローバル状態の知識が一切なくとも単一コピー等価を達成できる。1つの実施形態では、基本アプリケーションとのインターフェースとなるのはロックスケジューラであり、直接DConEとのインターフェースになるのではない。
パフォーマンスおよびスケーラビリティの達成
【0028】
DConEは、パクソスアルゴリズムの機能を大幅に拡大し、それによって大規模に強化したパフォーマンスが可能になる。このように拡大した機能として、クォーラム、同時合意処理、バックオフと衝突回避、動的グループ進化、分散型ガベージコレクション、識別するために提案および弱い保留に対して際立った公正なラウンド番号などがあるが、いくつかの領域はそのような拡張機能に含まれる。
クォーラム
【0029】
DConEで用いられるクォーラムの概念により、クライアントの分散およびサーバノード全体の活動に基づいてパフォーマンスを最適にし、ネットワークおよびサーバが停止する影響を最少にすることが可能になる。使用可能なクォーラム構成オプションとして、多数決、シングルトンおよび全会一致がある。分散システムは、多数決のクォーラムによって達成されるコンセンサスで動作するように構成されてよいが、シングルトンおよび全会一致のコンセンサスも可能である。多数決のクォーラムでは、大多数のサーバノードが提案に応答することが求められる。DConEは、分散システムに偶数のサーバノードがある場合にタイブレーカーとして機能できる際立ったノードの概念もサポートする。シングルトンのクォーラムでは、1つのノードのみが提案に応答する必要がある。この構成でシングルトンクォーラムになるように選択されたサーバノードは、クライアント数および取引アクティビティのレベルが最大であるサーバノードであってよい。利点は、トランザクション量が最も多いサーバノードで合意プロセス中にワイドエリアネットワーク(WAN)トラフィックが発生しないことである。合意は、クォーラムノードのローカルDConEインスタンスによって完全に処理される。他のサーバノードは、シングルトンクォーラムノードから合意を得るために提案を送信するが、通常は高速のパフォーマンスを実現する。なぜなら、他のサーバノードは、提案をそれぞれのローカルロックスケジューラに渡す前に、指定されたシングルトンサーバノードが提案に合意することを要求するだけで、提案の実行を完了するわけではないからである。全会一致クォーラムは、全サーバノードが応答することを要求し、本質的には最も効率の低い構成であり、WANトラフィックを最も多く発生させる構成である。
【0030】
DConEは、太陽追尾モデルに基づいて、ある領域から別の領域へのクォーラムの回転もサポートする。これにより、グローバルに分散されたシステムの各サイトでの通常の労働時間に基づいてパフォーマンスを最適化できる。また、クォーラムの手法は、DConEの自動回復特性と組み合わせて機能し、分散システムでのネットワーク停止およびサーバクラッシュの影響を最少にする。
同時合意
【0031】
パクソスアルゴリズムでは、一度に1つの提案しか合意に達することができない。これは、トランザクション量が多い環境ではパフォーマンスの低下に明らかな影響がある。DConEでは、提案ごとにサーバノードのすべてまたは1つのクォーラムが合意に達するのを待つのではなく、複数の提案者からの複数の提案を同時に進行させることが可能である。
バックオフおよび衝突回避
【0032】
DConEは、ピアによる提案者のプリエンプションが繰り返されるのを回避するためにバックオフ機構を提供する。従来の複製状態マシンでは、プリエンプトされた提案者は、合意番号がプリエンプタの合意番号よりも高い新たなラウンドを直ちに開始できる。この手法では、合意プロトコルが長期にわたってスラッシングし、パフォーマンスが著しく低下するおそれがある。DConEでは、ラウンドがプリエンプトされると、提案を開始したDConEインスタンスは、バックオフの遅延期間を計算する。次に提案者は、この期間待機してから次のラウンドを開始する。DConEは、非スイッチドイーサネットのCarrier Sense Multiple Access/Collision Detection(搬送波感知多重アクセス/衝突回避方式)(CSMA/CD)プロトコルに類似した手法を用いる。
自動バックアップおよび回復
【0033】
DConEのアクティブ-アクティブ構成の複製能力は、1つひとつのサーバノードを他の1つひとつのサーバノードのミラーに変えることによって、デフォルトで継続的なホットバックアップを提供する。これは、ネットワークまたはサーバの障害が原因でサーバノードが遅れた場合にWANまたはLANを介した自動回復を行うために活用される。手動での介入は必要ない。分散システムのサーバノードがピアとの接触を失ってもクライアントがその場所で引き続き利用できる場合、それらのクライアントは引き続き分散システムへの読み取りアクセス権を有するが、合意プロセスは続行できないため、提案を開始することはできない。これによって、サーバノードがピアと同期しなくなるためにすべてのサーバノードに対して単一コピー等価という要件に反することになるスプリットブレインシナリオが生じるのを防止する。ただし、クォーラムがまだ利用可能であれば、引き続き残りのサーバノードで提案を送信できる。これによって、分散システムでのネットワークの停止およびサーバの障害の影響が最少になる。障害が発生したサーバノードがオンラインに戻ると直ちに、そのDConEインスタンスは、オフライン中にピアによって合意されたすべての提案に自動的に追いつく。これは合意ログを用いることで達成されてよい。合意ログは、停止が起こる前にサーバノードで最後に合意された提案を含んでいる。回復プロセスが始まると、サーバノードのDConEインスタンスは、ピアからの合意ログに記録された最後のトランザクションの後の合意をすべて要求する。さらに、合意プロセスを完了しなかった提案ログに残っているどのような提案も、追いつきが完了するとローカルDConEインスタンスによって自動的に再送信される。これはつまり、分散システムのサーバノード全体で何らかの提案に関して合意に達する前または後に停止が起こるかどうかに関係なく、データが失われることはないということである。
【0034】
さらに、DConEの自動回復能力により、ディスクミラーリングソリューションの必要性がなくなる。ディスクミラーリングソリューションは、WANではなくLAN上でのみ機能し、回復を達成するために管理者の介入を必要とする。その結果、これらのソリューションは、人的エラーによるダウンタイムの延長およびデータ損失のリスクをもたらす可能性がある。最後に、DConEの自動回復特性により、ユーザーアクセスを途絶することなく、メンテナンスのためにサーバをオフラインにすることも可能になる。なぜなら、クライアントは、オフラインのときに別のサイトのサーバノードにリダイレクトできるからである。これにより、グローバルに分散した環境で24時間常時動作することが可能になる。
【0035】
図1は、1つの実施形態による分散調整エンジン(DConE)を使用する分散システムの図である。1つの実施形態によれば、(好ましくは奇数の)複数(例えば3、5、7…)のサーバノードが、単一のDConE108またはDConE108の別個のインスタンスによってコンピュータネットワーク上に用意され、調整されてよい。単なる例示を目的として、
図1には3つのサーバノード102、104、106を示しており、それぞれがDConE108のインスタンスに結合されている。実際、DConE108は、各ノードまたはノードのクラスタ(互いにかなり離れていてよい)でエージェントまたはインスタンスとして構成されてよく、エージェントまたはインスタンスは、LANなどのネットワークまたはインターネットなどのWANを介して互いに調整し合う。1つの実施形態によれば、サーバノード102、104または106のうちの1つで開始されたDConEインスタンス108によって生じた合意は、DConE108によって一貫した方法で他のサーバノードに伝搬される。このようにして、顧客のアプリケーションは、分散システムに結合された全サーバノードに対して分散かつ/または複製される、一貫して順序付けされた合意に頼ることができる。本明細書に開示する複製方法は、分散システムに対して可用性が高いアクティブ-アクティブ構成モデルを提供し、分散システムを構成するサーバノード間での負荷分散を可能にするものである。
【0036】
DConE108は、合意(例えば、取引所または市場で発生するトランザクションをすべて記録する分散型台帳の更新、バージョン管理されたソフトウェアプロジェクトの変更、および/または任意の分散データベースまたはクライアントアプリケーションの変更)のグローバル順序を決定するように構成されてよい。複製状態マシンまたはクライアントアプリケーションはすべて同じ状態で開始し、サーバノードはすべて同じ決定論的順序で更新を適用するようになるため(ただし、実施形態によれば、必ずしも同時でなくてもよい)、複製状態マシンまたはクライアントアプリケーションの状態は、ノード全体で一貫性を維持する(または一貫性を保つようになる)。
【0037】
1つの実施形態によれば、また
図1に示したように、複数のサーバノード102、104、106に対する合意の一貫性は、以下のように達成されてよい。(1)に示したように、サーバノードのうちの1つ(この場合はサーバノード102)は、クライアントの要求または提案を顧客から受け取る。それは例えば、名前スペース、アプリケーションの状態を変更する提案、最終的に分散型台帳を更新させることになる指定量の商品またはサービスを売買する要求、データベースを変更する提案、あるいはファイルにデータブロックを追加したり、ファイルを作成したり、ディレクトリを作成したりする提案である。
図2に示したように、1つの実施形態によれば、クライアントの要求または提案200は、タプルとして形成されてよく、かつそのような各タプルは、202で示したように、クライアントから提供される一意の要求識別子と、提案がアプリケーション提案(アプリケーションの状態を変更する提案)かDConE制御提案(DConEが内部で使用する提案)かを判断する提案の種類204と、一意のクライアント識別子206と、提案の要求208を形成するバイト列とを含んでいてよく、バイト列はクライアント提案200のペイロードを形成する。
図2の208に示したクライアント提案のペイロードは、DConE108には不透明であってよい。したがって、DConE制御提案は、クライアントアプリケーションではなくDConEの処理対象となる。DConE制御提案の一例が、共同所有権の米国特許第9,332,069号に記載されている、DConEがそのメンバーシップを変更するための提案であり、同文献の全容を本願に援用する。
【0038】
ここで
図1およびこの図で展開されている例に戻ると、サーバノード104は提案1を受け取り、サーバノード106は提案2を受け取る。1つの実施形態によれば、サーバノード102が、提案3内にカプセル化されたイベント(例えば読み取り、書き込み、削除など)でアプリケーションの状態を直ちに更新し、サーバノード104が、受け取った提案1内にカプセル化されたイベントでアプリケーションの状態を直ちに更新し、サーバノード106が、提案2内にカプセル化された(1つまたは複数の)イベントでアプリケーション、名前スペースなどの状態を直ちに更新し、その後、そのような更新をサーバノード102、104、106のアプリケーションの他の状態に伝搬し、これらの別々のクライアント要求が、永続化された共有キュー(例えばリレーショナルデータベース)からDConE108へ提案として渡され、大多数の承認者ノードがそれについて合意に達した後に(合意は、使用されている何らかのコンセンサスプロトコルによって達したコンセンサス)、DConE108がそれらの提案を順序付けた合意のリストとしてサーバノード102、104、106に送り返す。これは本明細書に記載の通りである。
【0039】
これは、
図1に示したように、提案3(例えばクライアント要求3)を受け取ったことへの応答であり、サーバノード102は、(2)に示したように提案Prop3をDConE108に出してよい。同じように、提案1(例えばクライアント要求1)を受け取ったことに応答して、サーバノード104は、(2)に示したように提案Prop1をDConE108に出してよく、提案2(例えばクライアント要求2)を受け取ったことに応答して、サーバノード106は、同じく(2)に示したように提案Prop2をDConE108に出してよい。1つの実施形態によれば、DConE108はその後、大多数の承認者ノードのコンセンサスを通じて合意を得て、合意済みの提案をシリアル化し、(3)に示したように受け取った提案を順序付けし、(4)に示したように、グローバルに順序付けした(この場合、AGR3の次がAGR1、その次がAGR2という順序の)合意の永続化された出力キューとして合意されているそれらの提案を、サーバノード102、104、106で稼働しているアプリケーションに同様にフィードバックする。サーバノード102、104および106のクライアントアプリケーションは、順序付けされた合意のシーケンスAGR3、AGR1およびAGR2を受け取ると、これらの合意をその決定論的な順序で実装し、それに応じてそのそれぞれの状態を更新して、各々がサーバノード102、104、106全体で一貫性を維持する(かつ/または一貫性を保つ)ようにする。このようにして、アプリケーションの状態は、(5)で示唆したように、一貫性を損なうことなく非同期で更新されてよい。次に、これらの更新は、サーバノード102、104、106に結合していてよい、またはアクセス可能であってよい(ただし、110、112および114に破線で示したように必須ではない)それぞれのローカル永続ストレージ110、112、114に日々のトランザクションとして保存されてよい(ただし必須ではない)。次に、必要に応じて、クライアント要求を送信したクライアントに通知を返してよい。
【0040】
そのため、1つの実施形態によれば、サーバノード102、104、106は、クライアントの要求を直接記録するのではなく、コンセンサスを通じた合意、シリアル化および順序付けのためにそれらを提案として再パッケージ化してDConE108にリダイレクトする。次に、これらのサーバノードに格納されているアプリケーションおよび/またはデータベースの状態の更新は、永続的でグローバルに順序付けされた一連の合意としてDConE108からDConEによって出される。これは、クライアント要求が最終的に実装されるときに各サーバノード102、104、106のアプリケーションが更新されることを保証するものであり、それによって更新が、クラスタ内のサーバノードの意図したアプリケーションすべてに明白かつ一貫して適用されるようにする。このようにして、分散システム全体での複数のサーバノードの各々のアプリケーションの状態は、時間を経ても一貫した状態に維持され得る。
【0041】
したがって、1つの実施形態によれば、DConE108の重要な役割が、クライアント要求をサーバノードから受け取った提案として処理し、それを永続的でグローバルに順序付けした合意シーケンスに変換することである。次に、サーバノード(これは地理的にもタイムゾーンでもかなり離れていることがある)は、そのグローバルに順序付けした合意シーケンスから合意の基礎となる変更またはトランザクションを実装し、順序付けされた変更または更新をクライアントのアプリケーションに提供してよい。
【0042】
図3に示したように、提案がアプリケーション提案であろうと制御提案であろうと、提案タプルをDConEのバージョン全体で不変のフォーマットで符号化してよい。クライアント提案300は、DConE108への入力キューに格納されているため、ローカルシーケンス番号すなわちLSN302と対になっているクライアント提案200を含んでいてよい。動作に関して、DConE108に送信する提案を作成するとき、サーバノードはその提案にLSNを与えるが、これは単なる整数であってよい。1つの実装形態では、LSNはサーバノードに対してのみローカルである。通常の動作では、DConE108は、入力キューからクライアント提案を1つデキューする処理をし、他の承認者ノードとの合意を達成し、提案にグローバルシーケンス番号(GSN)を割り当てる。次にDConE108は、そのようにグローバルに順序付けされた提案を出力キューと称する共有の永続的な出力キューに出力してよい。1つの実装形態では、グローバルに順序付けした提案を受け取って格納するためにリレーショナルデータベースを使用してよく、提案は、その提案が制御提案であれば、アプリケーションによって消費されるか、DConE自体によって消費されるDConEから出力される。永続化されグローバルに順序付けされた提案の各々のエントリのフォーマットとして、GSNおよび提案があってよい。このフォーマットおよび符号化は、DConEのバージョン全体で不変であってよい。次にサーバノードのアプリケーションは、合意済みで順序付けされた提案(アプリケーション提案の場合)を、出力キューからGSNの順に指定された順序でデキューし、処理する。DConE108は、GSNに従って合意を実行する番になったときは、どのような制御提案でも処理する。
【0043】
1つの実施形態によれば、GSNは、単調に増えていく一意の番号として構成されてよいが、そうでなければ当業者が認識し得るように構成されてよい。GSNは、アプリケーションの状態を更新する際に様々なサーバノードの進捗を比較し、サーバノード全体でその状態の一貫性を維持するためにも使用してよい。例えば、サーバノード102がGSN1と番号付けされた合意を処理したばかりで、この番号がサーバノード104によって処理されたばかりのGSN2よりも小さい場合、サーバノード102のアプリケーションのインスタンスは現在、サーバノード104のアプリケーションのインスタンスよりも早い状態にあるということになる。
【0044】
1つの実装形態によれば、
図4に示したように、合意された提案300のGSN402は、それ自体が、合意が合意に至ったDConEのバージョン番号404と、DConEのそのバージョン内でのグローバルシーケンス番号406とが、例えば{バージョン番号、バージョンシーケンス番号}という形式になっている2つの部分からなるタプルであってよい。アプリケーションは、現在のDConEバージョン番号と一致する永続化された合意の出力キューからGSNのみをデキューして処理する。これを、バージョン番号を変更するように指示されるまで行い、この指示により、アプリケーションがバージョン番号の異なる(例えば更新された)DConEから出された合意を処理し始める。前述したように、DConEのバージョン番号が異なる理由の1つは、DConEを定期的に更新する必要があるからである。
【0045】
1つの実施形態によれば、クライアント要求の読み込みには、コンセンサスに達するためのDConE108を必要とせず、書き込む必要があるだけである。1つの実施形態によれば、DConE108は、基礎となるクライアントアプリケーションのインスタンスが全サーバノードで常に同一であることを保証するわけではないことに注意されたい。むしろ、DConE108は、サーバノード102、104、106のクライアントアプリケーションが他のすべてのサーバノードと同じ順序で各合意について一貫して学習することを保証する。このようにして、DConE108は、合意された提案をグローバルに順序付けしたシーケンスを生成するように構成され、そのシーケンスは、全サーバノード102、104、106に同様に供給されて、シーケンス通りに順序付けされた予測可能な更新をクライアントアプリケーションに対して行う。すると、これによってクライアントアプリケーションの各インスタンスが各サーバノードで同じ順序で実行することによって合意が消費され、その各インスタンスが予測可能で改ざん防止された決定論的な方法で進行することを確実にする。
【0046】
1つの実施形態によれば、ローカル永続ストレージ110、112、114に格納されているジャーナルの更新が実行されてよい。ただし、サーバノード102、104、106のクライアントアプリケーションの一貫性は、そのようなジャーナルの更新には左右されず、1つの実施形態によれば、各々の永続ストレージ(ある場合)は、サーバノードに対してローカルであり、ネットワークを介して他のサーバノードと共有されない。同じように、サーバノード102、104、106どうしでクライアントアプリケーションの一貫性を維持することは、メモリまたはプロセッサリソースなどの他のリソースを共有することに依存するものではない。
【0047】
実施形態によれば、分散システムには好適な(主要な、あるいは際立った)サーバノードはない。実際、1つ以上のサーバノードに障害が発生した場合、あるいはメンテナンスのために(または何らかの他の理由で)オフラインになった場合、他のアクティブなサーバノードが使用可能になってクライアント要求(提案)に対応し、アクセスが中断されることはない。1つの実施形態によれば、以前にダウンしていたサーバノードがオンラインに戻るとすぐに、そのサーバノードは自動的に他のサーバノードのサーバと再び同期し得る。そのような同期は、サーバノードがダウンしたかオフラインになった後にDConE108が出したすべての合意済みの提案を学習することを含んでいてよい。全サーバノードのクライアントアプリケーションが常に維持されるか同期状態になるため、スプリットブレイン状態とデータ損失の両方がなくなり、それによってデフォルトで継続的なホットバックアップを実現する。フェイルオーバーと回復の両方が即時かつ自動であり、それによって手動で介入する必要性および管理者エラーのリスクがさらになくなる。さらに、サーバノード102、104、106のいずれもパッシブまたはスタンバイのサーバノードとして構成されてはいない。実際、1つの実施形態によれば、分散システムのサーバノードのサーバはすべて、分散システムへのアクセスまたは分散システム内のトランザクションに対する同時のクライアント要求をサポートするように構成される。その結果、これによって、仕事量が増すことでパフォーマンスを犠牲にすることなく、分散システムを容易に拡張して追加のサーバノードをサポートすることが可能になる。1つの実施形態によれば、現在の分散システムにはパッシブスタンドバイサーバはなく、単一の主要調整サーバノードの脆弱性およびボトルネックはなくなる。さらに、複数のサーバノード102、104、106(および/または
図1に示していない他のサーバノード)にクライアント要求を分散することは、本質的に、利用可能な全サーバノードに処理の負荷およびトラフィックを分散することである。サーバノード102、104、106どうしでのアクティブな負荷分散も実行してよい。
【0048】
1つの実施形態によれば、単一の提案が、DConEへの入力キューとDConE内部の永続状態の両方に存在することはできない。実際、提案は、入力キューにあるか、DConEによってデキューされ、処理され、DConE内部のデータベースなどの中に内部で永続しているかのいずれかである。したがって、そのような障害から保護するために、入力側では、クライアント提案がDConEによって2回合意されないように、そしてDConEの出力側では、合意済みの提案(「合意」とも称する)が2回出力されないように注意される。入力側でこれを達成するために、1つの実施形態によれば、DConEが入力キューから提案をデキューして読み取るときに、DConEがこの提案に関連するLSN302を以前に見たことがないことを確認するためにチェックを実行してよい。DConEがデキューしたばかりの提案のLSNと関連するクライアント提案200を以前に処理したことがある場合、提案をクライアントキューからDConE108にデキューし、かつ/または転送する際に障害に発生したと仮定して、その提案は除外される。したがって、1つの実施形態によれば、DConE108は、準備ができている各LSN3021の記録を維持する必要はなく、最後の記録だけを維持する。同じように、DConEの出力側での障害から保護するために、DConE108は、出力キューに合意を追加する前に、同じGSNを有する出力キューに他の合意がないことをDConE108が確認するように構成されてよい。実際、同じGSNに関連する他の合意が出力の中にまだ存在していないとDConE108が判断した後でのみ合意オブジェクトを出力キューに委ね、それによって障害が原因で合意が出力キューに2回以上出力される問題に対処する。そうするために、1つの実施形態によれば、DConEの永続化された出力キューは、DConE108から出力された最後のGSNの記録を維持する。
アップグレード時のDConEアプリケーション提案の処理
【0049】
実施形態は、分散調整エンジンが更新されているときのWANを介したそのような分散システムで、合意の一貫性およびクライアントアプリケーションの状態の一貫性を維持する方法、装置およびシステムにも及ぶ。DConEエンジンをアップグレードする必要がある場合に、顧客が中断に遭遇してはならず、クライアントアプリケーションの状態は、DConEのあるバージョンからDConEの別のバージョンに切り替える間であっても決定論的で予測可能なように進展し続ける必要がある。そうするために、1つの実施形態では、クライアントが不変プロトコルを使用してDConEの入力キューおよび出力キューと相互作用することを求め、その際、提案をデキューして処理し、合意を達成し、合意を出力するプロセスは、アップグレードプロセスの過程で継続するように維持される。
【0050】
本明細書では、
図5を参照すると、DConEの現在のバージョンは、506に示したようにDConEがv1であると仮定されている。動作に関して、前述したように、DConE v1 506のプロセスは、実行中で、合意を行い、DConE入力キュー508から読み取り、GSNの順序の合意をDConE出力キュー510に出力している。これらの合意は、クライアントアプリケーション502によってGSNの順序で処理される。DConE506の更新が必要になると、(例えば)
図2の512に示した別の一連のDConEプロセスであるDConE v2がインスタンス化されて各ノードで開始されてよい。次に、DConE v2のプロセス512のそれぞれのインスタンスは、1つの実施形態によれば、514に示したようにDConEの入力キュー508に接続されてよい。同じように、DConE v2のプロセス512のそれぞれのインスタンスは、516に示したようにDConEの出力キュー510にも接続されてよい。最初のうちは、1つの実施形態によれば、DConE v2 512は、入力キューおよび出力キュー508、510を監視するだけで、クライアント提案を処理することはない。
【0051】
1つの実施形態によれば、DConE v1 506からDConE v2 512への切り替えを希望する場合、本明細書でバージョン変更提案と称する特別な提案を各ノードの入力キュー508に追加してよい。バージョン変更提案は、1つの実施形態によれば、DConE v2 512のバージョン番号を含んでいてよい。この段階では、DConE v1 506とDConE v2の両方が入力キュー508を監視しているが、DConE v1 506のみが提案を処理し、対応する合意をその出力キュー510に出力する。バージョン変更提案がDConE v1 506に達すると、バージョン変更提案はデキューされ、DConE v1 506による処理へと送信される。1つの実施形態によれば、DConE v1 506によるバージョン変更提案の処理は、DConE v1 506からDConE v2 512への切り替えを効果的に指示する。1つの実施形態によれば、このバージョン変更提案は、DConE v1 506でデキューされ処理される最後の提案であり、バージョン変更提案についての合意が出力キュー510に出力される。その後、すでに入力キュー508および出力キュー510に結合しているDConE v2 512は、バージョン変更提案に続いて入力キュー508のすべての提案を処理する。この時点で、DConE v1 506とDConE v2の両方が、合意を取り付けていて、提案を出力キュー510に入れている。ただし、DConE v1 506がバージョン変更提案を受け取って処理した後は、合意を取り付けて出力キュー510に出力するのはDConE v2 512のみになる。1つの実装形態では、DConE v2 512によって処理される最初の合意は、最初の所定のGSN、例えばGSNゼロ(0)に関連付けられてよい。ただし、当業者が理解し得るとおり、選択した最初の所定のGSNが以前に使用されていないかぎり、他の開始GSNを使用してよい。
【0052】
動作に関して、1つの実施形態によれば、入力キュー508に送信されたバージョン変更提案は、DConE v1 506によって処理され合意されてよく、また、
図4を参照すると、{v1,X}と付したバージョン番号404とバージョンシーケンス番号406の両方を含むGSN402が割り当てられてよい。1つの実施形態によれば、クライアントアプリケーション502は、この{v1,X}の合意を消費するときに、v1のバージョン番号404を有する合意の処理を停止するように構成されてよい。つまり、クライアントアプリケーション502は、バージョン変更提案に対応する合意を受け取って消費すると、DConE v1 506からさらに他の合意を消費するのを停止するということである。さらに、1つの実施形態によれば、クライアントアプリケーション502に提示される、DConE v1 506に由来する出力キュー510についての合意で、バージョン変更提案のクライアントアプリケーション502に対応する合意のバージョンシーケンス番号よりも大きいGSN(具体的にはバージョンシーケンス番号406)を有するものは、次に、ルーティングされ、入力キュー508に送り返され、そこでDConE v2 512によって処理される。例えば、クライアントアプリケーション502が合意{v1,X+1}で提示される場合、バージョンシーケンス番号がXよりも大きいDConE v1 506から来る他の合意が、対応する提案としてルーティングされて入力キュー508に送り返され、DConE v2 512によってデキューされて合意され、その結果生じる合意はv2のバージョン番号である。次に、アプリケーション502は、合意{v2,0}を探すように切り換えてよく、この場合0は最初の所定のバージョンシーケンス番号406である。次に、新しくアップグレードされたDConE v2 512は、入力キュー508の提案を処理し始めてよく、その間は終始、上記に詳述したLSNチェック機構を使用して、以前に同じ提案をデキューして処理していないことをチェックする。
【0053】
n個のサーバノードの各々がバージョン変更提案を生成し、そのバージョン変更提案をそれぞれの入力キュー508に配置するので、対応する合意はn個あることに注意されたい。1つの実施形態によれば、バージョン変更提案に対応する最初の合意を確認した後、アプリケーションはそれ以降、同じバージョン番号の場合は遭遇するバージョン変更の合意を無視し、入力キュー508にルーティングし直さずにそのようにする。つまり、そのような合意は再度提案されない。1つの実施形態によれば、バージョンが古く(ここで展開されている例ではv1)、DConE v1 506が引き続き入力キュー508からの提案を処理しているためにクライアントアプリケーション502が提案を再度提案する場合、その提案は、DConE v1 506によってv1のバージョン番号で再度合意される。そして、DConE v2のプロセスが引き継いで単独で(DConE v1 506を除く)提案の処理を開始し、対応する合意を生成するまで、再度提案されることはない。
アップグレード時のDConE制御提案の処理
【0054】
1つの実施形態によれば、バージョン変更提案が入力キュー508に追加されれば、DConE v1 506を対象とする入力キュー508のいずれかのDConE制御提案が拒否されるか、新しいバージョンのDConE提案つまり、DConE v2 512で動作するように構成されている制御提案に変換されてよい。これが可能になるのは、バージョン変更提案が入力キュー508に追加された後、DConEの新しい方のバージョン(DConE v2 512)のみが入力キュー508から読み取っているからである。1つの実装形態では、DConE v2 512は、蓄積提案を処理するように構成されてもよいし、蓄積提案を拒否するように構成されてもよいし、あるいはDConE v1 506で動作するように設計されたのと同じまたはほぼ同じようにDConE v2 512で動作するように蓄積提案を書き直してもよい。1つの実施形態によれば、DConE v1 506で消費するように構成された制御提案が、バージョン変更提案が出された後に合意されるように、v1の制御提案(すなわち、DConE v1 506で消費するように構成された制御提案)は、バージョン変更提案よりも前に入力キュー508に追加されてよいが、DConE v1 506内の合意プロセスではその制御提案を出力時に再度順序付けてよい。次にv1の制御提案は、DConE v2 512で消費して合意するように、再度ルーティングされて入力キュー508に送り返されてよい。この場合、DConE v2 512は、そのような制御提案を数々の方法で処理し得る。1つの実施形態によれば、DConE v2 512は、制御提案を拒否し、制御提案が拒否されたことをクライアントに通知してよい。これによってクライアントには、DConE v2 512で消費するために制御提案を除外するか再フォーマットする機会が与えられる。あるいは、DConE v2 512は、蓄積提案の処理方法がわかっていればその蓄積提案を承認してよい。いくつかの実装形態では、DConEのいずれかの後のバージョンは、それ以前のDConEバージョンからのすべてまたは一部の制御提案を処理する能力を有するように構成されてよい。またあるいは、DConEの後のバージョンは(この例ではDConE v2 512)、v1タイプの制御提案を、意味の上では同等であるv2タイプの制御提案に置き換えて合意を達成してよい。
DConEの古いバージョンをオフにする
【0055】
1つの実施形態によれば、より新しいDConEバージョンがアップされ、稼動し、入力キュー508から合意をデキューし、それを処理し、対応する合意を出力キュー510に出すと、それに代えられた古い方のDConEは、オフにされてもよいし、あるいはさらに他の提案を処理しないように使用不可能にされてよい。ただし、DConEの古い方のバージョンのインスタンスは、まだ有効な合意がある場合はオフにしてはならない。それはつまり、まだ合意されていて出力キュー510に配置されている提案である。これに対処するため、1つの実施形態によれば、DConE v1 506のすべてのインスタンスが、オフにされる前に有効な合意がもうないことを確認するようチェックされる。そうすることで、未処理の提案が残ることがなくなり、かつ/またはDConEのアップグレードプロセスで再送信されなくなるようにする。
【0056】
図6は、1つの実施形態によるコンピュータ実装方法のフローチャートである。さらに詳細には、
図6は、複数のサーバノードでクライアントアプリケーションの一貫性を維持するコンピュータ実装方法のフローチャートである。B602に示したように、本方法は、複数のサーバノードの1つ以上に結合している第1バージョンの分散調整エンジン(DConE)を提供することを含んでいてよい。第1バージョンのDConEでは、B604に示したように、提案を入力キューで受け取って提案について合意に達してよく、第1の順序の合意を複数のサーバノードの1つ以上に結合している出力キューで出力してよい。第1の順序の合意は、本明細書に記載し図示したように、クライアントアプリケーションが第1の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定してよい。B606に示したように、バージョン変更提案に関して入力キューを監視してよく、バージョン変更提案について合意に達してよい。次に、バージョン変更提案についての合意を出力キューで出力してよく、第1バージョンのDConEは、それ以降に入力キューで提案についてそれ以上合意に達するのを停止してよい。
【0057】
B608に示したように、第2バージョンのDConEを提供し、複数のサーバノードの1つ以上に結合してよい。B608に示したように、第2バージョンのDConEでは、バージョン変更提案に対応する合意を出力キューに出力した後、入力キューで提案について合意に達してよく、第2の順序の合意を、バージョン変更提案に対応する合意から始まる出力キューで出力してよい。B610で要求されるように、第2の順序の合意は、合意に達した提案を含んでいてよく、クライアントアプリケーションが第2の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定してよい。その後、B612に示したように、バージョン変更提案についての合意を受け取った後に第1バージョンのDConEから受け取った合意済みの提案を、入力キューを介して第2バージョンのDConEに送り返して、第2バージョンのDConEがそれについて合意に達することができるようにしてよい。
【0058】
さらに他の実施形態によれば、第1バージョンのDConEは、バージョン変更提案に対応する合意が達成された後に第1バージョンのDConEが有効な提案について合意(現在進行中の合意)に達し終えた後、オフにされるか、消去されるか、あるいは動作不能にされてよい。第1および第2の順序の合意の各合意は、提案およびグローバルシーケンス番号(GSN)を含んでいてよく、グローバルシーケンス番号は、その提案について合意に達したDConEのバージョン番号およびバージョンシーケンス番号を含んでいてよい。各々のクライアントアプリケーションは、GSNが所定のバージョン番号と一致するバージョン番号を含んでいる提案のみを実行するように構成されてよい。所定のバージョン番号は、現在のバージョン番号か、あるいはDConEの更新が実施されたばかりの場合は、更新されたDConEのバージョン番号であってよい。このようにして、本方法は、所定のバージョン番号を第1バージョンのDConEから第2バージョンに変更することをさらに含んでいてよい。1つの実施形態では、合意済みの提案を第2バージョンのDConEに送り返すことは、クライアントアプリケーションのうちの1つによって実行されてよい。1つの実施形態によれば、提案は、クライアントアプリケーションの状態を変更するためのアプリケーション提案、および/または第1または第2バージョンのDConEを制御するかその構成を変更するように構成されているDConE制御提案を含んでいてよい。1つの実施形態では、第2バージョンのDConEは、a)第1バージョンのDConEを制御するか構成するように構成された制御提案を拒否するか、b)第1バージョンのDConEを制御するか構成するように構成された制御提案を受け入れ、それについて合意するか、またはc)第1バージョンのDConEを制御するか構成するように構成された制御提案を、第2バージョンのDConEを制御するか構成するように構成された、意味の上ではほぼ同じである制御提案に入れ替えてよい。
【0059】
本明細書に図示し、記載したように、1つの実施形態は、複数のサーバノード、第1バージョンのDConEおよび第2バージョンのDConEを含む分散システムである。1つの実施形態によれば、複数のサーバノードの各々または選択したものは、クライアントアプリケーションを含んでいてよく、クライアントアプリケーションの状態を変更し、対応する提案を生成するためのクライアント要求を受け取るように構成されてよい。複数のサーバノードの1つ以上に結合している第1バージョンのDConEは、入力キューの提案を受け取るように構成されてよく、その提案について合意に達し、第1の順序の合意を複数のサーバノードの少なくとも1つに結合している出力キューに出力するようにさらに構成されてよい。第1の順序の合意は、クライアントアプリケーションが第1の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定してよい。1つの実施形態によれば、第1バージョンのDConEは、バージョン変更提案に関する入力キューを監視し、それについて合意に達し、バージョン変更提案についての合意を出力キューに配置し、それ以降は入力キューで提案について合意に達しないようにさらに構成されてよい。第2バージョンのDConEは、入力キューおよび出力キューに結合されてよく、バージョン変更提案について合意に達した後は、入力キューで提案について合意に達し、かつバージョン変更提案についての合意から始まる出力キューで第2の順序の合意を出力するようにさらに構成されてよい。第2の順序の合意は、合意に達した提案を含んでいてよく、クライアントアプリケーションが第2の順序の合意を構成している合意を実行してそれに応じてそのそれぞれの状態を更新する順序を指定してよい。1つの実施形態によれば、クライアントアプリケーションの1つ以上は、バージョン変更提案に対応する合意を受け取った後に第1バージョンのDConEから受け取った合意済みの提案を、第2バージョンのDConEで合意するために入力キューを介して第2バージョンのDConEに送り返すようにさらに構成される。
【0060】
またさらに他の実施形態によれば、複数のサーバノードでクライアントアプリケーションの一貫性を維持するコンピュータ実装方法は、第1バージョンのDConEを提供することと;第1バージョンのDConEで、提案について合意に達し、クライアントアプリケーションが第1バージョンのDConEで合意した提案を実行してそれに応じてそのそれぞれの状態を更新する順序を指定する第1の順序の合意を生成することと;第2バージョンのDConE提供することと;第1バージョンのDConEでバージョン変更提案について合意に達することと;バージョン変更提案について合意に達した後、第2バージョンのDConEで提案について合意に達するのを停止し、クライアントアプリケーションが第2バージョンのDConEで合意した提案を実行してそれに応じてそのそれぞれの状態を更新する順序を指定する第2の順序の合意を生成することと;バージョン変更提案について合意に達した後に第1バージョンのDConEから受け取った合意済みの提案を、第2バージョンのDConEに送り返して、第2バージョンのDConEがそれについて合意に達することができるようにすることとを含んでいてよい。
物理的ハードウェア
【0061】
図7は、実施形態を実装し得るコンピューティングデバイスのブロック図を示している。
図7のコンピューティングデバイスは、バス701または情報を通信する他の通信機構、および情報を処理するためにバス701に結合している1つ以上のプロセッサ702を含んでいてよい。コンピューティングデバイスは、情報および(1つまたは複数の)プロセッサ702で実行する命令を記憶するためにバス701に結合しているランダムアクセスメモリ(RAM)または他の動的記憶装置704(メインメモリと称する)をさらに含んでいてよい。メインメモリ(有形で非一時的なもの。本明細書ではこの用語には、信号自体および波形は含まれない)704は、プロセッサ702が命令を実行している間に一時的な変数または他の中間情報を記憶するためにも使用されてよい。
図7のコンピューティングデバイスは、リードオンリーメモリ(ROM)および/または静的情報および(1つまたは複数の)プロセッサ702向けの命令を記憶するためにバス701に結合している他の静的記憶装置706も含んでいてよい。磁気ディスクおよび/またはソリッドステートデータ記憶装置などのデータ記憶装置707は、情報および命令を記憶するためにバス701に結合されてよく、例えば、
図1~
図6に関して示し開示した機能を実行するよう要求される。コンピューティングデバイスは、コンピュータのユーザに情報を表示するための表示装置721にバス701を介して結合されてもよい。情報およびコマンド選択を(1つまたは複数の)プロセッサ702に通信するために、英数字およびその他のキーを含む英数字入力デバイス722をバス701に結合してよい。別種類のユーザ入力装置が、カーソル制御装置723であり、これは例えば、方向情報およびコマンド選択を(1つまたは複数の)プロセッサ702に通信するため、かつディスプレイ721上のカーソルの動きを制御するためのマウス、トラックボール、またはカーソル方向キーである。
図7のコンピューティングデバイスは、通信インターフェース(例えばモデム、ネットワークインターフェースカードすなわちNIC)708を介してネットワーク726に結合されてよい。
【0062】
図示したように、記憶装置707として、磁気ディスク730、不揮発性半導体メモリ(EEPROM、フラッシュなど)732、731に提示したような磁気ディスクと不揮発性半導体メモリの両方を含むハイブリッド型データ記憶装置などの直接アクセスデータ記憶装置があってよい。符号704、706および707は、1つ以上のコンピューティングデバイスによって実行されたときに、分散システムの態様、本明細書に記載し図示した方法を実施する命令のシーケンスを表すデータが記憶されている、有形で非一時的なコンピュータ可読媒体の例である。これらの命令の一部は、クライアントコンピューティングデバイスにローカルで記憶されてよく、これらの命令の残りは、遠隔で記憶(かつ/または実行)され、ネットワーク726上で計算するクライアントに通信されてよい。他の実施形態では、これらの命令はすべて、クライアントまたは他のスタンドアローンのコンピューティングデバイスにローカルで記憶されてよく、さらに他の実施形態では、これらの命令はすべて、遠隔で(例えば1つ以上の遠隔サーバで)記憶され、実行され、結果はクライアントコンピューティングデバイスに通信される。さらに別の実施形態では、命令(処理ロジック)は、728に示したように、別の形態の有形で非一時的なコンピュータ可読媒体に記憶されてよい。例えば、符号728は、光学(または何らかの他の記憶技術の)ディスクとして実装されてよく、このディスクは、記憶されている命令を1つ以上のコンピューティングデバイスにロードするのに適切なデータキャリアを構成してよく、それによって(1つまたは複数の)コンピューティングデバイスを、本明細書に記載し図示した実施形態の1つ以上に対して構成し直す。他の実装形態では、符号728は、暗号化したソリッドステートドライブとして具現化されてよい。これ以外の実装形態も可能である。
【0063】
本発明の実施形態は、分散システムのコンピュータネットワーク上でクライアントアプリケーションの一貫性を維持するためのコンピューティングデバイスの使用に関する。1つの実施形態によれば、本明細書に記載した方法、装置およびシステムは、命令のシーケンスを実行し、メモリ704に含まれている本明細書に図示し記載したコンピュータ実装方法の態様を具現化する(1つまたは複数の)プロセッサ702に応答して、1つ以上のコンピューティングデバイスによって提供されてよい。そのような命令は、728に示したようなデータ記憶装置707または別の(光学、磁気などの)データキャリアなどの別のコンピュータ可読媒体からメモリ704に読み込まれてよい。メモリ704に含まれる命令のシーケンスを実行すると、(1つまたは複数の)プロセッサ702は工程を実行し、本明細書に記載した機能を持つ。代替実施形態では、記載した実施形態を実装するために、ハードワイヤード回路をソフトウェア命令の代わり、またはソフトウェア命令と組み合わせて使用してよい。そのため、実施形態は、ハードウェア回路とソフトウェアとの特定の組み合わせに限定されない。実際、任意の適切なコンピュータシステムで本明細書に記載の機能を実行してよいことを当業者は理解すべきである。コンピューティングデバイスは、所望の機能を実行するように動作する1つまたは複数のマイクロプロセッサを含んでいてよい。1つの実施形態では、その1つまたは複数のマイクロプロセッサによって実行される命令は、(1つまたは複数の)マイクロプロセッサが本明細書に記載の工程を実行するように動作する。命令は、どのようなコンピュータ可読媒体に記憶されてもよい。1つの実施形態では、命令は、マイクロプロセッサの外部の不揮発性半導体メモリに記憶されてもよいし、マイクロプロセッサに組み込まれてもよい。別の実施形態では、命令は、ディスクに記憶され、マイクロプロセッサに実行される前に揮発性半導体メモリに読み込まれてよい。
【0064】
上記の詳細な説明の一部では、ローカル処理ユニット、ローカル処理ユニット用のメモリ記憶装置、表示装置、および入力装置などのコンピュータ構成要素を備えていてよいコンピューティングデバイスによる動作のプロセスおよび記号表現を説明している。さらに、そのようなプロセスおよび動作では、例えばリモートファイルサーバ、コンピュータサーバ、およびメモリ記憶装置を含む異種の分散コンピューティング環境でコンピュータ構成要素を使用してよい。これらの分散したコンピューティング構成要素は、通信ネットワークを介してローカル処理ユニットにアクセス可能であってよい。
【0065】
コンピュータによって実行されるプロセスおよび動作は、ローカル処理ユニットおよび/またはリモートサーバによるデータビットを操作することと、1つ以上のローカルまたは遠隔のメモリ記憶装置内にあるデータ構造の中のこれらのビットを維持することとを含む。これらのデータ構造は、メモリ記憶装置内に格納されたデータビットの集合に物理的な編成を課し、電磁スペクトル成分を表す。
【0066】
本明細書に記載し図示したコンピュータ実装のデータ増強方法のようなプロセスを、総じて、所望の結果につながる一連のコンピュータ実行工程であると定義してよい。これらの工程では、一般に、物理的な量を物理的に操作する必要がある。必ずではないが通常この量は、保存、転送、組み合わせ、比較あるいは操作を行うことのできる電気信号、磁気信号、または光信号の形態であってよい。これらの信号をビットまたはバイト(バイナリ論理レベルを有する場合)、ピクセル値、ワーク、値、要素、記号、文字、用語、番号、点、記録、オブジェクト、画像、ファイル、ディレクトリ、サブディレクトリなどと呼ぶことは当業者には慣例である。ただし、これらの用語および同様の用語は、コンピュータの動作に適切な物理量に関連している必要があり、これらの用語は、コンピュータ内およびコンピュータの動作中に存在する物理量に適用される単なる従来のラベルであることに留意すべきである。
【0067】
コンピュータ内の操作を、追加、比較、移動、位置決め、配置、照明、除去、変更などの用語で呼ぶことが多いことも理解すべきである。本明細書に記載した動作は、コンピュータと相互作用する人間または人工知能エージェントのオペレータまたはユーザによって提供される様々な入力と合わせて実行される機械動作である。本明細書に記載した動作を実行するために使用される機械として、ローカルまたは遠隔の汎用デジタルコンピュータまたはその他の同様のコンピューティングデバイスがある。
【0068】
また、本明細書に記載のプログラム、プロセス、方法などは、特定のコンピュータまたは装置に関連するものでも限定されるものでもなく、特定の通信ネットワークアーキテクチャに関連するものでも限定されるものでもないことを理解すべきである。むしろ、様々な種類の汎用ハードウェアマシンを、本明細書に記載の教示に従って構築されたプログラムモジュールと共に使用してよい。同じように、リードオンリーメモリなどの不揮発性メモリに格納されているハードワイヤードロジックまたはプログラムを有する特定のネットワークアーキテクチャ内の専用のコンピュータシステムを介して、本明細書に記載の方法の工程を実行するための特別な装置を構築することが有利であることがわかる可能性がある。
【0069】
特定の例示的な実施形態を説明したが、これらの実施形態は、単なる例として提示したものであり、本明細書に開示した実施形態の範囲を限定する意図はない。そのため、前述の説明には、特定の特徴、特性、工程、モジュール、またはブロックが必要または不可欠であることを示唆する意図であるものは何もない。実際、本明細書に記載の新規の方法およびシステムは、他の様々な形態で具現化されてよい。さらに、本明細書に開示した実施形態の趣旨から逸脱しないかぎり、本明細書に記載の方法およびシステムの形態には様々な省略、置換および変更を加えてよい。