(57)【要約】【課題】  補助コンピューティング装置の集まりを使用して、フォールトトレラントな方法で動作可能な分散コンピューティングシステムを提供すること。【解決手段】  障害の発生した場合、少なくとも１つのメインコンピューティング装置および補助コンピューティング装置の一部または全てを備える、選択されたクォーラムの集合からの代替クォーラムを使用して、保留中のオペレーションを完了し、新しいクォーラムの集合を選択可能である。代替の手段として、少なくとも１つのメインコンピューティング装置および補助コンピューティング装置の一部または全てを備える、もう１つの状態マシンは、現在動作中のメインコンピューティング装置を備える新しいクォーラムを選択可能で、新しいクォーラムは次いで、保留中のオペレーションを完了することができ、他の状態マシンによって割り当てられた提案番号を使用して提案を継続的に選択可能である。【選択図】  図１１ｃ
2006004433.tif 000002
【特許請求の範囲】
【請求項１】
分散コンピューティングシステムにおいて値を選択するための方法であって、前記分散コンピューティングシステムは、前記値を選択するシステム状態マシン、および、前記システム状態マシンから分離したクォーラム選択状態マシンを実施し、１つまたは複数のメインコンピューティング装置および１つまたは複数の補助コンピューティング装置を備え、
前記分散コンピューティングシステムにおける第１の集合のコンピューティング装置に、第１の提案を提案するステップであって、前記第１の提案は、第１のクォーラム、前記第１のクォーラムのための第１のリーダーコンピューティング装置、および、前記第１のクォーラムおよび前記第１のリーダーコンピューティング装置に関連付けられた第１の提案番号を備え、前記第１のクォーラムは前記システム状態マシンを実施し、前記分散コンピューティングシステムのすべての動作可能なメインコンピューティング装置を備え、前記第１の集合のコンピューティング装置は、前記クォーラム選択状態マシンを実施し、前記分散コンピューティングシステムの少なくとも過半数のコンピューティング装置を備えるステップと、
第１の集合の投票応答を前記第１の集合のコンピューティング装置から受信するステップと、
前記第１の集合の投票応答が、前記第１の集合のコンピューティング装置から、前記分散コンピューティングシステムの少なくとも過半数のコンピューティング装置が前記第１の提案に投票していることを指示する場合、前記第１の提案の選択の通知を送信するステップと
を備えたことを特徴とする方法。
【請求項２】
前記第１の提案の前記選択の前記通知を受信した後、前記第１のクォーラムからの少なくとも１つのコンピューティング装置は、
最後に知られたシステムステップより大きいシステムステップのための前記第１の提案番号を提案するステップであって、前記最後に知られたシステムステップは、それについて前記少なくとも１つのコンピューティング装置が対応する値を記録している最大システムステップであるステップと、
１つまたは複数の提案応答を、１つまたは複数の応答側コンピューティング装置から受信するステップであって、各提案応答は、前記最後に知られたシステムステップより大きいシステムステップについて、最終投票情報、以前の提案応答情報、および既知の安全情報を備えるステップと、
前記第１のクォーラムに、前記１つまたは複数の提案応答を介して受信された前記最終投票情報および前記既知の安全情報から導出された、１つまたは複数の決定された安全値を備える、追加の既知の安全メッセージを送信するステップと
を備えたステップを実行することを特徴とする請求項１に記載の方法。
【請求項３】
前記最終投票情報は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票された最終値、および、前記最終値を提案するために使用された最終値提案番号を備え、前記最終値提案番号は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票されたもう１つの値に関連付けられたいかなる提案番号よりも大きく、
前記以前の提案応答情報は、前記応答側コンピューティング装置が以前に応答している最大提案番号を備え、
前記既知の安全情報は、前記応答側コンピューティング装置によって以前の追加の既知の安全メッセージにおいて受信された、以前に決定された安全値、および、前記以前の追加の既知の安全メッセージに対応する以前の安全提案番号を備え、前記以前の安全提案番号は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって受信されたもう１つの安全値に関連付けられたいかなる提案番号よりも大きく、
前記１つまたは複数の決定された安全値は、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記応答側コンピューティング装置によって投票された前記最終値、および、前記応答側コンピューティング装置によって受信された前記以前に決定された安全値のうち、１つまたは複数を備えることを特徴とする請求項２に記載の方法。
【請求項４】
前記第１の提案番号を提案する前記ステップは前記第１の提案番号を第２の集合のコンピューティング装置に提案するステップを備え、前記１つまたは複数の応答側コンピューティング装置は、前記第２の集合のコンピューティング装置からのものであり、前記第２の集合のコンピューティング装置は、前記第１の提案番号まで、前記１つまたは複数の応答側コンピューティング装置が以前に応答している前記最大提案番号の中で、全体の最大提案番号からの一連の提案番号について、前記１つまたは複数の応答側コンピューティング装置の少なくとも１つが、前記一連の提案番号に対応するクォーラム内に存在しているように、選択されることを特徴とする請求項３に記載の方法。
【請求項５】
ターゲットメインコンピューティング装置の障害を知覚するステップと、
クォーラム選択状態マシンコマンドを実行することによって、前記ターゲットメインコンピューティング装置の前記知覚された障害の指示をデータ構造に入力するステップであって、前記データ構造は、知覚側装置および前記ターゲットメインコンピューティング装置を相関させるステップと、
前記ターゲットメインコンピューティング装置を、前記データ構造に基づいて、動作可能なメインコンピューティング装置ではないと決定するステップと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項６】
前記第１の提案は、前記第１の提案番号だけ先行された第２の提案番号をさらに備え、前記第１の提案番号は高速提案番号であり、前記第２の提案番号は低速提案番号であることを特徴とする請求項１に記載の方法。
【請求項７】
分散コンピューティングシステムにおいて値を選択する方法であって、
最後に知られたシステムステップより大きいシステムステップのための第１の提案番号を提案するステップと、
１つまたは複数の提案応答を、１つまたは複数の応答側コンピューティング装置から受信するステップであって、各提案応答は、前記最後に知られたシステムステップより大きいシステムステップについて、最終投票情報、以前の提案応答情報、および既知の安全情報を備えるステップと、
第１のクォーラムに、前記１つまたは複数の提案応答を介して受信された前記最終投票情報および前記既知の安全情報から導出された、１つまたは複数の決定された安全値を備える、追加の既知の安全メッセージを送信するステップと
を備えたことを特徴とする方法。
【請求項８】
前記値はシステム状態マシンによって選択され、前記第１のクォーラムおよび前記第１の提案番号はクォーラム選択状態マシンによって選択されており、前記クォーラム選択状態マシンは前記システム状態マシンから分離することを特徴とする請求項７に記載の方法。
【請求項９】
前記最終投票情報は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票された最終値、および、前記最終値を提案するために使用された最終値提案番号を備え、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記最終値提案番号は、ステップ毎に基づいて、前記応答側コンピューティング装置によって投票されたもう１つの値に関連付けられたいかなる提案番号よりも大きく、
前記以前の提案応答情報は、前記応答側コンピューティング装置が以前に応答している最大提案番号を備え、
前記既知の安全情報は、前記応答側コンピューティング装置によって以前の追加の既知の安全メッセージにおいて受信された、以前に決定された安全値、および、前記以前の追加の既知の安全メッセージに対応する以前の安全提案番号を備え、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記以前の安全提案番号は、ステップ毎に基づいて、前記応答側コンピューティング装置によって受信されたもう１つの安全値に関連付けられたいかなる提案番号よりも大きく、
前記１つまたは複数の決定された安全値は、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記応答側コンピューティング装置によって投票された前記最終値、および、前記応答側コンピューティング装置によって受信された前記以前に決定された安全値のうち、１つまたは複数を含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記第１の提案番号を提案する前記ステップは前記第１の提案番号を第２の集合のコンピューティング装置に提案するステップを備え、前記１つまたは複数の応答側コンピューティング装置は、前記第２の集合のコンピューティング装置からのものであり、前記第２の集合のコンピューティング装置は、前記第１の提案番号まで、前記１つまたは複数の応答側コンピューティング装置が以前に応答している前記最大提案番号の中で、全体の最大提案番号からの一連の提案番号について、前記１つまたは複数の応答側コンピューティング装置の少なくとも１つが、前記一連の提案番号に対応するクォーラム内に存在しているように選択されることを特徴とする請求項９に記載の方法。
【請求項１１】
前記値が、前記１つまたは複数の決定された安全値のうち１つである場合、前記値を前記第１のクォーラムへ、前記第１の提案番号を使用して提案するステップと、
第１の集合の投票応答を前記第１のクォーラムから受信するステップと、
前記第１のクォーラムからの前記第１の集合の投票応答が、前記第１のクォーラム内のあらゆるコンピューティング装置が前記値に投票していることを指示する場合、前記値が選択されたと決定するステップと
をさらに備えたことを特徴とする請求項７に記載の方法。
【請求項１２】
前記第１のクォーラムからの前記第１の集合の投票応答が、前記第１のクォーラム内のあらゆるコンピューティング装置が前記値に投票していないことを指示する場合、クォーラム選択状態マシン内の１つまたは複数のコンピューティング装置に、前記クォーラム選択状態マシンを使用して第２のクォーラム、前記第２のクォーラムのための第２のリーダーコンピューティング装置、および、前記第２のクォーラムおよび前記第２のリーダーコンピューティング装置に関連付けられた第２の提案番号を選択するように要求するステップをさらに備え、前記第２の提案番号は、前記第１の提案番号だけ先行されることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第１のクォーラムへ、１つまたは複数のクライアントから直接受信された後続の値が、前記第１の提案番号に等しい提案番号を有する提案値として処理されるべきであると指示するステップと、
前記第１のクォーラムへ、前記後続の値への応答が前記１つまたは複数のクライアントに送信されるべきであると指示するステップと
をさらに備えたことを特徴とする請求項７に記載の方法。
【請求項１４】
分散コンピューティングシステムにおいて値を選択するためのコンピュータ実行可能命令を有するコンピュータ読み取り可能メディアであって、前記分散コンピューティングシステムは、前記値を選択するシステム状態マシン、および、前記システム状態マシンから分離したクォーラム選択状態マシンを実施し、１つまたは複数のメインコンピューティング装置および１つまたは複数の補助コンピューティング装置を備え、前記コンピュータ実行可能命令は、
前記分散コンピューティングシステムにおける第１の集合のコンピューティング装置に、第１の提案を提案するステップであって、前記第１の提案は、第１のクォーラム、前記第１のクォーラムのための第１のリーダーコンピューティング装置、および、前記第１のクォーラムおよび前記第１のリーダーコンピューティング装置に関連付けられた第１の提案番号を備え、前記第１のクォーラムは前記システム状態マシンを実施し、前記分散コンピューティングシステムのすべての動作可能なメインコンピューティング装置を備え、前記第１の集合のコンピューティング装置は、前記クォーラム選択状態マシンを実施し、前記分散コンピューティングシステムの少なくとも過半数のコンピューティング装置を備えるステップと、
第１の集合の投票応答を前記第１の集合のコンピューティング装置から受信するステップと、
前記第１の集合の投票応答が、前記第１の集合のコンピューティング装置から、前記分散コンピューティングシステムの少なくとも過半数のコンピューティング装置が前記第１の提案に投票していることを指示する場合、前記第１の提案の選択の通知を送信するステップと
を備えたステップを実行することを特徴とするコンピュータ読み取り可能メディア。
【請求項１５】
前記第１の提案の前記選択の前記通知を受信した後、前記第１のクォーラムからの少なくとも１つのコンピューティング装置は、
最後に知られたシステムステップより大きいシステムステップのための前記第１の提案番号を提案するステップであって、前記最後に知られたシステムステップは、それについて前記少なくとも１つのコンピューティング装置が対応する値を記録している最大システムステップであるステップと、
１つまたは複数の提案応答を、１つまたは複数の応答側コンピューティング装置から受信するステップであって、各提案応答は、前記最後に知られたシステムステップより大きいシステムステップについて、最終投票情報、以前の提案応答情報、および既知の安全情報を備えるステップと、
前記第１のクォーラムに、前記１つまたは複数の提案応答を介して受信された前記最終投票情報および前記既知の安全情報から導出された、１つまたは複数の決定された安全値を備える、追加の既知の安全メッセージを送信するステップと
を備えたステップを実行するためのさらなるコンピュータ実行可能命令を実行することを特徴とする請求項１４に記載のコンピュータ読み取り可能メディア。
【請求項１６】
前記最終投票情報は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票された最終値、および、前記最終値を提案するために使用された最終値提案番号を備え、前記最終値提案番号は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票されたもう１つの値に関連付けられたいかなる提案番号よりも大きく、
前記以前の提案応答情報は、前記応答側コンピューティング装置が以前に応答している最大提案番号を備え、
前記既知の安全情報は、前記応答側コンピューティング装置によって以前の追加の既知の安全メッセージにおいて受信された、以前に決定された安全値、および、前記以前の追加の既知の安全メッセージに対応する以前の安全提案番号を備え、前記以前の安全提案番号は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって受信されたもう１つの安全値に関連付けられたいかなる提案番号よりも大きく、
前記１つまたは複数の決定された安全値は、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記応答側コンピューティング装置によって投票された前記最終値、および、前記応答側コンピューティング装置によって受信された前記以前に決定された安全値のうち、１つまたは複数を含むことを特徴とする請求項１５に記載のコンピュータ読み取り可能メディア。
【請求項１７】
前記第１の提案番号を提案するための前記コンピュータ実行可能命令は、前記第１の提案番号を第２の集合のコンピューティング装置に提案するためのコンピュータ実行可能命令を備え、前記１つまたは複数の応答側コンピューティング装置は、前記第２の集合のコンピューティング装置からのものであり、前記第２の集合のコンピューティング装置は、前記第１の提案番号まで、前記１つまたは複数の応答側コンピューティング装置が以前に応答している前記最大提案番号の中で、全体の最大提案番号からの一連の提案番号について、前記１つまたは複数の応答側コンピューティング装置の少なくとも１つが、前記一連の提案番号に対応するクォーラム内に存在しているように、選択されることを特徴とする請求項１６に記載のコンピュータ読み取り可能メディア。
【請求項１８】
前記第１の提案番号を前記第１のクォーラムに提案するための前記コンピュータ実行可能命令は、前記第１の提案のハッシュを前記第１のクォーラムにおける１つまたは複数の補助コンピューティング装置に送信するためのコンピュータ実行可能命令を備えることを特徴とする請求項１４に記載のコンピュータ読み取り可能メディア。
【請求項１９】
ターゲットメインコンピューティング装置の障害を知覚するステップと、
クォーラム選択状態マシンコマンドを実行することによって、前記ターゲットメインコンピューティング装置の前記知覚された障害の指示をデータ構造に入力するステップであって、前記データ構造は、知覚側装置および前記ターゲットメインコンピューティング装置を相関させるステップと、
前記ターゲットメインコンピューティング装置を、前記データ構造に基づいて、動作可能なメインコンピューティング装置ではないと決定するステップと
を備えたステップを実行するためのさらなるコンピュータ実行可能命令を有することを特徴とする請求項１４に記載のコンピュータ読み取り可能メディア。
【請求項２０】
前記第１の提案は、前記第１の提案番号だけ先行された第２の提案番号をさらに備え、前記第１の提案番号は高速提案番号であり、前記第２の提案番号は低速提案番号であることを特徴とする請求項１４に記載のコンピュータ読み取り可能メディア。
【請求項２１】
分散コンピューティングシステムにおいて値を選択するためのコンピュータ実行可能命令を有するコンピュータ読み取り可能メディアであって、前記コンピュータ実行可能命令は、
最後に知られたシステムステップより大きいシステムステップのための第１の提案番号を提案するステップと、
１つまたは複数の提案応答を、１つまたは複数の応答側コンピューティング装置から受信するステップであって、各提案応答は、前記最後に知られたシステムステップより大きいシステムステップについて、最終投票情報、以前の提案応答情報、および既知の安全情報を備えるステップと、
第１のクォーラムに、前記１つまたは複数の提案応答を介して受信された前記最終投票情報および前記既知の安全情報から導出された、１つまたは複数の決定された安全値を備える、追加の既知の安全メッセージを送信するステップと
を備えたステップを実行することを特徴とするコンピュータ読み取り可能メディア。
【請求項２２】
前記値はシステム状態マシンによって選択され、前記第１のクォーラムおよび前記第１の提案番号はクォーラム選択状態マシンによって選択されており、前記クォーラム選択状態マシンは前記システム状態マシンから分離することを特徴とする請求項２１に記載のコンピュータ読み取り可能メディア。
【請求項２３】
前記最終投票情報は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票された最終値、および、前記最終値を提案するために使用された最終値提案番号を備え、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記最終値提案番号は、ステップ毎に基づいて、前記応答側コンピューティング装置によって投票されたもう１つの値に関連付けられたいかなる提案番号よりも大きく、
前記以前の提案応答情報は、前記応答側コンピューティング装置が以前に応答している最大提案番号を備え、
前記既知の安全情報は、前記応答側コンピューティング装置によって以前の追加の既知の安全メッセージにおいて受信された、以前に決定された安全値、および、前記以前の追加の既知の安全メッセージに対応する以前の安全提案番号を備え、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記以前の安全提案番号は、ステップ毎に基づいて、前記応答側コンピューティング装置によって受信されたもう１つの安全値に関連付けられたいかなる提案番号よりも大きく、
前記１つまたは複数の決定された安全値は、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記応答側コンピューティング装置によって投票された前記最終値、および、前記応答側コンピューティング装置によって受信された前記以前に決定された安全値のうち、１つまたは複数を含むことを特徴とする請求項２１に記載のコンピュータ読み取り可能メディア。
【請求項２４】
前記第１の提案番号を提案するための前記コンピュータ実行可能命令は、前記第１の提案番号を第２の集合のコンピューティング装置に提案するためのコンピュータ実行可能命令を備え、前記１つまたは複数の応答側コンピューティング装置は、前記第２の集合のコンピューティング装置からのものであり、前記第２の集合のコンピューティング装置は、前記第１の提案番号まで、前記１つまたは複数の応答側コンピューティング装置が以前に応答している前記最大提案番号の中で、全体の最大提案番号からの一連の提案番号について、前記１つまたは複数の応答側コンピューティング装置の少なくとも１つが、前記一連の提案番号に対応するクォーラム内に存在しているように、選択されることを特徴とする請求項２３に記載のコンピュータ読み取り可能メディア。
【請求項２５】
前記値が、前記１つまたは複数の決定された安全値のうち１つである場合、前記値を前記第１のクォーラムへ、前記第１の提案番号を使用して提案するステップと、
第１の集合の投票応答を前記第１のクォーラムから受信するステップと、
前記第１のクォーラムからの前記第１の集合の投票応答が、前記第１のクォーラム内のあらゆるコンピューティング装置が前記値に投票していることを指示する場合、前記値が選択されたと決定するステップと
を備えたステップを実行するためのさらなるコンピュータ実行可能命令を有することを特徴とする請求項２１に記載のコンピュータ読み取り可能メディア。
【請求項２６】
前記第１のクォーラムからの前記第１の集合の投票応答が、前記第１のクォーラム内のあらゆるコンピューティング装置が前記値に投票していないことを指示する場合、クォーラム選択状態マシン内の１つまたは複数のコンピューティング装置に、前記クォーラム選択状態マシンを使用して第２のクォーラム、前記第２のクォーラムのための第２のリーダーコンピューティング装置、および、前記第２のクォーラムおよび前記第２のリーダーコンピューティング装置に関連付けられた、前記第１の提案番号だけ先行する第２の提案番号を選択するように要求するためのさらなるコンピュータ実行可能命令を備えたことを特徴とする請求項２５に記載のコンピュータ読み取り可能メディア。
【請求項２７】
前記値は、システム状態マシンによって実行されるべきファンクションであり、前記システム状態マシンは前記第１のクォーラムによって実施されることを特徴とする請求項２５に記載のコンピュータ読み取り可能メディア。
【請求項２８】
前記第１のクォーラムへ、１つまたは複数のクライアントから直接受信された後続の値が、前記第１の提案番号に等しい提案番号を有する提案値として処理されるべきであると指示するステップと、
前記第１のクォーラムへ、前記後続の値への応答が前記１つまたは複数のクライアントに送信されるべきであると指示するステップと
を備えたステップを実行するためのさらなるコンピュータ実行可能命令を有することを特徴とする請求項２１に記載のコンピュータ読み取り可能メディア。
【請求項２９】
システム状態マシンから分離したクォーラム選択状態マシンに参加するメインコンピューティング装置であって、前記クォーラム選択状態マシンは分散コンピューティングシステムによって実施され、前記分散コンピューティングシステムは、１つまたは複数のメインコンピューティング装置および１つまたは複数の補助コンピューティング装置を備え、
前記分散コンピューティングシステムにおける第１の集合のコンピューティング装置に、第１の提案を提案するステップであって、前記第１の提案は、第１のクォーラム、前記第１のクォーラムのための第１のリーダーコンピューティング装置、および、前記第１のクォーラムおよび前記第１のリーダーコンピューティング装置に関連付けられた第１の提案番号を備え、前記第１のクォーラムは前記システム状態マシンを実施し、前記分散コンピューティングシステムのすべての動作可能なメインコンピューティング装置を備え、前記第１の集合のコンピューティング装置は、前記クォーラム選択状態マシンを実施し、前記分散コンピューティングシステムの少なくとも過半数のコンピューティング装置を備えるステップを備える、ステップを実行する処理装置と、
第１の集合の投票応答を前記第１の集合のコンピューティング装置から受信するステップと、
前記第１の集合の投票応答が、前記第１の集合のコンピューティング装置から、前記分散コンピューティングシステムの少なくとも過半数のコンピューティング装置が前記第１の提案に投票していることを指示する場合、前記第１の提案の選択の通知を送信するステップと
を含むステップを実行するネットワークインターフェイスと
を備えたことを特徴とするメインコンピューティング装置。
【請求項３０】
前記処理装置は、
ターゲットメインコンピューティング装置の障害を知覚するステップと、
クォーラム選択状態マシンコマンドを実行することによって、前記ターゲットメインコンピューティング装置の前記知覚された障害の指示をデータ構造に入力するステップであって、前記データ構造は、知覚側装置および前記ターゲットメインコンピューティング装置を相関させるステップと、
前記ターゲットメインコンピューティング装置を、前記データ構造に基づいて、動作可能なメインコンピューティング装置ではないと決定するステップと
を備えたさらなるステップを実行することを特徴とする請求項２９に記載のメインコンピューティング装置。
【請求項３１】
前記第１の提案は、前記第１の提案番号だけ先行された第２の提案番号をさらに備え、前記第１の提案番号は高速提案番号であり、前記第２の提案番号は低速提案番号であることを特徴とする請求項２９に記載のメインコンピューティング装置。
【請求項３２】
分散コンピューティングシステムにおけるコンピューティング装置であって、
最後に知られたシステムステップより大きいシステムステップのための第１の提案番号を提案するステップを含むステップを実行する処理装置と、
１つまたは複数の提案応答を、１つまたは複数の応答側コンピューティング装置から受信するステップであって、各提案応答は、前記最後に知られたシステムステップより大きいシステムステップについて、最終投票情報、以前の提案応答情報、および既知の安全情報を備えるステップと、
第１のクォーラムに、前記１つまたは複数の提案応答を介して受信された前記最終投票情報および前記既知の安全情報から導出された、１つまたは複数の決定された安全値を備える、追加の既知の安全メッセージを送信するステップと
を含むステップを実行するネットワークインターフェイスと
を備えたことを特徴とするコンピューティング装置。
【請求項３３】
前記コンピューティング装置は、システム状態マシンの選択されたリーダーコンピューティング装置であり、前記コンピューティング装置、前記第１のクォーラムおよび前記第１の提案番号はクォーラム選択状態マシンによって選択されており、前記クォーラム選択状態マシンは前記システム状態マシンから分離することを特徴とする請求項３２に記載のコンピューティング装置。
【請求項３４】
前記最終投票情報は、前記最後に知られたシステムステップより大きい前記システムステップの各々のために前記応答側コンピューティング装置によって投票された最終値、および、前記最終値を提案するために使用された最終値提案番号を備え、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記最終値提案番号は、ステップ毎に基づいて、前記応答側コンピューティング装置によって投票されたもう１つの値に関連付けられたいかなる提案番号よりも大きく、
前記以前の提案応答情報は、前記応答側コンピューティング装置が以前に応答している最大提案番号を備え、
前記既知の安全情報は、前記応答側コンピューティング装置によって以前の追加の既知の安全メッセージにおいて受信された、以前に決定された安全値、および、前記以前の追加の既知の安全メッセージに対応する以前の安全提案番号を備え、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記以前の安全提案番号は、ステップ毎に基づいて、前記応答側コンピューティング装置によって受信されたもう１つの安全値に関連付けられたいかなる提案番号よりも大きく、
前記１つまたは複数の決定された安全値は、前記最後に知られたシステムステップより大きい前記システムステップの各々について、前記応答側コンピューティング装置によって投票された前記最終値、および、前記応答側コンピューティング装置によって受信された前記以前に決定された安全値のうち、１つまたは複数を含むことを特徴とする請求項３２に記載のコンピューティング装置。
【請求項３５】
前記処理装置は、前記第１の提案番号を提案するとき、前記第１の提案番号を第２の集合のコンピューティング装置に提案するステップを含むステップを実行し、前記１つまたは複数の応答側コンピューティング装置は、前記第２の集合のコンピューティング装置からのものであり、前記第２の集合のコンピューティング装置は、前記第１の提案番号まで、前記１つまたは複数の応答側コンピューティング装置が以前に応答している前記最大提案番号の中で、全体の最大提案番号からの一連の提案番号について、前記１つまたは複数の応答側コンピューティング装置の少なくとも１つが、前記一連の提案番号に対応するクォーラム内に存在しているように、選択されることを特徴とする請求項３４に記載のコンピューティング装置。
【請求項３６】
前記処理装置は、前記値が前記１つまたは複数の決定された安全値のうち１つである場合、前記値を前記第１のクォーラムへ、前記第１の提案番号を使用して提案するステップと、前記第１のクォーラムからの第１の集合の投票応答が、前記第１のクォーラム内のあらゆるコンピューティング装置が前記値に投票していることを指示する場合、前記値が選択されたと決定するステップとを含むさらなるステップを実行し、前記ネットワークインターフェイスはさらに、前記第１の集合の投票応答を前記第１のクォーラムから受信するステップを含むさらなるステップを実行することを特徴とする請求項３２に記載のコンピューティング装置。
【請求項３７】
前記処理装置は、前記第１のクォーラムからの前記第１の集合の投票応答が、前記第１のクォーラム内のあらゆるコンピューティング装置が前記値に投票していないことを指示する場合、クォーラム選択状態マシン内の１つまたは複数のコンピューティング装置に、前記クォーラム選択状態マシンを使用して第２のクォーラム、前記第２のクォーラムのための第２のリーダーコンピューティング装置、および、前記第２のクォーラムおよび前記第２のリーダーコンピューティング装置に関連付けられた第２の提案番号を選択するように要求するステップを含むさらなるステップを実行し、前記第２の提案番号は、前記第１の提案番号だけ先行されることを特徴とする請求項３６に記載のコンピューティング装置。
【請求項３８】
前記ネットワークインターフェイスは、
前記第１のクォーラムへ、１つまたは複数のクライアントから直接受信された後続の値が、前記第１の提案番号に等しい提案番号を有する提案値として処理されるべきであると指示するステップと、
前記第１のクォーラムへ、前記後続の値への応答が前記１つまたは複数のクライアントに送信されるべきであると指示するステップと
を備えたさらなるステップを実行することを特徴とする請求項３２に記載のコンピューティング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に分散コンピューティングに関し、より詳細には、メインおよび補助装置の両方を使用するフォールトトレラント分散コンピューティングに関する。
【背景技術】
【０００２】
パーソナルコンピューティング装置がより強力になり、ストレージスペースおよび処理機能が増しているので、平均的なユーザーは、日常のタスクの実行においてこれらのリソースのうちますます僅かな割合しか消費していない。したがって、今日のパーソナルコンピューティング装置の多数はしばしば、それらの全潜在能力まで使用されず、これは、それらの計算能力が、大部分のユーザーが出す要求を大幅に超えるからである。強力な現代のパーソナルコンピューティング装置の未使用リソースから用途および価値を導出する、ますます普及している方法は、分散コンピューティングシステムであり、このシステムでは、コンピューティング装置は互いに協力して動作して、データおよび計算リソースへのより信頼性のあるアクセスを提供する。
【０００３】
余剰計算能力を使用するための有用なメカニズムを提供することに加えて、分散システムはまた、より大きく、より高価なコンピューティング装置のパフォーマンスおよびストレージ能力を達成するために、専用の安価なコンピューティング装置から構成されることも可能である。分散システムは、単一のより大きいコンピューティング装置を損なわせる物理的に困難な状況においても動作し続ける能力を有するという点で優れている。ここでの困難な状況には、長期間の停電、悪天気、洪水、テロリズムなどが含まれる場合がある。
【０００４】
個々のメンバコンピューティング装置がネットワークから切断されるようになる、電源を切られるようになる、システム誤動作を受けるようになる、またはそうでない場合は使用不可になる可能性のある、リスクの増大を補償するため、冗長性を使用して、分散コンピューティングシステムの動作を維持可能にする。したがって、いずれか１つのパーソナルコンピューティング装置上に格納された情報を、少なくとも１つの追加のパーソナルコンピューティング装置上に冗長的に格納して、パーソナルコンピューティング装置の１つに障害が起こる場合でも、情報へアクセス可能な状態を維持することを可能にする。
【０００５】
分散コンピューティングシステムは完全冗長性を実施することができ、これにおいて、システム内のあらゆる装置は等しいタスクを実行し、等しい情報を格納する。このようなシステムは、装置のうち１つだけ除いて全部に障害が起こるべきである場合でも、ユーザーが有用なオペレーションを実行し続けることを可能にすることができる。代替として、このようなシステムを使用して、同じ情報の複数のコピーを地理的領域の全体に分散させることを可能にすることができる。例えば、多国籍企業は、世界的な分散コンピューティングシステムを確立することができる。
【０００６】
しかし、分散コンピューティングシステムは、システムを備える個々の装置を適切に同期させる複雑さにより、維持することが困難である場合がある。個々のプロセスに渡って計時することは、よくても困難である可能性があるので、状態マシンの手法が、個々の装置の間でアクティビティを調整するためにしばしば使用される。状態マシンを、状態の集合、コマンドの集合、応答の集合、および、各応答／状態のペアを各コマンド／状態のペアにリンクさせるクライアントコマンドによって、記述することができる。状態マシンは、その状態を変更して応答を作成することによって、コマンドを実行することができる。したがって、状態マシンを、その現在の状態およびそれがまさに実行しようとしているアクションによって、完全に記述することができ、正確な計時を使用する必要性がなくなる。
【０００７】
状態マシンの現在の状態は、したがって、その以前の状態、それ以来に実行されたコマンド、および、これらのコマンドが実行された順序によって決まる。２つ以上の状態マシンの間で同期を維持するため、共通の初期状態を確立することができ、各状態マシンは、その初期状態で開始して、等しいコマンドを等しい順序で実行することができる。したがって、ある状態マシンを別の状態マシンに同期させるため、他の状態マシンによって実行されたコマンドの決定が行われる必要がある。同期の問題は、したがって、実行されたコマンドの順序を決定する、または具体的には、所与のステップについて実行された特定のコマンドを決定する問題となる。
【０００８】
どのコマンドが所与のステップについて実行されるべきであるかを決定するための１つのメカニズムは、Ｐａｘｏｓアルゴリズムとして知られる。Ｐａｘｏｓアルゴリズムでは、個々の装置のいずれかはリーダーの役割をし、システム内のあらゆる装置による実行のために所与のクライアントコマンドを提案するように求めることができる。あらゆるこのような提案を提案番号と共に送信して、提案をより容易に追跡することができる。このような提案番号は、それについて装置が実行するべきコマンドに合意しようと試みている特定のステップとのいかなる関係も有する必要はない。最初にリーダーは、リーダーがサブミットしようと意図する提案のための提案番号を推奨することができる。残りの各装置は次いで、リーダーの提案番号の推奨に、それらの装置が投票した最後の提案の指示、または、それらの装置がいかなる提案にも投票していないという指示により、応答することができる。様々な応答を通じて、リーダーが、装置によって投票された他のいかなる提案をも知らない場合、リーダーは、以前のメッセージ内で推奨された提案番号を使用して、所与のクライアントコマンドが装置によって実行されることを提案することができる。各装置は、その段階で、アクションに投票するか、アクションを拒否するかを判断することができる。装置は、別のリーダーのより高い提案番号の推奨に応答している場合にのみ、アクションを拒否するべきである。クォーラムとして知られる十分な数の装置が提案に投票する場合、提案されたアクションは、合意されていると言われ、各装置はそのアクションを実行し、結果を送信することができる。このように、各装置はアクションを同じ順序で実行し、同じ状態をすべての装置の間で維持することができる。
【０００９】
一般に、Ｐａｘｏｓアルゴリズムを２つのフェーズにおいて考えることができ、最初のフェーズは、上述のように、リーダーが、装置によって投票された以前の提案を知ることを可能にし、第２のフェーズでは、リーダーは実行のためのクライアントコマンドを提案することができる。リーダーが以前の提案を知った後、第１のフェーズを継続的に繰り返す必要はない。その代わりに、リーダーは第２のフェーズを継続的に繰り返し、分散コンピューティングシステムによって複数のステップで実行することができる一連のクライアントコマンドを提案することができる。このように、分散コンピューティングシステムによって各ステップについて実行された各クライアントコマンドを、Ｐａｘｏｓアルゴリズムの１つのインスタンスとして考えることができるが、リーダーは、次のステップのための別のクライアントコマンドを提案する前に、装置が所与のステップのために提案されたクライアントコマンドに投票することを待機する必要はない。
【００１０】
分散コンピューティングシステムを、全体として、状態マシンとしてモデリングすることができる。したがって、完全冗長性を実施する分散コンピューティングシステムは、各装置に、システム全体の状態をレプリケートさせることができる。このようなシステムは、各装置が同じ状態を維持することを必要とする。いくつかの装置は、あるクライアントコマンドが実行されたと考えるが、第２のグループの装置は、異なるクライアントコマンドが実行されたと考える場合、システム全体はもはや単一の状態マシンとして動作しない。このような状況を回避するため、過半数の装置は一般に、システムによる実行のために提案されたクライアントコマンドを選択するように、要求されることが可能である。それぞれ過半数を有する、いかなる２つのグループの装置も、少なくとも１つの装置を共有しなければならないので、Ｐａｘｏｓアルゴリズムなどのメカニズムを実施することができ、このメカニズムは少なくとも１つの共通装置に依拠して、それぞれ過半数の装置を含む２つのグループが、異なる提案されたクライアントコマンドを選択することを妨げることができる。
【００１１】
しかし、Ｐａｘｏｓアルゴリズムは、相当な数のコンピューティング装置が障害を許容し、適切に動作し続けることを必要とする。具体的には、ある数の障害を許容することができるシステムを実施するために、Ｐａｘｏｓアルゴリズムは、その数の２倍を超えるコンピューティング装置を使用して、このシステムを実施する。コンピューティング装置は継続的に、より大きい処理およびストレージ機能を、常に減少するコストで提供するが、それに対してシステムが設計されるようになる障害の最大数の２倍を越えるコンピューティング装置を購入するための不本意さが残る。しばしば、このような多数のコンピューティング装置は、最終的に費用を承認しなければならない者にとって、非効率的に見える。
【００１２】
【特許文献１】２００２年６月２８日に出願した「Fast Transaction Commit」という名称の同時係属の米国特許出願第１０／１８４７６７号明細書
【非特許文献１】"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 Part-Time Parliament" by Leslie Lamport, published in ACM Transactions on Computer Systems, volume 16, number 2 on pages 133-169, dated May 1998
【発明の開示】
【発明が解決しようとする課題】
【００１３】
したがって、本発明の一実施形態では、システムは、それに対してシステムが設計されるようになる障害の最大数を１つだけ超えるコンピューティング装置を有するメインコンピューティング装置の集まりを、メインコンピューティング装置の１つまたは複数の障害の場合に使用することができる補助コンピューティング装置の集まりと共に使用する、修正されたＰａｘｏｓアルゴリズムを実施することができる。
【課題を解決するための手段】
【００１４】
もう１つの実施形態では、修正されたＰａｘｏｓアルゴリズムが提示され、このアルゴリズムでは、メインコンピューティング装置のクォーラムを、メインコンピューティング装置の１つが障害を経験するまで使用することができ、この障害において、リーダーは、少なくとも１つのメインコンピューティング装置および十分な数の補助コンピューティング装置を備える別のクォーラムを使用することができ、これは、コマンドを選択するため、および、新しいクォーラムの集合を選択するためであり、新しいクォーラムの集合は、現在機能中のメインコンピューティング装置のすべて、または、その過半数が少なくとも１つのメインコンピューティング装置を含む限り、コンピューティング装置のすべてのいずれかの過半数からなる。
【００１５】
さらなる実施形態では、修正されたＰａｘｏｓアルゴリズムが提示され、このアルゴリズムでは、メインコンピューティング装置のクォーラムによって実施された１つの状態マシンを、メインコンピューティング装置の１つが障害を経験するまで使用することができ、この障害において、メインまたは補助の十分な数のコンピューティング装置を備える別の状態マシンを使用して、現在機能中のメインコンピューティング装置を備える第１の状態マシンのための新しいクォーラムを選択することができる。
【００１６】
なおさらなる実施形態では、補助コンピューティング装置にかけられる負担を、補助コンピューティング装置によって実行される処理を制限することによって、および、完全コマンドではなく提案されたコマンドのハッシュ値を格納することを含む、補助コンピューティング装置によって格納される情報量を制限することによって、さらに減らすことができる。
【００１７】
本明細書の説明は主として、分散コンピューティングシステム内のコンピューティング装置のオペレーションを中心とするが、この説明は、別々のプロセッサ上または別々のメモリスペース内など、単一のコンピューティング装置上で実行するプロセスに等しく適用可能であることは理解されよう。したがって、追加の実施形態には、複数のプロセッサが物理的に１つまたは複数のコンピューティング装置内に位置するかどうかにかかわらず、複数のプロセッサ環境内、および、複数の仮想マシンが１つまたは複数のコンピューティング装置によって実行されているかどうかにかかわらず、複数の仮想マシン環境内での、修正されたＰａｘｏｓアルゴリズムのオペレーションが含まれる。本発明の追加の特徴および利点は、添付の図面を参照して進行する、以下の例示的実施形態の詳細な説明から明らかとなる。
【００１８】
付属の特許請求の範囲は本発明の特徴を詳細に示すが、本発明は、その目的および利点と共に、以下の詳細な説明が添付の図面と共に解釈されることから、最良に理解することができる。
【発明を実施するための最良の形態】
【００１９】
分散コンピューティングシステムは、いくつかの個々のパーソナルコンピューティング装置、サーバーコンピューティング装置、または、システム内に参加するために十分なプロセッサおよびストレージ能力を有する他の装置を備えることができる。分散コンピューティングシステムは、その構成するコンピューティング装置の能力を集約して、大幅に増大した処理機能およびストレージスペースを提供するか、あるいは、冗長性を実施して、複数の装置が同じ情報へのアクセスを提供することを可能にすることができる。このように、分散コンピューティングシステムのための１つの共通の使用は、共通ネットワークに接続された多数の異なるパーソナルコンピューティング装置の未使用の処理機能およびストレージスペースの集約である。このような分散コンピューティングシステムは、どの装置が現在システムの一部であるか、および、どの装置上に所与の情報の集合が格納されるかなど、システムに関する情報を維持することができる。この情報は、装置がそれらの機能およびストレージスペースを集約するために必要である可能性があり、結果として、各装置はコピーを含むことができる。システムの複数の装置の間の情報の同期を、後述の状態マシンの手法を通じて容易にすることができる。
【００２０】
代替として、分散コンピューティングシステムについてのますます共通の使用は、様々な形態の情報のための中央ストレージリポジトリの役割をすることができる、ネットワークサーバーの使用である。このような分散システムは、その構成する装置のすべての上の中央ストアをレプリケートして、中央ストレージと通信しようとするあらゆるクライアントが、通信する相手である好都合で効率的な装置を発見することができるようにしようとする。さらに、システムの分散の性質のため、停電、洪水、政情不安など、ローカルのイベントは少数のコンピューティング装置のみに影響を与える可能性があり、システム全体が適切に動作し続け、情報へのアクセスおよび他のサービスをクライアントに提供し続けることが可能となる。
【００２１】
このような分散コンピューティングシステムを状態マシンとして考えることができ、マシンの将来の状態は、現在の状態および取られるべきアクションによって定義される。分散コンピューティングシステムの各構成装置は次いで、システム全体の状態マシンを独立して実行することができる。状態マシンの手法を非同期的に実施することができ、複数の構成装置に渡る正確な共時性が維持される必要がなくなり、装置の間の同期を、装置のすべてのための初期状態を設定すること、および、続いて同じファンクションを同じ順序で実行することによって達成することができるようになる。同期を維持するための一般の方法は、分散コンピューティングシステムの構成装置がすべて、そのファンクションを実行する前に次のファンクションに合意すること、および、実行されたファンクションのリストを維持することを、可能にすることである。このように、あらゆる装置は同じ状態を有することができ、装置に障害が起こる場合、装置は、実行した最後のファンクションを決定し、リストから、その最後のファンクション以来合意されているいかなるファンクションをも識別し、これらのファンクションを実行することのみが必要である。
【００２２】
サーバーの役割をする分散コンピューティングシステムは特に、多国籍企業のための中央データベース、またはよく知られているワールドワイドウェブサイトなど、クライアントの多様な集合に大量の情報をサービスするために有用である可能性がある。このような状況では、多数のクライアントは、サーバーの役割をする分散コンピューティングシステムから情報を要求することができる。サーバー機能性を複数の装置に渡って実施することによって、より多くのクライアントに並行してサービスして、それにより、システム全体のスループットを増すことができ、サーバーは全体として、冗長性が増すために、障害の発生する傾向がはるかに低い。
【００２３】
構成コンピューティング装置が実行するべき次のファンクションに合意することができる１つのメカニズムは、Ｐａｘｏｓアルゴリズムとして知られる。Ｐａｘｏｓアルゴリズムでは、以下でさらに説明するように、いかなる装置もリーダーの役割をすることができ、提案番号のための推奨を分散コンピューティングシステム内の他の装置に送信することができる。他の装置は、それに対してその装置がすでに投票している最大提案番号を有する提案の指示、または、その装置がいかなる以前の提案にも投票していないという指示により、応答することができる。リーダーが応答を他の装置から受信した後、リーダーは、どのファンクションを提案するべきかを決定し、提案されたファンクションへの投票を要求することができる。各装置は、提案の最初の送信の後、および、要求された投票に先立つある時間に、より高い提案番号のための推奨に応答していない限り、提案に投票するようになる。装置のクォーラムが提案に投票する場合、提案は受け入れられ、リーダーはメッセージをすべての装置に送信し、すべての装置が合意されたファンクションを実行することを要求することができる。
【００２４】
Ｐａｘｏｓアルゴリズムは、しかし、いかなる他のコンセンサスアルゴリズムとも同様に、多数のコンピューティング装置が障害を許容することを必要とする。具体的には、Ｆ数の障害を許容するために、このアルゴリズムは、少なくとも２Ｆ＋１数のコンピューティング装置を備える分散コンピューティングシステムを必要とする。これらの装置のうち、単純な過半数のみが、コマンドを選択してシステムの適切なオペレーションを継続するために必要とされる。残りの装置は、コマンドを選択してシステムを動作する装置のうち１つに障害が起こるまで、未使用のまま残る可能性がある。
【００２５】
したがって、Ｆ＋１数のメインコンピューティング装置のみを有する分散コンピューティングシステムは、障害が発生する場合に追加のＦ個の補助コンピューティング装置が使用可能である場合、Ｆ個の障害を許容することができる。以下で詳細に示すように、メインコンピューティング装置は、メインコンピューティング装置の１つに障害が起こるまで、コマンドを選択してシステムを動作することができる。続いて、リーダーは少なくとも１つのメインコンピューティング装置、および、補助コンピューティング装置の一部または全部を使用して、障害に先立ってメインコンピューティング装置のシステムのオペレーションを完了し、現在動作中のメインコンピューティング装置を含む新しいシステムを選択して、コマンドを提案および選択し続けることができる。代替として、メインまたは補助の十分な数のコンピューティング装置を備えるもう１つの状態マシンは、現在動作中のメインコンピューティング装置の新しいシステムを選択して、障害が発生したときに保留中であったオペレーションを完了し、コマンドを提案および選択し続けることができる。
【００２６】
分散コンピューティング環境
図面において類似の参照番号は類似の要素を指し、図面を見ると、本発明は、図１に示す例示的分散コンピューティングシステム１０など、分散コンピューティングシステムによって実施されるとして例示される。提示を容易にするためにのみ、本発明を、システム１０などの分散コンピューティングシステムを参照して説明し、システム１０は、図１に示すように相互接続されたコンピューティング装置１１ないし１５を備える。当業者には理解されるように、本発明はすべての分散コンピューティング環境に適用可能であり、決して図１の例示的分散コンピューティングシステムによって限定されるように意図されず、図１の例示的分散コンピューティングシステムは提示のために簡略化されている。
【００２７】
図１はまた、単一のクライアントコンピューティング装置２０も例示するが、本発明は、いかなる数のクライアントコンピューティング装置を有する環境においても動作するように意図される。クライアントコンピューティング装置２０は、分散コンピューティングシステム１０への汎用通信接続を有するとして例示される。当業者には知られるように、このような通信接続はいかなる通信メディアおよびブロトコルを使用することもでき、クライアントコンピューティング装置２０が分散コンピューティングシステム１０内のコンピューティング装置の１つまたは複数と通信することを可能にすることができる。
【００２８】
加えて、図１はコンピューティング装置３０および３１を例示し、これらのコンピューティング装置は分散コンピューティングシステム１０の一部として示されないが、これらもまたシステム１０への汎用通信接続を維持する。上記のように、この通信接続はいかなる通信メディアおよびブロトコルを使用することもでき、コンピューティング装置３０および３１が分散コンピューティングシステム１０内のコンピューティング装置の１つまたは複数と通信することを可能にすることができる。以下でさらに詳細に説明するように、コンピューティング装置３０および３１は、システム１０の一部になることなく、システム１０によって実行された実行の結果を知ることができる。代替として、コンピューティング装置３０および３１は、システム１０によって選択されたファンクションを知ることができ、そのファンクションをそれら自体で実行して、それにより独立してシステム１０内の装置と同じ状態を維持することができる。
【００２９】
必要ではないが、本発明を一般に、プログラムモジュールなど、コンピューティング装置によって実行されるコンピュータ実行可能命令に関連して説明する。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データ型を実装する。また、本発明を多数の異なるコンピューティング装置により実施することができ、これらの装置には、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルコンシューマエレクトロニクス、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどが含まれることは、当業者には理解されよう。上述のように、本発明をまた、分散コンピューティングシステム１０など、分散コンピューティング環境において実施することもでき、この環境では、タスクは、通信ネットワークを通じてリンクされるリモート処理装置によって実行される。分散コンピューティング環境では、プログラムモジュールはローカルおよびリモートのメモリストレージ装置内に位置することができる。
【００３０】
図２を見ると、本発明を実施することができる例示的コンピューティング装置１００が示される。コンピューティング装置１００は適切なコンピューティング装置の一例でしかなく、本発明の使用または機能性の範囲についてのいかなる限定をも示唆するように意図されない。例えば、例示的コンピューティング装置１００は、図１に例示されたコンピューティング装置１１〜１５、２０または３０〜３１のいずれかを厳密に表すように意図されない。例示的コンピューティング装置１００は、メモリパーティション、仮想マシン、複数のプロセッサ、または、１つの物理的コンピューティング構造が複数のコンピューティング装置によって生じる後述のアクションを実行することを可能にする類似のプログラミング技術などを通じて、１つまたは複数のこれらのコンピューティング装置を実施することができる。さらに、コンピューティング装置１００は、図２に例示した周辺装置のいずれか１つまたは組み合わせに関係するいかなる依存性または要件をも有するとして解釈されるべきではない。
【００３１】
本発明を一般に、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令に関連して説明することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データ型を実装する。分散コンピューティング環境では、タスクを、通信ネットワークを通じてリンクされるリモート処理装置によって実行することができる。分散コンピューティング環境では、プログラムモジュールは、メモリストレージ装置を含む、ローカルおよびリモートのコンピュータストレージメディア内に位置することができる。
【００３２】
コンピューティング装置１００のコンポーネントには、それだけに限定されないが、処理装置１２０、システムメモリ１３０、および、システムメモリを含む様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１が含まれる場合がある。システムバス１２１は、いくつかのタイプのバス構造のいずれかにすることができ、これらのバス構造には、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスが含まれる。例として、限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｅ（ＶＥＳＡ）ローカルバス、および、メザニンバスとしても知られるＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスが含まれる。さらに、処理装置１２０は１つまたは複数の物理プロセッサを含むことができる。
【００３３】
コンピューティング装置１００には通常、様々なコンピュータ読み取り可能メディアが含まれる。コンピュータ読み取り可能メディアは、コンピューティング装置１００によってアクセスすることができるいかなる使用可能なメディアにすることもでき、揮発性および不揮発性のメディア、リムーバブルおよび固定のメディアが含まれる。例として、限定ではなく、コンピュータ読み取り可能メディアは、コンピュータストレージメディアおよび通信メディアを備えることができる。コンピュータストレージメディアには、揮発性および不揮発性、リムーバブルおよび固定のメディアが含まれ、これらのメディアは、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたは他のデータなど、情報の格納のためのいずれかの方法または技術において実施される。コンピュータストレージメディアには、それに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージ装置、または、所望の情報を格納するために使用することができ、コンピューティング装置１００によってアクセスすることができる他のいかなるメディアもが含まれる。通信メディアは通常、搬送波などの変調データ信号もしくは他の移送メカニズムにおける、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたは他のデータを実施し、いかなる情報配信メディアをも含む。「変調データ信号」という用語は、信号における情報を符号化するような方法でその特性の１つまたは複数が設定または変更されている信号を意味する。例として、限定ではなく、通信メディアには、有線ネットワークまたは直接有線接続などの有線メディア、ならびに、音響、ＲＦ、赤外線および他の無線メディアなどの無線メディアが含まれる。上記のいずれの組み合わせもまた、コンピュータ読み取り可能メディアの範囲内に含まれるべきである。
【００３４】
システムメモリ１３０には、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２など、揮発性および／または不揮発性メモリの形態における、コンピュータストレージメディアが含まれる。基本入出力システム１３３（ＢＩＯＳ）は、起動中など、コンピューティング装置１００内の複数の要素の間で情報を転送する助けとなる基本ルーチンを含み、通常はＲＯＭ１３１に格納される。ＲＡＭ１３２は通常、処理装置１２０によって即時アクセス可能および／または現在操作されるデータおよび／またはプログラムモジュールを含む。例として、限定ではなく、図２は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７を例示する。
【００３５】
コンピューティング装置１００にはまた、他のリムーバブル／固定、揮発性／不揮発性のコンピュータストレージメディアが含まれる場合もある。例としてのみ、図２は、固定、不揮発性の磁気メディアに対する読み書きを行うハードディスクドライブ１４１、リムーバブル、不揮発性の磁気ディスク１５２に対する読み書きを行う磁気ディスクドライブ１５１、および、ＣＤ−ＲＯＭまたは他の光メディアなど、リムーバブル、不揮発性の光ディスク１５６に対する読み書きを行う光ディスクドライブ１５５を例示する。例示的オペレーティング環境で使用することができる他のリムーバブル／固定、揮発性／不揮発性のコンピュータストレージメディアには、それだけに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は通常、システムバス１２１に、インターフェイス１４０などの固定メモリインターフェイスを通じて接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、システムバス１２１に、インターフェイス１５０など、リムーバブルメモリインターフェイスによって接続される。
【００３６】
上述および図２に例示したドライブおよびそれらの関連付けられたコンピュータストレージメディアは、コンピューティング装置１００用のコンピュータ読み取り可能命令、データ構造、プログラムモジュールおよび他のデータのストレージを提供する。図２では、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を格納するとして例示される。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７と同じものにも異なるものにもすることができることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７にはここで異なる番号が与えられて、最低でもそれらが異なるコピーであることが例示される。ユーザーはコマンドおよび情報をコンピューティング装置１００へ、キーボード１６２、および、一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティング装置１６１などの入力装置を通じて入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが含まれる場合がある。これらおよび他の入力装置はしばしば処理装置１２０へ、システムバスに結合されるユーザー入力インターフェイス１６０を通じて接続されるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）など、他のインターフェイスおよびバス構造によって接続される場合がある。モニタ１９１または他のタイプの表示装置もまたシステムバス１２１へ、ビデオインターフェイス１９０などのインターフェイスを介して接続される。モニタに加えて、コンピュータにはまた、出力周辺インターフェイス１９５を通じて接続することができる、スピーカ１９７およびプリンタ１９６など、他の周辺出力装置が含まれる場合もある。
【００３７】
コンピューティング装置１００は、図１に示すものなど、ネットワーク環境において、１つまたは複数のリモートコンピュータへの論理接続を使用して動作することができる。図２は、リモートコンピューティング装置１８０への汎用ネットワーク接続１７１を例示する。汎用ネットワーク接続１７１、および、図１に例示したネットワーク接続は、様々な異なるタイプのネットワークおよびネットワーク接続のいずれにすることもでき、これらのネットワークおよびネットワーク接続には、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、無線ネットワーク、イーサネット（登録商標）プロトコルに準拠するネットワーク、トークンリングプロトコル、または、インターネットもしくはワールドワイドウェブを含む他の論理、物理または無線ネットワークが含まれる。
【００３８】
ネットワーキング環境において使用されるとき、コンピューティング装置１００は汎用ネットワーク接続１７１へ、ネットワークインターフェイスまたはアダプタ１７０を通じて接続され、ネットワークインターフェイスまたはアダプタ１７０は、有線または無線ネットワークインターフェイスカード、モデムまたは類似のネットワーキング装置にすることができる。ネットワーキング環境では、コンピューティング装置１００に関連して示したプログラムモジュール、またはその一部を、リモートメモリストレージ装置に格納することができる。図示のネットワーク接続は例示的であり、複数のコンピュータの間で通信リンクを確立する他の手段を使用することができることは理解されよう。
【００３９】
以下の説明では、本発明を、特に断りのない限り、１つまたは複数のコンピューティング装置によって実行される動作、および、オペレーションの記号表現を参照して説明する。したがって、このような動作およびオペレーションは時として、コンピュータにより実行されるものと呼ばれ、このような動作およびオペレーションには、コンピューティング装置の処理装置による、データを構造化形式で表現する電気信号の操作が含まれることは理解されよう。この操作はデータを変換し、あるいはデータをコンピューティング装置のメモリシステム内のロケーションで維持し、当業者によってよく理解される方法で、コンピューティング装置のオペレーションを再構成し、あるいはそうでない場合は変更する。データが維持されるデータ構造は、データのフォーマットによって定義された特定のプロパティを有するメモリの物理ロケーションである。しかし、本発明を前述との関連で説明しているが、これは限定するように意味されず、以下で説明する様々な動作およびオペレーションをまたハードウェアにおいて実施することもできることは、当業者には理解されよう。
【００４０】
概観
本発明によれば、分散コンピューティングシステムはフォールトトレラントなアルゴリズムを、より少数のプライマリ装置および追加の補助装置を使用して実施することができる。Ｐａｘｏｓアルゴリズムは、以下でより詳細に説明するが、ある数の障害を、その数の２倍を超えるコンピューティング装置が使用されるならば、許容することができる、分散コンピューティングシステムを実施するメカニズムを提供することができる。数学的には、変数「Ｆ」は、許容することができる障害の数を表し、少なくとも２Ｆ＋１個のコンピューティング装置の分散コンピューティングシステムは、Ｐａｘｏｓアルゴリズムを実施することができる。これらの２Ｆ＋１個のコンピューティング装置のうち、少なくともそれらの過半数のいずれかの集まり、すなわち、少なくともＦ＋１個の装置のいずれかの集まりはクォーラムになることができ、フォールトトレラントな方法で提案を選択することができる。
【００４１】
コンピューティング装置に障害が起こらない場合、Ｆ＋１個のメインコンピューティング装置の集まりはＰａｘｏｓアルゴリズムを実施することができる。しかし、１つまたは複数のメインコンピューティング装置に障害が起こる場合、１つまたは複数の補助コンピューティング装置を使用して、システムがＰａｘｏｓアルゴリズムを使用してフォールトトレラントな方法で動作し続けることを可能にすることができる。補助コンピューティング装置はめったに使用されないので、補助コンピューティング装置を安価なコンピューティング装置にすることができ、これらの装置は、より古いコンピューティング装置、ポケットコンピューティング装置、主として他のタスク専用のコンピューティング装置、または、デジタル家電装置などである。したがって、それによりフォールトトレラントシステムを購入するための一定のセットの資金が提供されると、より大量の資金を使用してメインコンピューティング装置を購入することができ、処理能力、ストレージ容量などが増したコンピューティング装置の購入が可能となる。代替として、メインおよび補助コンピューティング装置を使用するフォールトトレラントシステムを、コスト軽減のために購入することができるが、このシステムは、メインコンピューティング装置のみを使用するシステムとして、大変類似のパフォーマンスを効果的に提供する。
【００４２】
本発明によって企図された一実施形態によれば、メインおよび補助コンピューティング装置を備える単一の状態マシンを使用して、フォールトトレラント分散コンピューティングシステムを提供することができる。最初に、メインコンピューティング装置を備えるクォーラムを使用することができる。１つまたは複数のメインコンピューティング装置に障害が起こる場合、いくつかの補助コンピューティング装置および少なくとも１つの作業中のメインコンピューティング装置を備えるクォーラムを使用して、メインコンピューティング装置の１つに障害が起こったときに保留中であったいかなる提案への投票も完了することができる。続いて、類似または等しいクォーラムは、いくつかの将来のステップを越えるすべてのステップのためのクォーラムの集合を選択することができる。選択されたクォーラムの集合のうち１つのクォーラムは、すべての作業中のメインコンピューティング装置を備えることができ、このようなクォーラムを使用して、将来のステップの後にファンクションを選択することができる。類似の方法で、メインコンピューティング装置が修理される場合、現在動作中のクォーラムによって、修理されたコンピューティング装置を含めるために、新しいクォーラムの集合を提案および選択することができる。
【００４３】
本発明によって企図されたもう１つの実施形態によれば、一方はメインおよび補助コンピューティング装置を備え、他方はメインコンピューティング装置を備える、２つの状態マシンを使用して、フォールトトレラント分散コンピューティングシステムを実施することができる。第１の状態マシンを使用して、第２の状態マシンによって使用されるべきクォーラムを選択することができる。次いで、第２のクォーラムは、メインコンピューティング装置の一部または全部を備え、クォーラムのメンバに障害が起こるまで動作することができる。続いて、第１の状態マシンを使用して、第２の状態マシンのための現在動作中のメインコンピューティング装置のすべてを備える新しいクォーラムを選択することができる。メインコンピューティング装置が修理される場合、第１の状態マシンは、修理されたコンピューティング装置を、第２の状態マシンのために選択されたクォーラムに追加することができる。概念的には、第１の状態マシンのメインおよび補助コンピューティング装置はクォーラム選択状態マシンを実施し、クォーラム選択状態マシンは、分散コンピューティングシステムのクライアントによってサブミットされた提案を選択するために、第２の状態マシンによって使用されるべきクォーラムを選択する。障害が起こったメインプロセッサを除去するため、または、修理されたメインプロセッサを追加するためなど、第２の状態マシンのクォーラムが変更されるべきであるときは常に、クォーラム選択状態マシンを使用することができる。加えて、第２の状態マシンのクォーラムは、構成装置による以前の投票の知識のみを伝搬できるのではなく、既知の安全提案の知識も伝搬することができる。
【００４４】
状態マシン
図１に例示した分散システム１０などの分散環境では、複数の装置の間の調整は困難なタスクとなる場合がある。調整要素として時間に依拠することに固有の難点を回避するための１つのメカニズムは、分散コンピューティングシステムを、ファンクションの実行が状態マシンをある状態から別の状態へ移動させる状態マシンに関して、モデリングすることである。したがって、状態マシンを、状態の集合、コマンドの集合、応答の集合、および、各応答／状態のペアを各コマンド／状態のペアにリンクさせるファンクションに関連して説明することができる。状態マシンのクライアントは、状態マシンがファンクションを実行することを要求するコマンドを発行することができる。次いで、ファンクションは、状態マシンの状態を変更し、応答を作成することができる。
【００４５】
分散コンピューティングシステムを備える個々の装置はそれぞれ、システムの状態マシンを実行することができる。したがって、これらの装置を、初期状態を決定すること、および次いで同じファンクションを同じ順序でそれ以降に実行することによって、調整することができる。単に、装置が実行した最終ファンクションを決定し、そのファンクションを、他の装置によって実行されたファンクションの順序付きリストにおいて探し出し、次いで装置に、順序付きリストから装置がまだ実行していないファンクションを実行するように命令することによって、装置を同期させることができる。このような状態マシンの手法は最初に、その内容が全体として参照により本明細書に組み込まれて、それらの開示に一致する本明細書内に含まれたいかなる教示または示唆もがさらに説明または記述される、記事において提案された（例えば、非特許文献１参照。）。
【００４６】
Ｐａｘｏｓアルゴリズム
状態マシンの手法を使用することによって、図１に示す分散コンピューティングシステム１０の構成装置１１ないし１５の同期を、実行されるべきファンクションおよびそれらを実行する順序に合意することによって、達成することができる。実行されるべきファンクションに合意するための１つの方法は、Ｐａｘｏｓアルゴリズムとして知られる。Ｐａｘｏｓアルゴリズムは、システム１０が、装置が事前の警告なしに動作を停止する可能性のある障害に直面しても、適切に動作することを可能にする。Ｐａｘｏｓアルゴリズムは、システムが全体としてファンクションを実行する前に、少なくとも１つの装置のクォーラムがそのファンクションに合意することを必要とする。Ｐａｘｏｓアルゴリズムでは、クォーラムを単純な過半数にすることができ、あるいはクォーラムは、システムの特定の要件に応じて、それよりも多い装置を含むことができる。どのように定義されても、クォーラムを、いずれかの２つのクォーラムが少なくとも１つの共通の装置を有するように、十分大きくすることができる。
【００４７】
一貫性を維持するため、システム１０は、ファンクションの実行をステップ毎に単一のファンクションに制限することができる。したがって、単一のファンクションのみを所与のステップについて選択することが望ましい場合がある。いずれかの２つのクォーラムが少なくとも１つの適切に機能する共通の装置を有するので、あらゆる装置が１つの提案のみに投票することを要求することによって、ただの１ステップのみの選択を保証することができる。しかし、いくつかの装置が同時にリーダーの役割をした場合、このような要件は行き詰まりを引き起こすようになり、これは、どの提案もクォーラムによって合意されず、さらにどの装置も、最終的にクォーラムに到達されることが可能となるように、異なるファンクションのための提案に投票することができなかったということが、可能となるからである。
【００４８】
Ｐａｘｏｓアルゴリズムはこの問題を、マルチフェーズプロセスを通じて解決することができ、このプロセスによって装置はそれらの投票を変更することを可能にされるが、リーダーはそれらが提案するファンクションにおいて制約される。Ｐａｘｏｓアルゴリズムを使用して、リーダーは、以前に提案されたファンクションをリーダーが知らない限り、リーダーが選択するいかなるファンクションを提案することもできる。リーダーが、それに対してクォーラム内の少なくとも１つの装置がすでに投票している、少なくとも１つの以前に提案されたファンクションを知っている場合、リーダーは、リーダーが知っている以前に提案されたファンクションのうち最新のものを提案することができる。各装置は、装置が投票した最新の提案のみを追跡する必要がある。装置が、それに対して提案すると約束している提案を受信し、その間に別の提案に投票することを約束していない場合、装置はその提案への一票を投じることができる。その提案が、装置が以前に投票すると約束している他のいかなる提案よりも大きい提案番号を有する場合にのみ、装置は提案に投票するように約束することができる。提案番号の使用は、構成装置の間のクロックの複雑で高価な同期を用いる必要なしに、システムが正しいオペレーションを達成することを可能にする。最新の提案は一般に、最大の提案番号を有するようになる。そうでない場合、この提案は無視される場合があり、これを以下でさらに説明する。提案に投票する約束をするとき、装置はまた、投票を請求するリーダーに、それに対して装置が以前に投票する約束をしている、現在の提案番号より小さい、最高提案番号を送信することもできる。このようにリーダーは常に以前の提案を知ることができる。
【００４９】
図３ａを見て、Ｐａｘｏｓアルゴリズムをより詳細に、図示の５つの装置１１ないし１５を備える例示的分散コンピューティングシステム１０を使用して説明する。このような環境では、クォーラムを、３つ以上の装置のいずれかのグループとして定義することができ、これは、このような定義が、あらゆるクォーラムが少なくとも１つの共通の装置を有することを保証するようになるからである。図３ａに示すように、装置１３はリーダーシップの位置につき、メッセージ２００を装置１１〜１２および１４〜１５に送信して、ファンクションを装置１１〜１５に提案するために使用されるべき提案番号を推奨することができる。装置１３は、装置およびリーダーの役割をすることができるので、装置１３はそれ自体にメッセージ２００を送信するが、このような送信は装置の内部で処理することができ、物理的に送信される必要はない。装置１３は、より大きい提案番号を有する以前の提案がないことを保証する目的で、任意に大きい提案番号を選択することができる。さらに、装置１３自体が以前の提案に投票している場合があるので、装置１３は、装置１３が承知しているいかなる提案よりも大きい提案番号を選択することができる。
【００５０】
提案をそれらの提案番号に基づいて順序付けすることができるので、２つ以上の装置が異なる提案に対して同じ提案番号を使用することを防止することは有利となる場合がある。したがって、提案を送信する装置のメディアアクセス制御（ＭＡＣ）アドレスなど、一意の装置プロパティに基づくメカニズムを使用して、提案番号を装置によって選択することができる。代替として、提案番号を複数の装置の間でパーティション化し、各装置がそのパーティションの中からのみ提案番号を選択することを要求することができる。提案番号をパーティション化するための１つの方法は、「ｉ番目」の装置に、「ｉ」を法としてシステム内の装置の数と合同である提案番号を付与することとなる。
【００５１】
以下に示すように、Ｐａｘｏｓアルゴリズムは、いくつかの装置がリーダーの役割をする場合でも、動作することができるので、装置がリーダーシップの位置につくメカニズムは重要ではない。それにもかかわらず、異なる装置が同時に自分たちがリーダーであると考える可能性のある見込みを最小限にするメカニズムは、システムの効率を増すことができる。例えば、ＭＡＣアドレスなど、一意の装置プロパティに基づくメカニズムは、複数の同時リーダーを有する見込みを低減することができる。１つのこのようなメカニズムは単に、最小のＭＡＣアドレスを有する、適切に機能中の装置を、次のリーダーになるように選択することができる。加えて、リーダー選択メカニズムは、リーダーの役割をする別の装置からのメッセージを所定の時間量内に、ある装置がすでに受信している場合、この装置がリーダーなろうと試みることを防止して、リーダーシップ装置が絶えず変更になることを防止することができる。このような絶えず続くリーダーシップ変更は、システムのオペレーションに非効率性を導入する可能性がある。
【００５２】
図３ｂを見ると、メッセージ２００など、新しい提案番号を推奨するメッセージを受信すると、各装置１１〜１５は、それに対して装置が一票を投じている、メッセージ２００によって推奨された提案番号よりなお小さい最大提案番号、および、それによって提案されたファンクションを指示する、メッセージ２１１〜２１５により応答することができる。装置が、リーダーによって使用された提案番号より大きい提案番号への一票を投じている場合、装置はリーダーからのメッセージを無視することができ、あるいは以下で説明するように、装置は最大提案番号にもかかわらず、最終投票情報により応答することができる。図３ｂに示す例示的状態では、装置１２は以前に提案番号７０に投票しており、この提案番号７０は、システム１０が変数「ｙ」によって識別されたファンクションを実行することを提案していた。したがって、メッセージ２００に応答して、装置１２は、ファンクション「ｙ」の実行を提案した提案番号７０に装置１２が最後に投票したことを指示する、メッセージ２１２を送信することができる。同様に、装置１１は以前に提案番号３０に投票しており、この提案番号３０は、システム１０が変数「ｚ」によって識別されたファンクションを実行することを提案していた。したがって、メッセージ２１１は、装置１１のこの最終投票情報を装置１３に戻すように搬送することができる。装置１３〜１５はいかなる提案も受信していない可能性があり、したがって、以前にいかなる提案にも一票を投じていない。これらの装置はしたがって、メッセージ２１３〜２１５によって指示されたようなヌル応答を戻すことができる。再び、上述のように、装置１３からそれ自体に送信されたメッセージは装置１３によって内部処理することができるが、これらのメッセージを説明のために例示する。
【００５３】
図３ｃを見ると、リーダー１３がメッセージ２１１〜２１５を受信するとき、リーダーは提案するべき適切なファンクションを決定し、提案されたファンクションが、クォーラムのいずれかのメンバによって投票された最大提案番号を有するファンクションに等しくなるようにすることができる。クォーラムメンバのいずれもがいかなる以前の提案にも投票していなかった場合、リーダーは、どのファクションをリーダーが提案することを望むとしても、自由に選択することができる。したがって、図３ｂに例示するメッセージ２１１〜２１５が与えられると、装置１３は、ファンクション「ｙ」の実行に対する投票を請求することを選択することができ、これは、そのファンクションが装置１２によって提案番号７０の一部として投票されており、提案番号７０は、リーダー１３が知っている最大提案番号を有する提案であるからである。しかし、図３ａないし３ｅに例示したシステム１０は５つの装置を含むので、クォーラムをわずか３つの装置にすることができる。このように、リーダー１３がいずれかの３つ以上の装置を、クォーラムの役割をするように選択することは、十分である。したがって、リーダー１３によって選択されたクォーラムには装置１２が含まれない場合がある。このような場合、リーダー１３はファンクション「ｙ」を提案する必要はなく、これは装置１２が、選択されたクォーラムのメンバではないからである。その代わりに、リーダー１３は、リーダーが選択したクォーラム内の装置が以前に投票した最大提案番号と共に提案されたファンクションを提案することができる。装置のいずれもが、以前にいかなる提案にも投票しなかった場合、リーダーは、それ自体が選択するいかなるファンクションを提案することもできる。
【００５４】
ある提案番号を推奨するメッセージ２００は、リーダー１３が選択するべき適切な提案番号を決定することができるメカニズムの役割をし、リーダーが、以前に提案されたすべてのより低い番号の提案を知ることを可能にするので、リーダー１３が、メッセージ２００などの複数のメッセージを送信し、より早期のメッセージが低すぎる提案番号を有している場合により大きい提案番号を次第に推奨することが、必要である可能性がある。リーダーが複数のメッセージを送信することを必要とするのではなく、リーダーによって推奨された提案番号が以前に投票された提案よりも大きいか小さいかにかかわらず、各装置は、それに対して投票している最大の番号の提案により応答することができる。このように、リーダー１３は、以前の投票をより効率的に知ることができ、それと共にファンクションを提案するための提案番号をより正確に選択することができる。
【００５５】
図３ｃに戻ると、リーダー１３は、システム１０の装置のすべてからなるクォーラムを選択しており、メッセージ２００を送信して、システム１０によるファンクション「ｙ」の実行への投票を求めているように示される。メッセージ２２０を受信すると、各装置は、ファンクション「ｙ」に投票するべきかどうかを判断することができる。ある装置は、その装置が、それに対する投票が現在要求されている提案よりも大きい提案番号を有する新しい提案の推奨に応答していない限り、ファンクションに投票することができる。したがって、図３ｃに例示する実施例では、装置１１〜１５のいずれかが、リーダー１３からメッセージ２２０を受信するより前に、１００より大きい提案番号を有する新しい提案のための別の推奨を受信し、これに応答していた場合、その装置は、それに対する投票がメッセージ２２０によって請求されたファンクションに、投票しない場合がある。
【００５６】
図３ｄを見ると、各装置１１〜１５は、それらの装置が、１００より大きい提案番号を有する新しい提案のための他の推奨に応答していないと、独立して判断することができる。したがって、それらの装置が応答した新しい提案のための最終推奨は、現在の提案よりも大きい番号を有する提案のためのものではないので、装置１１および装置１３〜１５は、その提案に投票し、それらの投票を、それぞれメッセージ２３１および２３３〜２３５において指示することができる。前述のように、メッセージ２３３は例示のために示し、装置１３によって内部処理することができる。しかし、装置１２は、メッセージ２２０の送信より前のあるときに、１００より大きい提案番号を有する新しい提案のための推奨を受信し、これに応答している可能性がある。したがって、メッセージ２２０を受信すると、装置１２は、１００より大きい番号を有する新しい提案のための推奨にすでに応答しており、したがって、提案１００に投票することはできなかったと、判断することができる。結果として、図３ｄに示すように、装置１２はメッセージ２３２により応答し、リーダー１３に、１５０の提案番号を有する提案のための推奨に装置１２が応答していることを通知する。リーダー１３は、装置１２の投票を必要とすると判断する場合、１５０より大きい提案番号を有することを除いて、メッセージ２２０に類似した別のメッセージを送信することができる。代替として、装置１２はメッセージ２２０に応答する必要はなく、装置１３は、それが装置１２の投票を必要とする場合、任意に大きい提案番号を有する提案による別の投票を試みることができる。図に示すように、装置１２がより大きい提案番号をリーダー１３に指示しない場合、リーダーは、複数のメッセージを通じて、適切に大きい提案番号を推測しなければならない場合があり、リソースを無駄にして推測する可能性がある。
【００５７】
しかし、装置１１および１３〜１５は、クォーラムを構成するには十分すぎるほどであるので、リーダー１３は、装置１２の投票なしでも、提案が受け入れられていると判断することができ、図３ｅに示すようなメッセージ２４０により、各装置１１〜１２および１４〜１５がファンクション「ｙ」を実行することを要求することができる。装置１３は、メッセージ２４０の送信を待機することなく、それが受け入れられたと判断すると、ファンクション「ｙ」を実行することができる。したがって、装置１３は、内部的にもメッセージ２４０を送信する必要はない。
【００５８】
装置１１および１３〜１５はクォーラムを構成するが、これは、リーダー１３が投票するべき提案をサブミットした先の、装置１２が含まれた同じクォーラムではない。しかし、上述のように、リーダーは、提案が受け入れられていると判断するために、クォーラムから投票を受信することのみが必要であり、要求が送信された先の同じクォーラムの必要はない。上述のＰａｘｏｓアルゴリズムは、単一のファンクションのみがシステム１０によって、そのオペレーション内のいずれかの所与のステップのために選択および実行されることを保証する。例えば、以前に動作可能でなかった別の装置が動作可能となり、システム１０に再結合した場合、この装置は、それに対してシステムが「ｙ」を選択および実行していた同じステップについて、「ｙ」とは異なるファンクションを提案しようと試みる場合がある。このような装置が、１００未満の提案番号を有する提案を送信した場合、この提案は装置１１および１３〜１５によって無視されることが可能であり、これはそれらの装置がすでに、図３ｄに示すように提案番号１００に投票していたからである。他方では、装置が、提案番号１３０など、１００より大きい提案番号を有する提案を送信した場合、装置１１および１３〜１５は、それらの装置が提案番号１００におけるファンクション「ｙ」に投票していたことを指示するメッセージを戻すようになる。装置１２は、図３ｄに例示したように、投票していない場合があるので、提案番号３０におけるファンクション「ｚ」に投票したことを指示するメッセージ２１２により応答する場合がある。
【００５９】
次いで、新しい装置は、定義により装置１１〜１５のうち少なくともいくつかが含まれるようになるクォーラムの中で、最大提案番号を選択し、その提案において提案されたファンクションを投票のためにサブミットすることができる。したがって、提案１３０では、新しい装置はファンクション「ｙ」を投票のためにサブミットするようになる。各装置は次いで、上述のアルゴリズムに従って、提案１３０に投票することができる。提案１３０は選択され、ファンクション「ｙ」を特定のステップのために実行するための以前の決定を変更しないようになるか、または、多すぎる装置がその間に別の提案に投票するように約束していたために、提案１３０は失敗するようになる。しかし、図に示すように、提案が渡された後、すべての他の提案は同じファンクションを提案するようになり、定義により、すべての装置はその同じファンクションにのみ投票することができる。このように、Ｐａｘｏｓアルゴリズムは、システム１０のあらゆる装置が所与のステップのために同じファンクションを実行することを保証する。
【００６０】
上述のＰａｘｏｓアルゴリズムの適用は、分散コンピューティングシステムが所与のステップについて実行するためのファンクションを選択することを可能にすることができる。上述のオペレーションを繰り返すことによって、分散コンピューティングシステムは、一連のステップとして実行されるべき一連のファンクションに合意することができ、それにより継続的に動作するシステムを形成することができる。このように、分散コンピューティングシステムは１つまたは複数のクライアントから要求を受信することができ、これらの要求を実行し、結果をこれらのクライアントに戻すことができる。
【００６１】
図４ａを見ると、システム１０はすでにいくつかのステップについて動作可能であった可能性がある。例えば、図４ａに例示した例示的システム１０では、直前に選択されたステップをステップ２４にすることができ、ステップ２５を現在のステップにすることができる。しかし、以前にリーダーの役割をしていた装置で障害が起こっている場合があり、あるいは単にいかなるクライアント要求をも受信していない場合がある。クライアント２０は図４ａにおいて変数「ｘ」によって表現されたファンクションを実行するための要求を装置１３に、図のようにメッセージ３００を使用して送信することができる。装置１３は、上述のものなど、いくつかの数のメカニズムに従って、リーダーになろうと試みるべきであると決定することができる。したがって、装置１３はメッセージ３０１を送信することができ、このメッセージは、次の提案のための提案番号１００の使用を推奨し、そのためにその提案が行われているステップを含む。図４ａの例示的分散コンピューティングシステム１０では、装置１３は、ステップ２３および２４がすでに他の装置１１〜１２および１４〜１５によって決定されていることを承知していない。したがって、メッセージ３０１は、装置１３がステップ２３のための提案番号１００を推奨していることを指示する。
【００６２】
複数のステップを実行するシステムにおいてアルゴリズムのオペレーションを促進するため、メッセージ３０１などのメッセージは、ステップ２３以上のすべてのステップのために提案番号１００を提案するように理解される可能性がある。このように、リーダー１３は、すでに決定されているあらゆるステップを知るまで、メッセージ３０１などのメッセージを継続的に送信する必要はない。代わりに、リーダー１３は、以下に示すように、単一のメッセージの往復のみを通じて、すでに選択されたステップを知ることができる。
【００６３】
図４ｂを見ると、分散コンピューティングシステム１０の装置１１〜１５からの応答メッセージ３１１〜３１５が示される。装置１１、１４および１５は例えば、ファンクション「ｙ」がステップ２３のために選択されたこと、および、ファンクション「ｚ」がステップ２４のために選択されたことを記録している。したがって、メッセージ３０１を受信すると、装置１１、１４および１５は、それらの装置が、２３以上のすべてのステップ、この場合はステップ２３および２４のために選択されているとして格納している、ファンクションを指示するメッセージ３１１、３１４および３１５により応答することができる。加えて、装置１１、１４および１５は、それに対してそれらの装置が２５以上のステップのために投票している最大提案番号を有する提案の指示を提供することができる。したがって、図４ｂに例示した実施例では、メッセージ３１１はまた、装置１１が２５より大きいステップのためにいかなる提案にも投票しなかったこと、および、ステップ２５のためにファンクション「ｂ」を提案する提案番号１６０に投票したことを指示することもできる。他方では、メッセージ３１４および３１５は、装置１４および１５がステップ２４より大きいいかなるステップのためにもいかなる提案にも投票していないことを指示することができる。システム１０内で送信されているメッセージの数を減らすために、装置は、所与のステップのために選択されているファンクションを知らない場合、それらの最高提案番号投票によってのみ応答する必要がある。したがって、装置１１は、ファンクションがステップ２３および２４のために選択されたが、ステップ２５のためには選択されなかったことを承知していたので、装置１１は、ステップ２３および２４のために選択されたファンクション、および、ステップ２５のために投票した最高の番号の提案により応答した。
【００６４】
前述のように、装置１３はリーダーおよび投票側装置として動作することができる。したがって、装置１３はそれ自体に、メッセージ３０１などのメッセージを送信することができ、メッセージ３１３などのメッセージによりそれ自体に応答することができる。このようなメッセージを図において例示のためにのみ示し、これは、それらのメッセージが装置１３に内部的に送信される可能性が高くなるからである。さらに、装置１３は、そのために選択されたファンクションを装置１３が知る最大ステップ番号を有するステップが何であるかをチェックすることができ、装置１３は、装置１３が投票したものより上のすべてのステップのための提案のための最大提案番号が何であるかをチェックすることができるので、メッセージ３１３は、ヌル標識以外のいかなる情報をもめったに含むべきではない。
【００６５】
状態マシンの現在の状態は、選択されたファンクションによってのみではなく、これらのファンクションが実行される順序によっても決まる場合がある。したがって、装置が、どのファンクションが所与のステップのために選択されたかを知らない場合、その装置は、そのステップを越えていかなるファンクションも実行するべきでないか、あるいは、その装置が順序通りでなくファンクションを実行するようになり、その状態は分散コンピューティングシステムの状態とは異なるようになる状況がある場合がある。例えば、新しい状態を無条件に指定するファンクションなど、いくつかのファンクションは、装置の現在の状態から独立している。このようなファンクションは、現在のステップよりも低いステップ番号を有するステップのためのファンクションがまだ実行されていない場合でも、実行することができる。同様に、データベースへの書き込みなど、以前のステップのすべてを知ることなく、そのための出力を計算することができるファンクションもまた、部分的には順序通りでなく実行して、クライアントに送信されるべき出力を生成することができる。しかし、一般に、すべての以前のファンクションが実行されてしまうまで、ファンクションは実行されるべきではない。したがって、装置は常に、装置で欠落したステップのためにどのファンクションが選択されたかを知るように試みることができる。装置１３が、図４ａに示すように、メッセージ３０１を送信するとき、装置１３はステップ２３が次のステップであると考え、ステップ２２を通じて合意されたファンクションの知識を有することは、暗黙的ステートメントである。ステップ２３より低いステップのためのファンクションが欠落している装置は、したがって、装置１３がステップ２２を通じてファンクションのすべての知識を有することを知り、そのファンクションを装置１３から要求することができる。
【００６６】
図４ｂに戻ると、装置１２は、何のファンクションがステップ１２のために選択されたかを知らない。結果として、装置１２は、ステップ１３〜２３のために選択されたステップを知る可能性があるとしても、ステップ１１以来いかなるファンクションを実行することもできなかった可能性がある。したがって、メッセージ３１２で、装置１２はステップ１２のためのファンクションをリーダー１３から要求することができる。加えて、装置１２は、ステップ２３より高い番号のステップのためのいかなる提案にも投票していないことを指示することができる。
【００６７】
装置で多すぎるステップが欠落している場合、装置で欠落しているステップのすべてのためのファンクションのすべてを送信するのではなく、単に装置に現在の状態を通知することが、より効率的である可能性がある。装置で多すぎるステップが欠落しないことを保証するための１つのメカニズムは、各装置、または装置の集まりが、状態の様々な部分、または状態全体のスナップショットを定期的に取ることを可能にすることである。したがって、別の装置の状態は、これに適切なスナップショットを、最新のスナップショット以来選択されたファンクションと共に送信することによって、アップデートすることができる。加えて、状態の個々の部分のチェックサムを使用することによって、別の装置の状態を、単にその他の装置にその現在のコピーとは異なる状態の部分を送信することによって、アップデートすることができる。
【００６８】
メッセージ３１１ないし３１３を受信する結果として、リーダー１３は、以前に知らなかったステップ２３および２４のために選択されたファンクションを知ることができ、ステップ２５のために提案するための適切なファンクションを決定しようと試みることができ、ステップ２５を通じてすべてのステップのための選択されたファンクションを同じくすでに知っていない他の装置をアップデートしようと試みることができる。最初は、リーダー１３はメッセージ３０１において１００の提案番号を推奨したが、装置１１は、ステップ２５のための１００より大きい提案番号を有する提案にすでに投票したことを指示するメッセージ３１１により応答した。したがって、リーダー１３は、リーターが承知している最大提案番号より大きい提案番号を選択し、図４ｃに示すメッセージ３２０など、別の推奨メッセージを送信することができる。代替として、装置１１は単に、メッセージ３０１における提案番号１００のための推奨を無視している可能性があり、これは、この提案番号が、装置１１がすでに投票していた提案の提案番号より小さかったからである。このような場合、リーダーは、初期推奨を無視した装置を計上しようとして、提案番号を増すことによって、再試行しているようになる。図に示すように、装置がすでに投票していた提案の提案番号より小さい提案番号を有する提案のための推奨を、その装置が無視する場合、リーダーは強制的に、推奨された提案番号を増すたびに、複数の再試行を実行させられる場合がある。このような複数のメッセージは非効率的になる場合がある。したがって、提案番号が、装置がすでに投票していた提案の提案番号より小さい場合でも、装置は新しい提案番号のためのすべての推奨に応答することが望ましい場合があり、これは、リーダーが次いで、より高い精度で、推奨するべき適切な提案番号を決定することができ、複数のメッセージを回避することができるからである。
【００６９】
図４ｃを見ると、リーダー１３は、それに対して装置が以前に投票していることをリーダー１３が知っているいかなる提案の番号よりも大きい提案番号を推奨しようとして、メッセージ３２０内に示すように、提案番号２００など、より大きい提案番号を推奨することができる。加えて、リーダー１３はまた、以前に選択されたファンクションに関する情報を、ステップ２５までに選択されたものをすでに承知していないいかなる装置にも提供することができる。したがって、図のように、リーダー１３はまた、メッセージ３２１をも送信することができ、メッセージ３２１は、変数「ｅ」によって表現されたファンクションがステップ１２のために選択されたこと、および、変数「ｚ」によって表現されたファンクションがステップ２４のために選択されたことを装置１２に指示する。
【００７０】
次いで図４ｄで、装置１１〜１５は、装置１１〜１５がステップ２３および２４のために選択されたファンクションを装置１３に通知する必要がないことを除いて、上記で図４ｂにおいて示したものに類似の方法で応答することができ、これは、装置１３がこれらのステップをすでに知っており、ステップ２５を参照する提案メッセージ３２０および３２１を送信しているからである。さらに、メッセージ３３１〜３３５は、装置が投票している可能性のある追加の提案など、追加の情報を含むことができる。例えば、装置１２は、メッセージ３１２とメッセージ３３２の送信の間のあるときに、提案番号１９０を有する提案に投票している場合がある。したがって、メッセージ３１２は、装置１２がステップ２５のためのいかなる提案に対しても以前に一票を投じていない場合があることを指示することができるが、メッセージ３３２は、装置１２がまだ２５より大きいステップのためのいかなる提案にも投票していないが、装置１２がステップ２５のための提案１９０に投票していることを指示することができる。しかし、各提案番号は、リーダー１３がメッセージ３２０において送信した、推奨された提案番号より小さいので、リーダーは、メッセージ３２０において指定された提案番号２００を有するファンクションを提案することを進めることができる。
【００７１】
図４ｅを見ると、リーダー１３はこのとき、装置１１〜１５が提案２００に投票することを要求し、システムがステップ２５のためにファンクション「ｂ」を実行することを提案する、メッセージ３４０によって例示するように、提案番号２００としてサブミットするための提案を選択するために十分な情報を有する。前述のように、装置１１および１２は共にクォーラムのメンバであり、ファンクション「ｂ」の実行を提案する提案に以前に投票しており、クォーラムの他のメンバは、いかなるより大きい番号の提案にも投票していないので、リーダー１３は、クライアント２０がメッセージ３００内でファンクション「ｘ」の実行を要求したという事実にもかかわらず、提案番号２００のためのファンクション「ｂ」を提案することができる。このように、Ｐａｘｏｓアルゴリズムは、１つまたは複数の装置またはそれらの通信の障害などのために、提案されたが完了されていない以前のファンクションを、適切な順序で実行することができることを保証する。
【００７２】
図４ｆは、装置１１〜１５が、ステップ２５のために、ファンクション「ｂ」を提案する提案２００に対して、それぞれメッセージ３５１〜３５５により投票することを例示する。前述のように、装置は、メッセージ３２０とメッセージ３４０の受信の間でより大きい提案番号を有する、異なる提案に投票するように約束していない限り、提案に投票することができる。リーダー１３がメッセージ３５１〜３５５を受信した後、リーダー１３は図４ｇに示すようにメッセージ３６０を送信し、装置１１〜１２および１４〜１５に、ファンクション「ｂ」がステップ２５のために選択されたことを通知することができる。リーダー１３はまたこの情報をそれ自体で格納することもでき、これは、リーダー１３はこのとき、ファンクションがクォーラムによって選択されたことを知っているからである。
【００７３】
しかし、クライアント２０によってメッセージ３００において要求されたファンクションはまだ、図４ｇに例示した時点で、システム１０によって選択されていない。システム１０に、クライアントの要求を選択させるために、リーダー１３は、上記の図３ａ〜ｅおよび４ａ〜ｇによって例示された完全なＰａｘｏｓアルゴリズムの省略バージョンを実行することができる。
【００７４】
概念的には、上述のＰａｘｏｓアルゴリズムを２つの汎用フェーズに分割することができる。第１のフェーズは、リーダーが、クォーラム内の装置によって投票された以前の提案を知ることを備える。第１のフェーズは、図３ａおよび３ｂによって例示したように、リーダーによる提案番号推奨およびクォーラムの他のメンバによる応答の１つの反復、または、図４ａ〜ｄによって例示したように、提案番号推奨および応答の複数の反復を含むことができる。第２のフェーズは、リーダーが、投票のための提案されたファンクションをサブミットし、投票を受信し、提案が十分な数の装置によって投票された場合に、これらの装置に、合意されたファンクションを実行するように命令することを備える。第２のフェーズの実施例は、図３ｃ〜ｅおよび４ｅ〜ｇによって例示される。
【００７５】
リーダーが他の提案を知り、現在および将来のステップのすべてについて安全である提案番号を発見した後、リーダーは、それに障害が起こるか、あるいは別の装置がリーダーになろうと試みるまで、さらなる情報を請求する必要はない。したがって、Ｐａｘｏｓアルゴリズムの第１のフェーズをそれほど頻繁でなく実行することができるが、第２のフェーズを、増え続けるステップ番号により繰り返し実行することができ、分散コンピューティングシステムが一連のファンクションに合意してアクティブ実行状態を維持することが可能となる。
【００７６】
図５ａを見ると、図４ａ〜ｇからの例示的分散コンピューティングシステム１０が示され、リーダー１３は、上記で詳述したステップ２５の後に続くシステムステップ２６のために選択されるべきファンクションを提案する。Ｐａｘｏｓアルゴリズムの第１のフェーズの結果として、図４ａ〜ｄに例示したように、また上記で詳述したように、リーダー１３はすでに、装置１１〜１５のいずれもがステップ２５より上のいかなる提案にも投票していないこと、および、その提案番号２００がしたがってステップ２５より大きいステップのためのすべての提案について安全であることを、承知している。したがって、図５ａに示すように、ステップ２６では、リーダーは、第１のフェーズを再度実行する必要なしに、Ｐａｘｏｓアルゴリズムの第２のフェーズを開始することができ、クライアントによってメッセージ３００において要求された、ファンクション「ｘ」のための投票を請求するメッセージ４００を送信することができる。各装置１１〜１５は次いで、投票により応答することができる。しかし、Ｐａｘｏｓアルゴリズムのフォールトトレラントな性質を例示するために、図５ｂは、装置１１〜１３のみがメッセージ４１１〜４１３により応答することを例示する。装置１４および１５は障害を経験している可能性があり、いずれもメッセージ４００を受信しなかったか、あるいはメッセージ４００に応答することができない。
【００７７】
それにもかかわらず、リーダー１３は、ファンクション「ｘ」が選択されたと決定することができ、これは、クォーラム内の各装置がこのファンクションの実行に投票しているからである。上述のように、クォーラムは、システム１０など、Ｐａｘｏｓアルゴリズムを実施するシステム内の装置の少なくとも過半数のいかなる集まりにすることもできる。したがって、装置１１〜１５のすべてはシステム１０の１つのクォーラムを構成するが、装置１１〜１３はそれらだけで、システム１０の別のクォーラムを構成する。装置１１〜１３を備えるクォーラム内のあらゆる装置はファンクション「ｘ」に投票しているので、リーダー１３は、図５ｃに示すように、メッセージ４２０により、ファンクション「ｘ」がステップ２６のために選択されたことをシグナル通知することができる。加えて、リーダー１３は投票が成功していることを知っているので、ステップ２５を通じて選択されたファンクションを承知している限り、リーダー１３はファンクション「ｘ」をステップ２６のために実行することができ、そのファンクションの実行の結果をクライアントにメッセージ４２１として、または、装置３０および３１などの他の関心のあるコンピューティング装置にメッセージ４２２として送信することができる。メッセージ４２１および４２２をメッセージ４２０と同時に、または、メッセージ４２０の前または後にも送信することができる。
【００７８】
図に示すように、リーダーが確立され、リーダーが、すべての近づくステップ番号について、クォーラム内の装置によって投票された様々な最高の番号の提案を知った後、リーダーは、Ｐａｘｏｓアルゴリズムの第１のフェーズを繰り返すことなく、投票のための提案を請求することができる。図５ａに示すメッセージは、図４ｇにおけるメッセージ３６０の送信後に生じるとして説明されるが、リーダー１３は、後続のステップのための別の提案を送信する前に、装置がある提案に投票することを待機する必要はない。したがって、図４ｅに示すように、メッセージ３４０を送信すると、リーダー１３は、図５ａに示すメッセージ４００を送信することができ、このように、ステップ２６より大きいステップのために、提案番号２００を使用して、一連のファンクションの提案を継続することができる。このような非同期の方法で動作することによって、分散コンピューティングシステム全体は、以前のステップのための投票を知ることを待機することによって、減速される必要はない。
【００７９】
以前に機能していない装置など、別の装置がリーダーになろうと試みた場合、システムに不適切に実行させるようにはならないが、アルゴリズムの第１のフェーズを繰り返させることにのみ成功するようになる。例えば、別の装置がリーダーになろうと試みた場合、この装置は、いくつかの装置が応答するであろう提案番号を推奨することができる。第２のリーダーによって提供された提案番号に応答した後、これらの装置は次いで、第１のリーダーが投票を請求したときにより高い番号の提案を第１のリーダーに通知するようになり、あるいは、これらの装置は、第１のリーダーによる、その提案に投票するための要求を無視することができる。不十分な数の装置が提案に投票したために、この提案が失敗した場合、第１のリーダーは、最初に第１のフェーズを再度実行すること、および、第１のリーダーが装置に推奨することができる十分に大きい提案番号であると考えるものを選択することによって、この提案を再度通過させるように試みるようになる。このように、第２のリーダーはシステムを遅延させるのみとなるが、分散コンピューティングシステムの一部で不適切なオペレーションを引き起こすようにはならない。
【００８０】
上述の、Ｐａｘｏｓアルゴリズムを実施する装置は、アルゴリズムで使用された情報を格納する変数を維持することができる。例えば、それに対してどのファンクションが選択されたかを装置が知らない各ステップについて、装置は、それに対して装置が応答した最大提案番号、それらが投票した最大提案番号、および、対応する提案の値を格納することができ、この装置がリーダーである場合、装置は追加として、装置が発行した最後の提案のための提案番号を格納することができる。加えて、装置は、それについてこのような情報を有するすべてのステップのためにどのファンクションが選択されたかを記録することができる。代替として、装置は、所与の時間でのその状態のスナップショット、および、そのとき以来のみに選択されたファンクションを格納することができる。例えば、ステップ１〜１００のために選択された各ファンクションを格納するのではなく、装置は、ステップ７５の実行後のその状態のスナップショットを格納し、次いで、ステップ７６〜１００のために選択されたファンクションのみを格納して、格納される量を４分の１以上減らすことができる。上述の情報の一部または全部を、図２に示す揮発性ストレージ１３０、または、ハードディスク１４１、フロッピー（登録商標）ディスク１５２または光ディスク１５６など、不揮発性ストレージに格納することができる。
【００８１】
Ｐａｘｏｓアルゴリズムに関する追加の情報は、その開示と調和する、本明細書内に含まれたいかなる教示または示唆をもさらに説明または記述するために、参照により全体として本明細書に組み込まれている論文で見つけることができる（例えば、非特許文献２参照。）。
【００８２】
障害の場合に補助装置を使用する、修正されたＰａｘｏｓアルゴリズム
上述の標準のＰａｘｏｓアルゴリズムの説明からわかるように、分散コンピューティングシステムの装置の過半数が適切に動作する限り、残りの装置はほとんど使用されることがない。図６ａを見ると、分散コンピューティングシステム１０が示され、コンピューティング装置１４および１５はこのとき、ハンドヘルドコンピューティング装置として例示されて、それらの状態が補助装置として示される。補助装置は、本発明の一実施形態によって企図されるように、必ずしも、ハンドヘルドコンピューティング装置または家電装置など、安価なコンピューティング装置であるとは限らないが、他のコンピューティング装置１１〜１３と同じくらい多くの計算能力を保有していないか、あるいは、他の装置１１〜１３が可能であるのと同じくらい多くの計算リソースを分散コンピューティングアルゴリズムの実行専用にすることができない、いかなるコンピューティング装置にすることもできる。以下に示すように、上述のアルゴリズムを、このような補助装置に対処するように修正し、分散コンピューティングシステム１０が、上述の分散コンピューティングシステムよりも少数の専用のメインコンピューティング装置を備えることを可能にすることができる。
【００８３】
上述のように、Ｐａｘｏｓアルゴリズムを２つのフェーズにおいて概念化することができ、すなわち、リーダーが提案可能なファンクションを知る第１のフェーズ、および、リーダーがファンクションを提案し、装置が投票する第２のフェーズである。リーダーが第１のフェーズを完了した後、第２のフェーズのみを使用して、後続の提案を提案することを進めることができる。図６ａは、図４および５に例示し、上記で詳述した環境の継続と考えることができる、環境を例示する。したがって、リーダー１３はすでに第１のフェーズを実行しているので、第２のフェーズを開始することによって、後続の提案を分散コンピューティングシステム１０によって選択させようと試みることができる。
【００８４】
しかし、図６ａに示すように、メッセージ５０１は、システム１０にクライアント要求に投票させるように試みない。むしろ、メッセージ５０１は、システム１０が、将来の提案に投票するために使用することができるクォーラムの集合を選択することを、提案する。提案されたクォーラムの集合は、すべてのメインコンピューティング装置１１〜１３を備えるあるクォーラム、ならびに、メインおよび補助コンピューティング装置の他のクォーラムを含み、いずれか２つのクォーラムが少なくとも１つの共通の装置を共有するようにすることができる。例えば、他のクォーラムはそれぞれ、メインコンピューティング装置１１〜１３のうち少なくとも１つも含む、コンピューティング装置１１〜１５の過半数を備えることができる。代替として、他のクォーラムは、少なくとも１つのメインコンピューティング装置と結合された、現在動作中の補助コンピューティング装置１４〜１５の過半数を備えることができる。例示した実施例では、メッセージ５０１は、「｛Ｑ１｝」によって識別されたクォーラムの集合の選択を提案し、ただし集合「｛Ｑ１｝」には、表１で識別されたクォーラムが含まれる。
【００８５】
【表１】
2006004433.tif 000003
【００８６】
一実施例として、この図は、提案されたクォーラムの集合がステップ２８で開始してオペレーションを開始することを例示する。しかし、本発明の一実施形態によって企図された１つのメカニズムは、各提案されたクォーラムの集合に、現在のステップの後で事前定義された数のステップまで、オペレーションを開始しないことを要求する。例えば、いずれかの提案されたクォーラムの集合は、現在のシステムステップを１０ステップ越えてオペレーションを開始することができる。このような事前定義された増分を、メインコンピューティング装置１１〜１３のうち１つまたは複数によって格納することができ、この格納は、クォーラムの集合が選択されたという指示を受信すると、メインコンピューティング装置がそれぞれ独立して、選択されたクォーラムの集合が特定の将来のステップでオペレーションを開始することができると判断することができるような方法で、行われる。
【００８７】
現在のステップと、選択されたクォーラムの集合がオペレーションを開始するステップの間の、事前定義された数のステップのバッファを作成することによって、クォーラムのリーダーは複数のファンクションを並行して提案し、システムがより効率的な方法で動作することを可能にすることができる。例えば、リーダーが、分散コンピューティングシステムによって特定のステップで実行されるべきファンクションを提案した後、リーダーは、ファンクションが提案された装置から応答を受信することを待機する必要はない。その代わりに、リーダーは、後続のステップで実行されるべき別のファンクションを提案することを進めることができる。したがって、装置があるシステムステップのためのある提案を処理およびこれに応答中である間、リーダーは後続のシステムステップのための別の提案を処理および提案中であることが可能である。このように、リーダーも装置も互いに待機する必要はない。したがって、本発明の実施形態は、説明したアルゴリズムの複数のインスタンスを並列に実行させて、より大きい効率を達成し、いずれかの装置が他の装置からの情報を待機しながら費やす時間の量を最小限にすることができる。
【００８８】
しかし、あるシステムステップが、次のステップで開始するすべてのステップについて、クォーラムの集合を変更することができる場合、リーダーは、どのクォーラムに次のステップのためのファンクションを提案するべきであるかを、現在のステップを知って実行するまで、知らない可能性がある。したがって、新たに選択されたクォーラムの集合が、将来のある事前定義された数のステップで効力を生じない限り、リーダーは、次のステップのためのファンクションを提案するために適切なクォーラムを確信することができるようになる前に、各ステップのためのファンクションの選択が完了するまで待機するように制約される可能性がある。したがって、本発明の一実施形態によって企図された１つのメカニズムは、新しいクォーラムの集合の選択と、選択された新しいクォーラムの集合がオペレーションを開始するステップの間で、事前定義された数のステップを必要とする。このように、リーダーは直前のステップを知らない場合でも、一連のシステムステップのための一連のファンクションを提案することができ、これは、リーダーが、直前のステップが新しいクォーラムの集合を選択した場合でも、新たに選択されたクォーラムの集合が将来への事前定義された数のステップまで効力を生じるようにならないことを、知ることができるからである。
【００８９】
しかし、例示のために、図に示すこの実施例は、オペレーションを次のステップで開始するクォーラムの集合を選択する。図６ａに戻ると、リーダー１３は、上記の表１で列挙されたクォーラムの集合を定義するファンクションを提供することができる。上述の方法で、メッセージ５０１の提案は２００の提案番号を含むことができ、これがシステムステップ２７のための提案であることを指示することができる。
【００９０】
図６ｂを見ると、装置１１〜１５が、メッセージ５１１〜５１５において提案されたファンクションへの投票により応答するように示される。上記で説明したように、５つの装置を備えるシステム１０では、いずれか３つ以上をクォーラムにすることができる。したがって、これらの装置のうち２つが応答していなかった場合でも、システム１０はなお、提案されたファンクションを選択しておくことが可能であった。
【００９１】
図６ｃを見ると、リーダー１３は、メッセージ５０１によって提案されたファンクションが、リーダーが応答を装置のクォーラムから受信するときに、選択されていると判断することができる。メッセージ５１１〜５１５は、装置のクォーラムがこの提案に投票していることを指示するので、リーダー１３は、この提案が選択されていることを知ることができ、したがって、メッセージ５２０などのメッセージを送信して、この提案が選択されたことを指示することができる。メッセージ５２０は、メインコンピューティング装置１１および１２にのみ送信されているとして図示されるが、メッセージ５２０をまた補助装置１４および１５に送信して、新しいクォーラムの集合の選択をこれらの補助装置に通知することもできる。しかし、リーダー１３はすでに、この提案が選択されていることを承知しているので、内部的にもそれ自体にメッセージを送信する必要はない。
【００９２】
メッセージ５２０をまた、装置１１〜１３に対して、これらの装置がすべての以前のシステムステップのために選択されたすべてのファンクションを承知していることを、リーダー１３が保証するプロセスの一部にすることもできる。例えば、装置が以前のシステムステップのために選択されたファンクションを知り、実行するまで、装置は所与のシステムステップのためのファンクションを実行することができない可能性があるので、メッセージ５２０の実行コマンドは、内部チェックを装置１１および１２で開始する役目を果たすことができる。具体的には、装置１１および１２は、ステップ１〜２６のために選択されたファンクションを知り、実行するまで、ステップ２７のために選択されたファンクションを実行することができない可能性があるので、リーダー１３は、それらの装置がステップ２７のために選択されたファンクションを実行することを要求することによって、各装置に強制的に、それらがすべての以前のシステムステップのために選択されたファンクションを承知していることを検証させることができる。メッセージ５２０はまた、類似の方法で、リーダー１３が、それについてリーダーでなかったファンクション、または、それについてファンクションを選択したクォーラム内に入っていなかったファンクションなど、以前に選択されたファンクションのその知識が現在のシステムステップまで完全であることを保証することを可能にすることもできる。
【００９３】
代替として、実行要求５２０を送信するのではなく、リーダー１３は単に装置１１および１２にポーリングして、これらの装置がすべての以前のシステムステップのために選択されたファンクションを知っており実行しているかどうかを判断することができる。装置１１および１２の一方が、特定のシステムステップのためのファンクションの選択を知っていない場合、この装置は、欠落情報をリーダー１３から、または別の装置から要求することができる。このような通信は、上述のアルゴリズムの特定のフェーズに付加される必要はないが、新しいクォーラムの集合の選択が完了すると、リーダー１３または装置１１および１２のうち１つまたは複数によって、このような通信を独立して開始することができる。
【００９４】
新しいクォーラムの集合が選択された後、メインコンピューティング装置のすべてがすべての以前のシステムステップのために選択されたファンクションを承知していることを保証するもう１つの利点は、複数のシステムステップに対する単一のファンクションの選択を回避することである。例えば、分散コンピューティングシステム１０が銀行データベースを維持し、クライアント２０が、１００ドルをそれらの口座から引き出すファンクションを要求した場合、システム１０は、その引き出すファンクションを１回だけ実行するべきである。本発明の一実施形態によって企図された、複数のステップに対する同じファンクションの選択を回避するための１つのメカニズムは、一意の識別子が割り当てられることを必要とする。このような場合、選択されたファンクションを実行する前に、各装置は、等しい識別子を有するファンクションを以前に実行していないことを検証することができる。そのファンクションがすでに実行されている場合、そのファンクションの実行を、効果がないように定義することができる。代替として、リーダーは、ファンクションを提案する前に、等しい識別子を有するファンクションが以前に選択されていないことを検証することができる。このような場合、リーダーおよび装置が以前に選択されたファンクションを承知していることを、定期的に検証することが有利となる場合がある。
【００９５】
リーダー１３ならびに装置１１および１２が、十分な数の以前のシステムステップのために選択されたファンクションを承知し、実行した後、システム１０のオペレーションは再開することができ、リーダーはクォーラムを、選択されたクォーラムの集合から選択することができる。具体的には、リーダー１３は、メインコンピューティング装置１１〜１３のみを備えるクォーラムを選択することができる。以下に例示するように、すべてのメインコンピューティング装置を備えるクォーラムは、好ましいクォーラムである可能性があり、メインコンピューティング装置の好ましいクォーラムに障害が起こるとき、他のクォーラムを使用することができる。したがって、表１によって例示したクォーラムの集合の中で、メインコンピューティング装置１１〜１３を備える、最初にリストされたクォーラムは、メインコンピューティング装置のみからなるので、好ましいクォーラムである可能性がある。
【００９６】
図７ａを見ると、分散システム１０のクライアント２０は、システムが変数「ｗ」によって表現されたファンクションを実行するという要求６００を送信することができる。要求６００を、リーダー１３に直接配信されているとして例示するが、クライアント２０はこの要求を分散コンピューティングシステム１０の装置のいずれに送信している可能性もある。装置１１または１２など、他の装置の１つが要求６００を受信していた場合、この装置は、上記で詳述したように、Ｐａｘｏｓアルゴリズムの第１のフェーズを開始することなどによって、リーダーになろうと試みている可能性があり、または、単に要求６００をリーダー１３に転送している可能性がある。例示のため、図７ａ〜ｃはシステム１０のオペレーションを、リーダー１３が直接的または間接的に要求６００を受信したかのように例示する。
【００９７】
装置１１〜１３を備えるクォーラムのリーダー１３は、図６ａ〜ｃを参照して上記で詳細にそのオペレーションを説明した装置１１〜１５を備えるクォーラムのリーダーと同じであるので、Ｐａｘｏｓアルゴリズムの第１のフェーズを実行する必要はない。むしろ、リーダーはメッセージ６０１などのメッセージを送信することによってファンクション「ｗ」を提案し、Ｐａｘｏｓアルゴリズムの第２のフェーズを開始することができる。しかし、このメッセージを以前の装置のクォーラムに送信するのではなく、リーダーはこのときメッセージ６０１を、装置１１〜１３を備える新しいクォーラムに送信することができ、新しいクォーラムは、表１によって例示された、以前に選択されたクォーラムの集合におけるクォーラムである。
【００９８】
メッセージ６０１を受信すると、各装置１１および１２は、ファンクション「ｗ」を実行するための提案に投票するかどうかを判断することができる。上記で詳細に説明したように、装置は、その投票を請求するために使用されている提案番号よりも高い提案番号を有するメッセージに応答していない場合、提案されたファンクションに投票することができる。したがって、装置１１または１２の一方が、例えば、２００より大きい提案番号を有するメッセージに応答していた場合、メッセージ６０１の提案番号は２００であるので、メッセージ６０１において提案されたファンクションに投票することができない。しかし、図７ｂに例示するように、この特定の実施例では、各装置１１〜１３は、提案されたファンクションに投票することができると判断することができ、各装置は、それぞれ適切な投票メッセージ６１１〜６１３により応答することができる。
【００９９】
メッセージ６１１〜６１３を受信すると、リーダー１３は、ファンクション「ｗ」が選択されたと判断することができ、このファンクション、および、リーダーが有する以前に選択されたファンクションの知識に応じて、リーダーはこのファンクションを実行することができる。加えて、図７ｃに示すように、リーダー１３はメッセージ６２０を装置１１および１２に送信し、ファンクション「ｗ」が選択されたこと、および、装置１１および１２が現在のシステムステップのためにそのファンクションを実行することができることを指示することができる。リーダー１３はまたメッセージ６２１をクライアント２０に戻すように送信し、適切な場合は、クライアントにファンクション「ｗ」の実行の結果を通知することもできる。同様に、リーダー１３はメッセージ６２２を送信して、装置３０および３１など、他の装置にも、選択されたファンクションの実行の結果を通知することができる。代替として、装置３０および３１はリーダー装置の役割をすることができ、ファンクションの選択に参加しないとしても、システム１０の状態を独立して維持することができる。このような場合、リーダー１３は、選択されたファンクションの実行の結果を送信する必要はないが、単に、メッセージ６２２を介して、そのファンクションが選択されたという事実を送信することができる。したがって、メッセージ６２２は、メッセージ６２１とは対照的にメッセージ６２０に類似するようになる。
【０１００】
図７ｃは、装置１３が、装置１１および１２から投票を受信し、ファンクションが選択されたことを知り、次いでこの情報をクォーラム内の両方の装置および他の装置へ中継することによって、区別された学習者の役割をすることを例示する。しかし、リーダー１３が、区別された学習者の役割をするという要件はない。例えば、装置１１など、別の装置が、区別された学習者の役割をすることができる。このような場合、装置１１〜１３はメッセージ６１１〜６１３を装置１１に送信することができ、装置１１は、図７ｃに例示されたメッセージを送信することができる。代替として、ネットワークトラフィックの量が増すことを犠牲にして、各装置１１〜１３にそれらの投票をすべての他の装置へ送信させることによって、１つのメッセージ遅延を省くことができる。このような場合、各装置１１〜１３は、ファンクション「ｗ」が選択されたことを独立して知っているようになり、リーダー１３は、メッセージ６２０などのメッセージを送信しておく必要がなくなる。加えて、装置１１〜１３のいずれもがメッセージ６２１および６２２をクライアント２０ならびにリーダー装置３０および３１にそれぞれ送信しておくことが可能である。
【０１０１】
装置１１〜１３がクォーラムを構成するので、これらの各装置の投票は、提案されたファンクションが選択されるために、要求される場合がある。したがって、装置１１〜１３の１つがメッセージ６０１に応答しなかった場合、この提案は選択されていない場合がある。上述のように、装置が提案に投票しない可能性がある１つの理由は、この装置が、より高い提案番号を有するメッセージを受信したからである。このような場合、リーダー１３は、上述の方法でＰａｘｏｓアルゴリズムの第１のフェーズを実行することによって、装置１１〜１３にリーダーの提案を選択させる目的でより高い提案番号発行に対処しようと試みることができる。
【０１０２】
しかし、リーダー１３はしばしば、なぜ特定の装置が提案に投票中でないのかを決定することができない。例えば、装置は、より高い提案番号を有するメッセージへの応答のために、提案に投票中でない場合があるが、装置に障害が起こっているか、あるいは、リーダーと装置の間の通信メディアに障害が起こっているために、装置は提案に投票中でない場合がある可能性もある。Ｐａｘｏｓアルゴリズムの第１のフェーズを実行することは、無投票状態のための１つの可能な理由に対処することしかできないので、リーダーはその代わりに、上記で選択され、表１で列挙されたクォーラムの集合がそれに基づく装置のグループから、無応答装置を除去しようと試みることができる。
【０１０３】
しかし、適切に機能中であり、より高い提案番号を有するメッセージに応答したために投票していない場合がある装置を除去することは、装置の数を減らし、それによりシステムのフォールトトレランスを低下させる。したがって、単に、新しいクォーラムの集合を定義して、それからの応答を受信していない装置を排除しようと試みるのではなく、リーダーおよびクォーラム内の他の装置は、クォーラムの装置の適切なオペレーションに関する情報を共有することができる。例えば、本発明の一実施形態によって企図された１つのメカニズムは、各装置について、それが動作可能であると他の各装置が考えるかどうかを指示する、アレイが維持されることを必要とする。装置は、状態マシンコマンドをサブミットすることによって、表内のエントリを変更することができる。次いで、装置に障害が起こっているという、提案者による確信に基づいて、いずれかの装置を排除するクォーラムの集合を提案するのに先立って、表をリーダーまたは別の装置によって調べることができる。
【０１０４】
図８ａを見ると、装置１２は、障害を経験しているとして例示される。装置１２の障害を、上述のシステムを使用して検出することができるが、本発明は、特定の装置で障害が起こっていることを検出、またはそうでない場合はこれに合意する、いかなる数の実施態様をも企図する。それにもかかわらず、装置１２の例示的障害は、どのように検出されようとも、本発明の一実施形態による、修正されたＰａｘｏｓアルゴリズムの一態様を例示するために使用される。
【０１０５】
図７ａのように、図８ａは、リーダー１３による、クライアント２０からの要求７００の受信を例示する。上述のように、要求７００をリーダー１３にクライアント２０から直接的または間接的に配信することができる。要求７００は、分散コンピューティングシステム１０が変数「ｖ」によって表現されたファンクションを実行することを、クライアント２０が望むことを指示する。結果として、リーダー１３は、次のステップ番号２９、および、以前に使用された提案番号２００を使用して、ファンクション「ｖ」が、装置１１〜１３を備えるクォーラムによって投票されることを提案する。このような提案は、メッセージ７０１によって例示される。
【０１０６】
しかし、図７ａとは異なり、図８ａでは、装置１２は障害を受けているとして例示される。上記で説明したように、このような障害は、ソフトウェアまたはハードウェア障害など、装置自体のものである可能性があり、または、装置１２とリーダー装置１３の間の通信メディアのものである可能性がある。したがって、図８ｂに例示するように、装置１２は投票メッセージをリーダー１３に送信しない。その代わりに、リーダー１３は投票メッセージ７１１および７１３を装置１１および１３からそれぞれ受信する。装置のクォーラム未満がファンクションに投票しているので、このファンクションは選択されていない。加えて、装置１１〜１３を備えるクォーラムは機能することを中止しており、これは、装置１２が、リーダー１３とのその通信を妨げている障害を経験中であるからである。したがって、リーダー１３は、ファンクション「ｖ」が、以前に選択され、上記の表１において列挙されたクォーラムの集合の一部でもある、代替クォーラムによって選択されるように試みることができる。加えて、リーダー１３は、装置１２を含まないクォーラムを備える、新しいクォーラムの集合を選択するように試みることができる。
【０１０７】
図８ｃを見ると、リーダーは、ファンクション「ｖ」が、以前に選択されたクォーラムの集合からの別のクォーラムによって選択されるように試みる。具体的には、例示した実施例では、リーダーは装置１１および１３〜１５を備えるクォーラムを選択する。リーダー装置１３はアクティブのままであるので、単に、以前に送信されたメッセージ７０１に類似するメッセージ７２０を送信することによって、新たに選択されたクォーラムを使用して、失敗した投票を再度試みることができる。選択されたクォーラムは装置１１および１３〜１５を備えるが、リーダー１３はメッセージ７２０を装置１１およびそれ自体に送信する必要はなく、これは、リーダー１３がすでに類似のメッセージ７０１をこれらの２つの装置に送信しており、図８ｂのように、すでにそれらの投票をメッセージ７１１および７１３の形態で受信しているからである。したがって、メッセージ７２０を、以前のクォーラムの一部でなく、この提案にすでに投票していなかった、新たに選択されたクォーラムの装置に送信することができる。
【０１０８】
図８ｄを見ると、メッセージ７２０を受信した各装置１４〜１５は、メッセージ７３４〜７３５を介してその提案に投票するように示される。装置１１および１３〜１５はクォーラムを備えるので、メッセージ７３４〜７３５を受信し、これらのメッセージを、図８ｂに例示した、以前に受信された投票メッセージ７１１および７１３と結合すると、リーダー１３は、この提案が受け入れられたと判断することができる。実際に、装置１１および１３〜１５のうち１つが応答しなかった場合でも、残りの３つの装置はまた、表１のリストによって証明されるように、選択されたクォーラムの１つであるクォーラムを構成し、リーダーは、そのクォーラムに依拠して、提案が選択されたと判断していることが可能である。
【０１０９】
ファンクション「ｖ」をステップ２９のために実行する提案が分散コンピューティングシステム１０によって受け入れられたので、リーダー１３は、このファンクション、および、リーダーが有する以前に選択されたファンクションの知識に応じて、このファンクション「ｖ」をステップ２９のために実行することができ、その実行の結果を、適切な場合は、図８ｅに例示するようにメッセージ７４１を送信することなどによって、そのファンクションが実行されることを要求していたクライアント２０に送信することができる。図８ｅにも例示するように、リーダーはメッセージ７４２を送信して、コンピューティング装置３０および３１に、ファンクション「ｖ」の実行の結果を通知することができ、あるいは上述のように、装置３０および３１が学習者装置である場合、リーダー１３は単に、ファンクション「ｖ」がステップ２９のために選択されたという指示を送信することができる。加えて、リーダー１３は、メッセージ７４０などのメッセージを送信し、装置１１に、ファンクション「ｖ」をステップ２９のために実行するための決定を通知することができる。装置１４および１５は、システム１１の状態を維持する必要のない補助装置であるので、これらの装置は、選択されたファンクションを実行するように命令される必要はない。むしろ、すでに示しているように、このような補助装置はクォーラムの選択を支援することができ、選択されたクォーラムが障害を経験するとき、提案に投票することができる。
【０１１０】
上述の例示的な例示では、リーダーの役割をしていなかったコンピューティング装置、すなわち、コンピューティング装置１２が障害を経験した。リーダーコンピューティング装置１３が代わりに障害を経験していた場合、メッセージ７０１において送信された提案への投票は同様に失敗しているようになる。しかし、システム１０はリーダーなしに残されているようになるので、新しいリーダー装置が、まだ動作可能であったメインコンピューティング装置の中から選択されていることが可能であった。続いて、新しいリーダーは、図８ｃに例示した方法で、選択されたクォーラムの集合からの装置のクォーラムに、現在の提案を再度サブミットしようと試みることが可能であった。
【０１１１】
しかし、その場合、新しいリーダー装置が選択されているようになるので、上述のＰａｘｏｓアルゴリズムの第１のフェーズを、いかなる提案をサブミットするのにも先立って、新しいリーダー装置によって実行することができる。上記で詳述したように、Ｐａｘｏｓアルゴリズムの第１のフェーズの実行は、新たに選択されたリーダーに、以前のリーダーによって完了されなかった保留中の提案を知るために十分な情報を提供することができる。Ｐａｘｏｓアルゴリズムの第１のフェーズの実行はまた、新たに選択されたリーダーに、すでに選択された提案を知るために十分な情報を提供することもできる。すでに選択された提案の場合、クォーラムの他の装置は、最終投票情報により応答するのではなく、単に、特定の提案が選択されたことを指示することができる。次いで、新しいリーダーは、以前のリーダーで障害が起こったときに投票されていた提案を含む、選択されなかった保留中の提案に集中することができ、これらの提案を、１つまたは複数の補助装置を備える代替クォーラムにサブミットすることができる。保留中の提案がサブミットされた後、実行は、図８ｃ〜ｅを参照して上述したように進行することができる。
【０１１２】
リーダーで障害が起こるか、別のメインコンピューティング装置で障害が起こるかにかかわらず、最終結果は、排他的にメインコンピューティング装置からなった、選択されたクォーラムの集合からのクォーラムのみが、もはや動作可能でないということである。したがって、選択されたクォーラムの集合からのクォーラムを使用してオペレーションを継続するために、システムは少なくとも１つの補助コンピューティング装置に依拠することができる。このような補助コンピューティング装置は、上述のファンクションを実行するための最適な環境を提供することができないので、動作中のメインコンピューティング装置からなるクォーラムを含むことができる新しいクォーラムの集合を、以前に選択されたクォーラムの集合からのクォーラムによって選択することができる。
【０１１３】
図９ａを見ると、リーダー１３は、新しいクォーラムの集合を定義する新しいファンクションを提案する。新しいクォーラムの集合を以下の表２で列挙し、表を見るとわかるように、障害が起こったコンピューティング装置１２を含むクォーラムは含まれない。また、表２を見るとわかるように、このようなクォーラムは分散コンピューティングシステム１０内の装置の過半数未満であるとしても、このクォーラムの集合には、動作中のメインコンピューティング装置のみのクォーラムが含まれる。表２で列挙されたクォーラムの集合は、システム１０内の装置の少なくとも過半数を備えるクォーラムによって選択されるようになるので、新たに選択されたクォーラムの集合が一貫性のないアクションを実行する可能性のあるリスクは減少する。しかし、本発明の一実施形態は、１つのクォーラムが、少なくとも１つのメインコンピューティング装置を、クォーラムの集合に投票するクォーラムと共有しない、クォーラムを含むクォーラムの集合を選択するべきではないことを企図する。
【０１１４】
【表２】
2006004433.tif 000004
【０１１５】
図９ｂを見ると、装置１１および１３〜１５は、上記の表２で列挙されたクォーラムを備える新しいクォーラムの集合「｛Ｑ２｝」を選択するための提案に投票するように示される。図９ｂに例示するメッセージ８１１および８１３〜８１５を受信すると、リーダー１３は、提案されたクォーラムの集合が選択されたと判断することができ、図９ｃに示すように、様々な装置にこの選択を通知することができる。上記のように、メッセージ８２０は、装置１１にのみ送信されるとして例示されるが、補助コンピューティング装置にもまた、クォーラムの集合「｛Ｑ２｝」の選択を通知することができる。加えて、上記で説明したように、メッセージ８２０は、装置１１および１３がすべての以前のシステムステップのために選択されたファンクションを承知していると、リーダー１３が判断することができるメカニズムの役割をすることができる。
【０１１６】
リーダー１３は、新たに選択されたクォーラムの１つと通信を開始する前に、補助装置１４および１５における計算の負担をさらに低減しようと試みることができる。上記の詳細な説明からわかるように、補助装置１４および１５は、選択されたクォーラムの集合からの、メインコンピューティング装置を備えるクォーラムが、障害を経験するとき、提案の選択に関与する。したがって、補助装置１４および１５はまれにしか使用されないので、それらの装置についての計算的な要件が低減される。さらに、補助装置１４および１５はシステムの状態を維持する必要がないので、これらの装置は、Ｐａｘｏｓアルゴリズムの第１および第２のフェーズにおいてメッセージに適切に応答するために十分な量の情報を保持することのみが必要である。具体的には、補助装置は、最後に応答した最高提案番号、ならびに、それらの補助装置が参加した各システムステップについて最後に投票した提案およびその対応する提案番号を格納することができる。
【０１１７】
補助装置によって格納される情報の量を、さらにリーダーによって減らすことができる。例えば、リーダー１３は、新たに選択されたクォーラムとの通信を開始するのに先立って、補助装置１４および１５に、ステップ１ないし３０がすでに決定されており、他のステップは決定されていないことを指示することができる。少なくとも１つのメインコンピューティング装置が、ステップ１ないし３０のために選択されたファンクションを承知しているので、補助装置１４および１５は単に、ステップ１ないし３０のためのファンクションが選択されたという事実を格納することが必要であり、選択されたファンクションを格納することはない。加えて、補助装置は、補助装置が参加したこれらのステップについての最終投票情報など、ステップ１ないし３０について保持している可能性のあるいかなる追加の情報をも廃棄することができる。このように、補助装置に課せられるストレージの負担をさらに減らすことができる。
【０１１８】
補助コンピューティング装置は、それらの最終投票情報などの情報を廃棄するように命令される可能性があるので、それに対する適切な応答が、補助装置がもはや維持しない情報を要求するメッセージを、補助装置が受信する場合のある可能性がある。本発明の一実施形態によって企図された、このような状態に対処するための１つの単純なメカニズムは、単に補助装置にメッセージを無視させることである。
【０１１９】
本発明の一実施形態によって企図された１つのメカニズムによれば、最終投票情報の一部として、補助装置が最後に投票した完全なファンクションではなく、ファンクションのハッシュまたは他の一意の識別子のみを格納することによって、補助装置のリソースの量をさらに減らすことができる。当業者にはわかるように、提案されたファンクションは数メガバイトのデータを含む可能性があるが、このようなファンクションのハッシュは２、３キロバイトのみである可能性が高く、ファンガープリントファンクションは一般に６４または１２８ビットのみを使用し、さらに少数を使用してファンクションを識別することができる。さらに、いかなるクォーラムも、完全なファンクションをその最終投票情報と共に保持しているようになる、少なくとも１つのメインコンピューティング装置を備えるので、以前のファンクションを知るリーダーは、ファンクションのハッシュまたはフィンガープリントのみを含むいくつかの応答を受信する場合があるが、ファンクションがクォーラムによって選択された場合、リーダーは、ファンクションを選択したクォーラム内の少なくとも１つのメインコンピューティング装置から、完全なファンクションの少なくとも１つのコピーを受信するようになる。したがって、補助コンピューティング装置に課せられるストレージの負担は、システムのオペレーションに影響を与えることなく、さらに減らすことができる。
【０１２０】
図１０ａを見ると、リーダー装置１３は、クライアントコンピューティング装置２０からの、分散コンピューティングシステム１０が変数「ｕ」によって識別されたファンクションを実行することを要求する要求９００を受信するように示される。上述のように、要求９００をリーダー１３によって直接的または間接的に、分散コンピューティングシステム１０内の別の装置から受信することができる。クライアントの要求９００を受信すると、リーダー１３は、後続のシステムステップのためのファンクション「ｕ」の実行の提案を、表２で列挙される選択されたクォーラムの集合内の装置のクォーラムに送信することができる。図１０ａで例示した実施例では、リーダー１３は、メインコンピューティング装置を備え、補助装置を備えない、好ましいクォーラムを選択することができる。表２に示すように、装置１１および１３を備えるクォーラムは、選択されたクォーラムの集合の一部であり、したがって、このクォーラムを使用することができる。したがって、リーダー１３はメッセージ９０１をそれ自体および装置１１に、図１０ａに示すように送信することができる。
【０１２１】
装置１１および１３の両方は、図１０ｂにおけるメッセージ９１１および９１３によって例示されるように、提案に投票することができる。このような場合、リーダー１３は、提案されたファンクション「ｕ」がクォーラムによって選択されたと判断することができ、このファンクション、および、リーダーが有する以前に選択されたファンクションの知識に応じて、リーダーはファンクション「ｕ」を実行し、実行の結果をクライアント２０に、図１０ｃに示すようにメッセージ９２１を介して送信することができる。加えて、リーダー１３は、選択されたクォーラムの他の装置、すなわち、この実施例では装置１１に、メッセージ９２０などの実行メッセージを介してファンクション「ｕ」の選択を通知することができる。また、前述のように、リーダー１３は、装置３０および３１など、他の装置に、ファンクション「ｕ」の実行の結果を、メッセージ９２２を介して通知することができ、あるいは、装置３０および３１が学習者装置である場合、リーダーはこれらの装置に、ファンクション「ｗ」がステップ３１のためにクォーラムによって選択されたという事実のみを通知することができる。
【０１２２】
上記の実施例は、障害が起こった装置を含むクォーラムを含まない新しいクォーラムの集合を選択することによって、障害の起こった装置を除去する手順を、詳細に説明するが、類似の手順を実行して、新しい装置または修理された装置を追加することができる。例えば、表２で列挙されたクォーラムの集合を提案する代わりに、リーダー１３は、以下の表３で列挙されたようなクォーラムの集合「｛Ｑ２’｝」を提案することによって、新しい装置１６を追加していることが可能である。クォーラムの集合「｛Ｑ２’｝」は、図９ｂ〜９ｃで例示された方法に類似の方法で選択されていることが可能であり、図１０ａ〜１０ｃで例示された方法に類似の方法で動作していることが可能である。
【０１２３】
【表３】
2006004433.tif 000005
【０１２４】
表に示すように、補助装置はしばしば使用されないが、補助装置は、各メインコンピューティング装置の状態が一貫したままであることを保証することができる。例えば、上述の分散コンピューティングシステム１０がメインコンピューティング装置１１〜１３のみを備えた場合、これらの装置の間の通信メディアの障害は各装置にとって、他の２つの装置の障害のように見えるようになる。したがって、実際には、ハードウェアまたはソフトウェアのエラーなどにより、装置で障害は起こっていないが、各装置は、他の装置で障害が起こっていると考える。補助コンピューティング装置なしで、システムが、上述のシステムと同じレベルのフォールトトレランス、すなわち、２つほどの障害を許容する能力を維持しようと試みた場合、各装置は、それ自体が最後に残っている装置であると考え、システムが２つの障害のみを経験していると考えて、提案されたファンクションの選択を継続するようになる。しかし、３つの装置はこのとき互いに独立して動作中となるので、それらの状態は急速に分化する可能性がある。
【０１２５】
補助装置の追加は、分散コンピューティングシステムが、上記で詳述した方法で、ファンクションを選択中である装置に合意することを可能にし、２つ以上の装置が互いに独立してファンクションを選択しないことを保証する。例えば、装置１１〜１３の間の通信メディアの障害の場合、各装置１１〜１３はこの障害を、他の２つの装置の障害として考えるようになる。しかし、補助装置１４〜１５の存在のため、装置１１〜１３のいずれも、装置１４〜１５の投票を受信することなく、システムステップのためのファンクションを選択することができる。したがって、装置１１〜１３が互いに通信することができないとしても、補助装置１４〜１５とのそれらの通信は、各装置１１〜１３が、システムステップのために選択されている可能性のあるいかなるファンクションを知ることも可能にし、それにより、２つ以上の異なるファンクションが同じシステムステップのために選択されることを防止する。代替として、装置１１〜１３の１つまたは複数が補助装置１４〜１５とも通信することができなかった場合、その装置は、いかなるファンクションのための投票のクォーラムも受信することができなくなり、独立してファンクションを選択しないようになる。このように、システムはＰａｘｏｓアルゴリズムの上述の特性に依拠して、単一の装置または装置のグループのみが、ファンクションの選択を継続するための権限を有すること、および、いかなる所与のシステムステップについても単一のファンクションのみが選択されることを保証する。
【０１２６】
クォーラム状態マシンにおいて補助装置を使用する、修正されたＰａｘｏｓアルゴリズム
単一の状態マシンを使用して提案を選択し、将来に使用されるべきクォーラムの集合を選択するのではなく、本発明の一実施形態によって企図されたもう１つのメカニズムは、フォールトトレラントなアルゴリズムを実施する２つの異なる状態マシンを必要とする。一方の状態マシンを、もう１つの状態マシンによって使用されるべきクォーラムを選択することができる、クォーラム選択状態マシンにすることができる。他方の状態マシンを、分散コンピューティングシステムのクライアントによって要求されたファンクションを提案および選択するために、クォーラム選択状態マシンによって選択されたクォーラムを使用する、システム状態マシンにすることができる。クォーラム選択状態マシンおよびシステム状態マシンは２つの異なる状態マシンにすることができるが、これらのマシンは共に重複する集合のコンピューティング装置によって実施することができる。補助コンピューティング装置をクォーラム選択状態マシンの一部として使用して、フォールトトレランスを提供することができ、クォーラム選択状態マシンは次いで、システム状態マシンによって使用されるべき動作可能なメインコンピューティング装置を備えるクォーラムを選択することができる。
【０１２７】
図１１ａを見ると、クォーラム選択状態マシンは、装置１１〜１５を備える分散コンピューティングシステム１０によって実施されるように示され、前述のように、装置１１〜１３はメインコンピューティング装置として例示され、装置１４〜１５は補助コンピューティング装置として例示される。図１１ａは、装置１３がリーダーの役割をし、上記で詳述したように、１２以上の番号のすべてのシステムステップのために提案番号１００を有するメッセージ１０００を送信することを例示する。各装置１１〜１５はメッセージ１０００に、１００未満の提案番号を有する提案に対する装置の最終投票に関する情報により、応答することができる。図１１ｂを見ると、装置１１〜１５は、メッセージ１０００に、メッセージ１０１１〜１０１５における最終投票情報により応答するように示される。メッセージ１０１１〜１０１５など、応答メッセージが、リーダーが保留中のファンクションをクリーンアップすることを要求する情報を含む場合、リーダーは、図４を参照して上記で詳述したように、それを行うことができる。しかし、図１１ｂに示すこの例示的な例示は、装置１１〜１５のいずれもが、システムステップ１２のために実行されるべきファンクションへのいかなる以前の投票をも有していないことを指示する。したがって、リーダー１３はいかなるファンクションを装置１１〜１５に提案することもできる。
【０１２８】
図１１ｃを見ると、リーダー１３は、システム状態マシンのためのクォーラムを定義するためのファンクションを提案するように示される。具体的には、メッセージ１０２０は、装置１１〜１３を備えるクォーラムがシステム状態マシンによって使用されるように提案されていることを指示するが、装置１３はリーダーの役割をするようになり、クォーラムは、リーダーが提案番号２００を使用することができる限り、効力を有するままとなる。言い換えれば、メッセージ１０２０は、装置１１〜１３を備えるクォーラムに、提案番号２００のためのクォーラムの役割をするように提案する。したがって、提案されたクォーラムのリーダーがＰａｘｏｓアルゴリズムの第１のフェーズを２度目に使用する必要がある場合、この提案番号は変わるようになり、以下に例示するように、クォーラム選択状態マシンを使用して、新しい提案番号のための別のクォーラムを選択することができる。
【０１２９】
各装置１１〜１５がメッセージ１０２０を受信すると、これらの装置はそのメッセージに投票するかどうかを判断することができる。上記で詳細に説明したように、装置は、現在の提案に関連付けられた提案番号より高い提案番号を有するメッセージに応答していない限り、現在の提案に投票することができる。図１１ｄは、各装置１１〜１５が提案されたクォーラムに、投票メッセージ１０３１〜１０３５を介して投票することを例示する。上記で説明したように、クォーラムを、選択されたクォーラムの集合内の他のあらゆるクォーラムと少なくとも１つの装置を共有する状態マシンを実施する装置のいかなる集まりにすることもできるので、リーダー１３が、例示されたクォーラム選択状態マシンを実施する装置１１〜１５から３つの投票しか受信していなかった場合でも、提案されたクォーラムが選択されたと判断していることが可能であった。
【０１３０】
リーダー１３が、提案されたクォーラムが選択されたと判断した後、他のメインコンピューティング装置１１および１２に、メッセージ１０４０などのメッセージを介して通知することができる。メッセージ１０４０は図１１ｅで、他のメインコンピューティング装置１１および１２のみに送信されるとして例示されるが、補助コンピューティング装置１４および１５にも、提案されたクォーラムの選択を通知することができる。
【０１３１】
クォーラム選択状態マシンが特定の提案番号のためのクォーラムを選択しており、リーダー装置を指定した後、選択されたクォーラムをシステム状態マシンによって使用することができる。最初に、選択されたリーダー装置は、リーダーが承知していないいかなる保留中または選択された提案をも知るように試みることができる。図１２ａを見ると、選択されたリーダー装置１３は、リーダーが次のシステムステップ、すなわちこの実施例ではステップ２８であると考えるシステムステップのために、選択された提案番号２００を有するメッセージを送信するように示される。
【０１３２】
リーダーのメッセージ１１００への応答において、選択されたクォーラムの各装置はそれらの最終投票情報に、上記で詳述したように応答することができる。しかし、クォーラムの構成は、各提案番号、どのファンクションを所与のシステムステップのために実行するべきであるかを決定する助けとなることができる、本発明の一実施形態によって企図された１つのメカニズムにより変わる場合があるので、メッセージ１１００への応答において、各装置はまた、それらが有する安全提案のいかなる知識を含むこともできる。例えば、図１２ｂに示すように、装置１１はメッセージ１１１１を送信することができ、提案番号１８０を使用して提案された、変数「ａ」によって表現されたファンクションの提案に装置１１が最後に投票したこと、および、すべての提案可能な値が提案番号１９９で安全であることを装置１１が知っていることを指示する。メッセージ１１１１はまた、ステップ２８を越えるいかなるシステムステップにも装置１１が投票していないことも指示することができる。また図１２ｂに示すように、装置１２からのメッセージ１１１２は類似の情報を含むことができる。例えば、メッセージ１１１２は、装置１２がステップ２８を越えるいかなるシステムステップにも投票していないが、提案番号１９０を使用して提案された変数「ｂ」によって表現されたファンクションに投票していること、および、すべての提案可能な値が提案番号１９９で安全であることを装置１２が知っていることを指示することができる。
【０１３３】
当業者には理解されるように、上記の実施例などの状況では、各装置が安全であると知っているファンクションの情報には、最後に投票されたファンクションが含まれ、装置１１または１２などの装置は、それらの最後の投票に関する情報を送信する必要はない。例えば、装置１１はメッセージ１１１１を介して、すべての提案可能な情報が安全であることを知っていることを指示するので、ファンクション「ａ」に投票したという追加の情報は少しも重要でない場合があり、したがって、メッセージ１１１１に含める必要はない場合がある。
【０１３４】
装置は、リーダーによって、装置が属した以前のクォーラムをそのように通知された場合、ファンクションが安全であると知ることができる。リーダーは、装置がすでにファンクションに投票していることを指示するか、あるいは装置が、ファンクションが安全であると知っていることを指示する、少なくとも１つの装置からの応答、および、他のクォーラムが、中間の提案番号を使用して、異なるファンクションを選択している可能性がないという指示を受信する場合、ファンクションが安全であると決定することができる。具体的には、特定のシステムステップのために実行されるべきファンクションは、他のファンクションが、現在の提案番号未満であるいずれかの提案番号を使用してそのシステムステップのために実行されるように選択されている可能性がない場合、現在の提案番号で安全である可能性がある。
【０１３５】
したがって、現在のステップ番号未満である各ステップ番号に関連付けられたクォーラムが何を達成している可能性があるかを知ることが必要である可能性がある。したがって、クォーラム選択状態マシンは連続する提案番号を使用することができ、以前の提案番号に関連付けられたクォーラムと装置を共有するクォーラムを選択しようと試みることができる。代替として、リーダー装置は、メッセージ１１００などのメッセージを、以前のクォーラムのメンバであった装置へ、これらの装置が現在選択されたクォーラムのメンバではない場合でも、送信することができる。リーダーが、現在の提案番号未満の提案番号を使用して以前のクォーラムによって選択されている可能性のあるいかなるファンクションをも知った後、リーダーは現在選択されたクォーラムとの通信を再開することができる。また、単一のファンクションのみをいずれかの所与のシステムステップのために選択および実行することができるので、リーダーが、複数のファンクションが安全であると知る場合、ファンクションが以前に選択されている可能性はなく、すべてのファンクションが安全である。
【０１３６】
本発明の一実施形態は、リーダーが、選択された装置から、各装置の最終投票の指示およびどのファンクションが安全であると装置が知るかの指示を収集することができ、この情報から、リーダーは、安全であると知られるファンクションを決定し、いかなる提案を送信する前にも、この情報をクォーラム内の残りの装置に提供することができる。具体的には、ただ１つのファンクションが以前に投票されるか、あるいは安全であると知られるとして指示される場合、リーダーは、そのファンクションのみが安全であることを、残りの装置に通知することができる。代替として、ファンクションが以前に投票されるか、あるいは安全であると知られるとして指示されない場合、または、複数のファンクションが以前に投票されたとして指示される場合、リーダーは、すべてのファンクションが安全であると判断することができ、残りの装置に、すべてのファンクションが安全であると知られることを通知することができる。
【０１３７】
いかなるファンクションを提案する前にも、知られた安全情報を送信することによって、リーダーは、安全なファンクションの知識が、増え続ける提案番号に関連付けられたクォーラムの中で伝搬されることを保証することができ、これは、障害がクォーラムを動作不能にし、新しいクォーラムが選択される前に、クォーラムの装置が提案に投票する機会を得ない場合でもそうである。例えば、１つの提案番号のためのクォーラムは第１および第２の装置を備えることができ、第１の装置で、いかなる提案が投票のためにサブミットされる前にも障害が起こる可能性がある。続いて、より大きい提案番号のための新しいクォーラムを、第２の装置および第３の装置を備えるように選択することができ、今度は第２の装置で、いかなる提案が投票のためにサブミットされる前にも障害が起こる可能性がある。第３の装置のみを備える第３のクォーラムを次いで、さらに大きい提案番号のために選択することができる。しかし、第１の装置が安全なファンクションの知識を第２の装置に伝えていない限り、および、第２の装置が続いてそれ自体の安全なファンクションの知識を第３の装置に伝えていない限り、第３の装置は、何のファンクションが安全であったかを決定することができない場合がある。
【０１３８】
具体的には、第１および第２の装置では、提案に投票する機会がある前に障害が起こったので、これらの装置は最終投票情報を有していない。結果として、最終投票情報のみに依拠することによって、第３の装置は、第２の装置が以前にいかなる提案にも投票しなかったことを知ることができるが、第２の装置が一度も投票していないので、第３の装置は、第２の装置からの、何を第１の装置が行った可能性があるかについてのいかなる情報を収集することもできない。第３の装置は、第１の装置がすでに提案に投票しているかどうかを判断することができないので、何の提案が安全であるかを決定することができない。逆に、最終投票情報とは無関係に安全なファンクションの知識を伝搬することによって、第１の装置は第２の装置に、投票が入れられていなかったのですべてのファンクションが安全であったことを伝えておくことが可能であり、第２の装置は続いてこの情報を第３の装置に伝えておくことが可能である。したがって、最終投票情報のみへの依拠は、第１の装置が修理されるまでシステムを停止させている可能性があるが、最終投票情報とは無関係に安全なファンクションの知識を伝搬することによって、システムは、この例示的な場合に類似の状況でもオペレーションを継続することができる。
【０１３９】
したがって、システムステップ２８のためのいかなるファンクションを提案する前にも、リーダー１３は最初に装置１１および１２に、メッセージ１１１１および１１１２に基づいて提案２００のために安全であると知られるとリーダー１３が決定しているファンクションを、通知することができる。図１２ｃを見ると、リーダー１３は装置１１および１２に、すべての提案可能なファンクションが、２７より大きいすべてのステップについて提案番号２００で安全であると知られることを、通知することができ、これは、すべての提案可能なファンクションがステップ２８のための提案１９９で安全であると知られており、ステップ２８のための提案１９９でファンクションが選択されず、ステップ２８を越えるステップのための提案番号２００で知られた安全なファンクションに関する情報が受信されなかったからである。メッセージ１１２０などのメッセージを受信すると、受信側装置は、それらの既知の安全なファンクションの知識をアップデートすることができる。したがって、クライアントが、システム１０が長期間に渡ってファンクションを実行することを要求せず、メインコンピューティング装置１１〜１３のうち１つで待機中に障害が起こる場合、安全であると知られるファンクションの知識を記録して、将来のクォーラムが進行することができることを保証するために後に使用することができる。
【０１４０】
しかし、クライアント装置２０などのクライアントが、分散コンピューティングシステム１０によって実施されたシステム状態マシンに、ファンクションを実行するように要求する場合、リーダー１３は、上述のステップを完了した後、ファンクションをクォーラム内の残りの装置に提案することができる。この実施例では、現在の提案番号２００では、すべての提案可能な値は、ステップ２７を越えるすべてのステップについて安全であると知られる。したがって、クライアント２０が実行していることを望むいかなるファンクションも、システムステップ２８での実行のために提案することができる。
【０１４１】
例えば、装置１１〜１３を備えるクォーラムによってクライアント２０から受信された提案の選択の上記の詳細な説明は、この実施例に等しく当てはまる。例えば、図１２ｃに例示するように、メッセージ１１２０を広めた後、リーダー１３は、図７ａに例示するように要求６００をクライアント２０から受信することができる。したがって、上述のように、リーダー１３は、要求されたファンクションをメッセージ６０１において提案し、図７ｂに示すように応答メッセージ６１１〜６１３を受信することができる。応答メッセージ６１１〜６１３から、リーダー１３はこのファンクションが選択されたと判断することができ、適切な環境において、このファンクションをシステムステップ２８のために実行し、適切な装置に、図７ｃに示すメッセージ６２０〜６２２を介して通知することができる。
【０１４２】
装置が障害を経験していた場合、またはより高い提案番号を有するメッセージを受信していた場合など、装置１１〜１３のうち１つが提案に投票しなかった場合、異なる提案番号を使用する、異なるクォーラムを選択することができる。例えば、図８ａに示すように、装置１２は障害を経験中である可能性があり、したがって、リーダー１３によって送信されたメッセージ７０１に応答しない場合がある。したがって、図８ｂに示すように、リーダー１３はメッセージ７１１および７１３を、装置のクォーラム未満から受信するようになり、この提案は選択されないようになる。１つのクォーラムが提案番号２００のために選択されており、そのクォーラム内のあらゆる装置が投票していないので、新しいクォーラムを、徐々に増えるより大きい提案番号のために選択することができる。したがって、システム状態マシンによって使用されたクォーラムの障害の結果として、クォーラム選択状態マシンを使用して、システム状態マシンのための新しいクォーラムを選択することができる。
【０１４３】
上述のように、クォーラム選択状態マシンおよびシステム状態マシンを異なる状態マシンにすることができるが、これらのマシンを同じ装置によって実施することができる。例えば、状態マシンを実施するためのソフトウェアは２つの独立スレッドを備えることができ、一方のスレッドはソフトウェアのクォーラム選択状態マシンにおける参加の管理専用にされ、他方のスレッドはソフトウェアのシステム状態マシンにおける参加の管理専用にされるようにする。代替として、コンピューティング装置は複数のプログラムを同時に実行中にすることができ、一方のプログラムは装置のクォーラム選択状態マシンにおける参加を管理し、もう一方のプログラムは装置のシステム状態マシンにおける参加を管理する。当業者にはわかるように、クォーラム選択状態マシンおよびシステム状態マシンが同じ装置によって実施される場合、各状態マシンを実施するために使用されるメッセージは、どの状態マシンにメッセージが関連するかを指定することができる。例えば、メッセージ１０００、１０１１〜１０１５、１０２０、１０３１〜１０３５および１０４０は、それらがクォーラム選択状態マシンメッセージであると指定することができるが、メッセージ１１００、１１１１〜１１１３および１１２０は、それらがシステム状態マシンメッセージであると指定することができる。このような状態マシン情報を、提案番号または提案値などの情報と共に、メッセージのペイロードの一部にすることができ、あるいはこれを、様々なメッセージヘッダ内または他の類似の基礎的なネットワーク構造内で指定することができる。
【０１４４】
したがって、装置１１〜１３がクォーラム選択状態マシンおよびシステム状態マシンに参加することができるので、これらの装置がシステム状態マシンの一部として実行中であったとしても、これらの装置は、クォーラム選択状態マシンの一部としてのそれらの役割を、介入するオペレーションが発生しなかったかのように、再開することができる。したがって、図１３ａで例示するように、リーダー１３は、Ｐａｘｏｓアルゴリズムの第１のフェーズを実行することなく、クォーラム選択状態マシンの装置の一部または全部の間で投票を開始することができる。メッセージ１２００はしたがって、クォーラム選択状態マシンがステップ１３で、システム状態マシンのための装置１１および１３を備えるクォーラムを定義するファンクションを実行することを、リーダー１３が提案番号１００により提案中であることを、指示することができる。このような提案されたクォーラムは、システム状態マシンが装置１２の障害にもかかわらず、オペレーションを継続することを可能にするようになる。リーダー１３はまた、メッセージ１２００において、提案されたクォーラムがシステム状態マシンにおいて提案番号２０１のためのものであること、および、提案されたクォーラムのリーダーは装置１３となることを指定することもできる。
【０１４５】
システム状態マシンによって使用されたクォーラムは、クォーラム状態マシンによって選択され、分散コンピューティングシステム１０のすべての装置の少なくとも過半数を備えるように要求されないので、１つのクォーラムが別のクォーラムといかなる装置をも共有しない場合がある可能性が存在する。したがって、安全なファンクションの知識が、一連の提案番号に関連付けられた一連のクォーラムを通じて正確に伝播されることを保証するために、クォーラム選択状態マシンによって選択された一連の提案番号を順次にすることができる。また、リーダー装置が安全なファンクションを決定するとき、リーダー装置は、それについてリーダーに安全である１つまたは複数のファンクションが通知されている最後のクォーラムと、現在のクォーラムの間の、すべてのクォーラムについて、クォーラム内の少なくとも１つの装置が以前のクォーラム内に存在したことを検証することができる。リーダーを支援するため、クォーラム選択状態マシンは、単一の装置を共有しない連続クォーラムの選択を回避することができる。したがって、図１３ａに示すように、提案されたクォーラムには装置１１および１３が含まれ、その両方が以前のクォーラムの一部であり、提案されたクォーラムに関連付けられた提案番号は２０１であり、これは、提案番号２００に関連付けられた以前のクォーラムと、現在提案されたクォーラムの間で、クォーラムが選択されなかったことを指示する。
【０１４６】
図１３ｂを見ると、装置１１、１３および１４は、メッセージ１２１１、１２１３および１２１４を介して、メッセージ１２００の提案に投票しているように示される。装置１２は、障害を経験しているとして例示され、この障害は、上述の例示的システム状態マシン内の装置１２の障害に関係付けられる可能性がある。しかし、ただ装置がある状態マシンに参加中に障害が起こるからといって、必ずしも、別の状態マシンに参加中に障害が起こるようになるとは限らない。例えば、単一のハードウェアコンピューティング装置上では、システム状態マシンに参加している１つのソフトウェアコンポーネントで障害が起こる可能性があるが、クォーラム選択状態マシンに参加している別のソフトウェアコンポーネントは適切に動作し続ける可能性がある。しかし、ハードウェアまたは通信障害など、いくつかのタイプの障害は、すべての状態マシンにおける参加に等しく影響を及ぼす可能性がある。それにもかかわらず、ある状態マシンのための提案を装置に送信することは、その装置が別の状態マシンに参加中に障害が起こっている場合でも、有益である可能性がある。したがって、図１３ａに示すように、クォーラム選択状態マシン内のメッセージ１２００は、以前に例示したように、システム状態マシン内の装置１２の障害にもかかわらず、装置１２に送信された。しかし、この実施例では、装置１２は、両方の状態マシンへのその参加を妨げる障害を経験中である可能性があり、したがって、図１３ｂに例示するように、メッセージ１２００に応答しない場合がある。
【０１４７】
図１３ｂに例示する例示的クォーラム選択状態マシンは５つの装置を備えるので、２つほどの同時障害を許容することができる。したがって、別の装置で障害が起ころうとした場合でも、メッセージ１２００で送信された提案はなお、少なくとも３つの装置を備える装置のクォーラムによって選択されている可能性がある。補助装置もまたメイン装置のように、障害を経験する可能性がある。例えば、図１３ｂに示すように、装置１５もまた窓外を経験中である可能性があり、結果として、メッセージ１２００に応答しない場合がある。それにもかかわらず、装置１１、１３および１４を備える装置のクォーラムは、受け入れメッセージ１２１１、１２１３および１２１４をリーダー１３に送信しているとして例示され、リーダーはしたがって、ファンクションが選択されたと判断することができる。
【０１４８】
図１３ｃを見ると、リーダー１３は他のコンピューティング装置に、新しいクォーラムの選択、クォーラムが使用するべき新しい提案番号、および新しいクォーラムのリーダーを通知することができる。このような情報をメッセージ１２２０において送信することができ、メッセージ１２２０は、動作可能なメインコンピューティング装置にのみ送信されるとして示されるが、補助コンピューティング装置にも送信して、それらの装置にこの選択を通知することもできる。
【０１４９】
選択されたクォーラムは次いで、図１４ａに示すように、選択されたリーダーおよび選択された提案番号を使用してオペレーションを再開することができる。新しい提案番号が選択されているので、リーダー１３は、提案メッセージ１３００を選択されたクォーラム内の装置、すなわちそれ自体および装置１１に送信することによって、以前の投票または他の既知の安全提案を知ることができる。提案メッセージ１３００はシステムステップ２９を指示することができ、これは、装置１２が障害を経験したときにステップ２９のためのファンクションを選択しようとする以前の試みが不成功であったので、ファンクションが例示のシステム状態マシン内でステップ２９についてまだ決定されていないからである。
【０１５０】
図１４ｂを見ると、装置１１および１３は提案メッセージ１３００に、メッセージ１３１１および１３１３により応答し、最終投票情報、および、安全であると知られるファンクションに関する情報を提供することができる。したがって、例えば、装置１１は、提案番号２００を有する変数「ｖ」によって表現されたファンクションに最後に投票したこと、および、ファンクション「ｖ」が提案番号２００で安全であることを知っていることを指示することができる。装置１３は、それ自体の最終投票情報、および、安全であると知られるファンクションに関してそれが有したいかなる情報をも決定していることが可能であるので、この情報を含む明示的メッセージを送信する必要はない。したがって、メッセージ１３１３はいかなる情報を含む必要もなく、これは装置１３がすでにそれ自体の情報へのアクセスを有するからである。
【０１５１】
上記で説明したように、リーダーは、リーダーの提案メッセージへの応答において受信された、最終投票情報、および、安全であると知られるファンクションについての情報を収集することができ、図１４ｃに示すメッセージ１３２０など、安全であると知られるファンクションについてクォーラムの他の装置に通知するメッセージを送信することができる。例えば、リーダー１３は、ファンクション「ｖ」がステップ２９について安全であったという指示を受信しており、他のいかなる安全なファンクションのいかなる情報をも受信しなかったので、リーダーは、ファンクション「ｖ」がステップ２９のための提案番号２０１で唯一の安全なファンクションであるという結論を出すことができる。加えて、リーダー１３は、２９より大きいステップのための安全なファンクションに関するいかなる情報をも受信しなかったので、すべての提案可能なファンクションが、２９より大きいすべてのステップについて安全であると結論を出すことができ、この情報をメッセージ１３２０に含めることができる。
【０１５２】
上述のように、分散コンピューティングシステムは、銀行の引き出しなど、要求されたファンクションを一回のみ実行することが重要である可能性がある。したがって、ただファンクションが１つの装置によって以前に投票されたからといって、必ずしもリーダーがそのファンクションを提案しなければならないという意味であるとは限らない。その代わりに、例示のように、リーダーは、ファンクションを提案する前に、他のいずれかの安全なファンクションがあるかどうかを知ることができる。このように、リーダーは同じファンクションが２回以上提案および選択されないように試みることができる。加えて、一意のファンクション識別子を使用して、リーダーまたは他の装置を助けることができ、これは、これらの装置が重複したファンクションを検出できるようにして、同じファンクションがすでに実行された場合はそのファンクションの実行に効果がないように定義することができるようにすることなどによって行う。
【０１５３】
上述と同じように、リーダーは、安全であると知られるファンクションに関する情報を広めた後、システム状態マシンに、提案されたファンクションを選択させようと試みることを進めることができる。したがって、図１４ｄを見ると、リーダー１３は、メッセージ１３３０を送信して、システム状態マシンがファンクション「ｖ」をステップ２９のために選択することを提案するように示される。ファンクション「ｖ」がメッセージ１３２０内で、ステップ２９について唯一の安全なファンクションとして指示されたので、リーダー１３はクライアント要求を待機する必要はないが、ファンクション「ｖ」を自力で提案し、このファンクションが選択されるように試みることができる。前述のように、クォーラムはクォーラム選択状態マシンによって、装置１２を含まないように定義されているので、リーダー１３はメッセージ１３３０などのメッセージをそれ自体および装置１１に送信することのみが必要である。
【０１５４】
図１４ｅを見ると、装置１１および１３は、提案されたファンクション「ｖ」に投票しているように示される。クォーラム選択状態マシンによって定義されたクォーラムは、装置１１および１３を備えるので、クォーラム内の各装置はこのファンクションに投票しており、リーダー１３は、このファンクションが選択されたと判断することができる。したがって、図１４ｆのように、リーダー１３は適切な環境においてファンクションを実行し、その実行の結果をクライアント２０へメッセージ１３５１を介して、また他の関心のある装置３０および３１へメッセージ１３５２を介して、通信することができる。代替として、装置３０および３１がリーダー装置である場合、リーダー１３は、ファンクション「ｖ」が選択されたという事実を、リーダーが装置１１にファンクション「ｖ」の選択をメッセージ１３５０により通知する方法に類似の方法で、通信することができる。したがって、分散コンピューティングシステム１０全体は５つの装置を備えるが、クォーラム選択状態マシン内の装置の少なくとも過半数がそれに投票している限り、システム状態マシンクォーラムをわずか１つの装置にすることができる。
【０１５５】
システム状態マシンのオペレーションは、装置１１および１３により、図１０を参照して上述した方法に類似の方法で、継続することができる。例えば、図１０ａに示すように、クライアント２０は要求９００をリーダー１３に送信することができ、リーダー１３は次いでこれを、選択されたクォーラムへ、メッセージ９０１などのメッセージを介して提案することができる。言うまでもなく、図１０ａはこの実施例とは、ステップ番号および提案番号において異なる。それにもかかわらず、クライアント２０によって提案されたファンクションの選択は、図１０ｂおよび図１０ｃに例示した方法に類似の方法で進行することができ、図１０ｂでは、リーダーはクォーラム内の装置の投票を受信し、図１０ｃでは、リーダーは他の装置に、要求されたファンクションの選択、または、要求されたファンクションの実行の結果を通知する。
【０１５６】
上記の実施例からわかるように、システム状態マシンは、クォーラム選択状態マシンに依拠して、障害のある装置を除外するようにクォーラムを定義することによって、障害を許容することができる。したがって、１つのメインコンピューティング装置が動作可能のままである限り、クォーラム選択状態マシンはクォーラム、すなわち、１つの残りの動作可能なメインコンピューティング装置を、システム状態マシンが使用するために、定義することができる。しかし、クォーラム選択状態マシンが装置を、システム状態マシンによって使用されたクォーラムから除去するたびに、システム状態マシンの、将来の障害を許容する能力は低下する。本発明の一実施形態によって企図された１つの解決法は、新しい、または修理されたメインコンピューティング装置を、システム状態マシンによって使用されたクォーラムに追加することである。クォーラム選択状態マシンは装置をシステム状態マシンのクォーラムに、上記で詳述した装置の除去に類似の方法で追加することができる。新たに追加された装置は次いで、以前に選択された提案を、他の装置をポーリングすることによるなど、Ｐａｘｏｓアルゴリズムによって企図された標準の手順を通じて知ることができる。以前のクォーラムからの少なくとも１つのコンピューティング装置が十分な長さの時間に渡って動作可能のままである限り、新たに追加された装置は、以前に選択されたファンクションを知ることができ、共通の状態を達成することができる。
【０１５７】
新しいまたは修正された装置を追加することに加えて、障害を経験中であると考えられる装置を除去するのに先立って厳密な基準を適用することによって、システム状態マシンの、将来の障害を許容する能力を増すことができる。例えば、装置がリーダーのメッセージに応答していないからというだけで装置を除去することは、適切に機能中の装置を不必要に除去する可能性がある。したがって、本発明の一実施形態によって企図された１つのメカニズムは、上記で詳述した方法においてアレイを維持して、別の装置が障害を経験中であるとある装置が考えるかどうかを指示することができるものである。このようなアレイを、クォーラム選択状態マシンによって維持することができる。
【０１５８】
クォーラム選択状態マシンを実施する各装置は、上記で詳述した、Ｐａｘｏｓアルゴリズムに関連付けられる情報を維持することができる。加えて、補助装置は、ハッシュに依拠するか、あるいは、同じく上記で詳述した方法で、クォーラムが選択されたという事実のみを格納することによって、使用されるストレージスペースの量を節約することができる。システム状態マシンを実施するメインコンピューティング装置は、各装置の最終投票に関する情報を維持することができ、また、安全であると知られるファンクションに関する情報も維持することができる。具体的には、システム状態マシン内の各メインコンピューティング装置は、（１）それについて装置がメッセージを受信または送信している最高提案番号、（２）装置が一票を投じている最大提案番号、（３）その提案番号について記録された投票情報、（４）その投票番号で安全である値を装置が知る最大提案番号、および（５）装置が安全であると知る値または値の集合を備える、情報を維持することができる。上記で説明したように、いくつかの環境では、装置が一票を投じている最大提案番号、および、その提案番号について記録された投票情報はすでに、装置が安全であると知る値または値の集合、および、その投票番号で安全である値を装置が知る最大提案番号によって、包含される可能性がある。このような場合、装置が一票を投じている最大提案番号、および、その提案番号について記録された投票情報は、別々に維持される必要はない。装置が、メッセージ１３００など、以前に受信しているいずれよりも高い提案番号を有するメッセージを受信するとき、装置は、その対応する投票情報がなお初期値である、すべてのより低い提案番号についての投票情報を、初期値をゼロの値で置き換えることによって、アップデートすることができる、このように装置はより容易に、安全であるファンクションに関する情報を決定し、これに応答することができる。上述のように、装置は、特定の提案番号に対応する投票を変更することはできない場合がある。したがって、投票情報を、初期値から別の値に変更することはできるが、後に変更することはできない。投票情報、および、上記でリストした情報の一部または全部を装置によって、図２に示す、揮発性ストレージ１３０、または、ハードディスク１４１、フロッピー（登録商標）ディスク１５２または光ディスク１５６などの不揮発性ストレージにおいて、維持することができる。
【０１５９】
メッセージ遅延が短縮される、修正されたＰａｘｏｓアルゴリズム
クォーラム選択状態マシンが、システム状態マシンによって使用されるべきクォーラムを選択するかどうか、または、１つのクォーラムがクォーラムの集合を選択し、次いで、選択された集合からのクォーラムを使用するかどうかにかかわらず、少なくとも２つのメッセージ遅延が、リーダー装置によるクライアントの要求の受信と、リーダー装置によるクライアントの要求の結果の、クライアントへの送信の間で、導入される。具体的には、１つのメッセージ遅延は、リーダーがクライアントによって要求されたファンクションをクォーラム内の他の装置に提案するときに導入され、第２のメッセージ遅延は、クォーラム内の他の装置が提案に投票するときに導入される。
【０１６０】
本発明の一実施形態によって企図された代替手法は、分散コンピューティングシステムのクライアントにそれらの要求を、選択されたクォーラムの装置に直接送信させることによって、これらのメッセージ遅延を除くことができ、選択されたクォーラムの装置はクライアントに直接応答することができる。クライアントが応答をクォーラム内のすべての装置から受信する場合、クライアントは、要求されたファンクションが選択されたと判断することができる。したがって、リーダー装置が、保留中の提案を知り、完了し、単にクライアント要求を待機中となった後、リーダー装置は、その代わりに、クォーラムの装置に、それらの装置がクライアントからのいかなる要求をも、決定された提案番号を有するリーダーからの提案として処理するべきであると、シグナル通知することができる。決定された提案番号を、高速提案番号として識別することができ、これは、高速提案番号では、装置はクライアントから直接受信された提案に投票することができることを示す。次いで、クライアントはクォーラムの装置と、上記で詳述したリーダーと装置の間の通信に類似の方法で通信することができる。当業者にはわかるように、このような手法は「Ｆａｓｔ  Ｐａｘｏｓ」と呼ばれており、その開示と調和する、本明細書内に含まれたいかなる教示または示唆をもさらに説明または記述するために、その開示が参照により全体として本明細書に組み込まれているものにおいて説明されている（例えば、特許文献１参照。）。
【０１６１】
クライアントがクォーラムの装置と直接通信することを可能にすることは、２つの装置が異なるファンクションをほぼ同時に提案する競合の結果となる可能性がある。１つの解決策は、クォーラム内の装置の数を増して、いかなる２つのクォーラムもが少なくとも１つの装置を共有するだけではなく、分散コンピューティングシステムの少なくとも過半数の装置を共有するようにすることである。したがって、十分な数のメインコンピューティング装置が分散コンピューティングシステム内に存在する場合、上述の手順を使用して選択されたクォーラムの集合内の少なくとも１つのクォーラムは、クライアントがそのクォーラムの装置と直接通信することを可能にするために十分な数の装置を有することができ、それにより、Ｆａｓｔ  Ｐａｘｏｓなど、メッセージ遅延短縮コンセンサスアルゴリズムを実施することができる。装置が障害を受ける場合、または、別のメインコンピューティング装置が追加される場合、クォーラムの集合からの異なるクォーラム、および、異なる非高速提案番号を使用して、いかなる保留中のファンクションをも完了し、上記で詳述した方法で新しいクォーラムの集合を選択することができる。
【０１６２】
代替として、システム状態マシンはクォーラムによって実施され、すでにシステム状態マシンの装置のすべてを備える、クォーラム状態マシンによって選択されるので、クォーラム内の装置の数を増す必要はない。具体的には、システム状態マシンの中で、選択されたクォーラムの一部でない装置はないので、および、各装置が提案に投票するので、複数のクライアントからの競合する提案は、いかなる提案も選択されないようにすることができる。しかし、競合の場合、新しい非高速の提案番号を使用して、競合を解決することができる。したがって、Ｆａｓｔ  Ｐａｘｏｓなど、メッセージ遅延短縮コンセンサスアルゴリズムを使用しようとするシステム状態マシンは、クォーラム選択状態マシンに、上述に類似の方法で、２つの提案番号を１つのクォーラムおよびリーダーのために選択させることができる。第１の提案番号を高速提案番号にすることができ、第２の提案番号を非高速提案番号にすることができる。非高速提案番号を次いで、選択されたクォーラムおよびリーダーによって使用して、クォーラム選択状態マシンを関与させることなく、競合を解決することができる。
【０１６３】
本発明の原理を適用することができる多数の可能な実施形態に鑑みて、本明細書で図面に関して説明した実施形態は例示的でしかないように意味され、本発明の範囲を限定するとして解釈されるべきではないことを理解されたい。例えば、ソフトウェアにおいて図示した例示の実施形態のいくつかの要素をハードウェアにおいて実施することができ、逆の場合も同じであること、または、本発明の精神から逸脱することなく、例示の実施形態を構成および詳細において修正することができることは、当業者には理解されよう。したがって、本明細書で説明した本発明は、このようなすべての実施形態を、以下の特許請求の範囲およびその等価物の範囲内に入る可能性があるとして企図する。
【図面の簡単な説明】
【０１６４】
【図１】それと共に本発明の一実施形態を実施することができる、例示的分散コンピューティングシステムの全体を例示するブロック図である。
【図２】それと共に本発明の一実施形態を実施することができる、例示的コンピューティング装置の全体を例示するブロック図である。
【図３ａ】本発明の一実施形態によって企図されたコンセンサスアルゴリズムのオペレーションの全体を例示する図である。
【図３ｂ】本発明の一実施形態によって企図されたコンセンサスアルゴリズムのオペレーションの全体を例示する図である。
【図３ｃ】本発明の一実施形態によって企図されたコンセンサスアルゴリズムのオペレーションの全体を例示する図である。
【図３ｄ】本発明の一実施形態によって企図されたコンセンサスアルゴリズムのオペレーションの全体を例示する図である。
【図３ｅ】本発明の一実施形態によって企図されたコンセンサスアルゴリズムのオペレーションの全体を例示する図である。
【図４ａ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図４ｂ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図４ｃ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図４ｄ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図４ｅ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図４ｆ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図４ｇ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図５ａ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図５ｂ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図５ｃ】本発明の一実施形態によって企図されたマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図６ａ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図６ｂ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図６ｃ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図７ａ】本発明の一実施形態によって企図された、代替装置を使用したマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図７ｂ】本発明の一実施形態によって企図された、代替装置を使用したマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図７ｃ】本発明の一実施形態によって企図された、代替装置を使用したマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図８ａ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図８ｂ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図８ｃ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図８ｄ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図８ｅ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図９ａ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのさらなる態様の全体を例示する図である。
【図９ｂ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのさらなる態様の全体を例示する図である。
【図９ｃ】本発明の一実施形態によって企図された、代替装置を使用した第１のマルチフェーズコンセンサスアルゴリズムのオペレーションのさらなる態様の全体を例示する図である。
【図１０ａ】本発明の一実施形態によって企図された、代替装置を使用したマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図１０ｂ】本発明の一実施形態によって企図された、代替装置を使用したマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図１０ｃ】本発明の一実施形態によって企図された、代替装置を使用したマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図１１ａ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図１１ｂ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図１１ｃ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図１１ｄ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図１１ｅ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションの一態様の全体を例示する図である。
【図１２ａ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図１２ｂ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図１２ｃ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのもう１つの態様の全体を例示する図である。
【図１３ａ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのさらなる態様の全体を例示する図である。
【図１３ｂ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのさらなる態様の全体を例示する図である。
【図１３ｃ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのさらなる態様の全体を例示する図である。
【図１４ａ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのなおさらなる態様の全体を例示する図である。
【図１４ｂ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのなおさらなる態様の全体を例示する図である。
【図１４ｃ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのなおさらなる態様の全体を例示する図である。
【図１４ｄ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのなおさらなる態様の全体を例示する図である。
【図１４ｅ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのなおさらなる態様の全体を例示する図である。
【図１４ｆ】本発明の一実施形態によって企図された、代替装置を使用した第２のマルチフェーズコンセンサスアルゴリズムのオペレーションのなおさらなる態様の全体を例示する図である。
【符号の説明】
【０１６５】
１０  分散システム
１１〜１５、２０、３０、３１  コンピューティング装置
１４１  ハードディスクドライブ
１５１  磁気ディスクドライブ
１５５  光ディスクドライブ
１９１  モニタ
【図１】
2006004433.tif 000006
【図２】
2006004433.tif 000007
【図３ａ】
2006004433.tif 000008
【図３ｂ】
2006004433.tif 000009
【図３ｃ】
2006004433.tif 000010
【図３ｄ】
2006004433.tif 000011
【図３ｅ】
2006004433.tif 000012
【図４ａ】
2006004433.tif 000013
【図４ｂ】
2006004433.tif 000014
【図４ｃ】
2006004433.tif 000015
【図４ｄ】
2006004433.tif 000016
【図４ｅ】
2006004433.tif 000017
【図４ｆ】
2006004433.tif 000018
【図４ｇ】
2006004433.tif 000019
【図５ａ】
2006004433.tif 000020
【図５ｂ】
2006004433.tif 000021
【図５ｃ】
2006004433.tif 000022
【図６ａ】
2006004433.tif 000023
【図６ｂ】
2006004433.tif 000024
【図６ｃ】
2006004433.tif 000025
【図７ａ】
2006004433.tif 000026
【図７ｂ】
2006004433.tif 000027
【図７ｃ】
2006004433.tif 000028
【図８ａ】
2006004433.tif 000029
【図８ｂ】
2006004433.tif 000030
【図８ｃ】
2006004433.tif 000031
【図８ｄ】
2006004433.tif 000032
【図８ｅ】
2006004433.tif 000033
【図９ａ】
2006004433.tif 000034
【図９ｂ】
2006004433.tif 000035
【図９ｃ】
2006004433.tif 000036
【図１０ａ】
2006004433.tif 000037
【図１０ｂ】
2006004433.tif 000038
【図１０ｃ】
2006004433.tif 000039
【図１１ａ】
2006004433.tif 000040
【図１１ｂ】
2006004433.tif 000041
【図１１ｃ】
2006004433.tif 000042
【図１１ｄ】
2006004433.tif 000043
【図１１ｅ】
2006004433.tif 000044
【図１２ａ】
2006004433.tif 000045
【図１２ｂ】
2006004433.tif 000046
【図１２ｃ】
2006004433.tif 000047
【図１３ａ】
2006004433.tif 000048
【図１３ｂ】
2006004433.tif 000049
【図１３ｃ】
2006004433.tif 000050
【図１４ａ】
2006004433.tif 000051
【図１４ｂ】
2006004433.tif 000052
【図１４ｃ】
2006004433.tif 000053
【図１４ｄ】
2006004433.tif 000054
【図１４ｅ】
2006004433.tif 000055
【図１４ｆ】
2006004433.tif 000056
【外国語明細書】
2006004433000001.pdf