(57)【要約】  実施形態の情報処理システムは、サーバ装置と、１以上のクライアント装置とを備える。サーバ装置は、記憶部と、受信部と、記憶制御部とを備える。記憶部は、データと、データを記憶する場所を識別する第１識別情報と、データのバージョンとを関連付けて記憶する。受信部は、記憶部に書き込むデータを示す書き込みデータと、書き込みデータを記憶する場所を識別する第２識別情報と、書き込みデータのバージョンを示す書き込みバージョンとを含む書き込み要求をクライアント装置から受信する。記憶制御部は、第２識別情報と一致する第１識別情報に関連付けられたデータのバージョンが、書き込みバージョンより小さい場合、第１識別情報に関連付けられたデータとバージョンとを、前記書き込みデータと書き込みバージョンとにそれぞれ書き換える。クライアント装置は、書き込み要求をサーバ装置に送信する送信部を備える。
2015033388.tif 000002
【特許請求の範囲】
【請求項１】
サーバ装置と、１以上のクライアント装置とを備える情報処理システムであって、
前記サーバ装置は、
データと、前記データを記憶する場所を識別する第１識別情報と、前記データのバージョンとを関連付けて記憶する記憶部と、
前記記憶部に書き込むデータを示す書き込みデータと、前記書き込みデータを記憶する場所を識別する第２識別情報と、前記書き込みデータのバージョンを示す書き込みバージョンとを含む書き込み要求を前記クライアント装置から受信する受信部と、
前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンより小さい場合、前記第１識別情報に関連付けられたデータとバージョンとを、前記書き込みデータと前記書き込みバージョンとにそれぞれ書き換える記憶制御部と、
を備え、
前記クライアント装置は、
前記書き込み要求を前記サーバ装置に送信する送信部、
を備える情報処理システム。
【請求項２】
前記記憶制御部は、
前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンより大きい場合、前記第１識別情報に関連付けられたデータを前記書き込みデータに書き換えることができないことを示すエラー情報を、前記クライアント装置に送信する
請求項１に記載の情報処理システム。
【請求項３】
前記記憶制御部は、
前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンと一致し、かつ、前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データと、前記書き込みデータとが一致しない場合、前記第１識別情報に関連付けられたデータを前記書き込みデータに書き換えることができないことを示すエラー情報を、前記クライアント装置に送信する
請求項１又は２に記載の情報処理システム。
【請求項４】
前記クライアント装置は、
前記書き込みバージョンを決定する決定部と、
前記第２識別情報毎に前記決定部が決定した書き込みバージョンを記憶する記憶部と、
を更に備え、
前記決定部は、
前記書き込み要求を前記サーバ装置に送信するときに、前記記憶部に記憶されている前記書き込みバージョンに所定の値を加算することにより、送信する前記書き込み要求の前記書き込みバーションを決定する
請求項１乃至３のいずれか１項に記載の情報処理システム。
【請求項５】
前記クライアント装置は、
前記書き込み要求を送信する前に、前記書き込み要求に含まれる前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンを読み出し、読み出した前記バージョンに所定の値を加算することにより前記書き込みバージョンを決定する決定部を更に備える
請求項１乃至３のいずれか１項に記載の情報処理システム。
【請求項６】
前記情報処理システムは、
複数のクライアント装置を備え、
前記複数のクライアント装置の前記決定部が加算する前記所定の値は、互いに素な整数である
請求項４又は５に記載の情報処理システム。
【請求項７】
前記情報処理システムは、
現用系のシステムである第１の前記クライアント装置と、待機系のシステムである第２の前記クライアント装置とを備え、
前記第２のクライアント装置の前記決定部は、
前記第１のクライアント装置から前記第２のクライアント装置に切り替わるときに、前記サーバ装置のデータを変更する場合、変更するデータの前記バージョンを読み出し、読み出した前記バージョンに、前記所定の値よりも大きい値を加算することにより、前記変更するデータの前記書き込みバージョンを決定する
請求項４乃至６のいずれか１項に記載の情報処理システム。
【請求項８】
前記情報処理システムは、
複数のクライアント装置を備え、
前記クライアント装置は、
前記サーバ装置に書き込むデータの合意を前記複数のクライアント装置の間でとる場合、前記合意をとるデータと、前記複数のクライアント装置で同じ前記書き込みバージョンと、前記複数のクライアント装置で同じ前記第２識別情報とを含む書き込み要求である合意書き込み要求を前記サーバ装置に送信した後に、前記合意書き込み要求に含まれる前記第２識別情報を含む読み出し要求を前記サーバ装置に送信し、読み出された前記データにより前記サーバ装置に書き込むデータの合意をとる合意部を更に備える
請求項１乃至７のいずれか１項に記載の情報処理システム。
【請求項９】
１以上のクライアント装置と接続されたサーバ装置であって、
データと、前記データを記憶する場所を識別する第１識別情報と、前記データのバージョンとを関連付けて記憶する記憶部と、
前記記憶部に書き込むデータを示す書き込みデータと、前記書き込みデータを記憶する場所を識別する第２識別情報と、前記書き込みデータのバージョンを示す書き込みバージョンとを含む書き込み要求を前記クライアント装置から受信する受信部と、
前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンより小さい場合、前記第１識別情報に関連付けられたデータとバージョンとを、前記書き込みデータと前記書き込みバージョンとにそれぞれ書き換える記憶制御部と、
を備えるサーバ装置。
【請求項１０】
サーバ装置と、１以上のクライアント装置とを備える情報処理システムの情報処理方法であって、
前記サーバ装置は、データと、前記データを記憶する場所を識別する第１識別情報と、前記データのバージョンとを関連付けて記憶する記憶部を備え、
サーバ装置が、前記記憶部に書き込むデータを示す書き込みデータと、前記書き込みデータを記憶する場所を識別する第２識別情報と、前記書き込みデータのバージョンを示す書き込みバージョンとを含む書き込み要求を前記クライアント装置から受信するステップと、
サーバ装置が、前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンより小さい場合、前記第１識別情報に関連付けられたデータとバージョンとを、前記書き込みデータと前記書き込みバージョンとにそれぞれ書き換えるステップと、
クライアント装置が、前記書き込み要求を前記サーバ装置に送信するステップと、
を含む情報処理方法。
【請求項１１】
１以上のクライアント装置と接続され、データと、前記データを記憶する場所を識別する第１識別情報と、前記データのバージョンとを関連付けて記憶する記憶部を備えるコンピュータを、
前記記憶部に書き込むデータを示す書き込みデータと、前記書き込みデータを記憶する場所を識別する第２識別情報と、前記書き込みデータのバージョンを示す書き込みバージョンとを含む書き込み要求を前記クライアント装置から受信する受信部と、
前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンより小さい場合、前記第１識別情報に関連付けられたデータとバージョンとを、前記書き込みデータと前記書き込みバージョンとにそれぞれ書き換える記憶制御部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理システム、サーバ装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
情報処理システムで記憶するデータの整合性を保つための技術が知られている。当該技術には、例えば、データ更新時の処理順序性を保証できるようにする方法などがある。【０００３】
また、データを記憶する手法の１つとしてキーバリューストアが知られている。キーバリューストアは、データ（バリュー）と、当該データを識別するためのキーとが関連付けられたデータ構造によりデータを記憶する。一般に、キーバリューストアは、ネットワークを介したクライアントサーバシステムやクラウドシステムなどで利用される。すなわち、キーバリューストアによりデータを記憶するサーバ装置と、当該キーバリューストアにアクセスするクライアント装置とを備えるシステムで利用されている。クライアント装置は、キーを指定することによりキーバリューストアのデータを読み出す。また、クライアント装置は、キーとデータ（バリュー）との組によりキーバリューストアを更新する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−２４２０１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、キーバリューストアは、トランザクション型データベースとは異なり、データの整合性を保つことが難しい。例えば、キーバリューストアは、クライアント装置から同時並列的にアクセスされても、当該アクセスの順序を調停することができない。また、キーバリューストアは、ネットワークの遅延や障害などによって、クライアント装置から送信されたアクセス要求の順序が入れ替わった場合であってもそのまま処理してしまう。
【課題を解決するための手段】
【０００６】
実施形態の情報処理システムは、サーバ装置と、１以上のクライアント装置とを備える。サーバ装置は、記憶部と、受信部と、記憶制御部とを備える。記憶部は、データと、前記データを記憶する場所を識別する第１識別情報と、前記データのバージョンとを関連付けて記憶する。受信部は、前記記憶部に書き込むデータを示す書き込みデータと、前記書き込みデータを記憶する場所を識別する第２識別情報と、前記書き込みデータのバージョンを示す書き込みバージョンとを含む書き込み要求を前記クライアント装置から受信する。記憶制御部は、前記第２識別情報と一致する前記第１識別情報に関連付けられた前記データのバージョンが、前記書き込みバージョンより小さい場合、前記第１識別情報に関連付けられたデータとバージョンとを、前記書き込みデータと前記書き込みバージョンにそれぞれ書き換える。クライアント装置は、前記書き込み要求を前記サーバ装置に送信する送信部を備える。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１実施形態の情報処理システムの構成の一例を示す図である。
【図２】図２は、第１実施形態のサーバ装置及びクライアント装置の構成の一例を示す図である。
【図３】図３は、第１実施形態のサーバ装置の記憶部のデータ構造の一例を示す図である。
【図４】図４は、第１実施形態のクライアント装置とサーバ装置との間で、データの書き込み時に送受信するデータの一例を説明するための図である。
【図５】図５は、第１実施形態のクライアント装置がデータを書き込むときの動作の一例を示すフローチャートである。
【図６】図６は、第１実施形態のサーバ装置が書き込み要求を受信したときの動作の一例を示すフローチャートである。
【図７】図７は、第１実施形態のクライアント装置とサーバ装置との間で、データの読み出し時に送受信するデータの一例を説明するための図である。
【図８】図８は、第１実施形態のクライアント装置がデータを読み出すときの動作の一例を示すフローチャートである。
【図９】図９は、第１実施形態のサーバ装置が読み出し要求を受信したときの動作の一例を示すフローチャートである。
【図１０】図１０は、第２実施形態のサーバ装置及びクライアント装置の構成の一例を示す図である。
【図１１】図１１は、第２実施形態のクライアント装置とサーバ装置との間で、データの書き込み時に送受信するデータの一例を説明するための図である。
【図１２】図１２は、第２実施形態のクライアント装置がデータを書き込むときの動作の一例を示すフローチャートである。
【図１３】図１３は、第３実施形態の情報処理システムの構成の一例を示す図である。
【図１４】図１４は、第３実施形態のサーバ装置及びクライアント装置の構成の一例を示す図である。
【図１５】図１５は、第３実施形態の情報処理システムでフェイルオーバー（系切替）が発生したときの動作の一例を示すフローチャートである。
【図１６】図１６は、第４実施形態のサーバ装置及びクライアント装置の構成の一例を示す図である。
【図１７】図１７は、第４実施形態のクライアント装置がデータの合意をとるときの動作の一例を示すフローチャートである。
【図１８】図１８は、第１〜第４実施形態のサーバ装置及びクライアント装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【０００８】
以下、添付図面を参照して実施形態の情報処理システム、情報処理方法及びプログラムについて説明する。
【０００９】
（第１実施形態）
図１は、第１実施形態の情報処理システム１００の構成の一例を示す図である。本実施形態の情報処理システム１００は、サーバ装置１０と、クライアント装置２０−１、・・・、クライアント装置２０−ｎ（ｎは１以上の整数）と、ネットワーク３０とを備える。以下、クライアント装置２０−１、・・・、及びクライアント装置２０−ｎを区別する必要がない場合は、単にクライアント装置２０という。サーバ装置１０及びクライアント装置２０は、互いに通信できるようにネットワーク３０を介して接続されている。なお、サーバ装置１０及びクライアント装置２０との間の通信手段は、有線であっても無線であってもよく、また、両方を組み合わせてもよい。
【００１０】
図２は、第１実施形態のサーバ装置１０及びクライアント装置２０の構成の一例を示す図である。本実施形態のサーバ装置１０は、記憶部１１、受信部１２、記憶制御部１３及び送信部１４を備える。記憶部１１は、データを記憶する。
【００１１】
図３は、第１実施形態のサーバ装置１０の記憶部１１のデータ構造の一例を示す図である。記憶部１１は、データ（バリュー）と、当該データを記憶する場所を識別するためのキー（本発明の「第１識別情報」に相当）と、当該データのバージョンとを関連付けて記憶する。
【００１２】
図２に戻り、受信部１２は、書き込み要求又は読み出し要求をクライアント装置２０から受信すると、当該書き込み要求又は当該読み出し要求を記憶制御部１３に送信する。書き込み要求は、記憶部１１に書き込むデータを示す書き込みデータと、書き込みデータを記憶する場所を識別するための書き込みキー（本発明の「第２識別情報」に相当）と、書き込みデータのバージョンを示す書き込みバージョンとを含む。読み出し要求は、記憶部１１から読み出すデータが記憶されている場所を識別するための読み出しキーを含む。
【００１３】
記憶制御部１３は、書き込み要求又は読み出し要求を受信部１２から受信する。記憶制御部１３は、書き込み要求を受信部１２から受信した場合、書き込みキーと一致する記憶部１１のキーに関連付けられたデータのバージョンと、書き込みバージョンとの比較結果に応じて、記憶部１１に書き込みデータを記憶するか否かを制御する。そして、記憶制御部１３は、書き込みの成功又は失敗を示す終了ステータスを送信部１４に送信する。なお、記憶制御部１３の記憶制御の詳細な説明は、図６のフローチャートを参照して後述する。
【００１４】
記憶制御部１３は、読み出し要求を受信部１２から受信した場合、読み出し要求に含まれる読み出しキーと一致する記憶部１３のキーに関連付けられたデータと、当該データのバージョンとを記憶部１１から読み出す。記憶制御部１３は、当該データと、当該データのバージョンとを含む応答データを作成し、当該応答データを送信部１４に送信する。
【００１５】
送信部１４は、記憶制御部１３から受信したデータをクライアント装置２０に送信する。当該データは、書き込み要求の終了ステータスや、読み出し要求の応答データ（データ及び当該データのバージョン）である。
【００１６】
クライアント装置２０は、送信部２１、記憶部２２、決定部２３及び受信部２４を備える。送信部２１は、読み出しキーを含む読み出し命令を決定部２３から受信すると、当該読み出しキーを含む読み出し要求を生成し、当該読み出し要求をサーバ装置１０に送信する。決定部２３は、例えば、クライアント装置２０で動作するアプリケーションプログラムにより生成される機能ブロックである。
【００１７】
また、送信部２１は、書き込みバージョン、書き込みキー及び書き込みデータを含む書き込み命令を決定部２３から受信すると、当該書き込みバージョン、書き込みキー及び書き込みデータを含む書き込み要求を生成する。送信部２１は、当該書き込み要求をサーバ装置１０に送信する。
【００１８】
記憶部２２は、書き込みキー毎に書き込みバージョンを記憶する。決定部２３は、サーバ装置１０のデータの書き込み処理が発生したときに、書き込み命令を生成し、当該書き込み命令を送信部２１に送信する。当該書き込み処理は、決定部２３が自らの処理の契機により発生させてもよいし、決定部２３が、図２では図示されない他の機能ブロックから書き込みを指示されたときに発生させてもよい。決定部２３は、当該書き込み処理に応じて定まる書き込みデータの書き込みキーを使用して記憶部２２から書き込みバージョンを読み出す。決定部２３は、当該書き込みバージョンに所定の値を加算することにより、送信する書き込み要求の書き込みバーションを決定する。所定の値は例えば１である。なお、所定の値は１に限られず任意の値でよい。また、書き込みバージョンの記憶サイズは、例えば６４ｂｉｔ長の符号なし整数である。また、書き込みバージョンの初期値は、例えば０である。
【００１９】
決定部２３は、当該書き込みキーと、決定した書き込みバージョンとを関連付けて記憶部２２に記憶するとともに、当該書き込みキーと、当該決定した書き込みバージョンと、当該書き込みデータとを含む書き込み命令を送信部２１に送信する。
【００２０】
また、決定部２３は、サーバ装置１０のデータの読み出し処理が発生したときに、読み出し命令を生成し、当該読み出し命令を送信部２１に送信する。当該読み出し処理は、決定部２３が自らの処理の契機により発生させてもよいし、決定部２３が、図２では図示されない他の機能ブロックから書き込みを指示されたときに発生させてもよい。
【００２１】
受信部２４は、書き込み要求の終了ステータスや、読み出し要求の応答データなどをサーバ装置１０から受信する。受信した内容は、決定部２３へ伝達される。
【００２２】
次に、第１実施形態のクライアント装置２０がサーバ装置１０にデータを書き込む方法の一例について説明する。図４は、第１実施形態のクライアント装置２０とサーバ装置１０との間で、データの書き込み時に送受信するデータの一例を説明するための図である。図５は、第１実施形態のクライアント装置２０がデータを書き込むときの動作の一例を示すフローチャートである。図６は、第１実施形態のサーバ装置１０が書き込み要求を受信したときの動作の一例を示すフローチャートである。
【００２３】
まず、図４及び図５を参照してクライアント装置２０の動作について説明する。決定部２３で書き込み処理が発生する（ステップＳ１）。
【００２４】
次に、決定部２３は、当該書き込み処理に応じて定まる書き込みキーを使用して記憶部２２から書き込みバージョンを読み出す。決定部２３は、当該書き込みバージョンに所定の値を加算することにより、送信する書き込み要求の書き込みバーションを決定する（ステップＳ２）。
【００２５】
次に、決定部２３は、当該書き込みバージョン、書き込みキー及び書き込みデータを含む書き込み命令を送信部２１に送信する。決定部２３は、当該書き込みキーと、決定した書き込みバージョンとを関連付けて記憶部２２に記憶する（ステップＳ３）。
【００２６】
次に、送信部２１は、決定部２３から書き込みバージョン、書き込みキー及び書き込みデータを含む書き込み命令を受信すると、当該書き込みバージョン、書き込みキー及び書き込みデータを含めた書き込み要求をサーバ装置１０に送信する（ステップＳ４）。次に、受信部２４は、書き込み要求の終了ステータスをサーバ装置１０から受信する（ステップＳ５）。なお、受信部２４が、一定の時間が経過しても、終了ステータスを受信しない場合、送信部２１は、当該書き込み要求を再送する。
【００２７】
次に、図４及び図６を参照してサーバ装置１０の動作について説明する。受信部１２は、書き込み要求をクライアント装置２０から受信する（ステップＳ１１）。受信部１２は、当該書き込み要求を記憶制御部１３に送信する。記憶制御部１３は、書き込み要求を受信部１２から受信する。
【００２８】
次に、記憶制御部１３は、書き込みキーと一致する記憶部１１のキーに関連付けられたデータのバージョンが、書き込みバージョンより小さいか否かを判定する（ステップＳ１２）。書き込みキーと一致する記憶部１１のキーに関連付けられたデータのバージョンが、書き込みバージョンより小さい場合（ステップＳ１２、Ｙｅｓ）、記憶部１１の当該キーに関連付けられたデータとバージョンとを、書き込みデータと書き込みバージョンとにそれぞれ書き換え（ステップＳ１４）、ステップＳ１７に進む。書き込みキーと一致する記憶部１１のキーに関連付けられたデータのバージョンが、書き込みバージョン以上である場合（ステップＳ１２、Ｎｏ）、ステップＳ１３に進む。
【００２９】
次に、記憶制御部１３は、書き込みキーと一致する記憶部１１のキーに関連付けられたデータのバージョンが、書き込みバージョンと一致し、かつ、書き込みキーと一致する記憶部１１のキーに関連付けられたデータと、書き込みデータとが一致するか否かを判定する（ステップＳ１３）。一致する場合（ステップＳ１３、Ｙｅｓ）、書き込みの成功とし（ステップＳ１５）、ステップＳ１７に進む。すなわち、この場合（ステップＳ１３、Ｙｅｓ）の書き込み要求は、記憶制御部１３がリトライ（再送信）であると判断して書き込みの成功として扱う。
【００３０】
一致しない場合（ステップＳ１３、Ｎｏ）、記憶制御部１３は、書き込み要求に含まれる書き込みバージョンの指定を受け付けることができないため、書き込みデータを記憶部１１に記憶せずにバージョンエラーとし（ステップＳ１６）、ステップＳ１７に進む。
【００３１】
次に、記憶制御部１３は、書き込みの成功（ステップＳ１４又はステップＳ１５の場合）又は失敗（ステップＳ１６の場合）を示す終了ステータスを、送信部１４を介してクライアント装置２０に送信する（ステップＳ１７）。
【００３２】
次に、第１実施形態のクライアント装置２０がサーバ装置１０からデータを読み出す方法の一例について説明する。図７は、第１実施形態のクライアント装置２０とサーバ装置１０との間で、データの読み出し時に送受信するデータの一例を説明するための図である。図８は、第１実施形態のクライアント装置２０がデータを読み出すときの動作の一例を示すフローチャートである。図９は、第１実施形態のサーバ装置１０が読み出し要求を受信したときの動作の一例を示すフローチャートである。
【００３３】
まず、図７及び図８を参照してクライアント装置２０の動作について説明する。クライアント装置２０の決定部２３で読み出し処理が発生する（ステップＳ２１）。次に、送信部２１は、当該読み出し処理に応じて定まる読み出しキーを決定部２３から受けとり、それを含む読み出し要求をサーバ装置１０に送信する（ステップＳ２２）。次に、受信部２４は、読み出し要求に応じて応答データをサーバ装置１０から受信する（ステップＳ２３）。応答データは、サーバ装置１０の記憶部１１から読み出されたデータ及び当該データのバージョンである。
【００３４】
次に、図７及び図９を参照してサーバ装置１０の動作について説明する。受信部１２は、読み出し要求をクライアント装置２０から受信する（ステップＳ３１）。受信部１２は、当該読み出し要求を記憶制御部１３に送信する。記憶制御部１３は、読み出し要求を受信部１２から受信する。次に、記憶制御部１３は、読み出し要求に含まれる読み出しキーと一致する記憶部１１のキーに関連付けられたデータ及びバージョンを記憶部１１から読み出す（ステップＳ３２）。記憶制御部１３は、当該データ及び当該データのバージョンを含む応答データを生成する。次に、記憶制御部１３は、当該応答データを、送信部１４を介してクライアント装置２０に送信する（ステップＳ３３）。
【００３５】
次に、本実施形態の情報処理システム１００の情報処理方法の効果について説明する。例えば、本実施形態の情報処理方法は、下記のシナリオ１のような場合に、サーバ装置１０の記憶部１１の状態と、クライアント装置２０による書き込み処理との間で不整合を引き起こさないようにすることができる。なお、下記の例では、決定部２３が、バージョンに加算する所定の値を１とする。
【００３６】
＜シナリオ１＞
１．クライアント装置２０が、書き込み要求Ａ（キーＫ、データＡ、バージョンＶ）をサーバ装置１０に送信する。
２．サーバ装置１０は、ネットワーク３０の遅延などの影響により、書き込み要求Ａを受信しない。
３．クライアント装置２０は、書き込み要求Ａを送信してから所定の時間内に終了ステータスをサーバ装置１０から受信しないため、書き込み要求Ａの送信処理がタイムアウトする。
４．クライアント装置２０は、書き込み要求Ａ’（キーＫ、データＡ、バージョンＶ）をサーバ装置１０に送信する（書き込み要求Ａの再送）。
５．サーバ装置１０は、書き込み要求Ａ’を先に受信して書き込み処理を行う。記憶部１１の内容は、（キーＫ，データＡ、バージョンＶ）となる。
６．クライアント装置２０が、書き込み要求Ｂ（キーＫ、データＢ、バージョンＶ＋１）をサーバ装置１０に送信する。
７．サーバ装置１０は、書き込み要求Ｂを受信して書き込み処理を行う。記憶部１１の内容は、（キーＫ，データＢ、バージョンＶ＋１）となる。
８．仮に、サーバ装置１０は、遅延していた書き込み要求Ａ（キーＫ、データＡ、バージョンＶ）を受信したとしても、（書き込み要求のバージョン）＜（記憶部１１のバージョンＶ＋１）であるため、書き込み要求Ａの書き込み処理を行わない。
【００３７】
以上のように、本実施形態の情報処理システム１００では、ネットワーク３０が高品質ではなく、書き込み要求の遅延や紛失などが起こりうる場合であっても、サーバ装置１０の記憶部１１の状態と、クライアント装置２０による書き込み処理との間で不整合を引き起こさないようにすることができる。例えば、本実施形態の情報処理システム１００は、サーバ装置１０で書き込み要求Ａと書き込み要求Ｂの受信順序が逆転して受信された場合であっても、書き込み要求Ｂによって更新した記憶部１１のデータＢが、書き込み要求Ａによって上書きされることがない。そのため、サーバ装置１０の記憶部１１の状態と、クライアント装置２０による書き込み処理との間で不整合を引き起こさないようにすることができる。
【００３８】
なお、本実施形態の情報処理システム１００は、クライアント装置２０の数をｎ（ｎは１以上の整数）とし、それぞれのクライアント装置２０の記憶部２２は、書き込みキー毎に書き込みバージョンを記憶する。そのため、同じキーのデータを更新するクライアント装置２０が複数ある場合は、当該クライアント装置２０は、互いに使用したバージョンの値を通知することにより、記憶部２２の内容を同期してもよい。例えば、当該クライアント装置２０は、書き込み要求を送信する前に、同じキーのデータを更新する他のクライアント装置２０に、書き込みキー及び当該書き込みキーに使用したバージョンを通知する。
【００３９】
また、複数のクライアント装置２０の決定部２３がバージョンを決定するときに加算する所定の値を、クライアント装置２０毎に変えてもよい。例えば、複数のクライアント装置２０の決定部２３が加算する所定の値を、互いに素な整数としてもよい。これにより、サーバ装置１０の記憶部１１のデータを更新したクライアント装置２０を特定するときなどに、バージョンを利用することができる。
【００４０】
（第２実施形態）
次に、第２実施形態の情報処理システム１００について説明する。本実施形態の情報処理システム１００の構成は、第１実施形態の情報処理システム１００の構成（図１参照）と同じであるため説明を省略する。本実施形態の情報処理システム１００は、クライアント装置２０でバーションを記憶しない点が第１実施形態の情報処理システム１００と異なる。また、クライアント装置２０がサーバ装置１０にデータを書き込むときの動作が第１実施形態の動作と異なる。なお、クライアント装置２０がサーバ装置１０からデータを読み出すときの動作は、第１実施形態の動作と同様であるため説明を省略する。
【００４１】
図１０は、第２実施形態のサーバ装置１０及びクライアント装置２０の構成の一例を示す図である。本実施形態のサーバ装置１０の構成は、第１実施形態のサーバ装置１０の構成と同じであるため説明を省略する。本実施形態のクライアント装置２０の構成は、記憶部２２を備えていない点が第１実施形態のクライアント装置２０の構成と異なる。
【００４２】
第２実施形態のクライアント装置２０がサーバ装置１０にデータを書き込む方法の一例について説明する。図１１は、第１実施形態のクライアント装置２０とサーバ装置１０との間で、データの書き込み時に送受信するデータの一例を説明するための図である。図１２は、第１実施形態のクライアント装置２０がデータを書き込むときの動作の一例を示すフローチャートである。なお、本実施形態のサーバ装置１０が書き込み要求を受信したときの動作は、第１実施形態のサーバ装置１０の動作と同じであるため説明を省略する。
【００４３】
クライアント装置２０の決定部２３で書き込み処理が発生する（ステップＳ４１）。次に、送信部２１は、書き込み命令に応じて定まる書き込みキーに関連付けられたバージョンを読み出すため、当該書き込みキーを含む読み出し要求をサーバ装置１０に送信する（ステップＳ４２）。次に、受信部２４は、当該書き込みキーと、当該書き込みキーに関連付けられたバージョンｓとを含む応答データをサーバ装置１０から受信する（ステップＳ４３）。
【００４４】
受信部２４は、当該応答データを決定部２３に送信する。次に、決定部２３は、当該応答データを受信部２４から受信すると、当該応答データに含まれるバージョンｓに所定の値を加算することにより書き込みバージョンｔを決定する（ステップＳ４４）。決定部２３は、当該書き込みキーと書き込みデータとバージョンｔとを送信部２１に送信する。次に、送信部２１は、書き込みキー、書き込みデータ及び当該書き込みデータのバージョンｔを含む書き込み要求をサーバ装置１０に送信する（ステップＳ４５）。次に、受信部２４は、書き込み要求の終了ステータスをサーバ装置１０から受信する（ステップＳ４６）。
【００４５】
本実施形態の情報処理システム１００によれば、クライアント装置２０がバージョンを記憶する記憶部２２を備えずに、サーバ装置１０の記憶部１１の状態と、クライアント装置２０による書き込み処理との間で不整合を引き起こさないようにすることができる。
【００４６】
なお、クライアント装置２０の送信部２１は、所定の時間内にサーバ装置１０から終了ステータスを受信できないときなどに、書き込み要求の送信をリトライする場合、上述のステップＳ４２の処理を行わずに、送信した書き込み要求と同じ内容の書き込み要求を送信する（同じバージョンを使用して送信する）。
【００４７】
（第３実施形態）
次に、第３実施形態の情報処理システム１００について説明する。図１３は、第３実施形態の情報処理システム１００の構成の一例を示す図である。本実施形態の情報処理システム１００は、サーバ装置１０と、クライアント装置２０−１及びクライアント装置２０−２と、ネットワーク３０とを備える。サーバ装置１０と、クライアント装置２０−１及びクライアント装置２０−２とは、互いに通信できるようにネットワーク３０を介して接続されている。本実施形態の情報処理システム１００は、現用系のシステムであるクライアント装置２０−１と、待機系のシステムであるクライアント装置２０−２とを備えた冗長システムである。すなわち、現用系のクライアント装置２０−１に障害が発生した場合、現用系のクライアント装置２０−１から、待機系のクライアント装置２０−２にフェイルオーバー（系切替）する。
【００４８】
図１４は、第３実施形態のサーバ装置１０及びクライアント装置２０の構成の一例を示す図である。本実施形態のサーバ装置１０の構成は、第１実施形態と同様であるため説明を省略する。本実施形態のクライアント装置２０は、送信部２１、記憶部２２、決定部２３、受信部２４及び冗長制御部２５を備える。本実施形態のクライアント装置２０の構成は、第１実施形態のクライアント装置２０の構成に冗長制御部２５が追加されている。送信部２１、記憶部２２、決定部２３及び受信部２４については、第１実施形態のクライアント装置２０と同様であるため説明を省略する。
【００４９】
現用系のクライアント装置２０−１の冗長制御部２５−１は、クライアント装置２０−１が正常に動作していることを示す信号（以下、「ハートビート信号」という。）を、ネットワーク３０を介して定期的に待機系のクライアント装置２０−２の冗長制御部２５−２に送信する。待機系の冗長制御部２５−２は、所定の時間内にハートビート信号を受信できない場合に、現用系のクライアント装置２０−１に障害が発生したことを検出する。待機系の冗長制御部２５−２は、現用系のクライアント装置２０−１に障害が発生したことを検出するとフェイルオーバー（系切替）を行う。
【００５０】
図１５は、第３実施形態の情報処理システムでフェイルオーバー（系切替）が発生したときの動作の一例を示すフローチャートである。なお、図１５のフローチャートでは、サーバ装置１０のデータの変更に係るフェイルオーバーの処理のみを記載している。待機系の冗長制御部２５−２は、現用系のクライアント装置２０−１の障害を検出し、フェイルオーバー（系切替）の動作を開始する（ステップＳ５１）。次に、待機系の冗長制御部２５−２は、引き継ぐべきデータのキーを特定する（ステップＳ５２）。
【００５１】
次に、送信部２１は、当該キーに関連付けられたデータとバージョンを読み出すため、当該キーを含む読み出し要求をサーバ装置１０に送信する（ステップＳ５３）。次に、受信部２４は、当該キーに関連付けられたデータとバージョンとを含む応答データをサーバ装置１０から受信する（ステップＳ５４）。
【００５２】
受信部２４は、当該応答データを決定部２３に送信する。次に、決定部２３は、当該応答データを受信部２４から受信すると、当該応答データに含まれるバージョンに所定の値を加算することにより書き込みバージョンを決定する（ステップＳ５５）。決定部２３は、当該書き込みキーと当該データとバージョンとを送信部２１に送信する。次に、送信部２１は、書き込みキー、書き込みデータ及び当該書き込みデータのバージョンを含む書き込み要求をサーバ装置１０に送信する（ステップＳ５６）。つまり、同一のデータをバージョンのみ変えて書き戻す。次に、受信部２４は、書き込み要求の終了ステータスをサーバ装置１０から受信する（ステップＳ５７）。
【００５３】
次に、本実施形態の情報処理システム１００の情報処理方法の効果について説明する。例えば、本実施形態の情報処理方法は、フェイルオーバー（系切替）が発生した場合に、サーバ装置１０の記憶部１１の状態と、クライアント装置２０による書き込み処理との間で不整合を引き起こさないようにすることができる。下記、シナリオ２の場合を例にして説明する。なお、下記の例では、決定部２３が、バージョンに加算する所定の値を１とする。
【００５４】
＜シナリオ２＞
１．現用系のクライアント装置２０−１が、書き込み要求Ａ（キーＫ、データＡ、バージョンＶ）をサーバ装置１０に送信する。
２．サーバ装置１０は、ネットワーク３０の遅延などの影響により、書き込み要求Ａを受信しない。
３．待機系のクライアント装置２０−２が、現用系のクライアント装置２０−１の障害を検出し、フェイルオーバー（系切替）が発生する。すなわち、クライアント装置２０−２が現用系になる。
４．現用系のクライアント装置２０−２は、キーＫのバージョン（Ｖ−１）と引き継ぐデータＢをサーバ装置１０から読み出す。このとき記憶部１１の内容は、（キーＫ，データＢ、バージョンＶ−１）である。
５．現用系のクライアント装置２０−２は、書き込み要求Ｂ（キーＫ、データＢ、バージョンＶ）をサーバ装置１０に送信する。
６．サーバ装置１０は、書き込み要求Ｂを受信して書き込み処理を行う。記憶部１１の内容は、（キーＫ，データＢ、バージョンＶ）となる。
７．仮に、サーバ装置１０は、遅延していた書き込み要求Ａ（キーＫ、データＡ、バージョンＶ）を受信しても、（記憶部１１のキーＫのバージョンＶ）＝（書き込み要求ＡのバージョンＶ）、かつ、（記憶部１１のキーＫのデータ（Ａ））≠（書き込み要求Ａのデータ（Ｂ））であるためバージョンエラーとなり、書き込み要求Ａによる書き込み処理を行わない。
【００５５】
また、実施形態の情報処理方法は、スプリットブレインが発生した場合にも効果がある。スプリットブレインとは、ネットワークの障害などによりハートビート信号が待機系のクライアント装置２０−２に届かないため、クライアント装置２０−２が、現用系のクライアント装置２０−１が正常に動作していても、現用系のクライアント装置２０−１に障害が発生したと判定してしまう現象である。これにより、現用系のクライアント装置が、意図せずに同時に２台動作してしまうという問題が発生する。スプリットブレインが発生した場合の本実施形態の情報処理方法の効果について、下記シナリオ３を例にして説明する。なお、下記の例では、決定部２３が、バージョンに加算する所定の値を１とする。
【００５６】
＜シナリオ３＞
１．スプリットブレインが発生する。
２．待機系のクライアント装置２０−２が、現用系のクライアント装置２０−１の障害を検出し、クライアント装置２０−２が現用系になる。
３．現用系のクライアント装置２０−２は、キーＫのバージョン（Ｖ−１）と引き継ぐデータＢをサーバ装置１０から読み出す。このとき記憶部１１の内容は、（キーＫ，データＢ、バージョンＶ−１）である。
４．現用系のクライアント装置２０−２は、書き込み要求Ｂ（キーＫ、データＢ、バージョンＶ）をサーバ装置１０に送信する。
５．サーバ装置１０は、書き込み要求Ｂを受信して書き込み処理を行う。記憶部１１の内容は、（キーＫ，データＢ、バージョンＶ）となる。
６．以前の現用系のクライアント装置２０−１が、書き込み要求Ａ（キーＫ、データＡ、バージョンＶ）をサーバ装置１０に送信する。
７．サーバ装置１０は、書き込み要求Ａ（キーＫ、データＡ、バージョンＶ）を受信しても、（記憶部１１のキーＫのバージョンＶ）＝（書き込み要求ＡのバージョンＶ）、かつ、（記憶部１１のキーＫのデータ（Ｂ））≠（書き込み要求Ａのデータ（Ａ））であるためバージョンエラーとなり、書き込み要求Ａによる書き込み処理を行わない（フェンスオフ）。
８．現用系のクライアント装置２０−１は、バージョンエラーを示す情報を含む終了ステータスをサーバ装置１０から受信することにより、クライアント装置２０−２が現用系に移行したことを検出する。
９．現用系のクライアント装置２０−１は、自主的に待機系に移行する。
【００５７】
以上のように、本実施形態の情報処理システム１００では、クライアント装置２０の系切替やスプリットブレインなどが発生した場合であっても、サーバ装置１０の記憶部１１の状態と、クライアント装置２０による書き込み処理との間で不整合を引き起こさないようにすることができる。
【００５８】
なお、上述のステップＳ５５の処理において、決定部２３が、応答データに含まれるバージョンに所定の値よりも十分に大きな値を加算することにより書き込みバージョンを決定してもよい。これにより、例えば、クライアント装置２０−１が、同一のデータを、バージョンを上げながら何度も更新しているようなときに、系切替やスプリットブレインが発生しても本実施形態の情報処理方法は効果がある。なお、所定の値よりも十分に大きな値は、例えば、（系切替処理の最中に想定される系切替前のクライアント装置２０によるデータの更新回数）×（所定の値）よりも大きい値とする。
【００５９】
（第４実施形態）
次に、第４実施形態の情報処理システム１００について説明する。本実施形態の情報処理システム１００の構成は、第１実施形態の情報処理システム１００の構成（図１参照）と同じであるため説明を省略する。ただし、クライアント装置２０の数ｎは、２以上の整数とする。
【００６０】
図１６は、第４実施形態のサーバ装置１０及びクライアント装置２０の構成の一例を示す図である。本実施形態のサーバ装置１０の構成は、第１実施形態のサーバ装置１０の構成と同じであるため説明を省略する。本実施形態のクライアント装置２０は、送信部２１、記憶部２２、決定部２３、受信部２４及び合意部２６を備える。本実施形態の情報処理システム１００は、クライアント装置２０が合意部２６を更に備える点が第１実施形態の情報処理システム１００と異なる。送信部２１、記憶部２２、決定部２３及び受信部２４については、第１実施形態のクライアント装置２０と同様であるため説明を省略する。
【００６１】
合意部２６は、図１６では図示されない他の機能ブロックから合意書き込み命令を受信すると、合意書き込み要求を作成し、当該合意書き込み要求をサーバ装置１０に送信する。合意書き込み命令は、サーバ装置１０に書き込むデータの合意を複数のクライアント装置２０の間でとる命令である。合意書き込み要求は、合意をとるデータと、複数のクライアント装置２０で同じ書き込みバージョンと、複数のクライアント装置で同じ書き込みキーとを含む書き込み要求である。
【００６２】
合意部２６は、合意書き込み要求を送信した後に、合意書き込み要求に含まれる書き込みキーと同じ読み出しキーを含む読み出し要求を、送信部２１を介してサーバ装置１０に送信する。例えば、合意部２６は、合意書き込み要求の終了ステータスを含む応答データをサーバ装置１０から受信した後に、当該読み出し要求を送信する。合意部２６は、当該読み出し要求の応答データを、受信部２４を介してサーバ装置１０から受信し、当該応答データに含まれるデータによりサーバ装置１０に書き込むデータの合意をとる。
【００６３】
図１７は、第４実施形態のクライアント装置２０がデータの合意をとるときの動作の一例を示すフローチャートである。合意部２６は、クライアント装置２０のアプリケーションプログラムなどにより生成された他の機能ブロックから合意書き込み命令を受信する（ステップＳ６１）。次に、合意部２６は、合意書き込み要求に使用する書き込みバージョンを決定する（ステップＳ６２）。当該書き込みバージョンは、複数のクライアント装置２０で同一の値である。なお、合意書き込み要求に使用するバージョンは、例えば、それぞれのクライアント装置２０で予め予約しておいた値を使用するようにしてもよい。
【００６４】
次に、合意部２６は、合意をとるデータと、複数のクライアント装置２０で同じ書き込みバージョンと、複数のクライアント装置で同じ書き込みキーとを含む合意書き込み要求を作成し、当該合意書き込み要求をサーバ装置１０に送信する（ステップＳ６３）。次に、合意部２６は、受信部２４を介して当該合意書き込み要求の終了ステータスをサーバ装置１０から受信する（ステップＳ６４）。次に、合意部２６は、合意書き込み要求に含まれる書き込みキーと同じ読み出しキーを含む読み出し要求を、送信部２１を介してサーバ装置１０に送信する（ステップＳ６５）。次に、合意部２６は、当該読み出し要求の応答データを、受信部２４を介してサーバ装置１０から受信する（ステップＳ６６）。次に、合意部２６は、当該応答データに含まれるデータによりサーバ装置１０に書き込むデータの合意をとる（ステップＳ６７）。
【００６５】
以上のように、本実施形態の情報処理システム１００では、クライアント装置２０が合意部２６を備えることにより、複数のクライアント装置２０の間でサーバ装置１０に書き込むデータの合意をとることができる。
【００６６】
なお、上述のステップＳ６４の処理において、合意部２６が終了ステータスの値（書き込み成功又は失敗）を判定し、読み出し要求の送信（ステップＳ６５）が必要であるか否かを決定してもよい。すなわち、書き込みが成功している場合は、自身が送信した書き込みデータが書き込まれたこと（自身が送信した書き込みデータにより合意がとれたこと）を示すため、ステップＳ６５〜ステップＳ６７の処理を省略することができる。
【００６７】
本実施形態の情報処理方法は、例えば、分散システムにおけるリーダ選出やアトミックブロードキャストなどの合意問題に利用できる。また、本実施形態の情報処理方法は、他のクライアント装置２０の故障に影響されずに合意をとることができる。すなわち、本実施形態の情報処理方法は、他のクライアント装置２０が故障している場合であっても処理を中断することなく合意をとることができる。
【００６８】
最後に、第１〜第４実施形態のサーバ装置１０及びクライアント装置２０のハードウェア構成の一例について説明する。図１８は、第１〜第４実施形態のサーバ装置１０及びクライアント装置２０のハードウェア構成の一例を示す図である。
【００６９】
第１〜第４実施形態のサーバ装置１０及びクライアント装置２０は、制御装置４１、主記憶装置４２、補助記憶装置４３、表示装置４４、入力装置４５及び通信装置４６を備える。制御装置４１、主記憶装置４２、補助記憶装置４３、表示装置４４、入力装置４５及び通信装置４６は、バス４７を介して互いに接続されている。
【００７０】
制御装置４１は、補助記憶装置４３から主記憶装置４２に読み出されたプログラムを実行する。主記憶装置４２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリである。補助記憶装置４３は、例えば、ハードディスクやメモリカード等である。表示装置４４は、サーバ装置１０及びクライアント装置２０の状態等を表示する画面である。表示装置４４は、例えば、液晶ディスプレイ等である。入力装置４５は、サーバ装置１０及びクライアント装置２０を操作するためのインタフェースである。入力装置４５は、例えば、キーボードやマウス等である。通信装置４６は、ネットワークに接続するためのインタフェースである。
【００７１】
本実施形態のサーバ装置１０及びクライアント装置２０で実行されるプログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、メモリカード、ＣＤ−Ｒ及びＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録し、コンピュータ・プログラム・プロダクトとして提供してもよい。また、本実施形態のサーバ装置１０及びクライアント装置２０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供してもよい。また、本実施形態のサーバ装置１０及びクライアント装置２０で実行されるプログラムをダウンロードさせずに、インターネット等のネットワーク経由で提供、又は配布してもよい。また、本実施形態のサーバ装置１０及びクライアント装置２０のプログラムを、ＲＯＭ等に予め組み込んで提供してもよい。
【００７２】
本実施形態のサーバ装置１０で実行されるプログラムは、上述したサーバ装置１０の各機能ブロックのうち、プログラムとしても実現可能な機能ブロック（受信部１２、記憶制御部１３及び送信部１４）を含むモジュール構成となっている。
【００７３】
また、本実施形態のクライアント装置２０で実行されるプログラムは、上述したクライアント装置２０の各機能ブロックのうち、プログラムとしても実現可能な機能ブロック（送信部２１、決定部２３、受信部２４、冗長制御部２５及び合意部２６）を含むモジュール構成となっている。
【００７４】
当該モジュールは、実際のハードウェアとしては、制御装置４１が上記記憶媒体からプログラムを読み出して実行することにより、上記各モジュールが主記憶装置４２上にロードされる。すなわち、上記各モジュールは、主記憶装置４２上に生成される。なお、サーバ装置１０及びクライアント装置２０の各機能ブロックの一部、又は全部を、プログラムにより実現せずに、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等のハードウェアにより実現してもよい。
【００７５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７６】
１０  サーバ装置
１１  記憶部
１２  受信部
１３  記憶制御部
１４  送信部
２０  クライアント装置
２１  送信部
２２  記憶部
２３  決定部
２４  受信部
２５  冗長制御部
２６  合意部
３０  ネットワーク
４１  制御装置
４２  主記憶装置
４３  補助記憶装置
４４  表示装置
４５  入力装置
４６  通信装置
４７  バス
【図１】
2015033388.tif 000003
【図２】
2015033388.tif 000004
【図３】
2015033388.tif 000005
【図４】
2015033388.tif 000006
【図５】
2015033388.tif 000007
【図６】
2015033388.tif 000008
【図７】
2015033388.tif 000009
【図８】
2015033388.tif 000010
【図９】
2015033388.tif 000011
【図１０】
2015033388.tif 000012
【図１１】
2015033388.tif 000013
【図１２】
2015033388.tif 000014
【図１３】
2015033388.tif 000015
【図１４】
2015033388.tif 000016
【図１５】
2015033388.tif 000017
【図１６】
2015033388.tif 000018
【図１７】
2015033388.tif 000019
【図１８】
2015033388.tif 000020
【国際調査報告】
2015033388.tif 000021
2015033388.tif 000022