(57)【要約】【課題】サーバ数の増大を抑制し、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、正常に処理を継続する。【解決手段】複数のサーバで受信したデータを多重化して処理する分散処理システムで、前記多重化された前記データの一貫性を判定する第１の判定部と、前記第１の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力部と、を有し、前記第１の判定部は、前記データを受信する第１のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定される。【選択図】図２０
2020115315.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを含むサーバを複数有し、データを前記複数のサーバで受信し、前記データを多重化して処理する分散処理方法であって、
前記サーバが、前記多重化された前記データを受信して、第１の判定部で前記受信したデータの一貫性を判定する第１判定ステップと、
前記サーバが、前記第１の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力ステップと、
を含み、
前記第１判定ステップは、
前記データを受信する第１のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定されたことを特徴とする分散処理方法。
【請求項２】
請求項１に記載の分散処理方法であって、
前記サーバが、前記データの一貫性を判定するために前記サーバ間の最小通信回数が前記第１の判定部よりも多い第２の判定部で、前記受信したデータの一貫性を判定する第２判定ステップと、
前記サーバが、前記第１の判定部または前記第２の判定部から前記データの一貫性の判定結果を受け付けて、前記第１の判定部の前記判定結果と前記第２の判定部の前記判定結果を組み合わせる組み合わせステップと、
をさらに含み、
前記第２判定ステップは、
前記データを受信する第２のサーバ数が、前記許容故障数と、前記許容ビザンチン故障数に基づいて予め設定され、
前記出力ステップは、
前記判定結果の組み合わせに前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理方法。
【請求項３】
請求項２に記載の分散処理方法であって、
前記サーバが、前記組み合わせステップの判定結果に前記一貫性を保証するデータが含まれない場合には、他のサーバと合意を得るための衝突解決値を選択する衝突解決値選択ステップと、
前記サーバが、所定の合意アルゴリズムを用いて前記衝突解決値の一貫性の合意を行う合意ステップと、
をさらに含み、
前記出力ステップは、
前記合意の結果に前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理方法。
【請求項４】
請求項２に記載の分散処理方法であって、
前記第２のサーバ数は、第３のサーバ数と第４のサーバ数で決定され、
前記第２判定ステップは、
予め設定された第３のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段ステップと、
予め設定された第４のサーバ数の前記サーバから前記前段ステップの判定結果を受信して前記データのうち部分一致するデータを判定する後段ステップと、を含み、
前記前段ステップと後段ステップの少なくとも一方は、異なるハードウェアで機能することを特徴とする分散処理方法。
【請求項５】
請求項２に記載の分散処理方法であって、
前記第２のサーバ数は、第３のサーバ数と第４のサーバ数で決定され、
前記第２判定ステップは、
予め設定された第３のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段ステップと、
予め設定された第４のサーバ数の前記サーバから前記前段ステップの判定結果を受信して前記データのうち所定の条件が成立するデータを判定する後段ステップと、を含み、
前記データは認証情報を含み、
前記後段ステップは、
前記認証情報による認証が成功したデータで前記判定を実施することを特徴とする分散処理方法。
【請求項６】
請求項２に記載の分散処理方法であって、
前記第１のサーバ数は、
当該第１のサーバ数をｎとし、前記許容故障数のうち第１の許容故障数をｑとし、前記許容故障数のうち第２の許容故障数をｆとし、前記許容ビザンチン故障数をｂとした場合、前記第１のサーバ数ｎが２ｑ＋ｆ＋２ｂより大であることを特徴とする分散処理方法。
【請求項７】
請求項６に記載の分散処理方法であって、
前記第１のサーバ数ｎが、分散処理を実行するサーバ数の最小値であることを特徴とする分散処理方法。
【請求項８】
請求項３に記載の分散処理方法であって、
前記受信したデータの一致数とデータの値を正常値として正常値情報に格納する正常値情報格納ステップと、
前記組み合わせステップの前記判定結果に推定値が含まれない場合には、前記正常値情報から前記データに対応する正常値を取得して出力する正常値出力ステップと、
をさらに含み、
前記衝突解決値選択ステップは、前記正常値を用いて、前記衝突解決値の選択を実施すること、を特徴とする分散処理方法。
【請求項９】
請求項８に記載の分散処理方法であって、
前記正常値情報格納ステップは、
前記正常値情報のうち、一致数が最も高いデータを最頻値として最頻値情報に格納し、
前記正常値出力ステップは、
前記判定結果に推定値が含まれない場合には、前記最頻値情報から前記データに対応する前記最頻値を取得して出力することを特徴とする分散処理方法。
【請求項１０】
請求項２に記載の分散処理方法であって、
前記第１の判定部または前記第２の判定部で、前記受信したデータの全数が一致し、通信回数の低減が見込める場合には、さらに他のサーバからデータの受信を行うことを特徴とする分散処理方法。
【請求項１１】
プロセッサとメモリを含むサーバを複数有し、データを前記複数のサーバで受信し、前記データを多重化して処理する分散処理システムであって、
前記サーバは、
前記多重化された前記データの一貫性を判定する第１の判定部と、
前記第１の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力部と、
を有し、
前記第１の判定部は、
前記データを受信する第１のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定されたことを特徴とする分散処理システム。
【請求項１２】
請求項１１に記載の分散処理システムであって、
前記サーバは、
前記多重化された前記データの一貫性を判定する際に前記サーバ間の最小通信回数が前記第１の判定部よりも多い第２の判定部と、
前記第１の判定部または前記第２の判定部から前記データの一貫性の判定結果を受け付けて、前記第１の判定部の前記判定結果と前記第２の判定部の前記判定結果を組み合わせる組み合わせ部と、
をさらに有し、
前記第２の判定部は、
前記データを受信する第２のサーバ数が、前記許容故障数と、前記許容ビザンチン故障数に基づいて予め設定され、
前記出力部は、
前記判定結果の組み合わせに前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理システム。
【請求項１３】
請求項１２に記載の分散処理システムであって、
前記サーバは、
前記判定結果に前記一貫性を保証するデータが含まれない場合には、他のサーバと合意を得るための衝突解決値を選択する衝突解決値選択部と、
所定の合意アルゴリズムを用いて前記衝突解決値の一貫性の合意を行う合意部と、
をさらに有し、
前記出力部は、
前記合意の結果に前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理システム。
【請求項１４】
請求項１２に記載の分散処理システムであって、
前記第２のサーバ数は、第３のサーバ数と第４のサーバ数で決定され、
前記第２の判定部は、
予め設定された第３のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段部と、
予め設定された第４のサーバ数の前記サーバから前記前段部の判定結果を受信して前記データのうち部分一致するデータを判定する後段部と、を有し、
前記前段部と後段部少なくとも一方は、異なるハードウェアで機能することを特徴とする分散処理システム。
【請求項１５】
請求項１２に記載の分散処理システムであって、
前記第２のサーバ数は、第３のサーバ数と第４のサーバ数で決定され、
前記第２の判定部は、
予め設定された第３のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段部と、
予め設定された第４のサーバ数から前記前段部の判定結果を受信して前記データのうち所定の条件が成立するデータを判定する後段部と、を含み、
前記データは認証情報を含み、
前記後段部は、
前記認証情報による認証が成功したデータで前記判定を実施することを特徴とする分散処理システム。
【請求項１６】
請求項１２に記載の分散処理システムであって、
前記第１のサーバ数は、
当該第１のサーバ数をｎとし、前記許容故障数のうち第１の許容故障数をｑとし、前記許容故障数のうち第２の許容故障数をｆとし、前記許容ビザンチン故障数をｂとした場合、前記第１のサーバ数ｎが２ｑ＋ｆ＋２ｂより大であることを特徴とする分散処理システム。
【請求項１７】
請求項１６に記載の分散処理システムであって、
前記第１のサーバ数ｎが、分散処理を実行するサーバ数の最小値であることを特徴とする分散処理システム。
【請求項１８】
請求項１３に記載の分散処理システムであって、
前記受信したデータの一致数とデータの値を正常値として正常値情報に格納する正常値情報格納部と、
前記組み合わせ部の前記判定結果に推定値が含まれない場合には、前記正常値情報から前記データに対応する正常値を取得して出力する正常値出力部と、
をさらに有し、
前記衝突解決値選択部は、前記正常値を用いて、前記衝突解決値の選択を実施することを特徴とする分散処理システム。
【請求項１９】
請求項１８に記載の分散処理システムであって、
前記正常値情報格納部は、
前記正常値情報のうち、一致数が最も高いデータを最頻値として最頻値情報に格納しておき、
前記正常値出力部は、前記判定結果に推定値が含まれない場合には、前記最頻値情報から前記データに対応する前記最頻値を取得して出力することを特徴とする分散処理システム。
【請求項２０】
請求項１２に記載の分散処理システムであって、
前記第１の判定部または前記第２の判定部は、前記受信したデータの全数が一致し、通信回数の低減が見込める場合には、さらに他のサーバからデータの受信を行うことを特徴とする分散処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のサーバで分散処理を行って、可用性を確保する分散処理システムに関する。
【背景技術】
【０００２】
インメモリ型分散ＫＶＳ（Key Value Store）等の分散処理システムでは、サーバに障害が発生した場合にデータが消失するのを防止するため、データを複数のサーバに分散して格納し、可用性を確保している。
【０００３】
データを複数のサーバに格納する多重化において、データの一貫性を保証するには、分散合意アルゴリズムを利用する手法が知られている。分散合意アルゴリズムとしてはＰＡＸＯＳアルゴリズムが知られている。
【０００４】
分散処理システムでは、データの一貫性を保証したまま低レイテンシを実現するために、ＰＡＸＯＳアルゴリズムより必要なプロセス数を増やす手法が知られているが、この手法では、合意に至るまでの通信回数を低減できるものの、プロセス数が増大するのに加え、最小の通信回数を維持可能な許容故障数が減少してしまう。
【０００５】
これに対して、サーバ（またはプロセス数）の増大を抑制しながらも、データの更新（または参照）をサーバに要求してから、データの一貫性を保証するまでの通信回数を低減する技術として、特許文献１が知られている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１５／１８６１９１号
【特許文献２】特開２０１４−１７８７９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記特許文献１では、サーバの故障については考慮されているが、特許文献２で開示されるようなビザンチン障害がサーバに発生した場合については考慮されていない、という問題があった。
【０００８】
ビザンチン障害は、ソフトウェアのエラーや、ソフトウェアのバグや、ハードウェアの故障や、装置への侵入などに起因する不正な処理や装置の停止などを含む障害である。
【０００９】
上記特許文献１では、装置の故障停止による影響を回避することは可能であるが、ビザンチン障害によって、不正な処理を行う装置が存在する場合には、ビザンチン障害の影響を回避することができない。上記特許文献１の構成では、ビザンチン障害が発生する個所によって、影響を受ける部分は異なり、例えば、合意処理部でビザンチン障害が発生すると、分散合意処理が不正となる。また、データ格納部でビザンチン障害が発生すると、リクエストの処理が不正となってしまうという問題があった。
【００１０】
そこで本発明は、上記問題点に鑑みてなされたもので、サーバ（またはプロセス数）の増大を抑制し、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、正常に処理を継続することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、プロセッサとメモリを含むサーバを複数有し、データを前記複数のサーバで受信し、前記データを多重化して処理する分散処理方法であって、前記サーバが、前記多重化された前記データを受信して、第１の判定部で前記受信したデータの一貫性を判定する第１判定ステップと、前記サーバが、前記第１の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力ステップと、を含み、前記第１判定ステップは、前記データを受信する第１のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定される。
【発明の効果】
【００１２】
本発明によれば、サーバの数の増大を抑制し、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、ビザンチン障害を検知または訂正することなく、正常に処理を継続することが可能となる。
【００１３】
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例１を示し、分散処理を行う分散処理システムの一例を示すブロック図である。
【図２】本発明の実施例１を示し、サーバの一例を示すブロック図である。
【図３】本発明の実施例１を示し、サーバで行われる分散処理の一例を示す図である。
【図４】本発明の実施例１を示し、組み合わせ部が利用する優先順位テーブルの一例を示す図である。
【図５】本発明の実施例１を示し、組み合わせ部が利用する優先順位テーブルの他の例を示す図である。
【図６】本発明の実施例１を示し、正常値テーブルの一例を示す図である。
【図７】本発明の実施例１を示し、最頻値テーブルの一例を示す図である。
【図８】本発明の実施例１を示し、各サーバで行われる分散合意処理の一例を示すフローチャートである。
【図９】本発明の実施例１を示し、省プロセス１ステップ合意処理の一例を示すフローチャートである。
【図１０】本発明の実施例１を示し、２ステップ合意処理の一例を示すフローチャートである。
【図１１】本発明の実施例１を示し、組み合わせ処理の一例を示すフローチャートである。
【図１２】本発明の実施例１を示し、衝突解決値選択処理の一例を示すフローチャートである。
【図１３】本発明の実施例１を示し、正常値選択処理の一例を示すフローチャートである。
【図１４】本発明の実施例１を示し、最頻値選択処理の一例を示すフローチャートである。
【図１５】本発明の実施例２を示し、分散処理を行う計算機システムの一例を示すブロック図である。
【図１６】本発明の実施例３を示し、２ステップ合意処理の一例を示すフローチャートである。
【図１７】本発明の実施例１を示し、省プロセス１ステップ合意部のクォーラムの一例を示す図である。
【図１８】本発明の実施例１を示し、２ステップ合意部の選択クォーラムの一例を示す図である。
【図１９】本発明の実施例１を示し、２ステップ合意部の計数クォーラムの一例を示す図である。
【図２０】本発明の実施例４を示し、分散処理を行う計算機システムの一例を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例１】
【００１６】
図１は、分散処理を行う分散処理システムの一例を示すブロック図である。サーバ１−１〜１−ｎはネットワーク２を介してクライアント３−１、３−２に接続される。サーバ１−１〜１−ｎは、クライアント３−１、３−２から受け付けた要求を分散して処理する分散処理システムを構成する。なお、以下の説明ではサーバ１−１〜１−ｎの総称を「−」以降を省略した符号１で表し、クライアント３−１、３−２の総称を「−」以降を省略した符号３で表す。
【００１７】
図２は、サーバ１−１の構成の一例を示すブロック図である。なお、サーバ１−２〜１−ｎも同様の構成であるので、重複した説明は省略する。サーバ１−１は、演算を行うプロセッサ１１と、プログラムやデータを保持するメモリ１２と、データやプログラムを格納するストレージ装置１４と、ネットワーク２に接続されて通信を行うインターフェース１３と、所定の演算処理を実行するアクセラレータ１６を有する分散合意処理ボード１５含む計算機である。
【００１８】
なお、アクセラレータ１６としては、例えば、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）や、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ−Ｐｕｒｐｏｓｅ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等のハードウェアを採用することができる。
【００１９】
上記ＦＰＧＡを採用した場合には、ソフトエラーによるビザンチン障害が知られており、本実施例１は、アクセラレータ１６を有する装置（サーバ）のビザンチン障害を回避することを意図している。
【００２０】
なお、本実施例１において、ビザンチン障害は、ソフトエラーや、ソフトウェアのバグや、ハードウェアの故障や、装置への侵入や攻撃などに起因する不正な処理や装置の停止などを含む幅広い障害を意味する。
【００２１】
メモリ１２には、インターフェース１３を介してデータの送受信を行う送受信部２０と、受信したデータと他のサーバ１のデータの一貫性（同一性）を判定する更新部３０と、更新部３０が出力したデータを格納するデータ格納部５０が保持される。なお、データ格納部５０はストレージ装置１４に設定されてもよいし、ストレージ装置１４とメモリ１２の双方に設定されてもよい。
【００２２】
更新部３０は、補助的な合意アルゴリズムとしてＰＡＸＯＳアルゴリズムを実行するＰＡＸＯＳ合意部４０が含まれる。
【００２３】
送受信部２０と、更新部３０を構成するＰＡＸＯＳ合意部４０の各機能部はプログラムとしてメモリ１２にロードされる。送受信部２０は、主に、ＰＡＸＯＳ合意部４０が他のサーバ１と合意を行う際に利用される。
【００２４】
プロセッサ１１は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ１１は、送受信プログラムに従って処理することで送受信部２０として機能し、ＰＡＸＯＳ合意プログラムに従って処理することでＰＡＸＯＳ合意部４０として機能する。他のプログラムについても同様である。さらに、プロセッサ１１は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００２５】
サーバ１−１の各機能を実現するプログラム、テーブル等の情報は、ストレージ装置１４や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００２６】
分散合意処理ボード１５には、更新部１３０で分散合意処理と受信した要求を実行するアクセラレータ１６が搭載される。アクセラレータ１６は、インターフェース１３を介して他のサーバ１と通信を行う送受信部１１０と、所定の処理の条件を設定する条件設定部１２０と、他のサーバ１との分散合意処理を行う更新部１３０と、ＰＡＸＯＳ合意部４０の合意値を判定するＰＡＸＯＳ合意値判定部４００と、クライアント３からの要求に応じて所定の処理を行った結果などを格納するデータ格納部１４０を含む。
【００２７】
更新部１３０は、低レイテンシ合意アルゴリズム実行部２００と、正常値選択部２５０と、衝突解決値選択部２６０と、組み合わせ部２４０を有する。低レイテンシ合意アルゴリズム実行部２００は、サーバ１が受信した要求（またはデータ）と他のサーバ１の要求の一貫性（同一性）を判定するために、省プロセス１ステップ合意アルゴリズムを実行する省プロセス１ステップ合意部２１０と、２ステップ合意アルゴリズムを実行する２ステップ合意部２２０と、を含む。なお、２ステップ合意部２２０は、図３で示すように、前段部２２０−Ａと、後段部２２０−Ｂで構成され、全体を符号２２０で表す。
【００２８】
送受信部１１０は、クライアント３から処理の要求を受信すると、当該サーバ１−１が受信した要求を他のサーバ１−２〜１−ｎへ送信する。その後、送受信部１１０は、全てのサーバ１−２〜１−ｎから送信された要求を受信し、受信した要求を更新部１３０へ送信し、更新部１３０が要求の一貫性について判定を行う。
【００２９】
そして、更新部１３０は、他のサーバ１の要求と一貫性が保証された要求を出力し、当該要求に対応する処理を行って、処理結果をデータ格納部１４０へ書き込む。更新部１３０は、書き込みが完了するとクライアント３に処理結果を送信し、処理を完了する。
【００３０】
クライアント３の構成は、図示しないプロセッサと、メモリと、インターフェース及びストレージ装置を含む計算機である。クライアント３は、サーバ１に対してデータの登録、更新、参照を要求するアプリケーションを実行する。
【００３１】
次に、更新部１３０の構成について説明する。更新部１３０には、上述のように送受信部１１０がクライアント３から受信した要求と、他のサーバ１が受信したクライアント３の要求が入力される。
【００３２】
更新部１３０では、これらの要求を省プロセス１ステップ合意部２１０（第１の判定部）と、２ステップ合意部２２０（第２の判定部）へそれぞれ入力して要求の一貫性（または同一性）の判定を実行する。
【００３３】
省プロセス１ステップ合意部２１０は、一貫性の判定結果として確定値または推定値あるいは無確定を出力する。本実施例１の省プロセス１ステップ合意部２１０では、ビザンチン障害に対処するため、全てのサーバ１から受信した要求の一致が過半数未満の場合には、無確定を出力して組み合わせ部２４０へ通知する。
【００３４】
２ステップ合意部２２０は、一貫性の判定結果として確定値または推定値あるいは無確定を出力する。本実施例１の２ステップ合意部２２０では、ビザンチン障害に対処するため、全てのサーバ１から受信した要求の一致数が所定の値以下の場合には無確定を出力して組み合わせ部２４０へ通知する。
【００３５】
組み合わせ部２４０はこれらの確定値または推定値、無確定を入力する。組み合わせ部２４０は、クライアント３から受信した要求と、他のサーバ１へ送信されたクライアント３の要求が同一であると判定した場合、入力された要求について一貫性を保証した確定値（合意値）として所定の処理を実行し、処理結果をデータ格納部１４０へ格納する。
【００３６】
確定値は一貫性（または同一性）が保証された要求であり、合意値は一貫性について他のサーバ１との間で合意された要求で、サーバ１間で一貫性が保証される。一方、確定値や推定値が得られない場合、組み合わせ部２４０はビザンチン障害等による異常値を出力するのを防ぐため、後述するように、任意値として組み合わせ空を出力する。
【００３７】
正常値選択部２５０は、省プロセス１ステップ合意部２１０、もしくは２ステップ合意部２２０の前段部２２０−Ａが、一貫性の判定のために、送受信部１１０から受け付けた要求（またはデータ）を収集し、一致数が所定値（許容ビザンチン故障数）ｂ３より大きい値を正常値と判定して、正常値テーブル３３０へ出力する。
【００３８】
衝突解決値選択部２６０は、各サーバ１のアクセラレータ１６の組み合わせ部２４０から確定値と、推定値と、組み合わせ空の値及び正常値を収集し、一致数が所定値（許容ビザンチン故障数）ｂ４よりも大きい値（衝突解決値）で、サーバ１のＰＡＸＯＳ合意部４０にＰＡＸＯＳアルゴリズムによる合意を依頼する。
【００３９】
ＰＡＸＯＳ合意値判定部４００は、ＰＡＸＯＳ合意部４０でＰＡＸＯＳアルゴリズムを実行した結果、合意が得られた場合には、出力部４５０（図３参照）を介して合意値をデータ格納部１４０へ入力して処理結果をクライアント３へ応答する。一方、ＰＡＸＯＳ合意値判定部４００は、ＰＡＸＯＳ合意部４０からの応答（合意値）が空であった場合には、合意が得られなかった通知をクライアント３に送信する。
【００４０】
本実施例１では、省プロセス１ステップ合意部２１０と、２ステップ合意部２２０と、組み合わせ部２４０と、正常値選択部２５０と、衝突解決値選択部２６０と、ＰＡＸＯＳ合意値判定部４００をアクセラレータ１６によるハードウェア処理とし、補助合意部としてのＰＡＸＯＳ合意部４０をソフトウェア処理とする例を示したが、これに限定されるものではない。例えば、衝突解決値選択部２６０等の一部をソフトウェア処理で行うようにしてもよい。
【００４１】
＜テーブル＞
次に、分散処理で利用されるテーブルについて以下に説明する。なお、以下のテーブルは、アクセラレータ１６内で保持している例を示すが、これに限定されるものではない。例えば、各テーブルはメモリ１２等にロードされ、保持してもよい。アクセラレータ１６内でテーブルを保持する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ１６にＦＰＧＡを採用した場合、上述の装置例としては、各テーブルの保持部を、ＦＰＧＡの小面積な論理リソース、少量のレジスタ、ＥＣＣ（Ｅｒｒｏｒ Ｃｏｒｒｅｃｔｉｏｎ Ｃｏｄｅ）等によってソフトエラーが自動訂正されるブロックＲＡＭ等で構成してもよい。
【００４２】
図４は、組み合わせ部２４０が利用する優先順位テーブル３００の一例を示す図である。組み合わせ部２４０は、優先順位テーブル３００の優先順位３０１に従って、省プロセス１ステップ合意部２１０の値と、２ステップ合意部２２０の値を組み合わせて出力する。なお、図４の例は、正常値選択部２５０の出力を利用する場合を示す。
【００４３】
優先順位＝１では、省プロセス１ステップ合意部２１０の確定値または２ステップ合意部２２０の確定値、いずれかの確定値を出力し、優先順位＝２では２ステップ合意部２２０の推定値を出力し、優先順位＝３では、省プロセス１ステップ合意部２１０の推定値を出力する例を示す。なお、図４の優先順位テーブル３００は、条件設定部１２０に保持される。
【００４４】
図５は、組み合わせ部２４０が利用する優先順位テーブル３００Ａの一例を示す図である。なお、図５の例は、正常値選択部２５０の出力のうち一致数が最大の値を格納する最頻値テーブルを利用する場合を示す。優先順位テーブル３００Ａは、図４の優先順位テーブル３００と同様に構成される。
【００４５】
図６は、正常値選択部２５０が利用する正常値テーブル３３０の一例を示す図である。正常値テーブル３３０は、処理番号３３１と、データ３３２と、一致数３３３からひとつのエントリが構成される。
【００４６】
処理番号３３１は、送受信部１１０で付与された値である。データ３３２は、正常値選択部２５０で決定された値が格納される。一致数３３３には、他のサーバ１からのデータとデータ３３２が一致した数が格納される。また、正常値テーブル３３０は、正常値選択部２５０で保持される。
【００４７】
図７は、正常値選択部２５０が利用する最頻値テーブル３４０の一例を示す図である。最頻値テーブル３４０は、処理番号３４１と、データ３４２と、一致数３４３からひとつのエントリが構成される。
【００４８】
処理番号３４１は、送受信部１１０で付与された値である。データ３４２は、正常値選択部２５０で決定された値が格納される。一致数３４３には、他のサーバ１のデータとデータ３４２が一致した数が格納される。また、最頻値テーブル（図示省略）は、最頻値（正常値）を保持するテーブルで、正常値選択部２５０で保持される。
【００４９】
＜省プロセス１ステップ合意部＞
図１７は、省プロセス１ステップ合意部２１０のクォーラムの一例を示す図である。省プロセス１ステップ合意アルゴリズムによるデータの一貫性（同一性）の判定と、一貫性が保証されない場合（以下、衝突とする）の解決手法は、次の通りである。
【００５０】
・データの一貫性：確定値同士は必ず一致する。
【００５１】
・衝突の解決：確定値がいずれかのサーバ１に存在する可能性がある場合、推定値は必ず前記確定値と一致する。（確定値がいずれかのサーバ１に存在する可能性がある場合、確定値と一致する推定値が必ず存在し、解決値（推定値）となる）。それ以外の場合、無確定とする。
【００５２】
図１７は、図１のサーバ１の各送受信部１１０が、クライアント３からデータ「Ａ」、「Ｂ」及びビザンチン障害によるデータ「β」を受信した例を示す。
【００５３】
省プロセス１ステップ合意アルゴリズムを実行する省プロセス１ステップ合意部２１０では、送受信部１１０から受信したデータを確定クォーラムと推定クォーラムの２つのクォーラムに分け、各クォーラムのデータの一貫性を各サーバ１の間の合意で決定する。なお、クォーラムは、分散処理を実行する要素の部分集合を示す。
【００５４】
次に、確定クォーラムを構成する送受信部１１０（サーバ１）の数をＱｅとし、推定クォーラムを構成する送受信部１１０（サーバ１）の数をＱｆとし、送受信部１１０（サーバ１）の総数（プロセス数）をｎ１とする。
【００５５】
また、省プロセス１ステップ合意部２１０において、最小レイテンシを維持可能な許容故障数をｑとし、ビザンチン障害が発生する送受信部１１０の数（許容ビザンチン故障数）をｂ１とし、省プロセス１ステップ合意アルゴリズムが動作可能な許容故障数をｆ１とすると、省プロセス１ステップ合意アルゴリズムで必要とするプロセス数ｎ１は次式を満たせばよい。
ｎ１＞２ｑ＋ｆ１＋２ｂ１を満たせばよい。
【００５６】
また、省プロセス１ステップ合意で許容される許容停止故障数は、ｆ１−ｂ１で定義される。許容停止故障数は、ｂ１台のサーバ１にビザンチン障害が発生している場合に、故障による停止が許容されるサーバの数を示す。
【００５７】
最小レイテンシを維持可能な許容故障数ｑは確定クォーラムＱｅの大きさに関係するパラメータである。本実施例１では、ｆ１＝３、ｂ１＝１、ｑ＝１とし、ｎ１＝８の例を示す。
【００５８】
確定クォーラムＱｅを上記パラメータで表すと、
Ｑｅ＝ｎ１−ｑ
を満たせばよい。一方、推定クォーラムＱｆの大きさは、
【００５９】
ｎ１−ｆ１≧Ｑｆ≧２ｑ＋２ｂ１＋１
を満たせばよい。
【００６０】
各クォーラムの大きさはデータの一致性（一貫性）の要件から定まっている。これらの条件によって、データの一致性が保たれる例を図１７に示す。
【００６１】
確定クォーラムＱｅ内に、確定値が存在する場合、推定クォーラムＱｆでは必ず確定値と同じ値を推定値として得ることができる。以下の例では、ビザンチン障害による異常値βが、正常だが推定値としてはいけないリクエストＢと一致した場合でも、問題なく推定値Ａを算出することができる。なお、推定値の判定は、推定クォーラムＱｆ内で過半数が一致している値を推定値とする。
【００６２】
次に、省プロセス１ステップ合意部２１０における確定値と推定値の判定処理について説明する。
【００６３】
（１）確定値の判定
確定値の判定は、全ての値が一致した場合、一致した値を確定値とする
【００６４】
（２）推定値の判定
推定値の判定は、推定クォーラムＱｆ内の過半数以上の一致数を持つ値を推定値とする
【００６５】
上記のように省プロセス１ステップ合意部２１０は、定足数を用いた判定処理により、ｂ１台の装置（サーバ１）で、ビザンチン障害が発生しても、省プロセス１ステップ合意部２１０では正常なリクエストを出力として選択できる。
【００６６】
なお、省プロセス１ステップ合意部２１０は、次のいずれかの条件が成立するまで、送受信部１１０からの受信を待つ。
【００６７】
（条件１）待機中に受信した入力のうち、Ｑｅ（ｎ１−ｑ）台の送受信部１１０からの値が一致する
（条件２）全ての送受信部１１０（他のサーバ１）から受信する
（条件３）設定された時間が経過する
【００６８】
なお、上記条件１の判定タイミングは、送受信部１１０から新たな入力が到着する都度が最適であるが、これに限定されるものではない。例えば、設定された個数の入力が到着した場合と、それ以降は到着する都度、など他のタイミングでもよい。設定された時間とは、定義ファイルなどで定められた一定のタイムアウト時間、もしくは、稼働中の統計情報から、その都度自動算出される動的なタイムアウト時間のどちらでもよい。
【００６９】
以上のように、省プロセス１ステップ合意部２１０は、プロセス数ｎ１が、ｎ１＞２ｑ＋ｆ１＋２ｂ１を満たし、確定クォーラムＱｅが、Ｑｅ＝ｎ１−ｑを満たし、推定クォーラムＱｆが、ｎ１−ｆ１≧Ｑｆ≧２ｑ＋２ｂ１＋１を満たし、上記確定値の判定と上記推定値の判定を行えばよい。これにより、省プロセス１ステップ合意部２１０は、ｂ１台の送受信部１１０（またはサーバ１）でビザンチン障害が生じても、確定値および推定値を正しく得ることが可能となる。
【００７０】
＜２ステップ合意部＞
図１８、図１９は、２ステップ合意部２２０の一例を示すブロック図である。図１８は、２ステップ合意部２２０の前段部２２０−Ａと選択クォーラムの一例を示す図である。図１９は、２ステップ合意部２２０の後段部２２０−Ｂと計数クォーラムの一例を示す図である。図１８、図１９では、図１のサーバ１−１、１−２の更新部１３０を図中更新部１、２とし、前段部２２０−Ａを、それぞれ前段部１、２とし、後段部２２０−Ｂを、後段部１、２とする。また、２ステップ合意部２２０（サーバ１）の総数（プロセス数）をｎ２とする。
【００７１】
図１８では、前段部２２０−Ａが受信する選択クォーラムの大きさが５の例を示す。前段部１では、５つの要求Ａを受け付け、前段部２では、２つの要求Ａと、２つの要求Ｂと、送受信部１１０のビザンチン障害による１つの異常値βを受け付けた例を示す。
【００７２】
２ステップ合意部２２０では、２ステップ合意部２２０において、ビザンチン障害が発生する数（許容ビザンチン故障数）をｂ２とし、２ステップ合意アルゴリズムが動作可能な許容故障数をｆ２と仮定し、選択クォーラムと、計数クォーラムを設定する。なお、２ステップ合意で許容される許容停止故障数は、ｆ２−ｂ２で定義される。許容停止故障数は、ｂ２台のサーバ１にビザンチン障害が発生している場合に、故障による停止が許容されるサーバの数を示す。
【００７３】
選択クォーラムにおいて、選択クォーラムが許容可能な故障数をｆ２１とし、許容可能なビザンチン故障数をｂ２１とし、ｆ２１はｆ２、ｂ２１はｂ２と同値とし、プロセス数（サーバ１の数）をｎ２１とした場合、
【００７４】
ｎ２１＞２ｆ２１＋ｂ２１を満たすプロセス数（サーバ１の数）ｎ２１において、選択クォーラムＱ１の大きさをＱ１＝ｎ２１−ｆ２１とする。前段部２２０−Ａにおける一致値の判定と空の判定は以下のように行う。
【００７５】
一致値の判定
・選択クォーラムＱ１内の一致値の判定は全ての値が一致した場合、当該値を一致値とする。
空の判定
・選択クォーラムＱ１内で一致値が存在しない場合、値を空とする
【００７６】
次に、計数クォーラムＱ２について説明する。
【００７７】
図１９では、後段部２２０−Ｂが受信する計数クォーラムＱ２の大きさが６の例を示す。後段部１（２２０−Ｂ）では、６つの要求Ａを受け付け、後段部２（２２０−Ｂ）では、３つの要求Ａと、２つの空の値と、ビザンチン障害による１つの異常値βを受け付けた例を示す。
【００７８】
計数クォーラムＱ２では、定足数比較を用いる場合、選択クォーラムＱ１とはプロセス数（サーバ１の数）等の条件が異なり、許容可能なサーバ１（プロセス数）の故障数をｆ２２とし、許容可能なビザンチン故障数をｂ２２とし、ｆ２２はｆ２、ｂ２２はｂ２と同値とし、プロセス数をｎ２２とした場合、
【００７９】
ｎ２２＞２ｆ２２＋２ｂ２２
を満たすプロセス数ｎ２２で、確定値および推定値の判定を実施することができる。また、計数クォーラムＱ２の大きさは
Ｑ２＝ｎ２２−ｆ２２
を満たす。後段部２２０−Ｂでは、確定値および推定値の判定が以下のように行われる。
【００８０】
確定値の判定
・計数クォーラムＱ２内の確定値の判定は、全ての値が一致した場合、当該値を確定値とする
【００８１】
推定値の判定
・計数クォーラムＱ２内の推定値の判定は、確定値が存在しない場合に行い、ｖ＞ｂ２２を満たす一致数ｖを有する値を推定値とする。条件を満たす値が存在しない場合は、空と判定する。
【００８２】
２ステップ合意部２２０では、定足数の比較を用いた確定値及び推定値の判定処理は、省プロセス１ステップ合意部２１０と同様に要求やデータの受信の度に行ってもよい。このタイミングは、新たに前段部２２０−Ａからの出力が後段部２２０−Ｂへ到着する都度が最適であるが、これに限定されるものではない。
【００８３】
２ステップ合意部２２０では、ビザンチン障害が発生した場合、次の２つの問題があった。
【００８４】
・問題１：送受信部１１０でビザンチン障害が発生した場合、選択クォーラムＱ１で本来得られた一致値が空の判定になってしまう場合がある。
・問題２：前段部２２０−Ａでビザンチン障害が発生した場合、後段部２２０−Ｂの計数クォーラムＱ２で本来得られた確定値および推定値を得られない場合がある。加えて、異常値が推定値となる場合がある。
【００８５】
これに対して、前段部２２０−Ａと後段部２２０−Ｂにおいて定足数を用いた判定処理を行うことにより、次のような効果を得ることができる。
【００８６】
まず、送受信部１１０のうちｂ２１台のサーバ１でビザンチン障害が生じても、選択クォーラムＱ１は一致値と空の判定を正しく行うことが可能となる。さらに、前段部２２０−Ａのうちｂ２２台でビザンチン障害が発生しても、計数クォーラムＱ２は確定値と推定値を正しく得ることが可能となる。加えて、異常値が推定値となることはない。
【００８７】
なお、２ステップ合意部２２０では、後段部２２０−Ｂが、次のいずれかの条件が成立するまで、前段部２２０−Ａからの受信を待つ。
【００８８】
（条件４）待機中に受信した入力のうち、計数クォーラムＱ２（ｎ２２−ｆ２２）台の前段部２２０−Ａからの入力の値が一致する
（条件５）全てのアクセラレータ１６（他のサーバ１）の前段部２２０−Ａから受信する
（条件６）設定された時間が経過する
【００８９】
ただし、後段部２２０−Ｂにおける上記条件の判定タイミングは、新たに前段部２２０−Ａからの入力の値が到着する都度が最適であるが、これに限定されるものではない。例えば、後段部２２０−Ｂが設定された個数の入力を受信したときと、それ以降は受信する都度、など他のタイミングでもよい。また、予め設定された時間や、定義ファイルなどで定められた一定のタイムアウト時間、もしくは、稼働中の統計情報から、その都度自動的に算出される動的なタイムアウト時間のどちらでもよい。
【００９０】
＜組み合わせ部＞
上記省プロセス１ステップ合意部２１０及び２ステップ合意部２２０のそれぞれにおいて、ｂ１もしくはｂ２台のビザンチン障害が発生しても、正しく確定値および推定値を得ることが可能となる。
【００９１】
しかし、多数のリクエストが衝突し、一致数が少ない場合には、確定値および推定値を得られず、組み合わせ部２４０は、送受信部１１０で受信した値の中から任意の値(任意値)を出力する。この場合に異常値が選択される可能性がある。
【００９２】
本実施例１では、アクセラレータ１６が異常値の出力を抑止するために、任意値を出力するタイミングにおいて、処理しても問題のない値（正常値）を判定する。これにより、任意値として、正常な値を出力できる。加えて、任意値が推定値と一致する可能性が高くなる。
【００９３】
組み合わせ部２４０では、図４で示した優先順位テーブル３００に従って、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の出力を次のように判定する。
【００９４】
（１）省プロセス１ステップ合意部２１０または２ステップ合意部２２０のいずれかの確定値
（２）２ステップ合意部２２０の推定値
（３）省プロセス１ステップ合意部２１０の推定値
（４）組み合わせ空を出力。但し、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の入力から正常値テーブル３３０と一致する値が存在する場合には、当該値も出力する。
【００９５】
上記の判定処理により、組み合わせ部２４０では、省プロセス１ステップ合意部２１０及び２ステップ合意部２２０の確定値または推定値を選択して出力部４５０（図３参照）へ出力し、推定値が存在しない場合には組み合わせ空の値を出力し、後述する衝突解決値選択部２６０で正常値を設定する。
【００９６】
上記の構成により、組み合わせ部２４０では、ビザンチン障害による異常値の出力を抑止することが可能となる。
【００９７】
＜正常値選択部＞
多数のリクエストが衝突し、リクエストの一致数が少ない場合には、組み合わせ部２４０は、確定値および推定値を得られず、任意値を出力する。この任意値として異常値が選択されるのを防止するため、正常値選択部２５０を機能させる。
【００９８】
正常値選択部２５０は、任意値を出力するタイミングにおいて、処理しても問題の無い値(正常値)を判定し、正常値テーブル３３０に保持する。後述の衝突解決値選択部２６０では、各サーバ１の組み合わせ確定値、組み合わせ推定値、組み合わせ空の値及び正常値テーブル３３０の値を定足数比較することで、正常な値を選択し、ＰＡＸＯＳ合意部４０を実行できる。加えて、任意値が推定値と一致する可能性が高くなる。
【００９９】
正常値選択部２５０では、省プロセス１ステップ合意部２１０、もしくは２ステップ合意部２２０の前段部２２０−Ａが、各クォーラムを実行するために受信した値を収集し、許容ビザンチン故障数ｂ３より大きい一致数を持つ値を、処理しても問題の無い値(正常値)と判定し、正常値テーブル３３０に保持する。許容ビザンチン故障数ｂ３は、正常値選択アルゴリズムにおいて、ビザンチン障害が発生する送受信部１１０の数（許容ビザンチン故障数）であり、ｂ１、ｂ２１と同値としてよい。正常値選択部２５０が収集する受信値の数（収集数ｃ１）は、ｎ３−ｆ３≧ｃ１≧ｂ３＋１でよい。ｆ３は、正常値選択部２５０が動作可能な許容故障数であり、ｆ１、ｆ２１、ｆ２２と同値としてよい。正常値選択部２５０において、許容される許容停止故障数は、ｆ３−ｂ３で定義される。なお、アクセラレータ１６内で正常値選択部２５０を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ１６にＦＰＧＡを採用した場合、上述の装置例としては、正常値選択部２５０を、ＦＰＧＡの小面積な論理リソース、少量のレジスタ、ＥＣＣ（Ｅｒｒｏｒ Ｃｏｒｒｅｃｔｉｏｎ Ｃｏｄｅ）等によってソフトエラーが自動訂正されるブロックＲＡＭ等で構成してもよい。また、ｎ３は正常値選択部２５０の数（サーバ数）である。
【０１００】
なお、正常値選択部２５０では、正常値の判定について、省プロセス１ステップ合意部２１０、もしくは２ステップ合意部２２０の前段部２２０−Ａからリクエストを受信する度に実施してもよい。また、正常値選択部２５０が、正常値の判定及び保持する処理は、組み合わせ部２４０が組み合わせ空を決定し、ＰＡＸＯＳ合意アルゴリズムを実行する以前であれば、所望のタイミングで実施してもよい。あるいは、正常値選択部２５０が、正常値を判定及び処理するタイミングは組み合わせ部２４０の処理以前に、省プロセス１ステップ合意部２１０や、２ステップ合意部２２０が無確定を決定するタイミングで実施することができる。
【０１０１】
＜衝突解決値選択部＞
上記省プロセス１ステップ合意部２１０、２ステップ合意部２２０及び組み合わせ部２４０の判定処理によって、送受信部１１０等でビザンチン障害が生じても、確定値、推定値、任意値のいずれも正常な値を出力することができる。しかし、アクセラレータ１６内の各判定部および組み合わせ部２４０にビザンチン障害が発生した場合、以下のような課題が生じる。
【０１０２】
（１）衝突解決値(推定値および任意値)として、異常値を出力しＰＡＸＯＳ合意部４０で合意を実行する
（２）確定値として、異常値を出力してデータ処理を実行する
【０１０３】
本実施例１では、まず、上記（１）の課題を解決するために、ＰＡＸＯＳ合意部４０へ合意を依頼する前に、衝突解決値選択部２６０で定足数の比較を行う
【０１０４】
衝突解決値選択部２６０は、各アクセラレータ１６から組み合わせ確定値、組み合わせ推定値、組み合わせ空の値及び正常値(最頻値)を収集し、許容ビザンチン故障数ｂ４より大きい一致数を持つ値（衝突解決値）でＰＡＸＯＳ合意部４０に合意を実行させる。ｂ４は、衝突解決値選択アルゴリズムにおいて、ビザンチン障害が発生する各判定部および組み合わせ部２４０の数（許容ビザンチン故障数）であり、ｂ１、ｂ２１、ｂ２２、ｂ３と同値としてよい。衝突解決値選択部２６０が収集する衝突解決値の数（収集数ｃ２）は、ｎ４−ｆ４≧ｃ２≧ｂ４＋１でよい。ｆ４は、衝突解決値選択部２６０が動作可能な許容故障数であり、ｆ１、ｆ２１、ｆ２２、ｆ３と同値としてよい。衝突解決値選択部２６０において、許容される許容停止故障数は、ｆ４−ｂ４で定義される。なお、アクセラレータ１６内で衝突解決値選択部２６０を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ１６にＦＰＧＡを採用した場合、上述の装置例としては、衝突解決値選択部２６０を、ＦＰＧＡの小面積な論理リソース、少量のレジスタ、ＥＣＣ（Ｅｒｒｏｒ Ｃｏｒｒｅｃｔｉｏｎ Ｃｏｄｅ）等によってソフトエラーが自動訂正されるブロックＲＡＭ等で構成してもよい。また、ｎ４は衝突解決値選択部の数（サーバ数）である。
【０１０５】
上記の処理により、衝突解決値選択部２６０は上記（１）の課題を解決することができる。しかし、後述するように、ＰＡＸＯＳ合意部４０で合意できない場合がある。
【０１０６】
例えば、確定値及び推定値が得られる入力がされた場合、１つのアクセラレータ１６のみが推定値を得た場合、衝突解決値選択部２６０は、ＰＡＸＯＳ合意部４０に合意を実行させることはできない。これは、一つのアクセラレータ１６（サーバ１）以外に、衝突解決値選択部２６０に推定値をマルチキャストする他のアクセラレータ１６が存在せず、一致数を比較できないためである。ＰＡＸＯＳ合意部４０を実行できない場合、アクセラレータ１６は処理すべきリクエストを得ることができない。
【０１０７】
ＰＡＸＯＳ合意部４０で合意を行うことができないケースとしては、以下の３つが挙げられる。
【０１０８】
（１−１）組み合わせ部２４０から確定値を得るサーバ１（アクセラレータ１６）と、組み合わせ部２４０から推定値を得るサーバ１が混在するようなリクエストが入力され、かつ推定値を得たサーバ１の数が、許容ビザンチン故障数ｂ４＋１台未満の場合
（１−２）推定値を得るサーバ１と、任意値を得るサーバ１が混在するようなリクエストが入力され、かつ推定値を得たサーバ１の数が、許容ビザンチン故障数ｂ４＋１台未満である場合
（１−３）リクエストの衝突が激しく、各サーバ１の組み合わせ部２４０の出力(推定値、組み合わせ空及び正常値)が、許容ビザンチン故障数ｂ４＋１個以上の一致数を満たさない場合
【０１０９】
上記（１−１）を解決する手法について説明する。
【０１１０】
確定値を得るサーバ１と、推定値を得るサーバ１が混在し、推定値を得たサーバ１が、許容ビザンチン故障数ｂ４＋１台未満である状態では、組み合わせ部２４０で確定値を得ることができたサーバ１が、実行済みの確定値、もしくは実行直前の確定値を、各アクセラレータ１６の衝突解決値選択部２６０にマルチキャストすればよい。
【０１１１】
これによって、衝突解決値選択部２６０は、実行すべき確定値と同一の値でＰＡＸＯＳ合意部４０に合意処理を実行できる（上述したように、推定値と確定値は必ず同値である）。
【０１１２】
次に、上記（１−２）を解決する手法について説明する。
【０１１３】
推定値を得るサーバ１と任意値を得るサーバ１が混在し、推定値を得たサーバ１が、許容ビザンチン故障数ｂ４＋１台未満である状態では、以下のように解決する。
【０１１４】
まず、各サーバ１の組み合わせ部２４０が、確定値および推定値を得られなかったという情報（これを「組み合わせ空」の判定と呼ぶ）を衝突解決値選択部２６０に送信する。
【０１１５】
衝突解決値選択部２６０は、「組み合わせ空」の判定を、許容ビザンチン故障数ｂ４＋１個収集した場合、いずれのサーバ１でも確定値を得ていないことを判定できる。確定値を得たサーバ１が存在する場合、確定値を得られなかったサーバ１は必ず同値の推定値を得る。そのため、「組み合わせ空」を出力するサーバ１が存在する場合、確定値を得たサーバ１は存在しないと判定することができる。
【０１１６】
許容ビザンチン故障数ｂ４＋１個の「組み合わせ空」の出力を収集するのは、許容ビザンチン故障数ｂ４台のビザンチン障害であるサーバ１が不正な「組み合わせ空」を送信することを考慮しているためである。
【０１１７】
「組み合わせ空」の出力が許容ビザンチン故障数ｂ４＋１個以上となった場合、衝突解決値選択部２６０は、確定値が存在せず、いずれかの正常な値（衝突解決値）でＰＡＸＯＳ合意部４０に合意を実行させればよいことを判定できる。以降、各組み合わせ部２４０が正常値（もしくは最頻値でもよい）を選択し、出力するため、衝突解決値選択部２６０はそれらの出力をｃ２個収集し、許容ビザンチン故障数ｂ４＋１個以上の一致数を持つ値でＰＡＸＯＳ合意部４０に合意を実行させればよい。
【０１１８】
収集数ｃ２は、ｎ４−ｆ４≧ｃ２≧ｂ４＋１の条件を満たし、最良のケースでは許容ビザンチン故障数ｂ４＋１で問題ない。また、衝突解決値選択部２６０は、確定値が存在しないため、推定値以外の値でＰＡＸＯＳ合意部４０を実行させてもよい。正常値及び最頻値は推定値と一致する可能性が高く、ＰＡＸＯＳ合意部４０で合意を実行させるまでの待機時間が低減されるため、合意を形成するまでのレイテンシの低下が期待できる。
【０１１９】
上述した各判定は、値を受信するごとに判定を行ってもよい。この場合も、ＰＡＸＯＳ合意部４０で合意を実行させるまでの待機時間が低減されるため、合意を形成するまでのレイテンシの低下が期待できる。
【０１２０】
次に、上記（１−３）を解決する手法について説明する。
【０１２１】
衝突解決値選択部２６０で、各組み合わせ部２４０の出力をｃ２個収集した際に、許容ビザンチン故障数ｂ４＋１個以上の一致数を持つ値が存在しない場合や、「組み合わせ空」の判定で許容ビザンチン故障数ｂ４個未満の場合、ＰＡＸＯＳ合意部４０で合意を実行できない状態となる。この状態は次の（ａ）、（ｂ）で生じ得る。
【０１２２】
（ａ）リクエストの衝突が激しく、衝突解決値選択部２６０において、各サーバ１の正常値（もしくは最頻値）が許容ビザンチン故障数ｂ４＋１個以上の一致数を持たない
【０１２３】
（ｂ）リクエストの衝突が激しく、衝突解決値選択部２６０において、各サーバ１が推定値として選択した値が許容ビザンチン故障数ｂ４＋１個以上の一致数を持たず、かつ「組み合わせ空」の判定が許容ビザンチン故障数ｂ４未満
【０１２４】
上記（ａ）、（ｂ）は、リクエストの衝突が激しいため、衝突解決値選択部２６０がｃ２個の値を収集しても、ＰＡＸＯＳ合意部４０への入力を決定できず、合意処理が停止する可能性がある状態である。
【０１２５】
本実施例１では、上記（ａ）、（ｂ）のように、ｃ２個の値を収集しても、ＰＡＸＯＳ合意部４０への入力を決定できなかった場合、ＰＡＸＯＳ合意部４０に「空」の値を入力し、ＰＡＸＯＳ合意部４０によって衝突が解決された値を待つ。
【０１２６】
ＰＡＸＯＳ合意部４０によって、衝突が解決された値が「空」であった場合、各サーバ１は上記（ａ）、（ｂ）に示したような合意不可能な入力がされたことを判定することができる。ＰＡＸＯＳ合意値判定部４００は、この判定を得ることで、自動リトライによる再合意の実行や、処理の中断が可能となる。他の衝突解決値選択部２６０で、衝突が解決された値が「空」ではない値がＰＡＸＯＳ合意部４０へ入力され、当該値が衝突を解決した値であった場合は、そのまま処理を継続する。
【０１２７】
以下に、合意不可能な入力を判定する動作例を示す。
【０１２８】
ＰＡＸＯＳ合意値判定部４００は、合意不可能な入力であることを判定した場合、以下の（ｉ）、（ｉｉ）のいずれかの処理を行う。なお、アクセラレータ１６内でＰＡＸＯＳ合意値判定部４００を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ１６にＦＰＧＡを採用した場合、上述の装置例としては、ＰＡＸＯＳ合意値判定部４００を、ＦＰＧＡの小面積な論理リソース、少量のレジスタ、ＥＣＣ（Ｅｒｒｏｒ Ｃｏｒｒｅｃｔｉｏｎ Ｃｏｄｅ）等によってソフトエラーが自動訂正されるブロックＲＡＭ等で構成してもよい。
【０１２９】
（ｉ）ＰＡＸＯＳ合意値判定部４００は、クライアント３に合意不可であったことを通知する。これにより、レイテンシの低下が期待できる。これは、タイムアウト等による処理中断より、先に合意不可であった結果をクライアントに通知することが可能であることを意味している。
【０１３０】
（ｉｉ）再度、分散合意を試みる（継続モード）
この場合、自動リトライにより、合意値を得ることが期待できる。各アクセラレータ１６内の送受信部１１０の受信値、もしくは正常値又は最頻値を選択し、各アクセラレータ１６の送受信部１１０にマルチキャストすることで、もう一度分散合意を行う。
【０１３１】
合意不可能な入力がされた場合、上記（ｉ）、（ｉｉ）のどちらの処理を行うかは、分散処理システムが継続モードであるか否かによって決定する。継続モードの有効／無効は、分散処理システムの起動時などに読み込まれる定義ファイル等で管理すればよい。なお、定義ファイルは、例えば、メモリ１２に格納することができる。なお、ＰＡＸＯＳ合意値判定部４００のビザンチン障害を考慮する場合は、ＰＡＸＯＳ合意値判定部４００で合意が形成されたかの判定を行わずに、ＰＡＸＯＳ合意部４０からの応答（合意値）を、出力部４５０に出力し、後述するようにデータ格納部１４０を冗長化すればよい。上記「空」の処理結果（合意不可であったことの結果）も含めて、定足数比較を行った後に、上記（ｉ）、（ｉｉ）のどちらの処理を行えば、不正な処理結果がクライアントに返却されることを防ぐことができる。
【０１３２】
次に、上記（２）の課題の解決は、クライアント３に処理結果を返却する部分（データ格納部１４０）を冗長化構成にし、不正な処理結果がクライアントに返却されることを防ぐ技術が知られている。各サーバ１が、クライアント３に応答する処理結果を定足数によって比較している場合、他２台のアクセラレータ１６の処理結果を収集し、より大きい一致数を持つ処理結果をクライアント３に応答する。収集数は２ｂ５＋１であり、最良のケースではｂ５＋１とすることができる。ｂ５は、ビザンチン障害が発生するデータ格納部１４０の数（許容ビザンチン故障数）であり、ｂ１、ｂ２１、ｂ２２、ｂ３、ｂ４と同値としてよい。上記の定足数比較は、各アクセラレータ１６ではなく、処理結果を受け取るクライアント３側で行ってもよい。
【０１３３】
＜通信回数＞
省プロセス１ステップ合意部２１０と、２ステップ合意部２２０での合意に必要なプロセス（サーバ）数、最小通信回数δ、最小通信回数δを維持可能な許容故障数ｅについて、以下に説明する。また、以下では、ｆ３＝ｆ４＝３、ｂ３＝ｂ４＝ｂ５＝１としている。
【０１３４】
まず、省プロセス１ステップ合意部２１０と正常値選択部２５０及び衝突解決値選択部２６０で合意を行う場合、プロセス数をｎ１とし、許容故障数をｆ１、最小レイテンシを維持可能な許容故障数をｑ、許容ビザンチン故障数をｂ１とすると、必要なプロセス数ｎ１は、
ｎ１＞２ｑ＋ｆ１＋２ｂ１
となる。
【０１３５】
そして、最小レイテンシを維持可能な許容故障数ｑ＝１、許容故障数ｆ１＝３、許容ビザンチン故障数ｂ１＝１の場合、必要なプロセス数ｎ１の最小値は８となる。
【０１３６】
次に、省プロセス１ステップ合意部２１０と正常値選択部２５０及び衝突解決値選択部２６０で合意を行う場合、最小通信回数δ＝２となる。最小通信回数δは、クライアント３の要求からサーバ１間での合意に至るまでの通信回数である。
なお、最小通信回数δを維持可能な許容故障数ｅについては、最小レイテンシを維持可能な許容故障数ｑ（＝１）に相当する。
【０１３７】
図３で示したように、クライアント３−１からデータの更新要求で１回の通信となり、各サーバ１の送受信部１１０は受信したデータを他のサーバ１へ送信することで２回の通信となる（Ｍ２、図３参照）。そして、省プロセス１ステップ合意部２１０で、確定値が得られれば合計２回の通信でサーバ１間の合意値を得られることができる。
【０１３８】
一方、２ステップ合意では、２ステップ合意部２２０と正常値選択部２５０及び衝突解決値選択部２６０で合意を行う場合、プロセス数をｎ２とし、許容故障数等は２ステップ合意部２２０の前段部２２０−Ａ（選択クォーラムＱ１）と後段部２２０−Ｂ（計数クォーラムＱ２）では値が異なるので、次のように定義する。
【０１３９】
前段部２２０−Ａにおける許容故障数をｆ２１、許容ビザンチン故障数をｂ２１とし、後段部２２０−Ｂにおける許容故障数をｆ２２、許容ビザンチン故障数をｂ２２とすると、プロセス数ｎ２は次式で表される。
ｎ２＞ｍａｘ（２ｆ２１＋ｂ２１，２ｆ２２＋２ｂ２２）
ただし、ｍａｘ（ｘ，ｙ）は、ｘとｙのうち大きい値を出力する関数である。
【０１４０】
２ステップ合意では、許容故障数ｆ２１＝ｆ２２＝３、許容ビザンチン故障数ｂ２１＝ｂ２２＝１の場合、プロセス数ｎ２＝９が最小値となる。
【０１４１】
また、２ステップ合意の最小通信回数δは、図３で示したように、クライアント３−１からデータの更新要求で１回の通信となり、各サーバ１の送受信部１１０は受信したデータを他のサーバ１の前段部２２０−Ａへ送信することで２回の通信となり、次に前段部２２０−Ａの結果を各サーバ１の後段部２２０−Ｂへ送信することで３回の通信となる（Ｍ２、Ｍ３、図３参照）。そして、２ステップ合意部２２０では、計数クォーラムＱ２で確定値が得られれば合計３回の通信でサーバ１間の合意値を得られることができ、最小通信回数δ＝３となる。
【０１４２】
なお、最小通信回数δを維持可能な許容故障数ｅについては、２ステップ合意の許容故障数ｆ２であり、ｆ２は次式で表される。
ｆ２＝ｍｉｎ（ｆ２１，ｆ２２）
ただし、ｍｉｎ（ｘ，ｙ）は、ｘとｙのうち小さい値を出力する関数である。
ｆ２１＝ｆ２２＝３の場合、ｆ２＝３であり、ｅ＝３となる。したがって、２ステップ合意は省プロセス１ステップ合意より、最小通信回数δが多くなるが、分散データ管理システムの可用性は高くなる。
【０１４３】
さらに、省プロセス１ステップ合意部２１０と２ステップ合意部２２０に組み合わせ部２４０を加えて、正常値選択部２５０及び衝突解決値選択部２６０を用いて合意を行う場合、プロセス数をｎとし、他の値を上記の通りとすると、プロセス数ｎは、次式で定義される。
ｎ＝ｍａｘ（２ｑ＋ｆ１＋２ｂ１，２ｆ２１＋ｂ２１，２ｆ２２＋２ｂ２２）
ただし、ｍａｘ（ｘ，ｙ，z）は、ｘとｙとｚのうち大きい値を出力する関数である。
【０１４４】
省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合では、許容故障数ｑ＝１、許容故障数ｆ１＝ｆ２１＝ｆ２２＝３、許容ビザンチン故障数ｂ１＝ｂ２１＝ｂ２２＝１の場合、プロセス数ｎ＝９が最小値となる。なお、このプロセス数ｎについては、後述する実施例２および実施例３に記載の方法を用いることで、最小通信回数δと許容故障数ｅを維持しながら、この装置数を低減することが可能である。
【０１４５】
また、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合の最小通信回数δは、上述のように、省プロセス１ステップ合意部２１０で確定値が得られた場合であり、最小通信回数δ＝２となる。
【０１４６】
なお、最小通信回数δを維持可能な許容故障数ｅについては、２ステップ合意と同等であり、ｅ＝３となる。したがって、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合は、省プロセス１ステップ合意の最小通信回数δ、サーバ数（プロセス数）を維持しながら、２ステップ合意と同等の可用性を確保することができるのである。
【０１４７】
＜処理の概要＞
図３は、本発明のサーバ１で行われる分散データ管理の一例を示す図である。図示の例ではクライアント３−１がデータＡの処理要求をサーバ１−１〜１−ｎへマルチキャストで送信する例を示す。なお、クライアント３−１から各サーバ１へのマルチキャストによる送信は、図示しない管理計算機などが行ってもよい。
【０１４８】
各サーバ１の送受信部１１０は、クライアント３−１から受信したデータを他のサーバ１へマルチキャストで送信する（図中Ｍ２）。サーバ１は、サーバ１から受信したデータを更新部１３０へ送信し、一貫性の判定を行う。
【０１４９】
更新部１３０は、図１７に示した確定クォーラム（または推定クォーラム）のデータを省プロセス１ステップ合意部（図３のＳＰ１−ＳＴＥＰ）２１０へ入力する。また、更新部１３０は、図１８、図１９に示した選択クォーラム（または計数クォーラム）のデータを２ステップ合意部２２０へ入力する。
【０１５０】
省プロセス１ステップ合意部２１０は、確定クォーラムから入力されたデータが全て一致した場合、当該データを確定した値（確定値）とする。また、省プロセス１ステップ合意部２１０は、推定クォーラムから入力されたデータのうち過半数のデータが一致した場合、当該データを推定値とする。
【０１５１】
一方、上記以外の場合は、省プロセス１ステップ合意部２１０が、出力は無確定として組み合わせ部２４０に通知する。
【０１５２】
次に、２ステップ合意部２２０では、前段部２２０−Ａ（図３の２−ＳＴＥＰ（１））で選択クォーラムから入力されたデータが全て一致した場合、当該データを一致値とし、後段部２２０−Ｂ（図３の２−ＳＴＥＰ（２））へ送信する（Ｍ３）。
【０１５３】
後段部２２０−Ｂでは、計数クォーラムから入力されたデータが全て一致した場合、当該データを確定値として出力する。また、後段部２２０−Ｂは、計数クォーラムから入力されたデータが部分一致した場合、当該データを推定値とする。
【０１５４】
一方、上記以外の場合は、後段部２２０−Ｂが、出力は無確定として組み合わせ部２４０に通知する。
【０１５５】
次に、更新部１３０では、省プロセス１ステップ合意部２１０と２ステップ合意部２２０の出力が組み合わせ部２４０へ入力される。組み合わせ部２４０は、図４または図５で示したように予め設定された優先順位に従って省プロセス１ステップ合意部２１０または２ステップ合意部２２０の出力を選択する。
【０１５６】
まず、組み合わせ部２４０は、第１の優先順位として、省プロセス１ステップ合意部２１０の確定値または２ステップ合意部２２０の確定値のいずれかを合意値（組み合わせ確定値）として選択する。
【０１５７】
なお、省プロセス１ステップ合意部２１０の確定値は、サーバ１の確定クォーラムＱｅ内でデータの全数が一致した値である。また、２ステップ合意部２２０の確定値は、後段部２２０−Ｂがサーバ１の計数クォーラム（Ｑ２）から受信したデータの全数が一致した値である。
【０１５８】
組み合わせ部２４０は、第２の優先順位として、２ステップ合意部２２０の推定値を選択する。この推定値は、２ステップ合意部２２０の後段部２２０−Ｂがサーバ１の計数クォーラムから受信したデータのうち部分一致した値である。
【０１５９】
また、組み合わせ部２４０は、第３の優先順位として、省プロセス１ステップ合意部２１０の推定値を選択する。この推定値は、省プロセス１ステップ合意部２１０がサーバ１の推定クォーラムから受信したデータのうち過半数が一致した値である。
【０１６０】
組み合わせ部２４０は、第４の優先順位として、組み合わせ空のみ、または組み合わせ空と正常値を選択する。この正常値は、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の入力から正常値テーブル３３０と一致する値である。
【０１６１】
組み合わせ部２４０は、図４の優先順位に従って省プロセス１ステップ合意部２１０または２ステップ合意部２２０の出力を選択した後、選択したデータが確定値であればそのまま出力する。
【０１６２】
一方、組み合わせ部２４０は、推定値または組み合わせ空（もしくは組み合わせ空及び正常値）を選択した場合には、他のサーバ１との間で合意を行う必要がある。サーバ１では、ＰＡＸＯＳ合意部４０で合意を形成する前に、衝突解決値選択部２６０で上述した定足数の比較を行ってからＰＡＸＯＳ合意部４０へ合意を依頼する。
【０１６３】
衝突解決値選択部２６０は、正常値選択部２５０で正常値または最頻値を用いて、ＰＡＸＯＳ合意部４０へ異常値を入力するのを抑止して、かつ、合意を実行可能な値を選択して、ＰＡＸＯＳ合意部４０へ合意を依頼する。
【０１６４】
各サーバ１のＰＡＸＯＳ合意部４０の結果はＰＡＸＯＳ合意値判定部４００へ入力され、合意が形成された場合には、合意値をデータ格納部１４０へ入力して所定の処理を実行してクライアント３に応答する。
【０１６５】
ＰＡＸＯＳ合意値判定部４００は、合意が形成されなかった場合には、合意が得られなかった通知をクライアント３に送信する。また、ＰＡＸＯＳ合意値判定部４００は、合意が形成された場合には、合意値を出力部４５０（図３参照）に出力する。
【０１６６】
このように、本実施例１では、省プロセス１ステップ合意部２１０と２ステップ合意部２２０の２つの合意アルゴリズムを組み合わせ、さらに、これら２つの合意アルゴリズムから確定値や推定値が得られない場合には、組み合わせ部２４０が「組み合わせ空」または正常値や最頻値を出力する。さらに、衝突解決値選択部２６０は、組み合わせ部２４０の出力がＰＡＸＯＳ合意部４０で合意を実行可能な値を選択して合意を依頼する。
【０１６７】
これにより、アクセラレータ１６の各部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数（またはサーバ数）ｎの増大を抑制しながらも、クライアント３がデータの処理をサーバ１に要求してから、サーバ１で合意に達するまでの最小の通信回数を低減することができる。本実施例１では、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、処理結果をクライアント３に応答することが可能となる。
【０１６８】
また、本実施例１では、アクセラレータ１６の各部におけるビザンチン障害に対する対処は、次のようになる。
【０１６９】
省プロセス１ステップ合意部２１０では、送受信部１１０にビザンチン障害が発生した場合でも、１ステップ合意の際に、確定値と推定値を正常に判定することができる。また、２ステップ合意部２２０では、ビザンチン障害による異常値が入力されても、確定値と推定値を正常に判定することができる。また、省プロセス１ステップ合意部２１０または２ステップ合意部２２０では、確定値または推定値が得られない場合には無確定を出力する。
【０１７０】
組み合わせ部２４０は、省プロセス１ステップ合意部２１０または２ステップ合意部２２０でビザンチン障害が発生し、確定値や推定値が存在しない場合には、正常な値を任意値として出力し、異常値を出力するのを抑止する。
【０１７１】
また、衝突解決値選択部２６０は、省プロセス１ステップ合意部２１０、２ステップ合意部２２０または組み合わせ部２４０でビザンチン障害が発生しても正常な値でＰＡＸＯＳ合意を実行することができる。また、データ格納部１４０では、ビザンチン障害が生じても、クライアント３には正常な処理結果を応答することができる。
【０１７２】
＜処理の詳細＞
図８は、各サーバ１で行われる処理の一例を示すフローチャートである。この処理は、クライアント３からデータの処理要求を受信した場合に実行される。
【０１７３】
まず、サーバ１では、クライアント３からマルチキャストで送信された処理要求に含まれるデータを、アクセラレータ１６の送受信部１１０が受信する（Ｓ１）。
【０１７４】
次にアクセラレータ１６の送受信部１１０は、受信したデータを他のサーバ１へマルチキャストで送信し、受信したデータを省プロセス１ステップ合意部２１０と２ステップ合意部２２０へ入力する（Ｓ２）。
【０１７５】
次に、ステップＳ３では、省プロセス１ステップ合意部２１０が、上記入力された処理要求について１ステップ合意処理を後述する図９のように実行する。ステップＳ４では、２ステップ合意部２２０が、上記入力された処理要求について２ステップ合意処理を後述する図１０のように実行する。なお、図示の例では、省プロセス１ステップ合意処理（Ｓ３）と２ステップ合意処理（Ｓ４）を並列して実行する例を示すが、順次実行してもよい。
【０１７６】
ステップＳ５では、組み合わせ部２４０が省プロセス１ステップ合意部２１０の出力（確定値、推定値または無確定）と、２ステップ合意部２２０の出力（確定値、推定値または無確定）を受け付けて、図１１で示す組み合わせ処理を実行する。
【０１７７】
ステップＳ６では、サーバ１の更新部１３０が、組み合わせ部２４０の出力に確定値が含まれているか否かを判定する。更新部１３０は、確定値が含まれていればステップＳ７へ進み確定値を合意値として出力する。更新部１３０は、出力した合意値をデータ格納部１４０へ入力し、所定の処理を行った結果は送受信部１１０を介してクライアント３へ応答する。
【０１７８】
一方、更新部１３０は、組み合わせ部２４０の出力に確定値が含まれていない場合には、ステップＳ８に進んで推定値が含まれているか否かを判定する。更新部１３０は、推定値が含まれていれば、ステップＳ１１に進んで衝突解決値選択部２６０で衝突解決値選択処理を実行する。一方、推定値が含まれていなければ、ステップＳ９に進んで正常値選択部２５０で正常値選択を実行する。
【０１７９】
ステップＳ９では、正常値選択部２５０が図１３で示すように、省プロセス１ステップ合意部２１０（あるいは２ステップ合意部２２０）が、合意処理のために各送受信部１１０から受信した値に基づいて正常値テーブル３３０にデータを追加する。ステップＳ１０では、正常値選択部２５０が、正常値テーブル３３０に追加した正常値と組み合わせ空の値を衝突解決値選択部２６０へ送信し、ステップＳ１１に進む。
【０１８０】
ステップＳ１１では、衝突解決値選択部２６０が、組み合わせ部２４０からの推定値、または正常値選択部２５０から正常値と組み合わせ空の値を受け付けて、図１２に示す衝突解決値選択処理を実行する。衝突解決値選択部２６０は、各アクセラレータ１６から組み合わせ部２４０の出力を収集してＰＡＸＯＳ合意部４０への入力（衝突解決値）を生成し、ＰＡＸＯＳ合意部４０へ入力する。
【０１８１】
ステップＳ１２では、ＰＡＸＯＳ合意部４０がＰＡＸＯＳアルゴリズムを用いて各サーバ１間で衝突解決値（提案）の合意を実行し、アクセラレータ１６の更新部１３０に応答する。ＰＡＸＯＳアルゴリズムについては、周知のアルゴリズムであるので本実施例では詳述しない。
【０１８２】
ステップＳ１３では、ＰＡＸＯＳ合意値判定部４００が、ＰＡＸＯＳ合意部４０の応答（衝突解決値）が「空」であるか否かを判定し、「空」でない場合にはステップＳ１４へ進み、「空」の場合にはステップＳ１５に進む。
【０１８３】
ステップＳ１４では、ＰＡＸＯＳ合意値判定部４００が、ＰＡＸＯＳ合意部４０からの応答（確定値）を合意値として出力する。なお、合意値は上述のようにデータ格納部１４０へ入力され、クライアント３に処理結果を応答する。
【０１８４】
ステップＳ１５では、ＰＡＸＯＳ合意値判定部４００がメモリ１２等を参照し、当該アクセラレータ１６が継続モードであるか否かを判定し、継続モードであればステップＳ１６へ進み、継続モードでなければステップＳ１７へ進む。
【０１８５】
ステップＳ１６では、送受信部１１０が既に受信しているデータを各サーバ１の送受信部１１０へマルチキャストで送信して、合意の再実行（再合意）を実施する。なお、再合意には、各サーバ１の正常値選択部２５０に保持されている正常値又は最頻値を使用してもよい。ステップＳ１７では、各サーバ１との間で合意が形成されなかったため、合意不可を示す通知をクライアント３に送信する。
【０１８６】
上記処理によって、合意値が得られた場合には、データ格納部１４０が合意値で所定の処理を行って、アクセラレータ１６は処理結果をクライアント３に応答する。一方、合意値が得られなかった場合には、アクセラレータ１６が合意の再実行または合意不可の通知を送信して処理を終了する。
【０１８７】
＜省プロセス１ステップ合意処理＞
図９は、省プロセス１ステップ合意部２１０で行われる合意処理の一例を示す図である。この処理は、図８のステップＳ３で行われる。
【０１８８】
省プロセス１ステップ合意部２１０は、推定クォーラムの大きさＱｆ（ｎ１−ｆ１≧Ｑｆ≧２ｑ＋２ｂ１＋１）の台数のサーバ１からの入力（処理要求）を待機する（Ｓ２１）。
【０１８９】
次に、省プロセス１ステップ合意部２１０は、推定クォーラムの大きさＱｆの数だけ入力を受けると、Ｑｆの数の入力の値が全て一致するか否かを判定する（Ｓ２２）。Ｑｆの全数の値が一致した場合にはステップＳ２３へ進み、そうでない場合にはステップＳ２６へ進む。
【０１９０】
ステップＳ２３では、省プロセス１ステップ合意部２１０が、上述した条件１〜３のいずれかを満たすまで、送受信部１１０から入力を受け付ける。省プロセス１ステップ合意部２１０は、確定クォーラムＱｅ台の送受信部１１０からの入力の値が一致する（条件１）か、全てのサーバ１から入力を受け付ける（条件２）か、所定時間が経過する（条件３）かの条件を満たすと、ステップＳ２４へ進む。
【０１９１】
ステップＳ２４では、省プロセス１ステップ合意部２１０が、上記ステップＳ２３で受信した確定クォーラムの数Ｑｅの入力が一致したか否かを判定する。確定クォーラムＱｅ内で、入力された値が一致していればステップＳ２５へ進む。ステップＳ２５では、省プロセス１ステップ合意部２１０が確定クォーラムＱｅ内で一致した値を確定値として組み合わせ部２４０へ出力する。
【０１９２】
ステップＳ２２で、推定クォーラムＱｆ内で全数の値が一致しなかったステップＳ２６では、省プロセス１ステップ合意部２１０は、推定クォーラムＱｆ内の過半数で値が一致したか否かを判定する。推定クォーラムＱｆ内の過半数で値が一致する場合にはステップＳ２７へ進み、一致しない場合にはステップＳ２８へ進む。
【０１９３】
ステップＳ２７では、推定クォーラムＱｆ内で値が一致し、確定クォーラムＱｅ内で値が一致しない場合または、推定クォーラムＱｆ内で過半数の値が一致した場合で、省プロセス１ステップ合意部２１０は、推定クォーラムＱｆ内で過半数が一致した値を推定値として組み合わせ部２４０に出力する。
【０１９４】
ステップＳ２８では、推定クォーラムＱｆ内の過半数で値が一致しないので、省プロセス１ステップ合意部２１０は、無確定を組み合わせ部２４に出力する。
【０１９５】
上記の合意処理によって、省プロセス１ステップ合意部２１０は、確定値または推定値あるいは無確定を組み合わせ部２４０へ出力する。
【０１９６】
＜２ステップ合意処理＞
図１０は、２ステップ合意部２２０で行われる処理の一例を示す図でフローチャートである。この処理は、図８のステップＳ４で実行される。
【０１９７】
まず、ステップＳ３１では、２ステップ合意部２２０の前段部２２０−Ａは、送受信部１１０から選択クォーラムの数Ｑ１（ｎ２１−ｆ２１）の入力を受け付けるまで待機する。選択クォーラムの数Ｑ１の入力を受け付けると、ステップＳ３２に進む。ステップＳ３２では、２ステップ合意部２２０が、選択クォーラムＱ１の入力の値が全て一致したか否かを判定する。
【０１９８】
選択クォーラムＱ１内で入力の値が全て一致した場合、２ステップ合意部２２０は、ステップＳ３３で、受信した入力の値を各アクセラレータ１６へ送信する。一方、選択クォーラムＱ１内で入力の値が全て一致しない場合、２ステップ合意部２２０は、ステップＳ３４で、空の値を各アクセラレータ１６へ送信する。
【０１９９】
ステップＳ３５では、２ステップ合意部２２０の後段部２２０−Ｂが、上述した条件４〜６のいずれかを満たすまで、前段部２２０−Ａから入力を受け付ける。なお、後段部２２０−Ｂは、上記ステップＳ３３またはステップＳ３４で、各アクセラレータ１６の前段部２２０−Ａが送信した値を待ち受ける。
【０２００】
すなわち、２ステップ合意部２２０の後段部２２０−Ｂは、計数クォーラムＱ２（ｎ２２−ｆ２２）台の前段部２２０−Ａからの入力の値が一致する（条件４）か、全てのアクセラレータ１６の前段部２２０−Ａから入力の値を受信する（条件５）か、設定された時間が経過する（条件６）かのいずれかの条件を満たすと、ステップＳ３６へ進む。
【０２０１】
ステップＳ３６では、後段部２２０−Ｂが、入力の値のうち、計数クォーラムＱ２の数（ｎ２２−ｆ２２）で値が一致したか否かを判定する。後段部２２０−Ｂは、入力の値が計数クォーラムＱ２の数以上で一致していればステップＳ３７へ進み、一致した値を確定値として組み合わせ部２４０に出力する。
【０２０２】
一方、入力の値が計数クォーラムＱ２の数以上で一致していなければステップＳ３８へ進んで、後段部２２０−Ｂは、一致した値の数が許容ビザンチン故障数ｂ２２＋１以上であるか否かを判定する。後段部２２０−Ｂは、一致した値の数が許容ビザンチン故障数ｂ２２＋１以上であればステップＳ３９で、許容ビザンチン故障数ｂ２２＋１以上で一致した値を推定値として組み合わせ部２４０へ出力する。
【０２０３】
一方、ステップＳ３８の判定で、部分一致した数が許容ビザンチン故障数ｂ２２＋１未満の場合、後段部２２０−Ｂは、値を無確定として組み合わせ部２４０へ出力する。
【０２０４】
以上の処理によって、２ステップ合意部２２０は、前段部２２０−Ａが選択クォーラムＱ１で一致した値を配信し、後段部２２０−Ｂは、配信された値で計数クォーラムＱ２の数以上で一致したか否かによって確定値または推定値を決定し、合意が形成できない場合には値を無確定として出力する。
【０２０５】
＜組み合わせ処理＞
図１１は、組み合わせ部２４０で行われる処理の一例を示す図でフローチャートである。この処理は、図８のステップＳ５で実行される。
【０２０６】
まず、ステップＳ４１では、組み合わせ部２４０が、省プロセス１ステップ合意部（図中ＳＰ１−ｓｔｅｐ）２１０及び２ステップ合意部（図中２−ｓｔｅｐ）２２０から出力（確定値、推定値、無確定）を取得する。ステップＳ４１では、組み合わせ部２４０が、省プロセス１ステップ合意部２１０及び２ステップ合意部２２０から出力のいずれかに確定値が含まれるか否かを判定する。組み合わせ部２４０は、確定値が含まれる場合はステップＳ４３へ進み、そうでない場合にはステップＳ４５へ進む。
【０２０７】
ステップＳ４３では、組み合わせ部２４０が、省プロセス１ステップ合意部２１０の確定値、または２ステップ合意部２２０のいずれかの確定値を選択する。ステップＳ４４では、組み合わせ部２４０が、この選択した確定値を組み合わせ確定値として出力する。
【０２０８】
確定値が存在しない場合のステップＳ４５では、組み合わせ部２４０が、２ステップ合意部２２０の出力に推定値があるか否かを判定する。２ステップ合意部２２０の出力が推定値の場合、組み合わせ部２４０は、この推定値を組み合わせ推定値として出力する（Ｓ４６）。
【０２０９】
２ステップ合意部２２０に推定値が存在しない場合、組み合わせ部２４０は、ステップＳ４７で省プロセス１ステップ合意部２１０の出力が推定値であるか否かを判定する。省プロセス１ステップ合意部２１０の出力が推定値であれば、組み合わせ部２４０は、この推定値を組み合わせ推定値として出力する（Ｓ４８）。
【０２１０】
一方、確定値も推定値も存在しない場合には、組み合わせ部２４０は、組み合わせ空の値を出力する（Ｓ４９）。
【０２１１】
上記処理により、組み合わせ部２４０は、省プロセス１ステップ合意部２１０と２ステップ合意部２２０の出力を組み合わせて確定値または推定値を決定し、いずれも存在しない場合には組み合わせ空の値を出力する。
【０２１２】
＜正常値選択処理＞
図１３は、正常値選択部２５０で行われる処理の一例を示す図でフローチャートである。この処理は、図８のステップＳ９で実行される。なお、図８の例では、組み合わせ処理（Ｓ５）後に、正常値選択処理実行する例を示すが、正常値選択処理の実行順序はこれに限定されない。例えば、省プロセス１ステップ合意処理（Ｓ３）や、２ステップ合意処理（Ｓ４）と、並列して実行してもよい。
【０２１３】
まず、ステップＳ７１では、正常値選択部２５０が、省プロセス１ステップ合意部２１０（あるいは２ステップ合意部２２０）が、合意処理のために受信した値（各サーバ１の送受信部１１０がマルチキャストで配信したクライアント３からの処理要求）を、許容ビザンチン故障数ｂ３＋１の個数まで収集する。
【０２１４】
ステップＳ７２では、正常値選択部２５０が、収集した入力の値の一致数が許容ビザンチン故障数ｂ３よりも大きい値があるか否かを判定する。正常値選択部２５０は、許容ビザンチン故障数ｂ３よりも大きい値がある場合にはステップＳ７３へ進み、そうでない場合には、ステップＳ７４へ進む。
【０２１５】
ステップＳ７２では、正常値選択部２５０が、一致数が許容ビザンチン故障数ｂ３よりも大きい値を、正常値テーブル３３０に追加して処理を終了する。
【０２１６】
一方、一致数が許容ビザンチン故障数ｂ３以下の場合、正常値選択部２５０は、ステップＳ７４で、省プロセス１ステップ合意部２１０（あるいは２ステップ合意部２２０）から新たな入力の値を追加して受信し、収集する。次に、ステップＳ７５では、正常値選択部２５０が、収集した入力の値の一致数が許容ビザンチン故障数ｂ３よりも大きい値があるか否かを判定する。正常値選択部２５０は、許容ビザンチン故障数ｂ３よりも大きい値がある場合には上記ステップＳ７３へ進み、そうでない場合には、ステップＳ７６へ進む。
【０２１７】
ステップＳ７６では、正常値選択部２５０が、収集した値の数が最大値（ｎ３−ｆ３）に達したか否かを判定する。収集した値の数がｎ３−ｆ３に達していれば、正常値選択部２５０は正常値テーブル３３０に空の値を追加する。一方、収集した値の数がｎ３−ｆ３に達していなければ、正常値選択部２５０は、ステップＳ７４に戻って上記処理を繰り返す。
【０２１８】
上記処理によって、正常値選択部２５０は、一致数が所定の条件に達した値または空の値を正常値テーブル３３０に追加していく。
【０２１９】
＜衝突解決値選択処理＞
図１２は、衝突解決値選択部２６０で行われる合意処理の一例を示す図である。この処理は、図８のステップＳ１１で行われる。
【０２２０】
まず、ステップＳ５１では、各アクセラレータ１６は、組み合わせ部２４０の出力（組み合わせ確定値、組み合わせ推定値、組み合わせ空）と正常値選択部２５０からの正常値（または最頻値）を、各サーバ１の衝突解決値選択部２６０へマルチキャストで送信し（Ｍ４）、衝突解決値選択部２６０は、許容ビザンチン故障数ｂ４＋１の数まで収集する。なお、最頻値については図１４で後述する。
【０２２１】
衝突解決値選択部２６０は、許容ビザンチン故障数ｂ４＋１の値を収集すると、ステップＳ５２へ進む。ステップＳ５２では、収集した確定値及び推定値の中で一致する値の数（一致数）が許容ビザンチン故障数ｂ４よりも大きい値があるか否かを判定する。衝突解決値選択部２６０は、一致数が許容ビザンチン故障数ｂ４よりも大きい値が存在する場合にはステップＳ５３へ進み、そうでない場合にはステップＳ５４へ進む。
【０２２２】
ステップＳ５３では、衝突解決値選択部２６０は、一致数が許容ビザンチン故障数ｂ４よりも大きい値をＰＡＸＯＳ合意部４０への入力（衝突解決値）として出力し、処理を終了する。
【０２２３】
一方、確定値や推定値の一致数が許容ビザンチン故障数ｂ４以下の場合のステップＳ５４では、衝突解決値選択部２６０は、組み合わせ空の値の一致数が許容ビザンチン故障数ｂ４よりも大きいか否かを判定する。衝突解決値選択部２６０は、組み合わせ空の値の一致数が許容ビザンチン故障数ｂ４よりも大きい場合には、ステップＳ５５へ進み、そうでない場合にはステップＳ６１へ進む。
【０２２４】
ステップＳ５５では、衝突解決値選択部２６０が、組み合わせ部２４０の確定値が存在しないと判定し、ステップＳ５６へ進む。ステップＳ５６では、衝突解決値選択部２６０が、空ではない正常値（最頻値）を含めて、収集した値の中の一致数が許容ビザンチン故障数ｂ４よりも大きい値が存在するか否かを判定する。衝突解決値選択部２６０は、一致数が許容ビザンチン故障数ｂ４よりも大きい値が存在する場合には、ステップＳ５７へ進み、そうでない場合にはステップＳ５８へ進む。
【０２２５】
ステップＳ５７では、衝突解決値選択部２６０が、一致数が許容ビザンチン故障数ｂ４よりも大きい値をＰＡＸＯＳ合意部４０への入力（衝突解決値）として出力し、処理を終了する。
【０２２６】
ステップＳ５４の判定で、組み合わせ空の値の一致数が許容ビザンチン故障数ｂ４以下の場合のステップＳ６１では、衝突解決値選択部２６０が、収集した値の総数が最大値（ｎ４−ｆ４）の大きさに達したか否かを判定する。
【０２２７】
衝突解決値選択部２６０は、収集した値の総数がｎ４−ｆ４に達していればステップＳ５９へ進み、ＰＡＸＯＳ合意部４０への入力（衝突解決値）を空として出力し、処理を終了する。
【０２２８】
衝突解決値選択部２６０は、収集した値の総数がｎ４−ｆ４に達していなければステップ６２へ進み、各アクセラレータ１６から組み合わせ部２４０の出力を追加で収集してから、上記ステップＳ５２へ戻って上記処理を繰り返す。
【０２２９】
ステップＳ５６の判定で、一致数が許容ビザンチン故障数ｂ４以下のステップＳ５８では、衝突解決値選択部２６０が、収集した値の総数がｎ４−ｆ４の大きさに達したか否かを判定する。
【０２３０】
衝突解決値選択部２６０は、収集した値の総数がｎ４−ｆ４に達していればステップＳ５９へ進み、ＰＡＸＯＳ合意部４０への入力を空として出力し、処理を終了する。
【０２３１】
一方、衝突解決値選択部２６０は、収集した値の総数がｎ４−ｆ４に達していなければステップ６０へ進み、各アクセラレータ１６から組み合わせ部２４０の出力を追加で収集してから、上記ステップＳ５６へ戻って上記処理を繰り返す。
【０２３２】
上記処理によって、衝突解決値選択部２６０は、組み合わせ部２４０の出力と正常値選択部２５０の出力に基づいて、ＰＡＸＯＳ合意部４０への入力を決定して出力する。
【０２３３】
以上の処理により、衝突解決値選択部２６０は、組み合わせ部２４０の出力に確定値が存在しない場合には、衝突解決値選択部２６０が収集した値の一致数に基づいてＰＡＸＯＳ合意部４０への入力（衝突解決値）を決定する。
【０２３４】
＜最頻値選択処理＞
図１４は、正常値選択部２５０で行われる処理の一例を示す図でフローチャートである。この処理は、正常値に代わって最頻値を用いる場合に図８のステップＳ９で実行される。なお、正常値選択処理と同様に、最頻値選択処理の実行順序はこれに限定されない。
【０２３５】
まず、ステップＳ８１では、正常値選択部２５０が、図１３に示した正常値選択処理を実施して正常値テーブル３３０を更新する。ステップＳ８２では、正常値選択部２５０が、正常値テーブル３３０に値が存在するか否かを判定する。正常値選択部２５０は、正常値テーブル３３０に値が存在すればステップＳ８３へ進み、そうでない場合にはステップＳ８４へ進む。
【０２３６】
ステップＳ８３では、正常値選択部２５０が、正常値テーブル３３０の値の中で一致数が最大の値を最頻値テーブル３４０に追加する。なお、一致数は、図１３のステップＳ７１で示したように、各送受信部１１０がクライアント３から受信した値との一致数である。
【０２３７】
一方、ステップＳ８３では、正常値選択部２５０が、最頻値テーブル３４０に空の値を追加する。
【０２３８】
上記処理によって、各送受信部１１０がクライアント３から受信した値のうち一致数が最大の値が最頻値テーブル３４０に追加される。
【０２３９】
以上、説明したように、本実施例１の分散処理システムでは、アクセラレータ１６の各部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数（またはサーバ数）の増大を抑制しながらも、低レイテンシで処理を実現することができる。そして、本実施例１では、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、正常な処理結果をクライアント３に応答することが可能となる。
【実施例２】
【０２４０】
図１５は、実施例２を示し、サーバ１の構成の一例を示すブロック図である。本実施例２のサーバ１は、前記実施例１のアクセラレータ１６で行っていた処理のうち２ステップ合意部２２０の後段部２２０−Ｂの処理を、サーバ１のメモリ１２の２ステップ合意部２２０の後段部２２０−ＢＰに置き換えて、アクセラレータ１６とは異なるハードウェアで実行するもので、その他の構成は前記実施例１と同様である。
【０２４１】
本実施例２では、上記実施例１に示したアクセラレータ１６の機能の少なくとも一つを、サーバ１のソフトウェアとして実行する例を示す。すなわち、２ステップ合意部２２０の後段部２２０−ＢＰは、サーバ１のメモリ１２にプログラムとしてロードされ、プロセッサ１１によって実行される。プロセッサ１１は、２ステップ合意プログラムを実行することにより２ステップ合意部２２０の後段部２２０−ＢＰとして機能する。
【０２４２】
本実施例２の２ステップ合意部２２０では、前段部２２０−Ａとして機能する前段部２２０−Ａをアクセラレータ１６のハードウェアで処理し、後段部２２０−Ｂとして機能する２ステップ合意部（２２０−ＢＰ）はサーバ１のソフトウェアで処理する。すなわち、前段部２２０−Ａと後段部２２０−Ｂを異なるハードウェアで実行する。
【０２４３】
２ステップ合意部２２０の一部をサーバ１のソフトウェアで処理することにより、ＦＰＧＡのソフトエラーのようなビザンチン障害が発生する確率は極めて低いため、選択クォーラムＱ１または計数クォーラムＱ２におけるビザンチン障害の発生を無視することができ、全体のサーバ数(プロセス数)を低減することが可能となる。
【０２４４】
前記実施例１で示したように、２ステップ合意部２２０で必要なプロセス数ｎ２は、ｎ２＞ｍａｘ（２ｆ２１＋ｂ２１，２ｆ２２＋２ｂ２２）である。前段部２２０−Ａ、許容故障数ｆ２１＝３、許容ビザンチン故障数ｂ２１＝１、後段部２２０−Ｂにおける許容故障数ｆ２２＝２、許容ビザンチン故障数ｂ２２＝０となるので、プロセス数ｎ２の最小値＝８となる。
【０２４５】
なお、本実施例２では、２ステップ合意の経路の一部をソフトウェアで実施する例を示したが、２ステップ合意の全体をソフトウェアで実行するようにしてもよい。
【０２４６】
以上のように、２ステップ合意部２２０の一部または全てを、アクセラレータ１６とは異なるハードウェア（サーバ１）で実現し、パラメータを変化させることで、２ステップ合意で必要なサーバ１の数を低減することが可能となる。この時、前記実施例１と同様に、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合、プロセス数ｎは次式で定義される。
ｎ＝ｍａｘ（２ｑ＋ｆ１＋２ｂ１，２ｆ２１＋ｂ２１，２ｆ２２＋２ｂ２２）
ｑ＝１、ｆ１＝ｆ２１＝３、ｆ２２＝２、ｂ１＝ｂ２１＝１、ｂ２２＝０の時、ｎ＝８となる。したがって、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合でも、必要なサーバ１の数を低減することが可能である。
【実施例３】
【０２４７】
図１６は、実施例３を示す。本実施例３では、クライアント３が出力する処理要求に署名が含まれている例を示す。本実施例３では２ステップ合意部２２０の処理の一部を変更したもので、その他の構成は前記実施例１と同様である。
【０２４８】
図１６は、２ステップ合意部２２０で行われる処理の一例を示すフローチャートである。図１６のフローチャートにおいて、ステップＳ９１〜Ｓ９４及びＳ９６〜Ｓ９７は、前記実施例１のステップＳ３１〜Ｓ３４及びＳ３６〜Ｓ３７と同一である。
【０２４９】
ステップＳ９５では、２ステップ合意部２２０の後段部２２０−Ｂが、前段部２２０−Ａから受信した処理要求（入力）に付与された署名を検証し、署名が不正な入力を破棄し、署名が正当な入力について処理を実施する点が前記実施例１と相違する。
【０２５０】
なお、プロセス（サーバ１）数ｎ２の条件については、署名を利用する本実施例３ではプロセス数ｎ２は、前記実施例１と同様の変数を用いると、
ｎ２＞ｍａｘ（２ｆ２１＋ｂ２１，２ｆ２２＋ｂ２２）
となる。
【０２５１】
許容故障数ｆ２１＝ｆ２２＝３、許容ビザンチン故障数ｂ２１＝ｂ２２＝１の場合、署名を利用する本実施例３では、プロセス数ｎ２＝８が最小値となる。これにより、前記実施例１よりも、サーバ１の総数を低減することが可能となる。
【０２５２】
また、本実施例３で用いる署名は、クライアント３が付与した暗号学的ハッシュ関数（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ等）や誤り検出符号（ＣＲＣ等）といった周知の技術を適用した認証情報である。
【０２５３】
次に、図１０のステップＳ３８〜Ｓ４０と異なるステップＳ９８〜Ｓ１００について説明する。ステップＳ９８では、２ステップ合意部２２０が全ての値が空であるか否かを判定して、空であればステップＳ１００へ進み、空でない場合にはステップＳ９９へ進む。
【０２５４】
ステップＳ９９では、定足数比較を行わず、空でない値があった場合、２ステップ合意部２２０は当該値を推定値として組み合わせ部２４０へ通知する。一方、ステップＳ１００では、全ての値が空であるので、２ステップ合意部２２０は、値が無確定として組み合わせ部２４０へ通知する。ステップＳ９８〜Ｓ１００では、２ステップ合意部２２０が不正な入力を破棄し、正常な値のみで計数クォーラムを実施できるため、一致数を判定する必要がない。
【０２５５】
本実施例３では、２ステップ合意部２２０の後段部２２０−Ｂで署名が正しいかを検証する。検証の結果、不正な署名がある場合、その値を捨て、正当な署名のデータで確定値または推定値の判定を行う。２ステップ合意部２２０において、署名を利用する場合、必要なサーバ数を低減することが可能となる。この時、前記実施例１と同様に、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合、プロセス数ｎは次式で定義される。
ｎ＝ｍａｘ（２ｑ＋ｆ１＋２ｂ１，２ｆ２１＋ｂ２１，２ｆ２２＋ｂ２２）
ｑ＝１、ｆ１＝ｆ２１＝ｆ２２＝３、ｂ１＝ｂ２１＝ｂ２２＝１の時、ｎ＝８となる。したがって、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせた場合でも、必要なサーバ１の数を低減することが可能である。
【実施例４】
【０２５６】
図２０は、実施例４を示し、サーバ１の構成の一例を示すブロック図である。本実施例４のサーバ１−１は、前記実施例１のアクセラレータ１６で行っていた処理のうち、２ステップ合意部２２０と、組み合わせ部２４０及び条件設定部１２０を削除したもので、その他の構成は前記実施例１と同様である。
【０２５７】
本実施例４では、省プロセス１ステップ合意部２１０の出力を、衝突解決値選択部２６０へ入力して他のサーバ１との間で合意を形成するもので、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、ビザンチン障害を検知または訂正することなく、正常に処理を継続することが可能となる。
【０２５８】
前記実施例１でも述べたように、省プロセス１ステップ合意部２１０は、プロセス数ｎ１が、ｎ１＞２ｑ＋ｆ１＋２ｂ１を満たし、確定クォーラムＱｅが、Ｑｅ＝ｎ１−ｑを満たし、推定クォーラムＱｆが、ｎ１−ｆ１≧Ｑｆ≧２ｑ＋２ｂ１＋１を満たせばよい。これにより、省プロセス１ステップ合意部２１０は、ｂ１台の送受信部１１０（またはサーバ１）でビザンチン障害が生じても、確定値および推定値を正しく得ることが可能となる。
【０２５９】
また、本実施例４では、省プロセス１ステップ合意部２１０で確定値が得られた場合には、前記実施例１で述べたように、最小通信回数δ＝２となる。
【０２６０】
なお、本実施例４では、省プロセス１ステップ合意部２１０で合意が形成されない場合には、ＰＡＸＯＳ合意部４０で合意を形成することができる。
【０２６１】
以上のように、本実施例４においても、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、ビザンチン障害を検知または訂正することなく、正常に処理を継続することが可能となる。加えて、アクセラレータ１６にＦＰＧＡを採用した場合、アクセラレータ１６において、ビザンチン障害が発生しうる構成要素が減るため、各処理部を実現するＦＰＧＡの論理リソースの面積が、前記実施例１と比較して、低面積で済む。したがって、前記実施例１と比較して、アクセラレータ１６でビザンチン障害が発生する確率が低くなる。
【０２６２】
＜まとめ＞
上述したように、上記実施例１〜４の分散処理システムは、（１．）プロセッサ（１１）とメモリ（１２）を含むサーバ（１）を複数有し、データを前記複数のサーバ（１）で受信し、前記データを多重化して処理する分散処理方法であって、前記サーバ（１）が、前記多重化された前記データを受信して、第１の判定部（省プロセス１ステップ合意部２１０）で前記受信したデータの一貫性を判定する第１判定ステップ（２１０）と、前記サーバ（１）が、前記第１の判定部（２１０）から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータ（確定値）を含む場合には、当該一貫性が保証されたデータを出力する出力ステップ（出力部４５０）と、を含み、前記第１判定ステップ（２１０）は、前記データを受信する第１のサーバ数（ｎ１）が、故障が発生したサーバを許容する所定の許容故障数（ｑ，ｆ１）と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数（ｂ１）に基づいて予め設定される。
【０２６３】
これにより、各送受信部１１０でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、クライアント３がデータの処理をサーバ１に要求してから、サーバ１で合意に達するまでの最小の通信回数を低減することができる。そして、サーバ１は、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、処理結果をクライアント３に応答することが可能となる。
【０２６４】
また、（２．）上記（１．）に記載の分散処理方法であって、前記サーバ（１）が、前記データの一貫性を判定するために前記サーバ間の最小通信回数（δ）が前記第１の判定部（２１０）よりも多い第２の判定部（２ステップ合意部２２０）で、前記受信したデータの一貫性を判定する第２判定ステップ（２２０）と、前記サーバ（１）が、前記第１の判定部（２１０）または前記第２の判定部（２２０）から前記データの一貫性の判定結果を受け付けて、前記第１の判定部（２１０）の前記判定結果と前記第２の判定（２２０）の前記判定結果を組み合わせる組み合わせステップ（組み合わせ部２４０）と、をさらに含み、前記第２判定ステップ（２２０）は、前記データを受信する第２のサーバ数ｎ２が、許容故障数ｆ２と、許容ビザンチン故障数ｂ２に基づいて予め設定され、前記出力ステップ（４５０）は、前記判定結果の組み合わせに前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力する。
【０２６５】
省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせることにより、各処理部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数（またはサーバ数）の増大を抑制しながら、最小の通信回数を低減することができる。
【０２６６】
また、（３．）は上記（２．）に記載の分散処理方法であって、前記サーバ（１）が、前記組み合わせステップ（２４０）の判定結果に前記一貫性を保証するデータが含まれない場合には、他のサーバと合意を得るための衝突解決値を選択する衝突解決値選択ステップ（衝突解決値選択部２６０）と、前記サーバ（１）が、所定の合意アルゴリズム（ＰＡＸＯＳアルゴリズム）を用いて前記衝突解決値の一貫性の合意を行う合意ステップ（ＰＡＸＯＳ合意部４０）と、をさらに含み、前記出力ステップ（４５０）は、前記合意結果に前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力する。
【０２６７】
多数のリクエスト（データ）が衝突し、データの一致数が少ない場合には、組み合わせ部２４０で確定値および推定値を得られず、任意値が出力される。この場合に正常値を選択しておくことで、異常値が選択されるのを抑止することができる。
【０２６８】
また、（４．）は、上記（２．）に記載の分散処理方法であって、前記第２のサーバ数（ｎ２）は、第３のサーバ数（ｎ２１）と第４のサーバ数（ｎ２２）で決定され、前記第２判定ステップ（２２０）は、予め設定された第３のサーバ数（ｎ２１）の前記サーバ（選択クォーラムＱ１）からデータを受信して前記データの一致を判定する前段ステップ（前段部２２０−Ａ）と、予め設定された第４のサーバ数（ｎ２２）の前記サーバ（計数クォーラムＱ２）から前記前段ステップ（２２０−Ａ）の判定結果を受信して前記データのうち部分一致するデータを判定する後段ステップ（２２０−Ｂ）と、を含み、前記前段ステップ（２２０−Ａ）と後段ステップ（２２０−Ｂ）の少なくとも一方は、異なるハードウェアで機能する。
【０２６９】
２ステップ合意部２２０の合意の経路（前段部２２０−Ａ、後段２２０−Ｂ）を、全て、もしくは一部をソフトエラーが問題とならないハードウェアや、ソフトウェアで実装する。これにより、２ステップ合意部２２０の選択クォーラムＱ１または計数クォーラムＱ２のビザンチン障害の発生を無視することができ、計算機システム全体のサーバ数(プロセス数)を低減する効果が期待できる。
【０２７０】
また、（５．）は、上記（２．）に記載の分散処理方法であって、前記第２のサーバ数（ｎ２）は、第３のサーバ数（ｎ２１）と第４のサーバ数（ｎ２２）で決定され、前記第２判定ステップ（２２０）は、予め設定された第３のサーバ数（ｎ２１）の前記サーバ（Ｑ１）からデータを受信して前記データの一致を判定する前段ステップ（２２０−Ａ）と、予め設定された第４のサーバ数（ｎ２２）の前記サーバ（Ｑ２）から前記前段ステップ（２２０−Ａ）の判定結果を受信して前記データのうち所定の条件が成立するデータを判定する後段ステップ（２２０−Ｂ）と、を含み、前記データは認証情報（署名）を含み、前記後段ステップ（２２０−Ｂ）は、前記認証情報（署名）による認証が成功したデータで前記判定を実施する。
【０２７１】
２ステップ合意部２２０の後段部２２０−Ｂで署名が正しいかを検証し、正当な署名のデータで確定値または推定値の判定を行う。２ステップ合意部２２０において、署名を利用することにより、必要なサーバ数を低減することが可能となる。
【０２７２】
また、（６．）は、上記（２．）に記載の分散処理方法であって、前記第１のサーバ数は、当該第１のサーバ数をｎ、前記許容故障数のうち第１の許容故障数をｑ（最小レイテンシを維持可能な許容故障数）とし、前記許容故障数のうち第２の許容故障数をｆ１とし、前記許容ビザンチン故障数をｂ１とした場合、前記第１のサーバ数ｎ１が２ｑ＋ｆ１＋２ｂ１より大である。
【０２７３】
省プロセス１ステップ合意部２１０、２ステップ合意部２２０、組み合わせ部２４０、正常値選択部２５０及び衝突解決値選択部２６０で合意を行う場合、プロセス数は、上記ｎ１を満たすことで、サーバ１の数の低減と、最小通信回数δの確保を両立できる。
【０２７４】
また、（７．）は、上記（６．）の分散処理方法であって、前記第１のサーバ数ｎ１が、分散処理を実行するサーバ数の最小値である。
【０２７５】
また、（８．）は、上記（３．）に記載の分散処理方法であって、前記受信したデータの一致数とデータの値を正常値として正常値情報（正常値テーブル３３０）に格納する正常値情報格納ステップ（Ｓ９）と、前記組み合わせステップ（組み合わせ部２４０）の前記判定結果に推定値が含まれない場合には、前記正常値情報（３３０）から前記データに対応する正常値を取得して出力する正常値出力ステップ（Ｓ１０）と、をさらに含み、前記衝突解決値選択ステップ（２６０）は、前記正常値を用いて、前記衝突解決値の選択を実施する。
【０２７６】
データの一致数が少ない場合には、組み合わせ部２４０で確定値および推定値を得られず、任意値が出力される。この場合に正常値を選択しておくことで、異常値が選択されるのを抑止することができる。
【０２７７】
また、（９．）は、上記（８．）に記載の分散処理方法であって、前記正常値情報格納ステップ（Ｓ９）は、前記正常値情報（３３０）のうち、一致数が最も高いデータを最頻値として最頻値情報（最頻値テーブル３４０）に格納し、前記正常値情出力ステップ（Ｓ９）は、前記判定結果に推定値が含まれない場合には、前記最頻値情報（３４０）から前記データに対応する前記最頻値を取得して出力する。
【０２７８】
データの一致数が少ない場合には、組み合わせ部２４０で確定値および推定値を得られず、任意値が出力される。この場合に最頻値を選択しておくことで、異常値が選択されるのを抑止することができる。
【０２７９】
また、（１０．）は、上記（２．）に記載の分散処理方法であって、前記第１の判定部（２１０）または前記第２の判定部（２２０）で、前記受信したデータの全数が一致し、通信回数の低減が見込める場合には、さらに他のサーバ（１）からデータの受信を行う。
【０２８０】
これにより、省プロセス１ステップ合意部２１０や、定足数の比較を利用した２ステップ合意部２２０や、署名を利用した２ステップ合意部２２０において、レイテンシの低減を図ることが可能となる。
【０２８１】
なお、他のサーバ１から追加でデータの受信を行う条件は、上記省プロセス１ステップ合意部２１０では、（条件１）待機中に受信した入力のうち、Ｑｅ（ｎ１−ｑ）台の送受信部１１０からの値が一致する、（条件２）全ての送受信部１１０（他のサーバ１）から受信する、（条件３）設定された時間が経過する、という条件である。また、２ステップ合意部２２０では、（条件４）待機中に受信した入力のうち、計数クォーラムＱ２（ｎ２２−ｆ２２）台の前段部２２０−Ａからの入力の値が一致する、（条件５）全てのアクセラレータ１６（他のサーバ１）の前段部２２０−Ａから受信する、（条件６）設定された時間が経過する、という条件である。
【０２８２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０２８３】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２８４】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０２８５】
１  サーバ
１１  プロセッサ
１２  メモリ
１６  アクセラレータ
４０  ＰＡＸＯＳ合意部
１１０  送受信部
１３０  更新部
１４０  データ格納部
２１０  省プロセス１ステップ合意部
２２０  ２ステップ合意部
２５０  正常値選択部
２４０  組み合わせ部
２６０  衝突解決値選択装置
【図１】
2020115315.tif 000003
【図２】
2020115315.tif 000004
【図３】
2020115315.tif 000005
【図４】
2020115315.tif 000006
【図５】
2020115315.tif 000007
【図６】
2020115315.tif 000008
【図７】
2020115315.tif 000009
【図８】
2020115315.tif 000010
【図９】
2020115315.tif 000011
【図１０】
2020115315.tif 000012
【図１１】
2020115315.tif 000013
【図１２】
2020115315.tif 000014
【図１３】
2020115315.tif 000015
【図１４】
2020115315.tif 000016
【図１５】
2020115315.tif 000017
【図１６】
2020115315.tif 000018
【図１７】
2020115315.tif 000019
【図１８】
2020115315.tif 000020
【図１９】
2020115315.tif 000021
【図２０】
2020115315.tif 000022