JP2005196763A - 簡略化されたpaxos - Google Patents

簡略化されたpaxos Download PDF

Info

Publication number
JP2005196763A
JP2005196763A JP2004368218A JP2004368218A JP2005196763A JP 2005196763 A JP2005196763 A JP 2005196763A JP 2004368218 A JP2004368218 A JP 2004368218A JP 2004368218 A JP2004368218 A JP 2004368218A JP 2005196763 A JP2005196763 A JP 2005196763A
Authority
JP
Japan
Prior art keywords
proposal
quorum
identifier
vote
proposed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004368218A
Other languages
English (en)
Inventor
Leslie B Lamport
ビー.ランポート レスリー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2005196763A publication Critical patent/JP2005196763A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/18Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits
    • G06F11/182Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits based on mutual exchange of the output between redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1658Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)

Abstract

【課題】 故障を許容する形で分散コンピュータシステムを運用するフォールトトレラントな簡略化アルゴリズム。
【解決手段】 3つのコンピュータデバイスを備えるシステムは、任意の提案機能を行うのに2つのデバイスが同意するだけでよい。そのため、提案機能への投票を求める際に、リーダデバイスはその提案機能に対する自身の投票も送信できる。これにより、受信デバイスはそれ自身の投票で定足数を満たせるようになる。結果、受信デバイスは、さらなるメッセージなしでその提案機能を実行すべきかどうかを決定できる。さらに、デバイスは、提案機能を実行する場合に機能を要求したクライアントにその結果を直接送信でき、メッセージ遅延を省くことができる。提案機能を選択し実行するのに使われるデバイスの定足数がそれ自体ある定足数で選択される場合、システムのデバイスの1つは限定された計算能力または記憶容量をもつ安価なデバイスとすることができる。
【選択図】 図8a

Description

本発明は、一般に、分散コンピューティングに関し、より詳細には、少数のコンピューティングデバイスを用いた効率的なフォールトトレラント(fault tolerant)な分散コンピューティングに関する。
ストレージ空間およびプロセシング機能の増大を含め、パーソナルコンピューティングデバイスがより強力になるにつれ、平均的なユーザが毎日のタスクを行う上でこれらの資源を消費する割合がますます小さくなりつつある。そのため、今日のパーソナルコンピューティングデバイスの多くは、それらのコンピューティング能力がほとんどのユーザのそれらに対する要求よりも大きく上回っているため、十分にそれらの潜在能力が使用されていないことが多い。強力な最新のパーソナルコンピューティングデバイスの未使用資源から利用法や価値を引き出す次第に人気を得つつある方法として、分散コンピューティングシステムがある。分散コンピューティングシステムでは、コンピューティングデバイスが互いに協調して行動することによって、データおよびコンピュータ計算資源へのより信頼できるアクセスを提供する。
余剰なコンピューティング能力を使用するための有益なメカニズムを提供することに加え、分散システムはまた、より大規模でより高価なコンピューティングデバイスのパフォーマンスおよびストレージ能力を達成するために、専用の安価なコンピューティングデバイスで構成することができる。分散システムのさらなる利点は、単一のより大規模なコンピューティングデバイスであれば動作不能になってしまうような物理的困難に直面しても動作し続ける能力があることである。このような困難には、電源異常の持続、荒天、浸水、テロ活動などが含まれる。
個々のメンバであるコンピューティングデバイスが、ネットワークから切断されたり、スイッチが切られたり、システム誤動作が生じたり、あるいはその他の理由で使用不能になる高いリスクを補償するために、冗長性を用いることによって、分散コンピューティングシステムが動作可能であり続けるようにすることができる。そのため、いずれか1つのパーソナルコンピューティングデバイス上に格納されている情報は、少なくとも1つのさらなるパーソナルコンピューティングデバイス上に重複して格納することができ、それによって、それらのパーソナルコンピューティングデバイスの1つが故障しても、その情報にはそれまで通りアクセスすることができる。
分散コンピューティングシステムは、完全な冗長性を実施することができ、その場合、システム内のあらゆるデバイスが同一のタスクを行い、同一の情報を格納する。このようなシステムによって、デバイスが1つを除いてすべて故障した場合でも、ユーザが有用な操作を実行し続けることができるようにする。あるいは、このようなシステムを使用して、同じ情報の複数のコピーを、ある地域全体に分散することができる。例えば、多国籍企業は、世界規模の分散コンピューティングシステムを確立することができる。
しかし、分散コンピューティングシステムは、システムを構成する個々のデバイスを正しく同期させることの複雑さのために、維持することが難しいことがある。個々のプロセスにわたるタイムキーピングは良くても困難であるため、状態マシンアプローチを使用して個々のデバイス間のアクティビティを調整することが多い。状態マシンは、1組の状態、1組のコマンド、1組の応答、および、各応答/状態ペアを各コマンド/状態ペアにリンクするクライアントコマンドによって記述することができる。状態マシンは、その状態を変更し、応答を生成することによってコマンドを実行することができる。そのため、状態マシンを、その現在の状態およびそれが行おうとしているアクションによって完全に記述することができ、それによって、正確なタイムキーピングを用いる必要をなくしている。
状態マシンの現在の状態は、それゆえ、以前の状態、それ以降に実行されたコマンド、およびそれらのコマンドが実行された順番に依存する。2つまたはそれ以上の状態マシンの間の同期を維持するために、共通の初期状態を確立することができ、各状態マシンは、初期状態から開始して、同一のコマンドを同一の順番で実行することができる。それゆえ、ある状態マシンを別の状態マシンに同期させるためには、その別の状態マシンによって実行されるコマンドの判定を行う必要がある。同期の問題は、それゆえ、実行されるコマンドの順番を判定する問題、より具体的には、ある与えられたステップに対して実行する特定のコマンドを判定する問題になる。
与えられたステップに対してどのコマンドが実行されるべきかを判定するための1つのメカニズムは、Paxosアルゴリズムとして知られている。Paxosアルゴリズムでは、個々のデバイスのいずれかがリーダとして働き、ある与えられたコマンドをシステム内のあらゆるデバイスによる実行のために提案しようとすることができる。あらゆるこのような提案は、それらの提案をより容易に追跡できるように、提案番号と共に送ることができる。このような提案番号は、それらのデバイスが実行すべきコマンドに同意しようと試みているその特定のステップに対し、いかなる関係も持っている必要はない。最初に、リーダは、自分が提出するつもりの提案に対する提案番号を示唆することができる。残りのデバイスのそれぞれは、次に、自分が投票(vote)した最後の提案の指示、またはどの提案にも投票してないことの指示と共に、リーダの提案番号の示唆に対して応答することができる。リーダは、様々な応答を通して、それらのデバイスによって投票された何らかの他の提案がないとわかると、前のメッセージで示唆した提案番号を用いて、与えられたクライアントコマンドがそれらのデバイスによって実行されるべきであることを提案することができる。各デバイスは、その段階で、そのアクションに投票するか、またはそれを拒否するかを判断することができる。デバイスは、別のリーダによる異なる提案番号の示唆に応答している場合にのみ、アクションを拒否するべきである。定足数(quorum)として知られる十分な数のデバイスがその提案に投票した場合、その提案されたアクションは同意されたということで、各デバイスは、そのアクションを行い、その結果を送信することができる。このようにして、デバイスのそれぞれは、アクションを同じ順番で行い、それによって、すべてのデバイスの間で同じ状態を維持することができる。
一般に、Paxosアルゴリズムは、上記のように、デバイスによって投票された前の提案をリーダが知ることができるようにする最初のフェーズと、リーダが実行のためのクライアントコマンドを提案することができる第2のフェーズの2つのフェーズで考えることができる。リーダは、前の提案について知ると、第1のフェーズを頻繁に繰り返す必要はない。代わりに、リーダは第2のフェーズを頻繁に繰り返し、分散コンピューティングシステムにより複数のステップで実行することができる一連のクライアントコマンドを提案することができる。このようにして、各ステップについて分散コンピューティングシステムによって行われる各クライアントコマンドを、Paxosアルゴリズムの1つのインスタンスと考えることができるが、リーダは、所与のステップについてデバイスが提案されたクライアントコマンドに投票するまで、次のステップについて別のクライアントコマンドを提案するのを待つ必要はない。
全体としての分散コンピューティングシステムは、状態マシンとしてモデル化することができる。そのため、完全な冗長性を実装する分散コンピューティングシステムは、デバイスのそれぞれに全体のシステムの状態を複製させることができる。このようなシステムは、各デバイスが同じ状態を維持することを要求する。いくつかのデバイスが、あるクライアントコマンドが実行されたと信じ、デバイスの第2のグループが、異なるクライアントコマンドが実行されたと信じた場合、全体のシステムはもはや単一の状態マシンとして動作しなくなる。このような状況を回避するため、過半数のデバイスは、システムによる実行のための提案されたクライアントコマンドを選択するよう一般に要求されることがある。それぞれが過半数を有する、任意の2つのデバイスグループは、少なくとも1つのデバイスを共有しているはずなので、その少なくとも1つの共通のデバイスに依拠するPaxosアルゴリズムなどのメカニズムを実装することによって、それぞれが過半数を含む2つのグループが異なる提案クライアントコマンドを選択するのを防ぐことができる。
The article "Time, Clocks, and the Ordering of Events in a Distributed System," by Leslie Lamport published in The Communications of the ACM, Volume 21, Number 7, July 1978 The paper entitled "The Part-Time Parliament" by Leslie Lamport, published in ACM Transactions on Computer Systems, volume 16, number 2 on pages 133-169, dated May 1998
しかし、Paxosアルゴリズムは、クライアントが分散システムに対するコマンド実行の要求を送信する時点と、そのクライアントがそのコマンドの実行による結果を受信する時点との間にメッセージ遅延を付加する。具体的には、たとえクライアントがリーダに要求を送信しても、また、たとえリーダが提案に関して以前の投票についてすでに知っていて、そのため、Paxosアルゴリズムの第1フェーズを完了していたとしても、クライアントからの要求の送信と、そのクライアントへの結果の送信の間には依然として2つまたはそれ以上のメッセージ遅延が生じることがある。
それゆえ、本発明の一実施形態では、より少数のデバイスを有するフォールトトレラントなシステムが、より効率的なPaxosアルゴリズムを実装することができ、また、クライアントからの要求の送信とクライアントへの結果の送信との間に多くても単一のメッセージ遅延しか生じさせない。
別の実施形態では、より効率的なPaxosアルゴリズムが提示され、この場合、リーダが2種類の第2フェーズのメッセージを一緒に送ることができ、受信側コンピューティングデバイスは、追加のメッセージ遅延を生じさせることなく、その要求の実行の結果を判定することができる。
さらなる実施形態では、リーダのコンピューティングデバイスは結果を知らされる者である必要がなく、分散コンピューティングシステム中のその他のコンピューティングデバイスは、実行されたコマンドの結果をより素早く知ることができる。さらに、このより効率的なPaxosアルゴリズムの実行に参加していないコンピューティングデバイスも、クライアントコンピューティングデバイスと同様に、結果を知らされる者になることができる。
さらに別の実施形態では、このより効率的なPaxosアルゴリズムの実行に参加しているコンピューティングデバイスの少なくとも1つのコンピューティングデバイスが安価なコンピューティングデバイスとすることができ、可能性として限定されたコンピューティング機能およびメモリストレージ機能を有するものであってよい。
本明細書の記述は、主として分散コンピューティングシステム中のコンピューティングデバイスの動作に焦点を当てているが、この記述は、別個のプロセッサ上または別個のメモリ空間内など、単一のコンピューティングデバイス上で稼働しているプロセスにも等しく適用できることが理解されよう。そのため、さらなる実施形態は、複数のプロセッサ環境においてより効率的なPaxosアルゴリズムの動作を含み、複数のプロセッサが物理的に1つまたは複数のコンピューティングデバイスに位置しているか、また複数バーチャルマシン環境では、複数のバーチャルマシンが1つまたは複数のコンピューティングデバイスによって実行されているかどうかを問わない。本発明のさらなる特徴および利点は、添付の図面を参照しながら説明する以下の例示的実施形態の詳細な説明から明らかとなるであろう。
添付の特許請求の範囲は、本発明の特徴を詳細に定めているが、本発明、およびその目的と利点は、添付の図面と共に以下の詳細な説明から最もよく理解できる。
分散コンピューティングシステムは、いくつかの個々のパーソナルコンピューティングデバイス、サーバコンピューティングデバイス、またはシステムに参加するのに十分なプロセッサおよびストレージ能力を有するその他のデバイスを含むことができる。分散コンピューティングシステムは、それを構成するコンピューティングデバイスの能力をまとめることによって、大きく増大したプロセッシング能力およびストレージ空間を提供することができ、または冗長性を実装して、複数のデバイスが同じ情報にアクセスすることができるようにする。そのため、分散コンピューティングシステムの一般的な利用法の1つは、共通のネットワークに付加された多くの異なるパーソナルコンピューティングデバイスの未使用のプロセッシング能力およびストレージ空間をまとめることである。このような分散コンピューティングシステムは、どのデバイスが現在システムの一部であるか、どのデバイス上にある所与の1組の情報が格納されているかなど、システムに関する情報を維持することができる。この情報は、デバイスがそれらの機能およびストレージ空間をまとめるために必要な場合があり、結果として、各デバイスがコピーを含むことがある。システムのデバイス間での情報の同期化は、以下に説明する状態マシンアプローチによって促進することができる。
あるいは、分散コンピューティングシステムのますます共通になりつつある利用法は、様々な形態の情報に対するセントラルストレージリポジトリとして機能することができるネットワークサーバについてのものである。このような分散システムは、セントラルストアとの通信を求めるあらゆるクライアントが、通信すべき、都合の良い効率的なデバイスを見つけることができるように、その分散システムを構成するデバイスのすべてにセントラルストアを複製しようとする。さらに、システムの分散されているという性質上、停電、浸水、政情不安などの地域的な出来事は、少数のコンピューティングデバイスに影響するだけであり、全体のシステムは正しく動作し、また情報およびその他のサービスへのアクセスをクライアントに提供し続けることができる。
このような分散コンピューティングシステムは、状態マシンと考えることができ、このマシンの将来の状態は、現在の状態および取るべきアクションによって規定される。そのため、この分散コンピューティングシステムを各構成デバイスは、全体のシステムの状態マシンを独立して実行することができる。この状態マシンアプローチは、非同期に実施することができる。したがって、構成デバイスにわたる正確な共時性(synchrony)を維持する必要がなく、また、デバイス間の同期化は、すべてのデバイスに初期状態を設定し、その後、同じ機能を同じ順番で実行することによって達成することができる。同期化を維持するための一般的な方法は、分散コンピューティングシステムの構成デバイスが、次の機能を実行する前にその機能に同意できるようにし、実行された機能のリストを維持することである。このようにして、あらゆるデバイスは同じ状態を有することができ、また、1つのデバイスが故障しても、そのデバイスが実行した最後の機能を判定し、その最後の機能以降に同意された機能をリストから識別し、それらの機能を実行するだけでよい。
サーバとして機能する分散コンピューティングシステムは、特に、多国籍企業のセントラルデータベースや人気のあるワールドワイドウェブサイトなど、大量の情報を多様なセットのクライアントにサービスする場合に役立つ。このような状況においては、多数のクライアントは、サーバとして機能している分散コンピューティングシステムからの情報を要求することができる。複数のデバイスにわたってサーバ機能を実装することにより、より多くのクライアントにパラレルにサービスすることができ、それによって、全体的なシステムのスループットが向上する。また、全体としてのサーバは、増大した冗長性のためにはるかに故障しにくくなる。
構成コンピューティングデバイスが実行すべき次の機能に同意することができるメカニズムの1つが、Paxosアルゴリズムとして知られている。Paxosアルゴリズムでは、以下にさらに説明するように、任意のデバイスがリーダとして働き、分散コンピューティングシステム内のその他のデバイスに提案番号の示唆を送信することができる。その他のデバイスは、そのデバイスがすでに投票した最大の提案番号を有する提案の指示か、またはそのデバイスが以前のどの提案にも投票していないことの指示のいずれかで応答することができる。リーダは、その他のデバイスから応答を受け取ると、どの機能を提案すべきかを判断し、提案した機能に対する投票を要求することができる。各デバイスは、その提案の最初の送信後で、要求された投票の前のいずれかの時点において、より大きい提案番号の提示に対して応答していない限り、その提案に投票することになる。定足数のデバイスがその提案に投票した場合、その提案が受諾され、リーダは、そのすべてのデバイスに、同意された機能を実行することを要求するメッセージを送信することができる。
しかし、Paxosアルゴリズムは、クライアントの要求の受信とクライアントへの結果の送信との間に一連のメッセージ遅延を生じさせる。具体的には、クライアントの要求を受信した時点において、Paxosアルゴリズムの第1フェーズが以前に完了していて、リーダには使用すべき適切な提案番号がわかっていると想定すると、リーダは、適切な提案番号を使って、Paxosアルゴリズムを実行するその他のデバイスに投票の要求を送ることができる。このステップは1つのメッセージ遅延を生じさせる可能性がある。その後、Paxosアルゴリズムを実行するその他のデバイスは、リーダに投票を返すことができるが、これは第2のメッセージ遅延を生じさせる可能性がある。リーダは、定足数のデバイスから投票を受け取ると、それらのデバイスにクライアントの要求を実行するよう命令することができる。同時に、リーダ自身もクライアントの要求を実行することができ、その結果をクライアントに返すことができる。そのため、クライアントとリーダの間の送信を勘定しなくても、Paxosアルゴリズムは、クライアントの要求と応答の間の2つまたはそれ以上のメッセージ遅延を生じさせる可能性がある。
以下に詳細に示すように、十分に少数の構成コンピューティングデバイスを有する分散コンピューティング環境においてメッセージを組み合わせることによって、クライアントの要求とクライアントへの応答の間の少なくとも1つのメッセージ遅延を取り除くことができる。
(分散コンピューティング環境)
同様の参照番号が同様の構成要素を指す図面を見ると、本発明が、図1に示す例示的な分散コンピューティングシステム10などの分散コンピューティングシステムに実施されているものとして示されている。わかりやすくするために、図1に示すように、すべて相互に接続されているコンピューティングデバイス11〜13を備える分散コンピューティングシステム10を参照しながら本発明を説明する。当業者であれば理解されるように、本発明は、すべての分散コンピューティング環境に適用可能であり、提示の目的で簡略化した図1の例示的な分散コンピューティングシステムによってどのような形であれ限定されることを意図したものではない。
図1はまた、単一のクライアントコンピューティングデバイス20を示している。ただし、本発明は、任意の数のクライアントコンピューティングデバイスを有する環境において動作するよう意図されたものである。クライアントコンピューティングデバイス20は、分散コンピューティングシステム10への汎用の通信接続を有するものとして示されている。当業者であれば知っているように、このような通信接続は、任意の通信媒体およびプロトコルを使用することができ、また、クライアントコンピューティングデバイス20が分散コンピューティングシステム10の中の1つまたは複数のコンピューティングデバイスと通信することを可能にすることができる。
さらに、図1は、分散コンピューティングシステム10の一部としては示されていないが、システム10に対する一般的な通信接続を維持しているコンピューティングデバイス30および31を示している。上記のように、その通信接続は任意の通信媒体およびプロトコルを使用することができ、また、コンピューティングデバイス30および31が分散コンピューティングシステム10の中の1つまたは複数のコンピューティングデバイスと通信することを可能にすることができる。以下にさらに詳説するように、コンピューティングデバイス30および31は、システム10の一部ではなくても、システム10によって行われた実行の結果を知ることができる。
必ずしも必要ではないが、本発明を、コンピューティングデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的な文脈で説明する。一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。さらに、当業者は、本発明がハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な民生用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含む、多くの様々なコンピューティングデバイスで実施できることを理解するであろう。上述のように、本発明はまた、タスクが通信ネットワークを介してリンクされたリモート処理デバイスによって実行される、分散コンピューティングシステム10などの分散コンピューティング環境においても実施することができる。分散コンピューティング環境では、プログラムモジュールはローカルおよびリモートのメモリ記憶デバイスの両方に配置することができる。
図2を見ると、本発明を実施することができる例示的なコンピューティングデバイス100が示されている。コンピューティングデバイス100は、適切なコンピューティングデバイスの一例にすぎず、本発明の使用または機能の範囲に関して何ら限定を示唆することを意図したものではない。例えば、例示的コンピューティングデバイス100は、図1に示すコンピューティングデバイス11〜13、20、または30〜31のいずれかを厳密に表すことを意図したものではない。例示的コンピューティングデバイス100は、メモリパーティション、バーチャルマシン、複数のプロセッサ、または1つの物理的コンピューティング構造が以下に記載のアクションを複数のコンピューティングデバイスによるものとして行うことができるようにする同様のプログラミング技術を通じて、これらのコンピューティングデバイスの1つまたは複数を実装することができる。さらに、コンピューティングデバイス100は、図2に示す周辺機器のいずれか1つまたは組合せに関するいかなる依存性または要件を有するものと解釈されるべきではない。
本発明は、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的な文脈で説明することができる。一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。分散コンピューティング環境では、タスクは、通信ネットワークを介してリンクされているリモート処理デバイスによって実行することができる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶デバイスを含む、ローカルおよびリモートのコンピュータ記憶媒体の両方に配置することができる。
コンピューティングデバイス100のコンポーネントには、処理装置120、システムメモリ130、そしてシステムメモリを含む様々なシステムコンポーネントを処理装置120に結合するシステムバス121が含まれるが、それらに限定されない。システムバス121は、メモリバスまたはメモリコントローラ、周辺バス、そして様々なバスアーキテクチャのいずれかを使用したローカルバスを含む、いくつかのタイプのバス構造のうちのいずれであってもよい。例として、限定ではなく、このようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Associate)ローカルバス、およびメザニンバスとしても知られるPCI(Peripheral Component Interconnect)バスが含まれる。さらに、処理装置120は、1つまたは複数の物理プロセッサを含むことがある。
コンピュータ100は、一般に、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピューティングデバイス100によってアクセスできる任意の利用可能な媒体とすることができ、揮発性および不揮発性の両媒体、リムーバブルおよび非リムーバブルな両媒体を含む。例として、限定ではなく、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報のストレージのための、任意の方法または技術で実装された、揮発性および不揮発性、リムーバブルおよび非リムーバブルの両媒体が含まれる。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリもしくはその他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくはその他の光ディスクストレージデバイス、磁気カセット、磁気テープ、磁気ディスクストレージデバイスもしくはその他の磁気ストレージデバイス、または所望の情報を格納するために使用することができ、コンピューティングデバイス100によってアクセスできる任意のその他の媒体が含まれるが、それらに限定されない。通信媒体は、一般に、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを、搬送波やその他のトランスポートメカニズムなどの変調データ信号に具体化し、任意の情報配信媒体を含む。「変調データ信号」という用語は、信号中に情報を符号化するように信号の特性の1つまたは複数を設定または変更した信号を意味する。例として、限定ではなく、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体、ならびに音響、RF、赤外線およびその他の無線媒体などの無線媒体が含まれる。上記のいずれの組み合わせもコンピュータ可読媒体の範囲内に含まれるべきである。
システムメモリ130は、読取り専用メモリ(ROM)131、ランダムアクセスメモリ(RAM)132などの揮発性および/または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ110内の要素間の情報の転送を助ける基本ルーチンが入っている基本入出力システム(BIOS)133は、通常、ROM131に格納されている。RAM132は、通常、処理装置120によって直ぐにアクセス可能であり、そして/または現在操作中のデータおよび/またはプログラムモジュールを収容している。例として、限定ではなく、図2は、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136およびプログラムデータ137を図示している。
コンピューティングデバイス100はまた、その他のリムーバブル/非リムーバブルな揮発性/不揮発性コンピュータ記憶媒体も含むことができる。例にすぎないが、図2には、非リムーバブルな不揮発性磁気媒体との間で読取りまたは書込みを行うハードディスクドライブ141、リムーバブルな不揮発性磁気ディスク152との間で読取りまたは書込みを行う磁気ディスクドライブ151、およびCD−ROMまたはその他の光媒体などのリムーバブルな不揮発性光ディスク156との間で読取りまたは書込みを行う光ディスクドライブ155を示している。この例示的な動作環境で使用できるその他のリムーバブル/非リムーバブルな、揮発性/不揮発性コンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれるが、それらに限定されない。ハードディスクドライブ141は、通常、インターフェース140などの非リムーバブルなメモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インターフェース150などのリムーバブルなメモリインターフェースによってシステムバス121に接続されている。
上記に説明し、図2に示したドライブおよび関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよびその他のデータのストレージをコンピューティングデバイス100に提供する。図2では、例えば、ハードディスクドライブ141を、オペレーティングシステム144、アプリケーションプログラム145、その他のプログラムモジュール146およびプログラムデータ147を格納するものとして示している。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136およびプログラムデータ137と同じであっても、または異なっていてもよいことに注意されたい。オペレーティングシステム144、アプリケーションプログラム145、その他のプログラムモジュール146およびプログラムデータ147には、少なくともそれらが異なるコピーであることを示すために、ここでは異なる番号を付している。ユーザは、キーボード162、および一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス161などの入力デバイスを介して、コンピューティングデバイス100にコマンドおよび情報を入力することができる。その他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれ得る。これらおよびその他の入力デバイスは、システムバスに結合されたユーザ入力インターフェース160を介して処理装置120に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)など、その他のインターフェースおよびバス構造によって接続することもできる。モニタ191またはその他のタイプの表示デバイスも、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータはまた、スピーカ197やプリンタ196などのその他の周辺出力デバイスを含むことができ、それらは、出力周辺インターフェース195を介して接続することができる。
コンピューティングデバイス100は、1つまたは複数のリモートコンピュータへの論理接続を使って、図1に示すようなネットワーク化された環境で動作することができる。図2は、リモートコンピューティングデバイス180への一般のネットワーク接続171を示している。一般のネットワーク接続171および図1に示したネットワーク接続は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、ワイヤレスネットワーク、イーサネット(登録商標)プロトコルやトークンリングプロトコルに準拠するネットワーク、またはインターネットやワールドワイドウェブを含むその他の論理、物理もしくはワイヤレスネットワークを含む、様々な異なるタイプのネットワークおよびネットワーク接続のいずれであってもよい。
ネットワーキング環境において使用する場合、コンピューティングデバイス100は、ネットワークインターフェースまたはアダプタ170を介して一般のネットワーク接続171に接続されている。このインターフェースまたはアダプタは、有線またはワイヤレスのネットワークインターフェースカード、モデムまたは同様のネットワーキングデバイスとすることができる。ネットワーク化環境においては、コンピューティングデバイス100に関して説明したプログラムモジュールまたはその一部は、リモートのメモリストレージデバイスに格納することができる。図示したネットワーク接続は例示にすぎず、コンピュータ間の通信リンクを確立するためのその他の手段を用いることができることを理解されよう。
以下の説明では、別途記載がない限り、本発明を、1つまたは複数のコンピューティングデバイスによって実行されるアクト(act)および動作(operation)の記号表現に関連して説明する。このように、時にコンピュータ実行されているものとして参照されるこのようなアクトおよび動作には、構造化された形態でデータを表す電気信号のコンピューティングデバイスの処理装置による操作が含まれることを理解されるであろう。この操作は、データを変換し、またはデータをコンピューティングデバイスのメモリシステム中のロケーションに維持し、それによって、当業者によく知られたやり方で、コンピューティングデバイスの動作を再構成またはその他の方法で変更する。データが維持されるデータ構造は、そのデータのフォーマットによって定義された特定のプロパティを有するメモリの物理的ロケーションである。しかし、本発明を前述の状況で説明しているが、当業者であれば、以下に記載の様々なアクトおよび動作もハードウェアに実装できることを理解するであろうように、限定することを意味するものではない。
(概観)
本発明によれば、リーダがPaxosアルゴリズムの第1フェーズを完了した後、またはその他現在のステップについて正しい提案番号を確立した後、リーダは投票のためにクライアントの要求を提出することができる。クライアントの要求の実行に関する投票を要求するメッセージとともに、リーダは、その要求の実行に関する自分自身の投票を送ることもできる。3つのコンピューティングデバイスを有する分散コンピューティングシステムでは、それらのデバイスのいずれか2つが過半数であり、システムのデバイスの過半数未満しか故障しない限り、分散システムの正しい動作が維持されるのに十分な定足数となり得る。2つのデバイスが定足数を構成することができるので、任意の他のデバイスが、投票に対するリーダの要求をリーダの投票とともに受け取った場合に、そのデバイスもクライアントの要求の実行に投票することになるならば、リーダとその他のデバイスを含む定足数が存在することになるであろう。結果として、そのデバイスが、もしクライアントの要求の実行に投票するならば、さらなるメッセージを待つことなく、その要求の実行に進み、その結果をクライアントに提供することができる。
上述のように、3つのデバイスのシステムでは、任意の2つのデバイスが定足数を形成する。そのため、リーダが、投票の要求とともに自分自身の投票を送るとき、他の2つのデバイスのいずれかがリーダと同様に投票することを選ぶならば、定足数を満たすことができる。さらに、他の2つのデバイスは、すでにリーダの投票を受け取っており、それら自身の投票についても知っているので、さらなるメッセージを待つことなく、定足数がクライアントの要求の実行に投票したかどうかを判断することができ、そのため、適切な場合には、クライアントの要求を行い、さらなるメッセージ遅延なく、その結果をクライアントに返すことができる。
メッセージまたはストレージおよびプロセッシング能力を節約するために、リーダは定足数の投票について知る必要はない。リーダの投票が、投票の要求とともに送られるので、その他のデバイスは、リーダの投票とそれら自身の投票に基づいて、クライアントの要求を実行するのに定足数が同意したかどうかを個々に判断することができる。しかし、リーダへの明示的な返信がなく、リーダはその他のデバイスの投票について知ることができない可能性がある。しかし、リーダが定足数の投票について知ることは必要ではない。そのため、投票の結果を示すメッセージをリーダに送ることができるし、あるいは、メッセージを節約するために、またはリーダのストレージまたはプロセッシング能力を節約するために、リーダはそのようなメッセージを受け取る必要はない。
リーダは定足数の投票について知る必要はないが、クライアントに加えて他のコンピューティングデバイスが、クライアントの要求の実行の結果について知りたいと望む場合がある。結果として、クライアントの要求が実行されるべきであると判断し、その要求を実行するデバイスは、その結果をクライアントと、他のコンピューティングデバイスとに送ることができる。このような他のコンピューティングデバイスには、分散コンピューティングシステムにおいて冗長性を維持するためにPaxosアルゴリズムを使用しているデバイス、およびPaxosアルゴリズムの一部ではないかもしれないが、システムによって行われた実行の結果について知りたがっているその他のデバイスを含むことができる。
リーダなど、冗長性を維持するためにPaxosアルゴリズムを使用しているデバイスのいくつかは、クライアントの要求についてのいかなる特定の投票または実行の結果について知る必要がないので、そのようなデバイスは、限定されたストレージまたはプロセッシング能力を有する安価なコンピューティングデバイスで実装することができる。さらに、そのような安価なデバイスは、定足数を選択するために必要とされる程度でPaxosアルゴリズムに参加できるだけであり、それらの関与と、結果的に、必要な最低限のプロセッシングまたはストレージ能力がさらに低減される。
(状態マシン)
図1に示す分散システム10のような分散環境では、デバイス間の協調は難しいタスクとなることがある。協調するファクタとして時間に依拠することに内在する難しさを回避するための1つのメカニズムは、ある機能の実行によって状態マシンをある状態から別の状態に動かす状態マシンに関して、分散コンピューティングシステムをモデル化することである。そのため、状態マシンは、1組の状態、1組のコマンド、1組の応答、および各応答/状態ペアを、各コマンド/状態ペアにリンクする機能に関連して記述することができる。状態マシンのクライアントは、その状態マシンがある機能を実行することを要求するコマンドを発行することができる。その機能は次に状態マシンの状態を変更し、応答を生成する。
分散コンピューティングシステムを構成する個々のデバイスは、それぞれ、システムの状態マシンを実行することができる。デバイスは、それゆえ、初期状態を判定し、次いで、そこから同じ機能を同じ順番で実行することにより、協調させることができる。あるデバイスの同期は、単にそのデバイスが実行した最後の機能を判定し、他のデバイスによって実行された機能の順番リストでその機能を特定し、そしてそのデバイスにまだ実行していない機能を順番リストから実行するように指示することによって行うことができる。このような状態マシンアプローチは、その内容がすべて参照により本明細書に組み込まれる非特許文献1において最初に提案された。
(Paxosアルゴリズム)
状態マシンアプローチを使用することにより、図1に示した分散コンピューティングシステム10の構成デバイス11〜13の同期化を、行われるべき機能、およびそれらを行うべき順番に同意することにより達成することができる。行われる機能に同意するための1つの方法として、Paxosアルゴリズムが知られている。Paxosアルゴリズムによって、システム10は、デバイスが前もって警告することなく動作を停止する可能性がある障害に直面した場合にも、正しく動作することができるようになる。Paxosアルゴリズムは、全体としてシステムがある機能を行う前に、少なくとも定足数のデバイスがその機能に同意することを要求する。Paxosアルゴリズムでは、定足数はシステムの特定の要件に応じて、単なる過半数であってもよいし、またはそれよりも多くのデバイスを含むこともある。しかし、定義では、定足数は、任意の2つの定足数が少なくとも1つの正しく機能するデバイスを共通に有するのに十分に大きくすることができる。
一貫性を維持するために、システム10は、機能のパフォーマンスを1ステップにつき単一の機能に限定することができる。それゆえ、ある与えられた1ステップについて単一の機能のみを選択することが望ましいことがある。任意の2つの定足数は少なくとも1つの正しく機能するデバイスを共通に有するので、あらゆるデバイスが1つの提案にのみ投票することを要求することによって、1ステップを超えない選択を保証することができるであろう。しかし、いくつかのデバイスが同時にリーダとして働く場合には、このような要求は行き詰まりの原因となるであろう。というのは、どの提案も定足数によって同意されず、しかも、どのデバイスも定足数が最終的に満たされ得るように異なる機能の提案に対して投票することができないという可能性があるためである。
Paxosアルゴリズムは、マルチステッププロセスによってこの問題を解決する。それによれば、デバイスはその投票を変更することが許されるが、リーダは自分自身が提案する機能に束縛される。Paxosアルゴリズムを使用すると、リーダは、以前に提案された機能について知らない限り、自分が選ぶ任意の機能を提案することができる。リーダが、定足数中の少なくとも1つのデバイスがすでに投票した、少なくとも1つの以前に提案された機能について知っている場合に、リーダは、その自分が知っている以前に提案された機能のうち一番最近のものを提案することができる。各デバイスは、そのデバイスが投票した一番最近の提案を追跡する必要があるだけである。デバイスが、投票することを約束した提案を受け取り、その間に別の提案に投票することを約束していなかった場合、デバイスはその提案に対して投票をキャストすることができる。デバイスは、ある提案が、以前に投票することを約束したその他どの提案の番号よりも提案番号が大きい場合にのみ、その提案に対して投票することを約束することができる。提案番号の使用により、システムは、複雑で費用のかかる、構成デバイス間のクロックの同期化の必要なく、正しい動作を達成できるようになる。一般に、一番最近の提案が最も大きい提案番号を有する。そうでない場合には、以下に説明するように、無視することができる。ある提案に投票することを約束する際、デバイスは、そのデバイスが以前に投票することを約束した、現在の提案番号よりは小さい最大の提案番号を、投票を求めているリーダに送信することもできる。このようにして、リーダは、常に以前の提案について知ることができる。
図3aを参照して、図示のように、3つのデバイス11〜13を含む例示的な分散コンピューティングシステム10を使って、Paxosアルゴリズムをより詳細に説明する。このような環境では、定足数は、2つまたはそれ以上のデバイスの任意のグループとして定義することができる。なぜなら、このような定義により、あらゆる定足数が少なくとも1つのデバイスを共通して有することが保証されることになるからである。図3aに示すように、デバイス13はリーダの地位を担い、システムがある与えられた機能を実行するという提案の提案番号を示唆する、メッセージ200をデバイス11および12に送信することができる。デバイス13はデバイスとリーダの両方として機能することができるので、それ自身にもメッセージ200を送る。ただし、このような送信はそのデバイスに対して内部的に処理することができ、物理的に送信する必要はない。デバイス13は、より大きい提案番号を有する以前の提案がないことを確実にするにあたって、任意の大きさの提案番号を選択することができる。さらに、デバイス13自体が以前の提案に関して投票している場合があるので、デバイス13は、デバイス13が知っているどの提案よりも大きい提案番号を選択することができる。
提案はそれらの提案番号に基づいて順序付けすることができるので、2つまたはそれ以上のデバイスが2つまたはそれ以上の異なる提案に対して同じ提案番号を使用するのを防ぐことによって、効率性を得ることができる。それゆえ、デバイスは、提案を送信するデバイスの媒体アクセス制御(MAC)アドレスなど、デバイス特有のプロパティに基づくメカニズムを用いることによって、提案番号を選択することができる。あるいは、デバイス間で提案番号を区切ることができ、各デバイスにその区分内からのみ提案番号を選択することを要求する。提案番号を区切る方法の1つは、「i番目」のデバイスに、システム中のデバイスの数を法として「i」と合同な(congruent)提案番号を与えることであろう。
以下に示すように、Paxosアルゴリズムは、いくつかのデバイスがリーダとして働く場合にも動作することができるので、デバイスがリーダの地位を担うメカニズムは重要ではない。それでも、異なるデバイスが同時に自分がリーダであると信じる機会を最低限に抑えるメカニズムは、システムの効率性を向上させることができる。例えば、MACアドレスなど、デバイス特有のプロパティに基づくメカニズムは、同時に複数のリーダを有する機会を低減することができる。このようなメカニズムの1つは、単に、最小のMACアドレスを有する、正しく機能するデバイスを次のリーダとなるように選択することであろう。加えて、リーダ選択メカニズムは、あるデバイスが、リーダとして働いている別のデバイスから所定の時間内にメッセージをすでに受け取っている場合に、そのデバイスがリーダになろうとすることを妨げて、リーダシップを有するデバイスが絶えず変わることを防ぐことができる。そのようにリーダシップが絶えず変わることにより、システムの動作に非効率性を導入する可能性がある。
図3bを見ると、新しい提案番号を示唆するメッセージ200などのメッセージを受信すると、デバイス11および12のそれぞれは、メッセージ200によって示唆された提案番号より小さい最大の提案番号と、その提案番号によって提案された機能であって、そのそれぞれのデバイスが投票をキャストした機能を示すメッセージで応答することができる。リーダによって使用された提案番号よりも大きい提案番号に投票をキャストしている場合、デバイスは、リーダからのそのメッセージを無視することができ、または以下に説明するように、そのより大きい提案番号にかかわらず、最後の投票の情報で応答することができる。図3bに示す例示的な条件において、デバイス12は以前に提案番号70に投票しており、それは、システム10が変数「y」によって識別される機能を実行することを提案したものである。そのため、デバイス12は、メッセージ200に応答して、それが機能「y」の実行を提案した提案番号70に最後に投票したことを示すメッセージ212を送信することができる。同様に、デバイス11は以前に提案番号30に投票しており、それは、システム10が変数「z」によって識別される機能を実行することを提案したものである。メッセージ211は、それゆえ、デバイス11のこの最後の投票の情報をデバイス13に伝達することができる。デバイス13は、何ら提案を受け取らず、それゆえ、以前にどの提案にも投票をキャストしていない可能性がある。それゆえ、デバイス13は、メッセージ213で示すように、ヌル応答を返すことができる。この場合も、上述のように、デバイス13からそれ自身に送られたメッセージは、デバイス13によって内部的に処理することができるが、説明の目的で図示している。
図3cを見ると、リーダ13は、メッセージ211〜213を受け取ると、定足数のうちの任意のメンバによって投票された、最大の提案番号を有する機能に等しくなるように、提案すべき適切な機能を決定することができる。定足数のメンバがどれも、以前のどの提案にも投票していなかった場合には、リーダは、自分が提案したいと思うどの機能でも自由に選択する。それゆえ、図3bに示すメッセージ211〜213が与えられると、デバイス13は、機能「y」の実行に対する投票を求めることを選択でき、その機能は、リーダ13が知っている最大の提案番号を有する提案である提案番号70の一部としてデバイス12によって投票されたものである。しかし、図3a〜3eに示すシステム10は3つのデバイスを含むので、定足数はわずか2デバイスでよい。そのため、リーダ13は、デバイス11および13のみから提案に対する投票を求めるだけで十分である。このようなケースでは、デバイス12は選択された定足数のメンバではないので、リーダ13は機能「y」を提案する必要はない。代わりに、リーダ13は、機能「z」を提案することができ、その機能は、デバイス11によって提案番号30の一部として投票されたものである。提案番号30が定足数中のデバイスによって投票された最大の提案番号であるため、リーダは、機能「z」を投票のために提出すべきものとして選択することができる。
提案番号を示唆するメッセージ200は、リーダ13が選択すべき適切な提案番号を決定することができるメカニズムとして働き、また、以前に提案されたそれよりも小さい番号の提案すべてについてリーダが知ることを可能にするので、リーダ13は、メッセージ200などのメッセージを複数送る必要がある可能性があり、以前のメッセージの提案番号が小さすぎる場合には、徐々に大きい提案番号を示唆する。リーダに多数のメッセージを送ることを要求するのではなく、各デバイスは、リーダによって示唆された提案番号が以前に提案に対して投票したものよりも大きいか小さいかにかかわらず、自分が投票した最大の番号の提案で応答することができる。このようにして、リーダ13は以前の投票についてより効率的に知ることができ、機能を提案するために用いる提案番号をより正確に選択することができる。
図3cを見ると、リーダ13が、システム10のすべてのデバイスからなる定足数を選択し、システム10による機能「y」の実行に関する投票を求めるメッセージ220を送信しているのが示されている。メッセージ220を受信すると、各デバイスは、機能「y」に投票すべきかどうかを決定することができる。デバイスは、現在、投票が要求されている提案よりも大きい提案番号を有する新たな提案の示唆に応答していない限りは、機能に投票することができる。そのため、図3cに示した例について、デバイス11〜13のいずれかが、図3cに示すようにリーダ13がメッセージ220を送信する前に、100よりも大きい提案番号を有する新たな提案に対する別の示唆を受信し、応答していた場合、そのデバイスは、メッセージ220によって投票が求められている機能に投票しない場合がある。
図3dを見ると、デバイス11〜13のそれぞれは、自分が100よりも大きい提案番号を有する新たな提案に対する他のどの示唆にも応答していないことを独立して判断することができる。それゆえ、それらが応答した新たな提案に対する最後の示唆が、現在の提案よりも大きい番号を有する提案に対してではないので、デバイス11および13は、その提案に投票し、それらの投票をメッセージ231および233中にそれぞれ示すことができる。前述のように、メッセージ233は説明の目的のために示されており、デバイス13に対して内部的に処理することができる。しかし、デバイス12は、メッセージ220の送信前のいずれかの時に、100よりも大きい提案番号を有する新たな提案に対する示唆を受け取り、応答している場合がある。それゆえ、メッセージ220を受信すると、デバイス12は、自分がすでに100よりも大きい番号を有する新たな提案の示唆に応答していると判断することができ、それゆえ、提案100に投票することができないであろう。結果として、図3dに示すように、デバイス12は、それが提案番号150を有する提案の示唆に対して応答していることをリーダ13に知らせるメッセージ232で応答する。リーダ13は、デバイス12の投票が必要であると判断する場合には、150よりも大きい提案番号を有する以外にはメッセージ220と同様の別のメッセージを送ることができる。あるいは、デバイス12は、メッセージ220に応答する必要はなく、デバイス13は、デバイス12の投票を必要とする場合には、任意の大きさの提案番号を有する提案でさらなる投票を試みることができる。理解されるように、デバイス12がリーダ13に対してそのより大きい提案番号を示さない場合、リーダは推測しなければならず、複数のメッセージを通して適切な大きさの提案番号を推測するために資源を無駄にすることになるであろう。
しかし、デバイス11および13は定足数を構成するのに十分なので、リーダ13は、デバイス12の投票がなくてもその提案が受諾されたと判断することができ、図3eに示すようなメッセージ240で、デバイス11および12のそれぞれが機能「y」を実行することを要求することができる。デバイス11および13は定足数を構成するが、その定足数は、リーダ13が投票に対する提案を提出した定足数と同じものではなく、その定足数にはデバイス12を含んでいた。しかし、上述のように、リーダは、提案が受諾されたかどうかを判断するのに、定足数からの投票を受け取ればよく、必ずしも要求を送信したのと同じ定足数である必要はない。上述のPaxosアルゴリズムは、その動作におけるどの所与のステップについても、1つの機能のみが選択されてシステム10によって実行されることを保証する。例えば、以前に動作していなかった別のデバイスが動作するようになり、システム10に再び参加した場合、そのデバイスはシステムが「y」を選択し実行したのと同じステップについて、「y」とは異なる機能を提案しようとするかもしれない。このようなデバイスが100よりも小さい提案番号を有する提案を送った場合、それはデバイス11および13によって無視される。というのは、デバイス11および13は、図3dに示すように提案番号100に関してすでに投票しているためである。他方、そのデバイスが、提案番号130など、100よりも大きい提案番号を有する提案を送信した場合には、デバイス11および13は、それらが提案番号100で機能「y」に投票したことを示すメッセージを返すであろう。デバイス12は、図3dに示すように、投票していない場合があるので、提案番号30で機能「z」に投票したことを示すメッセージ212で応答する場合があるであろう。
その新たなデバイスは、次いで、ある定足数の中で、すなわち、定義によりデバイス11〜13の少なくともいくつかを含むであろう定足数の中で最大の提案を選択し、その提案において提案された機能を投票のために提出することができるであろう。そのため、提案130について、この新たなデバイスは、投票のために機能「y」を提出することになる。各デバイスは、次いで上述のアルゴリズムに従って、提案130に関する投票をすることができるであろう。特定のステップについて機能「y」を実行するという前の決定を変更しない提案130が選択されるか、またはその間にあまりに多くのデバイスが別の提案に対して投票することを約束したために提案130が失敗するかのいずれかであろう。しかし、理解されるように、提案が通過すると、すべての他の提案が同じ機能を提案し、そして、定義によって、すべてのデバイスはその同じ機能に対してのみ投票することができる。このように、Paxosアルゴリズムは、システム10のあらゆるデバイスが所与のステップについて同じ機能を実行することを保証する。
上述のように、Paxosアルゴリズムのアプリケーションは、分散コンピューティングシステムが所与のステップについて実行すべき機能を選択できるようにすることができる。上述のステップを繰り返すことによって、分散コンピューティングシステムは、一連のステップとして実行されるべき一連の機能に同意することができ、それによって、継続的に動作するシステムを形成することができる。このようにして、分散コンピューティングシステムは、1つまたは複数のクライアントから要求を受け取ることができ、それらの要求を実行することができ、そしてその結果をクライアントに返すことができる。
図4aを参照して、システム10は、すでにいくつかのステップについて動作している可能性がある。例えば、図4aに示す例示的なシステム10において、一番最近、実行されたステップがステップ24であり、ステップ25が現在のステップである可能性がある。しかし、以前にリーダとして働いていたデバイスが故障したか、または単に何のクライアントの要求も受け取っていない可能性がある。クライアント20は、図示したように、図4a中の変数「x」によって表される機能を実行する要求を、メッセージ300を使ってデバイス13に送ることができる。デバイス13は、上記のメカニズムなどの任意の数のメカニズムに従って、自分がリーダになるよう試みるべきであると判断する。このように、デバイス13は、次の提案に提案番号100の使用を示唆し、その提案がなされるべきステップを含むメッセージ301を送信することができる。図4aの例示的な分散コンピューティングシステム10において、デバイス13は、その他のデバイス11および12によってステップ23および24がすでに決定され、実行されていることを知らない。そのため、メッセージ301は、ステップ23に100という番号の提案を示唆していることを示している。
複数のステップを実行するシステムでのアルゴリズムの動作をはかどらせるために、メッセージ301などのメッセージを、ステップ23以上のすべてのステップについて番号が100の提案を示唆するものとして理解することができる。このようにして、リーダ13は、すでに決定されたあらゆるステップについて知るまで、メッセージ301などのメッセージを断続的に送信する必要がなくなる。代わりに、リーダ13は、以下に示すように、単一のメッセージの往復を通して、すでに実行されたステップについて知ることができる。
図4bを見ると、分散コンピューティングシステム10のデバイス11〜13からの応答メッセージ311〜313が示されている。デバイス11は、例えば、ステップ23について機能「y」が実行され、ステップ24について機能「z」が行われたことを記録している。そのため、メッセージ301を受信すると、デバイス11は、23以上のすべてのステップ、この場合ステップ23および24について行われているとして格納している機能を示すメッセージ311で応答することができる。さらに、デバイス11は、25以上のステップについてそれが投票した最大の提案番号を有する提案の指示を提供することができる。そのため、図4bに示す例では、メッセージ311は、デバイス11が25よりも大きいステップについては何の提案にも投票しておらず、ステップ25については機能「b」を提案する提案番号160に投票したことも示すことができる。システム10内で送信されるメッセージの数を減らすために、デバイスは、その所与のステップについて実行された機能について知らない場合に、それらの最大の提案番号の投票で応答しさえすればよい。そのため、デバイス11は、ステップ25ではなく、ステップ23および24について機能が実行されたということを知っていたので、ステップ23および24については実行された機能と、ステップ25についてはそれが投票した最大の番号の提案で応答している。
上述のように、デバイス13は、リーダと、投票側デバイスの両方として機能することができる。このように、デバイス13は、メッセージ301などのメッセージを自分自身に送ることができ、メッセージ313などのメッセージで自分自身に応答することができる。このようなメッセージは、内部的にデバイス13に送信されることになるので、説明の目的でのみ図に示している。さらに、デバイス13は、機能が実行されたことを知っているステップについて、どれが最大のステップ番号を有するステップであるかをチェックすることができ、デバイス13は投票した上記のすべてのステップの提案について、どれが最大の提案番号であるかをチェックすることができるので、メッセージ313はヌルインジケータ以外の何らかの情報を含むことはほとんどない。
状態マシンの現在の状態は、実行された機能だけでなく、それらの機能が実行された順番にも依存する場合がある。それゆえ、あるデバイスが、ある所与のステップについてどの機能が実行されたかを知らない場合、そのデバイスがそのステップを超えてどの機能も実行すべきではないか、またはそのデバイスが順番以外で機能を実行し、そのデバイスの状態が分散コンピューティングシステムの状態とは異なってしまう状況が生じることがある。例えば、無条件に新しい状態を指定する機能など、いくつかの機能は、デバイスの現在の状態に依存しない。このような機能は、現在のステップよりも低いステップ番号を有するステップの機能がまだ実行されていなくても、実行することができる。同様に、データベースへの書込みなど、以前のステップのすべてを知らなくても出力を計算することができる機能は、順番通りではなく部分的に実行して、クライアントに送信すべき出力を生成することもできる。しかし、一般に、機能は、以前のすべての機能が実行されるまでは実行されるべきではない。それゆえ、デバイスは、常に、そのデバイスが逃したステップについてどの機能が実行されたかを知ろうと試みることができる。図4aに示すように、デバイス13がメッセージ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は、変数「e」によって表される機能がステップ12について実行されたこと、そして変数「y」および「z」によって表される機能がステップ23および24についてそれぞれ実行されたことをデバイス12に示すメッセージ321を送ることもできる。
図4dでは、次に、デバイス11〜13は、図4bで上記に示したのと同様の方法で応答することができる。ただし、デバイス11〜13は、ステップ23および24について実行された機能についてデバイス13に知らせる必要はない。というのは、デバイス13はすでにそれらのステップについて知っており、ステップ25を参照する提案メッセージ320および321をすでに送っているためである。さらに、メッセージ331〜333は、デバイスが投票した可能性のある追加の提案についてなど、追加の情報を含むことができる。例えば、デバイス12が、メッセージ312とメッセージ332の送信の間のある時点で、提案番号190を有する提案に投票した可能性がある。結果として、メッセージ312は、デバイス12が以前にステップ25についてのどの提案に対しても投票をキャストしていないかもしれないことを示すことができるが、メッセージ332は、デバイス12が25よりも大きいステップについてどの提案にもまだ投票していないが、ステップ25について提案190には投票したことを示すことができる。しかし、提案番号のそれぞれはリーダ13がメッセージ320で送信した、示唆された提案番号よりも小さいので、リーダは、メッセージ320の中で指定した提案番号200を有する機能の提案に進むことができる。
図4eを見ると、リーダ13は、メッセージ340によって示されるように、提案を選択して提案番号200として提出するのに十分な情報を持っている。メッセージ340は、デバイス11〜13が、システムがステップ25について機能「b」を実行することを提案する提案200に関する投票をするように要求している。前述のように、ともに定足数のメンバであるデバイス11および12は、機能「b」の実行を提案する提案に以前に投票しており、その定足数のその他のメンバはどれも、それよりも大きい番号のどの提案にも投票していないので、リーダ13は、クライアント20がメッセージ300中で機能「x」の実行を要求したという事実にもかかわらず、提案番号200について機能「b」を提案することができる。このようにして、Paxosアルゴリズムは、1つまたは複数のデバイスの故障またはそれらの通信の障害などにより提案されたが完了していない以前の機能が正しい順番で実行できるよう保証する。
図4fは、デバイス11〜13が、ステップ25について、メッセージ351〜353で機能「b」をそれぞれ提案する提案200に投票していることを示している。前述のように、デバイスは、メッセージ320とメッセージ340の受信の間で、より大きい提案番号を有する異なる提案に投票することを約束していない限り、ある提案に投票することができる。リーダ13は、メッセージ351〜353を受け取ると、図4gに示すように、デバイス11および12にステップ25について機能「b」を実行するように命令するメッセージ360を送信することができる。リーダ13自身も、その機能が定足数によって選択されたことを知っているので、その機能を実行することができる。
しかし、メッセージ300でクライアント20によって要求された機能は、図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が、上記に詳説したステップ25に続くさらなるステップ26を実行しているのが示されている。図4a〜dに示し、上記に詳説したように、Paxosアルゴリズムの第1フェーズの結果として、リーダ13は、デバイス11〜13のどれもステップ25より上のどの提案についても投票しておらず、それゆえ、提案番号200は、ステップ25よりも大きいステップについてのすべての提案にとって安全であることをすでに知っている。それゆえ、図5aに示すように、リーダは、ステップ26について、再び第1フェーズを行う必要がなくPaxosアルゴリズムの第2フェーズを開始することができ、クライアントによってメッセージ300中で要求された機能「x」の実行に対する投票を求めるメッセージ400を送ることができる。デバイス11〜13のそれぞれは、次に、メッセージ411〜413で、図5bに示すように、投票で応答することができる。定足数のデバイスのそれぞれは、その機能の実行に投票しているので、リーダ13は、図5cに示すように、デバイス11および12がステップ26について機能「x」を実行することをメッセージ420で通知することができる。さらに、リーダ13は、投票が成功したことを知っているので、機能「x」を実行することができ、そしてその機能の実行の結果を、メッセージ421としてクライアントに、またはメッセージ422として、デバイス30および31などのその他の関係しているコンピューティングデバイスに送ることができる。メッセージ421および422は、メッセージ420と同時に、またはメッセージ420の前後でも送ることができる。
見て分かるように、リーダが確立され、すべてのこれからのステップ番号について、定足数のデバイスによって投票された様々な最大の番号の提案を知ると、そのリーダは、Paxosアルゴリズムの第1フェーズを繰り返すことなく、投票のための提案を求めることができる。図5aに示すメッセージは、図4gのメッセージ360の送信の後に送信されるものとして示されているが、リーダ13は、デバイスが1つの提案に投票するまで、その後のステップについての別の提案を送るのを待つ必要はない。それゆえ、図4eに示すように、メッセージ340を送ると、リーダ13は、図5aに示すメッセージ400を送ることができ、そして、そのようにして、ステップ26よりも大きいステップについては、提案番号200を使って一連の機能を提案し続けることができる。このような非同期のやり方で動作することによって、全分散コンピューティングシステムは、以前のステップについての投票について知るまで待つことによりスローダウンする必要はない。
以前は機能していなかったデバイスなど、別のデバイスがリーダになろうとする場合にも、それが原因でシステムが不適切に動作することはなく、アルゴリズムの第1フェーズが繰り返されるだけであろう。例えば、別のデバイスがリーダになろうとした場合、そのデバイスは、いくつかのデバイスが応答するであろう提案番号を提案する可能性がある。第2のリーダによって申し出た提案番号に応答すると、それらのデバイスは次に、第1のリーダが投票を求めたときに、第1のリーダにそのより大きい番号の提案について知らせるか、または、第1のリーダによる要求を無視して、その提案に関して投票するかもしれない。投票したデバイスの数が不十分であるために提案が失敗すると、第1のリーダは、最初に第1フェーズを再び行い、次に、それらのデバイスに示唆できる十分に大きい提案番号であると信じる番号を選択することによって、再び、提案を通過させようと試みるであろう。このようにして、第2のリーダは、システムを遅延させるだけであり、分散コンピューティングシステム側に不適切な動作の原因となることはないであろう。
上述のPaxosアルゴリズムのステップを実装するデバイスは、このアルゴリズムに使用される情報を格納する変数を維持することができる。例えば、デバイスがどの機能が選ばれたのか知らない各ステップについて、デバイスは、それらが応答した最大の提案番号を有する提案の提案番号と、それらが投票した最大の提案番号を有する提案の提案番号と、それらが投票した最大の提案番号を有する提案によって提案された値を格納することができ、そのデバイスがリーダである場合には、それが発行した最後の提案の提案番号をさらに格納することができる。さらに、デバイスは、それらがそのような情報を持っているステップすべてについてどの機能が選択されたかを記録することができる。あるいは、上述のように、デバイスは、ある与えられた時間におけるその状態のスナップショットと、その時間以降にのみ実行された機能を格納することができるであろう。このような変数は、揮発性ストレージ130、または図2に示したハードディスク141、フロッピー(登録商標)ディスク152、光ディスク156などの不揮発性ストレージに格納することができる。
Paxosアルゴリズムに関するさらなる情報は、その内容がすべて参照により本明細書に組み込まれる非特許文献2において見つけることができる。
(簡略化されたPaxosアルゴリズム)
標準のPaxosアルゴリズムの上記の詳細な説明からわかるように、Paxosアルゴリズムを実装する分散コンピューティングシステムへのクライアントの要求の送信と、システムからのクライアントの要求への応答の送信との間には一連のメッセージ遅延が生じる可能性がある。クライアントの要求を受け取るデバイスが、すでに、標準Paxosアルゴリズムの第1フェーズをすでに完了したリーダデバイスである場合でも、メッセージ遅延が生じる可能性がある。例えば、図6aを見ると、これまでの図の分散コンピューティングシステム10が示されており、これまでのリーダ13が、変数「w」によって表される機能をシステムが実行することを要求するクライアント20からのクライアント要求500を受信している。リーダ13はすでにPaxosアルゴリズムの第1フェーズを行っており、他のデバイスはどれも投票を求めようと試みていないため、リーダは、システム10にクライアントの要求500を実行させるために、Paxosアルゴリズムの第2フェーズを行うだけでよい。それゆえ、クライアントの要求500を受信すると、リーダ13は、システムの次のステップ、現在の例ではステップ27について、提案番号200として、機能「w」の実行に対する投票を求めるメッセージ501を送信することができる。メッセージ501の送信は、1つのメッセージ遅延を生じさせる可能性がある。デバイス11〜13のそれぞれは、次いで、図6bにメッセージ511〜513で示すように投票で応答することができる。メッセージ511〜513の送信は、別のメッセージ遅延を生じさせる可能性がある。定足数のデバイスのそれぞれはその機能の実行に投票しているので、リーダ13は、図6cに示すように、デバイス11および12がステップ27について機能「w」を実行することをメッセージ520で知らせることができる。さらに、リーダ13は、投票が成功したことを知るので、機能「w」を実行することができ、その機能の実行の結果を、メッセージ521としてクライアントに、またはメッセージ522として、デバイス30および31などのその他の関係するコンピューティングデバイスに送信することができる。それゆえ、標準Paxosアルゴリズムは、クライアントの要求メッセージ500の受信とクライアントへの返信メッセージ521の送信との間に、少なくとも2つのメッセージ遅延を生じさせる可能性がある。
本発明の一実施形態では、標準Paxosアルゴリズムの第2フェーズを修正することによって、少なくとも1つのメッセージ遅延を回避することができる。3つのコンピューティングデバイスを備えるシステム10のような分散コンピューティングシステムでは、いずれかの2つのデバイスが過半数を形成することができる。任意の2つの過半数は、少なくとも1つのデバイスを共通に有するので、3つのデバイスのシステム中の任意の2つのデバイスは、Paxosアルゴリズムを実行する目的として定足数にもなり得る。そのため、任意の2つのデバイスが提案された機能の実行に同意する場合、その提案された機能は、システムによって選択され、実行することができる。リーダは、この2つのデバイスの定足数の1デバイスとなってもよい。それゆえ、その他の2つのデバイスのいずれかがある提案された機能の実行に投票するならば、定足数がその機能を選択したことになる。
リーダが、特定の機能に対する投票の要求とともに、その機能に対するリーダの投票の指示を送信すれば、1つのメッセージ遅延を回避することができる。別のデバイスがそのようなメッセージを受け取ると、そのデバイスは、それ自身で、何らのさらなるメッセージなしで、提案された機能の実行に投票する定足数を満たす。それゆえ、そのデバイスが、提案された機能に投票すべきであると判断し、その同じ提案された機能に対するリーダの投票をすでに受信していれば、そのデバイスは、自分自身とリーダで構成される定足数がその機能の実行に投票したことも判断できる。定足数がその機能の実行に投票しているので、デバイスは、何らかのさらなるメッセージを受け取ることなく、安心してその機能を実行することができる。デバイスが、その機能を実行すると、その結果をクライアント、または任意の他の関係するデバイスに送信することができ、それによって標準Paxosアルゴリズムに比べ、1つのメッセージ遅延を取り除くことができる。
図7aを見ると、これまでの図のシステム10に関連して、本発明の一実施形態の動作が示されている。図6aの場合と同様に、リーダ13は、図7aでメッセージ600として示したクライアントの要求を受け取って、変数「v」によって表される機能を実行することができる。リーダ13は、次いで、デバイス11および12の両方に、提案された機能に関する投票の要求を含むだけでなく、提案された機能に賛成するリーダの投票の指示を備えるメッセージ601を送信することができる。そのため、図7aのメッセージ601は、上記の図6aのリーダのメッセージ501には存在しなかった追加の情報を含んでいる。具体的には、メッセージ601は、リーダ13が上記の図6bのメッセージ513まで送信しなかった情報も含んでいる。
図7bを見ると、デバイス11および12は、デバイス13が提案された機能にすでに投票していることを知っているので、また、任意の2つのデバイスがシステム10の定足数を構成するので、デバイス11および12は、提案された機能に投票するのであれば、その提案された機能を独立して実行することができる。そのため、図7bに示すように、デバイス11および12は、提案された機能に投票することを決定することができる。デバイス11および12はそれぞれ自身の投票を知っており、また提案した機能に賛成するデバイス13の投票も知っているので、デバイス11および12は、定足数がその提案された機能に投票していること、それゆえその機能を実行して間違いないことを独立に知る。デバイス11および12は、それゆえ、その機能を実行し、機能「v」の実行の結果を、直接クライアント20に、または任意のその他のコンピューティングデバイスに、図7bに示すようにメッセージ611および612で提供することができる。それゆえ、見て分かるように、提案とともに投票を送ることによって、メッセージ611または612の形態で、クライアントの要求600とシステムの応答の間の唯一のメッセージ遅延は、メッセージ601を送る際の遅延である。
本発明によって企図されている別の実施形態では、リーダ13は、システム10中の他の1つのデバイスのみを選択して、定足数を満たし、要求された機能の実行の結果をアナウンスする。それゆえ、図8aを見ると、図7aの代わりが示されている。具体的には、図8aに示すように、リーダ13は、クライアントの要求700を受け取ると、要求された機能に関する投票の要求と、その機能に対するリーダの投票の指示とを備える1つのメッセージ701のみをデバイス11に送ることができる。上記のように、デバイス11が、その機能に投票することを決定すると、それ自身とリーダで構成する定足数がその機能に投票したことを知り、その機能を安心して実行し、その結果をクライアント20およびその他の関係するデバイスに提供することができる。そのため、図7bの代わりとして図示する図8bに示すように、デバイス11は、要求された機能の実行の結果をクライアント20およびその他の関係するデバイス30および31に知らせることができるだけでなく、デバイス11はデバイス12にも実行された機能の結果を知らせることができる。しかし、デバイス12はシステムの状態の現在のコピーを維持しようとすることができるので、デバイス11は、選択された機能と、その機能がどのステップのために選択されたかの指示を提供することもできる。そのため、クライアント20およびその他の関係するデバイス30および31に送られたメッセージ711は、選択された機能の実行の結果を含む必要があるだけであるが、デバイス12は、機能「v」がステップ28について選択されたことを示し、機能「v」の実行の結果を提供するメッセージ721を受け取ることができる。
図7aおよび7bならびに8aおよび8bに示す実施形態のいずれにおいて、要求された機能を実行するデバイスは、リーダ13に、機能「v」が選択された事実を送信し、機能「v」の実行の結果を提供することができる。それによって、リーダは、システムの状態の現在のコピーを維持することを可能にする。あるいは、リーダ13は、システムの状態を維持する必要がなく、デバイスが機能を実行してさらなるメッセージをリーダに送信する必要なくす。
リーダがシステムの状態を維持するかどうかにかかわらず、システムの状態の2つのコピーが維持される限り、システム10は失敗を許容できる。例えば、リーダ13がシステムの状態のコピーを維持しておらず、デバイス11および12がコピーを維持している場合、デバイス11および12のいずれかが故障しても、システムは、リーダ13と、2つのデバイス11および12のうち動作可能な一方のみとで動作し続けることができるであろう。送信されるメッセージは、図8aおよび8bに示されているものと同様であり、この場合、リーダは1つのデバイスのみにメッセージを送る。
システム10のデバイス間で送信されるメッセージの数を最小限に抑えるために、本発明の実施形態は、結果メッセージをキャッシュし、それらをバッチメッセージとしてリーダ、または機能の実行の結果を急いで知る必要がない任意のその他のデバイスに送ることを企図している。そのため、リーダがシステムの状態のバックアップコピーを維持していなかった場合には、図8bに示すメッセージ711などの結果メッセージを送信デバイス側でキャッシュすることができ、所定の時間経過後に、あるいは、十分な数のメッセージがキャッシュされた後に、それらの結果メッセージを、複数の結果メッセージが入っているバッチメッセージとしてリーダに送ることができるであろう。このような技術は、デバイス30および31などのその他のデバイスへのメッセージについても同様に使用することができる。結果メッセージをキャッシュし、それらを所定の時間経過後にバッチメッセージとして送信することによって、送られるメッセージの数を減らすことができ、それによって、ネットワークの輻輳および送信デバイスのネットワークインターフェースにおける負荷を低減する。
リーダが要求された機能の実行の結果を受け取ることができない場合もあるので、その他のメカニズムを使って、リーダによって送信された、投票の要求およびリーダの投票が入っているメッセージを、デバイス11および12などのその他のデバイスが実際に受信したかどうかを検証することができる。本発明によって企図される一実施形態では、デバイス11および12は、それらがリーダのメッセージを受信したことを知らせるために、小さな受信応答メッセージをリーダ13に送信することができる。さらに、この受信応答メッセージを、上述の方法で、キャッシュし、所定の時間経過後にバッチメッセージとして送信することもできる。本発明によって企図される別の一実施形態では、信頼できる下位のトランスポートメカニズムを使用することができる。当業者にはわかるであろうが、信頼できるトランスポートメカニズムは、独立してメッセージの送信を検証し、必要に応じて、独立してメッセージのキャッシュおよび再送信を行う。結果として、信頼できる下位トランスポートメカニズムを使用することにより、コンセンサスアルゴリズムの一環としての明示的なメッセージ認証の必要がなくなる。
上記に詳説した、このより効率的なPaxosアルゴリズムは、同じく上記に詳説した標準Paxosアルゴリズムのフォールトトレラントなプロパティを保持している。具体的には、図に示した3つのデバイスのシステム10は、1つの故障を許容することができる。例えば、デバイス12が故障した場合、いずれかの2つのデバイス、すなわち、本例ではリーダ13とデバイス11が定足数を構成し、実行すべき機能を選択できるので、システムは、図8aおよび8bに関連して上記に説明した方法で動作し続けることができるであろう。
デバイス13が故障した場合、またはデバイス11または12の一方がリーダになろうとし、システム10に提案を提出しようと試みた場合には、リーダデバイスが以前の提案を知り、適切な提案番号を決定することができるように、上記に詳説した標準Paxosアルゴリズムの第1フェーズを行わなければならない場合がある。しかし、上述したように、一般に予測される動作条件のもとでは、Paxosアルゴリズムの第1フェーズが行われる頻度はPaxosアルゴリズムの第2フェーズよりも少ない。それゆえ、Paxosアルゴリズムの第2フェーズからメッセージ遅延を取り除くことによって、標準Paxosアルゴリズムの第1フェーズがリーダに情報を提供するために依然として時に行われるとしても、一般に予測される動作条件のもとで、上記のアルゴリズムによりクライアントに対する応答が速くなる。
(安価なデバイスを用いた簡略化されたPaxosアルゴリズム)
上述したように、Paxosアルゴリズムを使って、任意のタイプのコンピューティングデバイスで構成されたシステムを用いてフォールトトレラントな分散コンピューティングを提供することができる。例にすぎないが、分散コンピューティングシステムは、世界規模で冗長性を提供する高速な専用サーバコンピューティングデバイスで構成することができ、または安価な冗長性のあるプロセッシングおよびストレージを収益が限定されている組織または研究機関に提供するパーソナルコンピューティングデバイスの未使用資源のみで構成することができる。しかし、実行すべき機能を選択するのに必要とされるコンピューティングデバイスの定足数が、ある定足数のコンピューティングデバイスによってそれ自体選択される場合、さらなるコンピューティング資源を節約することができる。具体的には、上記のアルゴリズムを、1つのデバイスがきわめて低いプロセッシングパワーまたはストレージ能力を備えることができる分散コンピューティングシステムによって実装することができる。このようにして、コンピューティングの割当量(computing budget)を主に分散コンピューティングシステムのその他のデバイスに割り振ることができ、それによって、最低限のプロセッシングパワーまたはストレージ能力のみを備えることができるその1つのデバイスに最低限の財源(monetary budget)を割り振る必要がある一方で、より強力なコンピューティングデバイスの購入が可能となる。
図9aを見ると、2つのコンピューティングデバイス11および13、そしてパーソナルデジタルアシスタント(PDA)の形態で示した安価なコンピューティングデバイス14を有する分散コンピューティングシステム19が示されている。デバイス14はPDAとして示されているが、デバイス11および13が任意のタイプのコンピューティングデバイスとすることができるのと同様に、それが任意のタイプのコンピューティングデバイスとすることができることを当業者は理解するであろう。しかし、より強力なコンピューティングデバイス11および13を購入し、PDA、プログラム可能な計算機、さらにはデジタル腕時計などのデバイスを含む、よりパワーの劣るコンピューティングデバイス12を購入することによって、財源を最も効率的に使用することができるようになる。
投票のための提案を提出するのに先立って、リーダ13は、投票を行い選択されると、提案された機能を行うことになる動作定足数(operational quorum)を選択しようと試みることができる。動作定足数の選択は、上記に詳説した提案機能の選択と同様の方法で行うことができる。デバイス13は、上記に詳説したように、すでに自分自身をリーダデバイスとして確立しているので、動作定足数の提案に移ることができる。そのため、図9aに示すように、リーダ13は、提案する動作定足数へのリーダの投票とともに、特定の動作定足数への投票の要求を送ることができる。図9aに示した特定の例では、リーダ13は、デバイス11および13を備える動作定足数を提案し、その提案およびその投票をデバイス11および14の両方に送る。
図9bを見ると、デバイス11および14のそれぞれが、提案された動作定足数に同意し、その同意をシステム19のその他のデバイスに通知しているのが示されている。上述したように、本発明によって企図される別の実施形態により、デバイス13がたった1つのメッセージ800をデバイス14などに送ることができる。このような場合、デバイス14は、デバイス11および13に動作定足数の選択について知らせるメッセージ814を、それらに送ることができるであろう。
動作定足数が選択されると、それを使って、提案された機能に投票し、実行することができる。それゆえ、図10aを見ると、リーダ13は、クライアント20から要求900を受け取って、変数「u」によって表される機能を実行することができる。前述のように、リーダ13は、要求された機能を実行する提案を、その提案に対するリーダの投票とともにメッセージ901で送ることができる。しかし、動作定足数はデバイス11および13として選択されているので、デバイス13は、メッセージ901をデバイス11に送るだけでよい。
図10bを見ると、デバイス11は、メッセージ901に含まれた提案に投票すべきであると判断すると、デバイス11はそれ自身とデバイス13が機能「u」の実行に投票したことを知っているので、機能「u」の実行に移ることができる。そのため、図10bに示すように、デバイス11は、追加のメッセージを待つことなく、機能「u」を実行し、その結果をクライアント20にメッセージ911で送ることができる。上述したように、システムの状態のコピーを維持することもできるリーダは、機能「u」の実行の結果だけでなく、ステップ30について機能「u」が選択されたことの指示も提供するデバイス11からのメッセージ921を受け取ることができる。あるいは、デバイス11は、単に、機能「u」の選択の指示だけを送ることができ、デバイス13がシステム状態の自分自身のコピー上で機能「u」を実行できるようにする。
見て分かるように、デバイス11および13は、計算労力の大部分を行うことができ、また、システムの状態を維持することができ、かなりのストレージ資源を必要とする可能性がある。一方、デバイス14は単に、デバイス11および13の動作定足数を選択した定足数の一部であった点で参加しただけである。そのため、前述したように、デバイス14は安価なデバイスとすることができる。
分散コンピューティングシステム19は、前に例示し、説明したシステム10が許容できるのと同様に、依然として1つのデバイスの故障を許容することができる。例えば、図11aを見ると、デバイス11が故障したものとして示されている。デバイス11の故障は、ピング(pinging)やタイムアウトなど、様々な手段のいずれかを通してデバイス13によって検出することができる。デバイス11はもはや正しく機能していないので、デバイス13は、動作定足数を、自分自身だけで構成される動作定足数に変更することを提案できる。動作定足数を過半数よりも少なくすることができるが、このような方法で動作定足数を修正する決定は、システム19の従来の定足数で行うことができ、この定足数は、過半数とすることができる。そのため、デバイス13は、動作定足数を変更する提案と、その提案に対するそれ自身の投票とを備えるメッセージ1000を、デバイス14に送る。
デバイス14は限定されたプロセッシングまたはストレージ能力を有する安価なデバイスとすることができるので、上記に詳説したように、本発明の一実施形態により、デバイス14は、以前により大きい提案番号を有する別のメッセージに応答していない限り、それが受け取るあらゆる提案に投票することができる。結果として、デバイス14は大量の情報を格納する必要がなく、また大規模な処理を行う必要もない。図11bを見ると、デバイス14は、デバイス13を含む動作定足数にそれが投票したことを示すメッセージ1014でデバイス13に応答することができる。デバイス13は、次いで、それ自身、分散コンピューティングシステム19の定足数として働く。
図12を見ると、クライアント20は、変数「t」によって表された機能をシステム19に実行させる要求1100を、リーダ13に送ることができる。しかし、図11aおよび11bに示すように、新たな動作定足数はデバイス13を含むのみである。それゆえ、クライアントの要求1100を受け取ると、デバイス13は、その要求を実行すべきかどうかを決定することができ、その要求を実行する場合には、その結果を、リターンメッセージ1101の形態でクライアント20に送信することができる。図12に示す動作定足数はデバイス13を含むのみなので、デバイス13は、クライアントの要求1100を他のどのデバイスにも提案する必要がなく、要求された機能を実行すべきかどうかを自分だけで決定することができる。同様に、デバイス13は、要求された機能を実行することを決定すると、この場合も他のどのデバイスからも同意を要求することなく、実行を行い、その結果をクライアント20に返信することができる。
しかし、当業者であれば理解されるように、分散コンピューティングシステム19が1つだけのデバイスを用いて状態マシンを実装できるようにすることの欠点は、そのデバイスが故障すると、システムの状態の重複コピーを備えたデバイスが他にはないということである。図13aを見ると、デバイス13は故障しているものとして示されている。一方で、デバイス11は修理されたものとして示されている。そのため、デバイス11は、クライアントの要求1200を受け取ると、デバイス11のみを含むように動作定足数を変更しようと試みることができる。デバイス11は現在のリーダデバイスではなかったので、ステップ31について、300の提案番号を提案する提案メッセージ1201を送ることによって、リーダになることを試みることができる。以下に詳説するように、デバイス11は、それが知っている以前の最大の提案番号よりも大きい提案番号を選択することができる。デバイス11は、図10aのメッセージ901で示すように、ステップ30について使用されている200という提案番号について知っているので、デバイス11は、リーダになろうとするときに、より大きい提案番号を選択することができる。同様に、デバイス11は、図10bのメッセージ911で示すように、ステップ30に対する機能の実行について知っているので、ステップ31の機能を提案しようとすることができる。
しかし、図11bのメッセージ1014で示すように、デバイス14はすでにステップ31に対する投票をキャストしている。それゆえ、上記に詳説した方法で、デバイス14はデバイス11にその以前の投票について知らせることができる。図13bを見ると、デバイス14が最後の投票メッセージ1214をデバイス11に送っているのが示されており、デバイス14が以前に動作定足数をデバイス13として設定する、ステップ31についての提案に投票していることを知らせている。デバイス11は、次いで、適切な動作定足数がデバイス13を含み得ると判断し、31よりも大きいステップについて、デバイス13を含む動作定足数を提案しようと試みることができる。あるいは、デバイス11は、任意のその他の機能を提案する前に、デバイス13が再び動作するのを単に待つことができる。どちらのイベントにおいても、デバイス11は、デバイス13がそれだけで定足数を構成したときに何の機能を実行したかを知るまでは、機能を実行することができない。システム19は、それゆえ、デバイス13が修理または再開されるまで、さらなる機能を実行できない場合がある。
本発明によって企図される別の実施形態では、動作定足数の選択は、機能の各投票の前に行うことができる。このようにして、現在、動作しているデバイスのみが動作定足数の一部になることができる。しかし、当業者にはわかるように、デバイスがあまり故障しない場合には、このような実施形態は非効率的になることがある。
見て分かるように、デバイス14などのデバイスに課される要求を減らすことによって、分散コンピューティングシステムのデバイスの1つを、限定されたコンピュテーション能力およびストレージ容量を有する安価なデバイスとして選択することができる。それでも、全体的な分散コンピューティングシステムはフォールトトレラントな方法で動作し続けることができ、安価なデバイスを使用することの唯一の欠点は、故障のために動作定足数が1つのデバイスのみによって実装されている場合に、そのデバイスが、別のデバイスが修理または交換される前に故障すると、システムは、そのシステムを最後に実装していたデバイスが修理されるまで、たとえそれまでに定足数の動作デバイスが存在するとしても、待つことを余儀なくされる場合があるということである。
本発明の原理を適用できる多くの考えられる実施形態に照らして、図面に関連して本明細書に記載した実施形態は例示を目的としたものにすぎず、本発明の範囲を限定するものとして解釈されるべきではないことを認識されたい。例えば、当業者は、ソフトウェアで示した例示の実施形態のいくつかの構成要素をハードウェアで実装できること、またその逆も可能であること、あるいは、例示の実施形態を、本発明の趣旨から逸脱することなく配置および詳細において修正できることを認識されよう。それゆえ、本明細書に記載の本発明は、添付の特許請求の範囲およびその均等の範囲内に含まれるすべてのそのような実施形態を企図している。
本発明の一実施形態を実施することができる例示的な分散コンピューティングシステムを一般的に示すブロック図である。 本発明の一実施形態を実施することができる例示的なコンピューティングデバイスを一般的に示すブロック図である。 本発明の一実施形態によって意図されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの短縮版の動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの短縮版の動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの短縮版の動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの短縮版の動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの短縮版の動作を一般的に示す図である。 本発明の一実施形態によって意図されたマルチステップコンセンサスアルゴリズムの短縮版の動作を一般的に示す図である。 本発明の一実施形態によって意図された簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された別の簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された別の簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた簡略化されたコンセンサスアルゴリズムのさらなる動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた簡略化されたコンセンサスアルゴリズムのさらなる動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた別の簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた別の簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いた別の簡略化されたコンセンサスアルゴリズムのさらなる動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いたさらに別の簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。 本発明の一実施形態によって意図された安価なデバイスを用いたさらに別の簡略化されたコンセンサスアルゴリズムの動作を一般的に示す図である。
符号の説明
10、19 分散コンピューティングシステム
11〜13、30、31 コンピューティングデバイス
14 安価なコンピューティングデバイス
20 クライアントコンピューティングデバイス
100 コンピューティングデバイス
120 処理装置
121 システムバス
130 システムメモリ
131 ROM
132 RAM
134 オペレーティングシステム
135 アプリケーションプログラム
136 その他のプログラムモジュール
137 プログラムデータ
140 非リムーバブル不揮発性メモリインターフェース
141 ハードディスクドライブ
144 オペレーティングシステム
145 アプリケーションプログラム
146 その他のプログラムモジュール
147 プログラムデータ
150 リムーバブル不揮発性メモリインターフェース
151 磁気ディスクドライブ
152 リムーバブルな不揮発性磁気ディスク
155 光ディスクドライブ
156 リムーバブルな不揮発性光ディスク
160 ユーザ入力インターフェース
161 マウス
162 キーボード
170 ネットワークインターフェース
171 一般的なネットワーク接続
180 リモートコンピューティングデバイス
190 ビデオインターフェース
191 モニタ
195 出力周辺インターフェース
196 プリンタ
197 スピーカ

Claims (38)

  1. 分散コンピューティングシステムにおいて値を選択するための方法であって、前記方法は、提案された値と、前記提案された値に対する投票と、第1の提案識別子と、第1のステップ識別子とを送信することであって、前記提案された値に対する投票は、第1の受信デバイスに、前記第1のステップ識別子によって識別された第1のシステムステップにおいて前記分散コンピューティングシステムの第1の定足数が前記提案された値を選択したかどうかを、前記提案された値に対する投票および前記第1の受信デバイス自身の投票に基づいて判断するのに十分な情報を提供することを備えることを特徴とする方法。
  2. 動作定足数の提案と、前記動作定足数の提案に対する投票と、第2の提案識別子と、第2のステップ識別子とを送信することであって、前記動作定足数の提案に対する投票は、第2の受信デバイスに、前記第2のステップ識別子によって識別された第2のシステムステップにおいて前記分散コンピューティングシステムの第2の定足数が前記動作定足数の提案を選択したかどうかを、前記動作定足数の提案に対する投票および前記第2の受信デバイス自身の投票に基づいて判断するのに十分な情報を提供することと、前記動作定足数の提案の選択についての指示を受信することとをさらに備えることを特徴とする請求項1に記載の方法。
  3. 前記分散コンピューティングシステムの前記第2の定足数は、第2の送信デバイスと前記第2の受信デバイスとを備え、前記第2の送信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを送信しており、前記第2の受信デバイスは、安価なコンピューティングデバイスであることを特徴とする請求項2に記載の方法。
  4. 分散コンピューティングシステムにおいて値を選択するための方法であって、前記方法は、提案された値と、前記提案された値に対する投票と、第1の提案識別子と、第1のステップ識別子とを受信することであって、前記提案された値に対する投票は、前記第1のステップ識別子によって識別された第1のシステムステップにおいて前記分散コンピューティングシステムの第1の定足数が前記提案された値を選択したかどうかを判断するのに十分な情報を提供することを備えることを特徴とする方法。
  5. 前記提案された値を選択することと、前記第1の提案識別子が以前に応答した提案識別子以上の場合、追加のメッセージを待つことなく、前記提案された値の選択を、前記提案された値を元々提案したクライアントデバイスに送信することとをさらに備えることを特徴とする請求項4に記載の方法。
  6. 動作定足数の提案と、前記動作定足数の提案に対する投票と、第2の提案識別子と、第2のステップ識別子とを受信することであって、前記動作定足数の提案に対する投票は、前記第2のステップ識別子によって識別された第2のシステムステップにおいて前記分散コンピューティングシステムの第2の定足数が前記動作定足数の提案を選択したかどうかを判断するのに十分な情報を提供することと、前記第2の提案識別子が以前に応答した提案識別子以上の場合、前記動作定足数の提案を選択することと、前記動作定足数の提案の選択についての指示を送信することとを備えることを特徴とする請求項4に記載の方法。
  7. 前記分散コンピューティングシステムの前記第2の定足数は、第2の送信デバイスと第2の受信デバイスとを備え、前記第2の送信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを送信しており、前記第2の受信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを受信しており、さらに、前記第2の受信デバイスは、安価なコンピューティングデバイスであることを特徴とする請求項6に記載の方法。
  8. 分散コンピューティングシステムにおいて値を選択するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記コンピュータ実行可能命令は、提案された値と、前記提案された値に対する投票と、第1の提案識別子と、第1のステップ識別子とを送信することであって、前記提案された値に対する投票は、第1の受信デバイスに、前記第1のステップ識別子によって識別された第1のシステムステップにおいて前記分散コンピューティングシステムの第1の定足数が前記提案された値を選択したかどうかを、前記提案された値に対する投票および前記第1の受信デバイス自身の投票に基づいて判断するのに十分な情報を提供することを備えたステップを行うことを特徴とするコンピュータ可読媒体。
  9. 前記分散コンピューティングシステムの前記第1の定足数は、第1の送信デバイスと前記第1の受信デバイスとを備え、前記第1の送信デバイスは、前記提案された値と、前記提案された値に対する投票と、前記第1の提案識別子と、前記第1のステップ識別子とを送信したことを特徴とする請求項8に記載のコンピュータ可読媒体。
  10. 前記提案された値は、前記分散コンピューティングシステムによって実行されるべく提案された機能であることを特徴とする請求項8に記載のコンピュータ可読媒体。
  11. 前記第1の受信デバイスによる前記提案された機能の実行の結果を前記第1の受信デバイスから受信することを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項10に記載のコンピュータ可読媒体。
  12. 前記分散コンピューティングシステム中の第2の定足数のデバイスに、前記第1のシステムステップのための示唆された次の提案識別子を送信することと、前記分散コンピューティングシステム中の前記第2の定足数の各デバイスから、示唆された次の提案識別子応答を受信することであって、前記第2の定足数の各デバイスが以前に前記第1のシステムステップに対して投票していない場合、前記示唆された次の提案識別子応答はヌルであり、前記第2の定足数の各デバイスが以前に前記第1のシステムステップに対して投票している場合、前記示唆された次の提案識別子応答は、前記第1のシステムステップに対応して、以前に値に投票したことおよび以前に提案識別子に投票したことの指示を含むこととを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項8に記載のコンピュータ可読媒体。
  13. 前記第1の提案識別子として、以前に提案識別子に投票したどれよりも大きい識別子を選択することと、前記提案された値として、以前に値に投票したことの1つを選択することとを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項12に記載のコンピュータ可読媒体。
  14. 動作定足数の提案と、前記動作定足数の提案に対する投票と、第2の提案識別子と、第2のステップ識別子とを送信することであって、前記動作定足数の提案に対する投票は、第2の受信デバイスに、前記第2のステップ識別子によって識別された第2のシステムステップにおいて前記分散コンピューティングシステムの第2の定足数が前記動作定足数の提案を選択したかどうかを、前記動作定足数の提案に対する投票および前記第2の受信デバイス自身の投票に基づいて判断するのに十分な情報を提供することと、前記動作定足数の提案の選択についての指示を受信することとを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項8に記載のコンピュータ可読媒体。
  15. 前記分散コンピューティングシステムの前記第2の定足数は、第2の送信デバイスと前記第2の受信デバイスとを備え、前記第2の送信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを送信しており、前記第2の受信デバイスは、安価なコンピューティングデバイスであることを特徴とする請求項14に記載のコンピュータ可読媒体。
  16. 前記動作定足数は、前記分散コンピューティングシステムの前記第1の定足数を備え、前記第2のシステムステップは、前記第1のシステムステップに先行することを特徴とする請求項14に記載のコンピュータ可読媒体。
  17. 分散コンピューティングシステムにおいて値を選択するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記コンピュータ実行可能命令は、提案された値と、前記提案された値に対する投票と、第1の提案識別子と、第1のステップ識別子とを受信することであって、前記提案された値に対する投票は、前記第1のステップ識別子によって識別された第1のシステムステップにおいて前記分散コンピューティングシステムの第1の定足数が前記提案された値を選択したかどうかを判断するのに十分な情報を提供することを備えたステップを行うことを特徴とするコンピュータ可読媒体。
  18. 前記分散コンピューティングシステムの前記第1の定足数は、第1の送信デバイスと第1の受信デバイスとを備え、前記第1の送信デバイスは、前記提案された値と、前記提案された値に対する投票と、前記第1の提案識別子と、前記第1のステップ識別子とを送信しており、前記第1の受信デバイスは、前記提案された値と、前記提案された値に対する投票と、前記第1の提案識別子と、前記第1のステップ識別子とを受信したことを特徴とする請求項17に記載のコンピュータ可読媒体。
  19. 前記第1の提案識別子が以前に応答した提案識別子以上の場合、前記提案された値を選択することと、前記提案された値の選択を送信することとを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項17に記載のコンピュータ可読媒体。
  20. 前記提案された値は、前記分散コンピューティングシステムによって実行されるべく提案された機能であることを特徴とする請求項17に記載のコンピュータ可読媒体。
  21. 前記提案された機能を実行することと、前記提案された機能の実行の結果を送信することとを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項20に記載のコンピュータ可読媒体。
  22. 前記提案された機能の選択の指示を送信することを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項21に記載のコンピュータ可読媒体。
  23. 前記第1のシステムステップのための示唆された次の提案識別子を受信することと、示唆された次の提案識別子応答を送信することであって、前記第1のシステムステップに対する投票が以前になされていない場合、前記示唆された次の提案識別子応答はヌルであり、前記第1のシステムステップに対する投票が以前になされている場合、前記示唆された次の提案識別子応答は、前記第1のシステムステップに対応して、以前に値に投票したことおよび以前に提案識別子に投票したことの指示を含むこととを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項17に記載のコンピュータ可読媒体。
  24. 動作定足数の提案と、前記動作定足数の提案に対する投票と、第2の提案識別子と、第2のステップ識別子とを受信することであって、前記動作定足数の提案に対する投票は、前記第2のステップ識別子によって識別された第2のシステムステップにおいて前記分散コンピューティングシステムの第2の定足数が前記動作定足数の提案を選択したかどうかを判断するのに十分な情報を提供することと、前記第2の提案識別子が以前に応答した提案識別子以上の場合、前記動作定足数の提案を選択することと、前記動作定足数の提案の選択についての指示を送信することとを備えたステップを行うコンピュータ実行可能命令をさらに有することを特徴とする請求項17に記載のコンピュータ可読媒体。
  25. 前記分散コンピューティングシステムの前記第2の定足数は、第2の送信デバイスと第2の受信デバイスとを備え、前記第2の送信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを送信しており、前記第2の受信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを受信しており、さらに、前記第2の受信デバイスは、安価なコンピューティングデバイスであることを特徴とする請求項24に記載のコンピュータ可読媒体。
  26. 前記動作定足数は、前記分散コンピューティングシステムの前記第1の定足数を含み、前記第2のシステムステップは、前記第1のシステムステップに先行することを特徴とする請求項24に記載のコンピュータ可読媒体。
  27. 分散されたフォールトトレラントなコンセンサスアルゴリズムを実装する分散コンピューティングシステムにおけるコンピューティングデバイスであって、前記コンピューティングデバイスは、提案された値と、前記提案された値に対する投票と、第1の提案識別子と、第1のステップ識別子とを第1の受信コンピューティングデバイスに送信することであって、前記提案された値に対する投票は、前記第1のステップ識別子によって識別された第1のシステムステップにおいて前記分散コンピューティングシステムの第1の定足数が前記提案された値を選択したかどうかを、前記第1の受信コンピューティングデバイスに判断できるようにすることを備えたことを特徴とするコンピューティングデバイス。
  28. 前記分散コンピューティングシステムの前記第1の定足数は、前記コンピューティングデバイスと前記第1の受信コンピューティングデバイスとを備えたことを特徴とする請求項27に記載のコンピューティングデバイス。
  29. 前記分散コンピューティングシステム中の第2の定足数のデバイスに、前記第1のシステムステップのための示唆された次の提案識別子をさらに送信することと、前記分散コンピューティングシステム中の前記第2の定足数の各デバイスから、示唆された次の提案識別子応答を受信することであって、前記第2の定足数の各デバイスが以前に前記第1のシステムステップに対して投票していない場合、前記示唆された次の提案識別子応答はヌルであり、前記第2の定足数の各デバイスが以前に前記第1のシステムステップに対して投票している場合、前記示唆された次の提案識別子応答は、前記第1のシステムステップに対応して、以前に値に投票したことおよび以前に提案識別子に投票したことの指示を含むこととを特徴とする請求項27に記載のコンピューティングデバイス。
  30. 前記第1の提案識別子として、以前に提案識別子に投票したどれよりも大きい識別子を選択することと、前記提案された値として、以前に値に投票したうちの1つを選択することとを特徴とする請求項29に記載のコンピューティングデバイス。
  31. 動作定足数の提案と、前記動作定足数の提案に対する投票と、第2の提案識別子と、第2のステップ識別子とをさらに送信することであって、前記動作定足数の提案に対する投票は、前記第2のステップ識別子によって識別された第2のシステムステップにおいて前記分散コンピューティングシステムの第2の定足数が前記動作定足数の提案を選択したかどうかを、第2の受信コンピューティングデバイスに判断できるようにすることと、前記動作定足数の提案の選択についての指示を受信することとを特徴とする請求項27に記載のコンピューティングデバイス。
  32. 前記分散コンピューティングシステムの前記第2の定足数は、前記コンピューティングデバイスと前記第2の受信コンピューティングデバイスとを備え、前記第2の受信コンピューティングデバイスは、安価なコンピューティングデバイスであることを特徴とする請求項31に記載のコンピューティングデバイス。
  33. 分散されたフォールトトレラントなコンセンサスアルゴリズムを実装する分散コンピューティングシステムにおけるコンピューティングデバイスであって、前記コンピューティングデバイスは、提案された値と、前記提案された値に対する投票と、第1の提案識別子と、第1のステップ識別子とを受信することであって、前記提案された値に対する投票は、前記第1のステップ識別子によって識別された第1のシステムステップにおいて前記分散コンピューティングシステムの第1の定足数が前記提案された値を選択したかどうかを、前記コンピューティングデバイスに判断できるようにすることを特徴とするコンピューティングデバイス。
  34. 前記第1の定足数は、前記コンピューティングデバイスと第1の送信コンピューティングデバイスとを備え、前記第1の送信コンピューティングデバイスは、前記提案された値と、前記提案された値に対する投票と、前記第1の提案識別子と、前記第1のステップ識別子とを送信したことを特徴とする請求項33に記載のコンピューティングデバイス。
  35. 前記提案された値をさらに選択することと、前記第1の提案識別子が以前に応答した提案識別子以上の場合、追加のメッセージを待つことなく、前記提案された値の選択を、前記提案された値を元々提案したクライアントコンピューティングデバイスに送信することとを特徴とする請求項33に記載のコンピューティングデバイス。
  36. 前記第1のシステムステップのための示唆された次の提案識別子をさらに受信することと、示唆された次の提案識別子応答を送信することであって、前記第1のシステムステップに対する投票が以前になされていない場合、前記示唆された次の提案識別子応答はヌルであり、前記第1のシステムステップに対する投票が以前になされている場合、前記示唆された次の提案識別子応答は、前記第1のシステムステップに対応して、以前に値に投票したことおよび以前に提案識別子に投票したことの指示を含むこととを特徴とする請求項33に記載のコンピューティングデバイス。
  37. 動作定足数の提案と、前記動作定足数の提案に対する投票と、第2の提案識別子と、第2のステップ識別子とをさらに受信することであって、前記動作定足数の提案に対する投票は、前記第2のステップ識別子によって識別された第2のシステムステップにおいて前記分散コンピューティングシステムの第2の定足数が前記動作定足数の提案を選択したかどうかを前記コンピューティングデバイスに判断できるようにし、前記第2の提案識別子が以前に応答した提案識別子以上の場合、前記動作定足数の提案を選択することと、前記動作定足数の提案の選択についての指示を送信することとを特徴とする請求項33に記載のコンピューティングデバイス。
  38. 前記分散コンピューティングシステムの前記第2の定足数は、前記コンピューティングデバイスと第2の送信デバイスとを備え、前記第2の送信デバイスは、前記動作定足数の提案と、前記動作定足数の提案に対する投票と、前記第2の提案識別子と、前記第2のステップ識別子とを送信しており、前記コンピューティングデバイスは、安価なコンピューティングデバイスであることを特徴とする請求項37に記載のコンピューティングデバイス。
JP2004368218A 2003-12-30 2004-12-20 簡略化されたpaxos Pending JP2005196763A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/750,600 US7711825B2 (en) 2003-12-30 2003-12-30 Simplified Paxos

Publications (1)

Publication Number Publication Date
JP2005196763A true JP2005196763A (ja) 2005-07-21

Family

ID=34574814

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004368218A Pending JP2005196763A (ja) 2003-12-30 2004-12-20 簡略化されたpaxos

Country Status (7)

Country Link
US (1) US7711825B2 (ja)
EP (1) EP1550951B1 (ja)
JP (1) JP2005196763A (ja)
KR (1) KR20050071358A (ja)
CN (1) CN1690968A (ja)
AT (1) ATE406614T1 (ja)
DE (1) DE602004016109D1 (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006155614A (ja) * 2004-11-23 2006-06-15 Microsoft Corp 一般化されたPaxos
JP2010277467A (ja) * 2009-05-29 2010-12-09 Nippon Telegr & Teleph Corp <Ntt> 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
JP2011253390A (ja) * 2010-06-02 2011-12-15 Trytech Co Ltd 分散コンピューティングシステム
JP2011253391A (ja) * 2010-06-02 2011-12-15 Trytech Co Ltd 分散コンピューティングシステム
JP2012033108A (ja) * 2010-08-02 2012-02-16 Trytech Co Ltd 分散コンピューティングシステムの処理方法
WO2012127652A1 (ja) * 2011-03-23 2012-09-27 株式会社日立製作所 計算機システム、データ処理方法、及びデータ処理プログラム
US8775500B2 (en) 2010-02-04 2014-07-08 Tritech Inc. Distributed computing system having leader signaled agents to execute task after data acquisition completion
WO2016067426A1 (ja) * 2014-10-30 2016-05-06 株式会社日立製作所 分散コンピューティングシステム及び分散処理方法

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7620680B1 (en) * 2002-08-15 2009-11-17 Microsoft Corporation Fast byzantine paxos
US7334154B2 (en) * 2004-06-18 2008-02-19 Microsoft Corporation Efficient changing of replica sets in distributed fault-tolerant computing system
US7856502B2 (en) * 2004-06-18 2010-12-21 Microsoft Corporation Cheap paxos
TWI416901B (zh) * 2005-11-30 2013-11-21 Ibm 故障容忍之異動處理系統
US8443372B2 (en) * 2006-03-23 2013-05-14 International Business Machines Corporation Methods and systems for partitioning data in parallel processing systems
US8046750B2 (en) * 2007-06-13 2011-10-25 Microsoft Corporation Disco: a simplified distributed computing library
US9477560B2 (en) * 2007-07-31 2016-10-25 Lenovo (Singapore) Pte. Ltd. Methods of creating a voting stop point on a distributed network
WO2010123553A1 (en) * 2009-04-21 2010-10-28 Acp Interactive, Llc Mobile grid computing
US8656392B2 (en) * 2009-06-10 2014-02-18 The Boeing Company Consensus based distributed task execution
US8290920B2 (en) * 2009-09-30 2012-10-16 Zynga Inc. System and method for remote updates
US20110178984A1 (en) * 2010-01-18 2011-07-21 Microsoft Corporation Replication protocol for database systems
US8825601B2 (en) * 2010-02-01 2014-09-02 Microsoft Corporation Logical data backup and rollback using incremental capture in a distributed database
US8694647B2 (en) * 2011-03-18 2014-04-08 Microsoft Corporation Read-only operations processing in a paxos replication system
US8849995B1 (en) * 2011-09-30 2014-09-30 Amazon Technologies, Inc. Managing host computing devices
CA2859163C (en) 2011-12-14 2020-03-31 Level 3 Communications, Llc Content delivery network
CN102981928B (zh) * 2012-10-30 2015-07-15 清华大学 一种状态机复制方法
CN103916426B (zh) * 2012-12-31 2017-06-27 北京新媒传信科技有限公司 一种paxos实例更新方法、设备及系统
CN103916419B (zh) * 2012-12-31 2017-08-04 北京新媒传信科技有限公司 一种paxos实例更新方法、设备及系统
CN103914313B (zh) * 2012-12-31 2017-06-27 北京新媒传信科技有限公司 一种paxos实例更新方法、设备及系统
CN103618700B (zh) * 2013-11-12 2016-12-07 曙光信息产业股份有限公司 服务器系统中领导者服务器的确定方法和服务器系统
US10083217B2 (en) * 2015-11-26 2018-09-25 International Business Machines Corporation Method and system for upgrading a set of replicated state machine processes
US9858011B2 (en) * 2015-12-16 2018-01-02 International Business Machines Corporation Repopulating failed replicas through modified consensus recovery
US10360095B2 (en) * 2016-03-31 2019-07-23 Change Healthcare Holdings, Llc Methods and apparatuses for improving failure recovery in a distributed system
CN109947727B (zh) * 2017-08-15 2023-06-13 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机设备和存储介质
US11132681B2 (en) 2018-07-06 2021-09-28 At&T Intellectual Property I, L.P. Services for entity trust conveyances
CN108924240B (zh) * 2018-07-19 2022-08-12 腾讯科技(深圳)有限公司 基于一致性协议的分布式处理方法、装置及存储介质
US10802872B2 (en) * 2018-09-12 2020-10-13 At&T Intellectual Property I, L.P. Task delegation and cooperation for automated assistants
US11481186B2 (en) 2018-10-25 2022-10-25 At&T Intellectual Property I, L.P. Automated assistant context and protocol

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6519697B1 (en) * 1999-11-15 2003-02-11 Ncr Corporation Method and apparatus for coordinating the configuration of massively parallel systems
US6671821B1 (en) * 1999-11-22 2003-12-30 Massachusetts Institute Of Technology Byzantine fault tolerance
US7113980B2 (en) * 2001-09-06 2006-09-26 Bea Systems, Inc. Exactly once JMS communication
US6826601B2 (en) * 2001-09-06 2004-11-30 Bea Systems, Inc. Exactly one cache framework
US7403996B2 (en) * 2002-02-21 2008-07-22 Bea Systems, Inc. Systems and methods for migratable services

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006155614A (ja) * 2004-11-23 2006-06-15 Microsoft Corp 一般化されたPaxos
JP2010277467A (ja) * 2009-05-29 2010-12-09 Nippon Telegr & Teleph Corp <Ntt> 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
US8775500B2 (en) 2010-02-04 2014-07-08 Tritech Inc. Distributed computing system having leader signaled agents to execute task after data acquisition completion
JP2011253390A (ja) * 2010-06-02 2011-12-15 Trytech Co Ltd 分散コンピューティングシステム
JP2011253391A (ja) * 2010-06-02 2011-12-15 Trytech Co Ltd 分散コンピューティングシステム
JP2012033108A (ja) * 2010-08-02 2012-02-16 Trytech Co Ltd 分散コンピューティングシステムの処理方法
US8745126B2 (en) 2010-08-02 2014-06-03 Tribeth Inc. Method of processing distributed computing system
WO2012127652A1 (ja) * 2011-03-23 2012-09-27 株式会社日立製作所 計算機システム、データ処理方法、及びデータ処理プログラム
JP5416863B2 (ja) * 2011-03-23 2014-02-12 株式会社日立製作所 計算機システム、データ処理方法、及びデータ処理プログラム
WO2016067426A1 (ja) * 2014-10-30 2016-05-06 株式会社日立製作所 分散コンピューティングシステム及び分散処理方法
US10489340B2 (en) 2014-10-30 2019-11-26 Hitachi, Ltd. Distributed computing system and distributed processing method

Also Published As

Publication number Publication date
EP1550951A2 (en) 2005-07-06
CN1690968A (zh) 2005-11-02
DE602004016109D1 (de) 2008-10-09
ATE406614T1 (de) 2008-09-15
EP1550951A3 (en) 2006-05-03
KR20050071358A (ko) 2005-07-07
US7711825B2 (en) 2010-05-04
US20050198106A1 (en) 2005-09-08
EP1550951B1 (en) 2008-08-27

Similar Documents

Publication Publication Date Title
JP2005196763A (ja) 簡略化されたpaxos
US7555516B2 (en) Fast Paxos recovery
US7249280B2 (en) Cheap paxos
JP4976661B2 (ja) Cheappaxos
US7558883B1 (en) Fast transaction commit
JP4986442B2 (ja) 一般化されたPaxos
US8005888B2 (en) Conflict fast consensus
Wang et al. Hadoop high availability through metadata replication
US7849223B2 (en) Virtually synchronous Paxos
US9794305B2 (en) Consistent messaging with replication
EP1617331A2 (en) Efficient changing of replica sets in distributed fault-tolerant computing system
EP2434729A2 (en) Method for providing access to data items from a distributed storage system
CN105426439A (zh) 一种元数据的处理方法和装置
Aguilera et al. Reconfiguring replicated atomic storage: A tutorial
JP5948933B2 (ja) ジョブ継続管理装置、ジョブ継続管理方法、及び、ジョブ継続管理プログラム
US20100322256A1 (en) Using distributed timers in an overlay network
US7240088B2 (en) Node self-start in a decentralized cluster
Dumitraş et al. Architecting and implementing versatile dependability
JP5449471B2 (ja) 共有データに対する更新処理の同期処理方法、データ共有システムおよびデータ共有プログラム
JP2022115672A (ja) 多重系処理システム及び多重系処理システムの制御方法
CN116107706A (zh) 分布式数据库的事务处理方法、装置、电子设备及存储介质
Nath Fault tolerance of the application manager in Vigne
JPH09204318A (ja) 計算機ネットワークにおけるチェックポイント取得時期決定方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071220

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100302

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100723