(57)【要約】  プロセッサとメモリとストレージ装置を備えたサーバを複数有し、データを前記複数のサーバで受信して格納し、データを多重化するデータ管理システムであって、サーバは、多重化されたデータの一貫性を判定する第１の判定部と、多重化されたデータの一貫性を判定する際に、前記第１の判定部よりもサーバの許容故障数は大きいが、データの一貫性を判定するためにサーバ間の最小通信回数が多い第２の判定部と、第１の判定部または第２の判定部からデータの一貫性の判定結果を受け付けて、判定結果が一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する組み合わせ部と、組み合わせ部が出力したデータを格納するデータ格納部と、を備える。
2015186191.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリとストレージ装置を備えたサーバを複数有し、データを前記複数のサーバで受信して格納し、前記データを多重化して保持するデータ管理システムであって、
前記サーバは、
前記多重化された前記データの一貫性を判定する第１の判定部と、
前記多重化された前記データの一貫性を判定する際に、前記第１の判定部よりも前記サーバの許容故障数は大きいが、前記データの一貫性を判定するために前記サーバ間の最小通信回数が多い第２の判定部と、
前記第１の判定部または前記第２の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する組み合わせ部と、
前記組み合わせ部が出力した前記データを格納するデータ格納部と、
を備えることを特徴とするデータ管理システム。
【請求項２】
請求項１に記載のデータ管理システムであって、
前記第２の判定部は、
前記データの一貫性の判定を行って第１の判定結果を出力する前段判定部と、
他のサーバの前記前段判定部から前記第１の判定結果を受信し、複数の前記第１の判定結果から前記データの一貫性を判定し、第２の判定結果を出力する後段判定部と、を含み、
前記組み合わせ部は、
前記第１の判定部と第２の判定部の双方の判定結果が一貫性を保証できない場合には、前記第２の判定部の後段判定部で前記サーバの過半数から受信した第２の判定結果のうち部分一致しているデータを出力することを特徴とするデータ管理システム。
【請求項３】
請求項２に記載のデータ管理システムであって、
前記第１の判定部は、
全てのサーバの過半数から受信したデータに基づいて前記データの一貫性を判定し、
前記組み合わせ部は、
前記第２の判定部の後段判定部が前記サーバの過半数から受信した第２の判定結果のうち部分一致しているデータがない場合、前記第１の判定部が前記サーバから受信したデータのうち過半数が一致しているデータを出力することを特徴とするデータ管理システム。
【請求項４】
請求項３に記載のデータ管理システムであって、
前記組み合わせ部は、
前記第１の判定部が前記サーバから受信したデータのうち過半数が一致しているデータがない場合には、前記第１の判定部または第２の判定部から所定の解決値を取得し、当該解決値を出力することを特徴とするデータ管理システム。
【請求項５】
請求項２に記載のデータ管理システムであって、
ＰＡＸＯＳアルゴリズムを用いて前記データの一貫性の判定を行う第３の判定部をさらに有し、
前記組み合わせ部は、
前記第２の判定部の後段判定部で前記サーバの過半数から受信した第２の判定結果のうち部分一致しているデータがない場合には、前記第３の判定部の判定結果に基づくデータを出力することを特徴とするデータ管理システム。
【請求項６】
請求項５に記載のデータ管理システムであって、
前記第３の判定部が所定時間内に予め設定した回数を超えて実行された場合には、前記第１の判定部と第２の判定部の処理を実行せずに、前記第３の判定部が出力したデータを前記データ格納部で格納することを特徴とするデータ管理システム。
【請求項７】
請求項１に記載のデータ管理システムであって、
前記組み合わせ部は、
前記第１の判定部と第２の判定部の判定結果に優先順位を設定し、前記優先順位が上位の判定結果が取得できた場合には、優先順位が下位の判定結果を破棄し、前記優先順位が上位の判定結果でデータの一貫性を保証することを特徴とするデータ管理システム。
【請求項８】
請求項１に記載のデータ管理システムであって、
前記組み合わせ部は、
前記第１の判定部と第２の判定部の判定結果に優先順位を設定し、前記優先順位が最上位の判定結果が取得できない場合には、優先順位が下位の判定結果を利用してデータの一貫性を保証することを特徴とするデータ管理システム。
【請求項９】
プロセッサとメモリとストレージ装置を備えたサーバを複数有し、データを前記複数のサーバで受信して格納し、前記データを多重化して保持するデータ管理方法であって、
前記サーバが、前記多重化された前記データの一貫性を判定する第１の判定部で、前記受信したデータの一貫性を判定する第１のステップと、
前記サーバが、前記第１の判定部よりも前記サーバの許容故障数は大きいが、前記データの一貫性を判定するために前記サーバ間の最小通信回数が多い第２の判定部で、前記受信したデータの一貫性を判定する第２のステップと、
前記サーバが、前記第１の判定部または前記第２の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する第３のステップと、
前記サーバが、前記一貫性が保証されたデータを格納する第４のステップと、
を含むことを特徴とするデータ管理方法。
【請求項１０】
請求項９に記載のデータ管理方法であって、
前記第２の判定部は、
前記データの一貫性の判定を行って第１の判定結果を出力する前段判定部と、
他のサーバの前記前段判定部から前記第１の判定結果を受信し、複数の前記第１の判定結果から前記データの一貫性を判定し、第２の判定結果を出力する後段判定部と、を含み、
前記第３のステップは、
前記第１の判定部と第２の判定部の双方の判定結果が一貫性を保証できない場合には、前記第２の判定部の後段判定部で前記サーバの過半数から受信した第２の判定結果のうち部分一致しているデータを出力することを特徴とするデータ管理方法。
【請求項１１】
請求項１０に記載のデータ管理方法であって、
前記第１の判定部は、
全てのサーバの過半数から受信したデータに基づいて前記データの一貫性を判定し、
前記第３のステップは、
前記第２の判定部の後段判定部が前記サーバの過半数から受信した第２の判定結果のうち部分一致しているデータがない場合、前記第１の判定部が前記サーバから受信したデータのうち過半数が一致しているデータを出力することを特徴とするデータ管理方法。
【請求項１２】
請求項１１に記載のデータ管理方法であって、
前記第３のステップは、
前記第１の判定部が前記サーバから受信したデータのうち過半数が一致しているデータがない場合には、前記第１の判定部または第２の判定部から所定の解決値を取得し、当該解決値を出力することを特徴とするデータ管理方法。
【請求項１３】
請求項１０に記載のデータ管理方法であって、
前記サーバは、ＰＡＸＯＳアルゴリズムを用いて前記データの一貫性の判定を行う第３の判定部をさらに有し、
前記第３のステップは、
前記第２の判定部の後段判定部で前記サーバの過半数から受信した第２の判定結果のうち部分一致しているデータがない場合には、前記第３の判定部の判定結果に基づくデータを出力することを特徴とするデータ管理方法。
【請求項１４】
請求項１３に記載のデータ管理方法であって、
前記第３のステップは、
前記第３の判定部が所定時間内に予め設定した回数を超えて実行された場合には、前記第１の判定部と第２の判定部の処理を実行せずに、前記第３の判定部が出力したデータを格納することを特徴とするデータ管理方法。
【請求項１５】
請求項９に記載のデータ管理方法であって、
前記第３のステップは、
前記第１の判定部と第２の判定部の判定結果に優先順位を設定し、前記優先順位が上位の判定結果が取得できた場合には、優先順位が下位の判定結果を破棄し、前記優先順位が上位の判定結果でデータの一貫性を保証することを特徴とするデータ管理方法。
【請求項１６】
請求項９に記載のデータ管理方法であって、
前記第３のステップは、
前記第１の判定部と第２の判定部の判定結果に優先順位を設定し、前記優先順位が最上位の判定結果が取得できない場合、優先順位が下位の判定結果を利用してデータの一貫性を保証することを特徴とするデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを複数のサーバに格納して多重化し、可用性を確保する計算機システムに関する。
【背景技術】
【０００２】
インメモリ型分散ＫＶＳ（Key Value Store）等の分散データ管理システムでは、サーバに障害が発生したときにデータが消失するのを防止するため、データを複数のサーバに分散して格納し、可用性を確保している。【０００３】
データを複数のサーバに格納する多重化において、データの一貫性を保証するには、分散合意アルゴリズム（例えば、特許文献１）を利用する手法が知られている。特許文献１に開示されるＰａｘｏｓアルゴリズム（以下、ＰＡＸＯＳとする）では、オリジナルデータをマスタとしてマスタ計算機に格納し、複製したデータをスレーブとして扱い、複数のスレーブ計算機に格納する。【０００４】
ＰＡＸＯＳにおいて、多重化したデータの一貫性を保証するためには、データの複製数をｆとし、データを格納する計算機の数をプロセス数ｎとすると、
プロセス数ｎ＝２ｆ＋１
として表される。上記より、最低でも計算機（マスタとスレーブ）間で２回の通信が必要となり、許容故障数ｅはｎ／２未満である。なお、許容故障数ｅは、障害が発生しても最小通信回数（レイテンシー）を維持可能なプロセス（または計算機）の数である。また、レイテンシーは、クライアントがデータの更新（または参照）をマスタ計算機に要求してから、スレーブ計算機で合意に達する（データの一貫性を保証する）までの最小の通信回数δとする。【０００５】
Ｐａｘｏｓでは、スレーブを格納するスレーブ計算機の一部の故障や遅延は隠蔽できるが、マスタ計算機の故障または遅延を隠蔽できないので、常時低レイテンシーを求める分散データ管理システムでは障害発生時の通信回数の増大によるレイテンシーの増大が課題となる。【０００６】
そこで、マスタとスレーブの関係を排除し、各計算機にデータを送信し、各計算機が受信したデータを更に相互に送受信し、各計算機が相互に送受信したデータの値の同一性を判定することで、一貫性を保証しつつ、レイテンシーを確保する技術が提案されている（例えば、非特許文献１、２）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第５，２６１，０８５号明細書
【非特許文献】
【０００８】
【非特許文献１】Francisco Brasileiro, Fabiola Greve, Achour Mostefaoui, Michel Raynal著、Consensus In One Communication Step、“Parallel Computing Technologies”、Springer Berlin Heidelberg刊、２００１年発行、第42〜50頁
【非特許文献２】Michael Ben-Or著, Another Advantage of Free Choice: Completely Asynchronous Agreement Protocols (Extended Abstract)、PODC '83 Proceedings of the second annual ACM symposium on Principles of distributed computing、1983年発行、第２７〜３０頁
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記従来例の非特許文献１では、データの一貫性を保証したまま低レイテンシーを実現するために、Ｐａｘｏｓより必要なプロセス数を増やすことで実現している。このため、合意に至るまでの通信回数を低減できるものの、プロセス数がｎ＝３ｆ＋１と増大するのに加え、最小の通信回数を維持可能な許容故障数ｅはｎ／３未満に減少する、という問題があった。また、Ｐａｘｏｓでは、マスタ計算機の故障や遅延を隠蔽できない、という問題があった。【００１０】
そこで本発明は、上記問題点に鑑みて成されたもので、サーバ（またはプロセス数）の増大を抑制しながらも、データの更新（または参照）をサーバに要求してから、データの一貫性を保証するまでの通信回数を低減することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、プロセッサとメモリとストレージ装置を備えたサーバを複数有し、データを前記複数のサーバで受信して格納し、前記データを多重化して保持するデータ管理システムであって、前記サーバは、前記多重化された前記データの一貫性を判定する第１の判定部と、前記多重化された前記データの一貫性を判定する際に、前記第１の判定部よりも前記サーバの許容故障数は大きいが、前記データの一貫性を判定するために前記サーバ間の最小通信回数が多い第２の判定部と、前記第１の判定部または前記第２の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する組み合わせ部と、前記組み合わせ部が出力した前記データを格納するデータ格納部と、を備える。
【発明の効果】
【００１２】
本発明によれば、サーバ（プロセス数）の増大を抑制し、サーバの許容故障数の低減を抑制しながらも、データを受け付けてからデータの一貫性を保証するまでの通信回数を低減することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施例を示し、分散データ管理を行う計算機システムの一例を示すブロック図である。
【図２】本発明の第１の実施例を示し、サーバの一例を示すブロック図である。
【図３】本発明の第１の実施例を示し、サーバで行われる分散データ管理の一例を示すシーケンス図である。
【図４】本発明の第１の実施例を示し、アルゴリズム選択の優先順位を示す図である。
【図５】本発明の第１の実施例を示し、各アルゴリズムの性能を比較する図である。
【図６】本発明の第１の実施例を示し、各サーバで行われる処理の一例を示すフローチャートである。
【図７】本発明の第１の実施例を示し、図６のステップＳ４で行われる省プロセス１ステップ合意処理の一例を示すフローチャートである。
【図８】本発明の第１の実施例を示し、図６のステップＳ５で行われる２ステップ合意処理の一例を示すフローチャートである。
【図９】本発明の第１の実施例を示し、図６のステップＳ６で行われる組み合わせ処理の一例を示すフローチャートである。
【図１０】本発明の第２の実施例を示し、全順序による組み合わせ処理の一例を示すフローチャートである。
【図１１】本発明の第３の実施例を示し、半順序による各サーバの送受信部の一例を示すブロック図である。
【図１２】本発明の第３の実施例を示し、半順序による衝突解決の一例を示す計算機システムのブロック図である。
【図１３】本発明の第３の実施例を示し、組み合わせ部で行われる半順序処理の一例を示すフローチャートである。
【図１４】本発明の第３の実施例を示し、図１３の衝突解決で行われる処理の一例を示すフローチャートである。
【図１５】本発明の第１の実施例を示し、省プロセス１ステップ合意部の一例を示すブロック図である。
【図１６】本発明の第１の実施例を示し、２ステップ合意部の一例を示すブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施形態について添付図面を用いて説明する。
【実施例１】
【００１５】
図１は、分散データ管理を行う計算機システムの一例を示すブロック図である。サーバ１−１〜１−ｎはネットワーク２を介してクライアント３−１、３−２に接続される。サーバ１−１〜１−ｎは、クライアント３−１、３−２から受け付けたデータを分散して格納する分散データ管理システムを構成する。なお、以下の説明ではサーバ１−１〜１−ｎの総称を符号１で表し、クライアント３−１、３−２の総称を符号３で表す。【００１６】
図２は、サーバ１−１の構成の一例を示すブロック図である。なお、サーバ１−２〜１−ｎも同様の構成であるので、重複した説明は省略する。サーバ１−１は、演算を行うプロセッサ１１と、プログラムやデータを保持するメモリ１２と、データやプログラムを格納するストレージ装置１４と、ネットワーク２に接続されて通信を行うインターフェース１３と、を含む計算機である。【００１７】
メモリ１２には、インターフェース１３を介してデータの送受信を行う送受信部１１０と、受信したデータと他のサーバ１のデータの同一性（一貫性）を判定する更新部１３０と、更新部１３０が出力したデータを格納するデータ格納部１４０が保持される。なお、データ格納部１４０はストレージ装置１４に設定されてもよいし、ストレージ装置１４とメモリ１２の双方に設定されてもよい。【００１８】
更新部１３０は、受信したデータと他のサーバ１のデータの同一性を判定するために、省プロセス１−ステップ合意アルゴリズムを実行する省プロセス１ステップ合意部２１０と、２ステップ合意アルゴリズムを実行する２ステップ合意部２２０と、を含む低レイテンシー合意アルゴリズム実行部２００と、補助的な合意アルゴリズムとしてＰＡＸＯＳアルゴリズムを実行するＰＡＸＯＳ合意部２３０と、省プロセス１ステップ合意部２１０と２ステップ合意部２２０の出力を組み合わせて一貫性が保証された確定値を出力する組み合わせ部２４０が含まれる。【００１９】
送受信部１１０と、更新部１３０を構成する省プロセス１ステップ合意部２１０と、２ステップ合意部２２０と、ＰＡＸＯＳ合意部２３０と、組み合わせ部２４０の各機能部はプログラムとしてメモリ１２にロードされる。【００２０】
プロセッサ１１は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ１１は、送受信プログラムに従って処理することで送受信部１１０として機能し、組み合わせプログラムに従って処理することで組み合わせ部２４０として機能する。他のプログラムについても同様である。さらに、プロセッサ１１は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。【００２１】
サーバ１−１の各機能を実現するプログラム、テーブル等の情報は、ストレージ装置１４や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。【００２２】
送受信部１１０は、クライアント３からデータの更新要求を受信すると、当該サーバ１−１が受信したデータを他のサーバ１−２〜１−ｎへ送信する。その後、送受信部１１０は、全てのサーバ１−２〜１−ｎの半数から送信された更新要求のデータを受信し、受信したデータを更新部１３０へ送信し、更新部１３０がデータの同一性の判定を行う。【００２３】
そして、更新部１３０は、他のサーバ１のデータと一貫性が保証されたデータを出力し、データ格納部１４０へ書き込む。更新部１３０は、書き込みが完了するとクライアント３に更新完了の応答を送信し、更新処理を完了する。【００２４】
クライアント３の構成は、図示しないプロセッサと、メモリと、インターフェース及びストレージ装置を含む計算機である。クライアント３は、サーバ１に対してデータの登録、更新、参照を要求するアプリケーションを実行する。【００２５】
次に、更新部１３０の構成について説明する。更新部１３０には、上記したように送受信部１１０がクライアント３から受信したデータと、他のサーバ１が受信したクライアント３のデータが入力される。【００２６】
更新部１３０では、これらのデータを省プロセス１ステップ合意部２１０（第１の判定部）と、２ステップ合意部２２０（第２の判定部）へそれぞれ入力してデータの同一性（または一貫性）の判定を実行する。【００２７】
省プロセス１ステップ合意部２１０は、同一性の判定結果として確定値または推定値あるいは解決値を出力する。２ステップ合意部２２０は、同一性の判定結果として確定値または推定値あるいは解決値を出力する。組み合わせ部２４０はこれらの確定値または推定値、解決値を入力する。【００２８】
組み合わせ部２４０は、クライアント３から受信したデータと、他のサーバ１へ送信されたクライアント３のデータが同一であると判定した場合、入力されたデータについて一貫性を保証した確定値（合意値）としてデータ格納部１４０へ出力する。確定値は同一性（または一貫性）が保証されたデータであり、合意値は同一性について他のサーバ１との間で合意したデータで、サーバ１間で一貫性が保証される。【００２９】
一方、確定値が得られない場合、組み合わせ部２４０は推定値またはクライアント３から受け付けたデータ（解決値）をＰＡＸＯＳ合意部２３０（第３の判定部または補助合意部）へ入力し、他のサーバ１のＰＡＸＯＳ合意部２３０と通信を行って、確定値を演算する。そして、更新部１３０は、ＰＡＸＯＳ合意部２３０の確定値を取得し、当該確定値を合意値として出力する。【００３０】
更新部１３０は、組み合わせ部２４０またはＰＡＸＯＳ合意部２３０が出力した合意値をデータ格納部１４０へ格納し、データの更新が完了した応答をクライアント３−１へ送信する。【００３１】
＜省プロセス１ステップ合意部＞
図１５は、省プロセス１ステップ合意部２１０の一例を示すブロック図である。省プロセス１ステップ合意アルゴリズムによるデータの同一性（一貫性）の判定と、同一性が保証されない場合（以下、衝突とする）の解決手法は、前記非特許文献１の１ステップ合意アルゴリズムと同様で、次の通りである。
・データの同一性：確定値同士は必ず一致する。
・衝突の解決：確定値がいずれかのサーバ１に存在する可能性がある場合、推定値は必ず前記確定値と一致する。（確定値がいずれかのサーバ１に存在する可能性がある場合、確定値と一致する推定値が必ず存在し、解決値（推定値）となる）。それ以外の場合、解決値は入力データ（あるいは提案）の値の中の任意の一つと一致する。【００３２】
図１５は、図１のサーバ１−１〜１−５の各送受信部１１０を送受信部１〜５とし、サーバ１−１と１−５の更新部１３０を更新部１、５とした例を示す。図示の例では送受信部１〜４が、クライアント３からデータ「Ａ」を受信し、送受信部５が、クライアント３からデータ「Ｂ」を受信した例を示す。【００３３】
省プロセス１ステップ合意アルゴリズムを実行する省プロセス１ステップ合意部２１０では、送受信部１〜５を確定クォーラムと推定クォーラムの２つのクォーラムに分け、各クォーラムのデータの同一性を更新部１と更新部５の合意で求める例を示す。なお、クォーラムは、分散処理を実行する要素の部分集合を示す。【００３４】
次に、確定クォーラムを構成する送受信部１１０（サーバ１）の数をＱｅとし、推定クォーラムを構成する送受信部１１０（サーバ１）の数をＱｆとする。【００３５】
上述のデータの同一性の要件から、任意の確定クォーラム同士は互いに必ず重なる必要があり、Ｑｅ＞ｎ／２となる。なお、ｎは送受信部１１０（サーバ１）の総数である。【００３６】
また、上記衝突の解決の要件から、任意の確定クォーラムは、任意の推定クォーラムの過半数部分を包含する必要があり、Ｑｅ＋（Ｑｆ／２）＞ｎとなる。ここで、省プロセス１ステップ合意アルゴリズムの目的は、Ｑｆ＞ｎ／２とすることであるので、これを満たすクォーラムサイズは、
Ｑｅ≧（３／４）ｎ  となる最小の整数Ｑｅ
Ｑｆ＞ｎ／２  となる最小の整数Ｑｆ
となる。なお、過半数はｎ／２より大きい最小の整数とする。【００３７】
確定値と推定値の決定方法は、次の通りである。
・確定クォーラム内で、全てのデータの値が一致すればその値を確定値に出力し、そうでなければ空、を確定値に出力。
・確定クォーラムが存在することが判定できない場合、確定値には何も出力されない。
・推定クォーラム内で、ある過半数部分以上のデータの値が一致すればその値を推定値に出力し、そうでなければ空を推定値に出力。【００３８】
衝突が発生した際の解決値の決定方法は、１ステップ合意アルゴリズムと同様で、次の通りである。
・推定値が空でなければ推定値を解決値として出力し、空であれば入力されたデータの中の任意の一つを解決値とする。なお、解決値や推定値について他の更新部１３０とＰＡＸＯＳ合意を実施することで、同一性を確保することができる。【００３９】
なお、図示の例では、送受信部１を含むクォーラムの処理をサーバ１の更新部１で実行する例を示したが、他のサーバ１−ｎの更新部ｎで処理を実行してもよい。【００４０】
＜２ステップ合意部＞
図１６は、２ステップ合意部２２０の一例を示すブロック図である。２ステップ合意アルゴリズムによるデータの同一性の判定と、同一性が保証されない衝突の解決手法は、上述の省プロセス１ステップ合意アルゴリズム（及び１ステップ合意アルゴリズム）と同様である。【００４１】
図１６は、図１のサーバ１−１〜１−５の各送受信部１１０を送受信部１〜５とし、サーバ１−１と１−５の更新部１３０を更新部１、５とする。また、図１６では、図１に示した２ステップ合意部２２０を前段部２２０−Ａと後段部２２０−Ｂに分割し、サーバ１−１〜１−５の前段部２２０−Ａを前段部１〜５とし、サーバ１−１とサーバ１−５の後段部２２０−Ｂを後段部１と後段部５として表示した。なお、図１６においては、サーバ１−１の後段部１と、サーバ１−５の後段部５で合意値を決定する例を示す。また、図１６の例では送受信部１〜４が、クライアント３からデータ「Ａ」を受信し、送受信部５が、クライアント３からデータ「Ｂ」を受信した例を示す。【００４２】
２ステップ合意アルゴリズムを実行する２ステップ合意部２２０では、送受信部１〜５を複数の選択クォーラムに分け、前段部１〜５を２つの計数クォーラムに分けて、更新部１、５で処理を行う例を示す。なお、図示は省略するが、前段部２の入力は送受信部２、３、４の選択クォーラムが受信したデータであり、前段部３の入力は送受信部１、３、４が受信したデータであり、前段部４の入力は送受信部１、２、４が受信したデータである。【００４３】
次に、送受信部１〜５の選択クォーラムと、前段部１〜５の計数クォーラムは、次のように設定する。【００４４】
上記データの同一性の要件から、任意の選択クォーラム同士は互いに必ず重なる必要があり、過半数以上必要である。従って、選択クォーラムのサイズはｎ／２を超える最小の整数となる。【００４５】
また、上記衝突の解決の要件から、任意の計数クォーラム同士は互いに必ず重なる必要があり、過半数以上必要である。従って、計数クォーラムのサイズはｎ／２を超える最小の整数となる。【００４６】
クライアント３−１からデータを受信すると２ステップ合意部２２０の前段部１〜５は、各選択クォーラム毎に前段部１〜５へ受信したデータを送信する。【００４７】
前段部１〜５では、受信した選択クォーラム内のデータの値が、全て一致すれば、選択値として決定する。一方、それ以外の場合は、選択値を空とする。【００４８】
次に、後段部１、５における確定値と推定値の決定方法は次の通りである。
・計数クォーラム内で、全てのデータが一致すれば、その値を確定値に出力する。
・計数クォーラム内で、空でないデータが存在すればその値を推定値とし、そうでなければ空を推定値として出力する。【００４９】
解決値の決定方法 は、１ステップ合意と同様であり、推定値が空でなければ推定値、空であれば入力されたデータの中の任意の一つ、とする。なお、解決値や推定値について他の更新部１３０とＰＡＸＯＳ合意を実施することで、同一性を確保することができる。【００５０】
＜処理の概要＞
図３は、本発明のサーバ１で行われる分散データ管理の一例を示すシーケンス図である。図示の例ではクライアント３−１がデータＡの更新要求をサーバ１−１〜１−ｎへマルチキャストで送信する例を示す。なお、クライアント３−１から各サーバ１へのマルチキャストによる送信は、図示しない管理計算機などが行っても良い。【００５１】
各サーバ１の送受信部１１０は、クライアント３−１から受信したデータを他のサーバ１へマルチキャストで送信する（図中Ｍ２）。サーバ１は、全てのサーバ１の半数から受信したデータを更新部１３０へ送信し、同一性の判定を行う。【００５２】
更新部１３０は、図１５に示した確定クォーラム（または推定クォーラム）のデータを省プロセス１ステップ合意部（図３のＳＰ１−ＳＴＥＰ）２１０へ入力する。また、更新部１３０は、図１６に示した選択クォーラム（または計数クォーラム）のデータを２ステップ合意部２２０へ入力する。【００５３】
省プロセス１ステップ合意部２１０では、入力されたデータのうち３／４が全て一致した場合（確定クォーラムから入力されたデータが全て一致した場合）、当該データを確定した値（確定値）とする。また、省プロセス１ステップ合意部２１０は、入力されたデータの１／２で、過半数のデータが一致した場合、すなわち推定クォーラムから入力されたデータのうち過半数のデータが一致した場合、当該データを推定値とする。一方、上記以外の場合には、クライアント３から受信したデータ等の任意の入力値を解決値として出力する。【００５４】
次に、２ステップ合意部２２０では、前段部２２０−Ａ（図３の２−ＳＴＥＰ（１））選択クォーラムのデータから確定値、推定値または解決値を演算し、計数クォーラム毎に後段部２２０−Ｂ（図３の２−ＳＴＥＰ（２））へ送信する（Ｍ３）。【００５５】
後段部２２０−Ｂでは、計数クォーラムから入力されたデータが全て一致した場合、当該データを確定値として出力する。また、後段部２２０−Ｂは、計数クォーラムから入力されたデータが部分一致した場合、当該データを推定値とする。一方、上記以外の場合には、クライアント３から受信したデータ等の任意の入力値を解決値として出力する。【００５６】
次に、更新部１３０では、省プロセス１ステップ合意部２１０と２ステップ合意部２２０の出力が組み合わせ部２４０へ入力される。組み合わせ部２４０は、図４に示すように予め設定された優先順位に従って省プロセス１ステップ合意部２１０または２ステップ合意部２２０の出力を選択する。なお、図４は、合意のアルゴリズムを選択する優先順位を示す図である。図４は、優先順位２４０１と、選択する内容を記載した特徴２４０２からひとつのエントリが構成される。この優先順位は、条件設定部１２０に保持される。【００５７】
まず、組み合わせ部２４０は、第１の優先順位として、省プロセス１ステップ合意部２１０の確定値または２ステップ合意部２２０の確定値のいずれかを合意値（合意確定値）として選択する。【００５８】
なお、省プロセス１ステップ合意部２１０の確定値は、サーバ１の３／４（確定クォーラム）から受信したデータが一致した値である。また、２ステップ合意部２２０の確定値は、後段部２２０−Ｂがサーバ１の１／２（計数クォーラム）から受信したデータが一致した値である。【００５９】
組み合わせ部２４０は、第２の優先順位として、２ステップ合意部２２０の推定値を選択する。この推定値は、２ステップ合意部２２０の後段部２２０−Ｂがサーバ１の１／２から受信したデータのうち部分一致した値（計数クォーラムから受信したデータのうち部分一致した値）である。【００６０】
また、組み合わせ部２４０は、第３優先順位として、省プロセス１ステップ合意部２１０の推定値を選択する。この推定値は、省プロセス１ステップ合意部２１０がサーバ１の１／２から受信したデータのうち過半数が一致した値（推定クォーラムから受信したデータのうち過半数が一致した値）である。【００６１】
組み合わせ部２４０は、第４優先順位として、省プロセス１ステップ合意部２１０または２ステップ合意部２２０のいずれかの解決値を選択する。【００６２】
組み合わせ部２４０は、図４の優先順位に従って省プロセス１ステップ合意部２１０または２ステップ合意部２２０の出力を選択した後、選択したデータが確定値であればそのまま出力する。【００６３】
一方、組み合わせ部２４０は、推定値または解決値を選択した場合には、他のサーバ１との間で合意を行う必要がある。このため、組み合わせ部２４０は選択した推定値または解決値をＰＡＸＯＳ合意部２３０へ入力して他のサーバ１との間でデータの合意値を決定する。【００６４】
そして、更新部１３０は、組み合わせ部２４０から出力された合意値またはＰＡＸＯＳ合意部２３０から出力された合意値を、各サーバ１との間で同一性が保証されたデータとしてデータ格納部１４０へ格納する。また、更新部１３０は、データの格納が完了したことをクライアント３−１へ応答する。【００６５】
このように、本発明では、省プロセス１ステップ合意部２１０と２ステップ合意部２２０の２つの合意アルゴリズムを組み合わせ、さらに、これら２つの合意アルゴリズムから確定値が得られないときにはＰＡＸＯＳ合意部２３０によって合意値を得る。これにより、プロセス数（または計算機数）の増大を抑制しながらも、クライアント３がデータの更新（または参照）をサーバ１に要求してから、サーバ１で合意に達するまでの最小の通信回数を低減することができる。【００６６】
図５は、各合意アルゴリズムの性能を比較する図である。図５では、合意のアルゴリズムの名称３００１と、データの一貫性を保証するために必要なデータを格納する計算機の数を示すプロセス数ｎ３００２と、クライアント３からサーバ１間で合意を得るまでの最小通信回数を維持可能な許容故障数ｅ３００３と、クライアント３からサーバ１間で合意するまでの最小通信回数δ３００４からひとつのエントリが構成される。【００６７】
まず、必要なプロセス数３００２は、データの一貫性を保証するためのデータの複製数をｆとし、データを格納する計算機の数をプロセス数ｎとしたもので、前記従来例に示した１ステップ合意アルゴリズムが最大のｎ＝３ｆ＋１となる。【００６８】
次に、最小通信回数δを維持可能な許容故障数ｅ３００３は、ＰＡＸＯＳと２ステップがｅ＜ｎ／２と最大であり、最も可用性が高い。これに対して省プロセス１ステップは、ｅ≦ｎ／４と最小となる、最も可用性が低い。また、１ステップの許容故障数ｅ３００３は、省プロセス１ステップよりも大となるが、ＰＡＸＯＳと２ステップの許容故障数ｅよりは小さい。【００６９】
次に、最小通信回数δは、クライアント３の要求からサーバ１間での合意に至るまでの通信回数で、省プロセス１ステップと１ステップが最小でδ＝２となる。これは、図３で示したように、クライアント３−１からデータの更新要求で１回の通信となり、各サーバ１の送受信部１１０は受信したデータを他のサーバ１へ送信することで２回の通信となる（Ｍ２）。そして、省プロセス１ステップ合意部２１０（または１ステップ）で、確定値が得られれば合計２回の通信でサーバ１間の合意値を得られることができる。【００７０】
一方、２ステップでは、上記サーバ１間での通信（Ｍ２）の後、前段部２２０−Ａの結果を各後段部２２０−Ｂへ送信するため、最低でも３回の通信が必要となる。ＰＡＸＯＳでも同様に最低でも３回の通信が必要となる。【００７１】
本発明では、省プロセス１ステップ合意部２１０と、２ステップ合意部２２０を組み合わせることで、必要なプロセス数ｎ３００２は、１ステップよりも少なく、ＰＡＸＯＳと同等のｎ＝２ｆ＋１で、許容故障数ｅは、ＰＡＸＯＳと同等のｅ＜ｎ／２で１ステップよりも可用性が高く、かつ最小通信回数δは、ＰＡＸＯＳよりも小さく、１ステップと同等の２回となる。【００７２】
これにより、本発明では、１ステップよりも計算機資源（プロセス数ｎ）を低減しながら、ＰＡＸＯＳと同等の許容故障数ｅを維持し、さらには、１ステップと同等の最小通信回数δを確保できる。これにより、分散データ管理システムの可用性を確保しながらレイテンシー（最小通信回数δ）を削減し、かつ、計算機資源が増大するのを抑制することができるのである。【００７３】
＜処理の詳細＞
図６は、各サーバで行われる処理の一例を示すフローチャートである。この処理は、クライアント３からデータの更新要求（または参照要求や登録要求）を受信したときに実行される。【００７４】
まず、サーバ１は、クライアント３からマルチキャストで送信された更新要求に含まれるデータを受信する（Ｓ１）。次にサーバ１は、受信したデータを他のサーバ１へマルチキャストで送信する（Ｓ２）。サーバ１は、全てのサーバ１の半数からクライアント３が送信したデータを受信する（Ｓ３）。【００７５】
次に、サーバ１は、ステップＳ３で受信した全てのサーバ１の半数からのデータを、ステップＳ４の省プロセス１ステップ合意処理と、ステップＳ５の２ステップ合意処理へそれぞれ入力する。ステップＳ４では、上述した省プロセス１ステップ合意部２１０の処理が図７で示すように実行される。ステップＳ５では、上述した２ステップ合意部２２０の処理が図８で示すように実行される。なお、図示の例では、省プロセス１ステップ合意処理（Ｓ４）と２ステップ合意処理（Ｓ５）を並列して実行する例を示すが、順次実行しても良い。【００７６】
ステップＳ６では、上述した組み合わせ部２４０の処理が図９で示すように実行される。ステップＳ７では、サーバ１の更新部１３０が、省プロセス１ステップ合意処理または２ステップ合意処理の何れかから確定値が出力され、合意が確定したか否かを判定する。合意が確定していればステップＳ８へ進んで、組み合わせ部２４０が出力した確定値を合意値に決定する。【００７７】
一方、ステップＳ７の判定で合意が確定していなければ、更新部１３０は、ステップＳ９へ進んで、組み合わせ部２４０が出力した推定値または解決値をＰＡＸＯＳ合意部２３０へ入力し、サーバ１間での合意処理を実行させる。ステップＳ１０では、更新部１３０がＰＡＸＯＳ合意部２３０から出力を受け付け、合意値として決定する。【００７８】
この後、更新部１３０は、ステップＳ８またはステップＳ１０で決定した合意値をデータ格納部１４０へ格納し、クライアント３へ更新が完了したことを応答する。【００７９】
図７は、図６のステップＳ４で行われる省プロセス１ステップ合意処理の一例を示すフローチャートである。この処理は、更新部１３０の省プロセス１ステップ合意部２１０で実行される。【００８０】
更新部１３０は、全サーバ１の１／２台（推定クォーラム）からデータを受信するまで待機する（Ｓ１１）。更新部１３０は、推定クォーラムを構成する全サーバ１の１／２台からデータを受信すると、これらのデータが全て一致したか否かを判定する（Ｓ１２）。全てのデータが一致した場合にはステップＳ１３へ進み、そうでない場合にはステップＳ１６へ進む。【００８１】
ステップＳ１３では、更新部１３０が、全サーバ１の３／４台（確定クォーラム）からデータを受信するまで待機する。更新部１３０は、確定クォーラムを構成する全サーバ１の３／４台からデータを受信すると、これらのデータが全て一致したか否かを判定する（Ｓ１４）。全てのデータが一致した場合にはステップＳ１５へ進み、そうでない場合にはステップＳ１７へ進む。【００８２】
ステップＳ１５では、推定クォーラムの全てのデータと、確定クォーラムの全てのデータが一致したので、更新部１３０は、受信したデータを確定値として決定する。【００８３】
一方、ステップＳ１２の判定で、全てのデータが一致しない場合のステップＳ１６では、更新部１３０が過半数のデータが当該サーバ１で受信したデータと一致したか否かを判定する。過半数のデータが一致していればステップＳ１７へ進み、そうでない場合にはステップＳ１８へ進む。【００８４】
ステップＳ１７では、更新部１３０が、過半数が一致したデータを推定値として決定する。一方、推定クォーラムで過半数のデータが一致しない場合、更新部１３０は、ステップＳ１８でデータを予め設定した解決値として決定する。なお、解決値は、当該サーバ１が受信したデータ等を用いることができる。【００８５】
次に、ステップＳ１９で、更新部１３０は、上記ステップＳ１５、Ｓ１７、Ｓ１８の何れかで決定したデータを組み合わせ部２４０へ出力する。【００８６】
上記処理により、省プロセス１ステップ合意アルゴリズムによる推定クォーラムと確定クォーラムが受信したデータに基づいて、更新部１３０は確定値または推定値を得ることができる。【００８７】
図８は、図６のステップＳ５で行われる２ステップ合意処理の一例を示すフローチャートである。この処理は、更新部１３０の２ステップ合意部２２０で実行される。【００８８】
更新部１３０は、全サーバ１の１／２台（選択クォーラム）から前段部２２０−Ａがデータを受信するまで待機する（Ｓ２１）。更新部１３０は、選択クォーラムを構成する全サーバ１の１／２台からデータを受信すると、当該サーバ１が受信したデータと、これらのデータが全て一致したか否かを判定する（Ｓ２２）。全てのデータが一致した場合にはステップＳ２３へ進み、そうでない場合にはステップＳ２４へ進む。【００８９】
ステップＳ２３では、前段部２２０−Ａが他のサーバ１から受信したデータを、各サーバ１の後段部２２０−Ｂへ送信する。一方、選択クォーラムの全てのデータが一致しなかったステップＳ２４では、前段部２２０−Ａが各サーバ１の後段部２２０−Ｂへ空のデータを送信する。【００９０】
次に、ステップＳ２５では、全サーバ１の１／２台（計数クォーラム）から後段部２２０−Ｂがデータを受信するまで待機する（Ｓ２５）。更新部１３０は、計数クォーラムを構成する全サーバ１の１／２台からデータを受信すると、当該サーバ１が受信したデータと、これらのデータが全て一致したか否かを判定する（Ｓ２６）。全てのデータが一致した場合にはステップＳ２７へ進み、そうでない場合にはステップＳ２８へ進む。【００９１】
ステップＳ２８では、後段部２２０−Ｂが受信したデータは全て空のデータであるか否かを判定する。更新部１３０は、後段部２２０−Ｂが受信したデータが全て空でない場合には、ステップＳ２９へ進んで、いずれかのデータを推定値として決定する。【００９２】
一方、後段部２２０−Ｂが受信したデータが全て空の場合には、ステップＳ３０へ進んで、データは予め設定した解決値として決定する。なお、解決値は、当該サーバ１が受信したデータ等を用いることができる。【００９３】
次に、ステップＳ３１で、更新部１３０は、上記ステップＳ２７、Ｓ２９、Ｓ３０の何れかで決定したデータを組み合わせ部２４０へ出力する。【００９４】
上記処理により、２ステップ合意アルゴリズムによる選択クォーラムと計数クォーラムが受信したデータに基づいて、更新部１３０は確定値または推定値を得ることができる。【００９５】
図９は、図６のステップＳ６で行われる組み合わせ部２４０の処理の一例を示すフローチャートである。【００９６】
まず、組み合わせ部２４０は、省プロセス１ステップ合意処理（Ｓ４）と２ステップ合意処理（Ｓ５）の出力を受け付ける（Ｓ４１）。組み合わせ部２４０は、省プロセス１ステップ合意処理の出力と、２ステップ合意処理（Ｓ５）の出力の何れかに確定値があるか否かを判定する（Ｓ４２）。何れかの出力に確定値が存在する場合にはステップＳ４３へ進み、そうでない場合にはステップＳ４５へ進む。【００９７】
ステップＳ４３で、組み合わせ部２４０は省プロセス１ステップ合意処理と２ステップ合意処理の何れかの出力から確定値を選択する。次に、ステップＳ４４では、組み合わせ部２４０が選択した確定値を合意値とする。【００９８】
ステップＳ４５で、組み合わせ部２４０は２ステップ合意処理の出力に推定値が存在するか否かを判定する。推定値が存在する場合には、ステップＳ４６へ進み、そうでない場合にはステップＳ４７へ進む。【００９９】
ステップＳ４６で、組み合わせ部２４０は、２ステップ合意処理の推定値を選択してステップＳ５０に進む。【０１００】
ステップＳ４７で、組み合わせ部２４０は、省プロセス１ステップ合意（図中Ｓ１−ＳＴＥＰ）処理の出力に推定値が存在するか否かを判定する。推定値が存在する場合には、ステップＳ４８へ進み、そうでない場合にはステップＳ４９へ進む。【０１０１】
ステップＳ４８で、組み合わせ部２４０は、省プロセス１ステップ合意処理の推定値を選択してステップＳ５０に進む。一方、ステップＳ４９では、組み合わせ部２４０が解決値を選択してステップＳ５０に進む。ここで、解決値は、組み合わせ部２４０で予め設定された値や、送受信部１１０で受け付けた値などを用いればよい。【０１０２】
次に、ステップＳ５０では、ステップＳ４６、Ｓ４５、Ｓ４９の何れかで組み合わせ部２４０が選択した値をＰＡＸＯＳ合意部２３０へ入力する。ステップＳ５１では、ＰＡＸＯＳ合意部２３０が他のサーバ１との間で合意値を演算して出力する。なお、ＰＡＸＯＳ合意部２３０については、前記従来例の特許文献１等と同様であるのでここでは詳述しない。そして、ステップＳ５２では、組み合わせ部２４０がＰＡＸＯＳ合意部２３０の確定値を合意値とする。【０１０３】
そして、ステップＳ５３では、上記ステップＳ４４、Ｓ５２の何れか一方で得られた合意値を組み合わせ部２４０が出力する。【０１０４】
上記処理によって、更新部１３０の組み合わせ部２４０では、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の何れかの確定値を合意値とすることができる。また、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の双方で確定値が得られない場合には、推定値または解決値を入力としてＰＡＸＯＳ合意部２３０から合意値をえることができる。【０１０５】
以上のように本実施例１では、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせ、さらに補助合意部としてＰＡＸＯＳ合意部２３０を採用することで、上述のように、必要なプロセス数ｎを１ステップ合意アルゴリズムよりも少なく、ＰＡＸＯＳと同等の値とすることができる。さらに、本発明の許容故障数ｅは、ＰＡＸＯＳと同等のｅ＜ｎ／２を維持し、かつ最小通信回数δは、ＰＡＸＯＳよりも小さく、１ステップ合意アルゴリズムと同等の２回となる。したがって、１ステップ合意アルゴリズムよりも計算機資源（プロセス数ｎ）を低減しながら、ＰＡＸＯＳと同等の許容故障数ｅを維持し、さらには、１ステップ合意アルゴリズムと同等の最小通信回数δを確保できる。これにより、分散データ管理システムの可用性を確保しながらレイテンシー（最小通信回数）を削減し、かつ、計算機資源が増大するのを抑制することができるのである。また、本発明ではＰＡＸＯＳのようにマスタ計算機を必要としないため、マスタ計算機の故障や遅延による影響を受けることがない。【０１０６】
なお、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の双方から確定値が出力されない場合には、ＰＡＸＯＳ合意部２３０で合意値を演算することになるが、ＰＡＸＯＳ合意部２３０が頻繁に実行されるとレイテンシーが増大する。【０１０７】
この場合、単位時間（例えば、１０秒ないし１分）内で所定の回数を超えてＰＡＸＯＳ合意部２３０を実行する場合、更新部１３０は省プロセス１ステップ合意部２１０及び２ステップ合意部２２０を実行せずにＰＡＸＯＳ合意部２３０のみで合意値を算出するようにしてもよい。この状況で更新部１３０は、省プロセス１ステップ合意部２１０及び２ステップ合意部２２０の実行を停止しても良いし、省プロセス１ステップ合意部２１０及び２ステップ合意部２２０へのデータの入力を停止してもよい。
【実施例２】
【０１０８】
図１０は、第２の実施例を示し、クライアント３からのデータを全順序で処理する場合に組み合わせ部２４０で行われる処理の一例を示すフローチャートである。本実施例２は、前記実施例１の組み合わせ部２４０の処理を変更したもので、その他の構成は前記実施例１と同様である。【０１０９】
全順序は、各送受信部１１０が受信したデータをその都度比較することを示す。そして、本実施例２では、優先順位が上位のデータが入手できると、優先順位が下位のデータを破棄し、優先順位が上位のデータのみを利用してデータの一貫性を保証する。図１０の処理は、前記第１の実施例の図６に示したステップＳ６の組み合わせ部の処理で実行される。【０１１０】
組み合わせ部２４０は、ステップＳ６１で、省プロセス１ステップ合意処理（図中Ｓ１−ＳＴＥＰ）または２ステップ合意処理（図中２−ＳＴＥＰ）の何れかの出力結果が入力されるまで待機する。【０１１１】
組み合わせ部２４０は、出力結果が入力されると、当該出力結果が確定値で、かつ優先順位の高い省プロセス１ステップ合意処理の出力であるか否かを判定する（Ｓ６２）。組み合わせ部２４０は、優先順位の高い省プロセス１ステップ合意処理からの確定値であれば合意が確定したと判定してステップＳ７０に進む。一方、組み合わせ部２４０は、優先順位の低い２ステップ合意の確定値や、推定値などの確定値以外の場合にはステップＳ６３へ進んで、他方の出力結果が入力されるまで待機する（Ｓ６３）。【０１１２】
組み合わせ部２４０は、他方の出力結果を受け付けると、確定値であるか否かを判定する（Ｓ６４）。受け付けた出力結果が確定値であれば、２ステップ合意処理と省プロセス１ステップ合意処理（第１の優先順位）のそれぞれから確定値が入力されたので、組み合わせ部２４０は、合意が確定したと判定してステップＳ７０に進む。ステップＳ７０では、組み合わせ部２４０が、ステップＳ６２、Ｓ６４で合意が確定した確定値を合意値として出力する。一方、組み合わせ部２４０は、入力された出力結果が確定値でない場合にはステップＳ６５へ進む。【０１１３】
ステップＳ６５では、組み合わせ部２４０が、２ステップ合意処理の出力結果を参照し、ステップＳ６６で、推定値であるか否かを判定する。組み合わせ部２４０は、出力結果が第２の優先順位である２ステップ合意処理の推定値であれば、ステップＳ７１へ進んで当該推定値をＰＡＸＯＳ合意部２３０へ入力する。一方、出力結果が２ステップ合意処理の推定値でない場合には、ステップＳ６７へ進む。【０１１４】
ステップＳ６７では、組み合わせ部２４０が、省プロセス１ステップ合意処理の出力結果を参照し、ステップＳ６８で、推定値であるか否かを判定する。組み合わせ部２４０は、出力結果が第３の優先順位である省プロセス１ステップ合意処理の推定値であれば、ステップＳ７１へ進んで当該推定値をＰＡＸＯＳ合意部２３０へ入力する。一方、出力結果が省プロセス１ステップ合意処理の推定値でない場合には、ステップＳ６９へ進む。【０１１５】
ステップＳ６９では、組み合わせ部２４０が、省プロセス１ステップ合意処理の入力または２ステップ合意処理の入力（クライアント３からの入力または他のサーバ１の前段部２２０−Ａからの入力）を参照し、何れか一方の入力を選択する。そして、ステップＳ７１では、組み合わせ部２４０が、上記ステップＳ６６、Ｓ６８で参照した推定値または、ステップＳ６９で選択した入力をＰＡＸＯＳ合意部２３０へ入力し、各サーバ１との間で合意値を演算させる。そして、ステップＳ７２では、ＰＡＸＯＳ合意部２３０からの出力を合意値として出力する。【０１１６】
前記第１の実施例では、省プロセス１ステップ合意処理と２ステップ合意処理の双方の出力を受け付ける例を示したが、本実施例２では、省プロセス１ステップ合意処理と２ステップ合意の出力の何れか一方を受け付けたときに実行する。【０１１７】
この場合、他のサーバ１との通信回数が少ない省プロセス１ステップ合意処理で確定値が得られれば、この確定値を合意値とすることで、２ステップ合意処理を待たずに処理を完了することができ、処理の高速化を実現できる。【０１１８】
換言すれば、更新部１３０では、確定値（判定結果）に優先順位を設定しておき、優先順位が上位の確定値が取得できると、優先順位が下位の判定結果を破棄する。そして、更新部１３０は優先順位が上位の確定値のみで、データの一貫性を保証する。
【実施例３】
【０１１９】
図１１〜図１４は、本発明の第３の実施例を示し、クライアント３からのデータを半順序で処理する例を示す。【０１２０】
図１１は、本発明の第３の実施例を示し、クライアント３からのデータを半順序で処理する場合、各サーバ１の送受信部１１０で受け付けたデータの一例を示すブロック図である。【０１２１】
図１１において、送受信部１〜ｎ（１１０−１〜１１０−ｎ）は、サーバ１−１〜１−ｎの構成要素であり、各送受信部１１０は、複数のデータを到着順で格納可能なバッファ１１５を有する。その他の構成は、前記第１の実施例と同様である。なお、図１１の更新部１３０−１、１３０−２は、サーバ１−１、１−２の構成要素である。【０１２２】
ここで半順序処理は、入力されたデータが順序を交換可能であれば、各送受信部１１０が更新部１３０へ異なる順序でデータを配送しても、更新部１３０では入力されたデータを処理した最終的な結果が、すべてのサーバ１の更新部１３０で同じとなる。本実施例３は、データの順序を交換することでデータが一致する場合には、送受信部１１０が更新部１３０へ送信するデータの順序を変更することで、各サーバ１の更新部１３０のデータを一致させることで、衝突（データの不一致）の発生を低減させるものである。【０１２３】
半順序処理は、クライアント３−１がマルチキャストで送信した一組のデータではなく、サーバ１の送受信部１１０が順序を交換可能なデータを受信している限り、バッファ１１５内のすべてのデータの中からクォーラムの個数（図示の例では５個）が一致するデータを確定値として更新部１３０へ送信する順序を決定する。半順序処理では、順序が交換可能でないデータを受信した場合に衝突の解決を行う。【０１２４】
図１１以後の図においては、同一の文字の大文字と小文字のデータ同士は順序を交換不可であり、それ以外は順序を交換可能として記述する。例えば、データＡとデータａは順序の交換が不可であり、データＡとデータＢ及びデータＡとデータｂは順序の交換が可能である。【０１２５】
図１２は、半順序処理でデータの衝突を解決する計算機システムの一例を示すブロック図である。図１２は、省プロセス１ステップ合意部２１０と２ステップ合意部２２０（前段部２２０−Ａ及び後段部２２０−Ｂ）及び組み合わせ部２４０で半順序処理を適用し、データの衝突の解決を行う例を示す。【０１２６】
図１２において、送受信部１１０−１〜１１０−５、前段部１〜５（２２０Ａ）は、サーバ１〜５の構成要素を示し、サーバ１とサーバ５の更新部１３０−１、１３０−５で合意を行う例を示す。なお、送受信部１１０−１〜１１０−５は、上述のように複数のデータを入力順で保持するバッファ１１５をそれぞれ有する。【０１２７】
送受信部１１０−１、１１０−２のバッファ１１５には、データ「Ｃ」、「Ｂ」、「Ａ」が保持され、送受信部１１０−３のバッファ１１５には、データ「Ｃ」、「Ａ」、「ｂ」が保持され、送受信部１１０−４のバッファ１１５には、データ「Ｃ」、「ｂ」、「ａ」が保持され、送受信部１１０−５のバッファ１１５には、データ「Ａ」、「ａ」が保持される。【０１２８】
上記では、送受信部１１０−１、１０１−２のバッファ１１５のデータは同一であり、送受信部１１０−３〜１１０−５のバッファ１１５では、データ「Ａ」、「Ｃ」、「ａ」、「ｂ」が衝突する。【０１２９】
この例では、サーバ１の省プロセス１ステップ合意部２１０の推定値は、「Ｃ」、「Ｂ」、「Ａ」となり、２ステップ合意部２２０の推定値は「Ｃ」、「Ａ」となる。同様に、サーバ５の省プロセス１ステップ合意部２１０の推定値は、「Ｃ」、「ａ」、「ｂ」となり、２ステップ合意部２２０の推定値は「Ｃ」、「Ａ」となる。【０１３０】
衝突の解決では、２ステップ合意部２２０の推定値（以下、２ステップ（図中２−ＳＴＥＰ）推定値とする）と省プロセス１ステップ合意部２１０の推定値（以下、１ステップ（図中Ｓ１−ＳＴＥＰ）推定値とする）をそれぞれ決定する。そして、後述するように、２ステップ推定値と１ステップ推定値の順に組み合わせ部２４０へ出力する。【０１３１】
組み合わせ部２４０では、入力された２ステップ推定値と１ステップ推定値を結合し、結合した推定値を補助合意部であるＰＡＸＯＳ合意部２３０へ入力し、他のサーバ１と合意を行う。【０１３２】
更新部１３０は、ＰＡＸＯＳ合意部２３０の出力である合意の結果を、再度、２ステップ推定値と１ステップ推定値に分離し、この順に各更新部１３０へ出力する。【０１３３】
２ステップ推定値と１ステップ推定値の順序に従わないで出力すると、１ステップ推定値が先に送信される可能性があり、更新部１３０−１にデータＡが送信済みであるにもかかわらず、更新部１３０−５にデータＡと順序を交換できないデータａが先に送信され、データの一貫性を失うことになる。【０１３４】
そこで、本発明では上述のように衝突が発生した場合には、２ステップ推定値の次に１ステップ推定値を決定し、これらを結合した推定値でＰＡＸＯＳ合意（補助合意）を行い、ＰＡＸＯＳ合意の結果を再度、２ステップ推定値と、１ステップ推定値に分離し、この順序で出力する。【０１３５】
以上の処理により、省プロセス１ステップ合意部２１０と２ステップ合意部２２０を組み合わせて半順序処理を行う際には、優先順位が最上位の合意したデータが取得できない場合には、優先順位が下位の値まで全てを使用して補助合意を行う。これにより、データの衝突が発生した場合でも、データの一貫性を保証することが可能となる。【０１３６】
図１３は、組み合わせ部２４０で行われる半順序処理の一例を示すフローチャートである。また、図１４は、図１３の衝突解決処理Ｓ８４で行われる処理の一例を示すフローチャートである。【０１３７】
組み合わせ部２４０は、まず、ステップＳ８１で、省プロセス１ステップ合意部２１０からの確定値、または２ステップ合意部２２０からの確定値、あるいは衝突判定値の何れかの入力を待つ。なお、衝突判定値は、推定値または解決値（または不定あるいは任意の値）で、省プロセス１ステップ合意部２１０または２ステップ合意部２２０の何れかからの入力である。組み合わせ部２４０は、入力を受け付けると、受け付けたデータが衝突判定値であるか否かを判定する（Ｓ８２）。衝突判定値が入力された場合にはステップＳ８４へ進み、確定値が入力された場合にはステップＳ８３へ進む。【０１３８】
ステップＳ８３では、組み合わせ部２４０が、受け付けた確定値を合意値として出力し、上記ステップＳ８１に戻って処理を繰り返す。ステップＳ８４では、組み合わせ部２４０が図１４に示す衝突解決処理を実行し、衝突を解決した後に上記ステップＳ８１に戻って処理を繰り返す。【０１３９】
図１４の衝突解決処理について以下に説明する。ステップＳ９１では、組み合わせ部２４０が優先順位の高い、２ステップ合意部２２０からの推定値を取得する。２ステップ合意部２２０からの推定値が存在する場合、組み合わせ部２４０は、当該推定値を推定値集合２とする。なお、２ステップ合意部２２０からの推定値が存在しない場合には、推定値集合２を空集合として次のステップに進む。【０１４０】
ステップＳ９２では、組み合わせ部２４０が優先順位の高い、省プロセス１ステップ合意部２１０からの推定値を取得する。省プロセス１ステップ合意部２１０からの推定値が存在する場合、組み合わせ部２４０は、推定値からステップＳ９１で設定した推定値集合２のデータを除いた部分を推定値集合１とする。なお、省プロセス１ステップ合意部２１０からの推定値が存在しない場合には、推定値集合１を空集合として次のステップに進む。【０１４１】
ステップＳ９３では、組み合わせ部２４０が優先順位の低い、省プロセス１ステップ合意部２１０からの解決値を取得する。省プロセス１ステップ合意部２１０からの解決値が存在する場合、組み合わせ部２４０は、解決値からステップＳ９２で設定した推定値集合１とステップＳ９１で設定した推定値集合２を除いた部分を不定集合とする。なお、省プロセス１ステップ合意部２１０からの解決値が存在しない場合には、不定集合を空集合として次のステップに進む。【０１４２】
ステップＳ９４では、組み合わせ部２４０が上記推定値集合１、推定値集合２、不定集合の順でＰＡＸＯＳ合意部２３０へ入力し、他のサーバ１との間でＰＡＸＯＳ合意を実行させる。【０１４３】
ステップＳ９５では、ＰＡＸＯＳ合意部２３０が、推定値集合１に対応するＰＡＸＯＳ合意値を無衝突集合１と、推定値集合２に対応するＰＡＸＯＳ合意値を無衝突集合２と、不定集合に対応するＰＡＸＯＳ合意値を衝突集合として出力する。【０１４４】
ステップＳ９６では、更新部１３０は、まず、推定値集合２に対応する無衝突集合２を出力する。次に、ステップＳ９７では、更新部１３０が、推定値集合１に対応する無衝突集合１を出力する。最後にステップＳ９７では、更新部１３０が不定集合に対応する衝突集合を所定の順序で出力する。【０１４５】
以上の処理により、更新部１３０を構成する組み合わせ部２４０は、衝突の解決を行ってＰＡＸＯＳ合意によるデータの一貫性を保証することができるのである。なお、図１２では、不定集合及び衝突集合の記載を省略したが、不定集合が発生した場合には図１４と同様に処理すればよい。【０１４６】
換言すれば、更新部１３０では、判定結果に優先順位を設定しておき、優先順位が最上位の確定値（判定結果）が取得できない場合には、優先順位が下位の判定結果を利用してデータの一貫性を保証する。なお、優先順位が下位の判定結果は、全て利用することが望ましい。【０１４７】
なお、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。【０１４８】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。【０１４９】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。【０１５０】
＜補足＞
サーバを制御するプログラムを格納した記憶媒体であって、
多重化されたデータの一貫性を判定する第１の判定部で、受信したデータの一貫性を判定する第１のステップと、
前記第１の判定部よりも前記サーバの許容故障数は小さいが、前記データの一貫性を判定するために前記サーバ間の最小通信回数が多い第２の判定部で、前記受信したデータの一貫性を判定する第２のステップと、
前記第１の判定部または前記第２の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する第３のステップと、
前記一貫性が保証されたデータを格納する第４のステップと、
を前記サーバに実行させるプログラムを格納した非一時的計算機読み取り可能な記憶媒体。
【図１】
2015186191.tif 000003
【図２】
2015186191.tif 000004
【図３】
2015186191.tif 000005
【図４】
2015186191.tif 000006
【図５】
2015186191.tif 000007
【図６】
2015186191.tif 000008
【図７】
2015186191.tif 000009
【図８】
2015186191.tif 000010
【図９】
2015186191.tif 000011
【図１０】
2015186191.tif 000012
【図１１】
2015186191.tif 000013
【図１２】
2015186191.tif 000014
【図１３】
2015186191.tif 000015
【図１４】
2015186191.tif 000016
【図１５】
2015186191.tif 000017
【図１６】
2015186191.tif 000018
【国際調査報告】
2015186191.tif 000019
2015186191.tif 000020
2015186191.tif 000021