(57)【特許請求の範囲】
【請求項１】
同じ処理を並列に実行可能な複数のノードと、前記複数のノードを接続するネットワークと、前記ネットワークを介して前記複数のノードと接続されるゲートウェイと、を備える計算機システムであって、
前記複数のノードは、前記処理を実行中の一つ以上の第１ノードと、前記計算機システムに組み込まれる第２ノードとを含み、
前記各ノードは、前記ネットワークに接続されるインタフェースと、前記インタフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記第１ノードは、
前記第２ノードの起動を検出した場合、前記第１ノードが実行する処理の進捗状態及び内部状態値を含むデータを抽出し、
前記抽出されたデータを前記第２ノードに書き込み、
前記ゲートウェイを介して受信したメッセージによって要求された処理を実行する時に、前記第２ノードに処理の開始を通知し、
前記第２ノードは、
前記データの書き込みの終了を検出すると、前記第１ノードが前記データを抽出した時に前記第１ノードで実行されている処理から実行を開始し、
前記第１ノードが前記データを抽出した後に前記第１ノードが受信したメッセージによって要求される処理を順に続けて実行し、
前記第１ノードから通知された処理の開始を参照することによって、前記第１ノードと前記第２ノードとの処理の進捗の差を監視し、
前記第１ノードと前記第２ノードとの処理の進捗の差が解消された場合、前記第２ノードの同期稼働化の完了を通知することを特徴とする計算機システム。
【請求項２】
前記第１ノードは、前記第２ノードへのデータの書き込みを終了した時、前記データの書き込み終了の通知を前記第２ノードに送信し、
前記第２ノードは、前記第１ノードから送信されたデータの書き込み終了の通知を受信することによって、前記第１ノードからのデータの書き込みの終了を検出することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記ゲートウェイは、受信したメッセージに一意の連続した番号を割り当て、
前記第２ノードは、前記第１ノードから開始が通知された処理を要求したメッセージに割り当てられた番号と、前記第２ノードが実行している処理を要求したメッセージに割り当てられた番号とを比較することによって、前記第１ノードと前記第２ノードとの処理進捗の差を監視することを特徴とする請求項１に記載の計算機システム。
【請求項４】
前記各ノードは、前記ゲートウェイを介して受信したメッセージによって要求された処理を実行し、前記ゲートウェイを介して処理の結果を送信するユーザプログラムを実行し、
前記プロセッサは、
前記ユーザプログラムによって実行される処理を複数のステップに分割し、
前記分割された複数のステップのうち、データを入出力する一つ以上のステップにポイントを設定し、
前記第１ノードは、前記設定されたポイントに前記ユーザプログラムの処理が至った時に、前記ユーザプログラムの進捗状態及び内部状態値を前記メモリに書き込み、
前記第２ノードは、前記メモリに書き込まれたユーザプログラムの進捗状態及び前記内部状態値を参照し、前記設定されたポイントの次のステップから前記ユーザプログラムの処理を開始することを特徴とする請求項１に記載の計算機システム。
【請求項５】
前記第２ノードは、前記第１ノードが前記データを抽出した時に前記第１ノードで実行されている処理の進捗状態及び内部状態値に基づいて、前記第１ノードが前記データを抽出した時に前記第１ノードで実行されている処理から実行を開始することを特徴とする請求項１に記載の計算機システム。
【請求項６】
前記第１ノードは、前記第２ノードに処理の開始を通知すると共に、前記実行される処理が対象とする前記ゲートウェイを介して受信したメッセージを前記第２ノードに転送し、
前記第２ノードは、前記処理の開始の通知及び前記処理が対象とするメッセージを前記第１ノードから受信した場合に、前記受信した処理の開始の通知及び前記処理の対象とされるメッセージを保持することを特徴とする請求項１に記載の計算機システム。
【請求項７】
前記第２ノードは、前記第１ノードが前記データを抽出した後に前記第１ノードが実行した処理が対象とするメッセージを用いて、前記処理を順に実行することを特徴とする請求項６に記載の計算機システム。
【請求項８】
前記第２ノードは、前記第１ノードから転送されたメッセージと同じメッセージを前記ゲートウェイから受信して保持している場合、前記ゲートウェイから受信したメッセージを用いて前記処理を実行することを特徴とする請求項７に記載の計算機システム。
【請求項９】
前記第２ノードは、
前記第１ノードで実行中の処理を要求したメッセージの番号と前記第２ノードで実行中の処理を要求したメッセージの番号とを比較し、
前記第１ノードが、前記第２ノードで実行中の処理を要求したメッセージを対象とする処理の実行を終了している場合、前記実行中の処理の結果を前記ゲートウェイに送信しないことを特徴とする請求項１に記載の計算機システム。
【請求項１０】
前記第２ノードは、前記第１ノードから通知された処理の開始を参照し、前記第１ノードで実行中の処理を要求したメッセージと、前記第２ノードで実行中の処理を要求したメッセージとが一致した時に、前記第１ノードと前記第２ノードとの処理進捗の差が解消されたと判定することを特徴とする請求項１に記載の計算機システム。
【請求項１１】
前記第２ノードは、前記第１ノードが前記データを抽出した時から前記第２ノードへのデータの書き込みを終了するまでの間に、前記第１ノードでデータが更新されなかった場合、前記第２ノードの同期稼働化が完了したと判定することを特徴とする請求項１に記載の計算機システム。
【請求項１２】
前記第１ノードは、
前記第２ノードの起動を検出した場合、前記第１ノードが実行する処理の進捗状態及び内部状態値を含む前記第１ノードの全てのデータを抽出し、
前記抽出されたデータを保存することを特徴とする請求項１に記載の計算機システム。
【請求項１３】
前記ゲートウェイは、
処理の要求を含むメッセージを受信し、
二つ以上の前記第１ノードに前記メッセージを送信し、
前記要求された処理について、二つ以上の前記第１ノードが実行した結果を比較し、
前記比較された結果のうち、正しい結果を選択し、
前記選択された結果を応答として送信することを特徴とする請求項１に記載の計算機システム。
【請求項１４】
同じ処理を並列に実行可能な複数のノードと、前記複数のノードを接続するネットワークと、前記ネットワークを介して前記複数のノードと接続されるゲートウェイと、を備える計算機システムで実行されるノードの同期稼動化方法であって、
前記複数のノードは、前記処理を実行中の一つ以上の第１ノードと、前記計算機システムに組み込まれる第２ノードとを含み、
前記各ノードは、前記ネットワークに接続されるインタフェースと、前記インタフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記方法は、
前記第１ノードが、前記第２ノードの起動を検出した場合、前記第１ノードが実行する処理の進捗状態及び内部状態値を含むデータを抽出し、
前記第１ノードが、前記抽出されたデータを前記第２ノードに書き込み、
前記第１ノードが、前記ゲートウェイを介して受信したメッセージによって要求された処理を実行する時に、前記第２ノードに処理の開始を通知し、
前記第２ノードが、前記データの書き込みの終了を検出すると、前記第１ノードが前記データを抽出した時に前記第１ノードで実行されている処理から実行を開始し、
前記第２ノードが、前記第１ノードが前記データを抽出した後に前記第１ノードが受信したメッセージによって要求される処理を順に続けて実行し、
前記第２ノードが、前記第１ノードから通知された処理の開始を参照することによって、前記第１ノードと前記第２ノードとの処理の進捗の差を監視し、
前記第２ノードが、前記第１ノードと前記第２ノードとの処理の進捗の差が解消された場合、前記第２ノードの同期稼働化の完了を通知することを特徴とするノードの同期稼動化方法。
【請求項１５】
同じ処理を並列に実行可能な複数のノードと、前記複数のノードを接続するネットワークと、前記ネットワークを介して前記複数のノードと接続されるゲートウェイと、を備える計算機システムに備わるノードであって、
前記ネットワークに接続されるインタフェースと、前記インタフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記プロセッサは、
他の前記ノードによって抽出され、前記他のノードが実行する処理の進捗状態及び内部状態値を含むデータの書き込みを受け付け、
前記他のノードからデータの書き込みの終了を検出すると、前記他のノードが前記データを抽出した時に、前記他のノードで実行されている処理から実行を開始し、
前記他のノードが前記データを抽出した後に前記他のノードが受信したメッセージによって要求される処理を順に続けて実行し、
前記他のノードから通知された処理の開始を参照することによって、前記他のノードと当該ノードとの処理の進捗の差を監視し、
前記他のノードと当該ノードとの処理の進捗の差が解消された場合、当該ノードの同期稼働化の完了を通知することを特徴とするノード。
【請求項１６】
同じ処理を並列に実行可能な複数のノードと、前記複数のノードを接続するネットワークと、前記ネットワークを介して前記複数のノードと接続されるゲートウェイと、を備える計算機システムに備わるノードを同期稼動化するプログラムであって、
前記複数のノードは、前記処理を実行中の一つ以上の第１ノードと、前記計算機システムに組み込まれる一つ以上の第２ノードとを含み、
前記各ノードは、前記ネットワークに接続されるインタフェースと、前記インタフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記プログラムは、
前記第１ノードによって抽出された、実行する処理の進捗状態及び内部状態値を含むデータの書き込みを受け付け、
前記第１ノードからデータの書き込みの終了を検出すると、前記第１ノードが前記データを抽出した時に、前記第１ノードで実行されている処理から実行を開始し、
前記第１ノードが前記データを抽出した後に前記第１ノードが受信したメッセージによって要求される処理を順に続けて実行し、
前記第１ノードから通知された処理の開始を参照することによって、前記第１ノードと前記第２ノードとの処理の進捗の差を監視し、
前記第１ノードと前記第２ノードとの処理の進捗の差が解消された場合、前記第２ノードの同期稼働化が完了を通知する処理を前記第２ノードのプロセッサに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関し、特にフォールトトレラントコンピュータシステムにおいてノードを同期して稼働する技術に関するものである。
【背景技術】
【０００２】
特許文献１には、複数のサブシステムから送出される同一のデータを二台のホストコンピュータで同時に処理する二重化コンピュータシステムにおいて、二重化されたホストコンピュータの運転を開始する際に、処理データの同期をとる処理が記載されている。具体的には、マスター系の処理データをスレーブ系へコピーする処理（スレーブ組み込み処理）を、２台のディスク装置と、系間通信路とを用いて行う二重化コンピュータシステムのスレーブ組込方法記載されている。
【特許文献１】特開平１１−７３２７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
前述した従来技術では、ノードを同期して稼働するために、稼働中ノードの処理を一時停止させた後、稼働中ノードから組込みノードへのデータのコピーを行い、コピーが完了した後に、組込みノードも含めた全ノードの処理を一斉に再開させることによって、ノード間のデータ内容、プログラムの実行状態、及び入出力等を一致させている。ここで、ノードを同期して稼動するとは、複数のコンピュータで同時に処理するシステムにおいて、メンテナンス及び異常発生時の回復作業等のために停止させていた一部のコンピュータを再びシステムに復旧させる場合に、稼働しているコンピュータとデータ内容、プログラムの実行状態、及び入出力等の状態を同期して稼働させることである。
【０００４】
しかし、稼働中ノードを無停止のまま、再同期稼働化を実行すると、データのコピーが終了した時点で稼働中ノードと組込みノードとのプログラムの実行状態の不一致が生じる可能性がある。また、データの更新頻度によっては、データのコピーが終了した時点でノード間のデータ内容の不一致が生じる可能性がある。すなわち、データ更新が頻繁に発生する場合、データのコピー処理の実行中又はコピー処理の終了直後に稼働中ノードで、プログラムの実行によるデータの書き込み等によってデータが更新される。
【０００５】
ここでデータ内容に不一致が生じたために、再度データのコピー処理を実行しても、同様の事象が再度発生するためデータの一致化は完了しない。また、同一の処理内容を実行した場合であってもデータ内容が異なると、これらのデータ内容を参照して行う処理の結果は、異なる可能性があり、ノード間で出力に不一致が生じる可能性がある。
【０００６】
そこで本発明は、停止させていたノードを再度システムに組込む際に、正常稼働中の他のノードの処理を中断することなく、前記停止させていたノードの状態を稼働中ノードの状態と一致させることを可能とし、フォールトトレラントコンピュータシステムにおける高い信頼性の維持と、フォールトトレラントコンピュータシステムによって実行及び提供されるサービスの無停止とを保証し、ノードを同期して稼働する方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の代表的な一例を示せば以下の通りである。すなわち、同じ処理を並列に実行可能な複数の独立したノードと、前記複数のノードを接続するネットワークと、前記ネットワークを介して前記複数のノードと接続されるゲートウェイと、を備える計算機システムであって、前記複数のノードは、前記処理を実行中の一つ以上の第１ノードと、前記計算機システムに組み込まれる第２ノードとを含み、前記各ノードは、前記ネットワークに接続されるインタフェースと、前記インタフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、前記第１ノードは、前記第２ノードの起動を検出した場合、前記第１ノードが実行する処理の進捗状態及び内部状態値を含むデータを抽出し、前記抽出されたデータを前記第２ノードに書き込み、前記ゲートウェイを介して受信したメッセージによって要求された処理を実行する時に、前記第２ノードに処理の開始を通知し、前記第２ノードは、前記データの書き込みの終了を検出すると、前記第１ノードが前記データを抽出した時に前記第１ノードで実行されている処理から実行を開始し、前記第１ノードが前記データを抽出した後に前記第１ノードが受信したメッセージによって要求される処理を順に続けて実行し、前記第１ノードから通知された処理の開始を参照することによって、前記第１ノードと前記第２ノードとの処理の進捗の差を監視し、前記第１ノードと前記第２ノードとの処理の進捗の差が解消された場合、前記第２ノードの同期稼働化の完了を通知する。
【発明の効果】
【０００８】
本発明の一実施形態によれば、メンテナンス及び異常発生時の回復作業等のために停止させていたノードを再度システムに組込む際に、正常に稼働中のノードの処理を中断することなく、停止させていたノードの状態と稼働中ノードの状態とを一致化させることを可能とする。また、フォールトトレラントコンピュータシステムにおける高い信頼性を維持することができる。また、フォールトトレラントコンピュータシステムによって実行及び提供されるサービスの無停止を保証できる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施の形態について図面を参照しながら説明する。
【００１０】
＜実施の形態１＞
まず、本発明の第１の実施の形態のフォールトトレラントコンピュータシステムについて説明する。フォールトトレラントコンピュータシステムは、ネットワークを介して相互に接続された複数の独立したノードによって構成され、各ノードで同じ処理を並列して実行する計算機システムである。
【００１１】
図１は、本発明の第１の実施の形態のフォールトトレラントコンピュータシステム０１０１の構成図である。
【００１２】
フォールトトレラントコンピュータシステム０１０１は、複数のノード０１１１及びゲートウェイサーバ０１１３を備える。
【００１３】
各ノード０１１１は、ＬＡＮ０１１２を介して相互に接続され、各ノード０１１１は、ＬＡＮ０１１２を介してゲートウェイサーバ０１１３と接続される。
【００１４】
各ノード０１１１は、処理装置０１２１、記憶装置０１２２及び通信装置０１２３を備える。
【００１５】
処理装置０１２１は、記憶装置０１２２に格納されているソフトウェアプログラムを実行する。処理装置０１２１は、例えば、ＣＰＵのようなプロセッサで構成するとよい。
【００１６】
本実施形態で説明する処理は、処理装置０１２１がメモリにロードされたプログラムを実行することによって行われる。また、プログラムの全部又は一部がハードウェアで構成されることによって、処理が行なわれてもよい。
【００１７】
記憶装置０１２２は、フォールトトレラントコンピュータシステム０１０１によって、外部システム０１０３に提供されるサービスを実行するために必要なデータと、サービスに関する外部システム０１０３からの要求に対して処理を実行するユーザプログラムと、複数のノード０１１１間で稼働中のノードと組込み中のノードとを同期させるプログラム、及び、ＬＡＮ０１１２を介してノード０１１１とゲートウェイサーバ０１１３との間を通信するプログラム等を格納するメモリである。また、記憶装置０１２２は、ハードディスク（ＨＤＤ）で構成されてもよい。
【００１８】
通信装置０１２３は、ＬＡＮ０１１２に接続されるインタフェースである。通信装置０１２３は、ゲートウェイサーバ０１１３から入力メッセージ０１３２を受信し、ゲートウェイサーバ０１１３に出力メッセージ０１４２を送信する通信処理を行う。
【００１９】
ゲートウェイサーバ０１１３は、広域ネットワーク０１０２に接続され、フォールトトレラントコンピュータシステム０１０１と外部システム０１０３との通信を中継する。
【００２０】
フォールトトレラントコンピュータシステム０１０１は、広域ネットワーク０１０２を介して通信可能な外部システム０１０３から要求を受信し、受信した要求に対する処理を実行し、実行された処理の結果を応答として外部システム０１０３に送信するサービスを提供する。
【００２１】
図１に示す例では、フォールトトレラントコンピュータシステム０１０１は、外部システム０１０３からの要求を含む入力メッセージ０１０３を受信し、入力メッセージ０１０３に対する処理の結果が格納された出力メッセージ０１４１を外部システム０１０３に送信する。
【００２２】
フォールトトレラントコンピュータシステム０１０１の内部では、ゲートウェイサーバ０１１３は、広域ネットワーク０１０２を介して、外部システム０１０３からの要求を含む入力メッセージ０１３１を受信する。そして、ゲートウェイサーバ０１１３は、受信した入力メッセージ０１３１を入力メッセージ０１３２として、ＬＡＮ０１１２を介してフォールトトレラントコンピュータシステム０１０１内の各ノード０１１１に転送する。ここで、ゲートウェイサーバ０１１３は、入力メッセージ０１３２を各ノード０１１１にブロードキャストにより送信するとよい。
【００２３】
ここで、各ノード０１１１は、ゲートウェイサーバ０１１３によって転送された入力メッセージ０１３２をほぼ同時に受信し、受信した入力メッセージ０１３２に対する処理を実行して、実行した処理の結果を格納した出力メッセージ０１４２を、ＬＡＮ０１１２を介してゲートウェイサーバ０１１３に送信する。
【００２４】
各ノード０１１１から出力メッセージ０１４２を受信したゲートウェイサーバ０１１３は、要求元の外部システム０１０３（入力メッセージ０１３１を送信した外部システム０１０３）に応答として送信する出力メッセージ０１４１を作成し、作成した出力メッセージ０１４１を外部システム０１０３に送信する。ここで、ゲートウェイサーバ０１１３は、各ノード０１１１から受信した１つ以上の出力メッセージ０１４２のデータ内容の比較照合及び正誤判定等を行い正しいメッセージを選択する。そして、選択された正しいメッセージデータを出力メッセージ０１４１として、要求元の外部システム０１０３に送信する。
【００２５】
データ内容の比較照合及び正誤判定は、ゲートウェイサーバ０１１３が受信した出力メッセージ０１４２に基づいて行われる。例えば、ゲートウェイサーバ０１１３が受信した複数の出力メッセージ０１４２を比較し、出力メッセージ０１４２に格納されている処理の結果が同一であるものを、多数決によって正しいメッセージとして決定する。また、処理結果が同一である出力メッセージ０１４２の数が同じであり、多数決によって決定できない場合には、受信した出力メッセージ０１４２のうち、ゲートウェイサーバ０１１３に先着した出力メッセージ０１４２を正しいメッセージとして決定する。
【００２６】
なお、図１に示す例では、フォールトトレラントコンピュータシステム０１０１が四つのノード０１１１を備えているが、ノード０１１１は、二つ以上であればいくつ備わっていてもよい。
【００２７】
このように、フォールトトレラントコンピュータシステム０１０１は、二つ以上のノード０１１１を備え、外部システム０１０３からの要求に対して、処理を二つ以上のノード０１１１で同時に併行して実行することによって、一つ以上のノード０１１１で障害が発生した場合でも、残りの稼働中のノード０１１１が処理を実行するため、システムとして正常に動作されるサービスの提供を維持することを可能とし、システムの耐障害性及び信頼性を高めている。
【００２８】
図２Ａは、本発明の第１の実施の形態のノード０１１１の再同期稼働化の概要を示す図である。
【００２９】
フォールトトレラントコンピュータシステムは、稼働中ノード０２０１及び組込みノード０２０２を備え、稼働中ノード０２０１及び組込みノード０２０２は、ＬＡＮ０１１２を介して接続されるノードである。
【００３０】
ここで、稼働中ノード０２０１は、正常に処理を実行しているノードである。また、組込みノード０２０２は、メンテナンス及び異常発生時の回復作業等のために、一時的に停止していた状態から、再起動し再度システムに組込まれていくノードである。
【００３１】
稼働中ノード０２０１は、データ０２１２（例えば、共有メモリ、ファイル等）を参照してユーザプログラム０２１１を実行している。
【００３２】
組込みノード０２０２の再同期稼働化を実行する際に、稼働中ノード０２０１は、ユーザプログラム０２１１を無停止で正常に実行させたまま、データ０２１２のコピー及びユーザプログラム０２１１の実行状態等を通知する。
【００３３】
組込みノード０２０２の再同期稼働化の完了時には、組込みノード０２０２のユーザプログラム０２２１は、稼働中ノード０２０１のユーザプログラム０２１１と同じ実行状態（同一の入力メッセージに対する処理を同時に実行している状態）となり、組込みノード０２０２のデータ０２２２は、稼働中ノード０２０１のデータ０２１２と一致する。
【００３４】
図２Ｂは、本発明の第１の実施の形態の組込みノード０２０２の再同期稼働化処理のシーケンス図である。
【００３５】
まず、稼働中ノード０２０１のユーザプログラム０２１１は、各入力（入力メッセージ）０２５１、０２５２及び０２５３に対する処理を実行し、実行された結果を出力（出力メッセージ）０２６１、０２６２及び０２６３として返す。
【００３６】
一方、組込みノード０２０２は、メンテナンス及び異常発生時の回復作業等のために停止していた状態から再起動する（０２４１）。
【００３７】
次に、稼働中ノード０２０１は、組込みノード０２０２が再起動したことを検出すると、稼働中ノード０２０１のデータ０２１２と組込みノード０２０２のデータ０２２とを一致化させるため、組込みノード０２０２のデータ０２２２に、稼働中ノード０２０１のデータ０２１２を書き込む（０２３１）。組込みノード０２０２の再起動は、稼働中ノード０２０１が組込みノード０２０２から再起動したことの通知を直接受信することによって検出される。また、稼働中ノード０２０１が、マスターとなるノード０１１１から組込みノード０２０２の再起動の通知を受信することによって再起動が検出されてもよい。また、稼働中ノード０２０１が、組込みノード０２０２から問合せを受け付けることによって再起動が検出されてもよい。
【００３８】
次に、組込みノード０２０２は、データの書き込みが終了すると、データ一致化が完了したことを検出する（０２４２）。データ一致化の完了は、例えば、データを書き込みした稼働中ノード０２０１から、データ一致化が完了した通知を受信することによって検出される。
【００３９】
次に、組込みノード０２０２は、ユーザプログラム０２２１の実行状態を、稼働中ノード０２０１のユーザプログラム０２１１の実行状態と一致させて、ユーザプログラム０２２１の処理を再開する（０２４３）。以降、組込みノード０２０２は、稼働中ノード０２０１で実行されるユーザプログラム０２１１と同様に、入力０２５３に対して処理を実行し、出力０２７３を返す。ここで、組込みノード０２０２の処理が正常に実行される場合には、出力０２７２、０２７３は、それぞれ稼働中ノード０２０１の出力０２６２、０２６３と一致する。
【００４０】
図３は、本発明の第１の実施の形態のノード０１１１のモジュールの構成図である。
【００４１】
ノード０１１１のモジュールは、外部システム０１０３からの要求に対する処理等を実行する。
【００４２】
ノード０１１１のモジュールは、ユーザプログラム０３０２、共有メモリ０３０３、ファイル０３０４及びミドルウェア０３０１を含む。
【００４３】
ユーザプログラム０３０２は、外部システム０１０３から要求された処理を実行し、実行した結果を応答として返す。
【００４４】
共有メモリ０３０３は、ユーザプログラム０３０２が処理中にデータの読み込み、及び、データの書き込みを行なうメモリである。
【００４５】
ファイル０３０４は、ユーザプログラム０３０２が処理中にデータの読み込み、及び、データの書き込みを行うファイルデータである。
【００４６】
ミドルウェア０３０１は、データ同期処理部０３１１、ユーザプログラム実行管理部０３１２、入出力管理部０３１３、データ通信部０３１４、入力管理テーブル０３２１、処理対象管理テーブル０３２２、ユーザプログラム進捗管理テーブル０３２５、入力バッファ０３２３、及び同期用バッファ０３２４を含む。
【００４７】
データ同期処理部０３１１は、組込みノード０２０２の再同期稼働化の処理が実行される時に、稼働中ノード０２０１のデータを組込みノード０２０２のデータに書き込む。
【００４８】
ユーザプログラム実行管理部０３１２は、処理対象管理テーブル０３２２を参照し、ユーザプログラム０３０２の起動及び実行状態の監視等を行う。
【００４９】
入出力管理部０３１３は、入力バッファ０３１３から取り出した入力メッセージをユーザプログラム０３０２に引き渡し、ユーザプログラム０３０２が実行した処理の出力を、データ通信部０３１５を用いて送信する。
【００５０】
データ通信部０３１４は、通信媒体０３０５（例えば、ＬＡＮ０１１２）を介して他のノード０１１１及びゲートウェイサーバ０１１３等と通信する。
【００５１】
入力管理テーブル０３２１は、受信済みの入力メッセージを管理する。入力管理テーブル０３２１の詳細は、図６Ｃを用いて後述する。
【００５２】
処理対象管理テーブル０３２２は、ユーザプログラムの処理対象となる入力メッセージ（処理を要求する入力メッセージ）を管理する。処理対象管理テーブル０３２２の詳細は、図６Ｂを用いて後述する。
【００５３】
ユーザプログラム進捗管理テーブル０３２５は、ユーザプログラムの実行状態を管理する。ユーザプログラム進捗管理テーブル０３２５の詳細は、図６Ａを用いて後述する。
【００５４】
入力バッファ０３２３は、データ通信部０３１５を介してゲートウェイサーバ０１１３から受信した入力メッセージを、ユーザプログラム０３０２が処理対象として使用する時まで格納する。なおユーザプログラム進捗管理テーブル０３２５の内容データは、稼働中ノードから組込みノードへコピー、一致化できるように、共有メモリ０３０３もしくはファイル０３０４に保存される。
【００５５】
同期バッファ０３２４は、組込みノード０２０２の再同期稼働化処理の実行時に、データ通信部０３１５を介して稼働中ノード０２０１から受信した入力メッセージを、ユーザプログラム０３０２が処理対象として使用する時まで格納する。
【００５６】
組込みノード０２０２の再同期稼働化処理の実行時に、稼働中ノード０２０１のデータを組込みノード０２０２に書き込む場合、稼働中ノード０２０１のデータ同期処理部０３１１は、稼働中ノード０２０１内の共有メモリ０３０３及びファイル０３０４から書き込み用のデータを取り出し、データ通信部０３１４を用いて取り出した書き込み用のデータを組込みノード０２０２に送信する。
【００５７】
組込みノード０２０２のデータ同期処理部０３１１は、稼働中ノード０２０１から送信された書き込み用のデータを、データ通信部０３１４を用いて受信し、組込みノード０２０２内の共有メモリ０３０３及びファイル０３０４に、上書きを許して受信した書き込み用のデータを書き込む。
【００５８】
図４は、本発明の第１の実施の形態の、計算機間の再同期稼働化の状態一致化方法の概要を示す。
【００５９】
図４に示す例では、組込みノード０２０２の状態と稼働中ノード０２０１の状態（データ内容、プログラム実行状態、及び入出力等）を一致化させる組込みノード０２０２の再同期稼働化の処理の流れの概要を説明する。
【００６０】
稼働中ノードでは、入力＃１１（０４０１）、入力＃１２（０４０２）、入力＃１３（０４０３）、入力＃１４（０４０４）及び入力＃１５（０４０５）の各メッセージを受信する度に、ユーザプログラム０２１１が処理０４１１、０４１２、０４１３及び０４１４をそれぞれ実行して、出力（実行結果）を返す。
【００６１】
稼働中ノード０２０１は、組込みノード０２０２の再起動を検出した後、ある時点（０４０６）における稼働中ノード０２０１の全データを抜き出し、抜き出したデータを組込みノード０２０２に書き込む（０４０７）。
【００６２】
そして、稼働中ノード０２０１は、各入力に対するユーザプログラムの処理を開始する度に、組込みノード０２０２にユーザプログラムの処理開始の通知及び入力メッセージを転送する（０４３１、０４３２、０４３３、０４３４及び０４３５）。
【００６３】
組込みノード０２０２は、稼働中ノード０２０１からユーザプログラムの処理開始の通知を受信し、転送された入力メッセージを蓄積する。そして、稼働中ノード０２０１からデータの書き込み（０４０７）が完了すると、稼働中ノード０２０１で全データを抜き出した時点で処理対象となる入力メッセージ（図４に示す例では、入力＃１１（０４０１）の転送メッセージ０４３１）に対する処理（０４２１）から処理を再開する。以降、順番に入力＃１２、＃１３、＃１４及び＃１５の各メッセージを用いて、処理０４２２、０４２３、０４２４及び０４２５を連続して実行する。
【００６４】
ここで、組込みノード０２０２が連続して実行する処理０４２２、０４２３、０４２４及び０４２５の対象となる入力メッセージは、組込みノード０２０２の再同期稼働化処理が完了するまで、稼働中ノード０２０１から転送される入力メッセージ０４３１、０４３２、０４３３、０４３４及び０４３５が使用される。
【００６５】
また、稼働中ノード０２０１から転送される入力メッセージ０４３１、０４３２、０４３３、０４３４及び０４３５が最初は使用されるが、稼働中ノード０２０１から処理開始の通知及び転送される入力メッセージを受信する度に、外部システム０１０３から直接受信して入力バッファ０３２３に格納された入力メッセージ又は入力管理テーブル０３２１を参照し、稼働中ノード０２０１から転送された入力メッセージと同一の入力メッセージを保持していた時点で、以降は外部システム０１０３から直接受信した入メッセージを用いて、連続して処理０４２２、０４２３、０４２４及び０４２５が実行されてもよい。この場合、組込みノード０２０２は、稼働中ノード０２０１から送信される処理開始の通知のみを参照する。
【００６６】
このように、稼働中ノード０２０１は、組込みノード０２０２に処理開始の通知をするのみであるため、組込みノード０２０２を同期して稼動させる時に稼動中ノード０２０１の負荷が増大することを抑止することができる。
【００６７】
組込みノード０２０２は、連続した処理を数回繰り返すと、組込みノード０２０２で実行されるユーザプログラム０２２１の処理対象の入力（入力メッセージ）が、稼働中ノード０２０１で実行されるユーザプログラム０２１１の処理対象の入力（入力メッセージ）と一致する（図４に示す例では、入力＃１５に対する処理実行時）。この時点で、組込みノード０２０２は、稼働中ノード０２０１とデータ内容が一致し、組込みノード０２０２の再同期稼働化処理は完了したとみなす。
【００６８】
このように、組込みノード０２０２のデータ内容を、ある時点での稼働中ノード０２０１のデータ内容にしておき、以降は、稼働中ノード０２０１と同じ入力に対する処理を、組込みノード０２０２が順次追従して実行することによって、組込みノード０２０２のデータ内容は、稼働中ノード０２０１のデータ内容と一致し、外部からの同じ入力に対して同時に処理が実行されるようになる。
【００６９】
したがって、本発明の第１の実施形態によって、データ内容の更新が頻繁に発生する場合でも、稼働中ノード０２０１を停止させることなく、組込みノード０２０２を稼働中ノード０２０１と同じ状態にすることができる。
【００７０】
図５は、本発明の第１の実施の形態のノード０１１１で実行されるユーザプログラムの作成方法の概要を示す。
【００７１】
ユーザプログラム０５０１は、複数の処理ステップ０５２１、０５２２、０５２３、０５２４、０５２５及び０５２６を含む。ユーザプログラム０５０１には、指定ポイント０５０３として、０５３１、０５３２、０５３３が設定される。指定ポイント０５０３は、ユーザプログラム０５０１の各処理ステップの中で、主に外部との入出力及びデータ書き込み等が発生する箇所に設けられるものであり、ユーザプログラム０５０１の設計の際に決定され、ユーザプログラム０５０１に実装される。
【００７２】
図５に示すように、稼働中ノード０２０１は、ユーザプログラム０５０１の実行に伴って、各指定ポイント０５３１及び０５３２で、各時点での内部状態を外部記憶領域０５０２に書き込む（０５１１、０５１２）。外部記憶領域０５０２には、例えば、共有メモリ０３０３及びファイル０３０４が用いられ、稼働中ノード０２０１から組込みノード０２０２へのデータ書き込みによるデータ一致化を実施することで、前記外部記憶領域０５０２に書き込まれるユーザプログラム０５０１の内部状態は、稼働中ノード０２０１と組込みノード０２０２の間で、共有される。
【００７３】
図５に示す例では、ユーザプログラム０５０１の処理ステップ０５２５の終了後にノード０１１１が停止している（０５１４）。
【００７４】
一方、組込みノード０２０２は、ユーザプログラム０５０１を再起動する（０５１５）。この場合、ユーザプログラム０５０１は、外部記憶領域０５０２を参照し、前回のユーザプログラム実行時に指定ポイント０５３１及び０５３１で外部記憶領域０５０２に書き込まれた内部状態を読み込む（０５１３）。前回のユーザプログラム実行時には指定ポイント０５３２まで内部状態が書き込まれているため、処理ステップ０５２１、０５２２及び０５２３は実行されず、再起動後は処理ステップ０５２４より処理が再開される（０５１６）。
【００７５】
図６Ａは、本発明の第１の実施の形態のユーザプログラム進捗管理テーブル０３２５を示す。
【００７６】
ユーザプログラム進捗管理テーブル０３２５は、ユーザプログラム名称０６１１、プロセスＩＤ０６１２、処理対象メッセージ通番０６１３、経過済ポイント番号０６１４、及び内部状態値０６１５を含む。
【００７７】
ユーザプログラム名称０６１１は、ノード０１１１上で実行され、外部システム０１０３から要求された処理を実行し、実行結果の応答を返すユーザプログラムの名称である。
【００７８】
プロセスＩＤ０６１２は、ユーザプログラムがノード０１１１上で実行される時のプロセスＩＤである。
【００７９】
処理対象メッセージ通番０６１３は、ユーザプログラムが処理対象としている最新の入力メッセージの通番（連続した番号）である。
【００８０】
経過済ポイント番号０６１４は、ユーザプログラムの処理の実行過程において、すでに実行済みの最新のポイント番号である。ポイント番号は、例えば、図５に示す指定ポイント０５３２の番号である。
【００８１】
内部状態値０６１５は、ユーザプログラム名称０６１１に対応するユーザプログラムの処理の実行過程において、経過済ポイント番号０６１４に格納されるポイント番号に該当するポイントでのユーザプログラムの内部状態値である。
【００８２】
図６Ａに示す例では、ユーザプログラム進捗管理テーブル０３２５の第１行のユーザプログラム名称０６１１、プロセスＩＤ０６１２、処理対象メッセージ通番０６１３、経過済ポイント番号０６１４、及び内部状態値０６１５には、それぞれ、「ＵＰ＿Ａ」、「１１１１」、「１０」、「３」及び「ＸＸＸＸＸＸＸＸ」が格納されている。これは、ノード０１１１が実行するユーザプログラムの名称が「ＵＰ＿Ａ」であり、「ＵＰ＿Ａ」がノード０１１１で実行される時のプロセスＩＤが「１１１１」であり、「ＵＰ＿Ａ」が処理対象としている入力メッセージが「１０」であり、「ＵＰ＿Ａ」がすでに実行済みの最新の指定ポイントが「３」であり、指定ポイント「３」における内部状態値が「ＸＸＸＸＸＸＸＸ」であることを意味する。
【００８３】
ユーザプログラム名称０６１１、プロセスＩＤ０６１２、及び処理対象メッセージ通番０６１３は、ノード０１１１上で稼働するミドルウェア０３０１によって書き込まれる。また、経過済ポイント番号０６１４及び内部状態値０６１５は、実行されるユーザプログラムが指定されたポイントを経過する度に、ユーザプログラムによって更新される。
【００８４】
図６Ｂは、本発明の第１の実施の形態の処理対象管理テーブル０３２２を示す。
【００８５】
処理対象管理テーブル０３２２は、ノード０６２１、通番０６２２、受信時刻０６２３、ステータス０６２４、及び更新時刻０６２５を含む。
【００８６】
ノード０６２１は、ノード０１１１の区分であり、例えば、「組込みノード」及び「稼働中ノード」が格納される。
【００８７】
通番０６２２は、各ノード０１１１で現在処理対象となる最新の入力メッセージの通番である。
【００８８】
受信時刻０６２３は、通番０６２２に該当する入力メッセージを稼働中ノードが直接受信した時刻である。
【００８９】
ステータス０６２４は、各ノードで実行されるユーザプログラムの処理のステータス（実行状態）である。ステータス０６２４には、例えば、「未処理」、「処理中」、及び「処理終了」が格納される。
【００９０】
更新時刻０６２５は、処理対象管理テーブル０３２２の各行が更新された最新の更新時刻である。
【００９１】
図６Ｂに示す例では、処理対象管理テーブル０３２２の第１行のノード０６２１、通番０６２２、受信時刻０６２３、ステータス０６２４、及び更新時刻０６２５には、それぞれ、「組込みノード」、「１０」、「１０：１０：１５」、「処理中」及び「１０：１１：４０」が格納されている。これは、組込みノード０２０２の現在処理対象となる入力メッセージの通番は「１０」であり、通番「１０」の入力メッセージを稼働中ノード０２０１が受信した時刻が「１０：１０：１５」であり、通番「１０」の入力メッセージに対応する処理のステータスは「処理中」であり、処理対象管理テーブル０３２２の第１行が更新された時刻が「１０：１１：４０」であることを意味する。
【００９２】
処理対象管理テーブル０３２２の各項目は、組込みノード０２０２で処理が実行される度に更新される。また、組込みノード０２０２が稼働中ノード０２０１から処理開始の通知を受信する度に更新される。
【００９３】
なお、処理対象管理テーブル０３２２は、組込みノードの再同期稼働化処理の実行中に、組込みノード０２０２でのみ更新及び利用される。
【００９４】
図６Ｃは、本発明の第１の実施の形態の入力管理テーブル０３２１を示す。
【００９５】
入力管理テーブル０３２１は、通番０６３１及び受信時刻０６３２を含む。
【００９６】
通番０６３１は、ノード０１１１が外部システム０１０３から受信し、入力バッファ０３２３に格納された入力メッセージの通番である。
【００９７】
受信時刻０６３２は、通番０６３１に該当する入力メッセージを受信した時刻である。
【００９８】
図６Ｃに示す例では、入力管理テーブル０３２１の第１行の通番０６３１及び受信時刻０６３２には、それぞれ、「１２」及び「１０：１０：２５」が格納されている。これは、ノード０１１１が受信した入力メッセージの通番が「１２」であり、「１０：１０：２５」に受信されたことを意味する。
【００９９】
入力管理テーブル０３２１の各項目は、入力メッセージを受信する度に更新される。
【０１００】
図７は、本発明の第１の実施の形態のノード０１１１の再同期稼働化を実行する組込みノード０２０２での処理のフローチャートである。
【０１０１】
以降に示す処理は、記憶装置０１２２に格納されているプログラムを処理装置０１２１が実行することによって実現される。
【０１０２】
図７に示す処理は、メンテナンス及び異常発生時の回復作業等のために停止していた組込みノード０２０２が再同期稼働化をする際に実行される。
【０１０３】
まず、組込みノード０２０２は、稼働中ノード０２０１からのデータ書き込みの処理が完了するまで待機する（０７０１）。なお、稼働中ノード０２０１からのデータ書き込みの処理については図８を用いて後述する。
【０１０４】
次に、組込みノード０２０２は、稼働中ノード０２０１から書き込み終了通知を受信したか否かを判定する（０７０２）。稼働中ノード０２０１から書き込み終了通知を受信していない場合、稼働中ノード０２０１からのデータ書き込みの処理が完了するまで待機する必要があるため、ステップ０７０１に戻る。一方、稼働中ノード０２０１から書き込み終了通知を受信した場合、処理はステップ０７０３に進む。
【０１０５】
なお、組込みノード０２０２は、稼働中ノード０２０１から書き込み終了通知を受信することによって、データの書き込み等の制御権が稼働中ノード０２０１から組込みノード０２０２に切り替わるタイミングを検知することができる。
【０１０６】
次に、組込みノード０２０２は、ステップ０７０２で受信した書き込み終了通知を参照し、稼働中ノード０２０１のデータ書き込み処理中にデータの更新があるか否かを判定する（０７０３）。データの更新がない場合、再同期稼働化を実行する必要がないため、処理はステップ０７１４に進む。一方、データ更の新がある場合、処理はステップ０７０４に進む。
【０１０７】
次に、組込みノード０２０２は、処理対象管理テーブル０３２２を参照する（０７０４）。
【０１０８】
次に、組込みノード０２０２は、ステップ０７０４で参照された結果に基づいて、ユーザプログラムの処理対象となる入力メッセージを同期用バッファ０３２４から読み込む（０７０５）。具体的には、組込みノード０２０２は、同期用バッファ０３２４に格納されている入力メッセージから、未処理の通番０６２２のうち最も番号の小さい入力メッセージをユーザプログラムの処理対象とし、該当する入力メッセージを同期用バッファ０３２４から読み込む。
【０１０９】
次に、組込みノード０２０２は、ステップ０７０５で読み込んだ入力メッセージのデータをユーザプログラムに引き渡す（０７０６）。
【０１１０】
次に、組込みノード０２０２は、処理対象管理テーブル０３２２のステータス情報を更新する（０７０７）。具体的には、組込みノード０２０２は、ステップ０７０６でユーザプログラムに引き渡した入力メッセージに対応する通番を通番０６２２に格納し、該当する入力メッセージを稼働中ノード０２０１が受信した時刻を受信時刻０６２３に格納し、ステータス０６２４に「処理中」の値を格納し、更新する現在の時刻を更新時刻０６２５に格納する。
【０１１１】
次に、組込みノード０２０２は、外部システム０１０３から直接受信した入力メッセージを格納している入力バッファ０３２３を参照する（０７０８）。
【０１１２】
次に、組込みノード０２０２は、ステップ０７０８で参照した入力バッファ０３２３に格納されている入力メッセージの通番と、ステップ０７０６でユーザプログラムに引き渡した入力メッセージの通番とを比較し、同じメッセージであるか否かを判定する（０７０９）。
【０１１３】
入力バッファ０３２３に格納されている入力メッセージとユーザプログラムに引き渡した入力メッセージとが同じメッセージでない場合、入力バッファ０３２３に格納されている入力メッセージを削除する必要がないため、処理はステップ０７１１に進む。一方、入力バッファ０３２３に格納されている入力メッセージとユーザプログラムに引き渡した入力メッセージとが同じメッセージである場合、処理はステップ０７１０に進む。
【０１１４】
次に、組込みノード０２０２は、ステップ０７０９で同じメッセージであると判定された入力メッセージを入力バッファ０３２３から取り出し、取り出した入力メッセージを削除する（０７１０）。
【０１１５】
なお、ステップ０７０８からステップ０７１０の処理は、組込みノード０２０２の再同期稼働化の処理が完了するまで、稼働中ノード０２０１から転送される入力メッセージを用いてユーザプログラムを実行する場合の処理ステップである。
【０１１６】
次に、組込みノード０２０２は、処理対象管理テーブル０３２２を参照する（０７１１）。
【０１１７】
次に、組込みノード０２０２は、ステップ０７１１で参照された処理対象管理テーブル０３２２の稼働中ノード０２０１の処理対象メッセージの通番０６２２と、組込みノード０２０２の処理対象メッセージの通番０６２２とを比較し、通番０６２２が一致するか否かを判定する（０７１２）。
【０１１８】
通番０６２２が一致しない場合、組込みノード０２０２が稼働中ノード０２０１の状態と一致するため、未処理の入力メッセージに対するユーザプログラムを実行する必要がある。この場合、処理はステップ０７０４に戻る。一方、通番０６２２が一致する場合、処理はステップ０７１３に進む。
【０１１９】
次に、組込みノード０２０２は、稼働中ノード０２０１に再同期稼働化完了通知を送信する。
【０１２０】
次に、組込みノード０２０２は、組込みノード０２０２の再同期稼働化が正常に完了したと判定し、処理を終了する（０７１４）。すなわち、処理を終了した以降は、組込みノード０２０２が外部システム０１０３から直接受信した入力メッセージに対してユーザプログラムの処理を実行する。
【０１２１】
図８は、本発明の第１の実施の形態の組込みノード０２０２のユーザプログラムの処理結果の出力を制御する処理のフローチャートである。
【０１２２】
図８に示す処理は、ユーザプログラムの処理結果を外部システム０１０３に送信する時に実行される。
【０１２３】
まず、組込みノード０２０２は、処理対象管理テーブル０３２２を参照する（０８０２）。
【０１２４】
次に、組込みノード０２０２は、ステップ８０２で処理対象管理テーブル０３２２を参照した結果、現時点で、稼働中ノード０２０１のユーザプログラムの処理対象の入力メッセージの通番０６２２と、組込みノード０２０２のユーザプログラムの処理対象の入力メッセージの通番０６２２とを比較し、組込みノード０２０２の通番０６２２が稼働中ノード０２０１の通番０６２２以上であるか否かを判定する（０８０３）。
【０１２５】
組込みノード０２０２の通番０６２２が稼働中ノード０２０１の通番０６２２以上でない場合、処理結果を外部システム０１０３に送信する必要がないため、処理はステップ０８０５に進む。一方、組込みノード０２０２の通番０６２２が稼働中ノード０２０１の通番０６２２以上である場合、処理結果を外部システム０１０３に送信する必要があるため、処理はステップ０８０４に進む。
【０１２６】
なお、組込みノード０２０２の通番０６２２が稼働中ノード０２０１の通番０６２２以上でない場合、処理結果を外部システム０１０３に送信する必要がないのは、組込みノード０２０２が処理対象とした入力メッセージに対する処理が、稼働中ノード０２０１で既に実行を終了しており、入力メッセージの要求元である外部システム０１０３に処理結果を送信済みであるためである。したがって、組込みノード０２０２が遅れて処理結果を送信することによる外部システム０１０３側での不整合の発生を回避するため、組込みノード０２０２で処理結果を送信せずに廃棄する必要がある。
【０１２７】
次に、組込みノード０２０２は、ユーザプログラムの処理結果を出力メッセージとして外部システム０１０３に送信する（０８０４）。
【０１２８】
ステップ８０５で、組込みノード０２０２は、ユーザプログラムの処理結果を外部システム０１０３に送信せずに廃棄する（０８０５）。組込みノード０２０２が処理結果を外部システム０１０３に送信せずに廃棄することによって、ゲートウェイ０１１３は、処理結果を制御する負荷を減らし、機能を有効に利用することができる。
【０１２９】
次に、組込みノード０２０２は、処理対象管理テーブル０３２２のステータス情報を更新する（０８０６）。具体的には、処理対象管理テーブル０３２２のステータス０６２４に「処理終了」の値を格納し、更新する現在の時刻を更新時刻０６２５に格納する。そして、処理は終了する。
【０１３０】
図９Ａは、本発明の第１の実施の形態の稼働中ノード０２０１がある時点で抜き出した全データを組込みノード０２０２に書き込む処理のフローチャートである。
【０１３１】
図９Ａに示す処理は、稼働中ノード０２０１が組込みノード０２０２の再起動を検出した時に実行される。
【０１３２】
まず、稼働中ノード０２０１は、指定されたある時点での稼働中ノード０２０１の全データ（例えば、共有メモリ及びファイル等のデータ）を抜き出し、バッファ領域等に一時保存する（０９１１）。
【０１３３】
次に、稼働中ノード０２０１は、ステップ０９１１で一時保存されたデータを組込みノード０２０２に書き込む（０９１２）。なお、組込みノード０２０２に同じデータがある場合でも、稼働中ノード０２０１は、全て上書きを許して組込みノード０２０２にデータを書き込む。
【０１３４】
次に、稼働中ノード０２０１は、ステップ０９１２の書き込みが終了したか否かを判定する（０９１３）。書き込みが終了していない場合、全てのデータを書き込む必要があるため、処理はステップ９１２に戻る。一方、書き込みが終了した場合、処理はステップ０９１４に進む。
【０１３５】
次に、稼働中ノード０２０１は、組込みノード０２０２に通知するデータの書き込み終了通知のメッセージを作成する（０９１４）。
【０１３６】
次に、稼働中ノード０２０１は、ステップ０９１２のデータ書き込み処理が開始してから終了するまでの間に、ユーザプログラムによる書き込みによって、稼働中ノード０２０１のデータが更新されたか否かを判定する（０９１５）。データが更新されていない場合、組込みノード０２０２にデータの更新がないことを通知する必要があるため、処理はステップ０９１６に進む。一方、データが更新されている場合、処理はステップ０９１７に進む。
【０１３７】
次に、稼働中ノード０２０１は、ステップ０９１４で作成した書き込み終了通知のメッセージに、データの更新が無いことを示す情報を追加する（０９１６）。
【０１３８】
次に、稼働中ノード０２０１は、ステップ０９１４で作成した書き込み終了通知を組込みノード０２０２に送信する（０９１７）。
【０１３９】
次に、稼働中ノード０２０１は、ステップ０９１１でバッファ領域に一時保存されたデータを削除する（０９１８）。そして、処理は終了する。
【０１４０】
図９Ｂは、本発明の第１の実施の形態の稼働中ノード０２０１で入力メッセージに対する処理を開始する際に組込みノード０２０２に処理開始を通知する処理のフローチャートである。
【０１４１】
まず、稼働中ノード０２０１は、組込みノード０２０２の再起動を検出する（０９２１）。
【０１４２】
次に、稼働中ノード０２０１は、外部システム０１０３から入力メッセージを受信する（０９２２）。
【０１４３】
次に、稼働中ノード０２０１は、ステップ０９２２で受信した入力メッセージに対する処理を開始する通知、及び、入力メッセージの転送を組込みノード０２０２に行う（０９２３）。
【０１４４】
次に、稼働中ノード０２０１は、ステップ０９２２で受信した入力メッセージに対するユーザプログラムの処理を実行する（０９２４）。
【０１４５】
次に、稼働中ノード０２０１は、組込みノード０２０２から再同期稼働完了通知を受信したか否かを判定する（０９２５）。組込みノード０２０２から再同期稼働完了通知を受信していない場合、入力メッセージに対する処理開始の通知、及び、入力メッセージの転送を継続して組込みノード０２０２に行う必要があるため、処理はステップ０９２２に戻る。一方、組込みノード０２０２から再同期稼働完了通知を受信した場合、処理は終了する。
【０１４６】
図１０Ａは、本発明の第１の実施の形態の稼働中ノード０２０１が組込みノード０２０２に送信する処理開始通知のメッセージ形式を示す。
【０１４７】
処理開始通知のメッセージ１００１は、ヘッダ情報１０１１、識別情報１０１２、通番１０１３、受信時刻１０１４、ステータス１０１５、及び入力データ１０１６を含む。
【０１４８】
ヘッダ情報１０１１は、メッセージプロトコル等に関する情報である。
【０１４９】
識別情報１０１２は、メッセージ１００１が稼働中ノード０２０１からの処理開始通知であることを示す識別情報である。
【０１５０】
通番１０１３は、稼働中ノード０２０１が外部システム０１０３から直接受信し、組込みノード０２０２に転送する入力メッセージに付与される通番である。
【０１５１】
受信時刻１０１４は、稼働中ノード０２０１が入力メッセージを外部システム０１０３から直接受信した時刻である。
【０１５２】
ステータス１０１５は、稼働中ノード０２０１における入力メッセージに対するユーザプログラムの処理の状態である。処理開始通知は、稼働中ノード０２０１でユーザプログラムの処理が開始される時点で送信されるため、ステータス１０１５には、通常「処理中」の値が格納される。
【０１５３】
入力データ１０１６は、稼働中ノード０２０１が外部システム０１０３から直接受信し、組込みノード０２０２に転送する入力メッセージのデータ内容である。
【０１５４】
図１０Ｂは、本発明の第１の実施の形態の稼働中ノード０２０１が組込みノード０２０２に送信する書き込み終了通知、及び、組込みノード０２０２が稼働中ノード０２０１に送信する再同期稼働完了通知のメッセージ形式を示す。
【０１５５】
書き込み終了通知又は再同期稼働完了通知のメッセージ１００２は、ヘッダ情報１０２１、識別情報１０２２、及びフラグ１０２３を含む。
【０１５６】
ヘッダ情報１０２１は、メッセージプロトコル等に関する情報である。
【０１５７】
識別情報１０２２は、メッセージ１００２が稼働中ノード０２０１からの書き込み終了通知又は組込みノード０２０２からの再同期稼働完了通知であることを示す識別情報である。
【０１５８】
フラグ１０２３は、メッセージ１００２が書き込み終了通知である場合（識別情報１０２２が、メッセージ１００２が稼働中ノード０２０１からの書き込み終了通知であることを示す識別情報である場合）、稼働中ノード０２０１から組込みノード０２０２へのデータの書き込み処理が終了するまでに、稼働中ノード０２０１のデータの更新が発生したか否かのフラグ情報である。
【０１５９】
本実施形態では、メンテナンス及び異常発生時の回復作業等によって停止させていた一部のノードを再びフォールトトレラントコンピュータシステムに復旧させる場合について説明したが、フォールトトレラントコンピュータシステムに新たにノードを設置する場合にも適用することが可能である。
【０１６０】
以上、本発明の実施の形態について、その実施の形態に基づき具体的に説明したが、これに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【図面の簡単な説明】
【０１６１】
【図１】本発明の第１の実施の形態のフォールトトレラントコンピュータシステムの構成図である。
【図２Ａ】本発明の第１の実施の形態のノードの再同期稼働化の概要を示す図である。
【図２Ｂ】本発明の第1の実施の形態の組込みノードの再同期稼働化処理のシーケンス図である。
【図３】本発明の第１の実施の形態のノードのモジュールの構成図である。
【図４】本発明の第１の実施の形態の、計算機間の再同期稼働化の状態一致化方法の概要を示す。
【図５】本発明の第１の実施の形態のノードで実行されるユーザプログラムの作成方法の概要を示す。
【図６Ａ】本発明の第１の実施の形態のユーザプログラム進捗管理テーブルを示す。
【図６Ｂ】本発明の第１の実施の形態の処理対象管理テーブルを示す。
【図６Ｃ】本発明の第１の実施の形態の入力管理テーブルを示す。
【図７】本発明の第１の実施の形態のノードの再同期稼働化を実行する組込みノードでの処理のフローチャートである。
【図８】本発明の第１の実施の形態の組込みノードのユーザプログラムの処理結果の出力を制御する処理のフローチャートである。
【図９Ａ】本発明の第１の実施の形態の稼働中ノードがある時点で抜き出した全データを組込みノードに書き込む処理のフローチャートである。
【図９Ｂ】本発明の第１の実施の形態の稼働中ノードで入力メッセージに対する処理を開始する際に組込みノードに処理開始を通知する処理のフローチャートである。
【図１０Ａ】本発明の第１の実施の形態の稼働中ノードが組込みノードに送信する処理開始通知のメッセージ形式を示す。
【図１０Ｂ】本発明の第１の実施の形態の稼働中ノードが組込みノードに送信する書き込み終了通知、及び、組込みノードが稼働中ノードに送信する再同期稼働完了通知のメッセージ形式を示す。
【符号の説明】
【０１６２】
０１１１  ノード
０１１３  ゲートウェイ
０１１２  ＬＡＮ
０１０３  外部システム
０２０１  稼働中ノード
０２０２  組込みノード
【図１】
0004874211.tif 000002
【図２Ａ】
0004874211.tif 000003
【図３】
0004874211.tif 000004
【図５】
0004874211.tif 000005
【図６Ａ】
0004874211.tif 000006
【図６Ｂ】
0004874211.tif 000007
【図６Ｃ】
0004874211.tif 000008
【図７】
0004874211.tif 000009
【図８】
0004874211.tif 000010
【図９Ａ】
0004874211.tif 000011
【図９Ｂ】
0004874211.tif 000012
【図１０Ａ】
0004874211.tif 000013
【図１０Ｂ】
0004874211.tif 000014
【図２Ｂ】
0004874211.tif 000015
【図４】
0004874211.tif 000016