分散コンピューティングシステムは、いくつかの個々のパーソナルコンピューティング装置、サーバーコンピューティング装置、または、システム内に参加するために十分なプロセッサおよびストレージ能力を有する他の装置を備えることができる。分散コンピューティングシステムは、その構成するコンピューティング装置の能力を集約して、大幅に増大した処理機能およびストレージスペースを提供するか、あるいは、冗長性を実施して、複数の装置が同じ情報へのアクセスを提供することを可能にすることができる。このように、分散コンピューティングシステムのための1つの共通の使用は、共通ネットワークに接続された多数の異なるパーソナルコンピューティング装置の未使用の処理機能およびストレージスペースの集約である。このような分散コンピューティングシステムは、どの装置が現在システムの一部であるか、および、どの装置上に所与の情報の集合が格納されるかなど、システムに関する情報を維持することができる。この情報は、装置がそれらの機能およびストレージスペースを集約するために必要である可能性があり、結果として、各装置はコピーを含むことができる。システムの複数の装置の間の情報の同期を、後述の状態マシンの手法を通じて容易にすることができる。
代替として、分散コンピューティングシステムについてのますます共通の使用は、様々な形態の情報のための中央ストレージリポジトリの役割をすることができる、ネットワークサーバーの使用である。このような分散システムは、その構成する装置のすべての上の中央ストアをレプリケートして、中央ストレージと通信しようとするあらゆるクライアントが、通信する相手である好都合で効率的な装置を発見することができるようにしようとする。さらに、システムの分散の性質のため、停電、洪水、政情不安など、ローカルのイベントは少数のコンピューティング装置のみに影響を与える可能性があり、システム全体が適切に動作し続け、情報へのアクセスおよび他のサービスをクライアントに提供し続けることが可能となる。
このような分散コンピューティングシステムを状態マシンとして考えることができ、マシンの将来の状態は、現在の状態および取られるべきアクションによって定義される。分散コンピューティングシステムの各構成装置は次いで、システム全体の状態マシンを独立して実行することができる。状態マシンの手法を非同期的に実施することができ、複数の構成装置に渡る正確な共時性が維持される必要がなくなり、装置の間の同期を、装置のすべてのための初期状態を設定すること、および、続いて同じファンクションを同じ順序で実行することによって達成することができるようになる。同期を維持するための一般の方法は、分散コンピューティングシステムの構成装置がすべて、そのファンクションを実行する前に次のファンクションに合意すること、および、実行されたファンクションのリストを維持することを、可能にすることである。このように、あらゆる装置は同じ状態を有することができ、装置に障害が起こる場合、装置は、実行した最後のファンクションを決定し、リストから、その最後のファンクション以来合意されているいかなるファンクションをも識別し、これらのファンクションを実行することのみが必要である。
サーバーの役割をする分散コンピューティングシステムは特に、多国籍企業のための中央データベース、またはよく知られているワールドワイドウェブサイトなど、クライアントの多様な集合に大量の情報をサービスするために有用である可能性がある。このような状況では、多数のクライアントは、サーバーの役割をする分散コンピューティングシステムから情報を要求することができる。サーバー機能性を複数の装置に渡って実施することによって、より多くのクライアントに並行してサービスして、それにより、システム全体のスループットを増すことができ、サーバーは全体として、冗長性が増すために、障害の発生する傾向がはるかに低い。
構成コンピューティング装置が実行するべき次のファンクションに合意することができる1つのメカニズムは、Paxosアルゴリズムとして知られる。Paxosアルゴリズムでは、以下でさらに説明するように、いかなる装置もリーダーの役割をすることができ、提案番号のための推奨を分散コンピューティングシステム内の他の装置に送信することができる。他の装置は、それに対してその装置がすでに投票している最大提案番号を有する提案の指示、または、その装置がいかなる以前の提案にも投票していないという指示により、応答することができる。リーダーが応答を他の装置から受信した後、リーダーは、どのファンクションを提案するべきかを決定し、提案されたファンクションへの投票を要求することができる。各装置は、提案の最初の送信の後、および、要求された投票に先立つある時間に、より高い提案番号のための推奨に応答していない限り、提案に投票するようになる。装置のクォーラムが提案に投票する場合、提案は受け入れられ、リーダーはメッセージをすべての装置に送信し、すべての装置が合意されたファンクションを実行することを要求することができる。
Paxosアルゴリズムは、しかし、いかなる他のコンセンサスアルゴリズムとも同様に、多数のコンピューティング装置が障害を許容することを必要とする。具体的には、F数の障害を許容するために、このアルゴリズムは、少なくとも2F+1数のコンピューティング装置を備える分散コンピューティングシステムを必要とする。これらの装置のうち、単純な過半数のみが、コマンドを選択してシステムの適切なオペレーションを継続するために必要とされる。残りの装置は、コマンドを選択してシステムを動作する装置のうち1つに障害が起こるまで、未使用のまま残る可能性がある。
したがって、F+1数のメインコンピューティング装置のみを有する分散コンピューティングシステムは、障害が発生する場合に追加のF個の補助コンピューティング装置が使用可能である場合、F個の障害を許容することができる。以下で詳細に示すように、メインコンピューティング装置は、メインコンピューティング装置の1つに障害が起こるまで、コマンドを選択してシステムを動作することができる。続いて、リーダーは少なくとも1つのメインコンピューティング装置、および、補助コンピューティング装置の一部または全部を使用して、障害に先立ってメインコンピューティング装置のシステムのオペレーションを完了し、現在動作中のメインコンピューティング装置を含む新しいシステムを選択して、コマンドを提案および選択し続けることができる。代替として、メインまたは補助の十分な数のコンピューティング装置を備えるもう1つの状態マシンは、現在動作中のメインコンピューティング装置の新しいシステムを選択して、障害が発生したときに保留中であったオペレーションを完了し、コマンドを提案および選択し続けることができる。
分散コンピューティング環境
図面において類似の参照番号は類似の要素を指し、図面を見ると、本発明は、図1に示す例示的分散コンピューティングシステム10など、分散コンピューティングシステムによって実施されるとして例示される。提示を容易にするためにのみ、本発明を、システム10などの分散コンピューティングシステムを参照して説明し、システム10は、図1に示すように相互接続されたコンピューティング装置11ないし15を備える。当業者には理解されるように、本発明はすべての分散コンピューティング環境に適用可能であり、決して図1の例示的分散コンピューティングシステムによって限定されるように意図されず、図1の例示的分散コンピューティングシステムは提示のために簡略化されている。
図1はまた、単一のクライアントコンピューティング装置20も例示するが、本発明は、いかなる数のクライアントコンピューティング装置を有する環境においても動作するように意図される。クライアントコンピューティング装置20は、分散コンピューティングシステム10への汎用通信接続を有するとして例示される。当業者には知られるように、このような通信接続はいかなる通信メディアおよびブロトコルを使用することもでき、クライアントコンピューティング装置20が分散コンピューティングシステム10内のコンピューティング装置の1つまたは複数と通信することを可能にすることができる。
加えて、図1はコンピューティング装置30および31を例示し、これらのコンピューティング装置は分散コンピューティングシステム10の一部として示されないが、これらもまたシステム10への汎用通信接続を維持する。上記のように、この通信接続はいかなる通信メディアおよびブロトコルを使用することもでき、コンピューティング装置30および31が分散コンピューティングシステム10内のコンピューティング装置の1つまたは複数と通信することを可能にすることができる。以下でさらに詳細に説明するように、コンピューティング装置30および31は、システム10の一部になることなく、システム10によって実行された実行の結果を知ることができる。代替として、コンピューティング装置30および31は、システム10によって選択されたファンクションを知ることができ、そのファンクションをそれら自体で実行して、それにより独立してシステム10内の装置と同じ状態を維持することができる。
必要ではないが、本発明を一般に、プログラムモジュールなど、コンピューティング装置によって実行されるコンピュータ実行可能命令に関連して説明する。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データ型を実装する。また、本発明を多数の異なるコンピューティング装置により実施することができ、これらの装置には、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルコンシューマエレクトロニクス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどが含まれることは、当業者には理解されよう。上述のように、本発明をまた、分散コンピューティングシステム10など、分散コンピューティング環境において実施することもでき、この環境では、タスクは、通信ネットワークを通じてリンクされるリモート処理装置によって実行される。分散コンピューティング環境では、プログラムモジュールはローカルおよびリモートのメモリストレージ装置内に位置することができる。
図2を見ると、本発明を実施することができる例示的コンピューティング装置100が示される。コンピューティング装置100は適切なコンピューティング装置の一例でしかなく、本発明の使用または機能性の範囲についてのいかなる限定をも示唆するように意図されない。例えば、例示的コンピューティング装置100は、図1に例示されたコンピューティング装置11〜15、20または30〜31のいずれかを厳密に表すように意図されない。例示的コンピューティング装置100は、メモリパーティション、仮想マシン、複数のプロセッサ、または、1つの物理的コンピューティング構造が複数のコンピューティング装置によって生じる後述のアクションを実行することを可能にする類似のプログラミング技術などを通じて、1つまたは複数のこれらのコンピューティング装置を実施することができる。さらに、コンピューティング装置100は、図2に例示した周辺装置のいずれか1つまたは組み合わせに関係するいかなる依存性または要件をも有するとして解釈されるべきではない。
本発明を一般に、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令に関連して説明することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データ型を実装する。分散コンピューティング環境では、タスクを、通信ネットワークを通じてリンクされるリモート処理装置によって実行することができる。分散コンピューティング環境では、プログラムモジュールは、メモリストレージ装置を含む、ローカルおよびリモートのコンピュータストレージメディア内に位置することができる。
コンピューティング装置100のコンポーネントには、それだけに限定されないが、処理装置120、システムメモリ130、および、システムメモリを含む様々なシステムコンポーネントを処理装置120に結合するシステムバス121が含まれる場合がある。システムバス121は、いくつかのタイプのバス構造のいずれかにすることができ、これらのバス構造には、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスが含まれる。例として、限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、Video Electronics Standards Associate(VESA)ローカルバス、および、メザニンバスとしても知られるPeripheral Component Interconnect(PCI)バスが含まれる。さらに、処理装置120は1つまたは複数の物理プロセッサを含むことができる。
コンピューティング装置100には通常、様々なコンピュータ読み取り可能メディアが含まれる。コンピュータ読み取り可能メディアは、コンピューティング装置100によってアクセスすることができるいかなる使用可能なメディアにすることもでき、揮発性および不揮発性のメディア、リムーバブルおよび固定のメディアが含まれる。例として、限定ではなく、コンピュータ読み取り可能メディアは、コンピュータストレージメディアおよび通信メディアを備えることができる。コンピュータストレージメディアには、揮発性および不揮発性、リムーバブルおよび固定のメディアが含まれ、これらのメディアは、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたは他のデータなど、情報の格納のためのいずれかの方法または技術において実施される。コンピュータストレージメディアには、それに限定されないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージ装置、または、所望の情報を格納するために使用することができ、コンピューティング装置100によってアクセスすることができる他のいかなるメディアもが含まれる。通信メディアは通常、搬送波などの変調データ信号もしくは他の移送メカニズムにおける、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたは他のデータを実施し、いかなる情報配信メディアをも含む。「変調データ信号」という用語は、信号における情報を符号化するような方法でその特性の1つまたは複数が設定または変更されている信号を意味する。例として、限定ではなく、通信メディアには、有線ネットワークまたは直接有線接続などの有線メディア、ならびに、音響、RF、赤外線および他の無線メディアなどの無線メディアが含まれる。上記のいずれの組み合わせもまた、コンピュータ読み取り可能メディアの範囲内に含まれるべきである。
システムメモリ130には、読み取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132など、揮発性および/または不揮発性メモリの形態における、コンピュータストレージメディアが含まれる。基本入出力システム133(BIOS)は、起動中など、コンピューティング装置100内の複数の要素の間で情報を転送する助けとなる基本ルーチンを含み、通常はROM131に格納される。RAM132は通常、処理装置120によって即時アクセス可能および/または現在操作されるデータおよび/またはプログラムモジュールを含む。例として、限定ではなく、図2は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137を例示する。
コンピューティング装置100にはまた、他のリムーバブル/固定、揮発性/不揮発性のコンピュータストレージメディアが含まれる場合もある。例としてのみ、図2は、固定、不揮発性の磁気メディアに対する読み書きを行うハードディスクドライブ141、リムーバブル、不揮発性の磁気ディスク152に対する読み書きを行う磁気ディスクドライブ151、および、CD−ROMまたは他の光メディアなど、リムーバブル、不揮発性の光ディスク156に対する読み書きを行う光ディスクドライブ155を例示する。例示的オペレーティング環境で使用することができる他のリムーバブル/固定、揮発性/不揮発性のコンピュータストレージメディアには、それだけに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれる。ハードディスクドライブ141は通常、システムバス121に、インターフェイス140などの固定メモリインターフェイスを通じて接続され、磁気ディスクドライブ151および光ディスクドライブ155は通常、システムバス121に、インターフェイス150など、リムーバブルメモリインターフェイスによって接続される。
上述および図2に例示したドライブおよびそれらの関連付けられたコンピュータストレージメディアは、コンピューティング装置100用のコンピュータ読み取り可能命令、データ構造、プログラムモジュールおよび他のデータのストレージを提供する。図2では、例えば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147を格納するとして例示される。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137と同じものにも異なるものにもすることができることに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147にはここで異なる番号が与えられて、最低でもそれらが異なるコピーであることが例示される。ユーザーはコマンドおよび情報をコンピューティング装置100へ、キーボード162、および、一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティング装置161などの入力装置を通じて入力することができる。他の入力装置(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが含まれる場合がある。これらおよび他の入力装置はしばしば処理装置120へ、システムバスに結合されるユーザー入力インターフェイス160を通じて接続されるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス(USB)など、他のインターフェイスおよびバス構造によって接続される場合がある。モニタ191または他のタイプの表示装置もまたシステムバス121へ、ビデオインターフェイス190などのインターフェイスを介して接続される。モニタに加えて、コンピュータにはまた、出力周辺インターフェイス195を通じて接続することができる、スピーカ197およびプリンタ196など、他の周辺出力装置が含まれる場合もある。
コンピューティング装置100は、図1に示すものなど、ネットワーク環境において、1つまたは複数のリモートコンピュータへの論理接続を使用して動作することができる。図2は、リモートコンピューティング装置180への汎用ネットワーク接続171を例示する。汎用ネットワーク接続171、および、図1に例示したネットワーク接続は、様々な異なるタイプのネットワークおよびネットワーク接続のいずれにすることもでき、これらのネットワークおよびネットワーク接続には、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、イーサネット(登録商標)プロトコルに準拠するネットワーク、トークンリングプロトコル、または、インターネットもしくはワールドワイドウェブを含む他の論理、物理または無線ネットワークが含まれる。
ネットワーキング環境において使用されるとき、コンピューティング装置100は汎用ネットワーク接続171へ、ネットワークインターフェイスまたはアダプタ170を通じて接続され、ネットワークインターフェイスまたはアダプタ170は、有線または無線ネットワークインターフェイスカード、モデムまたは類似のネットワーキング装置にすることができる。ネットワーキング環境では、コンピューティング装置100に関連して示したプログラムモジュール、またはその一部を、リモートメモリストレージ装置に格納することができる。図示のネットワーク接続は例示的であり、複数のコンピュータの間で通信リンクを確立する他の手段を使用することができることは理解されよう。
以下の説明では、本発明を、特に断りのない限り、1つまたは複数のコンピューティング装置によって実行される動作、および、オペレーションの記号表現を参照して説明する。したがって、このような動作およびオペレーションは時として、コンピュータにより実行されるものと呼ばれ、このような動作およびオペレーションには、コンピューティング装置の処理装置による、データを構造化形式で表現する電気信号の操作が含まれることは理解されよう。この操作はデータを変換し、あるいはデータをコンピューティング装置のメモリシステム内のロケーションで維持し、当業者によってよく理解される方法で、コンピューティング装置のオペレーションを再構成し、あるいはそうでない場合は変更する。データが維持されるデータ構造は、データのフォーマットによって定義された特定のプロパティを有するメモリの物理ロケーションである。しかし、本発明を前述との関連で説明しているが、これは限定するように意味されず、以下で説明する様々な動作およびオペレーションをまたハードウェアにおいて実施することもできることは、当業者には理解されよう。
概観
本発明によれば、分散コンピューティングシステムはフォールトトレラントなアルゴリズムを、より少数のプライマリ装置および追加の補助装置を使用して実施することができる。Paxosアルゴリズムは、以下でより詳細に説明するが、ある数の障害を、その数の2倍を超えるコンピューティング装置が使用されるならば、許容することができる、分散コンピューティングシステムを実施するメカニズムを提供することができる。数学的には、変数「F」は、許容することができる障害の数を表し、少なくとも2F+1個のコンピューティング装置の分散コンピューティングシステムは、Paxosアルゴリズムを実施することができる。これらの2F+1個のコンピューティング装置のうち、少なくともそれらの過半数のいずれかの集まり、すなわち、少なくともF+1個の装置のいずれかの集まりはクォーラムになることができ、フォールトトレラントな方法で提案を選択することができる。
コンピューティング装置に障害が起こらない場合、F+1個のメインコンピューティング装置の集まりはPaxosアルゴリズムを実施することができる。しかし、1つまたは複数のメインコンピューティング装置に障害が起こる場合、1つまたは複数の補助コンピューティング装置を使用して、システムがPaxosアルゴリズムを使用してフォールトトレラントな方法で動作し続けることを可能にすることができる。補助コンピューティング装置はめったに使用されないので、補助コンピューティング装置を安価なコンピューティング装置にすることができ、これらの装置は、より古いコンピューティング装置、ポケットコンピューティング装置、主として他のタスク専用のコンピューティング装置、または、デジタル家電装置などである。したがって、それによりフォールトトレラントシステムを購入するための一定のセットの資金が提供されると、より大量の資金を使用してメインコンピューティング装置を購入することができ、処理能力、ストレージ容量などが増したコンピューティング装置の購入が可能となる。代替として、メインおよび補助コンピューティング装置を使用するフォールトトレラントシステムを、コスト軽減のために購入することができるが、このシステムは、メインコンピューティング装置のみを使用するシステムとして、大変類似のパフォーマンスを効果的に提供する。
本発明によって企図された一実施形態によれば、メインおよび補助コンピューティング装置を備える単一の状態マシンを使用して、フォールトトレラント分散コンピューティングシステムを提供することができる。最初に、メインコンピューティング装置を備えるクォーラムを使用することができる。1つまたは複数のメインコンピューティング装置に障害が起こる場合、いくつかの補助コンピューティング装置および少なくとも1つの作業中のメインコンピューティング装置を備えるクォーラムを使用して、メインコンピューティング装置の1つに障害が起こったときに保留中であったいかなる提案への投票も完了することができる。続いて、類似または等しいクォーラムは、いくつかの将来のステップを越えるすべてのステップのためのクォーラムの集合を選択することができる。選択されたクォーラムの集合のうち1つのクォーラムは、すべての作業中のメインコンピューティング装置を備えることができ、このようなクォーラムを使用して、将来のステップの後にファンクションを選択することができる。類似の方法で、メインコンピューティング装置が修理される場合、現在動作中のクォーラムによって、修理されたコンピューティング装置を含めるために、新しいクォーラムの集合を提案および選択することができる。
本発明によって企図されたもう1つの実施形態によれば、一方はメインおよび補助コンピューティング装置を備え、他方はメインコンピューティング装置を備える、2つの状態マシンを使用して、フォールトトレラント分散コンピューティングシステムを実施することができる。第1の状態マシンを使用して、第2の状態マシンによって使用されるべきクォーラムを選択することができる。次いで、第2のクォーラムは、メインコンピューティング装置の一部または全部を備え、クォーラムのメンバに障害が起こるまで動作することができる。続いて、第1の状態マシンを使用して、第2の状態マシンのための現在動作中のメインコンピューティング装置のすべてを備える新しいクォーラムを選択することができる。メインコンピューティング装置が修理される場合、第1の状態マシンは、修理されたコンピューティング装置を、第2の状態マシンのために選択されたクォーラムに追加することができる。概念的には、第1の状態マシンのメインおよび補助コンピューティング装置はクォーラム選択状態マシンを実施し、クォーラム選択状態マシンは、分散コンピューティングシステムのクライアントによってサブミットされた提案を選択するために、第2の状態マシンによって使用されるべきクォーラムを選択する。障害が起こったメインプロセッサを除去するため、または、修理されたメインプロセッサを追加するためなど、第2の状態マシンのクォーラムが変更されるべきであるときは常に、クォーラム選択状態マシンを使用することができる。加えて、第2の状態マシンのクォーラムは、構成装置による以前の投票の知識のみを伝搬できるのではなく、既知の安全提案の知識も伝搬することができる。
状態マシン
図1に例示した分散システム10などの分散環境では、複数の装置の間の調整は困難なタスクとなる場合がある。調整要素として時間に依拠することに固有の難点を回避するための1つのメカニズムは、分散コンピューティングシステムを、ファンクションの実行が状態マシンをある状態から別の状態へ移動させる状態マシンに関して、モデリングすることである。したがって、状態マシンを、状態の集合、コマンドの集合、応答の集合、および、各応答/状態のペアを各コマンド/状態のペアにリンクさせるファンクションに関連して説明することができる。状態マシンのクライアントは、状態マシンがファンクションを実行することを要求するコマンドを発行することができる。次いで、ファンクションは、状態マシンの状態を変更し、応答を作成することができる。
分散コンピューティングシステムを備える個々の装置はそれぞれ、システムの状態マシンを実行することができる。したがって、これらの装置を、初期状態を決定すること、および次いで同じファンクションを同じ順序でそれ以降に実行することによって、調整することができる。単に、装置が実行した最終ファンクションを決定し、そのファンクションを、他の装置によって実行されたファンクションの順序付きリストにおいて探し出し、次いで装置に、順序付きリストから装置がまだ実行していないファンクションを実行するように命令することによって、装置を同期させることができる。このような状態マシンの手法は最初に、その内容が全体として参照により本明細書に組み込まれて、それらの開示に一致する本明細書内に含まれたいかなる教示または示唆もがさらに説明または記述される、記事において提案された(例えば、非特許文献1参照。)。
Paxosアルゴリズム
状態マシンの手法を使用することによって、図1に示す分散コンピューティングシステム10の構成装置11ないし15の同期を、実行されるべきファンクションおよびそれらを実行する順序に合意することによって、達成することができる。実行されるべきファンクションに合意するための1つの方法は、Paxosアルゴリズムとして知られる。Paxosアルゴリズムは、システム10が、装置が事前の警告なしに動作を停止する可能性のある障害に直面しても、適切に動作することを可能にする。Paxosアルゴリズムは、システムが全体としてファンクションを実行する前に、少なくとも1つの装置のクォーラムがそのファンクションに合意することを必要とする。Paxosアルゴリズムでは、クォーラムを単純な過半数にすることができ、あるいはクォーラムは、システムの特定の要件に応じて、それよりも多い装置を含むことができる。どのように定義されても、クォーラムを、いずれかの2つのクォーラムが少なくとも1つの共通の装置を有するように、十分大きくすることができる。
一貫性を維持するため、システム10は、ファンクションの実行をステップ毎に単一のファンクションに制限することができる。したがって、単一のファンクションのみを所与のステップについて選択することが望ましい場合がある。いずれかの2つのクォーラムが少なくとも1つの適切に機能する共通の装置を有するので、あらゆる装置が1つの提案のみに投票することを要求することによって、ただの1ステップのみの選択を保証することができる。しかし、いくつかの装置が同時にリーダーの役割をした場合、このような要件は行き詰まりを引き起こすようになり、これは、どの提案もクォーラムによって合意されず、さらにどの装置も、最終的にクォーラムに到達されることが可能となるように、異なるファンクションのための提案に投票することができなかったということが、可能となるからである。
Paxosアルゴリズムはこの問題を、マルチフェーズプロセスを通じて解決することができ、このプロセスによって装置はそれらの投票を変更することを可能にされるが、リーダーはそれらが提案するファンクションにおいて制約される。Paxosアルゴリズムを使用して、リーダーは、以前に提案されたファンクションをリーダーが知らない限り、リーダーが選択するいかなるファンクションを提案することもできる。リーダーが、それに対してクォーラム内の少なくとも1つの装置がすでに投票している、少なくとも1つの以前に提案されたファンクションを知っている場合、リーダーは、リーダーが知っている以前に提案されたファンクションのうち最新のものを提案することができる。各装置は、装置が投票した最新の提案のみを追跡する必要がある。装置が、それに対して提案すると約束している提案を受信し、その間に別の提案に投票することを約束していない場合、装置はその提案への一票を投じることができる。その提案が、装置が以前に投票すると約束している他のいかなる提案よりも大きい提案番号を有する場合にのみ、装置は提案に投票するように約束することができる。提案番号の使用は、構成装置の間のクロックの複雑で高価な同期を用いる必要なしに、システムが正しいオペレーションを達成することを可能にする。最新の提案は一般に、最大の提案番号を有するようになる。そうでない場合、この提案は無視される場合があり、これを以下でさらに説明する。提案に投票する約束をするとき、装置はまた、投票を請求するリーダーに、それに対して装置が以前に投票する約束をしている、現在の提案番号より小さい、最高提案番号を送信することもできる。このようにリーダーは常に以前の提案を知ることができる。
図3aを見て、Paxosアルゴリズムをより詳細に、図示の5つの装置11ないし15を備える例示的分散コンピューティングシステム10を使用して説明する。このような環境では、クォーラムを、3つ以上の装置のいずれかのグループとして定義することができ、これは、このような定義が、あらゆるクォーラムが少なくとも1つの共通の装置を有することを保証するようになるからである。図3aに示すように、装置13はリーダーシップの位置につき、メッセージ200を装置11〜12および14〜15に送信して、ファンクションを装置11〜15に提案するために使用されるべき提案番号を推奨することができる。装置13は、装置およびリーダーの役割をすることができるので、装置13はそれ自体にメッセージ200を送信するが、このような送信は装置の内部で処理することができ、物理的に送信される必要はない。装置13は、より大きい提案番号を有する以前の提案がないことを保証する目的で、任意に大きい提案番号を選択することができる。さらに、装置13自体が以前の提案に投票している場合があるので、装置13は、装置13が承知しているいかなる提案よりも大きい提案番号を選択することができる。
提案をそれらの提案番号に基づいて順序付けすることができるので、2つ以上の装置が異なる提案に対して同じ提案番号を使用することを防止することは有利となる場合がある。したがって、提案を送信する装置のメディアアクセス制御(MAC)アドレスなど、一意の装置プロパティに基づくメカニズムを使用して、提案番号を装置によって選択することができる。代替として、提案番号を複数の装置の間でパーティション化し、各装置がそのパーティションの中からのみ提案番号を選択することを要求することができる。提案番号をパーティション化するための1つの方法は、「i番目」の装置に、「i」を法としてシステム内の装置の数と合同である提案番号を付与することとなる。
以下に示すように、Paxosアルゴリズムは、いくつかの装置がリーダーの役割をする場合でも、動作することができるので、装置がリーダーシップの位置につくメカニズムは重要ではない。それにもかかわらず、異なる装置が同時に自分たちがリーダーであると考える可能性のある見込みを最小限にするメカニズムは、システムの効率を増すことができる。例えば、MACアドレスなど、一意の装置プロパティに基づくメカニズムは、複数の同時リーダーを有する見込みを低減することができる。1つのこのようなメカニズムは単に、最小のMACアドレスを有する、適切に機能中の装置を、次のリーダーになるように選択することができる。加えて、リーダー選択メカニズムは、リーダーの役割をする別の装置からのメッセージを所定の時間量内に、ある装置がすでに受信している場合、この装置がリーダーなろうと試みることを防止して、リーダーシップ装置が絶えず変更になることを防止することができる。このような絶えず続くリーダーシップ変更は、システムのオペレーションに非効率性を導入する可能性がある。
図3bを見ると、メッセージ200など、新しい提案番号を推奨するメッセージを受信すると、各装置11〜15は、それに対して装置が一票を投じている、メッセージ200によって推奨された提案番号よりなお小さい最大提案番号、および、それによって提案されたファンクションを指示する、メッセージ211〜215により応答することができる。装置が、リーダーによって使用された提案番号より大きい提案番号への一票を投じている場合、装置はリーダーからのメッセージを無視することができ、あるいは以下で説明するように、装置は最大提案番号にもかかわらず、最終投票情報により応答することができる。図3bに示す例示的状態では、装置12は以前に提案番号70に投票しており、この提案番号70は、システム10が変数「y」によって識別されたファンクションを実行することを提案していた。したがって、メッセージ200に応答して、装置12は、ファンクション「y」の実行を提案した提案番号70に装置12が最後に投票したことを指示する、メッセージ212を送信することができる。同様に、装置11は以前に提案番号30に投票しており、この提案番号30は、システム10が変数「z」によって識別されたファンクションを実行することを提案していた。したがって、メッセージ211は、装置11のこの最終投票情報を装置13に戻すように搬送することができる。装置13〜15はいかなる提案も受信していない可能性があり、したがって、以前にいかなる提案にも一票を投じていない。これらの装置はしたがって、メッセージ213〜215によって指示されたようなヌル応答を戻すことができる。再び、上述のように、装置13からそれ自体に送信されたメッセージは装置13によって内部処理することができるが、これらのメッセージを説明のために例示する。
図3cを見ると、リーダー13がメッセージ211〜215を受信するとき、リーダーは提案するべき適切なファンクションを決定し、提案されたファンクションが、クォーラムのいずれかのメンバによって投票された最大提案番号を有するファンクションに等しくなるようにすることができる。クォーラムメンバのいずれもがいかなる以前の提案にも投票していなかった場合、リーダーは、どのファクションをリーダーが提案することを望むとしても、自由に選択することができる。したがって、図3bに例示するメッセージ211〜215が与えられると、装置13は、ファンクション「y」の実行に対する投票を請求することを選択することができ、これは、そのファンクションが装置12によって提案番号70の一部として投票されており、提案番号70は、リーダー13が知っている最大提案番号を有する提案であるからである。しかし、図3aないし3eに例示したシステム10は5つの装置を含むので、クォーラムをわずか3つの装置にすることができる。このように、リーダー13がいずれかの3つ以上の装置を、クォーラムの役割をするように選択することは、十分である。したがって、リーダー13によって選択されたクォーラムには装置12が含まれない場合がある。このような場合、リーダー13はファンクション「y」を提案する必要はなく、これは装置12が、選択されたクォーラムのメンバではないからである。その代わりに、リーダー13は、リーダーが選択したクォーラム内の装置が以前に投票した最大提案番号と共に提案されたファンクションを提案することができる。装置のいずれもが、以前にいかなる提案にも投票しなかった場合、リーダーは、それ自体が選択するいかなるファンクションを提案することもできる。
ある提案番号を推奨するメッセージ200は、リーダー13が選択するべき適切な提案番号を決定することができるメカニズムの役割をし、リーダーが、以前に提案されたすべてのより低い番号の提案を知ることを可能にするので、リーダー13が、メッセージ200などの複数のメッセージを送信し、より早期のメッセージが低すぎる提案番号を有している場合により大きい提案番号を次第に推奨することが、必要である可能性がある。リーダーが複数のメッセージを送信することを必要とするのではなく、リーダーによって推奨された提案番号が以前に投票された提案よりも大きいか小さいかにかかわらず、各装置は、それに対して投票している最大の番号の提案により応答することができる。このように、リーダー13は、以前の投票をより効率的に知ることができ、それと共にファンクションを提案するための提案番号をより正確に選択することができる。
図3cに戻ると、リーダー13は、システム10の装置のすべてからなるクォーラムを選択しており、メッセージ220を送信して、システム10によるファンクション「y」の実行への投票を求めているように示される。メッセージ220を受信すると、各装置は、ファンクション「y」に投票するべきかどうかを判断することができる。ある装置は、その装置が、それに対する投票が現在要求されている提案よりも大きい提案番号を有する新しい提案の推奨に応答していない限り、ファンクションに投票することができる。したがって、図3cに例示する実施例では、装置11〜15のいずれかが、リーダー13からメッセージ220を受信するより前に、100より大きい提案番号を有する新しい提案のための別の推奨を受信し、これに応答していた場合、その装置は、それに対する投票がメッセージ220によって請求されたファンクションに、投票しない場合がある。
図3dを見ると、各装置11〜15は、それらの装置が、100より大きい提案番号を有する新しい提案のための他の推奨に応答していないと、独立して判断することができる。したがって、それらの装置が応答した新しい提案のための最終推奨は、現在の提案よりも大きい番号を有する提案のためのものではないので、装置11および装置13〜15は、その提案に投票し、それらの投票を、それぞれメッセージ231および233〜235において指示することができる。前述のように、メッセージ233は例示のために示し、装置13によって内部処理することができる。しかし、装置12は、メッセージ220の送信より前のあるときに、100より大きい提案番号を有する新しい提案のための推奨を受信し、これに応答している可能性がある。したがって、メッセージ220を受信すると、装置12は、100より大きい番号を有する新しい提案のための推奨にすでに応答しており、したがって、提案100に投票することはできなかったと、判断することができる。結果として、図3dに示すように、装置12はメッセージ232により応答し、リーダー13に、150の提案番号を有する提案のための推奨に装置12が応答していることを通知する。リーダー13は、装置12の投票を必要とすると判断する場合、150より大きい提案番号を有することを除いて、メッセージ220に類似した別のメッセージを送信することができる。代替として、装置12はメッセージ220に応答する必要はなく、装置13は、それが装置12の投票を必要とする場合、任意に大きい提案番号を有する提案による別の投票を試みることができる。図に示すように、装置12がより大きい提案番号をリーダー13に指示しない場合、リーダーは、複数のメッセージを通じて、適切に大きい提案番号を推測しなければならない場合があり、リソースを無駄にして推測する可能性がある。
しかし、装置11および13〜15は、クォーラムを構成するには十分すぎるほどであるので、リーダー13は、装置12の投票なしでも、提案が受け入れられていると判断することができ、図3eに示すようなメッセージ240により、各装置11〜12および14〜15がファンクション「y」を実行することを要求することができる。装置13は、メッセージ240の送信を待機することなく、それが受け入れられたと判断すると、ファンクション「y」を実行することができる。したがって、装置13は、内部的にもメッセージ240を送信する必要はない。
装置11および13〜15はクォーラムを構成するが、これは、リーダー13が投票するべき提案をサブミットした先の、装置12が含まれた同じクォーラムではない。しかし、上述のように、リーダーは、提案が受け入れられていると判断するために、クォーラムから投票を受信することのみが必要であり、要求が送信された先の同じクォーラムの必要はない。上述のPaxosアルゴリズムは、単一のファンクションのみがシステム10によって、そのオペレーション内のいずれかの所与のステップのために選択および実行されることを保証する。例えば、以前に動作可能でなかった別の装置が動作可能となり、システム10に再結合した場合、この装置は、それに対してシステムが「y」を選択および実行していた同じステップについて、「y」とは異なるファンクションを提案しようと試みる場合がある。このような装置が、100未満の提案番号を有する提案を送信した場合、この提案は装置11および13〜15によって無視されることが可能であり、これはそれらの装置がすでに、図3dに示すように提案番号100に投票していたからである。他方では、装置が、提案番号130など、100より大きい提案番号を有する提案を送信した場合、装置11および13〜15は、それらの装置が提案番号100におけるファンクション「y」に投票していたことを指示するメッセージを戻すようになる。装置12は、図3bに例示したように、投票していない場合があるので、提案番号30におけるファンクション「z」に投票したことを指示するメッセージ211により応答する場合がある。
次いで、新しい装置は、定義により装置11〜15のうち少なくともいくつかが含まれるようになるクォーラムの中で、最大提案番号を選択し、その提案において提案されたファンクションを投票のためにサブミットすることができる。したがって、提案130では、新しい装置はファンクション「y」を投票のためにサブミットするようになる。各装置は次いで、上述のアルゴリズムに従って、提案130に投票することができる。提案130は選択され、ファンクション「y」を特定のステップのために実行するための以前の決定を変更しないようになるか、または、多すぎる装置がその間に別の提案に投票するように約束していたために、提案130は失敗するようになる。しかし、図に示すように、提案が渡された後、すべての他の提案は同じファンクションを提案するようになり、定義により、すべての装置はその同じファンクションにのみ投票することができる。このように、Paxosアルゴリズムは、システム10のあらゆる装置が所与のステップのために同じファンクションを実行することを保証する。
上述のPaxosアルゴリズムの適用は、分散コンピューティングシステムが所与のステップについて実行するためのファンクションを選択することを可能にすることができる。上述のオペレーションを繰り返すことによって、分散コンピューティングシステムは、一連のステップとして実行されるべき一連のファンクションに合意することができ、それにより継続的に動作するシステムを形成することができる。このように、分散コンピューティングシステムは1つまたは複数のクライアントから要求を受信することができ、これらの要求を実行し、結果をこれらのクライアントに戻すことができる。
図4aを見ると、システム10はすでにいくつかのステップについて動作可能であった可能性がある。例えば、図4aに例示した例示的システム10では、直前に選択されたステップをステップ24にすることができ、ステップ25を現在のステップにすることができる。しかし、以前にリーダーの役割をしていた装置で障害が起こっている場合があり、あるいは単にいかなるクライアント要求をも受信していない場合がある。クライアント20は図4aにおいて変数「x」によって表現されたファンクションを実行するための要求を装置13に、図のようにメッセージ300を使用して送信することができる。装置13は、上述のものなど、いくつかの数のメカニズムに従って、リーダーになろうと試みるべきであると決定することができる。したがって、装置13はメッセージ301を送信することができ、このメッセージは、次の提案のための提案番号100の使用を推奨し、そのためにその提案が行われているステップを含む。図4aの例示的分散コンピューティングシステム10では、装置13は、ステップ23および24がすでに他の装置11〜12および14〜15によって決定されていることを承知していない。したがって、メッセージ301は、装置13がステップ23のための提案番号100を推奨していることを指示する。
複数のステップを実行するシステムにおいてアルゴリズムのオペレーションを促進するため、メッセージ301などのメッセージは、ステップ23以上のすべてのステップのために提案番号100を提案するように理解される可能性がある。このように、リーダー13は、すでに決定されているあらゆるステップを知るまで、メッセージ301などのメッセージを継続的に送信する必要はない。代わりに、リーダー13は、以下に示すように、単一のメッセージの往復のみを通じて、すでに選択されたステップを知ることができる。
図4bを見ると、分散コンピューティングシステム10の装置11〜15からの応答メッセージ311〜315が示される。装置11、14および15は例えば、ファンクション「y」がステップ23のために選択されたこと、および、ファンクション「z」がステップ24のために選択されたことを記録している。したがって、メッセージ301を受信すると、装置11、14および15は、それらの装置が、23以上のすべてのステップ、この場合はステップ23および24のために選択されているとして格納している、ファンクションを指示するメッセージ311、314および315により応答することができる。加えて、装置11、14および15は、それに対してそれらの装置が25以上のステップのために投票している最大提案番号を有する提案の指示を提供することができる。したがって、図4bに例示した実施例では、メッセージ311はまた、装置11が25より大きいステップのためにいかなる提案にも投票しなかったこと、および、ステップ25のためにファンクション「b」を提案する提案番号160に投票したことを指示することもできる。他方では、メッセージ314および315は、装置14および15がステップ24より大きいいかなるステップのためにもいかなる提案にも投票していないことを指示することができる。システム10内で送信されているメッセージの数を減らすために、装置は、所与のステップのために選択されているファンクションを知らない場合、それらの最高提案番号投票によってのみ応答する必要がある。したがって、装置11は、ファンクションがステップ23および24のために選択されたが、ステップ25のためには選択されなかったことを承知していたので、装置11は、ステップ23および24のために選択されたファンクション、および、ステップ25のために投票した最高の番号の提案により応答した。
前述のように、装置13はリーダーおよび投票側装置として動作することができる。したがって、装置13はそれ自体に、メッセージ301などのメッセージを送信することができ、メッセージ313などのメッセージによりそれ自体に応答することができる。このようなメッセージを図において例示のためにのみ示し、これは、それらのメッセージが装置13に内部的に送信される可能性が高くなるからである。さらに、装置13は、そのために選択されたファンクションを装置13が知る最大ステップ番号を有するステップが何であるかをチェックすることができ、装置13は、装置13が投票したものより上のすべてのステップのための提案のための最大提案番号が何であるかをチェックすることができるので、メッセージ313は、ヌル標識以外のいかなる情報をもめったに含むべきではない。
状態マシンの現在の状態は、選択されたファンクションによってのみではなく、これらのファンクションが実行される順序によっても決まる場合がある。したがって、装置が、どのファンクションが所与のステップのために選択されたかを知らない場合、その装置は、そのステップを越えていかなるファンクションも実行するべきでないか、あるいは、その装置が順序通りでなくファンクションを実行するようになり、その状態は分散コンピューティングシステムの状態とは異なるようになる状況がある場合がある。例えば、新しい状態を無条件に指定するファンクションなど、いくつかのファンクションは、装置の現在の状態から独立している。このようなファンクションは、現在のステップよりも低いステップ番号を有するステップのためのファンクションがまだ実行されていない場合でも、実行することができる。同様に、データベースへの書き込みなど、以前のステップのすべてを知ることなく、そのための出力を計算することができるファンクションもまた、部分的には順序通りでなく実行して、クライアントに送信されるべき出力を生成することができる。しかし、一般に、すべての以前のファンクションが実行されてしまうまで、ファンクションは実行されるべきではない。したがって、装置は常に、装置で欠落したステップのためにどのファンクションが選択されたかを知るように試みることができる。装置13が、図4aに示すように、メッセージ301を送信するとき、装置13はステップ23が次のステップであると考え、ステップ22を通じて合意されたファンクションの知識を有することは、暗黙的ステートメントである。ステップ23より低いステップのためのファンクションが欠落している装置は、したがって、装置13がステップ22を通じてファンクションのすべての知識を有することを知り、そのファンクションを装置13から要求することができる。
図4bに戻ると、装置12は、何のファンクションがステップ12のために選択されたかを知らない。結果として、装置12は、ステップ13〜23のために選択されたステップを知る可能性があるとしても、ステップ11以来いかなるファンクションを実行することもできなかった可能性がある。したがって、メッセージ312で、装置12はステップ12のためのファンクションをリーダー13から要求することができる。加えて、装置12は、ステップ23より高い番号のステップのためのいかなる提案にも投票していないことを指示することができる。
装置で多すぎるステップが欠落している場合、装置で欠落しているステップのすべてのためのファンクションのすべてを送信するのではなく、単に装置に現在の状態を通知することが、より効率的である可能性がある。装置で多すぎるステップが欠落しないことを保証するための1つのメカニズムは、各装置、または装置の集まりが、状態の様々な部分、または状態全体のスナップショットを定期的に取ることを可能にすることである。したがって、別の装置の状態は、これに適切なスナップショットを、最新のスナップショット以来選択されたファンクションと共に送信することによって、アップデートすることができる。加えて、状態の個々の部分のチェックサムを使用することによって、別の装置の状態を、単にその他の装置にその現在のコピーとは異なる状態の部分を送信することによって、アップデートすることができる。
メッセージ311ないし313を受信する結果として、リーダー13は、以前に知らなかったステップ23および24のために選択されたファンクションを知ることができ、ステップ25のために提案するための適切なファンクションを決定しようと試みることができ、ステップ25を通じてすべてのステップのための選択されたファンクションを同じくすでに知っていない他の装置をアップデートしようと試みることができる。最初は、リーダー13はメッセージ301において100の提案番号を推奨したが、装置11は、ステップ25のための100より大きい提案番号を有する提案にすでに投票したことを指示するメッセージ311により応答した。したがって、リーダー13は、リーターが承知している最大提案番号より大きい提案番号を選択し、図4cに示すメッセージ320など、別の推奨メッセージを送信することができる。代替として、装置11は単に、メッセージ301における提案番号100のための推奨を無視している可能性があり、これは、この提案番号が、装置11がすでに投票していた提案の提案番号より小さかったからである。このような場合、リーダーは、初期推奨を無視した装置を計上しようとして、提案番号を増すことによって、再試行しているようになる。図に示すように、装置がすでに投票していた提案の提案番号より小さい提案番号を有する提案のための推奨を、その装置が無視する場合、リーダーは強制的に、推奨された提案番号を増すたびに、複数の再試行を実行させられる場合がある。このような複数のメッセージは非効率的になる場合がある。したがって、提案番号が、装置がすでに投票していた提案の提案番号より小さい場合でも、装置は新しい提案番号のためのすべての推奨に応答することが望ましい場合があり、これは、リーダーが次いで、より高い精度で、推奨するべき適切な提案番号を決定することができ、複数のメッセージを回避することができるからである。
図4cを見ると、リーダー13は、それに対して装置が以前に投票していることをリーダー13が知っているいかなる提案の番号よりも大きい提案番号を推奨しようとして、メッセージ320内に示すように、提案番号200など、より大きい提案番号を推奨することができる。加えて、リーダー13はまた、以前に選択されたファンクションに関する情報を、ステップ25までに選択されたものをすでに承知していないいかなる装置にも提供することができる。したがって、図のように、リーダー13はまた、メッセージ321をも送信することができ、メッセージ321は、変数「e」によって表現されたファンクションがステップ12のために選択されたこと、および、変数「z」によって表現されたファンクションがステップ24のために選択されたことを装置12に指示する。
次いで図4dで、装置11〜15は、装置11〜15がステップ23および24のために選択されたファンクションを装置13に通知する必要がないことを除いて、上記で図4bにおいて示したものに類似の方法で応答することができ、これは、装置13がこれらのステップをすでに知っており、ステップ25を参照する提案メッセージ320および321を送信しているからである。さらに、メッセージ331〜335は、装置が投票している可能性のある追加の提案など、追加の情報を含むことができる。例えば、装置12は、メッセージ312とメッセージ332の送信の間のあるときに、提案番号190を有する提案に投票している場合がある。したがって、メッセージ312は、装置12がステップ25のためのいかなる提案に対しても以前に一票を投じていない場合があることを指示することができるが、メッセージ332は、装置12がまだ25より大きいステップのためのいかなる提案にも投票していないが、装置12がステップ25のための提案190に投票していることを指示することができる。しかし、各提案番号は、リーダー13がメッセージ320において送信した、推奨された提案番号より小さいので、リーダーは、メッセージ320において指定された提案番号200を有するファンクションを提案することを進めることができる。
図4eを見ると、リーダー13はこのとき、装置11〜15が提案200に投票することを要求し、システムがステップ25のためにファンクション「b」を実行することを提案する、メッセージ340によって例示するように、提案番号200としてサブミットするための提案を選択するために十分な情報を有する。前述のように、装置11および12は共にクォーラムのメンバであり、ファンクション「b」の実行を提案する提案に以前に投票しており、クォーラムの他のメンバは、いかなるより大きい番号の提案にも投票していないので、リーダー13は、クライアント20がメッセージ300内でファンクション「x」の実行を要求したという事実にもかかわらず、提案番号200のためのファンクション「b」を提案することができる。このように、Paxosアルゴリズムは、1つまたは複数の装置またはそれらの通信の障害などのために、提案されたが完了されていない以前のファンクションを、適切な順序で実行することができることを保証する。
図4fは、装置11〜15が、ステップ25のために、ファンクション「b」を提案する提案200に対して、それぞれメッセージ351〜355により投票することを例示する。前述のように、装置は、メッセージ320とメッセージ340の受信の間でより大きい提案番号を有する、異なる提案に投票するように約束していない限り、提案に投票することができる。リーダー13がメッセージ351〜355を受信した後、リーダー13は図4gに示すようにメッセージ360を送信し、装置11〜12および14〜15に、ファンクション「b」がステップ25のために選択されたことを通知することができる。リーダー13はまたこの情報をそれ自体で格納することもでき、これは、リーダー13はこのとき、ファンクションがクォーラムによって選択されたことを知っているからである。
しかし、クライアント20によってメッセージ300において要求されたファンクションはまだ、図4gに例示した時点で、システム10によって選択されていない。システム10に、クライアントの要求を選択させるために、リーダー13は、上記の図3a〜eおよび4a〜gによって例示された完全なPaxosアルゴリズムの省略バージョンを実行することができる。
概念的には、上述のPaxosアルゴリズムを2つの汎用フェーズに分割することができる。第1のフェーズは、リーダーが、クォーラム内の装置によって投票された以前の提案を知ることを備える。第1のフェーズは、図3aおよび3bによって例示したように、リーダーによる提案番号推奨およびクォーラムの他のメンバによる応答の1つの反復、または、図4a〜dによって例示したように、提案番号推奨および応答の複数の反復を含むことができる。第2のフェーズは、リーダーが、投票のための提案されたファンクションをサブミットし、投票を受信し、提案が十分な数の装置によって投票された場合に、これらの装置に、合意されたファンクションを実行するように命令することを備える。第2のフェーズの実施例は、図3c〜eおよび4e〜gによって例示される。
リーダーが他の提案を知り、現在および将来のステップのすべてについて安全である提案番号を発見した後、リーダーは、それに障害が起こるか、あるいは別の装置がリーダーになろうと試みるまで、さらなる情報を請求する必要はない。したがって、Paxosアルゴリズムの第1のフェーズをそれほど頻繁でなく実行することができるが、第2のフェーズを、増え続けるステップ番号により繰り返し実行することができ、分散コンピューティングシステムが一連のファンクションに合意してアクティブ実行状態を維持することが可能となる。
図5aを見ると、図4a〜gからの例示的分散コンピューティングシステム10が示され、リーダー13は、上記で詳述したステップ25の後に続くシステムステップ26のために選択されるべきファンクションを提案する。Paxosアルゴリズムの第1のフェーズの結果として、図4a〜dに例示したように、また上記で詳述したように、リーダー13はすでに、装置11〜15のいずれもがステップ25より上のいかなる提案にも投票していないこと、および、その提案番号200がしたがってステップ25より大きいステップのためのすべての提案について安全であることを、承知している。したがって、図5aに示すように、ステップ26では、リーダーは、第1のフェーズを再度実行する必要なしに、Paxosアルゴリズムの第2のフェーズを開始することができ、クライアントによってメッセージ300において要求された、ファンクション「x」のための投票を請求するメッセージ400を送信することができる。各装置11〜15は次いで、投票により応答することができる。しかし、Paxosアルゴリズムのフォールトトレラントな性質を例示するために、図5bは、装置11〜13のみがメッセージ411〜413により応答することを例示する。装置14および15は障害を経験している可能性があり、いずれもメッセージ400を受信しなかったか、あるいはメッセージ400に応答することができない。
それにもかかわらず、リーダー13は、ファンクション「x」が選択されたと決定することができ、これは、クォーラム内の各装置がこのファンクションの実行に投票しているからである。上述のように、クォーラムは、システム10など、Paxosアルゴリズムを実施するシステム内の装置の少なくとも過半数のいかなる集まりにすることもできる。したがって、装置11〜15のすべてはシステム10の1つのクォーラムを構成するが、装置11〜13はそれらだけで、システム10の別のクォーラムを構成する。装置11〜13を備えるクォーラム内のあらゆる装置はファンクション「x」に投票しているので、リーダー13は、図5cに示すように、メッセージ420により、ファンクション「x」がステップ26のために選択されたことをシグナル通知することができる。加えて、リーダー13は投票が成功していることを知っているので、ステップ25を通じて選択されたファンクションを承知している限り、リーダー13はファンクション「x」をステップ26のために実行することができ、そのファンクションの実行の結果をクライアントにメッセージ421として、または、装置30および31などの他の関心のあるコンピューティング装置にメッセージ422として送信することができる。メッセージ421および422をメッセージ420と同時に、または、メッセージ420の前または後にも送信することができる。
図に示すように、リーダーが確立され、リーダーが、すべての近づくステップ番号について、クォーラム内の装置によって投票された様々な最高の番号の提案を知った後、リーダーは、Paxosアルゴリズムの第1のフェーズを繰り返すことなく、投票のための提案を請求することができる。図5aに示すメッセージは、図4gにおけるメッセージ360の送信後に生じるとして説明されるが、リーダー13は、後続のステップのための別の提案を送信する前に、装置がある提案に投票することを待機する必要はない。したがって、図4eに示すように、メッセージ340を送信すると、リーダー13は、図5aに示すメッセージ400を送信することができ、このように、ステップ26より大きいステップのために、提案番号200を使用して、一連のファンクションの提案を継続することができる。このような非同期の方法で動作することによって、分散コンピューティングシステム全体は、以前のステップのための投票を知ることを待機することによって、減速される必要はない。
以前に機能していない装置など、別の装置がリーダーになろうと試みた場合、システムに不適切に実行させるようにはならないが、アルゴリズムの第1のフェーズを繰り返させることにのみ成功するようになる。例えば、別の装置がリーダーになろうと試みた場合、この装置は、いくつかの装置が応答するであろう提案番号を推奨することができる。第2のリーダーによって提供された提案番号に応答した後、これらの装置は次いで、第1のリーダーが投票を請求したときにより高い番号の提案を第1のリーダーに通知するようになり、あるいは、これらの装置は、第1のリーダーによる、その提案に投票するための要求を無視することができる。不十分な数の装置が提案に投票したために、この提案が失敗した場合、第1のリーダーは、最初に第1のフェーズを再度実行すること、および、第1のリーダーが装置に推奨することができる十分に大きい提案番号であると考えるものを選択することによって、この提案を再度通過させるように試みるようになる。このように、第2のリーダーはシステムを遅延させるのみとなるが、分散コンピューティングシステムの一部で不適切なオペレーションを引き起こすようにはならない。
上述の、Paxosアルゴリズムを実施する装置は、アルゴリズムで使用された情報を格納する変数を維持することができる。例えば、それに対してどのファンクションが選択されたかを装置が知らない各ステップについて、装置は、それに対して装置が応答した最大提案番号、それらが投票した最大提案番号、および、対応する提案の値を格納することができ、この装置がリーダーである場合、装置は追加として、装置が発行した最後の提案のための提案番号を格納することができる。加えて、装置は、それについてこのような情報を有するすべてのステップのためにどのファンクションが選択されたかを記録することができる。代替として、装置は、所与の時間でのその状態のスナップショット、および、そのとき以来のみに選択されたファンクションを格納することができる。例えば、ステップ1〜100のために選択された各ファンクションを格納するのではなく、装置は、ステップ75の実行後のその状態のスナップショットを格納し、次いで、ステップ76〜100のために選択されたファンクションのみを格納して、格納される量を4分の1以上減らすことができる。上述の情報の一部または全部を、図2に示す揮発性ストレージ130、または、ハードディスク141、フロッピー(登録商標)ディスク152または光ディスク156など、不揮発性ストレージに格納することができる。
Paxosアルゴリズムに関する追加の情報は、その開示と調和する、本明細書内に含まれたいかなる教示または示唆をもさらに説明または記述するために、参照により全体として本明細書に組み込まれている論文で見つけることができる(例えば、非特許文献2参照。)。
障害の場合に補助装置を使用する、修正されたPaxosアルゴリズム
上述の標準のPaxosアルゴリズムの説明からわかるように、分散コンピューティングシステムの装置の過半数が適切に動作する限り、残りの装置はほとんど使用されることがない。図6aを見ると、分散コンピューティングシステム10が示され、コンピューティング装置14および15はこのとき、ハンドヘルドコンピューティング装置として例示されて、それらの状態が補助装置として示される。補助装置は、本発明の一実施形態によって企図されるように、必ずしも、ハンドヘルドコンピューティング装置または家電装置など、安価なコンピューティング装置であるとは限らないが、他のコンピューティング装置11〜13と同じくらい多くの計算能力を保有していないか、あるいは、他の装置11〜13が可能であるのと同じくらい多くの計算リソースを分散コンピューティングアルゴリズムの実行専用にすることができない、いかなるコンピューティング装置にすることもできる。以下に示すように、上述のアルゴリズムを、このような補助装置に対処するように修正し、分散コンピューティングシステム10が、上述の分散コンピューティングシステムよりも少数の専用のメインコンピューティング装置を備えることを可能にすることができる。
上述のように、Paxosアルゴリズムを2つのフェーズにおいて概念化することができ、すなわち、リーダーが提案可能なファンクションを知る第1のフェーズ、および、リーダーがファンクションを提案し、装置が投票する第2のフェーズである。リーダーが第1のフェーズを完了した後、第2のフェーズのみを使用して、後続の提案を提案することを進めることができる。図6aは、図4および5に例示し、上記で詳述した環境の継続と考えることができる、環境を例示する。したがって、リーダー13はすでに第1のフェーズを実行しているので、第2のフェーズを開始することによって、後続の提案を分散コンピューティングシステム10によって選択させようと試みることができる。
しかし、図6aに示すように、メッセージ501は、システム10にクライアント要求に投票させるように試みない。むしろ、メッセージ501は、システム10が、将来の提案に投票するために使用することができるクォーラムの集合を選択することを、提案する。提案されたクォーラムの集合は、すべてのメインコンピューティング装置11〜13を備えるあるクォーラム、ならびに、メインおよび補助コンピューティング装置の他のクォーラムを含み、いずれか2つのクォーラムが少なくとも1つの共通の装置を共有するようにすることができる。例えば、他のクォーラムはそれぞれ、メインコンピューティング装置11〜13のうち少なくとも1つも含む、コンピューティング装置11〜15の過半数を備えることができる。代替として、他のクォーラムは、少なくとも1つのメインコンピューティング装置と結合された、現在動作中の補助コンピューティング装置14〜15の過半数を備えることができる。例示した実施例では、メッセージ501は、「{Q1}」によって識別されたクォーラムの集合の選択を提案し、ただし集合「{Q1}」には、表1で識別されたクォーラムが含まれる。
一実施例として、この図は、提案されたクォーラムの集合がステップ28で開始してオペレーションを開始することを例示する。しかし、本発明の一実施形態によって企図された1つのメカニズムは、各提案されたクォーラムの集合に、現在のステップの後で事前定義された数のステップまで、オペレーションを開始しないことを要求する。例えば、いずれかの提案されたクォーラムの集合は、現在のシステムステップを10ステップ越えてオペレーションを開始することができる。このような事前定義された増分を、メインコンピューティング装置11〜13のうち1つまたは複数によって格納することができ、この格納は、クォーラムの集合が選択されたという指示を受信すると、メインコンピューティング装置がそれぞれ独立して、選択されたクォーラムの集合が特定の将来のステップでオペレーションを開始することができると判断することができるような方法で、行われる。
現在のステップと、選択されたクォーラムの集合がオペレーションを開始するステップの間の、事前定義された数のステップのバッファを作成することによって、クォーラムのリーダーは複数のファンクションを並行して提案し、システムがより効率的な方法で動作することを可能にすることができる。例えば、リーダーが、分散コンピューティングシステムによって特定のステップで実行されるべきファンクションを提案した後、リーダーは、ファンクションが提案された装置から応答を受信することを待機する必要はない。その代わりに、リーダーは、後続のステップで実行されるべき別のファンクションを提案することを進めることができる。したがって、装置があるシステムステップのためのある提案を処理およびこれに応答中である間、リーダーは後続のシステムステップのための別の提案を処理および提案中であることが可能である。このように、リーダーも装置も互いに待機する必要はない。したがって、本発明の実施形態は、説明したアルゴリズムの複数のインスタンスを並列に実行させて、より大きい効率を達成し、いずれかの装置が他の装置からの情報を待機しながら費やす時間の量を最小限にすることができる。
しかし、あるシステムステップが、次のステップで開始するすべてのステップについて、クォーラムの集合を変更することができる場合、リーダーは、どのクォーラムに次のステップのためのファンクションを提案するべきであるかを、現在のステップを知って実行するまで、知らない可能性がある。したがって、新たに選択されたクォーラムの集合が、将来のある事前定義された数のステップで効力を生じない限り、リーダーは、次のステップのためのファンクションを提案するために適切なクォーラムを確信することができるようになる前に、各ステップのためのファンクションの選択が完了するまで待機するように制約される可能性がある。したがって、本発明の一実施形態によって企図された1つのメカニズムは、新しいクォーラムの集合の選択と、選択された新しいクォーラムの集合がオペレーションを開始するステップの間で、事前定義された数のステップを必要とする。このように、リーダーは直前のステップを知らない場合でも、一連のシステムステップのための一連のファンクションを提案することができ、これは、リーダーが、直前のステップが新しいクォーラムの集合を選択した場合でも、新たに選択されたクォーラムの集合が将来への事前定義された数のステップまで効力を生じるようにならないことを、知ることができるからである。
しかし、例示のために、図に示すこの実施例は、オペレーションを次のステップで開始するクォーラムの集合を選択する。図6aに戻ると、リーダー13は、上記の表1で列挙されたクォーラムの集合を定義するファンクションを提供することができる。上述の方法で、メッセージ501の提案は200の提案番号を含むことができ、これがシステムステップ27のための提案であることを指示することができる。
図6bを見ると、装置11〜15が、メッセージ511〜515において提案されたファンクションへの投票により応答するように示される。上記で説明したように、5つの装置を備えるシステム10では、いずれか3つ以上をクォーラムにすることができる。したがって、これらの装置のうち2つが応答していなかった場合でも、システム10はなお、提案されたファンクションを選択しておくことが可能であった。
図6cを見ると、リーダー13は、メッセージ501によって提案されたファンクションが、リーダーが応答を装置のクォーラムから受信するときに、選択されていると判断することができる。メッセージ511〜515は、装置のクォーラムがこの提案に投票していることを指示するので、リーダー13は、この提案が選択されていることを知ることができ、したがって、メッセージ520などのメッセージを送信して、この提案が選択されたことを指示することができる。メッセージ520は、メインコンピューティング装置11および12にのみ送信されているとして図示されるが、メッセージ520をまた補助装置14および15に送信して、新しいクォーラムの集合の選択をこれらの補助装置に通知することもできる。しかし、リーダー13はすでに、この提案が選択されていることを承知しているので、内部的にもそれ自体にメッセージを送信する必要はない。
メッセージ520をまた、装置11〜13に対して、これらの装置がすべての以前のシステムステップのために選択されたすべてのファンクションを承知していることを、リーダー13が保証するプロセスの一部にすることもできる。例えば、装置が以前のシステムステップのために選択されたファンクションを知り、実行するまで、装置は所与のシステムステップのためのファンクションを実行することができない可能性があるので、メッセージ520の実行コマンドは、内部チェックを装置11および12で開始する役目を果たすことができる。具体的には、装置11および12は、ステップ1〜26のために選択されたファンクションを知り、実行するまで、ステップ27のために選択されたファンクションを実行することができない可能性があるので、リーダー13は、それらの装置がステップ27のために選択されたファンクションを実行することを要求することによって、各装置に強制的に、それらがすべての以前のシステムステップのために選択されたファンクションを承知していることを検証させることができる。メッセージ520はまた、類似の方法で、リーダー13が、それについてリーダーでなかったファンクション、または、それについてファンクションを選択したクォーラム内に入っていなかったファンクションなど、以前に選択されたファンクションのその知識が現在のシステムステップまで完全であることを保証することを可能にすることもできる。
代替として、実行要求520を送信するのではなく、リーダー13は単に装置11および12にポーリングして、これらの装置がすべての以前のシステムステップのために選択されたファンクションを知っており実行しているかどうかを判断することができる。装置11および12の一方が、特定のシステムステップのためのファンクションの選択を知っていない場合、この装置は、欠落情報をリーダー13から、または別の装置から要求することができる。このような通信は、上述のアルゴリズムの特定のフェーズに付加される必要はないが、新しいクォーラムの集合の選択が完了すると、リーダー13または装置11および12のうち1つまたは複数によって、このような通信を独立して開始することができる。
新しいクォーラムの集合が選択された後、メインコンピューティング装置のすべてがすべての以前のシステムステップのために選択されたファンクションを承知していることを保証するもう1つの利点は、複数のシステムステップに対する単一のファンクションの選択を回避することである。例えば、分散コンピューティングシステム10が銀行データベースを維持し、クライアント20が、100ドルをそれらの口座から引き出すファンクションを要求した場合、システム10は、その引き出すファンクションを1回だけ実行するべきである。本発明の一実施形態によって企図された、複数のステップに対する同じファンクションの選択を回避するための1つのメカニズムは、一意の識別子が割り当てられることを必要とする。このような場合、選択されたファンクションを実行する前に、各装置は、等しい識別子を有するファンクションを以前に実行していないことを検証することができる。そのファンクションがすでに実行されている場合、そのファンクションの実行を、効果がないように定義することができる。代替として、リーダーは、ファンクションを提案する前に、等しい識別子を有するファンクションが以前に選択されていないことを検証することができる。このような場合、リーダーおよび装置が以前に選択されたファンクションを承知していることを、定期的に検証することが有利となる場合がある。
リーダー13ならびに装置11および12が、十分な数の以前のシステムステップのために選択されたファンクションを承知し、実行した後、システム10のオペレーションは再開することができ、リーダーはクォーラムを、選択されたクォーラムの集合から選択することができる。具体的には、リーダー13は、メインコンピューティング装置11〜13のみを備えるクォーラムを選択することができる。以下に例示するように、すべてのメインコンピューティング装置を備えるクォーラムは、好ましいクォーラムである可能性があり、メインコンピューティング装置の好ましいクォーラムに障害が起こるとき、他のクォーラムを使用することができる。したがって、表1によって例示したクォーラムの集合の中で、メインコンピューティング装置11〜13を備える、最初にリストされたクォーラムは、メインコンピューティング装置のみからなるので、好ましいクォーラムである可能性がある。
図7aを見ると、分散システム10のクライアント20は、システムが変数「w」によって表現されたファンクションを実行するという要求600を送信することができる。要求600を、リーダー13に直接配信されているとして例示するが、クライアント20はこの要求を分散コンピューティングシステム10の装置のいずれに送信している可能性もある。装置11または12など、他の装置の1つが要求600を受信していた場合、この装置は、上記で詳述したように、Paxosアルゴリズムの第1のフェーズを開始することなどによって、リーダーになろうと試みている可能性があり、または、単に要求600をリーダー13に転送している可能性がある。例示のため、図7a〜cはシステム10のオペレーションを、リーダー13が直接的または間接的に要求600を受信したかのように例示する。
装置11〜13を備えるクォーラムのリーダー13は、図6a〜cを参照して上記で詳細にそのオペレーションを説明した装置11〜15を備えるクォーラムのリーダーと同じであるので、Paxosアルゴリズムの第1のフェーズを実行する必要はない。むしろ、リーダーはメッセージ601などのメッセージを送信することによってファンクション「w」を提案し、Paxosアルゴリズムの第2のフェーズを開始することができる。しかし、このメッセージを以前の装置のクォーラムに送信するのではなく、リーダーはこのときメッセージ601を、装置11〜13を備える新しいクォーラムに送信することができ、新しいクォーラムは、表1によって例示された、以前に選択されたクォーラムの集合におけるクォーラムである。
メッセージ601を受信すると、各装置11および12は、ファンクション「w」を実行するための提案に投票するかどうかを判断することができる。上記で詳細に説明したように、装置は、その投票を請求するために使用されている提案番号よりも高い提案番号を有するメッセージに応答していない場合、提案されたファンクションに投票することができる。したがって、装置11または12の一方が、例えば、200より大きい提案番号を有するメッセージに応答していた場合、メッセージ601の提案番号は200であるので、メッセージ601において提案されたファンクションに投票することができない。しかし、図7bに例示するように、この特定の実施例では、各装置11〜13は、提案されたファンクションに投票することができると判断することができ、各装置は、それぞれ適切な投票メッセージ611〜613により応答することができる。
メッセージ611〜613を受信すると、リーダー13は、ファンクション「w」が選択されたと判断することができ、このファンクション、および、リーダーが有する以前に選択されたファンクションの知識に応じて、リーダーはこのファンクションを実行することができる。加えて、図7cに示すように、リーダー13はメッセージ620を装置11および12に送信し、ファンクション「w」が選択されたこと、および、装置11および12が現在のシステムステップのためにそのファンクションを実行することができることを指示することができる。リーダー13はまたメッセージ621をクライアント20に戻すように送信し、適切な場合は、クライアントにファンクション「w」の実行の結果を通知することもできる。同様に、リーダー13はメッセージ622を送信して、装置30および31など、他の装置にも、選択されたファンクションの実行の結果を通知することができる。代替として、装置30および31はリーダー装置の役割をすることができ、ファンクションの選択に参加しないとしても、システム10の状態を独立して維持することができる。このような場合、リーダー13は、選択されたファンクションの実行の結果を送信する必要はないが、単に、メッセージ622を介して、そのファンクションが選択されたという事実を送信することができる。したがって、メッセージ622は、メッセージ621とは対照的にメッセージ620に類似するようになる。
図7cは、装置13が、装置11および12から投票を受信し、ファンクションが選択されたことを知り、次いでこの情報をクォーラム内の両方の装置および他の装置へ中継することによって、区別された学習者の役割をすることを例示する。しかし、リーダー13が、区別された学習者の役割をするという要件はない。例えば、装置11など、別の装置が、区別された学習者の役割をすることができる。このような場合、装置11〜13はメッセージ611〜613を装置11に送信することができ、装置11は、図7cに例示されたメッセージを送信することができる。代替として、ネットワークトラフィックの量が増すことを犠牲にして、各装置11〜13にそれらの投票をすべての他の装置へ送信させることによって、1つのメッセージ遅延を省くことができる。このような場合、各装置11〜13は、ファンクション「w」が選択されたことを独立して知っているようになり、リーダー13は、メッセージ620などのメッセージを送信しておく必要がなくなる。加えて、装置11〜13のいずれもがメッセージ621および622をクライアント20ならびにリーダー装置30および31にそれぞれ送信しておくことが可能である。
装置11〜13がクォーラムを構成するので、これらの各装置の投票は、提案されたファンクションが選択されるために、要求される場合がある。したがって、装置11〜13の1つがメッセージ601に応答しなかった場合、この提案は選択されていない場合がある。上述のように、装置が提案に投票しない可能性がある1つの理由は、この装置が、より高い提案番号を有するメッセージを受信したからである。このような場合、リーダー13は、上述の方法でPaxosアルゴリズムの第1のフェーズを実行することによって、装置11〜13にリーダーの提案を選択させる目的でより高い提案番号発行に対処しようと試みることができる。
しかし、リーダー13はしばしば、なぜ特定の装置が提案に投票中でないのかを決定することができない。例えば、装置は、より高い提案番号を有するメッセージへの応答のために、提案に投票中でない場合があるが、装置に障害が起こっているか、あるいは、リーダーと装置の間の通信メディアに障害が起こっているために、装置は提案に投票中でない場合がある可能性もある。Paxosアルゴリズムの第1のフェーズを実行することは、無投票状態のための1つの可能な理由に対処することしかできないので、リーダーはその代わりに、上記で選択され、表1で列挙されたクォーラムの集合がそれに基づく装置のグループから、無応答装置を除去しようと試みることができる。
しかし、適切に機能中であり、より高い提案番号を有するメッセージに応答したために投票していない場合がある装置を除去することは、装置の数を減らし、それによりシステムのフォールトトレランスを低下させる。したがって、単に、新しいクォーラムの集合を定義して、それからの応答を受信していない装置を排除しようと試みるのではなく、リーダーおよびクォーラム内の他の装置は、クォーラムの装置の適切なオペレーションに関する情報を共有することができる。例えば、本発明の一実施形態によって企図された1つのメカニズムは、各装置について、それが動作可能であると他の各装置が考えるかどうかを指示する、アレイが維持されることを必要とする。装置は、状態マシンコマンドをサブミットすることによって、表内のエントリを変更することができる。次いで、装置に障害が起こっているという、提案者による確信に基づいて、いずれかの装置を排除するクォーラムの集合を提案するのに先立って、表をリーダーまたは別の装置によって調べることができる。
図8aを見ると、装置12は、障害を経験しているとして例示される。装置12の障害を、上述のシステムを使用して検出することができるが、本発明は、特定の装置で障害が起こっていることを検出、またはそうでない場合はこれに合意する、いかなる数の実施態様をも企図する。それにもかかわらず、装置12の例示的障害は、どのように検出されようとも、本発明の一実施形態による、修正されたPaxosアルゴリズムの一態様を例示するために使用される。
図7aのように、図8aは、リーダー13による、クライアント20からの要求700の受信を例示する。上述のように、要求700をリーダー13にクライアント20から直接的または間接的に配信することができる。要求700は、分散コンピューティングシステム10が変数「v」によって表現されたファンクションを実行することを、クライアント20が望むことを指示する。結果として、リーダー13は、次のステップ番号29、および、以前に使用された提案番号200を使用して、ファンクション「v」が、装置11〜13を備えるクォーラムによって投票されることを提案する。このような提案は、メッセージ701によって例示される。
しかし、図7aとは異なり、図8aでは、装置12は障害を受けているとして例示される。上記で説明したように、このような障害は、ソフトウェアまたはハードウェア障害など、装置自体のものである可能性があり、または、装置12とリーダー装置13の間の通信メディアのものである可能性がある。したがって、図8bに例示するように、装置12は投票メッセージをリーダー13に送信しない。その代わりに、リーダー13は投票メッセージ711および713を装置11および13からそれぞれ受信する。装置のクォーラム未満がファンクションに投票しているので、このファンクションは選択されていない。加えて、装置11〜13を備えるクォーラムは機能することを中止しており、これは、装置12が、リーダー13とのその通信を妨げている障害を経験中であるからである。したがって、リーダー13は、ファンクション「v」が、以前に選択され、上記の表1において列挙されたクォーラムの集合の一部でもある、代替クォーラムによって選択されるように試みることができる。加えて、リーダー13は、装置12を含まないクォーラムを備える、新しいクォーラムの集合を選択するように試みることができる。
図8cを見ると、リーダーは、ファンクション「v」が、以前に選択されたクォーラムの集合からの別のクォーラムによって選択されるように試みる。具体的には、例示した実施例では、リーダーは装置11および13〜15を備えるクォーラムを選択する。リーダー装置13はアクティブのままであるので、単に、以前に送信されたメッセージ701に類似するメッセージ720を送信することによって、新たに選択されたクォーラムを使用して、失敗した投票を再度試みることができる。選択されたクォーラムは装置11および13〜15を備えるが、リーダー13はメッセージ720を装置11およびそれ自体に送信する必要はなく、これは、リーダー13がすでに類似のメッセージ701をこれらの2つの装置に送信しており、図8bのように、すでにそれらの投票をメッセージ711および713の形態で受信しているからである。したがって、メッセージ720を、以前のクォーラムの一部でなく、この提案にすでに投票していなかった、新たに選択されたクォーラムの装置に送信することができる。
図8dを見ると、メッセージ720を受信した各装置14〜15は、メッセージ734〜735を介してその提案に投票するように示される。装置11および13〜15はクォーラムを備えるので、メッセージ734〜735を受信し、これらのメッセージを、図8bに例示した、以前に受信された投票メッセージ711および713と結合すると、リーダー13は、この提案が受け入れられたと判断することができる。実際に、装置11および13〜15のうち1つが応答しなかった場合でも、残りの3つの装置はまた、表1のリストによって証明されるように、選択されたクォーラムの1つであるクォーラムを構成し、リーダーは、そのクォーラムに依拠して、提案が選択されたと判断していることが可能である。
ファンクション「v」をステップ29のために実行する提案が分散コンピューティングシステム10によって受け入れられたので、リーダー13は、このファンクション、および、リーダーが有する以前に選択されたファンクションの知識に応じて、このファンクション「v」をステップ29のために実行することができ、その実行の結果を、適切な場合は、図8eに例示するようにメッセージ741を送信することなどによって、そのファンクションが実行されることを要求していたクライアント20に送信することができる。図8eにも例示するように、リーダーはメッセージ742を送信して、コンピューティング装置30および31に、ファンクション「v」の実行の結果を通知することができ、あるいは上述のように、装置30および31が学習者装置である場合、リーダー13は単に、ファンクション「v」がステップ29のために選択されたという指示を送信することができる。加えて、リーダー13は、メッセージ740などのメッセージを送信し、装置11に、ファンクション「v」をステップ29のために実行するための決定を通知することができる。装置14および15は、システム11の状態を維持する必要のない補助装置であるので、これらの装置は、選択されたファンクションを実行するように命令される必要はない。むしろ、すでに示しているように、このような補助装置はクォーラムの選択を支援することができ、選択されたクォーラムが障害を経験するとき、提案に投票することができる。
上述の例示的な例示では、リーダーの役割をしていなかったコンピューティング装置、すなわち、コンピューティング装置12が障害を経験した。リーダーコンピューティング装置13が代わりに障害を経験していた場合、メッセージ701において送信された提案への投票は同様に失敗しているようになる。しかし、システム10はリーダーなしに残されているようになるので、新しいリーダー装置が、まだ動作可能であったメインコンピューティング装置の中から選択されていることが可能であった。続いて、新しいリーダーは、図8cに例示した方法で、選択されたクォーラムの集合からの装置のクォーラムに、現在の提案を再度サブミットしようと試みることが可能であった。
しかし、その場合、新しいリーダー装置が選択されているようになるので、上述のPaxosアルゴリズムの第1のフェーズを、いかなる提案をサブミットするのにも先立って、新しいリーダー装置によって実行することができる。上記で詳述したように、Paxosアルゴリズムの第1のフェーズの実行は、新たに選択されたリーダーに、以前のリーダーによって完了されなかった保留中の提案を知るために十分な情報を提供することができる。Paxosアルゴリズムの第1のフェーズの実行はまた、新たに選択されたリーダーに、すでに選択された提案を知るために十分な情報を提供することもできる。すでに選択された提案の場合、クォーラムの他の装置は、最終投票情報により応答するのではなく、単に、特定の提案が選択されたことを指示することができる。次いで、新しいリーダーは、以前のリーダーで障害が起こったときに投票されていた提案を含む、選択されなかった保留中の提案に集中することができ、これらの提案を、1つまたは複数の補助装置を備える代替クォーラムにサブミットすることができる。保留中の提案がサブミットされた後、実行は、図8c〜eを参照して上述したように進行することができる。
リーダーで障害が起こるか、別のメインコンピューティング装置で障害が起こるかにかかわらず、最終結果は、排他的にメインコンピューティング装置からなった、選択されたクォーラムの集合からのクォーラムのみが、もはや動作可能でないということである。したがって、選択されたクォーラムの集合からのクォーラムを使用してオペレーションを継続するために、システムは少なくとも1つの補助コンピューティング装置に依拠することができる。このような補助コンピューティング装置は、上述のファンクションを実行するための最適な環境を提供することができないので、動作中のメインコンピューティング装置からなるクォーラムを含むことができる新しいクォーラムの集合を、以前に選択されたクォーラムの集合からのクォーラムによって選択することができる。
図9aを見ると、リーダー13は、新しいクォーラムの集合を定義する新しいファンクションを提案する。新しいクォーラムの集合を以下の表2で列挙し、表を見るとわかるように、障害が起こったコンピューティング装置12を含むクォーラムは含まれない。また、表2を見るとわかるように、このようなクォーラムは分散コンピューティングシステム10内の装置の過半数未満であるとしても、このクォーラムの集合には、動作中のメインコンピューティング装置のみのクォーラムが含まれる。表2で列挙されたクォーラムの集合は、システム10内の装置の少なくとも過半数を備えるクォーラムによって選択されるようになるので、新たに選択されたクォーラムの集合が一貫性のないアクションを実行する可能性のあるリスクは減少する。しかし、本発明の一実施形態は、1つのクォーラムが、少なくとも1つのメインコンピューティング装置を、クォーラムの集合に投票するクォーラムと共有しない、クォーラムを含むクォーラムの集合を選択するべきではないことを企図する。
図9bを見ると、装置11および13〜15は、上記の表2で列挙されたクォーラムを備える新しいクォーラムの集合「{Q2}」を選択するための提案に投票するように示される。図9bに例示するメッセージ811および813〜815を受信すると、リーダー13は、提案されたクォーラムの集合が選択されたと判断することができ、図9cに示すように、様々な装置にこの選択を通知することができる。上記のように、メッセージ820は、装置11にのみ送信されるとして例示されるが、補助コンピューティング装置にもまた、クォーラムの集合「{Q2}」の選択を通知することができる。加えて、上記で説明したように、メッセージ820は、装置11および13がすべての以前のシステムステップのために選択されたファンクションを承知していると、リーダー13が判断することができるメカニズムの役割をすることができる。
リーダー13は、新たに選択されたクォーラムの1つと通信を開始する前に、補助装置14および15における計算の負担をさらに低減しようと試みることができる。上記の詳細な説明からわかるように、補助装置14および15は、選択されたクォーラムの集合からの、メインコンピューティング装置を備えるクォーラムが、障害を経験するとき、提案の選択に関与する。したがって、補助装置14および15はまれにしか使用されないので、それらの装置についての計算的な要件が低減される。さらに、補助装置14および15はシステムの状態を維持する必要がないので、これらの装置は、Paxosアルゴリズムの第1および第2のフェーズにおいてメッセージに適切に応答するために十分な量の情報を保持することのみが必要である。具体的には、補助装置は、最後に応答した最高提案番号、ならびに、それらの補助装置が参加した各システムステップについて最後に投票した提案およびその対応する提案番号を格納することができる。
補助装置によって格納される情報の量を、さらにリーダーによって減らすことができる。例えば、リーダー13は、新たに選択されたクォーラムとの通信を開始するのに先立って、補助装置14および15に、ステップ1ないし30がすでに決定されており、他のステップは決定されていないことを指示することができる。少なくとも1つのメインコンピューティング装置が、ステップ1ないし30のために選択されたファンクションを承知しているので、補助装置14および15は単に、ステップ1ないし30のためのファンクションが選択されたという事実を格納することが必要であり、選択されたファンクションを格納することはない。加えて、補助装置は、補助装置が参加したこれらのステップについての最終投票情報など、ステップ1ないし30について保持している可能性のあるいかなる追加の情報をも廃棄することができる。このように、補助装置に課せられるストレージの負担をさらに減らすことができる。
補助コンピューティング装置は、それらの最終投票情報などの情報を廃棄するように命令される可能性があるので、それに対する適切な応答が、補助装置がもはや維持しない情報を要求するメッセージを、補助装置が受信する場合のある可能性がある。本発明の一実施形態によって企図された、このような状態に対処するための1つの単純なメカニズムは、単に補助装置にメッセージを無視させることである。
本発明の一実施形態によって企図された1つのメカニズムによれば、最終投票情報の一部として、補助装置が最後に投票した完全なファンクションではなく、ファンクションのハッシュまたは他の一意の識別子のみを格納することによって、補助装置のリソースの量をさらに減らすことができる。当業者にはわかるように、提案されたファンクションは数メガバイトのデータを含む可能性があるが、このようなファンクションのハッシュは2、3キロバイトのみである可能性が高く、ファンガープリントファンクションは一般に64または128ビットのみを使用し、さらに少数を使用してファンクションを識別することができる。さらに、いかなるクォーラムも、完全なファンクションをその最終投票情報と共に保持しているようになる、少なくとも1つのメインコンピューティング装置を備えるので、以前のファンクションを知るリーダーは、ファンクションのハッシュまたはフィンガープリントのみを含むいくつかの応答を受信する場合があるが、ファンクションがクォーラムによって選択された場合、リーダーは、ファンクションを選択したクォーラム内の少なくとも1つのメインコンピューティング装置から、完全なファンクションの少なくとも1つのコピーを受信するようになる。したがって、補助コンピューティング装置に課せられるストレージの負担は、システムのオペレーションに影響を与えることなく、さらに減らすことができる。
図10aを見ると、リーダー装置13は、クライアントコンピューティング装置20からの、分散コンピューティングシステム10が変数「u」によって識別されたファンクションを実行することを要求する要求900を受信するように示される。上述のように、要求900をリーダー13によって直接的または間接的に、分散コンピューティングシステム10内の別の装置から受信することができる。クライアントの要求900を受信すると、リーダー13は、後続のシステムステップのためのファンクション「u」の実行の提案を、表2で列挙される選択されたクォーラムの集合内の装置のクォーラムに送信することができる。図10aで例示した実施例では、リーダー13は、メインコンピューティング装置を備え、補助装置を備えない、好ましいクォーラムを選択することができる。表2に示すように、装置11および13を備えるクォーラムは、選択されたクォーラムの集合の一部であり、したがって、このクォーラムを使用することができる。したがって、リーダー13はメッセージ901をそれ自体および装置11に、図10aに示すように送信することができる。
装置11および13の両方は、図10bにおけるメッセージ911および913によって例示されるように、提案に投票することができる。このような場合、リーダー13は、提案されたファンクション「u」がクォーラムによって選択されたと判断することができ、このファンクション、および、リーダーが有する以前に選択されたファンクションの知識に応じて、リーダーはファンクション「u」を実行し、実行の結果をクライアント20に、図10cに示すようにメッセージ921を介して送信することができる。加えて、リーダー13は、選択されたクォーラムの他の装置、すなわち、この実施例では装置11に、メッセージ920などの実行メッセージを介してファンクション「u」の選択を通知することができる。また、前述のように、リーダー13は、装置30および31など、他の装置に、ファンクション「u」の実行の結果を、メッセージ922を介して通知することができ、あるいは、装置30および31が学習者装置である場合、リーダーはこれらの装置に、ファンクション「w」がステップ31のためにクォーラムによって選択されたという事実のみを通知することができる。
上記の実施例は、障害が起こった装置を含むクォーラムを含まない新しいクォーラムの集合を選択することによって、障害の起こった装置を除去する手順を、詳細に説明するが、類似の手順を実行して、新しい装置または修理された装置を追加することができる。例えば、表2で列挙されたクォーラムの集合を提案する代わりに、リーダー13は、以下の表3で列挙されたようなクォーラムの集合「{Q2’}」を提案することによって、新しい装置16を追加していることが可能である。クォーラムの集合「{Q2’}」は、図9b〜9cで例示された方法に類似の方法で選択されていることが可能であり、図10a〜10cで例示された方法に類似の方法で動作していることが可能である。
表に示すように、補助装置はしばしば使用されないが、補助装置は、各メインコンピューティング装置の状態が一貫したままであることを保証することができる。例えば、上述の分散コンピューティングシステム10がメインコンピューティング装置11〜13のみを備えた場合、これらの装置の間の通信メディアの障害は各装置にとって、他の2つの装置の障害のように見えるようになる。したがって、実際には、ハードウェアまたはソフトウェアのエラーなどにより、装置で障害は起こっていないが、各装置は、他の装置で障害が起こっていると考える。補助コンピューティング装置なしで、システムが、上述のシステムと同じレベルのフォールトトレランス、すなわち、2つほどの障害を許容する能力を維持しようと試みた場合、各装置は、それ自体が最後に残っている装置であると考え、システムが2つの障害のみを経験していると考えて、提案されたファンクションの選択を継続するようになる。しかし、3つの装置はこのとき互いに独立して動作中となるので、それらの状態は急速に分化する可能性がある。
補助装置の追加は、分散コンピューティングシステムが、上記で詳述した方法で、ファンクションを選択中である装置に合意することを可能にし、2つ以上の装置が互いに独立してファンクションを選択しないことを保証する。例えば、装置11〜13の間の通信メディアの障害の場合、各装置11〜13はこの障害を、他の2つの装置の障害として考えるようになる。しかし、補助装置14〜15の存在のため、装置11〜13のいずれも、装置14〜15の投票を受信することなく、システムステップのためのファンクションを選択することができる。したがって、装置11〜13が互いに通信することができないとしても、補助装置14〜15とのそれらの通信は、各装置11〜13が、システムステップのために選択されている可能性のあるいかなるファンクションを知ることも可能にし、それにより、2つ以上の異なるファンクションが同じシステムステップのために選択されることを防止する。代替として、装置11〜13の1つまたは複数が補助装置14〜15とも通信することができなかった場合、その装置は、いかなるファンクションのための投票のクォーラムも受信することができなくなり、独立してファンクションを選択しないようになる。このように、システムはPaxosアルゴリズムの上述の特性に依拠して、単一の装置または装置のグループのみが、ファンクションの選択を継続するための権限を有すること、および、いかなる所与のシステムステップについても単一のファンクションのみが選択されることを保証する。
クォーラム状態マシンにおいて補助装置を使用する、修正されたPaxosアルゴリズム
単一の状態マシンを使用して提案を選択し、将来に使用されるべきクォーラムの集合を選択するのではなく、本発明の一実施形態によって企図されたもう1つのメカニズムは、フォールトトレラントなアルゴリズムを実施する2つの異なる状態マシンを必要とする。一方の状態マシンを、もう1つの状態マシンによって使用されるべきクォーラムを選択することができる、クォーラム選択状態マシンにすることができる。他方の状態マシンを、分散コンピューティングシステムのクライアントによって要求されたファンクションを提案および選択するために、クォーラム選択状態マシンによって選択されたクォーラムを使用する、システム状態マシンにすることができる。クォーラム選択状態マシンおよびシステム状態マシンは2つの異なる状態マシンにすることができるが、これらのマシンは共に重複する集合のコンピューティング装置によって実施することができる。補助コンピューティング装置をクォーラム選択状態マシンの一部として使用して、フォールトトレランスを提供することができ、クォーラム選択状態マシンは次いで、システム状態マシンによって使用されるべき動作可能なメインコンピューティング装置を備えるクォーラムを選択することができる。
図11aを見ると、クォーラム選択状態マシンは、装置11〜15を備える分散コンピューティングシステム10によって実施されるように示され、前述のように、装置11〜13はメインコンピューティング装置として例示され、装置14〜15は補助コンピューティング装置として例示される。図11aは、装置13がリーダーの役割をし、上記で詳述したように、12以上の番号のすべてのシステムステップのために提案番号100を有するメッセージ1000を送信することを例示する。各装置11〜15はメッセージ1000に、100未満の提案番号を有する提案に対する装置の最終投票に関する情報により、応答することができる。図11bを見ると、装置11〜15は、メッセージ1000に、メッセージ1011〜1015における最終投票情報により応答するように示される。メッセージ1011〜1015など、応答メッセージが、リーダーが保留中のファンクションをクリーンアップすることを要求する情報を含む場合、リーダーは、図4を参照して上記で詳述したように、それを行うことができる。しかし、図11bに示すこの例示的な例示は、装置11〜15のいずれもが、システムステップ12のために実行されるべきファンクションへのいかなる以前の投票をも有していないことを指示する。したがって、リーダー13はいかなるファンクションを装置11〜15に提案することもできる。
図11cを見ると、リーダー13は、システム状態マシンのためのクォーラムを定義するためのファンクションを提案するように示される。具体的には、メッセージ1020は、装置11〜13を備えるクォーラムがシステム状態マシンによって使用されるように提案されていることを指示するが、装置13はリーダーの役割をするようになり、クォーラムは、リーダーが提案番号200を使用することができる限り、効力を有するままとなる。言い換えれば、メッセージ1020は、装置11〜13を備えるクォーラムに、提案番号200のためのクォーラムの役割をするように提案する。したがって、提案されたクォーラムのリーダーがPaxosアルゴリズムの第1のフェーズを2度目に使用する必要がある場合、この提案番号は変わるようになり、以下に例示するように、クォーラム選択状態マシンを使用して、新しい提案番号のための別のクォーラムを選択することができる。
各装置11〜15がメッセージ1020を受信すると、これらの装置はそのメッセージに投票するかどうかを判断することができる。上記で詳細に説明したように、装置は、現在の提案に関連付けられた提案番号より高い提案番号を有するメッセージに応答していない限り、現在の提案に投票することができる。図11dは、各装置11〜15が提案されたクォーラムに、投票メッセージ1031〜1035を介して投票することを例示する。上記で説明したように、クォーラムを、選択されたクォーラムの集合内の他のあらゆるクォーラムと少なくとも1つの装置を共有する状態マシンを実施する装置のいかなる集まりにすることもできるので、リーダー13が、例示されたクォーラム選択状態マシンを実施する装置11〜15から3つの投票しか受信していなかった場合でも、提案されたクォーラムが選択されたと判断していることが可能であった。
リーダー13が、提案されたクォーラムが選択されたと判断した後、他のメインコンピューティング装置11および12に、メッセージ1040などのメッセージを介して通知することができる。メッセージ1040は図11eで、他のメインコンピューティング装置11および12のみに送信されるとして例示されるが、補助コンピューティング装置14および15にも、提案されたクォーラムの選択を通知することができる。
クォーラム選択状態マシンが特定の提案番号のためのクォーラムを選択しており、リーダー装置を指定した後、選択されたクォーラムをシステム状態マシンによって使用することができる。最初に、選択されたリーダー装置は、リーダーが承知していないいかなる保留中または選択された提案をも知るように試みることができる。図12aを見ると、選択されたリーダー装置13は、リーダーが次のシステムステップ、すなわちこの実施例ではステップ28であると考えるシステムステップのために、選択された提案番号200を有するメッセージを送信するように示される。
リーダーのメッセージ1100への応答において、選択されたクォーラムの各装置はそれらの最終投票情報に、上記で詳述したように応答することができる。しかし、クォーラムの構成は、各提案番号、どのファンクションを所与のシステムステップのために実行するべきであるかを決定する助けとなることができる、本発明の一実施形態によって企図された1つのメカニズムにより変わる場合があるので、メッセージ1100への応答において、各装置はまた、それらが有する安全提案のいかなる知識を含むこともできる。例えば、図12bに示すように、装置11はメッセージ1111を送信することができ、提案番号180を使用して提案された、変数「a」によって表現されたファンクションの提案に装置11が最後に投票したこと、および、すべての提案可能な値が提案番号199で安全であることを装置11が知っていることを指示する。メッセージ1111はまた、ステップ28を越えるいかなるシステムステップにも装置11が投票していないことも指示することができる。また図12bに示すように、装置12からのメッセージ1112は類似の情報を含むことができる。例えば、メッセージ1112は、装置12がステップ28を越えるいかなるシステムステップにも投票していないが、提案番号190を使用して提案された変数「b」によって表現されたファンクションに投票していること、および、すべての提案可能な値が提案番号199で安全であることを装置12が知っていることを指示することができる。
当業者には理解されるように、上記の実施例などの状況では、各装置が安全であると知っているファンクションの情報には、最後に投票されたファンクションが含まれ、装置11または12などの装置は、それらの最後の投票に関する情報を送信する必要はない。例えば、装置11はメッセージ1111を介して、すべての提案可能な情報が安全であることを知っていることを指示するので、ファンクション「a」に投票したという追加の情報は少しも重要でない場合があり、したがって、メッセージ1111に含める必要はない場合がある。
装置は、リーダーによって、装置が属した以前のクォーラムをそのように通知された場合、ファンクションが安全であると知ることができる。リーダーは、装置がすでにファンクションに投票していることを指示するか、あるいは装置が、ファンクションが安全であると知っていることを指示する、少なくとも1つの装置からの応答、および、他のクォーラムが、中間の提案番号を使用して、異なるファンクションを選択している可能性がないという指示を受信する場合、ファンクションが安全であると決定することができる。具体的には、特定のシステムステップのために実行されるべきファンクションは、他のファンクションが、現在の提案番号未満であるいずれかの提案番号を使用してそのシステムステップのために実行されるように選択されている可能性がない場合、現在の提案番号で安全である可能性がある。
したがって、現在のステップ番号未満である各ステップ番号に関連付けられたクォーラムが何を達成している可能性があるかを知ることが必要である可能性がある。したがって、クォーラム選択状態マシンは連続する提案番号を使用することができ、以前の提案番号に関連付けられたクォーラムと装置を共有するクォーラムを選択しようと試みることができる。代替として、リーダー装置は、メッセージ1100などのメッセージを、以前のクォーラムのメンバであった装置へ、これらの装置が現在選択されたクォーラムのメンバではない場合でも、送信することができる。リーダーが、現在の提案番号未満の提案番号を使用して以前のクォーラムによって選択されている可能性のあるいかなるファンクションをも知った後、リーダーは現在選択されたクォーラムとの通信を再開することができる。また、単一のファンクションのみをいずれかの所与のシステムステップのために選択および実行することができるので、リーダーが、複数のファンクションが安全であると知る場合、ファンクションが以前に選択されている可能性はなく、すべてのファンクションが安全である。
本発明の一実施形態は、リーダーが、選択された装置から、各装置の最終投票の指示およびどのファンクションが安全であると装置が知るかの指示を収集することができ、この情報から、リーダーは、安全であると知られるファンクションを決定し、いかなる提案を送信する前にも、この情報をクォーラム内の残りの装置に提供することができる。具体的には、ただ1つのファンクションが以前に投票されるか、あるいは安全であると知られるとして指示される場合、リーダーは、そのファンクションのみが安全であることを、残りの装置に通知することができる。代替として、ファンクションが以前に投票されるか、あるいは安全であると知られるとして指示されない場合、または、複数のファンクションが以前に投票されたとして指示される場合、リーダーは、すべてのファンクションが安全であると判断することができ、残りの装置に、すべてのファンクションが安全であると知られることを通知することができる。
いかなるファンクションを提案する前にも、知られた安全情報を送信することによって、リーダーは、安全なファンクションの知識が、増え続ける提案番号に関連付けられたクォーラムの中で伝搬されることを保証することができ、これは、障害がクォーラムを動作不能にし、新しいクォーラムが選択される前に、クォーラムの装置が提案に投票する機会を得ない場合でもそうである。例えば、1つの提案番号のためのクォーラムは第1および第2の装置を備えることができ、第1の装置で、いかなる提案が投票のためにサブミットされる前にも障害が起こる可能性がある。続いて、より大きい提案番号のための新しいクォーラムを、第2の装置および第3の装置を備えるように選択することができ、今度は第2の装置で、いかなる提案が投票のためにサブミットされる前にも障害が起こる可能性がある。第3の装置のみを備える第3のクォーラムを次いで、さらに大きい提案番号のために選択することができる。しかし、第1の装置が安全なファンクションの知識を第2の装置に伝えていない限り、および、第2の装置が続いてそれ自体の安全なファンクションの知識を第3の装置に伝えていない限り、第3の装置は、何のファンクションが安全であったかを決定することができない場合がある。
具体的には、第1および第2の装置では、提案に投票する機会がある前に障害が起こったので、これらの装置は最終投票情報を有していない。結果として、最終投票情報のみに依拠することによって、第3の装置は、第2の装置が以前にいかなる提案にも投票しなかったことを知ることができるが、第2の装置が一度も投票していないので、第3の装置は、第2の装置からの、何を第1の装置が行った可能性があるかについてのいかなる情報を収集することもできない。第3の装置は、第1の装置がすでに提案に投票しているかどうかを判断することができないので、何の提案が安全であるかを決定することができない。逆に、最終投票情報とは無関係に安全なファンクションの知識を伝搬することによって、第1の装置は第2の装置に、投票が入れられていなかったのですべてのファンクションが安全であったことを伝えておくことが可能であり、第2の装置は続いてこの情報を第3の装置に伝えておくことが可能である。したがって、最終投票情報のみへの依拠は、第1の装置が修理されるまでシステムを停止させている可能性があるが、最終投票情報とは無関係に安全なファンクションの知識を伝搬することによって、システムは、この例示的な場合に類似の状況でもオペレーションを継続することができる。
したがって、システムステップ28のためのいかなるファンクションを提案する前にも、リーダー13は最初に装置11および12に、メッセージ1111および1112に基づいて提案200のために安全であると知られるとリーダー13が決定しているファンクションを、通知することができる。図12cを見ると、リーダー13は装置11および12に、すべての提案可能なファンクションが、27より大きいすべてのステップについて提案番号200で安全であると知られることを、通知することができ、これは、すべての提案可能なファンクションがステップ28のための提案199で安全であると知られており、ステップ28のための提案199でファンクションが選択されず、ステップ28を越えるステップのための提案番号200で知られた安全なファンクションに関する情報が受信されなかったからである。メッセージ1120などのメッセージを受信すると、受信側装置は、それらの既知の安全なファンクションの知識をアップデートすることができる。したがって、クライアントが、システム10が長期間に渡ってファンクションを実行することを要求せず、メインコンピューティング装置11〜13のうち1つで待機中に障害が起こる場合、安全であると知られるファンクションの知識を記録して、将来のクォーラムが進行することができることを保証するために後に使用することができる。
しかし、クライアント装置20などのクライアントが、分散コンピューティングシステム10によって実施されたシステム状態マシンに、ファンクションを実行するように要求する場合、リーダー13は、上述のステップを完了した後、ファンクションをクォーラム内の残りの装置に提案することができる。この実施例では、現在の提案番号200では、すべての提案可能な値は、ステップ27を越えるすべてのステップについて安全であると知られる。したがって、クライアント20が実行していることを望むいかなるファンクションも、システムステップ28での実行のために提案することができる。
例えば、装置11〜13を備えるクォーラムによってクライアント20から受信された提案の選択の上記の詳細な説明は、この実施例に等しく当てはまる。例えば、図12cに例示するように、メッセージ1120を広めた後、リーダー13は、図7aに例示するように要求600をクライアント20から受信することができる。したがって、上述のように、リーダー13は、要求されたファンクションをメッセージ601において提案し、図7bに示すように応答メッセージ611〜613を受信することができる。応答メッセージ611〜613から、リーダー13はこのファンクションが選択されたと判断することができ、適切な環境において、このファンクションをシステムステップ28のために実行し、適切な装置に、図7cに示すメッセージ620〜622を介して通知することができる。
装置が障害を経験していた場合、またはより高い提案番号を有するメッセージを受信していた場合など、装置11〜13のうち1つが提案に投票しなかった場合、異なる提案番号を使用する、異なるクォーラムを選択することができる。例えば、図8aに示すように、装置12は障害を経験中である可能性があり、したがって、リーダー13によって送信されたメッセージ701に応答しない場合がある。したがって、図8bに示すように、リーダー13はメッセージ711および713を、装置のクォーラム未満から受信するようになり、この提案は選択されないようになる。1つのクォーラムが提案番号200のために選択されており、そのクォーラム内のあらゆる装置が投票していないので、新しいクォーラムを、徐々に増えるより大きい提案番号のために選択することができる。したがって、システム状態マシンによって使用されたクォーラムの障害の結果として、クォーラム選択状態マシンを使用して、システム状態マシンのための新しいクォーラムを選択することができる。
上述のように、クォーラム選択状態マシンおよびシステム状態マシンを異なる状態マシンにすることができるが、これらのマシンを同じ装置によって実施することができる。例えば、状態マシンを実施するためのソフトウェアは2つの独立スレッドを備えることができ、一方のスレッドはソフトウェアのクォーラム選択状態マシンにおける参加の管理専用にされ、他方のスレッドはソフトウェアのシステム状態マシンにおける参加の管理専用にされるようにする。代替として、コンピューティング装置は複数のプログラムを同時に実行中にすることができ、一方のプログラムは装置のクォーラム選択状態マシンにおける参加を管理し、もう一方のプログラムは装置のシステム状態マシンにおける参加を管理する。当業者にはわかるように、クォーラム選択状態マシンおよびシステム状態マシンが同じ装置によって実施される場合、各状態マシンを実施するために使用されるメッセージは、どの状態マシンにメッセージが関連するかを指定することができる。例えば、メッセージ1000、1011〜1015、1020、1031〜1035および1040は、それらがクォーラム選択状態マシンメッセージであると指定することができるが、メッセージ1100、1111〜1113および1120は、それらがシステム状態マシンメッセージであると指定することができる。このような状態マシン情報を、提案番号または提案値などの情報と共に、メッセージのペイロードの一部にすることができ、あるいはこれを、様々なメッセージヘッダ内または他の類似の基礎的なネットワーク構造内で指定することができる。
したがって、装置11〜13がクォーラム選択状態マシンおよびシステム状態マシンに参加することができるので、これらの装置がシステム状態マシンの一部として実行中であったとしても、これらの装置は、クォーラム選択状態マシンの一部としてのそれらの役割を、介入するオペレーションが発生しなかったかのように、再開することができる。したがって、図13aで例示するように、リーダー13は、Paxosアルゴリズムの第1のフェーズを実行することなく、クォーラム選択状態マシンの装置の一部または全部の間で投票を開始することができる。メッセージ1200はしたがって、クォーラム選択状態マシンがステップ13で、システム状態マシンのための装置11および13を備えるクォーラムを定義するファンクションを実行することを、リーダー13が提案番号100により提案中であることを、指示することができる。このような提案されたクォーラムは、システム状態マシンが装置12の障害にもかかわらず、オペレーションを継続することを可能にするようになる。リーダー13はまた、メッセージ1200において、提案されたクォーラムがシステム状態マシンにおいて提案番号201のためのものであること、および、提案されたクォーラムのリーダーは装置13となることを指定することもできる。
システム状態マシンによって使用されたクォーラムは、クォーラム状態マシンによって選択され、分散コンピューティングシステム10のすべての装置の少なくとも過半数を備えるように要求されないので、1つのクォーラムが別のクォーラムといかなる装置をも共有しない場合がある可能性が存在する。したがって、安全なファンクションの知識が、一連の提案番号に関連付けられた一連のクォーラムを通じて正確に伝播されることを保証するために、クォーラム選択状態マシンによって選択された一連の提案番号を順次にすることができる。また、リーダー装置が安全なファンクションを決定するとき、リーダー装置は、それについてリーダーに安全である1つまたは複数のファンクションが通知されている最後のクォーラムと、現在のクォーラムの間の、すべてのクォーラムについて、クォーラム内の少なくとも1つの装置が以前のクォーラム内に存在したことを検証することができる。リーダーを支援するため、クォーラム選択状態マシンは、単一の装置を共有しない連続クォーラムの選択を回避することができる。したがって、図13aに示すように、提案されたクォーラムには装置11および13が含まれ、その両方が以前のクォーラムの一部であり、提案されたクォーラムに関連付けられた提案番号は201であり、これは、提案番号200に関連付けられた以前のクォーラムと、現在提案されたクォーラムの間で、クォーラムが選択されなかったことを指示する。
図13bを見ると、装置11、13および14は、メッセージ1211、1213および1214を介して、メッセージ1200の提案に投票しているように示される。装置12は、障害を経験しているとして例示され、この障害は、上述の例示的システム状態マシン内の装置12の障害に関係付けられる可能性がある。しかし、ただ装置がある状態マシンに参加中に障害が起こるからといって、必ずしも、別の状態マシンに参加中に障害が起こるようになるとは限らない。例えば、単一のハードウェアコンピューティング装置上では、システム状態マシンに参加している1つのソフトウェアコンポーネントで障害が起こる可能性があるが、クォーラム選択状態マシンに参加している別のソフトウェアコンポーネントは適切に動作し続ける可能性がある。しかし、ハードウェアまたは通信障害など、いくつかのタイプの障害は、すべての状態マシンにおける参加に等しく影響を及ぼす可能性がある。それにもかかわらず、ある状態マシンのための提案を装置に送信することは、その装置が別の状態マシンに参加中に障害が起こっている場合でも、有益である可能性がある。したがって、図13aに示すように、クォーラム選択状態マシン内のメッセージ1200は、以前に例示したように、システム状態マシン内の装置12の障害にもかかわらず、装置12に送信された。しかし、この実施例では、装置12は、両方の状態マシンへのその参加を妨げる障害を経験中である可能性があり、したがって、図13bに例示するように、メッセージ1200に応答しない場合がある。
図13bに例示する例示的クォーラム選択状態マシンは5つの装置を備えるので、2つほどの同時障害を許容することができる。したがって、別の装置で障害が起ころうとした場合でも、メッセージ1200で送信された提案はなお、少なくとも3つの装置を備える装置のクォーラムによって選択されている可能性がある。補助装置もまたメイン装置のように、障害を経験する可能性がある。例えば、図13bに示すように、装置15もまた窓外を経験中である可能性があり、結果として、メッセージ1200に応答しない場合がある。それにもかかわらず、装置11、13および14を備える装置のクォーラムは、受け入れメッセージ1211、1213および1214をリーダー13に送信しているとして例示され、リーダーはしたがって、ファンクションが選択されたと判断することができる。
図13cを見ると、リーダー13は他のコンピューティング装置に、新しいクォーラムの選択、クォーラムが使用するべき新しい提案番号、および新しいクォーラムのリーダーを通知することができる。このような情報をメッセージ1220において送信することができ、メッセージ1220は、動作可能なメインコンピューティング装置にのみ送信されるとして示されるが、補助コンピューティング装置にも送信して、それらの装置にこの選択を通知することもできる。
選択されたクォーラムは次いで、図14aに示すように、選択されたリーダーおよび選択された提案番号を使用してオペレーションを再開することができる。新しい提案番号が選択されているので、リーダー13は、提案メッセージ1300を選択されたクォーラム内の装置、すなわちそれ自体および装置11に送信することによって、以前の投票または他の既知の安全提案を知ることができる。提案メッセージ1300はシステムステップ29を指示することができ、これは、装置12が障害を経験したときにステップ29のためのファンクションを選択しようとする以前の試みが不成功であったので、ファンクションが例示のシステム状態マシン内でステップ29についてまだ決定されていないからである。
図14bを見ると、装置11および13は提案メッセージ1300に、メッセージ1311および1313により応答し、最終投票情報、および、安全であると知られるファンクションに関する情報を提供することができる。したがって、例えば、装置11は、提案番号200を有する変数「v」によって表現されたファンクションに最後に投票したこと、および、ファンクション「v」が提案番号200で安全であることを知っていることを指示することができる。装置13は、それ自体の最終投票情報、および、安全であると知られるファンクションに関してそれが有したいかなる情報をも決定していることが可能であるので、この情報を含む明示的メッセージを送信する必要はない。したがって、メッセージ1313はいかなる情報を含む必要もなく、これは装置13がすでにそれ自体の情報へのアクセスを有するからである。
上記で説明したように、リーダーは、リーダーの提案メッセージへの応答において受信された、最終投票情報、および、安全であると知られるファンクションについての情報を収集することができ、図14cに示すメッセージ1320など、安全であると知られるファンクションについてクォーラムの他の装置に通知するメッセージを送信することができる。例えば、リーダー13は、ファンクション「v」がステップ29について安全であったという指示を受信しており、他のいかなる安全なファンクションのいかなる情報をも受信しなかったので、リーダーは、ファンクション「v」がステップ29のための提案番号201で唯一の安全なファンクションであるという結論を出すことができる。加えて、リーダー13は、29より大きいステップのための安全なファンクションに関するいかなる情報をも受信しなかったので、すべての提案可能なファンクションが、29より大きいすべてのステップについて安全であると結論を出すことができ、この情報をメッセージ1320に含めることができる。
上述のように、分散コンピューティングシステムは、銀行の引き出しなど、要求されたファンクションを一回のみ実行することが重要である可能性がある。したがって、ただファンクションが1つの装置によって以前に投票されたからといって、必ずしもリーダーがそのファンクションを提案しなければならないという意味であるとは限らない。その代わりに、例示のように、リーダーは、ファンクションを提案する前に、他のいずれかの安全なファンクションがあるかどうかを知ることができる。このように、リーダーは同じファンクションが2回以上提案および選択されないように試みることができる。加えて、一意のファンクション識別子を使用して、リーダーまたは他の装置を助けることができ、これは、これらの装置が重複したファンクションを検出できるようにして、同じファンクションがすでに実行された場合はそのファンクションの実行に効果がないように定義することができるようにすることなどによって行う。
上述と同じように、リーダーは、安全であると知られるファンクションに関する情報を広めた後、システム状態マシンに、提案されたファンクションを選択させようと試みることを進めることができる。したがって、図14dを見ると、リーダー13は、メッセージ1330を送信して、システム状態マシンがファンクション「v」をステップ29のために選択することを提案するように示される。ファンクション「v」がメッセージ1320内で、ステップ29について唯一の安全なファンクションとして指示されたので、リーダー13はクライアント要求を待機する必要はないが、ファンクション「v」を自力で提案し、このファンクションが選択されるように試みることができる。前述のように、クォーラムはクォーラム選択状態マシンによって、装置12を含まないように定義されているので、リーダー13はメッセージ1330などのメッセージをそれ自体および装置11に送信することのみが必要である。
図14eを見ると、装置11および13は、提案されたファンクション「v」に投票しているように示される。クォーラム選択状態マシンによって定義されたクォーラムは、装置11および13を備えるので、クォーラム内の各装置はこのファンクションに投票しており、リーダー13は、このファンクションが選択されたと判断することができる。したがって、図14fのように、リーダー13は適切な環境においてファンクションを実行し、その実行の結果をクライアント20へメッセージ1351を介して、また他の関心のある装置30および31へメッセージ1352を介して、通信することができる。代替として、装置30および31がリーダー装置である場合、リーダー13は、ファンクション「v」が選択されたという事実を、リーダーが装置11にファンクション「v」の選択をメッセージ1350により通知する方法に類似の方法で、通信することができる。したがって、分散コンピューティングシステム10全体は5つの装置を備えるが、クォーラム選択状態マシン内の装置の少なくとも過半数がそれに投票している限り、システム状態マシンクォーラムをわずか1つの装置にすることができる。
システム状態マシンのオペレーションは、装置11および13により、図10を参照して上述した方法に類似の方法で、継続することができる。例えば、図10aに示すように、クライアント20は要求900をリーダー13に送信することができ、リーダー13は次いでこれを、選択されたクォーラムへ、メッセージ901などのメッセージを介して提案することができる。言うまでもなく、図10aはこの実施例とは、ステップ番号および提案番号において異なる。それにもかかわらず、クライアント20によって提案されたファンクションの選択は、図10bおよび図10cに例示した方法に類似の方法で進行することができ、図10bでは、リーダーはクォーラム内の装置の投票を受信し、図10cでは、リーダーは他の装置に、要求されたファンクションの選択、または、要求されたファンクションの実行の結果を通知する。
上記の実施例からわかるように、システム状態マシンは、クォーラム選択状態マシンに依拠して、障害のある装置を除外するようにクォーラムを定義することによって、障害を許容することができる。したがって、1つのメインコンピューティング装置が動作可能のままである限り、クォーラム選択状態マシンはクォーラム、すなわち、1つの残りの動作可能なメインコンピューティング装置を、システム状態マシンが使用するために、定義することができる。しかし、クォーラム選択状態マシンが装置を、システム状態マシンによって使用されたクォーラムから除去するたびに、システム状態マシンの、将来の障害を許容する能力は低下する。本発明の一実施形態によって企図された1つの解決法は、新しい、または修理されたメインコンピューティング装置を、システム状態マシンによって使用されたクォーラムに追加することである。クォーラム選択状態マシンは装置をシステム状態マシンのクォーラムに、上記で詳述した装置の除去に類似の方法で追加することができる。新たに追加された装置は次いで、以前に選択された提案を、他の装置をポーリングすることによるなど、Paxosアルゴリズムによって企図された標準の手順を通じて知ることができる。以前のクォーラムからの少なくとも1つのコンピューティング装置が十分な長さの時間に渡って動作可能のままである限り、新たに追加された装置は、以前に選択されたファンクションを知ることができ、共通の状態を達成することができる。
新しいまたは修正された装置を追加することに加えて、障害を経験中であると考えられる装置を除去するのに先立って厳密な基準を適用することによって、システム状態マシンの、将来の障害を許容する能力を増すことができる。例えば、装置がリーダーのメッセージに応答していないからというだけで装置を除去することは、適切に機能中の装置を不必要に除去する可能性がある。したがって、本発明の一実施形態によって企図された1つのメカニズムは、上記で詳述した方法においてアレイを維持して、別の装置が障害を経験中であるとある装置が考えるかどうかを指示することができるものである。このようなアレイを、クォーラム選択状態マシンによって維持することができる。
クォーラム選択状態マシンを実施する各装置は、上記で詳述した、Paxosアルゴリズムに関連付けられる情報を維持することができる。加えて、補助装置は、ハッシュに依拠するか、あるいは、同じく上記で詳述した方法で、クォーラムが選択されたという事実のみを格納することによって、使用されるストレージスペースの量を節約することができる。システム状態マシンを実施するメインコンピューティング装置は、各装置の最終投票に関する情報を維持することができ、また、安全であると知られるファンクションに関する情報も維持することができる。具体的には、システム状態マシン内の各メインコンピューティング装置は、(1)それについて装置がメッセージを受信または送信している最高提案番号、(2)装置が一票を投じている最大提案番号、(3)その提案番号について記録された投票情報、(4)その投票番号で安全である値を装置が知る最大提案番号、および(5)装置が安全であると知る値または値の集合を備える、情報を維持することができる。上記で説明したように、いくつかの環境では、装置が一票を投じている最大提案番号、および、その提案番号について記録された投票情報はすでに、装置が安全であると知る値または値の集合、および、その投票番号で安全である値を装置が知る最大提案番号によって、包含される可能性がある。このような場合、装置が一票を投じている最大提案番号、および、その提案番号について記録された投票情報は、別々に維持される必要はない。装置が、メッセージ1300など、以前に受信しているいずれよりも高い提案番号を有するメッセージを受信するとき、装置は、その対応する投票情報がなお初期値である、すべてのより低い提案番号についての投票情報を、初期値をゼロの値で置き換えることによって、アップデートすることができる、このように装置はより容易に、安全であるファンクションに関する情報を決定し、これに応答することができる。上述のように、装置は、特定の提案番号に対応する投票を変更することはできない場合がある。したがって、投票情報を、初期値から別の値に変更することはできるが、後に変更することはできない。投票情報、および、上記でリストした情報の一部または全部を装置によって、図2に示す、揮発性ストレージ130、または、ハードディスク141、フロッピー(登録商標)ディスク152または光ディスク156などの不揮発性ストレージにおいて、維持することができる。
メッセージ遅延が短縮される、修正されたPaxosアルゴリズム
クォーラム選択状態マシンが、システム状態マシンによって使用されるべきクォーラムを選択するかどうか、または、1つのクォーラムがクォーラムの集合を選択し、次いで、選択された集合からのクォーラムを使用するかどうかにかかわらず、少なくとも2つのメッセージ遅延が、リーダー装置によるクライアントの要求の受信と、リーダー装置によるクライアントの要求の結果の、クライアントへの送信の間で、導入される。具体的には、1つのメッセージ遅延は、リーダーがクライアントによって要求されたファンクションをクォーラム内の他の装置に提案するときに導入され、第2のメッセージ遅延は、クォーラム内の他の装置が提案に投票するときに導入される。
本発明の一実施形態によって企図された代替手法は、分散コンピューティングシステムのクライアントにそれらの要求を、選択されたクォーラムの装置に直接送信させることによって、これらのメッセージ遅延を除くことができ、選択されたクォーラムの装置はクライアントに直接応答することができる。クライアントが応答をクォーラム内のすべての装置から受信する場合、クライアントは、要求されたファンクションが選択されたと判断することができる。したがって、リーダー装置が、保留中の提案を知り、完了し、単にクライアント要求を待機中となった後、リーダー装置は、その代わりに、クォーラムの装置に、それらの装置がクライアントからのいかなる要求をも、決定された提案番号を有するリーダーからの提案として処理するべきであると、シグナル通知することができる。決定された提案番号を、高速提案番号として識別することができ、これは、高速提案番号では、装置はクライアントから直接受信された提案に投票することができることを示す。次いで、クライアントはクォーラムの装置と、上記で詳述したリーダーと装置の間の通信に類似の方法で通信することができる。当業者にはわかるように、このような手法は「Fast Paxos」と呼ばれており、その開示と調和する、本明細書内に含まれたいかなる教示または示唆をもさらに説明または記述するために、その開示が参照により全体として本明細書に組み込まれているものにおいて説明されている(例えば、特許文献1参照。)。
クライアントがクォーラムの装置と直接通信することを可能にすることは、2つの装置が異なるファンクションをほぼ同時に提案する競合の結果となる可能性がある。1つの解決策は、クォーラム内の装置の数を増して、いかなる2つのクォーラムもが少なくとも1つの装置を共有するだけではなく、分散コンピューティングシステムの少なくとも過半数の装置を共有するようにすることである。したがって、十分な数のメインコンピューティング装置が分散コンピューティングシステム内に存在する場合、上述の手順を使用して選択されたクォーラムの集合内の少なくとも1つのクォーラムは、クライアントがそのクォーラムの装置と直接通信することを可能にするために十分な数の装置を有することができ、それにより、Fast Paxosなど、メッセージ遅延短縮コンセンサスアルゴリズムを実施することができる。装置が障害を受ける場合、または、別のメインコンピューティング装置が追加される場合、クォーラムの集合からの異なるクォーラム、および、異なる非高速提案番号を使用して、いかなる保留中のファンクションをも完了し、上記で詳述した方法で新しいクォーラムの集合を選択することができる。
代替として、システム状態マシンはクォーラムによって実施され、すでにシステム状態マシンの装置のすべてを備える、クォーラム状態マシンによって選択されるので、クォーラム内の装置の数を増す必要はない。具体的には、システム状態マシンの中で、選択されたクォーラムの一部でない装置はないので、および、各装置が提案に投票するので、複数のクライアントからの競合する提案は、いかなる提案も選択されないようにすることができる。しかし、競合の場合、新しい非高速の提案番号を使用して、競合を解決することができる。したがって、Fast Paxosなど、メッセージ遅延短縮コンセンサスアルゴリズムを使用しようとするシステム状態マシンは、クォーラム選択状態マシンに、上述に類似の方法で、2つの提案番号を1つのクォーラムおよびリーダーのために選択させることができる。第1の提案番号を高速提案番号にすることができ、第2の提案番号を非高速提案番号にすることができる。非高速提案番号を次いで、選択されたクォーラムおよびリーダーによって使用して、クォーラム選択状態マシンを関与させることなく、競合を解決することができる。
本発明の原理を適用することができる多数の可能な実施形態に鑑みて、本明細書で図面に関して説明した実施形態は例示的でしかないように意味され、本発明の範囲を限定するとして解釈されるべきではないことを理解されたい。例えば、ソフトウェアにおいて図示した例示の実施形態のいくつかの要素をハードウェアにおいて実施することができ、逆の場合も同じであること、または、本発明の精神から逸脱することなく、例示の実施形態を構成および詳細において修正することができることは、当業者には理解されよう。したがって、本明細書で説明した本発明は、このようなすべての実施形態を、以下の特許請求の範囲およびその等価物の範囲内に入る可能性があるとして企図する。