(57)【要約】  実施形態の情報処理システムは、１以上のクライアント装置と、データを記憶するＮ以上（Ｎは３以上の整数）のサーバ装置とを備える。サーバ装置は、第１記憶部と、受信部と、生成部と、選択部と、送信部と、変更部とを備える。選択部は、候補データのリクエストのうち変更内容が同一のリクエストの数が第１閾値より大きい場合、変更内容が同一のリクエストのうち一のリクエストを選択し、選択されたリクエストの状態を第２状態に決定する。送信部は、選択されたリクエストを含む候補データを他のサーバ装置に送信する。変更部は、候補データのリクエストのうち、状態が第２状態のリクエストの数が第２閾値より大きい場合、第２状態のリクエストを含む候補データのうち一の候補データを使用して履歴データを更新するとともにデータを変更する。
2015033410.tif 000002
【特許請求の範囲】
【請求項１】
１以上のクライアント装置と、データを記憶するＮ以上（Ｎは３以上の整数）のサーバ装置とを備える情報処理システムであって、
前記クライアント装置は、
前記データの変更内容を示すリクエストを前記サーバ装置に送信する送信部を備え、
前記サーバ装置は、
前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶する第１記憶部と、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部と、
を備える情報処理システム。
【請求項２】
前記第１閾値と前記第２閾値とは、Ｎ／２である
請求項１に記載の情報処理システム。
【請求項３】
前記選択部は、
前記候補データの前記リクエストのうち前記変更内容が相異なるものがある場合、一の前記候補データを選択し、
前記送信部は、
選択された前記候補データを他の前記サーバ装置に送信する
請求項１又は２に記載の情報処理システム。
【請求項４】
前記変更部は、
前記候補データの前記リクエストのうち、前記第１状態の前記リクエストを含む前記候補データと、前記第２状態の前記リクエストを含む前記候補データとが共にある場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを選択し、選択された前記候補データの前記リクエストの状態を第１状態に決定し、
前記送信部は、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する
請求項１乃至３のいずれか１項に記載の情報処理システム。
【請求項５】
前記変更部は、
前記候補データの前記リクエストのうち、状態が前記第１状態の前記リクエストの数が第２閾値より大きい場合、一の前記候補データを選択し、
前記送信部は、
選択された前記候補データを他の前記サーバ装置に送信する
請求項１乃至４のいずれか１項に記載の情報処理システム。
【請求項６】
前記受信部は、
自身の前記サーバ装置で前記候補データを決定していない場合、他の前記サーバ装置から受信した前記候補データに含まれるリクエストの状態を第１状態に決定し、自身の前記サーバ装置の前記候補データにする
請求項１乃至５のいずれか１項に記載の情報処理システム。
【請求項７】
前記サーバ装置は、
前記候補データを一時的に記憶する第２記憶部を更に備え、
前記受信部は、
他の前記サーバ装置から受信した前記候補データを前記第２記憶部に記憶し、
前記選択部は、
前記選択部が選択しなかった前記リクエストを含む候補データを前記第２記憶部から削除し、
前記変更部は、
前記変更部が選択しなかった前記候補データを前記第２記憶部から削除する
請求項１乃至６のいずれか１項に記載の情報処理システム。
【請求項８】
前記受信部が他の前記サーバ装置から受信した前記候補データの前記現順序番号が、前記履歴データの現順序番号よりも大きい場合、前記第２記憶部の前記候補データを削除し、前記現順序番号を送信した他の前記サーバ装置に、前記履歴データの送信を依頼する同期部を
更に備える請求項７に記載の情報処理システム。
【請求項９】
前記受信部は、
他の前記サーバ装置が前記履歴データを更新したときに、他の前記サーバ装置から前記現順序番号を受信し、
前記同期部は、
他の前記サーバ装置から受信した前記現順序番号が、前記履歴データの現順序番号よりも大きい場合、前記第２記憶部の前記候補データを削除し、前記現順序番号を送信した他の前記サーバ装置に、前記履歴データの送信を依頼し、
前記変更部は、
前記履歴データを更新したときに、前記現順序番号を１増やし、１増やした後の前記順序番号を他の前記サーバ装置に送信する
請求項７又は８に記載の情報処理システム。
【請求項１０】
前記生成部は、
初期値を設定したラウンド番号を更に含めて前記候補データを生成し、
前記第２記憶部は、
最新のラウンド番号を現ラウンド番号として更に記憶し、
前記選択部は、
選択した前記候補データの前記ラウンド番号を１増やすとともに、１増やした後の前記ラウンド番号を前記現ラウンド番号として第２記憶部に記憶し、
前記変更部は、
選択した前記候補データの前記ラウンド番号を１増やすとともに、１増やした後の前記ラウンド番号を前記現ラウンド番号として第２記憶部に記憶し、選択した前記候補データを使用して前記履歴データを更新するときに前記現ラウンド番号を初期値に戻し、
前記同期部は、
前記受信部が前記候補データを受信したときに、受信した前記候補データの前記ラウンド番号が、前記現ラウンド番号よりも大きい場合、前記第２記憶部の前記候補データを削除し、受信した前記候補データを前記第２記憶部に記憶するとともに、前記現ラウンド番号を受信した前記候補データの前記ラウンド番号にする
請求項７乃至９のいずれか１項に記載の情報処理システム。
【請求項１１】
クライアント装置からデータの変更内容を示すリクエストを受信するサーバ装置であって、
前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶する第１記憶部と、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部と、
を備えるサーバ装置。
【請求項１２】
１以上のクライアント装置と、データを記憶するＮ以上（Ｎは３以上の整数）のサーバ装置とを備える情報処理システムの情報処理方法であって、
クライアント装置が、前記データの変更内容を示すリクエストを前記サーバ装置に送信するステップと、
サーバ装置が、前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶するステップと、
サーバ装置が、前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信するステップと、
サーバ装置が、前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成するステップと、
サーバ装置が、前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定するステップと、
サーバ装置が、選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信するステップと、
サーバ装置が、前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更するステップと、
を含む情報処理方法。
【請求項１３】
データの変更内容を示すリクエストと、前記リクエストを記憶する順序を示す順序番号とを関連付けた履歴データを記憶する第１記憶部を備え、クライアント装置から前記リクエストを受信するサーバ装置を、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理システム、サーバ装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
複数のコンピュータにより構成される分散システムが、さまざまな分野で広く利用されている。分散システムにはさまざまな形態があるが、一例として、全体で１台のコンピュータであるかのように振舞うクラスタシステムが挙げられる。また近年、急速に普及しているクラウドサービスも、分散システムによって提供されている。例えば、値（バリュー）に名前（キー）を付けて情報を格納する分散キーバリューストアが、クラウドサービスで利用されている。【０００３】
耐障害性を向上させるため、同一の情報を複数のコンピュータで保持すれば、一部のコンピュータでデータが消失しても、その情報は失われない。情報の多重化での技術的課題は、情報が変更されるとき、いかにして多重化された情報の一貫性を維持するかという点にある。一貫性の維持は、変更の内容又は結果を各コンピュータに通知して、各コンピュータでその変更を適用することにより実現できる。【０００４】
この方法の注意点は、可換（ｃｏｍｍｕｔａｔｉｖｅ）でない変更が同時並行的に行われたとき、各コンピュータでの変更の順序が同一でなければならないという点である。例えば、預金残高に１０００円を加えるという変更Ａと、預金残高の１％を加えるという変更Ｂがほぼ同時に発生したとき、その適用順序が変わると最終的な結果は同一でない。つまり、変更Ａ及び変更Ｂの順序を決定し、多重化された各コンピュータはすべて同じ順序で変更を行わなければならない。同様に、変更の結果を各コンピュータに通知する方式においても、各コンピュータでの変更の順序が同一でなければならない。【０００５】
変更の順序を同一に保つためには、すべての変更に順序番号を付けることができればよい。仮に、変更の要求元が一元的であれば、要求元で順序番号を付けることができるが、しかしながら一般的には、変更の要求元が一元的であるとはかぎらない。変更の要求元が一元的でない場合に、変更の順序を決定するため、非特許文献１には、リーダ（又はマスタ）とよばれるコンピュータにいったん変更要求をすべて集めて順序を決定するという方法が開示されている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ＺｏｏＫｅｅｐｅｒ：  Ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃｏｏｒｄｉｎａｔｉｏｎ  Ｓｅｒｖｉｃｅ  ｆｏｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ａｐｐｌｉｃａｔｉｏｎｓ  ＜ＵＲＬ：ｈｔｔｐ：／／ｚｏｏｋｅｅｐｅｒ．ａｐａｃｈｅ．ｏｒｇ／ｄｏｃ／ｃｕｒｒｅｎｔ／ｚｏｏｋｅｅｐｅｒＯｖｅｒ．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、マスタコンピュータに変更要求をすべて集めて順序を決定する方法では、マスタコンピュータが故障して停止した場合に、他のコンピュータをマスタコンピュータとして選出するまでは、変更要求の順序が決定できず、多重化の処理を中断しなければならなかった。
【課題を解決するための手段】
【０００８】
実施形態の情報処理システムは、１以上のクライアント装置と、データを記憶するＮ以上（Ｎは３以上の整数）のサーバ装置とを備える。前記クライアント装置は、前記データの変更内容を示すリクエストを前記サーバ装置に送信する送信部を備える。前記サーバ装置は、第１記憶部と、受信部と、生成部と、選択部と、送信部と、変更部とを備える。第１記憶部は、前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶する。受信部は、前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する。生成部は、前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する。選択部は、前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する。送信部は、選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する。変更部は、前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施形態の情報処理システムの構成の一例を示す図である。
【図２】図２は、実施形態のサーバ装置の構成の一例を示す図である。
【図３】図３は、実施形態の履歴データの一例を示す図である。
【図４】図４は、実施形態のサーバ装置がリクエストを受信したときの処理を示すフローチャートである。
【図５】図５は、実施形態のサーバ装置が候補データを受信したときの処理を示すフローチャートである。
【図６】図６は、実施形態のサーバ装置の選択部の処理を示すフローチャートである。
【図７】図７は、実施形態のサーバ装置の変更部の処理を示すフローチャートである。
【図８】図８は、実施形態のサーバ装置が現順序番号を受信したときの処理を示すフローチャートである。
【図９】図９は、実施形態の情報処理方法を具体的に説明するための図である。
【図１０】図１０は、実施形態の情報処理方法を具体的に説明するための図である。
【図１１】図１１は、実施形態の情報処理方法を具体的に説明するための図である。
【図１２】図１２は、実施形態の情報処理方法を具体的に説明するための図である。
【図１３】図１３は、実施形態の情報処理方法を具体的に説明するための図である。
【図１４】図１４は、実施形態の情報処理方法を具体的に説明するための図である。
【図１５】図１５は、実施形態の情報処理方法を具体的に説明するための図である。
【図１６】図１６は、実施形態の情報処理方法の性能を示す図である。
【図１７】図１７は、実施形態のサーバ装置及びクライアント装置のハードウェアの構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して実施形態の情報処理システム、サーバ装置、情報処理方法及びプログラムについて説明する。
【００１１】
図１は、実施形態の情報処理システムの構成の一例を示す図である。本実施形態の情報処理システム１００は、サーバ装置１０−１、・・・、サーバ装置１０−ｎ（ｎは３以上の整数）と、クライアント装置２０−１、・・・、クライアント装置２０−ｍ（ｍは１以上の整数）と、ネットワーク３０とを備える。以下、サーバ装置１０−１、・・・、及びサーバ装置１０−ｎを区別する必要がない場合は単にサーバ装置１０という。同様に、クライアント装置２０−１、・・・、及びクライアント装置２０−ｍを区別する必要がない場合は、単にクライアント装置２０という。
【００１２】
サーバ装置１０及びクライアント装置２０は、互いに通信できるようにネットワーク３０を介して接続されている。なお、サーバ装置１０及びクライアント装置２０との間の通信手段は、有線であっても無線であってよく、また、両方を組み合わせてもよい。サーバ装置１０−１、・・・、及びサーバ装置１０−ｎは、データを記憶する。クライアント装置２０は、送信部２１を備える。送信部２１は、サーバ装置１０のデータの変更内容を示すリクエストを任意のサーバ装置１０に送信する。
【００１３】
図２は、実施形態のサーバ装置１０の構成の一例を示す図である。本実施形態のサーバ装置１０は、第１記憶部１１、第２記憶部１２、受信部１３、生成部１４、選択部１５、変更部１６、同期部１７及び送信部１８を備える。
【００１４】
第１記憶部１１は、データ及び履歴データを記憶する。データは、例えばデータベースのデータである。履歴データは、例えば当該データベースのジャーナルである。サーバ装置１０が第１記憶部１１に記憶するデータは任意でよい。
【００１５】
図３は、実施形態の履歴データの一例を示す図である。履歴データは、順序番号とリクエストとを関連付けた情報である。順序番号は、当該リクエストの変更内容に基づいて第１記憶部１１のデータを変更する順序を示す。本実施形態の順序番号の初期値は１である。以下、まだリクエストが関連付けられていない未使用の順序番号を現順序番号という。図３の例では、順序番号Ｓが現順序番号である。
【００１６】
図２に戻り、第２記憶部１２は、各サーバ装置１０の候補データ及び現ラウンド番号を一時的に記憶する。候補データは、現順序番号と、当該現順序番号を使用して履歴データに登録する候補となるリクエストと、リクエストの状態と、ラウンド番号と、サーバ識別子とを含む。候補データに含まれるリクエストの状態は、第１状態及び第２状態がある。リクエストの状態は、現順序番号に関連付けるリクエストを決定する処理に使用される情報である。また、ラウンド番号は、現順序番号に関連付けるリクエストを決定する処理に使用される番号である。現順序番号に関連付けるリクエストを決定する処理の詳細な説明は図４〜８のフローチャートを参照して後述する。サーバ識別子は、各サーバ装置１０を識別する識別情報である。例えば、サーバ識別子は、各サーバ装置１０に割り当てられた１〜Ｎのサーバ番号である。候補データに含まれるサーバ識別子により、当該候補データを送信したサーバ装置１０を識別することができる。
【００１７】
現ラウンド番号は、ラウンド番号の最新の値である。本実施形態の現ラウンド番号の初期値は１である。第２記憶部１２の現ラウンド番号及び候補データは、選択部１５及び変更部１６によって更新される。
【００１８】
受信部１３は、クライアント装置２０からリクエストを受信し、他のサーバ装置１０から候補データを受信する。受信部１３は、現ラウンド番号が１のときに、クライアント装置２０から受信したリクエストを生成部１４に送信する。
【００１９】
また、受信部１３は、受信した候補データを第２記憶部１２に一時的に記憶する。このとき、現ラウンドの自身の候補データが決定していない場合には、受信した候補データを当該ラウンドの自身の候補データとし、第２記憶部１２に記憶する。受信部１３は、第２記憶部１２から現ラウンド番号を読み出し、当該現ラウンド番号に応じて、他のサーバ装置１０から候補データを受信した旨を示す候補データ受信通知を選択部１５又は変更部１６に送信する。具体的には、受信部１３は、現ラウンド番号が奇数のときに、候補データ受信通知を選択部１５に送信する。受信部１３は、現ラウンド番号が偶数のときに、候補データ受信通知を変更部１６に送信する。
【００２０】
また、受信部１３は、他のサーバ装置１０が履歴データを更新したときに他のサーバ装置１０から現順序番号を受信し、当該現順序番号を同期部１７に送信し、現順序番号受信契機の履歴データ同期処理を同期部１７に依頼する。現順序番号受信契機の履歴データ同期処理については後述する。
【００２１】
また、受信部１３は、受信した候補データの現順序番号が履歴データの現順序番号よりも大きい場合、候補データ受信契機の履歴データ同期処理を同期部１７に依頼する。また、受信部１３は、受信した候補データのラウンド番号が現ラウンド番号より大きい場合、段落００１９の処理に先だって、同期部１７に現ラウンド番号同期処理を依頼する。これらの同期処理により、第２記憶部１２に含まれる候補データの順序番号とラウンド番号はすべて同一となる。候補データ受信契機の履歴データ同期処理、及びラウンド番号の同期処理については後述する。
【００２２】
受信部１３及び後述の同期部１７の処理により、サーバ装置１０は、他のサーバ装置１０よりも、現順序番号に関連付けるリクエストを決定する処理が遅れている場合を判定し、当該処理が遅れている場合は、他のサーバ装置１０の処理に合わせる。詳細な説明は、図５のフローチャートを参照して後述する。
【００２３】
生成部１４は、現ラウンド番号が１（初期値）のとき、受信部１３を介してクライアント装置２０から受信したリクエストの状態を第１状態に決定する。生成部１４は、第１状態のリクエストと、履歴データの現順序番号と、値が１であるラウンド番号とを含む候補データを生成する。生成部１４は、当該候補データを選択部１５に送信する。
【００２４】
選択部１５は、現ラウンド番号が１（初期値）のとき、生成部１４から候補データを受信する。また、選択部１５は、現ラウンド番号が奇数のとき、候補データ受信通知を受信部１３から受信する。選択部１５は、候補データ受信通知を受信すると、第２記憶部１２から候補データを読み出す。
【００２５】
選択部１５は、第２記憶部１２から読み出した候補データのリクエストのうち変更内容が同一のリクエストの数が閾値より大きい場合、変更内容が同一のリクエストのうち一のリクエストを選択する。なお、本実施形態では、当該閾値をｎ／２とする。すなわち、当該閾値を情報処理システム１００内のサーバ装置１０の台数の半分の値とする。しかしながら、当該閾値は、ｎ／２に限られずそれより大きい任意の値でもよい。選択部１５は、選択されたリクエストの状態を第２状態にし、選択されたリクエストを含む候補データのラウンド番号を１増やす。選択部１５は、選択されなかったリクエストを含む候補データを第２記憶部１２から削除し、選択されたリクエストを含む候補データを、送信部１８を介して他のサーバ装置１０に送信する。選択部１５は、第２記憶部１２の現ラウンド番号を１増やす。
【００２６】
また、選択部１５は、第２記憶部１２から読み出した候補データのリクエストのうち変更内容が相異なるリクエストがある場合、一の候補データを選択する。具体的には、選択部１５は、第２記憶部１２から候補データを読み出し、ランダムに一の候補データを選択する。なお、選択部１５が一の候補データを選択する方法は、ランダムに一の候補データを選択する方法に限られず、その他の方法でもよい。選択部１５は、選択された候補データのラウンド番号を１増やす。選択部１５は、選択されなかった候補データを第２記憶部１２から削除し、選択された候補データを当該ラウンドの自身の候補データとして決定して第２記憶部１２に記憶し、送信部１８を介して他のサーバ装置１０に送信する。選択部１５は、第２記憶部１２の現ラウンド番号を１増やす。
【００２７】
なお、選択部１５が候補データを送信するサーバ装置１０は、所定の方法により決定する。当該所定の方法は、例えば、送信先のサーバ装置１０をランダムに所定の数だけ選択する方法や、送信先のサーバ装置１０を他のサーバ装置１０の全てにする等である。
【００２８】
変更部１６は、現ラウンド番号が偶数のとき、候補データ受信通知を受信部１３から受信する。変更部１６は、候補データ受信通知を受信すると、第２記憶部１２から候補データを読み出す。
【００２９】
変更部１６は、第２記憶部１２から読み出した候補データのリクエストのうち状態が第２状態のリクエストの数が閾値より大きい場合、第２状態のリクエストを含む候補データのうち一の候補データを使用して履歴データを更新するとともにデータを変更する。変更部１６は、第２記憶部１２の現ラウンド番号を１（初期値）に戻す。また、変更部１６は、第１記憶部１１の現順序番号を１増やす。また、変更部１６は、１増やした後の現順序番号を他のサーバ装置１０に送信する。これにより、新たに使用された順序番号を他のサーバ装置１０に通知する。
【００３０】
また、変更部１６は第２記憶部１２から読み出した候補データのうち、第１状態のリクエストを含む候補データがあり、かつ、第２状態のリクエストを含む候補データがある場合、第２状態のリクエストを含む候補データのうち一の候補データを選択し、選択された候補データのリクエストの状態を第１状態に決定する。変更部１６は、選択された候補データのラウンド番号を１増やす。変更部１６は、選択されなかった候補データを第２記憶部１２から削除し、選択された候補データを当該ラウンドの自身の候補データとして決定して第２記憶部１２に記憶し、送信部１８を介して他のサーバ装置１０に送信する。選択部１５は、第２記憶部１２の現ラウンド番号を１増やす。
【００３１】
また、変更部１６は、第２記憶部１２から読み出した候補データのリクエストのうち、状態が第１状態のリクエストの数が閾値より大きい場合、一の候補データを選択する。例えば、変更部１６は、ランダムに一の候補データを選択する。なお、変更部１６が一の候補データを選択する方法は、ランダムに一の候補データを選択する方法に限られず、その他の方法でもよい。変更部１６は、選択された候補データのラウンド番号を１増やす。変更部１６は、選択されなかった候補データを第２記憶部１２から削除し、選択された候補データを当該ラウンドの自身の候補データとして決定して第２記憶部１２に記憶し、送信部１８を介して他のサーバ装置１０に送信する。選択部１５は、第２記憶部１２の現ラウンド番号を１増やす。
【００３２】
同期部１７は、受信部１３が他のサーバ装置１０から受信した候補データの現順序番号が、履歴データの現順序番号よりも大きい場合、第２記憶部１２の候補データを削除し、現順序番号を送信した他の前記サーバ装置１０に、履歴データの送信依頼を、送信部１８を介して送信する（候補データ受信契機の履歴データ同期処理）。
【００３３】
また、同期部１７は、受信部１３が候補データを受信したときに、受信した候補データのラウンド番号が、第２記憶部１２の現ラウンド番号よりも大きい場合、第２記憶部１２の候補データを削除し、受信した候補データを第２記憶部１２に記憶するとともに、現ラウンド番号を受信した候補データのラウンド番号にする（ラウンド番号の同期処理）。
【００３４】
また、同期部１７は、受信部１３を介して他のサーバ装置１０から現順序番号を受信したときに、他のサーバ装置１０から受信した現順序番号が、履歴データの現順序番号よりも大きい場合、第２記憶部１２の候補データを削除し、現順序番号を送信した他のサーバ装置１０に、履歴データの送信依頼を、送信部１８を介して送信する（現順序番号受信契機の履歴データ同期処理）。
【００３５】
同期部１７の履歴データ同期処理により、サーバ装置１０は、他のサーバ装置１０から最新の履歴データを受信して、自身の履歴データを最新の状態に更新することができる。
【００３６】
送信部１８は、選択部１５又は変更部１６から受信した候補データに、自身のサーバ装置１０を識別するサーバ識別子を含め、当該候補データを他のサーバ装置１０に送信する。また、順序番号を変更部１６から受信したときに、当該順序番号を他のサーバ装置１０の全てに送信する。また、送信部１８は、履歴データの送信依頼を同期部１７から受信すると、依頼先のサーバ装置１０に履歴データの送信依頼を送信する。
【００３７】
次に、本実施形態の情報処理システム１００の情報処理方法についてフローチャートを参照して説明する。図４は、実施形態のサーバ装置１０がリクエストを受信したときの処理を示すフローチャートである。受信部１３がクライアント装置２０からリクエストを受信する（ステップＳ１）。受信部１３は、第２記憶部１２から現ラウンド番号を読み出し、現ラウンド番号が１（初期値）であるか否かを判定する（ステップＳ２）。現ラウンド番号が１である場合（ステップＳ２、Ｙｅｓ）、受信部１３の処理は、ステップＳ３に進む。現ラウンド番号が１でない場合（ステップＳ２、Ｎｏ）、受信部１３は、処理を終了する。
【００３８】
受信部１３は、第一ラウンドの自身の候補データが決定しているか否かを判定する（ステップＳ３）。第一ラウンドの自身の候補データが決定している場合（ステップＳ３、Ｙｅｓ）、受信部１３は、処理を終了する。第一ラウンドの自身の候補データがまだ決定していない場合（ステップＳ３、Ｎｏ）、受信したリクエストを生成部１４に送信する。生成部１４は、受信部１３から受信したリクエストの状態を第１状態にする。生成部１４は、当該第１状態のリクエスト、第１記憶部１１の現順序番号、及び値が１（初期値）のラウンド番号を含む候補データを生成する（ステップＳ４）。生成部１４は、生成した候補データを選択部１５に送信する。選択部１５は、生成部１４から受信した候補データを第一ラウンドの自身の候補データとして決定して第２記憶部１２に記憶する（ステップＳ５）。選択部１５は、当該候補データを送信部１８を介して他のサーバ装置１０に送信する（ステップＳ６）。なお、送信部１８は、候補データに自身のサーバ装置１０を識別するサーバ識別子を含め、当該候補データを他のサーバ装置１０に送信する。
【００３９】
図５は、実施形態のサーバ装置１０が候補データを受信したときの処理を示すフローチャートである。受信部１３は、候補データを他のサーバ装置１０から受信する（ステップＳ１１）。受信部１３は、当該候補データに含まれる現順序番号が履歴データの現順序番号よりも大きいか否かを判定する（ステップＳ１２）。
【００４０】
当該候補データに含まれる現順序番号が履歴データの現順序番号よりも大きい場合（ステップＳ１２、Ｙｅｓ）、受信部１３は、同期部１７に履歴データの同期処理を依頼する。同期部１７は、受信部１３から履歴データの同期処理の依頼を受信すると、第２記憶部１２の全ての候補データを削除し（ステップＳ１３）、当該現順序番号を含む候補データを送信したサーバ装置１０に履歴データの送信を依頼し（ステップＳ１４）、候補データの受信処理を終了する。
【００４１】
当該候補データに含まれる現順序番号が履歴データの現順序番号以下である場合（ステップＳ１２、Ｎｏ）、受信部１３の処理はステップＳ１５に進む。
【００４２】
受信部１３は、受信した候補データの現順序番号と履歴データの現順序番号が一致するか否かを判定する（ステップＳ１５）。一致する場合（ステップＳ１５、Ｙｅｓ）、受信部１３の処理はステップＳ１６に進む。一致しない場合（ステップＳ１５、Ｎｏ）、受信部１３の処理を終了する。
【００４３】
受信部１３は、受信した候補データのラウンド番号が第２記憶部１２の現ラウンド番号より大きいか否かを判定する（ステップＳ１６）。受信した候補データのラウンド番号が第２記憶部１２の現ラウンド番号より大きい場合（ステップＳ１６、Ｙｅｓ）、受信部１３は、同期部１７にラウンド番号の同期処理を依頼する。同期部１７は、受信部１３からラウンド番号の同期処理の依頼を受信すると、第２記憶部１２の全ての候補データを削除し（ステップＳ１７）、現ラウンド番号を受信部１３が受信した候補データのラウンド番号にする（ステップＳ１８）。次に、受信部１３の処理はステップＳ２０に進む。
【００４４】
受信した候補データのラウンド番号が第２記憶部１２の現ラウンド番号以下である場合（ステップＳ１６、Ｎｏ）、受信部１３の処理はステップＳ１９に進む。
【００４５】
受信部１３は、受信した候補データのラウンド番号と第２記憶部１２の現ラウンド番号とが一致するか否かを判定する（ステップＳ１９）。一致する場合（ステップＳ１９、Ｙｅｓ）、受信部１３の処理はステップＳ２０に進む。一致しない場合（ステップＳ１９、Ｎｏ）、処理を終了する。
【００４６】
受信部１３は、受信した候補データを第２記憶部１２に記憶する（ステップＳ２０）。次に、現ラウンドの自身の候補データが決定しているか否かを判定する（ステップＳ２１）。決定している場合（ステップＳ２１、Ｙｅｓ）、受信した候補データを自身の候補データとして決定して第２記憶部１２に記憶する（ステップＳ２２）。次に、受信部１３は、現ラウンド番号が奇数であるか否かを判定する（ステップＳ２３）。現ラウンド番号が奇数である場合（ステップＳ２３、Ｙｅｓ）、受信部１３は、候補データ受信通知を選択部１５に送信し、選択部１５による処理に移行する（ステップＳ２４）。現ラウンド番号が偶数である場合（ステップＳ２３、Ｎｏ）、受信部１３は、候補データ受信通知を変更部１６に送信し、変更部１６による処理に移行する（ステップＳ２５）。
【００４７】
図６は、実施形態のサーバ装置１０の選択部１５の処理を示すフローチャートである。選択部１５は、候補データ受信通知を受信部１３から受信すると、第２記憶部１２から候補データを読み出す（ステップＳ３１）。なお、選択部１５は、候補データ受信通知を受信する度に、第２記憶部１２から候補データを読み出してもよいし、複数の候補データ受信通知に対して候補データの読み出しを１度にしてもよい。選択部１５は、第２記憶部１２の候補データの読み出し処理を終了すると、ステップＳ３２の処理に進む。なお、読み出し処理の終了を判定する方法は任意でよい。例えば、最初の候補データ受信通知を受信してから、所定の期間待つ間に受信した候補データ受信通知の分だけ候補データを読み出す方法や、情報処理システム１００内のサーバ装置１０の数に基づいて定められた数だけ候補データを読み出したら読み出し処理を終了する等の方法がある。
【００４８】
選択部１５は、第２記憶部１２から読み出した候補データのリクエストのうち変更内容が同一のリクエストの数が閾値より大きいか否かを判定する（ステップＳ３２）。閾値より大きい場合（ステップＳ３２、Ｙｅｓ）、選択部１５は、ステップＳ３２の条件を満たす候補データから一の候補データを選択し（ステップＳ３３）、選択された候補データのリクエストの状態を第２状態に決定する（ステップＳ３４）。次に、選択部１５の処理はステップＳ３７に進む。
【００４９】
閾値以下である場合（ステップＳ３２、Ｎｏ）、第２記憶部１２から読み出した候補データのリクエストのうち変更内容が相異なるリクエストがあるか否かを判定する（ステップＳ３５）。変更内容が相異なるリクエストが無い場合（ステップＳ３５、Ｎｏ）、ステップＳ３１に戻る。変更内容が相異なるリクエストがある場合（ステップＳ３５、Ｙｅｓ）、選択部１５は、第２記憶部１２から読み出した候補データのうち一の候補データを選択し（ステップＳ３６）、ステップＳ３７に進む。
【００５０】
選択部１５は、選択されなかった候補データを第２記憶部１２から削除する（ステップＳ３７）。選択部１５は、選択した候補データのラウンド番号を１増やすとともに、第２記憶部１２の現ラウンド番号を１増やす（ステップＳ３８）。選択部１５は、選択した候補データを当該ラウンドの自身の候補データとして決定して第２記憶部１２に記憶し、送信部１８を介して他のサーバ装置１０に送信する（ステップＳ３９）。なお、送信部１８は、候補データに自身のサーバ装置１０を識別するサーバ識別子を含め、当該候補データを他のサーバ装置１０に送信する。
【００５１】
図７は、実施形態のサーバ装置１０の変更部１６の処理を示すフローチャートである。  変更部１６は、候補データ受信通知を受信部１３から受信すると、第２記憶部１２から候補データを読み出す（ステップＳ４１）。なお、ステップＳ４１の読み出し処理の詳細は、ステップＳ３１と同様なので説明を省略する。
【００５２】
変更部１６は、リクエストの状態が第２状態である候補データの数が閾値より大きいか否かを判定する（ステップＳ４２）。閾値以下である場合（ステップＳ４２、Ｎｏ）、変更部１６の処理はステップＳ４９に進む。
【００５３】
閾値より大きい場合（ステップＳ４２、Ｙｅｓ）、変更部１６は、ステップＳ４２の条件を満たす候補データから一の候補データを選択する（ステップＳ４３）。次に、変更部１６は、選択された候補データを使用して第１記憶部１１の履歴データを更新し、第１記憶部１１のデータを変更する（ステップＳ４４）。次に、変更部１６は、第２記憶部１２の全ての候補データを削除する（ステップＳ４５）。次に、変更部１６は、第２記憶部１２の現ラウンド番号を１（初期値）に戻す（ステップＳ４６）。次に、変更部１６は、第１記憶部１１の履歴データの現順序番号を１増やす（ステップＳ４７）。次に、変更部１６は、現順序番号を他のサーバ装置１０に送信し（ステップＳ４８）、処理を終了する。
【００５４】
変更部１６は、第２記憶部１２から読み出した候補データに、第１状態のリクエストを含む候補データと、第２状態のリクエストを含む候補データとが共にあるか否かを判定する（ステップＳ４９）。共にある場合（ステップＳ４９、Ｙｅｓ）、変更部１６は、第２状態のリクエストを含む候補データから一の候補データを選択し（ステップＳ５０）、選択された候補データのリクエストの状態を第１状態にする（ステップＳ５１）。次に、変更部１６の処理はステップＳ５４に進む。
【００５５】
共にない場合（ステップＳ４９、Ｎｏ）、リクエストの状態が第１状態である候補データの数が閾値より大きいか否かを判定する（ステップＳ５２）。閾値以下である場合（ステップＳ５２、Ｎｏ）、変更部１６の処理はステップＳ４１に戻る。閾値より大きい場合（ステップＳ５２、Ｙｅｓ）、変更部１６の処理はステップＳ５３に進む。変更部１６は、第２記憶部１２から読み出した候補データのうち一の候補データを選択する（ステップＳ５３）。次に、変更部１６の処理はステップＳ５４に進む。
【００５６】
変更部１６は、選択されなかった候補データを第２記憶部１２から削除する（ステップＳ５４）。変更部１６は、選択した候補データのラウンド番号を１増やすとともに、第２記憶部１２の現ラウンド番号を１増やす（ステップＳ５５）。変更部１６は、選択した候補データを送信部１８を介して他のサーバ装置１０に送信する（ステップＳ５６）。なお、送信部１８は、候補データに自身のサーバ装置１０を識別するサーバ識別子を含め、当該候補データを他のサーバ装置１０に送信する。
【００５７】
図８は、実施形態のサーバ装置１０が現順序番号を受信したときの処理を示すフローチャートである。受信部１３は、他の前記サーバ装置１０が履歴データを更新したときに、他のサーバ装置１０から現順序番号を受信する（ステップＳ６１）。受信部１３は、受信した現順序番号が第１記憶部１１の履歴データの現順序番号よりも大きいか否かを判定する（ステップＳ６２）。受信した現順序番号が第１記憶部１１の履歴データの現順序番号以下である場合（ステップＳ６２、Ｙｅｓ）、処理を終了する。
【００５８】
受信した現順序番号が第１記憶部１１の履歴データの現順序番号よりも大きい場合（ステップＳ６２、Ｙｅｓ）、同期部１７に履歴データの同期処理を依頼する。同期部１７は、受信部１３から履歴データの同期処理の依頼を受信すると、第２記憶部１２の全ての候補データを削除し（ステップＳ６３）、当該現順序番号を含む候補データを送信したサーバ装置１０に履歴データの送信を依頼する（ステップＳ６４）。これにより、サーバ装置１０は、他のサーバ装置１０から最新の履歴データを受信して、自身の履歴データを最新の状態に更新することができる。
【００５９】
次に、上述の情報処理方法について具体例を参照して説明する。図９〜図１４は、実施形態の情報処理方法を具体的に説明するための図である。図９〜図１４は、サーバ装置の数ｎが５の例である。自候補は、サーバ装置１０自身の候補データ（以下、「自候補データ」という。）を示す。他候補は、他のサーバ装置１０から受信した候補データ（以下、「他候補データ」という。）を示す。なお、本例では、他候補データに含まれる現順序番号は、サーバ装置１０自身の現順序番号と一致しているものとして説明する。また、本例では、サーバ装置１０の送信部１８は、自候補データの送信先、及び当該送信先の数をランダムに決定するものとして説明する。すなわち、自候補データと他候補データとを合わせた候補データが、全てのサーバ装置１０で同じになるとは限らない。なお、サーバ装置１０の送信部１８が、自候補データの送信先、及び当該送信先の数を常に同じにしている場合であっても、ネットワーク３０の遅延や障害などの影響により、候補データは、全てのサーバ装置１０で同じになるとは限らない。また、本例では、上述の閾値を５／２（＝２．５）とする。
【００６０】
図９上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２の初期状態である。すなわち、サーバ装置１０−１〜サーバ装置１０−５の現ラウンド番号が１であり、本実施形態の情報処理方法を開始するときの第２記憶部１２の状態を示す。図９下段の図は、サーバ装置１０−１の受信部１３がクライアント装置２０からリクエストＡを受信し、サーバ装置１０−１の生成部１４が当該リクエストＡの状態を第１状態にして自候補データを生成したことを示す。また、サーバ装置１０−３の受信部１３がクライアント装置２０からリクエストＢを受信し、サーバ装置１０−３の生成部１４が当該リクエストＢの状態を第１状態にして自候補データを生成したことを示す。サーバ装置１０−５の受信部１３がクライアント装置２０からリクエストＣを受信し、サーバ装置１０−５の生成部１４が当該リクエストＣの状態を第１状態にして自候補データを生成したことを示す。サーバ装置１０−２及びサーバ装置１０−４は、クライアント装置２０からリクエストを受信していないことを示す。
【００６１】
図１０上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２が図９下段の状態であるときに、他のサーバ装置１０から他候補データを受信した後の第２記憶部１２の状態を示す。サーバ装置１０−１の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＢ、及び第１状態のリクエストＣを受信したことにより更新されている。サーバ装置１０−３の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＡを受信したことにより更新されている。サーバ装置１０−５の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＡを受信したことにより更新されている。サーバ装置１０−２の第２記憶部１２の状態は、サーバ装置１０−３から他候補データとして、第１状態のリクエストＢを受信したことにより更新されている。特に、サーバ装置１０−２は、自候補データを決定していなかったので、リクエストＢを自候補データに決定している。サーバ装置１０−４の第２記憶部１２の状態は、サーバ装置１０−１から他候補データとして、第１状態のリクエストＡを受信したことにより更新されている。特に、サーバ装置１０−４は、自候補データを決定していなかったので、リクエストＡを自候補データに決定している。
【００６２】
図１０下段の図は、選択部１５による処理の後の状態を示す図である。サーバ装置１０−１の選択部１５は、候補データのリクエスト（Ａ、Ｂ，Ｃ）は変更内容が相異なるため、一の候補データ（Ａ）をランダムに選択する（自候補データにする）。次に、サーバ装置１０−１の選択部１５は、選択されなかった候補データ（Ｂ，Ｃ）を削除する。次に、サーバ装置１０−１の選択部１５は、自候補データのラウンド番号を１増やすとともに、現ラウンド番号を１増やす。サーバ装置１０−１の選択部１５は、当該自候補データを、送信部１８を介して他のサーバ装置１０に送信する。なお、サーバ装置１０−３、サーバ装置１０−５の動作もサーバ装置１０−１と同様である。サーバ装置１０−２及びサーバ装置１０−４は、変更内容が相異なる候補データがないため、候補データを選択する処理に進まずに、候補データの受信を待つ（候補データの読み出し処理に戻る）。
【００６３】
図１１上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２が図１０下段の状態であるときに、他のサーバ装置１０から他候補データを受信した後の第２記憶部１２の状態を示す。サーバ装置１０−２の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＢ及びＣを受信（図１０下段の図の状態から更にリクエストＣを受信）したことにより、現ラウンド番号が１から２に更新されている。これは、サーバ装置１０−２の受信部１３が、第２記憶部１２の現ラウンド番号１と、他候補データに含まれるラウンド番号２とを比較し、他候補データに含まれるラウンド番号２＞現ラウンド番号１であるため、現ラウンド番号を２に更新したためである。自候補データが決定していなかったので、先に受信したリクエストＢに自候補データが決定している。なお、サーバ装置１０−４についても同様である。
【００６４】
図１１下段の図は、変更部１６による処理の後の状態を示す図である。サーバ装置１０−１の変更部１６は、候補データのリクエスト（Ａ、Ｂ，Ｃ）の状態はすべて第１状態で閾値（２．５）より多くあるので、一の候補データ（Ａ）をランダムに選択する（自候補データにする）。次に、サーバ装置１０−１の変更部１６は、選択されなかった候補データ（Ｂ，Ｃ）を削除する。次に、サーバ装置１０−１の変更部１６は、自候補データのラウンド番号を１増やすとともに、現ラウンド番号を１増やす。サーバ装置１０−１の変更部１６は、当該自候補データを、送信部１８を介して他のサーバ装置１０に送信する。なお、サーバ装置１０−２〜サーバ装置１０−５の動作もサーバ装置１０−１と同様である。
【００６５】
図１２上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２が図１１下段の状態であるときに、他のサーバ装置１０から他候補データを受信した後の第２記憶部１２の状態を示す。サーバ装置１０−１の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＢ、第１状態のリクエストＢ、第１状態のリクエストＡ、及び第１状態のリクエストＣを受信したことにより更新されている。サーバ装置１０−２〜サーバ装置１０−５についても、他のサーバ装置１０から他候補データを受信したことにより更新されている。
【００６６】
図１２下段の図は、選択部１５による処理の後の状態を示す図である。サーバ装置１０−１の選択部１５は、候補データのリクエスト（Ａ，Ｂ，Ｂ，Ａ，Ｃ）のうち変更内容が同一のリクエストの数が閾値（２．５）以下であり、変更内容が相異なるため、一の候補データ（Ａ）をランダムに選択する（自候補データにする）。次に、サーバ装置１０−１の選択部１５は、選択されなかった候補データ（Ｂ，Ｂ，Ａ，Ｃ）を削除する。次に、サーバ装置１０−１の選択部１５は、自候補データのラウンド番号を１増やすとともに、現ラウンド番号を１増やす。サーバ装置１０−１の選択部１５は、当該自候補データを、送信部１８を介して他のサーバ装置１０に送信する。なお、サーバ装置１０−２〜サーバ装置１０−５の動作もサーバ装置１０−１と同様である。
【００６７】
図１３上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２が図１２下段の状態であるときに、他のサーバ装置１０から他候補データを受信した後の第２記憶部１２の状態を示す。サーバ装置１０−１の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＢ、第１状態のリクエストＢ、及び第１状態のリクエストＡを受信したことにより更新されている。サーバ装置１０−２〜サーバ装置１０−５についても、他のサーバ装置１０から他候補データを受信したことにより更新されている。
【００６８】
図１３下段の図は、変更部１６による処理の後の状態を示す図である。サーバ装置１０−１の変更部１６は、候補データのリクエスト（Ａ、Ｂ，Ｂ，Ａ）の状態はすべて第１状態で閾値（２．５）より多くあるので、一の候補データ（Ａ）をランダムに選択する（自候補データにする）。次に、サーバ装置１０−１の変更部１６は、選択されなかった候補データ（Ｂ，Ｂ，Ａ）を削除する。次に、サーバ装置１０−１の変更部１６は、自候補データのラウンド番号を１増やすとともに、現ラウンド番号を１増やす。サーバ装置１０−１の変更部１６は、当該自候補データを、送信部１８を介して他のサーバ装置１０に送信する。なお、サーバ装置１０−２〜サーバ装置１０−５の動作もサーバ装置１０−１と同様である。
【００６９】
図１４上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２が図１３下段の状態であるときに、他のサーバ装置１０から他候補データを受信した後の第２記憶部１２の状態を示す。サーバ装置１０−１の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第１状態のリクエストＡ、第１状態のリクエストＡ、第１状態のリクエストＢ、及び第１状態のリクエストＡを受信したことにより更新されている。サーバ装置１０−２〜サーバ装置１０−５についても、他のサーバ装置１０から他候補データを受信したことにより更新されている。
【００７０】
図１４下段の図は、選択部１５による処理の後の状態を示す図である。サーバ装置１０−１の選択部１５は、候補データのリクエスト（Ａ，Ａ，Ａ，Ｂ，Ａ）のうち変更内容が同一のリクエスト（Ａ，Ａ，Ａ，Ａ）の数が閾値（２．５）より大きいため、変更内容が同一のリクエスト（Ａ，Ａ，Ａ，Ａ）のうち一のリクエスト（Ａ）を選択し（自候補データにし）、選択されたリクエストの状態を第２状態に決定する。次に、サーバ装置１０−１の選択部１５は、選択されなかった候補データ（Ａ，Ａ，Ｂ，Ａ）を削除する。次に、サーバ装置１０−１の選択部１５は、自候補データのラウンド番号を１増やすとともに、現ラウンド番号を１増やす。サーバ装置１０−１の選択部１５は、当該自候補データを、送信部１８を介して他のサーバ装置１０に送信する。なお、サーバ装置１０−２及びサーバ装置１０−５の動作もサーバ装置１０−１と同様である。
【００７１】
サーバ装置１０−３の選択部１５は、候補データのリクエスト（Ａ，Ａ，Ｂ）のうち変更内容が同一のリクエストの数が閾値（２．５）以下であり、変更内容が相異なるため、一の候補データ（Ａ）をランダムに選択する（自候補データにする）。次に、サーバ装置１０−１の選択部１５は、選択されなかった候補データ（Ａ，Ｂ）を削除する。次に、サーバ装置１０−１の選択部１５は、自候補データのラウンド番号を１増やすとともに、現ラウンド番号を１増やす。サーバ装置１０−１の選択部１５は、当該自候補データを、送信部１８を介して他のサーバ装置１０に送信する。なお、サーバ装置１０−４の動作もサーバ装置１０−３と同様である。
【００７２】
図１５上段の図は、サーバ装置１０−１〜サーバ装置１０−５の第２記憶部１２が図１４下段の状態であるときに、他のサーバ装置１０から他候補データを受信した後の第２記憶部１２の状態を示す。サーバ装置１０−１の第２記憶部１２の状態は、他のサーバ装置１０から他候補データとして、第２状態のリクエストＡ、第１状態のリクエストＡ、第１状態のリクエストＢ、及び第２状態のリクエストＡを受信したことにより更新されている。サーバ装置１０−２〜サーバ装置１０−５についても、他のサーバ装置１０から他候補データを受信したことにより更新されている。
【００７３】
図１５下段の図は、変更部１６による処理の後の状態を示す図である。サーバ装置１０−１の変更部１６は、候補データのリクエスト（Ａ，Ａ，Ａ，Ｂ，Ａ）のうち状態が第２状態のリクエスト（Ａ，Ａ，Ａ）の数が閾値（２．５）より大きいため、第２状態のリクエスト（Ａ，Ａ，Ａ）を含む候補データのうち一の候補データ（Ａ）を使用して第１記憶部１１の履歴データを更新するとともに第１記憶部１１のデータを変更する。次に、サーバ装置１０−１の変更部１６は、全ての候補データ（Ａ，Ａ，Ａ，Ｂ，Ａ）を削除する。次に、サーバ装置１０−１の変更部１６は、現ラウンド番号を１に戻すともに、現順序番号を１増やす。次に、当該現順序番号を他のサーバ装置１０に送信する。なお、サーバ装置１０−２〜サーバ装置１０−４の動作もサーバ装置１０−１と同様である。
【００７４】
サーバ装置１０−５の変更部１６は、候補データのリクエストのうち、状態が第２状態のリクエストの数が閾値（２．５）以下であり、かつ、第１状態のリクエストを含む候補データと、第２状態のリクエストを含む候補データとが共にあるため、第２状態のリクエスト（Ａ，Ａ）を含む候補データのうち一の候補データを選択し、選択された候補データのリクエスト（Ａ）の状態を第１状態に決定する。
【００７５】
サーバ装置１０−５の第１記憶部１１の履歴データ及びデータは、図９〜図１５で説明した情報処理方法では更新されていないが、他のサーバ装置１０から現順序番号を受信した契機で更新される。すなわち、サーバ装置１０−５の受信部１３が、他のサーバ装置１０から現順序番号を受信すると、サーバ装置１０−５の同期部１７が上述の図８のフローチャートの処理を行うことにより、第１記憶部１１の履歴データ及びデータが更新される。
【００７６】
次に、本実施形態の情報処理方法の正当性について説明する。本実施形態の情報処理方法は、各サーバ装置１０で独立して実行される。つまり、各ラウンドの処理結果はサーバ装置１０間で異なるかもしれないことに注意する。現順序番号のリクエストが確定するラウンドも同一であるとは限らない。また、各サーバ装置１０は非同期的に動作するため、ある時点で実行している処理の順序番号やラウンド番号は、各サーバ装置１０で異なるかもしれない。受信部１３及び同期部１７の処理は、順序番号やラウンド番号が進んでいるサーバ装置１０から通知を受け取ったとき、進んでいる番号にキャッチアップする処理を含む。
【００７７】
本実施形態の情報処理方法（アルゴリズム）の正当性は、以下のＶａｌｉｄｉｔｙ条件、Ａｇｒｅｅｍｅｎｔ条件、及びＴｅｒｍｉｎａｔｉｏｎ条件を満たしていることを証明して示すことができる。
【００７８】
（Ｖａｌｉｄｉｔｙ条件）各順序番号で確定したリクエストは、クライアント装置２０から受け付けられたリクエストのいずれかである。
【００７９】
（Ａｇｒｅｅｍｅｎｔ条件）各順序番号で確定したリクエストは、サーバ装置１０間で異ならない。
【００８０】
（Ｔｅｒｍｉｎａｔｉｏｎ条件）過半数のサーバ装置１０が正常な時、正常なサーバ装置１０では各順序番号のリクエストが確定する。
【００８１】
まず、Ｖａｌｉｄｉｔｙ条件について説明する。本実施形態の情報処理方法は、ラウンド番号＝１のときにクライアント装置２０から受け付けたアクセスを自候補データとし、それ以降のラウンドでは、前のラウンドで決定した自候補データ、及び他のサーバ装置１０から受信した他候補データから、自候補データが決定される。いずれのラウンドでも元々クライアント装置２０から受け付けたリクエスト以外が現れることはない。つまりＶａｌｉｄｉｔｙ条件が成立する。
【００８２】
次に、Ａｇｒｅｅｍｅｎｔ条件について説明する。これには、一連のラウンドによって、現順序番号に関連付けるリクエストを決定したサーバ装置１０があるとき、他のサーバ装置１０においても、次の変更部１６の処理までには、当該現順序番号に同じリクエストが関連付けられることが証明できればよい。まず、変更部１６の処理で第２状態の候補データがあるとしたら、それは唯一であることに注意する。なぜなら、変更部１６の第２状態の候補データは、選択部１５の処理で過半数あったため、第２状態に決定されるからである（選択部１５の処理で過半数を得られる候補データが唯一であることは、各サーバ装置１０が候補データを翻さないことから従う）。
【００８３】
あるサーバ装置１０が、ラウンドｒで現順序番号に関連付けるリクエストを、リクエストＶで最初に決着したとする。これは、そのサーバ装置１０は、ラウンドｒの変更部１６の処理を行う前に、第２状態のリクエストＶを含む候補データを過半数のサーバ装置１０から受信したということである。
【００８４】
つまり、リクエストＶは、過半数のサーバ装置１０で第２状態のリクエストに決定されている。すると、他のサーバ装置１０においても、どのような組み合わせの過半数のサーバ装置１０からラウンドｒの変更部１６の処理に使用する候補データを受け取ったとしても、最低でも一つはリクエストＶが通知されることになる。したがって、すべてのサーバ装置１０において、ラウンドｒで決着するとすればリクエストＶしかありえないし、決着しないとしても、次のラウンドの選択部１５の処理に使用する自候補データがリクエストＶとなる。選択部１５の自候補データがすべてリクエストＶとなることから、前述したとおり、その次の変更部１６の処理で決着する。
【００８５】
ここで、受信部１３及び同期部１７のキャッチアップ動作の正当性について説明する。キャッチアップの基本的な考え方は、自身のサーバ装置１０抜きで過半数の候補データが揃ったラウンドの処理については、自候補データを立てる必要がないため、自候補データを立てずに他のサーバ装置１０での処理結果をそのまま流用するということである。本実施形態の情報処理方法の各ラウンドの処理は、必ずしも自身のサーバ装置１０の候補データを含んでいる必要はないため、他のサーバ装置１０の処理結果を流用したとき、これをあたかも自身のサーバ装置１０で各ラウンドの処理を実施したかのようにみなすことができる。したがって、キャッチアップ動作は本実施形態の情報処理方法の正当性に影響を与えない。
【００８６】
最後にＴｅｒｍｉｎａｔｉｏｎ条件について説明する。本実施形態の情報処理方法は乱数等を利用するアルゴリズムであるため、確率的Ｔｅｒｍｉｎａｔｉｏｎを満たすことを証明する。すなわち、過半数のサーバ装置１０が正常な時、各順序番号のリクエストが永遠に決着しない確率は、限りなく０に近いことを証明する。
【００８７】
まず、過半数のサーバ装置１０が正常な時には、各ラウンドの処理において、候補データを過半数以上集めることができる。したがって、決着に至るまでラウンド番号は増加し続けることになる。逆に、過半数のサーバ装置１０が故障により停止した場合には、候補データを過半数集めることができなくなるため決着に至らなくなる（キャッチアップ動作を除く）。
【００８８】
Ｖｒをそのラウンドの選択部１５の処理の候補データとして現れたリクエストの種類の総数とする。ラウンドが進むにつれてＶｒは単調減少である（つまり、ｒ＜ｓのときＶｒ≧Ｖｓ）。Ｖｒが１となった場合、前述した通り次の変更部１６の処理で決着する。そこで、Ｖｒが１となるまでは、Ｖｒが一定以上の確率で真に減少していくことが示せれば、確率的Ｔｅｒｍｉｎａｔｉｏｎ条件が成立することが判る。実際、Ｖｒ＞１のとき、選択部１５の処理で候補データの過半数を占めないリクエストＶが必ずある。リクエストＶは変更部１６の処理の開始時に、第２状態の候補データにはなり得ず、選択部１５の処理で第１状態の候補データに選ばれない確率は各サーバ装置１０で（１／Ｎ）以上である。したがって、すべてのサーバ装置１０でリクエストＶが変更部１６の候補データに選ばれない確率は（（１／Ｎ）＾Ｎ）以上ある。すべてのサーバ装置１０で変更部１６の候補データに選ばれないと、次の選択部１５の候補データに現れることはないため、その場合Ｖｒは真に減少する。これで、確率的Ｔｅｒｍｉｎａｔｉｏｎ条件が成立することが証明された。
【００８９】
ここで、本実施形態の選択部１５及び変更部１６の処理について補足する。選択部１５の処理は、予備選挙に例えることができ、変更部１６の処理は、信任選挙に例えることができる。これは、変更部１６が、選択部１５が第２状態にしたリクエストを含む候補データ（予備選挙で当選した候補データ）から、現順序番号に関連付けるリクエストを含む候補データを決定（信任選挙で決定）するためである。
【００９０】
次に、本実施形態の情報処理方法の性能について説明する。図１６は、実施形態の情報処理方法の性能を示す図である。なお、図１６では、参考までにＢｅｎ’ｏｒの合意アルゴリズムによる結果についても示している。
【００９１】
図１６は、Ｂｅｎ’ｏｒの合意アルゴリズムと、本実施形態の情報処理方法の性能の比較として、初期値が異なる場合に、同意を得るまでに要するラウンド数をシミュレーションした結果を示す。なお、シミュレーションは、非同期ネットワークモデルでのシミュレーションで行い、１０００回のシミュレーション結果の平均値をとる。多重化するサーバ装置１０の数を３〜２９までについて評価した。
【００９２】
なお、本実施形態の情報処理方法と比較して、Ｂｅｎ’ｏｒの合意アルゴリズムには、下記の特徴がある。
・同意する値は、０か１のどちらかしかない。
・第２状態にできるリクエストがない場合、第２状態にできないことを他のサーバ装置１０に通知する。
・乱拓は、任意の候補データの中から選ぶ。
・各サーバ装置１０で順に各ラウンドを計算する（スキップしない）。
【００９３】
一方、本実施形態の情報処理方法には下記の特徴がある。
・同意する値として、２値ではなく多値が扱える。
・第２状態にできるリクエストがない場合、ランダムに選んだ第１状態の候補データを他のサーバ装置１０に通知する。
・乱拓は、前のラウンドの第１状態の候補データの中からしか選ばない。
・現ラウンド番号より大きいラウンド番号を受信したとき、ラウンド番号を進める。
・自候補データが未決定の時、受信した候補データを自候補データとする。
【００９４】
非同期ネットワークモデルでは、各サーバ装置１０は必ずしも一様に処理を実行するわけではない。例えば、サーバ装置１０−１とサーバ装置１０−２の実行の速度の比が１００：１かもしれない。またあるときには、その比が１：１００に逆転するかもしれない。また、ネットワーク３０内で遅延が発生する可能性がある。シミュレーションでは、ある時点で各サーバ装置１０の処理が進む確率をランダムに設定している。また、各サーバ装置１０へのパケットの配送が進む確率もランダムに設定している。
【００９５】
Ｂｅｎ’ｏｒの合意アルゴリズムの場合、初期値は０か１しか選べないため、各サーバ装置１０でランダムに与えるようにした。本実施形態の情報処理方法は、多値を扱えるため、初期値はすべてのサーバ装置１０で異なる値とした。シミュレーション結果を比較すると、多重度が大きくなるにつれて、本実施形態の情報処理方法の優位性が明らかになる。また、Ｂｅｎ’ｏｒの合意アルゴリズムの場合、同意する値が０か１しかないが、本実施形態の情報処理方法では多値を扱えるという優位性がもともとある。
【００９６】
最後に、本実施形態のサーバ装置１０及びクライアント装置２０のハードウェア構成の一例について説明する。図１７は、実施形態のサーバ装置１０及びクライアント装置２０のハードウェアの構成の一例を示す図である。
【００９７】
本実施形態のサーバ装置１０及びクライアント装置２０は、制御装置３１、主記憶装置３２、補助記憶装置３３、表示装置３４、入力装置３５及び通信装置３６を備える。制御装置３１、主記憶装置３２、補助記憶装置３３、表示装置３４、入力装置３５及び通信装置３６は、バス３７を介して互いに接続されている。
【００９８】
制御装置３１は、補助記憶装置３３から主記憶装置３２に読み出されたプログラムを実行する。主記憶装置３２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリである。補助記憶装置３３は、例えば、ハードディスクやメモリカード等である。表示装置３４は、サーバ装置１０及びクライアント装置２０の状態等を表示する画面である。表示装置３４は、例えば、液晶ディスプレイ等である。入力装置３５は、サーバ装置１０及びクライアント装置２０を操作するためのインタフェースである。入力装置３５は、例えば、キーボードやマウス等である。通信装置３６は、ネットワークに接続するためのインタフェースである。
【００９９】
本実施形態のサーバ装置１０及びクライアント装置２０で実行されるプログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、メモリカード、ＣＤ−Ｒ及びＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録し、コンピュータ・プログラム・プロダクトとして提供してもよい。また、本実施形態のサーバ装置１０及びクライアント装置２０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供してもよい。また、本実施形態のサーバ装置１０及びクライアント装置２０で実行されるプログラムをダウンロードさせずに、インターネット等のネットワーク経由で提供、又は配布してもよい。また、本実施形態のサーバ装置１０及びクライアント装置２０のプログラムを、ＲＯＭ等に予め組み込んで提供してもよい。
【０１００】
本実施形態のサーバ装置１０で実行されるプログラムは、上述したサーバ装置１０の各機能ブロックのうち、プログラムとしても実現可能な機能ブロック（受信部１３、生成部１４、選択部１５、変更部１６、同期部１７及び送信部１８）を含むモジュール構成となっている。
【０１０１】
また、本実施形態のクライアント装置２０で実行されるプログラムは、上述したクライアント装置２０の送信部２１を含むモジュール構成となっている。
【０１０２】
当該モジュールは、実際のハードウェアとしては、制御装置３１が上記記憶媒体からプログラムを読み出して実行することにより、上記各モジュールが主記憶装置３２上にロードされる。すなわち、上記各モジュールは、主記憶装置３２上に生成される。なお、サーバ装置１０及びクライアント装置２０の各機能ブロックの一部、又は全部を、プログラムにより実現せずに、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等のハードウェアにより実現してもよい。
【０１０３】
本実施形態の情報処理システム１００によれば、各サーバ装置１０が選択部１５及び変更部１６を備え、選択部１５及び変更部１６の処理を交互に繰り返すことにより、履歴データの現順序番号に関連付けるリクエストを決定することができる。これにより、どのような組み合わせの障害（サーバ装置の処理の遅延や停止、及びネットワークの輻輳やパケットロス等）があったとしても、サーバ装置１０間のデータの一貫性が保証され、過半数のサーバ装置１０が正常に動作する条件下であれば、現順序番号に関連付けるリクエストを一意に決定することができる。
【０１０４】
本実施形態の情報処理システム１００では、どのような組み合わせの障害があったとしても、履歴データの一貫性が失われないため、複数のサーバ装置１０により多重化される情報の一貫性が失われない。また、本実施形態の情報処理システム１００では、どのような組み合わせの障害があったとしても、サーバ装置１０の情報処理方法（アルゴリズム）は対称であるため、単一故障点（Ｓｉｎｇｌｅ  Ｐｏｉｎｔ  ｏｆ  Ｆａｉｌｕｒｅ）となるサーバ装置１０がない。そのため、クライアント装置２０は、任意のサーバ装置１０にリクエストを送信することができる。
【０１０５】
なお、本実施形態の情報処理方法の説明では、複数のサーバ装置１０の間で履歴データの現順序番号に関連付けるリクエストを一意に決定する場合について説明した。しかしながら、本実施形態の情報処理方法は、サーバ装置１０に限らず、パーソナルコンピュータ、仮想マシン、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上のプロセスなどにも適用可能である。同様に、クライアント装置２０を、パーソナルコンピュータ、仮想マシン、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上のプロセスなどにすることも可能である。また、ネットワーク３０は、ＬＡＮの他に、インターネットなどの広域ネットワーク（ＷＡＮ）であってもよいし、仮想ネットワークやプロセス間通信（ＩＰＣ）などでもよい。
【０１０６】
また、本実施形態の情報処理方法の説明では、選択部１５及び変更部１６の閾値を同一としたが、選択部１５の閾値を第１閾値とし、変更部１６の閾値を第２閾値として、選択部１５と変更部１６とで値の異なる閾値を設定してもよい。
【０１０７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０８】
１０  サーバ装置
１１  第１記憶部
１２  第２記憶部
１３  受信部
１４  生成部
１５  選択部
１６  変更部
１７  同期部
１８  送信部
２０  クライアント装置
３０  ネットワーク
３１  制御装置
３２  主記憶装置
３３  補助記憶装置
３４  表示装置
３５  入力装置
３６  通信装置
３７  バス
【図１】
2015033410.tif 000003
【図２】
2015033410.tif 000004
【図３】
2015033410.tif 000005
【図４】
2015033410.tif 000006
【図５】
2015033410.tif 000007
【図６】
2015033410.tif 000008
【図７】
2015033410.tif 000009
【図８】
2015033410.tif 000010
【図９】
2015033410.tif 000011
【図１０】
2015033410.tif 000012
【図１１】
2015033410.tif 000013
【図１２】
2015033410.tif 000014
【図１３】
2015033410.tif 000015
【図１４】
2015033410.tif 000016
【図１５】
2015033410.tif 000017
【図１６】
2015033410.tif 000018
【図１７】
2015033410.tif 000019
【手続補正書】
【提出日】平成28年12月2日(2016.12.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１以上のクライアント装置と、データを記憶するＮ以上（Ｎは３以上の整数）のサーバ装置とを備える情報処理システムであって、
前記クライアント装置は、
前記データの変更内容を示すリクエストを前記サーバ装置に送信する送信部を備え、
前記サーバ装置は、
前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶する第１記憶部と、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部と、
を備える情報処理システム。
【請求項２】
前記第１閾値と前記第２閾値とは、Ｎ／２である
請求項１に記載の情報処理システム。
【請求項３】
前記選択部は、
前記候補データの前記リクエストのうち前記変更内容が相異なるものがある場合、一の前記候補データを選択し、
前記送信部は、
選択された前記候補データを他の前記サーバ装置に送信する
請求項１又は２に記載の情報処理システム。
【請求項４】
前記変更部は、
前記候補データの前記リクエストのうち、前記第１状態の前記リクエストを含む前記候補データと、前記第２状態の前記リクエストを含む前記候補データとが共にある場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを選択し、選択された前記候補データの前記リクエストの状態を第１状態に決定し、
前記送信部は、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する
請求項１乃至３のいずれか１項に記載の情報処理システム。
【請求項５】
前記変更部は、
前記候補データの前記リクエストのうち、状態が前記第１状態の前記リクエストの数が第２閾値より大きい場合、一の前記候補データを選択し、
前記送信部は、
選択された前記候補データを他の前記サーバ装置に送信する
請求項１乃至４のいずれか１項に記載の情報処理システム。
【請求項６】
前記受信部は、
自身の前記サーバ装置で前記候補データを決定していない場合、他の前記サーバ装置から受信した前記候補データに含まれるリクエストの状態を第１状態に決定し、自身の前記サーバ装置の前記候補データにする
請求項１乃至５のいずれか１項に記載の情報処理システム。
【請求項７】
前記サーバ装置は、
前記候補データを一時的に記憶する第２記憶部を更に備え、
前記受信部は、
他の前記サーバ装置から受信した前記候補データを前記第２記憶部に記憶し、
前記選択部は、
前記選択部が選択しなかった前記リクエストを含む候補データを前記第２記憶部から削除し、
前記変更部は、
前記変更部が選択しなかった前記候補データを前記第２記憶部から削除する
請求項１乃至６のいずれか１項に記載の情報処理システム。
【請求項８】
前記受信部が他の前記サーバ装置から受信した前記候補データの前記現順序番号が、前記履歴データの現順序番号よりも大きい場合、前記第２記憶部の前記候補データを削除し、前記現順序番号を送信した他の前記サーバ装置に、前記履歴データの送信を依頼する同期部を
更に備える請求項７に記載の情報処理システム。
【請求項９】
前記受信部は、
他の前記サーバ装置が前記履歴データを更新したときに、他の前記サーバ装置から前記現順序番号を受信し、
前記同期部は、
他の前記サーバ装置から受信した前記現順序番号が、前記履歴データの現順序番号よりも大きい場合、前記第２記憶部の前記候補データを削除し、前記現順序番号を送信した他の前記サーバ装置に、前記履歴データの送信を依頼し、
前記変更部は、
前記履歴データを更新したときに、前記現順序番号を１増やし、１増やした後の前記順序番号を他の前記サーバ装置に送信する
請求項８に記載の情報処理システム。
【請求項１０】
前記生成部は、
初期値を設定したラウンド番号を更に含めて前記候補データを生成し、
前記第２記憶部は、
最新のラウンド番号を現ラウンド番号として更に記憶し、
前記選択部は、
選択した前記候補データの前記ラウンド番号を１増やすとともに、１増やした後の前記ラウンド番号を前記現ラウンド番号として第２記憶部に記憶し、
前記変更部は、
選択した前記候補データの前記ラウンド番号を１増やすとともに、１増やした後の前記ラウンド番号を前記現ラウンド番号として第２記憶部に記憶し、選択した前記候補データを使用して前記履歴データを更新するときに前記現ラウンド番号を初期値に戻し、
前記同期部は、
前記受信部が前記候補データを受信したときに、受信した前記候補データの前記ラウンド番号が、前記現ラウンド番号よりも大きい場合、前記第２記憶部の前記候補データを削除し、受信した前記候補データを前記第２記憶部に記憶するとともに、前記現ラウンド番号を受信した前記候補データの前記ラウンド番号にする
請求項８又は９に記載の情報処理システム。
【請求項１１】
クライアント装置からデータの変更内容を示すリクエストを受信するサーバ装置であって、
前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶する第１記憶部と、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部と、
を備えるサーバ装置。
【請求項１２】
１以上のクライアント装置と、データを記憶するＮ以上（Ｎは３以上の整数）のサーバ装置とを備える情報処理システムの情報処理方法であって、
クライアント装置が、前記データの変更内容を示すリクエストを前記サーバ装置に送信するステップと、
サーバ装置が、前記リクエストと、前記リクエストの変更内容に基づいて前記データを変更する順序を示す順序番号とを関連付けた履歴データと、前記データとを記憶するステップと、
サーバ装置が、前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信するステップと、
サーバ装置が、前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成するステップと、
サーバ装置が、前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定するステップと、
サーバ装置が、選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信するステップと、
サーバ装置が、前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更するステップと、
を含む情報処理方法。
【請求項１３】
データの変更内容を示すリクエストと、前記リクエストを記憶する順序を示す順序番号とを関連付けた履歴データを記憶する第１記憶部を備え、クライアント装置から前記リクエストを受信するサーバ装置を、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第１状態に決定し、前記第１状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第１閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第２状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第２状態の前記リクエストの数が第２閾値より大きい場合、前記第２状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部
として機能させるためのプログラム。
【国際調査報告】
2015033410.tif 000020
2015033410.tif 000021