(57)【特許請求の範囲】
【請求項１】
それぞれ共有記憶部を備える複数のサーバ間で、それぞれのサーバの共有記憶部に記憶されるデータを同期させるデータ同期システムであって、
上記各サーバは、
当該サーバにてアプリケーションを実行するアプリケーション実行手段と、
上記アプリケーションの実行に必要なデータを、上記共有記憶部上の第１領域に記憶する第１記憶手段と、
上記アプリケーションの実行により上記第１領域に書き込んだ変更データと、当該変更データの上記第１領域における書き込み位置情報とを、上記共有記憶部上の第２領域に記憶し、上記変更データと上記変更データの書き込み位置情報との上記第２領域における配列位置であって、記憶後に更新する書き込み位置インデックスを当該第２領域に記憶し、上記第２領域から上記変更データを読み込む配列位置を示す読み込み位置インデックスを当該第２領域に記憶する第２記憶手段と、
上記第２記憶手段の上記書き込み位置インデックスと上記読み込み位置インデックスとに基づき上記他のサーバに送信しておらずかつ上記第２領域に書き込みが完了している上記変更データと当該変更データの上記第１領域における書き込み位置情報を、当該他のサーバに送信するデータ通信手段と
を備え、
上記複数のサーバにおいて、第１サーバが運用系サーバであり、第２サーバが待機系サーバであるとき、
上記第１サーバは、ネットワーク間で使用される第１通信プロトコルを用いて上記第２サーバと通信可能である場合、上記第１サーバにおいて、
上記データ通信手段は、上記読み込み位置インデックスと上記書き込み位置インデックスとが一致していないときに、上記第２サーバに送信しておらずかつ上記第２領域に書き込みが完了している上記変更データと当該変更データの上記第１領域における書き込み位置情報を、上記第２サーバに送信し、
上記第２記憶手段は、上記通信データ手段の送信処理に基づき、上記読み込み位置インデックスを更新し、
上記第１サーバは、上記第１通信プロトコルを用いて上記第２サーバと通信可能でない場合、上記第１サーバにおいて、
上記第２記憶手段は、上記読み込み位置インデックスとして、上記書き込み位置インデックスと等しいインデックスを記憶する
ことを特徴とするデータ同期システム。
【請求項２】
上記第２記憶手段は、各アプリケーションの実行による１つの書き込み処理又は１つの読み込み処理の実行を保証する領域であることを特徴とする請求項１に記載のデータ同期システム。
【請求項３】
上記共有記憶部上の第１領域は、データセグメントであることを特徴とする請求項１に記載のデータ同期システム。
【請求項４】
上記共有記憶部上の第２領域は、一時記憶部であることを特徴とする請求項１に記載のデータ同期システム。
【請求項５】
上記第１通信プロトコルは、ＴＣＰであることを特徴とする請求項１に記載のデータ同期システム。
【請求項６】
それぞれ共有記憶部を備える複数のサーバ間で、それぞれのサーバの共有記憶部に記憶されるデータを同期させるデータ同期システムにおけるデータ同期方法であって、
上記各サーバは、
当該サーバにてアプリケーションを実行するアプリケーション実行手段と、
上記アプリケーションの実行に必要なデータを、上記共有記憶部上の第１領域に記憶する第１記憶手段と、
上記アプリケーションの実行により上記第１領域に書き込んだ変更データと、当該変更データの上記第１領域における書き込み位置情報とを、上記共有記憶部上の第２領域に記憶し、上記変更データと上記変更データの書き込み位置情報との上記第２領域における配列位置であって、記憶後に更新する書き込み位置インデックスを当該第２領域に記憶し、上記第２領域から上記変更データを読み込む配列位置を示す読み込み位置インデックスを当該第２領域に記憶する第２記憶手段と、
上記第２記憶手段の上記書き込み位置インデックスと上記読み込み位置インデックスとに基づき上記他のサーバに送信しておらずかつ上記第２領域に書き込みが完了している上記変更データと当該変更データの上記第１領域における書き込み位置情報を、当該他のサーバに送信するデータ通信手段とを備え、
上記複数のサーバにおいて、第１サーバが運用系サーバであり、第２サーバが待機系サーバであるとき、
上記第１サーバは、ネットワーク間で使用される第１通信プロトコルを用いて上記第２サーバと通信可能である場合、上記第１サーバにおいて、
上記データ通信手段が、上記読み込み位置インデックスと上記書き込み位置インデックスとが一致していないときに、上記第２サーバに送信しておらずかつ上記第２領域に書き込みが完了している上記変更データと当該変更データの上記第１領域における書き込み位置情報を、上記第２サーバに送信するデータ通信ステップと、
上記第２記憶手段が、上記通信データ手段の送信処理に基づき、上記読み込み位置インデックスを更新する更新ステップとを有し、
上記第１サーバは、上記第１通信プロトコルを用いて上記第２サーバと通信可能でない場合、上記第１サーバにおいて、
上記第２記憶手段が、上記読み込み位置インデックスとして、上記書き込み位置インデックスと等しいインデックスを記憶する記憶ステップ
を有することを特徴とするデータ同期方法。
【請求項７】
上記第１通信プロトコルは、ＴＣＰであることを特徴とする請求項６に記載のデータ同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ同期システム及び方法に関し、例えば、運用系サーバ（ＡＣＴ）−待機系サーバ（ＳＢＹ）冗長構成としたシステムに適用し得るものである。
【背景技術】
【０００２】
一般に、ＩＰ電話サービス等を提供するコールサーバのような高い信頼性を求められるシステムでは、図２のように運用系サーバと待機系サーバを有する冗長構成を備える。運用系サーバと待機系サーバには、互いの生存確認を実施する冗長構成管理機能（図２では冗長構成管理プロセス５１Ａ及び５１Ｂと示す）が存在し、待機系サーバの冗長構成管理機能５１Ａ及び５１Ｂは、運用系サーバ５Ａが故障あるいはソフトウェアのバグによりサービスを提供できない状況に陥った場合、待機系サーバ５Ｂを運用状態に切り替え、片方のサーバが故障してもサービスを継続させる。
【０００３】
さらに、最近では、特許文献１に示すように、運用系サーバ−待機系サーバ間でメモリ同期を実施し、通話中である呼の情報を０系から１系に引き継ぎ、０系が運用系である状態のときに開始した通話を１系が運用系に切り替わっても切断させないようにする技術がある。
【０００４】
特許文献１は、図３に示すように、運用系サーバ５Ａのアプリケーションプロセス５２Ａは変更した共有メモリセグメント５３Ａのデータの位置情報（メモリのアドレスとサイズ）を同期要求キュー５４Ａに入力し、データ送受信プロセス５５Ａがデータの位置を同期要求キュー５４Ａから取り出し、位置情報から共有メモリセグメント５３Ａのデータを読み込み、待機系サーバ５Ｂへ転送する方式である。
【０００５】
一般に、電話サービスを提供するコールサーバのアプリケーションプロセスは、即時応答することが求められる。特許文献１は、運用系サーバから待機系サーバヘのデータ転送処理をアプリケーションプロセスの処理とは別プロセスで実施することで、アプリケーションプロセス内で遅延が発生することを回避させることができる。
【０００６】
【特許文献１】特開２００６−２８５４４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載の技術は、アプリケーションプロセスとデータ送受信プロセスが並行して行なわれるため、図４に示すように、アプリケーションプロセス５２Ａが変更途中であるデータセグメント６を、データ送受信プロセス５５Ａが読み込んでしまう可能性がある。そうすると、例えば図５に示すように、中途半端なデータ６が待機系サーバ５Ｂの共有メモリセグメント５３Ｂに反映されることになる。図５のような状態で、運用系サーバ５Ａが故障した場合、待機系サーバ５Ｂのアプリケーションプロセス５２Ｂは中途半端なデータ６でサービスを開始してしまうおそれがある。
【０００８】
一般に、プロセス間で同一のデータを読み込む場合、例えばＬＩＮＵＸ（登録商標）等のＵＮＩＸ（登録商標）系汎用ＯＳで実装されているＰＯＳＩＸセマフォを利用可能であるが、データ同期をするデータ送受信プロセスの処理中はアプリケーションプロセスの処理を停止させてしまう可能性があるため、好ましくない。
【０００９】
そのため、それぞれ共有メモリを備える複数のサーバ間で、それぞれの共有メモリ上のデータを同期するシステムにおいて、アプリケーションプロセスを停止させることなく、共有メモリへ書き込まれたデータを他のサーバへ同期させることができるデータ同期システム及び方法が求められている。
【課題を解決するための手段】
【００１０】
かかる課題を解決するために、第１の本発明のデータ同期システムは、それぞれ共有記憶部を備える複数のサーバ間で、それぞれのサーバの共有記憶部に記憶されるデータを同期させるデータ同期システムであって、当該サーバにてアプリケーションを実行するアプリケーション実行手段と、アプリケーションの実行に必要なデータを、共有記憶部上の第１領域に記憶する第１記憶手段と、アプリケーションの実行により第１領域に書き込んだ変更データと、当該変更データの第１領域における書き込み位置情報とを、共有記憶部上の第２領域に記憶し、変更データと変更データの書き込み位置情報との第２領域における配列位置であって、記憶後に更新する書き込み位置インデックスを当該第２領域に記憶し、第２領域から変更データを読み込む配列位置を示す読み込み位置インデックスを当該第２領域に記憶する第２記憶手段と、第２記憶手段の書き込み位置インデックスと読み込み位置インデックスとに基づき他のサーバに送信しておらずかつ第２領域に書き込みが完了している変更データと当該変更データの第１領域における書き込み位置情報を、当該他のサーバに送信するデータ通信手段とを備え、複数のサーバにおいて、第１サーバが運用系サーバであり、第２サーバが待機系サーバであるとき、第１サーバは、ネットワーク間で使用される第１通信プロトコルを用いて第２サーバと通信可能である場合、第１サーバにおいて、データ通信手段は、読み込み位置インデックスと書き込み位置インデックスとが一致していないときに、第２サーバに送信しておらずかつ第２領域に書き込みが完了している変更データと当該変更データの第１領域における書き込み位置情報を、第２サーバに送信し、第２記憶手段は、データ通信手段の送信処理に基づき、読み込み位置インデックスを更新し、第１サーバは、第１通信プロトコルを用いて第２サーバと通信可能でない場合、第１サーバにおいて、第２記憶手段は、読み込み位置インデックスとして、書き込み位置インデックスと等しいインデックスを記憶することを特徴とする。
【００１１】
第２の本発明のデータ同期方法は、それぞれ共有記憶部を備える複数のサーバ間で、それぞれのサーバの共有記憶部上に記憶されるデータを同期させるデータ同期システムにおけるデータ同期方法であって、各サーバは、サーバにてアプリケーションを実行するアプリケーション実行手段と、アプリケーションの実行に必要なデータを、共有記憶部上の第１領域に記憶する第１記憶手段と、アプリケーションの実行により第１領域に書き込んだ変更データと、当該変更データの第１領域における書き込み位置情報とを、共有記憶部上の第２領域に記憶し、変更データと変更データの書き込み位置情報との第２領域における配列位置であって、記憶後に更新する書き込み位置インデックスを当該第２領域に記憶し、第２領域から変更データを読み込む配列位置を示す読み込み位置インデックスを当該第２領域に記憶する第２記憶手段と、第２記憶手段の書き込み位置インデックスと読み込み位置インデックスとに基づき他のサーバに送信しておらずかつ第２領域に書き込みが完了している変更データと当該変更データの第１領域における書き込み位置情報を、当該他のサーバに送信するデータ通信手段とを備え、複数のサーバにおいて、第１サーバが運用系サーバであり、第２サーバが待機系サーバであるとき、第１サーバは、ネットワーク間で使用される第１通信プロトコルを用いて第２サーバと通信可能である場合、第１サーバにおいて、データ通信手段が、読み込み位置インデックスと書き込み位置インデックスとが一致していないときに、第２サーバに送信しておらずかつ第２領域に書き込みが完了している変更データと当該変更データの第１領域における書き込み位置情報を、第２サーバに送信するデータ通信ステップと、第２記憶手段が、通信データ手段の送信処理に基づき、読み込み位置インデックスを更新する更新ステップとを有し、第１サーバは、第１通信プロトコルを用いて第２サーバと通信可能でない場合、第１サーバにおいて、第２記憶手段が、読み込み位置インデックスとして、書き込み位置インデックスと等しいインデックスを記憶する記憶ステップとを有することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、それぞれ共有メモリを備える複数のサーバ間で、それぞれの共有メモリ上のデータを同期するシステムにおいて、アプリケーションプロセスを停止させることなく、共有メモリへ書き込まれたデータを他のサーバへ同期させることができる。
【発明を実施するための最良の形態】
【００１５】
（Ａ）第１の実施形態
以下、本発明のデータ同期システム及び方法の第１の実施形態について、図面を参照しながら詳細に説明する。
【００１６】
第１の実施形態では、ＩＰネットワークに接続する運用系サーバと待機系サーバとの間の冗長システムに本発明を適用した場合を例示して説明する。
【００１７】
運用系サーバ及び待機系サーバのハードウェア構成は、通常のサーバのハードウェア構成と同様に、ＣＰＵ、メモリ、外部記憶装置及び通信部などを備えるものであり、運用系サーバ及び待機系サーバは、ソフトウェア処理により以下で説明する各種処理を実現する。
【００１８】
（Ａ−１）第１の実施形態の構成
図１は、第１の実施形態の運用系サーバ−待機系サーバの二重化構成を示す構成図である。なお、運用系サーバ１Ａ及び待機系サーバ１Ｂはそれぞれ同一の機能構成を備えるものであり、状況に応じて、運用系サーバとして機能したり、待機系サーバとして機能したりするものである。
【００１９】
運用系サーバ１Ａ及び待機系サーバ１Ｂはそれぞれ、プロセスとして、アプリケーションプロセス１１（１１Ａ及び１１Ｂ）、冗長構成管理プロセス１２（１２Ａ及び１２Ｂ）、データ送受信プロセス１３（１３Ａ及び１３Ｂ）、を有する。
【００２０】
また、運用系サーバ１Ａ及び待機系サーバ１Ｂはそれぞれ、共有メモリデータセグメント１４（１４Ａ及び１４Ｂ）、一時保存領域１５（１５Ａ及び１５Ｂ）、を有する。
【００２１】
以下の機能構成の説明において、共通的な機能説明の場合には、例えば「データ送受信プロセス１３」などのように示し、運用系又は待機系の特有の機能説明の場合には、例えば、「データ送受信プロセス１３Ａ」、「データ送受信プロセス１３Ｂ」などのように示す。
【００２２】
共有メモリデータセグメント１４は、自系サーバの共有メモリ上に確保される配列であって、アプリケーションプロセス１１の実行に必要なデータやインスタンスなどを記憶する領域である。ここで、共有メモリとは、マルチプロセス間で共有するメモリ領域をいう。
【００２３】
一時保存領域１５は、自系サーバの共有メモリ上に確保される記憶領域である。一時保存領域１５には、書き込み位置ｉｎｄｅｘ１５１、読み込み位置ｉｎｄｅｘ１５２、変更データ配列１５３が存在する。
【００２４】
ここで、変更データとは、アプリケーションプロセス１１が共有メモリセグメント１４に書き込んだデータ２３２及び共通メモリセグメント１４の位置情報を格納したデータ同期ヘッダ２３１を指す。
【００２５】
図６は、データ同期ヘッダ２３１が有する情報の項目を説明する説明図である。図６に示すように、データ同期ヘッダ２３１は、セグメント識別子３１と、セグメントｉｎｄｅｘ３２とを含む。
【００２６】
セグメント識別子３１とは、共有メモリセグメント１４を一意に特定する識別子をいう。これにより、共有メモリセグメント１４が複数存在している場合でも、データ同期送受信プロセス１３は、セグメント識別子３１を参照して、どの共有メモリセグメント１４のデータであるかを判断することができる。
【００２７】
セグメントｉｎｄｅｘ３２とは、共有メモリセグメント１４の配列の先頭から何番目のデータであるかを意味する。
【００２８】
書き込み位置ｉｎｄｅｘ２１は、運用系のアプリケーションプロセス１１Ａが共有メモリセグメント１４Ａにデータを書き込んだ後、アプリケーションプロセス１１Ａがそのデータを含む変更データを一時保存領域１５Ａに書き込む位置を示すものである。
【００２９】
これにより、運用系のアプリケーションプロセス１１Ａは、変更データを書き込む一時保存領域１５Ａの位置を知ることができ、また運用系のデータ送受信プロセス１３Ａは
、アプリケーションプロセス１１Ａが一時保存領域１５Ａの変更データ配列２３の先頭から何番目のデータまで書き込まれているかを知ることができる。
【００３０】
また、書き込み位置ｉｎｄｅｘ２１は、アプリケーションプロセス１１Ａが一時保存領域１５Ａに変更データを書き込むたびに、変更データ書き込み完了後にインクリメントされるものである。
【００３１】
読み込み位置ｉｎｄｅｘ２２は、運用系のデータ送受信プロセス１３Ａが一時保存領域１５Ａから変更データを読み込む位置を示すものである。これにより、運用系のデータ送受信プロセス１３Ａが変更データ配列２３の先頭から何番目のデータまでを読み込んだかを知ることができる。
【００３２】
また、読み込み位置ｉｎｄｅｘ２２は、運用系のデータ送受信プロセス１３Ａが変更データ２３を読み込むたびに、変更データ読み込み完了後にインクリメントされるものである。
【００３３】
なお、書き込み位置ｉｎｄｅｘ２１及び読み込み位置ｉｎｄｅｘ２２は、例えば３２ビットでアトミック性が保証される。
【００３４】
ここで、アトミックな処理とはそれ以上分割できない単位の処理をいい、アトミック性とは、一般に、３２ビット以上のＣＰＵで実装されたサーバ上では、マルチプロセス・マルチスレッドで３２ビットの領域の書き込み・読み込みが保証されることをいう。
【００３５】
例えば、ｉｎｔ型の共有メモリ領域Ｘに、プロセスＡが排他なしに定期的に0x100を書き込み、またプロセスＢが0x10を書き込んだ場合、共有メモリ領域Ｘには、例えば0x110等のようなデータの書き込みはなされず、0x100又は0x10のいずれかが書き込まれることが保障される。
【００３６】
アプリケーションプロセス１１は、アプリケーションを実行するプロセスである。
【００３７】
冗長構成管理プロセス１２は、両系サーバで互いに故障監視を行なうプロセスであり、例えば両系サーバ間の冗長構成管理プロセス１２はそれぞれＵＤＰで接続して故障を監視する。また、冗長構成管理プロセス１２の機能としては次のような機能を持つ。
【００３８】
冗長構成管理プロセス１２は、待機系サーバ１Ｂの冗長構成管理プロセス１１Ｂと通信できなくなったことを検出すると、自系のデータ送受信プロセス１３及びアプリケーションプロセス１１に対して運用系へ切り替わるように指示する機能をもつ。
【００３９】
また、両系の冗長構成管理プロセス１２は、自系のアプリケーションプロセス１１の生存確認をする機能をもつ。
【００４０】
さらに、運用系の冗長構成管理プロセス１２Ａは、アプリケーションプロセス１１Ａがダウンすると、自系のデータ送受信プロセス１３Ａに対して待機系に切り替わるよう指示するとともに、他系の冗長構成管理プロセス１２に対して系切替要求を送信する機能を持つ。
【００４１】
また、待機系の冗長構成管理プロセス１２Ｂは、運用系の冗長構成管理プロセス１２Ａから系切替要求を受信すると、自系のデータ送受信プロセス１３Ｂ及びアプリケーションプロセス１１Ｂに対して運用系へ切り替わるよう指示する機能を持つ。
【００４２】
さらにまた、データ送受信プロセスから自系サーバの状態を要求されると、運用系であるか待機系であるかを返却する機能を持つ。
【００４３】
データ送受信プロセス１３は、自系サーバと他系サーバとの間でデータを同期するために、データの受け渡しをするプロセスである。運用系のデータ送受信プロセス１３Ａは、定期的に一時保存領域１５Ａを確認し、アプリケーションプロセス１１Ａからデータが書き込まれていれば、待機系のデータ送受信プロセス１３Ｂへ転送する機能をもつ。また、待機系のデータ送受信プロセス１３Ｂは、運用系のデータ送受信プロセス１３Ａからデータを受け取ると、待機系の共有メモリデータセグメント１４Ｂに書き込む機能を持つ。
【００４４】
（Ａ−２）第１の実施形態の動作
次に、第１の実施形態の運用系サーバ１Ａと待機系サーバ１Ｂとの間のデータ同期処理について図面を参照しながら説明する。
【００４５】
（Ａ−２−１）運用系サーバのデータ送受信プロセスの動作
まず、運用系サーバ１Ａのデータ送受信プロセスの動作について説明する。図７は、運用系サーバ１Ａのデータ送受信プロセスの処理を示す動作フローチャートである。
【００４６】
自系サーバのデータ送受信プロセス１３が起動すると（ステップＳ１０１）、共有メモリ上に一時保存領域１５を確保する（ステップＳ１０２）。このとき、一時保存領域１５がすでに生成されている場合、その既に生成されている領域を用いることができる。
【００４７】
次に、自系サーバが運用系サーバであるか又は待機系サーバであるかを冗長構成管理プロセス１２に確認する（ステップＳ１０３）。その結果、自系サーバが運用系であればステップＳ１０４に移行し、自系サーバが待機系サーバであれば図８の「Ａ」へ遷移して待機系サーバ１Ｂとして機能する。
【００４８】
ステップＳ１０４では、冗長構成管理プロセス１２Ａから待機系に遷移するよう指示があったかを確認する。このとき、冗長構成管理プロセス１２Ａから待機系への遷移の指示があれば図８の「Ａ」へ、待機系への遷移の指示がなければステップＳ１０５へ遷移する。
【００４９】
ステップＳ１０５では、待機系サーバ１Ｂのデータ送受信プロセス１３ＢからＴＣＰ接続をされたかを確認する。
【００５０】
そして、ＴＣＰ接続がなされた場合、ステップＳ１０６へ遷移し、運用系サーバ１Ａの共有メモリデータセグメント１４Ａのデータを全て読み込み（ステップＳ１０６）、共有メモリデータセグメント１４Ａから読み込んだ全てのデータを待機系サーバのデータ送受信プロセス１３Ｂに送信する（ステップＳ１０７）。
【００５１】
一方、ステップＳ１０５において、待機系サーバ１Ｂのデータ送受信プロセス１３Ｂとの間でＴＣＰ接続がなされていない場合、一時保存領域１５Ａのデータを読み込んで同期する必要がないので、読み込み位置を書き込み位置と等しくする（見かけ上一時保存領域１５Ａのデータを全て読み込んだ状態にする）（ステップＳ１１４）。
【００５２】
このステップＳ１１４の処理実施後、一定時間だけ待機した後（ステップＳ１１５）、ステップＳ１０４に戻って処理を繰り返す。
【００５３】
ステップＳ１０８では、データ送受信プロセス１３Ａが一時保存領域１５Ａの書き込み位置ｉｎｄｅｘ２１と読み込み位置ｉｎｄｅｘ２２とを参照して、一時保存領域１５Ａに同期をする必要があるデータがあるか否かを確認する。
【００５４】
例えば、書き込み位置ｉｎｄｅｘ２１＝３、読み込み位置ｉｎｄｅｘ２２＝１である場合、アプリケーションプロセス１１Ａが変更データ配列の先頭から３番目まで書き込んだところ、データ送受信プロセス１３Ａが変更データ配列の先頭から１番目までしか読み込んでいないため、変更データ配列の先頭から２番目、３番目の領域に同期する必要があるデータが残っているということになる。
【００５５】
ステップＳ１０８において一時保存領域１５Ａに同期をする必要があるデータが存在する場合、一時保存領域１５Ａからデータを読み込み、待機系サーバ１Ｂのデータ送受信プロセス１３Ｂに送信する（ステップＳ１０９）。
【００５６】
そして、ステップＳ１０９でのデータ送信後、データ送受信プロセス１３Ａは、一時保存領域１５Ａの読み込み位置ｉｎｄｅｘ２２の値を「１」だけ加算する。なお、読み込み位置ｉｎｄｅｘ２２の値が変更データ配列の最大数よりも大きくなった場合、読み込み位置ｉｎｄｅｘ２２に「０」を設定する（すなわち、リセットする）。
【００５７】
なお、第１の実施形態では、データ送受信プロセス１３Ａは書き込み位置ｉｎｄｅｘ２１を必ず先に参照し、その後変更データ配列の内容を参照するものとする。
【００５８】
一方、ステップＳ１０８において読み込み位置ｉｎｄｅｘ２１と書き込み位置ｉｎｄｅｘ２２とが同じ値となった場合、データ送受信プロセス１３Ａは、一時保存領域からデータを全て読み取ったと判断し、ステップＳ１１１へ遷移する。
【００５９】
ステップＳ１１１では、待機系サーバ１Ｂのデータ送受信プロセス１３ＢとのＴＣＰ接続を確認し、ＴＣＰ接続が切断されていた場合、データ同期をできないのでステップＳ１１４へ遷移する。一方、ＴＣＰが接続されたままである場合、ステップＳ１１２へ遷移する。
【００６０】
ステップＳ１１２では、冗長構成管理プロセス１２Ａから待機系サーバ１Ｂに遷移するよう指示があったかを確認し、待機系サーバ１Ｂへの遷移の指示があれば図８の「Ａ」へ移行し、待機系サーバ１Ｂへの遷移の指示がなければ、一定時間だけ待機した後（ステップＳ１１３）、ステップＳ１０８へ戻り、処理を繰り返す。
【００６１】
（Ａ−２−２）待機系サーバのデータ送受信プロセスの動作
続いて、待機系サーバ１Ｂのデータ送受信プロセス１３Ｂの動作について図面を参照して説明する。
【００６２】
図８は、待機系サーバ１Ｂのデータ送受信プロセス１３Ｂの処理を示す動作フローチャートである。
【００６３】
図７のステップＳ１０３において自系サーバが待機系サーバ１Ｂであると判断されると、運用系サーバ１Ａのデータ送受信プロセス１３Ａに対してＴＣＰ接続を実施する（ステップＳ２０１）。
【００６４】
ステップＳ２０２では、運用系サーバ１Ａのデータ送受信プロセス１３ＡとＴＣＰ接続がなされたか否かを確認し、ＴＣＰ接続がされていればステップＳ２０３に移行し、ＴＣＰ接続がされていなければステップＳ２０５に遷移する。
【００６５】
運用系サーバ１Ａのデータ送受信プロセス１３ＡとＴＣＰ接続後、データ送受信プロセス１３Ａからデータが与えられている場合（ステップＳ２０３）、そのデータを共有メモリセグメント１４Ｂに書き込みを行ない（ステップＳ２０４）、その後、ステップＳ２０３に戻って処理を繰り返す。
【００６６】
一方、ＴＣＰ接続するデータ送受信プロセス１３Ａからデータが与えられていない場合（ステップＳ２０３）、ステップＳ２０５に遷移する。
【００６７】
ステップＳ２０５では、自系（待機系）サーバの冗長構成管理プロセス１２Ｂから運用系サーバへの遷移指示があるか否かを確認する。
【００６８】
そして、運用系サーバへの遷移指示があれば、図７のステップＳ１０４に遷移して運用系サーバ１Ａのデータ送受信プロセス１３Ａとして機能する。
【００６９】
一方、運用系サーバへの遷移指示がなければ、運用系サーバ１Ａのデータ送受信プロセス１３ＡとＴＣＰ接続が確立されているか否かを確認し（ステップＳ２０６）、ＴＣＰ接続されていれば、ステップＳ２０３に戻って処理を繰り返し、ＴＣＰ接続されてなければ、ステップＳ２０１に戻って処理を繰り返す。
【００７０】
（Ａ−２−３）運用系サーバのアプリケーションプロセスの動作
続いて、運用系サーバのアプリケーションプロセスの処理について図面を参照して説明する。
【００７１】
図９は、運用系サーバ１Ａのアプリケーションプロセス１１Ａの共有メモリデータセグメント１４Ａへのデータ書き込み処理を示すフローチャートである。
【００７２】
運用系サーバ１Ａにおいて、アプリケーションプロセス１１Ａのデータ書き込み処理が開始すると（ステップＳ３０１）、まず、アプリケーションプロセス１１Ａは、共有メモリデータセグメント１４Ａにデータを書き込む（ステップＳ３０２）。
【００７３】
アプリケーションプロセス１１Ａが共有メモリセグメント１４Ａにデータを書き込むと、次に、アプリケーションプロセス１４Ａは、書き込み位置ｉｎｄｅｘ２１を参照し、一時保存領域１５Ａの書き込み位置ｉｎｄｅｘ２１が示す領域に変更データを書き込む（ステップＳ３０３）。
【００７４】
そして、一時保存領域１５Ａへの変更データの書き込みが完了すると、アプリケーションプロセス１１Ａは、書き込み位置ｉｎｄｅｘ２１の値を「１」だけ加算する（ステップＳ３０４）。
【００７５】
このように、共有メモリセグメント１４Ａにデータ書き込みしたアプリケーションプロセス１１Ａが、一時保存領域１５Ａに変更データの書き込みを完了した後に、書き込み位置ｉｎｄｅｘ２１の値をインクリメントすることで、変更データを全て書き終えるまで、データ送受信プロセス１３Ａによる当該書き込み中の変更データの読み込みを行なわないようにすることができる。
【００７６】
その結果、アプリケーションプロセス１１Ａの書き込み処理をロックするような排他制御を行なわずに、アプリケーションプロセス１１Ａが書き込み中の変更データの読み込み処理を回避することができる。
【００７７】
なお、一時保存領域１５Ａの保存領域が上限に達した場合、アプリケーションプロセス１１Ａは書き込み位置ｉｎｄｅｘ２１の値を先頭領域を示す「０」に戻すことで（ステップＳ３０４）、次の書き込みの際には、書き込み位置ｉｎｄｅｘ２１の「０」の領域にデータを書き込むこととする（ステップＳ３０３）。すなわち、一時保存領域１５Ａの保存領域が上限に達した場合、次の変更データを保存する領域を一時保存領域１５Ａの先頭領域とすることで、一時保存領域１５Ａの保存領域を循環的に利用する。
【００７８】
図１０は、運用系サーバ１Ａにおけるデータの書き込み処理から読み込み処理までの動きを説明する説明図である。
【００７９】
アプリケーションプロセス１１Ａが共有セグメント１４Ａのデータ書き込みを行なうと（ステップＳ４０１）、共有メモリセグメント１４Ａへのデータ書き込み後、アプリケーションプロセス１１Ａは、変更したデータ内容を一時保存領域１５Ａにも書き込む（ステップＳ４０２）。
【００８０】
そして、変更したデータ内容の一時保存領域１５Ａへの書き込みが完了すると、アプリケーションプロセス１１Ａは、書き込み位置ｉｎｄｅｘ２１の値を「１」だけ加算して更新する（ステップＳ４０３）。
【００８１】
その後、データ送受信プロセス１３Ａは、書き込み位置ｉｎｄｅｘ２１及び読み込み位置ｉｎｄｅｘ２２を読み出す（ステップＳ４０４）。そして、データ送受信プロセス１３Ａは、、書き込み位置ｉｎｄｅｘ２１の値と読み込み位置ｉｎｄｅｘ２２との値とを比較して、読み込むことができる変更データが存在する場合に、読み込み位置ｉｎｄｅｘ２２の値に基づいて一時保存領域１５Ａからデータを読み出し（ステップＳ４０５）、待機系サーバ１Ｂのデータ送受信プロセス１３Ｂに転送する（ステップＳ４０６）。
【００８２】
続いて、図１１は、アプリケーションプロセス１１Ａの共有メモリセグメント１４Ａへのデータ書込み処理とデータ送受信プロセス１３Ａのデータ読み込み処理が同時に発生した場合の動きを説明する説明図である。
【００８３】
この場合、アプリケーションプロセス１１Ａは、共有メモリセグメント１４Ａにデータ書き込みをしているおり（ステップＳ５０１）、一時保存領域１５Ａへはアクセスしていない。
【００８４】
そのため、データ送受信プロセスが一時保存領域１５Ａを参照しても、一時保存領域１５Ａには変更データが入力されていないから、変更途中のデータが同期されることはない。
【００８５】
図１２は、アプリケーションプロセス１１Ａが一時保存領域１５Ａに変更データを書き込み中に、データ送受信プロセス１３Ａがデータ読み込み処理を行なう場合の動きを説明する説明図である。
【００８６】
第１の実施形態では、書き込み位置ｉｎｄｅｘ２１の値は、アプリケーションプロセス１１Ａが一時保存領域１５Ａへの変更データの書き込み完了後に更新される。
【００８７】
そのため、図１２では、アプリケーションプロセス１１Ａが、書き込み位置ｉｎｄｅｘが「２」の位置に変更データを書き込み中であるが、書き込み位置ｉｎｄｅｘ２１は「１」の値を示したままである（ステップＳ６０１）。
【００８８】
この場合に、データ送受信プロセス１３Ａは、書き込み位置ｉｎｄｅｘ２１及び読み込み位置ｉｎｄｅｘ２２を比較して変更データの読み込みを行なうため、変更データの書き込み処理が完了し書き込み位置ｉｎｄｅｘ２１が更新されるまでは、データ送受信プロセス１３Ａは変更途中のデータを読み込むことはない（ステップＳ６０２）。
【００８９】
（Ａ−３）第１の実施形態の効果
以上のように、第１の実施形態によれば、書き込み位置ｉｎｄｅｘ及び読み込み位置ｉｎｄｅｘを備え、アプリケーションプロセスはデータを一時保存領域に保存後に、書き込み位置ｉｎｄｅｘを加算し、データ送受信プロセスは書き込み位置ｉｎｄｅｘでデータが書き込まれている位置を確認しながら、一時保存領域からデータを読み込むことで、排他なしに一貫性を保証した（変更中の中途半端なデータを同期させない）データ同期を実現している。
【００９０】
（Ｂ）他の実施形態
（Ｂ−１）第１の実施形態では、共有メモリセグメントが１個の場合を説明したが、共有メモリセグメントを複数個の場合にも適用できる。
【００９１】
（Ｂ−２）第１の実施形態では、アプリケーションプロセスが１個の場合を説明したが、一時保存領域を複数個用意すれば、複数のアプリケーションプロセスを備えるようにしてもよい。
【００９２】
（Ｂ−３）第１の実施形態の図７、図８、図９は処理の一例を示しただけであり、アトミックな書き込み・読み込みが保証される書き込み位置ｉｎｄｅｘを用意し、アプリケーションプロセス（データ変更側）はデータを一時保存領域に保存後、書き込み位置ｉｎｄｅｘを加算し、データ送受信プロセス（データ読み込み側）は書き込み位置ｉｎｄｅｘで書き込まれた位置を確認後、一時保存債域からデータを読み込む、というフローであれば、図７、図８、図９以外の処理フローでも適用できる。
【００９３】
（Ｂ−４）第１の実施形態にある一時保存領域の変更データ配列サイズや共有メモリセグメントの配列サイズに関して、実施形態と異なっていても適用できる。
【００９４】
（Ｂ−５）書き込み位置ｉｎｄｅｘ及び読み込み位置ｉｎｄｅｘは、一時保存領域へ変更データを書き込む際又は読み込む際に、どこまで変更データを書き込んだか、どこまで読み込んだかを示すものである。そのため、第１の実施系では、一時保存領域の保存領域の位置を示すｉｎｄｅｘとして説明したが、これに限定されることなく、例えば、一時保存領域の空き領域の容量を利用するようにしてもよい。
【００９５】
（Ｂ−６）第１の実施形態では、一時保存領域の保存領域に上限を決めておき、その上限に達した場合に、次の変更データを先頭領域に保存する場合を例示した。このとき、先頭領域に既に保存されているデータについてはクリアせず、次の変更データで更新するものとする。
【００９６】
また、データ送受信プロセスが一時保存領域から読み込んだデータについて一時保存領域から削除するようにしてもよい。
【００９７】
（Ｂ−７）第１の実施形態で説明した各種機能は、サーバ上のソフトウェア処理により実現されるものであるが、実現可能であればハードウェア処理により実現するようにしてもよい。
【図面の簡単な説明】
【００９８】
【図１】第１の実施形態の運用系サーバ−待機系サーバの二重化構成を示す構成図である。
【図２】従来の運用系サーバ−待機系サーバの二重化構成を示す構成図である。
【図３】従来のデータ同期処理の動きを説明する説明図である。
【図４】従来のデータ同期処理における課題を説明する説明図である（その１）。
【図５】従来のデータ同期処理における課題を説明する説明図である（その２）。
【図６】第１の実施形態のデータ同期ヘッダの項目を説明する説明図である。
【図７】第１の実施形態の運用系サーバのデータ送受信プロセスの動作を示すフローチャートである。
【図８】第１の実施形態の待機系サーバのデータ送受信プロセスの動作を示すフローチャートである。
【図９】第１の実施形態のアプリケーションプロセスのデータ変更動作を示すフローチャートである。
【図１０】第１の実施形態の運用系におけるアプリケーションプロセスのデータ書き込み処理からデータ送受信プロセスによるデータ読み込み処理までの動きを説明する説明図である。
【図１１】第１の実施形態の運用系におけるアプリケーションプロセスのデータ書き込み処理とデータ送受信プロセスによるデータ読み込み処理とが同時発生した場合の動きを説明する説明図である。
【図１２】第１の実施形態の運用系におけるアプリケーションプロセスの変更データ書込み中でのデータ送受信プロセスによるデータ読み込み処理の動きを説明する説明図である。
【符号の説明】
【００９９】
１Ａ…運用系サーバ、１Ｂ…待機系サーバ、１１Ａ及び１１Ｂ…アプリケーションサーバ、１２Ａ及び１２Ｂ…冗長構成管理プロセス、１３Ａ及び１３Ｂ…データ送受信プロセス、１４Ａ及び１４Ｂ…共有メモリセグメント、１５Ａ及び１５Ｂ…一時保存領域。
【図１】
0004561800.tif 000002
【図２】
0004561800.tif 000003
【図３】
0004561800.tif 000004
【図４】
0004561800.tif 000005
【図５】
0004561800.tif 000006
【図６】
0004561800.tif 000007
【図７】
0004561800.tif 000008
【図８】
0004561800.tif 000009
【図９】
0004561800.tif 000010
【図１０】
0004561800.tif 000011
【図１１】
0004561800.tif 000012
【図１２】
0004561800.tif 000013