(57)【要約】  第１のシステムは、１つ以上のクライアントから値を、値の識別子とともに受信する。第１のシステムは、値を連続して第１のデータストアに入力する。第１のシステムは、値のそれぞれを、値の第１のデータストアへの入力シーケンスでの位置を示すシーケンスＩＤと関連付ける。第１のシステムは、第１の値の第１の識別子及び第１の値と関連付けられた第１のシーケンスＩＤを第２のシステムに送信する。第１のシステムは、第１の識別子及び第１のシーケンスＩＤを送信後に、第１のシーケンスＩＤ及び第１の値を第２のシステムに送信する。第２のシステムは、第１のシステムから送信された第１の識別子及び第１のシーケンスＩＤを第１の待ち行列に保持する。第２のシステムは、第１のシステムから第２のデータストアに第１の識別の後に受信された第１の値を入力する。【選択図】図７
2019509579.tif 000002
【特許請求の範囲】
【請求項１】
情報処理システムであって、
第１のシステムと、
第２のシステムと
を備え、
前記第１のシステムが、
１つ以上のクライアントから値を、前記値の識別子とともに受信し、
第１のデータストアに連続して前記値を入力し、
前記値のそれぞれを、前記第１のデータストアへの前記値の入力シーケンスでの位置を示すシーケンスＩＤと関連付け、
第１の値の第１の識別子、及び前記第１の値と関連付けられた第１のシーケンスＩＤを前記第２のシステムに送信し、
前記第１の識別子及び前記第１のシーケンスＩＤを送信後に、前記第１のシーケンスＩＤ及び前記第１の値を前記第２のシステムに送信する
ように構成され、
前記第２のシステムが、
前記第１のシステムから送信された前記第１の識別子及び前記第１のシーケンスＩＤを第１の待ち行列に保持し、
前記第１のシステムから第２のデータストアに前記第１の識別子の後に受信された前記第１の値を入力する
ように構成される、情報処理システム。
【請求項２】
前記第１のシステムから前記第２のシステムへのフェイルオーバー後に、前記第２のシステムが、第２の値の第２の識別子及び前記第２の値と関連付けられた第２のシーケンスＩＤが前記第１の待ち行列に記憶され、前記第２の値が、前記第２の識別子とともに前記第１のシステムから受信されないときにエラーメッセージを発行するように構成される、請求項１に記載の情報処理システム。
【請求項３】
前記１つ以上のクライアントからの第３の値の第３の識別子を示す要求に応えて、前記第２のシステムが、前記第３の値を求めて前記第２のデータストアを検索する前に、前記第３の識別子を求めて前記第１の待ち行列を検索するように構成される、請求項１に記載の情報処理システム。
【請求項４】
前記第２のシステムが、前記第１のシステムから受信された値及び関連付けられたシーケンスＩＤを記憶するために第２の待ち行列を含み、
前記第２の待ち行列に記憶された第３の値に対する要求に応えて、前記第２のシステムが、前記第２の待ち行列から取り出された前記第３の値を前記第２のデータストアに入力し、前記第２のデータストアから取り出された前記第３の値を返すように構成される、
請求項１に記載の情報処理システム。
【請求項５】
前記第１のシステムが、値ごとに前記第２のシステムへの複製が終了しているかどうかを示す複製管理情報を含み、
前記第１のシステムが前記第２のシステムとの通信についてネットワークエラーを検出し、前記複製管理情報が、前記第２のシステムへの値の複製が終了していないことを示すとき、前記第１のシステムがエラーメッセージを発行するように構成される、
請求項１に記載の情報処理システム。
【請求項６】
前記第１のシステムが、値ごとに前記第２のシステムへの複製が終了しているかどうかを示す複製管理情報を含み、
前記第１のシステムが、フェイルオーバーからの回復プロセスにおいて、新しい値の送信要求に、前記新しい値の識別子、新しい値と同じ識別子を持つ前値から構成される前記複製管理情報を含み、前記新しい値の識別子に対応する前記前値によりどの複製まで終了しているかを示し、
前記第２のシステムが、
前記前値と前記第２のデータストア内の前記識別子によって識別された値とを比較し、
前記前値及び前記第２のデータストア内の前記識別子によって識別された前記値が異なるときに、エラーメッセージを発行する
ように構成される、請求項１に記載の情報処理システム。
【請求項７】
前記前値、及び前記第２のデータストア内の前記識別子によって識別された前記値が等しいとき、前記第２のシステムが、前記第２のデータストア内の前記識別子によって識別された前記値を前記新しい値に変更するように構成される
請求項６に記載の情報処理システム。
【請求項８】
第１のシステム及び第２のシステムを含む情報処理システムにおけるデータ複製のための方法であって、
前記第１のシステムによって、１つ以上のクライアントから値を、前記値の識別子とともに受信することと、
前記第１のシステムによって、前記値を連続して第１のデータストアに入力することと、
前記第１のシステムによって、前記値のそれぞれを、前記値の前記第１のデータストアへの入力シーケンスでの位置を示すシーケンスＩＤと関連付けることと、
前記第１のシステムによって、第１の値の第１の識別子及び前記第１の値と関連付けられた第１のシーケンスＩＤを前記第２のシステムに送信することと、
前記第１のシステムによって、前記第１の識別子及び前記第１のシーケンスＩＤを送信後に、前記第１のシーケンスＩＤ及び前記第１の値を前記第２のシステムに送信することと、
前記第２のシステムによって、前記第１のシステムから送信された前記第１の識別子及び前記第１のシーケンスＩＤを第１の待ち行列に保持することと、
前記第２のシステムによって、前記第１のシステムから第２のデータストアに前記第１の識別子の後に受信された前記第１の値を入力することと
を含む、方法。
【請求項９】
前記第１のシステムから前記第２のシステムへのフェイルオーバー後に、前記第２のシステムによって、第２の値の第２の識別子及び前記第２の値と関連付けられた第２のシーケンスＩＤが第１の待ち行列に記憶され、前記第２の値が前記第２の識別子とともに前記第１のシステムから受信されないときにエラーメッセージを発行すること
をさらに含む、方法。
【請求項１０】
前記１つ以上のクライアントから第３の値の第３の識別子を示す要求に応えて、前記第２のシステムによって、前記第３の値を求めて前記第２のデータストアを検索する前に、前記第３の識別子を求めて前記第１の待ち行列を検索すること
をさらに含む、請求項８に記載の方法。
【請求項１１】
前記第２のシステムが、前記第１のシステムから受信された値及び関連付けられたシーケンスＩＤを記憶するために第２の待ち行列を含み、
前記方法が、さらに、
前記第２の待ち行列に記憶された第３の値に対する要求に応えて、前記第２のシステムによって、前記第２の待ち行列から取り出された前記第３の値を前記第２のデータストアに入力し、前記第２のデータストアから取り出された前記第３の値を返すこと
をさらに含む、請求項８に記載の方法。
【請求項１２】
前記第１のシステムが、値ごとに前記第２のシステムへの複製が終了しているかどうかを示す複製管理情報を含み、
前記方法が、
前記第１のシステムによって、前記第１のシステムが前記第２のシステムとの通信についてネットワークエラーを検出し、前記複製管理情報が、値の前記第２のシステムへの複製が終了していないことを示すとき、エラーメッセージを発行すること
をさらに含む、請求項８に記載の方法。
【請求項１３】
前記第１のシステムが、値ごとに前記第２のシステムへの複製が終了しているかどうかを示す複製管理情報を含み、
前記方法が、
前記第１のシステムが、フェイルオーバーからの回復プロセスにおいて、新しい値の送信要求に、前記新しい値の識別子、新しい値と同じ識別子を持つ前値から構成される前記複製管理情報を含み、前記新しい値の識別子に対応する前記前値によりどの複製まで終了しているかを示し、
前記第２のシステムによって、前記前値と前記第２のデータストア内の前記識別子によって識別された値とを比較することと、
前記第２のシステムによって、前記前値及び前記第２のデータストア内の前記識別子によって識別された前記値が異なるとき、エラーメッセージを発行することと
をさらに含む、請求項８に記載の方法。
【請求項１４】
前記前値及び前記第２のデータストア内の前記識別子によって識別された前記値が等しいとき、前記第２のシステムによって、前記第２のデータストア内の前記識別子によって識別された前記値を、前記新しい値に変更すること
をさらに含む、請求項１３に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
長距離データ同期は、災害（例えば、地震）の場合のフェイルオーバーのために及び他の目的のために活用される。低遅延データストア（例えば、インメモリＫＶＳ）は、ミッションクリティカルな業務システムで求められる高速応答を提供するために活用される。低遅延データストア用の長距離データ同期の場合、システム全体が２つのシステムを含むように構成される。一方は、少なくとも１つのローカルクライアントのために動くローカルシステムであり、他方は、少なくとも１つのリモートクライアントのために働くリモートシステムである。
【０００２】
米国第２０１３／０１１７２２３  Ａ１号は、第１のストレージシステムから第３のストレージシステムを含む情報処理システムを開示する。第１のストレージシステムは、第２のストレージ装置内でファイルのエンティティデータを管理することによるスタブ化、第２のストレージ装置にファイルのデータを複製することによる移行、及び第２のストレージ装置１０ｂから第１のストレージ装置にファイルのエンティティデータを書き戻すことにより再実行する。さらに、第１のストレージ装置から第３のストレージ装置に移動されたファイルのメタデータを移行のタイミングで（同期して）複製し、移行のタイミングとは関係ないタイミングで（非同期で）ファイルのエンティティデータを第３のストレージ装置に複製することによってリモートコピーを実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第２０１３／０１１７２２３  Ａ１号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
災害の場合に、フェイルオーバーは、ローカルシステムからリモートシステムへ発生する。米国第２０１３／０１１７２２３Ａ１号は、最初にメタデータをリモートシステムに複製することによってリモートコピーを実行するようにローカルシステムを構成する。リモートクライアントは、ローカルシステムによってもたらされるデータを処理しようとするとき、リモートシステムはカレントデータのハッシュ値をチェックする。書込み頻度の高いアプリケーションでは、ネットワークパケットがリモートサイトに順序から崩れて到着する場合、リモートシステムはハッシュ値を計算するだけでは正しい順序を理解できず、不一致を引き起こす可能性がある。
【課題を解決するための手段】
【０００５】
代表的な例は、第１のシステム及び第２のシステムを含む情報処理システムであって、第１のシステムは、１つ以上のクライアントから値を値の識別子とともに受信するように構成され、第１のシステムは、第１のデータストアの中に連続して値を入力するように構成され、第１のシステムは値のそれぞれを、第１のデータストアへの値の入力シーケンスでの位置を示すシーケンスＩＤと関連付けるように構成され、第１のシステムは、第１の値の第１の識別子及び第１の値と関連付けられた第１のシーケンスＩＤを第２のシステムに送信するように構成され、第１のシステムは、第１の識別子及び第１のシーケンスＩＤを送信後に、第１のシーケンスＩＤ及び第１の値を第２のシステムに送信するように構成され、第２のシステムは、第１のシステムから送信された第１の識別子及び第１のシーケンスＩＤを第１の待ち行列に保持するように構成され、第２のシステムは、第１のシステムから第２のデータストアに第１の識別子の後に受信された第１の値を入力するように構成される。
【０００６】
代表的な例は、情報処理システムがリモートデータストア間でのデータ不一致を妨げることを可能にする。
【図面の簡単な説明】
【０００７】
【図１】図１は、長距離同期に関与する情報処理システムの全体的な構成を示す図である。
【図２】図２は、ローカルクライアント及びリモートクライアントのハードウェア構成例を示す図である。
【図３】図３は、ローカルサーバ装置及びリモートサーバ装置のハードウェア構成例を示す図である。
【図４Ａ】図４Ａは、それぞれローカルサーバ及びリモートサーバに記憶されるキー待ち行列の例示的なフォーマットを示す図である。
【図４Ｂ】図４Ｂは、それぞれローカルサーバ及びリモートサーバに記憶される値待ち行列の例示的なフォーマットを示す図である。
【図４Ｃ】図４Ｃは、それぞれローカルサーバ及びリモートサーバに記憶されるメインデータストアの例示的なフォーマットを示す図である。
【図５】図５は、それぞれローカルサーバ及びリモートサーバに記憶される複製ログテーブルの例示的なフォーマットを示す図である。
【図６】図６は、ローカルサーバとリモートサーバとの間で伝送される例示的な複製データを示す図である。
【図７】図７は、アプリケーション１からローカルサーバへの書込み要求を処理するためのフローチャートを示す図である。
【図８】図８は、災害に起因するローカルサーバでの故障の場合にアプリケーションからの読取り要求を処理するフローチャートを示す図である。
【図９】図９は、複製マネージャが、災害のために複製データをリモートサーバに送信できない場合のローカルサーバによる処理のフローチャートを示す図である。
【図１０】図１０は、回復後のローカルサーバとリモートサーバとの間での再同期、及びローカルサーバでの動作の再開のフローチャートを示す図である。
【図１１】図１１は、ステップＳ１００６及びＳ１０１０で活用される収集動作のフローチャートを示す図である。
【図１２】図１２は、回復のための複製データの例示的なフォーマットを示す図である。
【図１３】図１３は、ステップＳ１００９及びＳ１０１３で活用される回復動作のフローチャートを示す図である。
【図１４】図１４は、災害によるローカルサーバで故障の場合に値及びシーケンスＩＤに加えてキーを含む値−シーケンスＩＤパケットを使用し、アプリケーションからの読取り要求を処理するフローチャートを示す図である。
【発明を実施するための形態】
【０００８】
以下、実施形態は、添付図面を参照して説明される。実施形態が、本発明を実施するための単に例にすぎず、本発明の技術的な範囲を制限するべきではないことに留意されたい。図面を通して、共通の要素は、同じ参照符号によって示される。
【０００９】
実施形態は、長距離に亘ってデータ同期を実行するための方法に関し、特に低遅延分散データストア用の長距離複製に関する。整合性の担保に加えて、低遅延データストアにおける長距離複製方法は、高速応答性能を維持しながら複製を実行するためにも必要とされる。実施形態は、長距離データ複製を可能にし、予測不可能なネットワーク状態でも整合性と高速応答性能の両方を維持できる技法を提供する。
【００１０】
値（データ）の識別子及び関連付けられたシーケンスＩＤは、ローカルシステムからリモートシステムに同期送信される。識別子及び値の対の例は、Key-Valueデータストアのキー−値ペアである。値及び識別子の別のタイプが活用されてもよい。例えば、ファイル（値）及びファイル名（識別子）が使用されてよい。
【００１１】
値及びシーケンスＩＤは、識別子及び同じシーケンスＩＤのローカルシステムからリモートシステムへの事前の送信とは関係のないときに非同期送信される。リモートシステムは、シーケンスＩＤ及び識別子を待ち行列に保持している。リモートシステムは、値とともに送信されたシーケンスＩＤを求めて待ち行列を検索し、シーケンスＩＤ及び関連付けられた識別子が待ち行列内で見つけられると、メインデータストアの中に値を入力する。
【００１２】
フェイルオーバーがローカルシステムからリモートシステムへ発生するとき、リモートシステムは、リモートクライアントから識別子とともに要求を受信し、識別子を求めて待ち行列を検索する。一致する識別子が待ち行列内で見つけられ、識別子と同じシーケンスＩＤと関連付けられた値がローカルシステムから受信されない場合、エラーが検出され、エラーメッセージが発行される。具体的には、リモートシステムは、データ整合性を保護するためにエラーメッセージを作成し、リモートクライアントに返す。
【００１３】
上述されたように、実施形態は、リモート複製のための値の前に識別子を送信し、リモート複製で低遅延動作（迅速な応答性能）を可能にする。実施形態は、複製ステータスをチェックするためにリモート複製中にシーケンスＩＤを使用し、データ整合性の保護を可能にする。
【００１４】
以後、実施形態は、図面を参照してより詳細に説明される。図１は、長距離同期に関与する情報処理システムの全体的な構成を示す。情報処理システムの例は、チケット用の予約システムである。情報処理システムは、ローカルクライアント装置１０１、ローカルサーバ装置１０２、リモートクライアント装置２０１、及びリモートサーバ装置２０１を含む。
【００１５】
ローカルクライアント装置１０１は、ローカルサイトネットワーク１１を通してローカルサーバ装置１０２と接続される。リモートクライアント装置２０１は、リモートサイトネットワーク２２を通してリモートサーバ装置２０２と接続される。ローカルサーバ装置１０２は、サイト間ネットワーク３３を通してリモートサーバ装置２０２と接続される。例えば、ローカルサイトネットワーク１１、リモートサイトネットワーク２２、及びサイト間ネットワーク３３は、（銅チャネル及びファイバチャネル等の）複数の有線接続、及び／又は（セルラー及びＷＬＡＮ等の）無線接続を活用してよい。
【００１６】
アプリケーション（プログラム）１は、ユーザ端末（不図示）で実行する。アプリケーションは、ローカルクライアント装置１０１で、及びローカルクライアント装置２０１で実行してよい。アプリケーションを実行する１つのローカルクライアント装置は、ローカルサーバ装置１０２とリモートサーバ装置２０２の両方と接続されてよい。
【００１７】
アプリケーション１は、それぞれ読取り（GET）要求及び書込み（PUT）要求を、ローカルクライアント装置１０１を通して送信することによってローカルサーバ装置１０２からデータを読み取り、ローカルサーバ装置１０２にデータを書き込む。アプリケーション１は、それぞれ読取り（GET）要求及び書込み（PUT）要求を、リモートクライアント２０１を通して送信することによってリモートサーバ装置２０２からデータを読み取り、リモートサーバ装置２０２にデータを書き込む。
【００１８】
例えば、アプリケーション１は、読み取られる又は書き込まれるデータに基づいて要求宛先サーバを選択する。キー−値対は、単一のサイト（サーバ装置）においてのみアクセスされ、キー−値ペアは、両方の場所で同時にアクセスされることはない。上述されたように、災害に続くフェイルオーバー又は回復動作が完了しない場合、キー−値ペアのアクセス場所は変更しない。
【００１９】
ローカルクライアント装置１０１は、要求マネージャ（プログラム）１０２２を含む。リモートクライアント装置２０１は、要求マネージャ（プログラム）２０１２を含む。要求マネージャ１０１２は、アプリケーション１から受信された要求をローカルサーバ装置１０２に転送する。要求マネージャ２０１２は、アプリケーション１から受信された要求をローカルサーバ装置２０２に転送する。
【００２０】
ローカルサーバ装置１０２は、制御プログラムグループ１０２１及び管理テーブルグループ１０２６を含む。制御プログラムグループ１０２１は、制御プログラムを含む。具体的には、制御プログラムグループ１０２１は、要求マネージャ１０２２、複製送信機１０２３、複製受信機１０２４、及び複製マネージャ１０２５を含む。
【００２１】
管理テーブルグループ１０２６は管理テーブルを含む。具体的には、管理テーブルグループ１０２６は、メインデータストア１０２７、キー待ち行列１０２８、値待ち行列１０２９、及び複製ログテーブル１０３０を含む。
【００２２】
要求マネージャ１０２２は、ローカルクライアント装置１０１からの要求に応えて、メインデータストア１０２７からデータを読み取る、又はメインデータストア１０２７にデータを書き込む。複製送信機１０３３は、リモートサーバ装置２０２に複製データを送信する。複製受信機１０２４は、リモートサーバ装置２０２から複製データを受信する。
【００２３】
複製マネージャ１０２５は、キー待ち行列１０２８及び値待ち行列１０２９を観察することによってリモートサーバ装置２０２からの複製を管理し、一致するキー−値対をメインデータストア１０２７に入力する。
【００２４】
メインデータストア１０２７は、キー及びその対応する値（キー−値ペア）を含む。キーは、対応する値及びキー−値ペア（テーブル内のレコード）を指す、メインデータストア１０２７内の一意の識別子である。値は、アプリケーション１によって活用されるバイトの文字列である。
【００２５】
キー待ち行列１０２８は、リモートサーバ装置２０２からのキー及びシーケンスＩＤの対を記憶するためのテーブル構造を有する待ち行列である。各対は、シーケンスＩＤ及びシーケンスＩＤと関連付けられたキーから成る。
【００２６】
値待ち行列１０２９は、リモートサーバ装置２０２からのシーケンスＩＤ及び値の対を記憶するためのテーブル構造を有する待ち行列である。各対は、シーケンスＩＤ及びシーケンスＩＤと関連付けられた値から成る。後述されるように、シーケンスＩＤはキー−値対に割り当てられ、シーケンスＩＤは、キー及びキー−値対の値と関連付けられる。
【００２７】
ローカルサーバ装置２０２は、制御プログラムグループ２０２１及び管理テーブルグループ２０２６を含む。制御プログラムグループ２０２１は、制御プログラムを含む。具体的には、制御プログラムグループ２０２１は、要求マネージャ２０２２、複製送信機２０２３、複製受信機２０２４、及び複製マネージャ２０２５を含む。
【００２８】
管理テーブルグループ２０２６は、管理テーブルを含む。具体的には、管理テーブルグループ２０２６は、メインデータストア２０２７、キー待ち行列２０２８、値待ち行列２０２９、及び複製ログテーブル２０３０を含む。
【００２９】
要求マネージャ２０２２は、リモートクライアント２０１からの要求に応えて、メインデータストア２０２７からデータを読み取る、又はメインデータストア２０２７にデータを書き込む。複製送信機２０２３は、ローカルサーバ装置１０２に複製データを送信する。複製受信機２０２４は、ローカルサーバ装置１０２から複製データを受信する。
【００３０】
複製マネージャ２０２５は、キー待ち行列２０２８及び値待ち行列２０２９を観察することによってローカルサーバ装置１０２から複製を管理し、メインデータストア２０２７に一致するキー−値ペアを入力する。
【００３１】
メインデータストア２０２７は、メインデータストア１０２７と複製ペアを構成する。メインデータストア２０２７は、キー及びその対応する値（キー−値ペア）を含む。キーは、値及びキー−値ペア（テーブル内のレコード）を指す、メインデータストア２０２７内の一意の識別子である。値は、アプリケーションによって活用されるバイトの文字列である。
【００３２】
キー待ち行列２０２８は、ローカルサーバ装置１０２からのキー及びシーケンスＩＤのペアを記憶するためのテーブル構造を有する待ち行列である。各対は、シーケンスＩＤ及びシーケンスＩＤと関連付けられたキーから成る。
【００３３】
値待ち行列２０２９は、ローカルサーバ装置１０２からのシーケンスＩＤ及び値の対を記憶するためのテーブル構造を有する待ち行列である。各対は、シーケンスＩＤ及びシーケンスＩＤと関連付けられた値から成る。シーケンスＩＤは、キー−値ペアに割り当てられ、シーケンスＩＤは、キー−値ペアのキー及び値と関連付けられる。
【００３４】
キー待ち行列は、キー及びシーケンスＩＤを一時的に保持するために使用される記憶領域である。値待ち行列は、値及びシーケンスＩＤを一時的に保持するために使用される記憶領域である。レコードの追加の順序は、レコードの削除の順序と同じではない場合がある。
【００３５】
key-valueストアは、メインデータストアの典型的な記憶タイプである。キー−値ストアは、簡略な構成を用いて高スケーラビリティ、高可用性、及び高速応答性能を達成する。
【００３６】
図２は、ローカルクライアント措置１０１及びリモートクライアント２０１のハードウェア構成例である。クライアント装置２０００は、プロセッサ２００１、メインメモリデバイス２００２、（ハードディスクドライブ及びソリッドステートドライブ等の）永続ストレージ２０２３、（ＬＡＮアダプタ及びファイバチャネルアダプタ等の）ネットワークインタフェース２００４、（キーボード及びマウス等の）入力装置２００５、並びに（モニタ及びプリンタ等の）出力装置２００６を含む。クライアント装置２０００は、（ファイルシステム、カーネル、及びドライバを含む）オペレーティングシステム及び要求マネージャを実行する。
【００３７】
図３は、ローカルサーバ装置１０２及びリモートサーバ装置２０２のハードウェア構成例を示す。サーバ装置３０００は、プロセッサ３００１、メインメモリデバイス３００２、（ハードディスクドライブ及びソリッドステートドライブ等の）永続ストレージ３００３、（ＬＡＮアダプタ及びファイバチャネルアダプタ等の）ネットワークインタフェース３００４、（キーボード及びマウス等の）入力装置３００５、並びに（モニタ及びプリンタ等の）出力装置３００６を含む。
【００３８】
サーバ装置３０００は、（ファイルシステム、カーネル、及びドライバを含む）オペレーティングシステム、並びに（要求マネージャ、複製送信機、複製受信機、及び複製マネージャを含む）制御プログラムグループを実行する。
【００３９】
サーバ装置３０００は、メインメモリデバイス３００２及び永続ストレージ３００３に管理テーブルグループを記憶する。例では、複製ログテーブル以外のテーブルは、メインメモリデバイス３００２にしか記憶されず、複製ログテーブルは永続ストレージ３００３にしか記憶されない。複製ログテーブルは、メインメモリデバイス３００２のキャッシュに格納されてよい。すべてのテーブルは、永続ストレージ３００３に記憶されてよく、メインメモリデバイス３００２のキャッシュに格納されてよい。
【００４０】
プロセッサ３００１は、他のデバイスとの連携によりメモリ２００２に記憶されたプログラムに従って動作することによって特定の機能部分の機能を果たす。したがって、本開示でプログラムの主題を有する説明は、プロセッサ又はプロセッサを有する装置の主題を有する説明により置き換えられてよい。通常、プログラム及びデータは、永続ストレージ３００３からロードされる、又はネットワークインタフェース３００４を通して外部装置からメモリ３００２にダウンロードされる。同じことは、クライアント装置２０００に適用される。
【００４１】
図４Ａは、それぞれローカルサーバ装置１０２及びリモートサーバ装置２０２に記憶されたキー待ち行列１０２８及び２０２８の例示的なフォーマットを示す。キー待ち行列１０２８／２０２８（キー待ち行列１０２８及び２０２８のそれぞれ）は、シーケンスＩＤ及び対応する一意のキーを含む。上述されたように、キー待ち行列１０２８／２０２８は、他のサーバから対応するシーケンスＩＤとともに送信されたキーを記憶する。
【００４２】
シーケンスＩＤは、要求マネージャによるメインデータストアへの入力の順序を示す。例えば、シーケンスＩＤは、データ（キー−値ペア）がメインデータストアに記憶される、又はデータがアプリケーションから受信された時刻を示す。シーケンスＩＤは、入力がメインデータストア１０２７／２０２７内に登録される場所を示す場合がある。
【００４３】
シーケンスＩＤは、ローカルサーバ装置１０２及びリモートサーバ装置２０２の両方でのキー−値ペアの順序を決定できる任意のタイプの数値を活用してよい。シーケンスＩＤは、メインデータストア１０２７／２０２７での新しいキー−値ペア入力の際に、要求マネージャ１０２２／２０２２からの要求に基づいて同期を取る目的のために複製マネージャ１０２５／２０２５によって作成されてよい。
【００４４】
例えば、リモートサーバ装置２０２のキー待ち行列２０２８内のシーケンスＩＤは、対応する値がキーであり、キー（キー−値ペア）が、ローカルサーバ装置１０２で２０：００にメインデータストア１０２７に入力される（又は、アプリケーション１から受信される）ことを示す。待ち行列４１０では、複数の動作を単一のキーで実行できるため、複数のシーケンスＩＤが同じキーを指す場合がある。
【００４５】
図４Ｂは、それぞれローカルサーバ装置１０２及びリモートサーバ装置２０２に記憶された値待ち行列１０２９及び２０２９の例示的なフォーマットを示す。値待ち行列１０２９／２０２９は、シーケンスＩＤ及び対応する値（キー−値対の値部分）を含む。上述されたように、値待ち行列１０２９／２０２９は、他のサーバから対応するシーケンスＩＤとともに送信された値を記憶する。値待ち行列１０２９／２０２９では、単一のシーケンスＩＤは、単一の値と関連付けられてよい。同じシーケンスＩＤと関連付けられたキー及び値は、キー−値対を構成する。
【００４６】
図４Ｃは、それぞれローカルサーバ装置１０２及びリモートサーバ装置２０２内のメインデータストア１０２７及び２０２７の例示的なフォーマットを示す。メインデータストア１０２７／２０２７は、いわゆるkey-valueストアであり、ペアになるキー及び対応する値を含む。すなわち、メインデータストア１０２７／２０２７は、アプリケーション及び他のサーバから送信されたキー−値ペアを記憶する。メインデータストア１０２７／２０２７では、キーは一意であり、非同期的に単一値と関連付けられる。メインデータストア１０２７／２０２７は、キー−値ストアとは異なる別のデータストア構造を有してもよい。
【００４７】
図５は、それぞれローカルサーバ装置１０２及びリモートサーバ装置２０２に記憶された複製ログテーブル１０３０及び２０３０の例示的なフォーマットを示す。複製ログテーブル１０３０／２０３０は、同じサーバ内のメインデータストア１０２７／２０２７のキー−値ペアの更新履歴（ログ）及び複製ステータスの情報を含む。複製マネージャ１０２５／２０２５は、クライアント装置１０１／２０１からの要求に応えて複製ログテーブル１００／２０３０にレコードを書き込み、メインデータストア１０２７／２０２７内の変更を追跡するためにテーブル１０３０／２０３０の複製ログテーブルを保持する。
【００４８】
複製ログテーブル１０３０／２０３０では、各レコードは、互いに関連してシーケンスＩＤ、キー、前値、新しい値、及び複製終了ステータスを含むように構成される。
【００４９】
各レコードは、クライアント装置からの要求に関連してメインデータストア内でのキー−値対の更新（修正）の１つの時刻を示す。各レコードは、シーケンスＩＤによって識別されたPUT動作の１つの時刻に対応する。
【００５０】
レコード内の前値は、PUT（書込み）動作による修正前の値である。レコード内の新しい値は、PUT動作による修正後の値である。複製終了ステータスは、動作が正しく他のサーバ装置に複製されたかどうかを示す。
【００５１】
図６は、ローカルサーバ装置１０２とリモートサーバ装置２０２との間で送信される例示的な複製データを示す。パケット６０１は、キー及び対応する（割り当てられた）シーケンスＩＤを送信するためのキー−シーケンスＩＤパケットである。キー及びシーケンスＩＤは、受信機サーバ装置１０２／２０２でキー待ち行列１０２８／２０２８に記憶される。
【００５２】
パケット６０２は、値（キー−値対の値部分）及び対応する（割り当てられた）シーケンスＩＤを送信するための値−シーケンスＩＤパケットである。値及びシーケンスＩＤは、受信機サーバ装置１０２／２０２で値待ち行列１０２９／２０２９に記憶される。パケット６０１及び６０２は、ターゲット場所に到達するために必要なネットワーキングヘッダ情報を含む。
【００５３】
図７は、アプリケーション１からローカルサーバ装置１０２へのPUT（書込み）要求を処理するためのフローチャートを示す。ローカルサーバ装置２０１及びリモートサーバ装置２０２は、正常に動作している。書込み動作は、ローカルクライアント装置１０１内の要求マネージャ１０１２からローカルサーバ装置１０２への新しいキー−値対を有するPUT要求で開始する（Ｓ７０１）。ローカルサーバ装置１０２内の要求マネージャ１０２２は、PUT要求を受信する（Ｓ７０２）。
【００５４】
要求マネージャ１０２２は、メインデータストア１０２７から受信されたキーと関連付けられた修正前の前値を得る（Ｓ７０３）。具体的には、要求マネージャ１０２２は、受信されたキーを求めてメインデータストア１０２７を検索し、メインデータストア１０２７からキーとペアになっている値を取り出す。キーがメインデータストア１０７に記憶されないとき、前のデータはNULLである。
【００５５】
要求マネージャ１０２２は、受信したキー−値ペアをメインデータストア１０２７に入力する（Ｓ７０４）。具体的には、要求マネージャ１０２２は、キーとペアにされた前値を、受信した新しい値に修正する。メインデータストア１０２７での値の修正は、値の状態に応じて禁止される場合があることに留意されたい。
【００５６】
要求マネージャ１０２２は、ローカルクライアント装置１０１にPUT要求結果を返す（Ｓ７０５）。ローカルクライアント装置１０１内の要求マネージャ１０１２は、ローカルサーバ装置１０２から応答を受信し、動作を終了する（Ｓ７０６）。
【００５７】
一方、ローカルサーバ装置１０２内の要求マネージャ１０２２は、シーケンスＩＤ、キー、前値、新しい値、及び「FALSE」の複製終了ステータスのレコードを複製ログテーブル１０３０に追加し、複製マネージャ１０２５に新しいキー−値ペアの入力を通知する（Ｓ７０７）。
【００５８】
複製マネージャ１０２５は、例えば要求マネージャ１０２２が新しい入力の通知を出した後にキー−値ペアのメインデータストア１０２７への入力時刻からシーケンスＩＤを作成する。複製マネージャ１０２５は、例えばローカルクライアント１０２からの受信時刻からシーケンスＩＤを作成してよい。
【００５９】
ローカルサーバ装置１０２内の複製マネージャ１０２５は、受信されたキー及び対応するシーケンスＩＤをリモートサーバ装置２０２に送信する（Ｓ７０８）。複製マネージャ１０２５は、キー及びシーケンスＩＤを含むキー−シーケンスＩＤパケット６０１を、リモートサーバ装置２０２内の複製受信機２０２４に送信するために複製送信機１０２３を使用する。
【００６０】
リモートサーバ装置２０２内の受信機２０２４は、キー−シーケンスＩＤパケット６０１を受信する（Ｓ７０９）。複製マネージャ２０２５は、受信されたパケット６０１のキー及びシーケンスＩＤをキー待ち行列２０２８に入力する（Ｓ７１０）。複製マネージャ２０２５は、ローカルサーバ装置１０２内の複製受信機１０２４に応答を返送するためにリモートサーバ装置２０２内の複製送信機２０２３を使用する（Ｓ７１１）。
【００６１】
複製受信機１０２４は、リモートサーバ装置２０２から応答を受信する（Ｓ７１２）。複製マネージャ１０２５は、シーケンスＩＤ及び値を含む値−シーケンスＩＤパケット６０２をリモートサーバ装置２０２に送信するために複製送信機１０２３を使用する（Ｓ７１３）。
【００６２】
複製受信機２０２４は、値−シーケンスＩＤパケット６０２を受信する（Ｓ７１４）。複製マネージャ２０２５は、値−シーケンスＩＤパケット６０２内の受信されたシーケンスＩＤ及び値を値待ち行列２０２９に入力する（Ｓ７１５）。
【００６３】
複製マネージャ２０２５は、値待ち行列２０２９に記憶されたシーケンスＩＤを求めてキー待ち行列２０２８を検索する（Ｓ７１５）。複製マネージャ２０２５は、キー待ち行列２０２８から一致するシーケンスＩＤと関連付けられたキーを取り出す（Ｓ７１６）。複製マネージャ２０２５は、リモートサーバ装置２０２内のメインデータストア２０２７の中にキー−値ペアを入力する（Ｓ７１７）。複製マネージャ２０２５は、キー待ち行列２０２８からキー及びシーケンスＩＤを、値待ち行列２０２９から値及びシーケンスＩＤを削除する。
【００６４】
例では、複製マネージャ２０２５は、キー−値対をシーケンスＩＤの順序でメインデータストア２０２７の中に入力する。値待ち行列２０２９が複数のレコードを含むとき、複製マネージャ２０２５は、キーを求めてキー待ち行列２０２８を検索するために値待ち行列２０２９から最も古いシーケンス番号を有するレコードを選択する。
【００６５】
複製マネージャ２０２５は、ローカルサーバ装置１０２に応答を送信するために複製送信機２０２３を使用する（Ｓ７１８）。ローカルサーバ装置１０２内の複製受信機１０２４は、リモートサーバ装置２０２から応答を受信する（Ｓ７１９）。最後に、複製マネージャ１０２５は、複製ログテーブル１０３０内で「TRUE」に複製終了ステータスを設定し、プロセスはローカルクライアント装置１０１からのPUT要求について終了する（Ｓ７２０）。
【００６６】
上述されたように、値の前にキーを送信することは、サーバ装置間の値修正の迅速な通知を可能にする。アプリケーション１は、ステップＳ７０６後に処理を続行できる。代替実施形態として、ステップ７０５は、キー及びシーケンスＩＤがリモートサーバ２０２に到達するまでローカルクライアント１０１に対して応答しないことによってエラー検出能力を保証するためにステップＳ７１２の後に、又は値がリモートサーバ２０２に到達するまでローカルクライアント１０１に応答しないことによって完全なフェイルオーバー能力を保証するためにステップＳ７１９の後に実行されてよい。同じフローは、リモートクライアント装置２０１からリモートサーバ装置２０２へのPUT要求に適用してよい。
【００６７】
大規模災害（例えば、地震）の場合、ローカルクライアント装置１０１及びローカルサーバ装置１０２を含むローカルサイト内のネットワークインフラストラクチャは、利用できなくなる。したがって、ローカルクライアント装置１０１からローカルサーバ装置１０２内のキー−値ペアへのアクセスが利用できなくなる。
【００６８】
この場合、情報処理システムはリモートシステムにフェイルオーバーし、アプリケーションのためのローカルサーバ装置２０１の機能は、リモートサーバ装置２０２によって引き受けられる。このようにして、ローカルクライアント装置１０１を介したキー−値ペアのためのローカルサーバ装置１０２へのアクセスは、リモートクライアント２０１を介したリモートサーバ装置２０２に切り替えられる。ローカル装置１０２が利用できない間、GET動作及びPUT動作は、リモートサーバ装置２０２だけで実行される。
【００６９】
図８は、災害に起因するローカルサーバ装置１０２での故障の場合にアプリケーション１からのGET（読取り）要求を処理するフローチャートを示す。アプリケーション１は、例えば要求タイムアウトによってローカルサーバ装置１０２に関する故障の発生を検出する。例えば、リモートサーバ装置２０２は、アプリケーションからローカルサーバ装置１０２に関する故障を通知される、又はローカルサーバ装置１０２との通信エラーを検出することによって故障を認識する。
【００７０】
フェイルオーバーが起こり、アプリケーション１は、ローカルサーバ装置１０２によって最初に処理されるキー−値対のためにアクセス目的地をローカルサーバ装置１０２からリモートサーバ装置２０２に切り替える。
【００７１】
アプリケーション１は、リモートクライアント２０１を介してリモートサーバ装置２０２に特定のキーに対するGET（読取り）要求を送信する。リモートクライアント２０１内の要求マネージャ２０１２は、GET要求をリモートサーバ装置２０２に送信する（Ｓ８０１）。
【００７２】
リモートサーバ装置２０２内の要求マネージャ２０２２は、特定のキーに対するGET要求を受信する（Ｓ８０２）。要求マネージャ２０２２は、アプリケーション１によって要求されたキーがキー待ち行列２０２７に含まれるかどうかを確認する（Ｓ８０３）。アプリケーション１によって要求されたキーがキー待ち行列２０２７に含まれない場合（Ｓ８０３：いいえ）、要求マネージャ２０２２は、GET要求によって示されるキーとペアにされた値をメインデータストア２０２７から取り出し（Ｓ８０４）、リモートクライアント２０１に結果を返す（Ｓ８０５）。リモートクライアント２０１は、結果を受信する（Ｓ８１２）。
【００７３】
アプリケーション１によって要求されたキーがキー待ち行列２０２８に含まれる場合（Ｓ８０３：はい）、要求マネージャ２０２２は、キー待ち行列２０２８から要求されたキーのための最も古いシーケンスＩＤを取り出す（Ｓ８０６）。次いで、要求マネージャ２０２２は、値待ち行列２０２９が、同じシーケンスＩＤを含むかどうかを確認する（Ｓ８０７）。値待ち行列２０２９が同じシーケンスＩＤを含まない場合、値エラーが検出され、要求マネージャ２０２２は、リモートクライアント２０１に値損失メッセージ（エラーメッセージ）を返す（Ｓ８０８）。
【００７４】
値待ち行列２０２９が同じシーケンスＩＤを含む場合、要求マネージャ２０２２は、値待ち行列２０２９から同じシーケンスＩＤと関連付けられた値を入手し、キー−値ペアをメインデータストア２０２７に入力する（Ｓ８０９）。
【００７５】
要求マネージャ２０２２は、次いでキー待ち行列２０２８から最も古いシーケンスＩＤ及び関連付けられたキーを削除する（Ｓ８１０）。要求マネージャ２０２２は、値待ち行列２０２９から同じシーケンスＩＤ及び関連付けられた値を削除する（Ｓ８１１）。要求マネージャ２０２２は、次いでステップＳ８０３に戻る。
【００７６】
図８に関して説明されたプロセスは、異なるサイト間でのデータの不一致（例えば、同じキーのためのローカルサイト及びリモートサイトでの異なる値）を防ぐ。複製が終了していないデータに対するアクセスを禁止することは、異なるサイト間での２つの食い違った値を防ぎ、２つのサーバ装置１０２及び２０２内での記憶されたデータの整合性を維持する。上述されたように、要求された値は、待ち行列からメインデータストアに入力され、リモートクライアント装置に送信されるためにメインデータストアから取り出される。それは、単純なプロセスによって正しい値を確実に返すことを可能にする。
【００７７】
代替実施態様として、要求マネージャ２０２２は、ステップＳ８０６の要求されたキーについてキー待ち行列２０２８からすべてのシーケンスＩＤを取り出してよく、ステップＳ８０３に戻ることなく連続してステップＳ８０７、Ｓ８０９、Ｓ８１０、及びＳ８１１を実行する。要求マネージャ２０２２は、GET要求によって示されるキーを求めてキー待ち行列２０２８だけを検索してよい。
【００７８】
要求マネージャ２０２２は、PUT（書込み）要求に応えて待ち行列２０２８及び２０２９を参照してよい。要求されたキーがキー待ち行列２０２８に含まれ、ペアにされた値が値待ち行列２０２９に含まれていないとき、要求マネージャ２０２２は、リモートクライアント２０１に値損失メッセージを返してよい。対にされた値が値待ち行列２０２９に含まれているとき、要求マネージャ２０２２は、メインデータストア２０２７にキー−値対を入力し、リモートクライアント２０１から受信された新しい値を入力してよい。
【００７９】
図９は、複製マネージャ１０２５が、災害のために複製データをリモートサーバ装置２０２に送信できない場合のローカルサーバ装置１０２による処理のフローチャートを示す。
【００８０】
複製マネージャ１０２５は、リモートサーバ装置２０２との通信についてネットワークエラーを検出する（Ｓ９０１）。複製マネージャ１０２５は、複製ログテーブル１０３０から最も古いシーケンスＩＤを有する複製ログレコードを読み取る（Ｓ９０２）。複製マネージャ１０２５は、レコードの複製終了ステータスを確認する（Ｓ９０３）。
【００８１】
複製終了ステータスが「偽」である場合（Ｓ９０３：いいえ）、未完成の複製が検出される。複製マネージャ１０２５は、未完成の複製テーブル（不図示）にレコードを追加し（Ｓ９０４）、ステップＳ９０５に進む。
【００８２】
複製終了ステータスが「真」である場合（Ｓ９０３：はい）、レコードのキー−値ペアの複製は終了され、キー−値ペアに対して追加の動作は必要とされていない。複製マネージャ１０２５は、ステップＳ９０５に進む。
【００８３】
ステップＳ９０５で、複製マネージャ１０２５は、カレントレコードが最後のレコードであるかどうかを判断する。カレントレコードが最後のレコードではない場合（Ｓ９０５：いいえ）、複製マネージャ１０２５は次のシーケンスＩＤを有するレコードを読み取り（Ｓ９０６）、ステップＳ９０３に戻る。
【００８４】
カレントレコードが最後のレコードである場合（Ｓ９０５：はい）、複製マネージャ１０２５は、未完成の複製テーブルを確認する（Ｓ９０７）。未完成の複製テーブルが少なくとも１つのレコードを含む場合（Ｓ９０７：はい）、複製マネージャ１０２５は、管理者端末（不図示）にエラーメッセージを送信する（発行する）ことによって未完成の複製の管理者に警告する（Ｓ９０８）。未完成の複製テーブルがレコードを含まない場合（Ｓ９０７：いいえ）、プロセスは終わる。
【００８５】
上述されたように、エラーメッセージは、その複製が終了していないキー−値ペアが故障したサイトに残されているときに、発行される。したがって、異なるサイトでの食い違った値は妨げられる。
【００８６】
図１０は、回復プロセスにおけるローカルサーバ装置１０２とリモートサーバ装置２０２との間の再同期、及びローカルサーバ装置１０２内での動作の再開のフローチャートを示す。
【００８７】
ローカルサーバ装置１０２内の複製マネージャ１０２５は、リモートサーバ装置２０２に回復要求を送信する（Ｓ１００１）。リモートサーバ装置２０２内の複製受信機２０２４は、回復要求を受信する（Ｓ１００２）。複製マネージャ２０２５は、メインデータストア２０２７、キー待ち行列２０２８、及び値待ち行列２０２９をロックする（Ｓ１００３）。
【００８８】
リモートサーバ装置２０２内の複製マネージャ２０２５は、次いでローカルサーバ装置１０２に回復準備完了メッセージを返す（Ｓ１００４）。ローカルサーバ装置１０２内の複製受信機１０２４は、メッセージを受信する（Ｓ１００５）。
【００８９】
複製マネージャ１０２５は、複製ログテーブル１０３０を参照し、リモートサーバ装置２０２に送信される複製データを収集する（Ｓ１００６）。ステップＳ１００６を実行するための方法は図１１に詳説される。一方、複製データのフォーマットは図１２に詳説される。
【００９０】
複製マネージャ１０２５は、複製データをリモートサーバ装置２０２に送信するために、複製送信機１０２３を使用する（Ｓ１００７）。リモートサーバ装置２０２内の複製受信機２０２４は、複製データを受信する（Ｓ１００８）。リモートサーバ装置２０２内の複製マネージャ２０２５は、複製データを使用し、回復動作を実行する（Ｓ１００９）。ステップＳ１００９は、図１３で詳説される。
【００９１】
複製マネージャ２０２５は、複製ログテーブル２０３０を参照し、ローカルサーバ装置１０２に送信される複製データを収集する（Ｓ１０１０）。このステップは、図１１に詳説される動作と同じであるが、代わりにリモートサーバ装置２０２によって実行される。複製マネージャ２０２５は、リモートサーバ装置２０２から複製データを送信するために、複製マネージャ２０２３を使用する（Ｓ１０１１）。
【００９２】
ローカルサーバ装置１０２内の複製受信機１０２４は、複製データを受信する（Ｓ１０１２）。複製マネージャ２０２５は、複製受信機１０２４によって受信された複製データを使用し、回復動作を実行する（Ｓ１０１３）。ステップは、図１３で詳説される動作と同じであるが、代わりにローカルサーバ装置１０２によって実行される。
【００９３】
最後に、複製マネージャ１０２５は、回復終了メッセージをリモートサーバ装置２０２に送信し、動作を完了する（Ｓ１０１４）。複製受信機２０２４は、応答を受信し、再同期動作も完了する（Ｓ１０１５）。
【００９４】
図１０に関して上述されたプロセスは、ローカルサーバ装置１０２及びリモートサーバ装置２２０が、回復プロセスでメインデータストア１０２７及び２０２７を再同期できるようにする。
【００９５】
図１１は、ステップＳ１００６及びＳ１０１０で活用される収集動作のフローチャートを示す。ステップＳ１００６でのローカルサーバ装置１０２による動作は、図１１を参照して説明される。しかしながら、同じフローは、ステップＳ１０１０のリモートサーバ装置にも適用する。
【００９６】
複製マネージャ１０２５は、複製ログテーブル１０３０から最も古いシーケンス番号を有する複製ログレコードを読み取る（Ｓ１１０１）。複製マネージャ１０２５は、レコードの複製終了ステータスを確認する（Ｓ１１０２）。
【００９７】
複製終了ステータスが「FALSE」である場合（Ｓ１１０２：いいえ）、次いで未完成の複製が検出される。複製マネージャ１０２５は。回復のための複製データにレコードを追加し（Ｓ１１０３）、ステップＳ１１０４に進む。
【００９８】
複製終了ステータスが「TRUE」である場合（Ｓ１１０２：はい）、次いでレコードのキー−値ペアの複製は終了し、キー−値ペアに追加の動作は必要とされない。複製マネージャ１０２５は、ステップＳ１１０４に進む。
【００９９】
ステップＳ１１０４では、複製マネージャ１０２５は、カレントレコードが最後のレコードであるかどうかを判断する。カレントレコードが最後のレコードではない場合（Ｓ１１０４：いいえ）、複製マネージャ１０２５は、次のシーケンスＩＤを有するレコードを読み取り（Ｓ１１０５）、ステップＳ１１０２に戻る。
【０１００】
カレントレコードが最後のレコードである場合（Ｓ１１０４：はい）、複製マネージャ１０２５は、回復のための複製データを返す（Ｓ１１０６）。
【０１０１】
上述されたように、各ペアの複製ステータスを管理する複製ログテーブルは、サーバ装置が回復プロセスで複製されるペアを決定できるようにする。
【０１０２】
図１２は、回復のための複製データの例示的なフォーマットである。未完成の複製データは、「FALSE」の複製終了ステータスの各レコードのシーケンスＩＤ、キー、前値、新しい値、及び複製終了ステータスを含む。要するに、回復のための複製データは、複製終了ステータスが「FALSE」である複製ログテーブル内のすべてのレコードから成る。
【０１０３】
図１３は、ステップＳ１００９及びＳ１０１３で活用される回復動作のフローチャートを示す。ステップＳ１００９でのリモートサーバ装置２０２による動作は、図１３を参照して説明される。しかしながら、同じ流れは、ステップＳ１０１３でのローカルサーバ装置１０２にも適用する。
【０１０４】
複製マネージャ２０２５は、フォーマットが図１２に示される回復のための複製データから最も古いシーケンスＩＤを有する複製データレコードを読み取る（Ｓ１３０１）。
【０１０５】
複製マネージャ２０２５は、カレント複製データレコードに含まれるキーとペアにされた現在値をメインデータストア２０２７から取り出す（Ｓ１３０２）。
【０１０６】
複製マネージャ２０２５は、メインデータストア２０２７から取り出された現在値及びカレント複製データレコードに含まれる前値を比較する（Ｓ１３０３）。値が等しい（同じ値）場合、次いで不一致は存在せず、複製マネージャ２０２５は、カレント複製データレコードに含まれる新しい値及びキーを、メインデータストア２０２７の中に入力する（Ｓ１３０４）。
【０１０７】
値が異なる場合、次いで不一致が存在し、複製マネージャ２０２５は管理者端末にエラーメッセージ（警報）を送信する（Ｓ１３０５）。エラーメッセージは、キー、メインデータストア２０２７内の現在値、並びに複製データレコード内の前値及び新しい値を提示する。エラーメッセージは、管理者に、どの値がカレントキーに対する正しい値として適用されるべきであるのかを選ぶように促す。
【０１０８】
値が自動一致（Ｓ１３０４）又は管理者手動無効（Ｓ１３０６）を介して決定された後、複製マネージャ２０２５は、カレントキー−値ペアの複製終了ステータスを「TRUE」で設定する（Ｓ１３０７）。
【０１０９】
次いで、複製マネージャ１０２５は、カレントレコードが最後のレコードであるかどうかを判断する（Ｓ１３０８）。カレントレコードが最後のレコードではない場合（Ｓ１３０８：いいえ）、複製マネージャ１０２５は、次のシーケンスＩＤを有するレコードを読み取り（Ｓ１３０９）、ステップＳ１３０２に戻る。カレントレコードが最後のレコードである場合（Ｓ１３０８：はい）、プロセスは終わる。
【０１１０】
リモートサーバ装置２０２が、ローカルサーバ装置１０２が利用できない間にキー−値ペアを修正する場合、ローカルサーバ装置１０２内のキー−値ペアは、リモートサーバ装置２０２内のキー−値ペアと同期していない。具体的には、リモートサーバ装置２０２は、ローカルサーバ装置１０２からのフェイルオーバー後にローカルサーバ装置１０２によって最初に処理される（アプリケーションから受信される）キー−値ペアを修正できる。例えば、リモートサーバ装置２０２は、ローカルサーバ装置１０２によってアプリケーション１から最初に受信される新しいキー−値ペアを追加できる。リモートサーバ装置２０２は、ローカルサーバ装置１０２から送信される既存のキー−値ペアの値を修正又は削除できる。
【０１１１】
上述されたプロセスは、サーバ装置が、データストア間の整合性を確認し、データストア間の不一致を解決できるようにする。
【０１１２】
代替実施態様では、値−シーケンスＩＤパケット６０２は、値及びシーケンスＩＤに加えてキーを含んでよい。この場合、値待ち行列１０２９及び２０２９は、省略できる。複製マネージャ２０２５は、値−シーケンスＩＤパケット６０２からキー−値対を入手することができ、キー−値をメインデータストア２０２７に入力し、キー待ち行列２０２８から一致するキー及びシーケンスＩＤを削除する。
【０１１３】
図１４は、ローカルサーバ装置１０２における災害に起因する故障の場合の値及びシーケンスＩＤに加えて、キーを含む値−シーケンスＩＤパケット６０２を使用し、アプリケーション１からの読取り要求を処理するフローチャートを示す。図８と比較すると、ステップ１４０１からＳ１４０６は、それぞれステップＳ８０１からＳ８０５、及びＳ８１２に相当する。要求されたキーがステップＳ１４０３に存在するとき、要求マネージャ２０２２は、キー待ち行列２０２８を参照することなく、リモートクライアント２０１に値損失メッセージを返す（Ｓ１４０７）。上述されたように、値待ち行列２０２９は存在しない。
【０１１４】
上記では、ローカルサーバ装置１０２からリモートサーバ装置２０２への複製が、図７から図１４を参照して説明される。システムは、同じようにローカルサーバ装置１０２からリモートサーバ装置１０２への複製を実行できる。
【０１１５】
本発明は、上述された実施形態に制限されるのではなく、種々の修正を含む。上述された実施形態は、本発明のよりよい理解のために詳細に説明され、上述されたすべての構成を含む構成に制限されていない。一実施形態の構成の一部は、別の実施形態の構成で置換されてよい。一実施形態の構成は、別の実施形態の構成に組み込まれてよい。各実施形態の構成の一部分は、追加されてよい、削除されてよい、又は異なる構成の部分によって置換されてよい。
【０１１６】
上述された構成、機能、及びプロセッサは、それらのすべて又は一部分のために、例えば集積回路を設計することによって等、ハードウェアによって実施されてよい。上述された構成及び機能は、ソフトウェアによって実装されてよい。つまり、プロセッサは、機能を提供するプログラムを解釈し、実行する。機能を実装するためのプログラム、テーブル、及びファイルの情報は、メモリ、ハードディスクドライブ、若しくはＳＳＤ等のストレージデバイス、又はＩＣカード若しくはＳＤカード等の記憶媒体内に記憶されてよい。
【０１１７】
図面は、説明のために必要と見なされる制御ライン及び情報ラインを示しているが、製品内のすべての制御ライン又は情報ラインを示しているわけではない。すべての構成部品のほとんどが実際に相互接続されていることも考慮できる。
【図１】
2019509579.tif 000003
【図２】
2019509579.tif 000004
【図３】
2019509579.tif 000005
【図４Ａ】
2019509579.tif 000006
【図４Ｂ】
2019509579.tif 000007
【図４Ｃ】
2019509579.tif 000008
【図５】
2019509579.tif 000009
【図６】
2019509579.tif 000010
【図７】
2019509579.tif 000011
【図８】
2019509579.tif 000012
【図９】
2019509579.tif 000013
【図１０】
2019509579.tif 000014
【図１１】
2019509579.tif 000015
【図１２】
2019509579.tif 000016
【図１３】
2019509579.tif 000017
【図１４】
2019509579.tif 000018
【国際調査報告】
2019509579.tif 000019