(57)【要約】【課題】アクティブな常時リソースを低減し、集中制御を用いないロールバックシステムの提供。【解決手段】第１の計算機、第２の計算機及び第３の計算機を備え、前記各計算機がネットワークによって接続される計算機システムであって、前記第１の計算機、前記第２の計算機及び前記第３の計算機は、ジョブを順に送信及び受信することによって、前記ジョブを処理し、前記第１の計算機は、前記第２の計算機の処理と他の前記計算機の処理との関係を示す依存関係を管理し、前記第２の計算機が正常に稼働しているか否かを判定し、前記第２の計算機が正常に稼働していないと判定された場合、前記第２の計算機において処理された最新の前記ジョブの識別子を前記第３の計算機から取得し、前記取得したジョブの識別子に基づいて、ロールバックをする。【選択図】図３
2010257335.tif 000002
【特許請求の範囲】
【請求項１】
第１の計算機、第２の計算機及び第３の計算機を備え、前記各計算機がネットワークによって接続される計算機システムであって、
前記第１の計算機、前記第２の計算機及び前記第３の計算機は、ジョブを順に送信及び受信することによって、前記ジョブを処理し、
前記第１の計算機は、
前記第２の計算機の処理と他の前記計算機の処理との関係を示す依存関係を管理し、
前記第２の計算機が正常に稼働しているか否かを判定し、
前記第２の計算機が正常に稼働していないと判定された場合、前記第２の計算機において処理された最新の前記ジョブの識別子を前記第３の計算機から取得し、
前記取得したジョブの識別子に基づいて、ロールバックをすることを特徴とする計算機システム。
【請求項２】
前記第１の計算機は、前記第３の計算機に、前記第２の計算機において処理された最新の前記ジョブの識別子を要求し、
前記第３の計算機は、前記第１の計算機に、前記要求された最新のジョブを送信することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記計算機システムは、さらに、第４の計算機を備え、
前記第１の計算機は、前記第２の計算機が正常に稼働していないと判定された場合、前記第４の計算機を、前記第２の計算機に代えて処理を実行させるために起動し、
前記第４の計算機は、前記第１の計算機に、前記第４の計算機の処理と他の前記計算機の処理との関係を示す依存関係を送信することを特徴とする請求項１又は２に記載の計算機システム。
【請求項４】
前記第１の計算機は、前記ジョブの識別子を管理するためのリングバッファを備えることを特徴とする請求項１から３のいずれか一つに記載の計算機システム。
【請求項５】
前記計算機システムは、さらに、第５の計算機を備え、
前記第１の計算機、前記第２の計算機、前記第３の計算機及び第５の計算機は、前記ジョブを順に送信及び受信することによって、前記ジョブを処理し、
前記第１の計算機、前記第２の計算機及び前記第３の計算機の組合せにおいて、前記第１の計算機をロールバックし、
前記第２の計算機、前記第３の計算機及び前記第５の計算機の組合せにおいて、前記第２の計算機をロールバックすることを特徴とする請求項１から４のいずれか一つに記載の計算機システム。
【請求項６】
第１の計算機、第２の計算機及び第３の計算機を備え、前記各計算機がネットワークによって接続される計算機システムであって、
前記第１の計算機、前記第２の計算機、及び前記第３の計算機は、ジョブを順に送信及び受信することによって、前記ジョブを処理し、
前記第３の計算機は、
前記第２の計算機の処理と他の前記計算機の処理との関係を示す依存関係を管理し、
前記第２の計算機が正常に稼働しているか否かを判定し、
前記第２の計算機が正常に稼働していないと判定された場合、前記第２の計算機において処理された最新の前記ジョブの識別子を前記第１の計算機に送信し、
前記第１の計算機は、前記送信されたジョブの識別子に基づいて、ロールバックをすることを特徴とする計算機システム。
【請求項７】
前記計算機システムは、さらに、第４の計算機を備え、
前記第３の計算機は、前記第２の計算機が正常に稼働していないと判定された場合、前記第４の前記計算機を、前記第２の計算機に代えて処理を実行させるために起動し、
前記第４の計算機は、前記第３の計算機に、前記第４の計算機の処理と他の前記計算機の処理との関係を示す依存関係を送信することを特徴とする請求項６に記載の計算機システム。
【請求項８】
前記第３の計算機は、前記ジョブの識別子を管理するためのリングバッファを備えることを特徴とする請求項６又は７に記載の計算機システム。
【請求項９】
前記計算機システムは、さらに、第５の計算機を備え、
前記第１の計算機、前記第２の計算機、前記第３の計算機及び第５の計算機は、前記ジョブを順に送信及び受信することによって、前記ジョブを処理し、
前記第１の計算機、前記第２の計算機及び前記第３の計算機の組合せにおいて、前記第１の計算機をロールバックし、
前記第２の計算機、前記第３の計算機及び前記第５の計算機の組合せにおいて、前記第２の計算機をロールバックすることを特徴とする請求項６から８のいずれか一つに記載の計算機システム。
【請求項１０】
第１の計算機、第２の計算機及び第３の計算機を備え、前記各計算機がネットワークによって接続される計算機システムであって、
前記第１の計算機、前記第２の計算機及び前記第３の計算機は、ジョブを順に送信及び受信することによって、前記ジョブを処理し、
前記第１の計算機及び前記第３の計算機は、前記第２の計算機の処理と他の前記計算機の処理との関係を示す依存関係を管理し、
前記第３の計算機は、前記第２の計算機においてジョブが処理された旨を示す終了状況を、前記第１の計算機に送信し、
前記第１の計算機は、
前記第２の計算機が正常に稼働しているか否かを判定し、
前記第２の計算機が正常に稼働していないと判定された場合、前記送信された終了状況に基づいて、ロールバックをすることを特徴とする計算機システム。
【請求項１１】
前記計算機システムは、さらに、第４の計算機を備え、
前記第１の計算機は、前記第２の計算機が正常に稼働していないと判定された場合、前記第４の計算機を、前記第２の計算機に代えて処理を実行させるために起動し、
前記第４の計算機は、前記第３の計算機に、前記第４の計算機における処理の依存関係を送信することを特徴とする請求項１０に記載の計算機システム。
【請求項１２】
前記第１の計算機は、前記ジョブの識別子を管理するためのリストバッファを備えることを特徴とする請求項１０又は１１に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関し、特に、複数のホストがデータの送受信を通じた連携によって処理を実施する計算機システムに関する。
【背景技術】
【０００２】
ホスト間でデータを授受することによって連携するシステムは、データベース及びネットワークルーティングなどの機能を含め、多岐に渡る機能を提供する。しかし、システムにおいて一つのホストがダウンすることによって、ダウンしたホストに連携していた他のホストは、トラフィックを完了できず、トラフィックの飽和が次々に発生する。これによって、一つのホストにおけるダウンが、全システムをダウンさせる大規模障害の原因となる。この、一つのホストがダウンすることによって発生する大規模障害のような、局所的な障害に起因する大規模障害を回避する方法が、これまで必要とされ、検討されている。
【０００３】
これまで検討されてきた代表的な方法には、大きく二通りの方法がある。
【０００４】
第１の方法には、システム内のホストが持つデータの静的なバックアップを代替ホストに周期的に取得し、バックアップを取得されたホストがダウンしたことを検知した場合、代替ホストが業務を継続するホットスタンバイがある。この第１の方法を効果的に実施するための技術には、ロールバックポイントの特定方法及び代替ホストの特定方法などが、従来提案されている（例えば、特許文献１参照）。
【０００５】
第２の方法は、集中制御によってジョブを管理する方法である（例えば、特許文献２参照）。各ホストはリソースマネージャなどの集中制御ホストへ、逐次自らの処理の状況を告知（メッセージング）することによって、集中制御ホストはジョブの状況を一元管理する。ホストにおいて障害が発生した場合、集中制御ホストは、障害が発生したホストにおいて処理されたジョブの状況に基づいて、ロールバックポイントを判定する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−４３１０５号公報
【特許文献２】特開平７−２６２０７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前述に記載した第１の方法を用いる場合、各々のホストは、リソース及びデータ領域を多重化し、常に多重化したデータ領域に対応するハードウェアを稼働させる必要がある。そのため、ホットスタンバイを用いるシステムは、ランニングコストがとても高い。
【０００８】
一方、前述に記載した第２の方法を用いる場合、システムは、周期的にバックアップを取るために必要となるリソースを、常に稼働させておく必要はないため、第１の方法と比較して、第２の方法のランニングコストは低い。しかし、第２の方法を用いる場合、リソースマネージャの可用性が、システムの可用性に直接影響するため、第２の方法は、本質的にシステム全体の可用性を高めない。
【０００９】
そこで本発明は、常に稼働するリソースを減らし、かつ集中制御をしないロールバックシステムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の代表的な一形態によると、第１の計算機、第２の計算機及び第３の計算機を備え、前記各計算機がネットワークによって接続される計算機システムであって、前記第１の計算機、前記第２の計算機及び前記第３の計算機は、ジョブを順に送信及び受信することによって、前記ジョブを処理し、前記第１の計算機は、前記第２の計算機の処理と他の前記計算機の処理との関係を示す依存関係を管理し、前記第２の計算機が正常に稼働しているか否かを判定し、前記第２の計算機が正常に稼働していないと判定された場合、前記第２の計算機において処理された最新の前記ジョブの識別子を前記第３の計算機から取得し、前記取得したジョブの識別子に基づいて、ロールバックをする。
【発明の効果】
【００１１】
本発明の一実施形態によると、高い可用性をもつロールバックシステムを提供できる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態の処理の例を示す説明図である。
【図２】本発明の第１の実施形態のシステムの全体構成を示すブロック図である。
【図３】本発明の第１の実施形態の処理を示すシーケンス図である。
【図４】本発明の第１の実施形態の依存関係情報配信処理を示すフローチャートである。
【図５】本発明の第１の実施形態のロールバック処理を示すフローチャートである。
【図６】本発明の第１の実施形態のホスト間の関係を示す説明図である。
【図７】本発明の第２の実施形態のホスト間の関係を示す説明図である。
【図８】本発明の第２の実施形態のシステム全体の構成を示す説明図である。
【図９】本発明の第３の実施形態のシステム全体の構成を示す説明図である。
【図１０】本発明の第３の実施形態の処理を示すシーケンス図である。
【図１１】本発明の第４の実施形態のシステム全体の構成を示す説明図である。
【図１２】本発明の第４の実施形態の処理を示すシーケンス図である。
【図１３】本発明の実施形態の処理の流れの組合せを示す説明図である。
【発明を実施するための形態】
【００１３】
図１は、本発明の実施形態の処理の具体例を示す説明図である。
【００１４】
図１に示す処理は、資材を発注する業務において、資材の発注に必要な承認を取得し、ディーラへ発注するためにデータを送信する処理である。
【００１５】
図１に示すホストＡ１１００は処理Ａ１１１４を実行し、ホストＢ１２００は処理Ｂ１２０５を処理し、ホストＣ１３００は処理Ｃ１３０５を処理し、ホストＤ１６００は処理Ｄ１６０１を処理する。処理Ａ１１１４は、外部から購買情報を入力され、部長向け承認要求シートを処理Ｂに出力する。処理Ｂ１２０５は、処理Ａ１１１４から部長向け承認要求シートを入力され、センター長向け承認要求シートを処理Ｃ１３０５に出力する。処理Ｃ１３０５は、処理Ｂ１２０５からセンター長向け承認要求シートを入力され、ディーラ向け発注シートを処理Ｄ１６０１に出力する。処理Ｄ１６０１は、処理Ｃ１３０５からディーラ向け発注シートを入力され、入力された発注シートを処理する。
【００１６】
処理Ａ１１１４、処理Ｂ１２０５、処理Ｃ１３０５、処理Ｄ１６０１は、順次、直列的に実行される。なお、後述する第１、第３、第４の実施形態においては、処理Ｃ１３０５までの処理を記載し、第２の実施形態においては、処理Ｄ１６０１までの処理を記載する。
【００１７】
図２は、本発明の第１の実施形態のシステムの全体構成を示すブロック図である。
【００１８】
図２に示すシステムにおいて、ホストＡ１１００、ホストＢ１２００、ホストＢ'１４００、及びホストＣ１３００は、ネットワーク１５００によって接続される。ホストＡ１１００、ホストＢ１２００、ホストＢ'１４００、及びホストＣ１３００は、プロセッサ、メモリ、入力装置、出力装置、及びネットワークインターフェースを備える計算機である。
【００１９】
ホストＡ１１００は、メモリに、記憶装置１１０１とリングバッファ１１０３とを備える。記憶装置１１０１は、ミドルウェアＡ１１０２、ロールバックＡ１１１２、バッファプッシュＡ１１１３、処理Ａ１１１４、定時実行デーモン１１１５、及び依存関係表１１１６を含む。
【００２０】
ミドルウェアＡ１１０２、ロールバックＡ１１１２、バッファプッシュＡ１１１３、処理Ａ１１１４、及び定時実行デーモン１１１５は、プログラムであり、プロセッサによって参照され、実行される。依存関係表１１１６は、データの集合であり、後述するホストＢから送信され、ホスト間の依存関係を示すデータを含む。
【００２１】
ミドルウェアＡ１１０２は、依存関係表更新１１１０、診断１１１１、及び判定１１１９を含む。依存関係表更新１１１０、診断１１１１、及び判定１１１９は、プログラムである。
【００２２】
リングバッファ１１０３は、先頭ポインタを保存するエリア１１１７と、データを保存するエリア１１１８とを含む。
【００２３】
ホストＢ１２００は、メモリに記憶装置１２０１を備える。記憶装置１２０１は、ミドルウェアＢ１２０２と、処理Ｂ１２０５と、処理Ｂ依存表１２０６とを含む。ミドルウェアＢ１２０２は、依存関係情報配信１２０３、及び受診１２０４を含む。依存関係情報配信１２０３、及び受診１２０４は、プログラムである。また、処理Ｂ１２０５も、プログラムである。処理Ｂ依存表１２０６は、データの集合であり、処理Ｂ１２０５にデータを入力するホスト、すなわち処理Ｂ１２０５の依存元であるホスト、及び、処理Ｂ１２０５からデータを入力されるホスト、すなわち処理Ｂ１２０５の依存先であるホストを示す。
【００２４】
ホストＣ１３００は、メモリに記憶装置１３０１を備える。記憶装置１３０１は、ミドルウェアＣ１３０２、処理Ｃ１３０５、及び最新ジョブリスト１３０６を含む。ミドルウェアＣ１３０２、及び処理Ｃ１３０５は、プログラムである。ミドルウェアＣ１３０２は、リスト更新１３０３、及び最新ジョブ検索１３０４を含む。
【００２５】
ホストＢ'１４００は、ホストＢ１２００において障害が発生した場合に、ホストＢ１２００の代替となる。ホストＢ'１４００は、ホストＢ１２００と同じプログラムを含むが、ホストＢ１２００の動的なデータは、ホストＢ'１４００に同期されない。また、ホストＢ'１４００は、ホストＢ１２００が正常に稼働している場合は、稼働していない。ホストＢ'１４００は、他ホストから起動するよう要求されることによって起動する。
【００２６】
図３は、本発明の第１の実施形態の処理を示すシーケンス図である。
【００２７】
図３は、図２に示す計算機システムによって実行される処理を示す。
【００２８】
図３に示す処理によって、本発明の実施形態の計算機システムは、ホストＢ１２００において障害が発生した際に、ホストＢ１２００において実行されていた処理を、ホストＢ'１４００に実行させる。
【００２９】
ホストＢ１２００が起動した後（ステップ２００１）、ホストＢ１２００は、依存関係情報配信１２０３によって、ホストＢ１２００における処理Ｂ１２０５の依存関係を、処理Ｂ１２０５の依存元であるホストＡ１１００に送信する。具体的には、ホストＢ１２００は、ホストＢ１２００の出力がホストＣ１３００に入力されることを示す依存関係［Ｂ−＞Ｃ］を含む処理Ｂ依存表１２０６を、ホストＡ１１００に送信する。
【００３０】
ホストＡ１１００は、処理Ｂ依存表１２０６を受信した場合、依存関係表更新１１１０によって、受信した処理Ｂ１２０５についての依存関係［Ｂ−＞Ｃ］と、依存関係に一意に割り当てられたタイプＩＤとを依存関係表１１１６に入力する。タイプＩＤは、任意の英数字である。図２に示す依存関係表１１１６は、依存関係表更新１１１０が実行された後の依存関係表１１１６を示し、タイプ列は"Ｔ１"を、データ列は依存関係［Ｂ−＞Ｃ］を示す。
【００３１】
依存関係情報配信１２０３の詳細を図４において後述する。
【００３２】
ホストＡ１１００が、依存関係表更新１１１０によって、依存関係表１１１６を更新した後、ホストＡ１１００は、処理Ａ１１１４を実行する。処理Ａ１１１４に続いて、ホストＢ１２００は、処理Ｂ１２０５を実行する。処理Ｂ１２０５に続いて、ホストＣ１３００は、処理Ｃ１３０５を実行する。
【００３３】
処理Ａ１１１４、処理Ｂ１２０５、及び処理Ｃ１３０５の一連の処理は、ホスト間でデータを通信することによって連携する。本発明の実施形態において、ホスト間で通信される一連のデータの単位を、ジョブと呼ぶ。処理Ａ１１１４から処理Ｃ１３０５に至る一連のジョブは、処理Ａ１１１４によって一意な識別子を割り当てられる。処理Ａ１１１４によって割り当てられた識別子を、ジョブＩＤと呼ぶ。
【００３４】
ジョブＩＤは、どのホストにおいて処理されたデータであるかを示す情報を含む。このため、ホストＡ１１００、ホストＢ１２００、及びホストＣ１３００は、過去にどのホストにおいて処理されたデータであるかを示す情報を、常に含む。
【００３５】
処理Ａ１１１４が終了し、処理Ａ１１１４の出力が処理Ｂ１２０５へ送信された後、ホストＡ１１００は、処理Ａ１１１４を復元するためのロールバックデータを作成し、作成したロールバックデータをバッファプッシュＡ１１１３によってリングバッファ１１０３に入力する。ロールバックデータは、ジョブＩＤによって示される。また、バッファプッシュＡ１１１３は、ロールバックデータを、先頭ポインタ１１１７が示す番地に入力する。そして、バッファプッシュＡ１１１３は、先頭ポインタ１１１７の番地を、最も古いジョブＩＤが入力された番地に更新する。
【００３６】
なお、リングバッファ１１０３における最も古いジョブＩＤは、リングバッファ１１０３が番地の昇順にジョブＩＤを入力される場合、先頭ポインタが示す番地よりも一つ多い番地のジョブＩＤである。リングバッファ１１０３が番地の降順にジョブＩＤを入力される場合、リングバッファ１１０３における最も古いジョブＩＤは、先頭ポインタが示す番地よりも一つ少ない番地のジョブＩＤである。本実施形態において、リングバッファ１１０３は、番地の昇順にジョブＩＤを入力される。
【００３７】
ホストＣ１３００は、ホストＢ１２００における処理Ｂ１２０５が終了した後、リスト更新１３０３によって、最新ジョブリスト１３０６のホスト列にホストＡ１１００を示す"Ａ"を、ジョブＩＤ列にホストＡ１１００において処理されたジョブであることを示すジョブＩＤを記録する。なお、最新ジョブリスト１３０６が、最新のジョブＩＤを示すために、ホストＢ１２００における処理Ｂ１２０５が終了した後、リスト更新１３０３は、最新ジョブリスト１３０６の過去のジョブＩＤを最新のジョブＩＤによって上書きする。
【００３８】
ホストＡ１１００は、ホストＢ１２００が正常に稼働しているか否かを周期的に診断１１１１する。ホストＡ１１００は、定時実行デーモン１１１５によって診断１１１１を周期的に実行する。診断１１１１は、ｐｉｎｇコマンドによるネットワークインターフェースの稼働状況、及び正常に処理を実行できるか否かなどの確認を含む。ホストＢ１２００は、ホストＡ１１００による診断１１１１を受信した後、受診１２０４によって、ホストＡ１１００に稼働状況を返信する。
【００３９】
ホストＡ１１００は、ホストＢ１２００から稼働状況を受信すると、判定１１１９によって、稼働状況に含まれる処理の実行状況、稼働状況を返信するまでの時間、稼働状況の内容に基づいて、ホストＢ１２００が正常に稼働しているか否かを判定する。
【００４０】
判定１１１９によって、ホストＢ１２００が正常に稼働していると判定された場合、ロールバックする必要はないため、ホストＡ１１００は、定時実行デーモン１１１５に従って、診断１１１１を繰り返す。
【００４１】
判定１１１９によって、ホストＢ１２００が異常であると判定された場合、ホストＡ１１００は、ロールバックをするため、最新のジョブＩＤを送信するようにホストＣ１３００に要求し、ホストＢ'１４００を起動する。なお、ホストＣ１３００が最新のジョブＩＤをホストＡ１１００に送信するよう要求を受信した後に、ホストＣ１３００がホストＢ'１４００を起動してもよい。
【００４２】
ホストＣ１３００は、ホストＡ１１００から最新のジョブＩＤを要求された後、最新ジョブ検索１３０４を実行する。ホストＣ１３００は、最新ジョブ検索１３０４によって、ホストＡ１１００によって実行されたジョブのうち、最新のジョブのＩＤを検索し、検索した結果の最新のジョブＩＤを、ホストＡ１１００に返信する。最新ジョブ検索１３０４を実行する際、ホストＣ１３００は、最新ジョブリスト１３０６のホスト列が"Ａ"を示すジョブＩＤ（以降、最新ジョブＩＤと記載）を、ホストＡ１１００に返信する。
【００４３】
ホストＡ１１００は、最新ジョブＩＤを受信した場合、ロールバックＡ１１１２を実行する。ロールバックＡ１１１２の詳細を、図５において後述する。
【００４４】
ホストＢ'１４００は、ホストＡ１１００から送信された起動する旨の指示に従って、起動する（ステップ２００２）。その後、ホストＢ'１４００は、ホストＢ'１４００において実行される処理Ｂ１２０５に関する依存関係の情報を、ホストＡ１１００に送信する（依存関係情報配信２００３）。ホストＡ１１００は、処理Ａ１１１４の依存先を、ホストＢ１２００における処理Ｂ１２０５からホストＢ'１４００における処理Ｂ１２０５へ、判定１１１９においてホストＢ１２００が異常であると判定してから、処理Ａ１１１４が実行されるまでの間、いずれのタイミングにおいて変更してもよい。
【００４５】
また、ホストＣ１３００は、判定１１１９において、ホストＡ１１００から、ホストＢ１２００の代わりにホストＢ'１４００が起動した旨を送信され、処理Ｃ１３０５の依存元を、ホストＢ１２００における処理Ｂ１２０５からホストＢ'１４００における処理Ｂ１２０５へ変更してもよい。または、ホストＣ１３００は、ホストＢ'１４００における処理Ｂ１２０５が終了した際に、ホストＢ１２００に代わりにホストＢ'１４００が起動した旨を送信され、処理Ｃ１３０５の依存元を、ホストＢ１２００における処理Ｂ１２０５からホストＢ'１４００における処理Ｂ１２０５へ変更してもよい。
【００４６】
図４は、本発明の第１の実施形態の依存関係情報配信１２０３を示すフローチャートである。
【００４７】
ホストＢ１２００は、処理Ｂ１２０５の処理Ｂ依存表１２０６を参照する（ステップ１１００１）。ステップ１１００１における参照の結果に基づいて、ホストＢ１２００は、処理Ｂの依存元へ、依存関係を示す情報を送信する（ステップ１１００２）。具体的には、ホストＢ１２００は、処理Ｂ１２０５の結果を出力するホストＣ１３００を示す識別子を、処理Ｂ１２０５にデータを入力するホストＡ１１００に送信する。第１の実施形態におけるステップ１１００２においては、ホストＢ１２００は、「ホストＢ１２００における処理Ｂの結果は、ホストＣ１３００に渡される」という意味を示す依存関係［Ｂ−＞Ｃ］をホストＡ１１００に送信する。
【００４８】
図５は、本発明の第１の実施形態のロールバックＡ１１１２を示すフローチャートである。
【００４９】
ホストＡ１１００は、ホストＣ１３００から最新ジョブＩＤを受信した後（ステップ１３００１）、リングバッファ１１０３のジョブＩＤ列のうち、受信した最新ジョブＩＤと一致するエントリを検索し、受信した最新ジョブＩＤと一致するエントリが存在するか否かを判定する（ステップ１３００２）。
【００５０】
リングバッファ１１０３は、あらかじめ定められた量よりも多いジョブが入力される場合、古いジョブＩＤを消去する。このため、リングバッファ１１０３が、必ずしも受信した最新ジョブＩＤを含むとは限らない。ステップ１３００２において、受信した最新ジョブＩＤがリングバッファ１１０３に存在しない場合、ホストＡ１１００は、最も古いジョブＩＤ、すなわち、先頭ポインタ１１１７が示す番地のジョブＩＤを選択する（ステップ１３００３）。
【００５１】
受信した最新ジョブＩＤがリングバッファ１１０３に存在する場合、ホストＡ１１００は、受信した最新ジョブＩＤの次に実行されるべきジョブＩＤを、ロールバックポイントとする（ステップ１３００４）。
【００５２】
ステップ１３０３またはステップ１３０４の後、ホストＡ１１００は、ホストＢ'１４００において処理が可能か否かを判定する（ステップ１３００５）。ホストＢ'１４００において処理ができない場合、ホストＡ１１００は、あらかじめ定められた時間待機し（１３００６）、ホストＢ'１４００において処理ができるまで待機する。
【００５３】
ステップ１３００５において、ホストＢ'１４００において処理が可能であると判定された場合、ホストＡ１１００は、ステップ１３００４において選択したロールバックポイントから、ホストＡ１１００における最新のジョブまで、すなわち、リングバッファ１１０３における先頭ポインタ１１１７が示す番地よりも一つ少ない番地のジョブまで、を実行し（ロールバック：ステップ１３００７）、ロールバックＡ１１１２を終了する。
【００５４】
第１の実施形態において、ホストＡ１１００、ホストＢ１２００、ホストＣ１３００の順に処理を連携し、ホストＢ１２００が障害となった際には、ホストＡ１１００、ホストＢ１２００、ホストＣ１３００、及びホストＢ'１４００によるロールバックの連携を示した。第１の実施形態において、ホストＢ'１４００は、ホストＢ１２００のクールスタンバイである。
【００５５】
前述の通り、第１の実施形態によれば、バックアップのためのリソースをクールスタンバイとし、集中制御をするリソースマネージャを用いずに、ロールバックをすることができる。
【００５６】
図６は、本発明の第１の実施形態の処理の関係を示す説明図である。
【００５７】
図６に示すＡ４００１、Ｂ４００２、Ｃ４００３、及びＢ'４００４は、第１の実施形態におけるホストＡ１１００、ホストＢ１２００、ホストＣ１３００、及びホストＢ'１４００に相当し、処理において、各々上流、中央、下流、代替の役割を果たす。Ｂ４００２において障害が発生した場合、Ｂ'４００４はＢ４００２の代替ホストとなる。
【００５８】
四つ以上のホストが連携をする場合、クールスタンバイとなるホストの数を変更せず、一つのクールスタンバイのホストによって複数のホストを代替機させてもよい。三つ以上のホストが連携をする場合は、第１の実施形態を多重に実施すればよい。第２の実施形態は、第１の実施形態を多重に実施した場合の計算機システムである。
【００５９】
図７は、本発明の第２の実施形態の処理の関係を示す説明図である。
【００６０】
第２の実施形態において図７に示すＡ５００１、Ｂ５００２、Ｃ５００３、及びＤ５００４は、図６に示すＡ４００１、Ｂ４００２、及びＣ４００３の関係を二重に組み合わせた関係である。Ａ５００１、Ｂ５００２、及びＣ５００３と、Ｂ５００２、Ｃ５００３、及びＤ５００４とは、各々上流、中央、及び下流の役割を果たす。また、Ａ５００１、Ｂ５００２、及びＣ５００３の関係において、Ｂ５００２の代替はＢ'５００５である。また、Ｂ５００２、Ｃ５００３、及びＤ５００４の関係において、Ｃ５００３の代替もＢ'５００５である。
【００６１】
Ｂ'５００５は、Ｂ５００２又はＣ５００３のどちらか一方において障害が発生する場合、Ｂ５００２又はＣ５００３の各々のリソースを共有できる。Ｂ'５００５は、Ｂ５００２及びＣ５００３に備わる静的なソフトウェア及び設定を個別に備えることによって、Ｂ５００２又はＣ５００３のクールスタンバイの役割を果たす。
【００６２】
図８は、本発明の第２の実施形態のシステム全体の構成を示す説明図である。
【００６３】
図８に示すホストＡ１１００、ホストＢ１２００、ホストＣ１３００、ホストＤ１６００、及びホストＢ'１４００は、図７に示すＡ５００１、Ｂ５００２、Ｃ５００３、Ｄ５００４、及びＢ'５００５と同じ役割を果たす。ホストＢ'１４００は、ホストＢ１２００又はホストＣ１３００のどちらか一方において障害が発生する場合、障害が発生したホストの代替ホストとなる。
【００６４】
図８に示すホストＡ１１００は、図２に示すホストＡ１１００と同じである。また、図８に示すホストＢ１２００、及びホストＣ１３００には、図２に示すホストＢ１２００、及びホストＣ１３００に、各々図７に示す上流、中央の役割を果たすためのソフトウェア及びデータの集合が追加される。
【００６５】
ホストＢ１２００には、図２に示すホストＡ１１００が図６に示す上流の役割を果たすために備えた機能に相当する機能が追加される。すなわち、図８に示すホストＢ１２００には、ミドルウェアＡ１１０２、ロールバックＢ３００１、バッファプッシュＢ３００２、定時実行デーモン１１１５、依存関係表１１１６、及びリングバッファ１１０３が追加される。
【００６６】
また、ホストＣ１３００には、図２に示すＢ１２００が図６に示す中央の役割を果たすために備えた機能に相当する機能が追加される。すなわち、図８に示すホストＣ１３００には、ミドルウェアＢ１２０２、及び処理Ｃ依存表３３０６が追加される。
【００６７】
また、ホストＤ１６００は、図２に示すＣ１３００が図６に示す下流の役割を果たすために備えた機能に相当する機能が備わる。ホストＤ１６００は、プロセッサ、メモリ、入力装置、出力装置、及びネットワークインターフェースを備える計算機である。ホストＤ１６００は、メモリに記憶装置１６０１を備え、記憶装置１６０１は、ミドルウェアＣ１３０２、処理Ｄ１６０１、及び最新ジョブリスト１６０２を備える。
【００６８】
第２の実施形態の計算機システムは、図８に示すホストＡ１１００、ホストＢ１２００、ホストＣ１３００、及びホストＤ１６００によって、図１に示す処理Ａ１１１４、処理Ｂ１２０５、処理Ｃ１３０５、処理Ｄ１６０１を実行する。図８に示すホストＢ１２００において障害が発生した場合、第２の実施形態のシステムは、図３に示す処理フローと同じ処理フローによってロールバックする。ホストＣ１３００において障害が発生した場合、第２の実施形態のシステムは、図３に示す処理フローにおいて、ホストＡ１１００の処理をホストＢ１２００が、ホストＢ１２００の処理をホストＣ１３００が、ホストＣ１３００の処理をホストＤ１６００が実行することによって、ロールバックをする。
【００６９】
第２の実施形態によれば、複数のホストによって処理をする場合においても、第１の実施形態を用いてロールバックをすることができる。
【００７０】
第１の実施形態において、依存関係の把握及びホストＢ１２００の診断１１１１を、上流の役割であるホストＡ１１００が実行したが、第３の実施形態において、依存関係の把握及びホストＢ１２００の診断を、下流のホストＣ１３００が実行する。
【００７１】
図９は、本発明の第３の実施形態のシステム全体の構成を示す説明図である。
【００７２】
図９に示すホストＡ１１００は、図２に示すミドルウェアＡ１１０２の代わりに、ミドルウェアＡＡ６００１を備える。ミドルウェアＡＡ６００１は、ロールバックデーモン６００２を備える。
【００７３】
図９に示すホストＢ１２００は、図２に示すミドルウェアＢ１２０２の代わりに、ミドルウェアＢＢ６００３を備える。ミドルウェアＢＢ６００３は、依存関係情報配信６００４を備える。
【００７４】
図９に示すホストＣ１３００は、図２に示すミドルウェアＣ１３０２の代わりに、ミドルウェアＣＣ６００５を備える。また、定時実行デーモン１１１５は、図２においてホストＡ１１００に備えられたが、図９においてホストＣ１３００に備えられる。また、図２においてホストＡ１１００に備えられた依存関係表１１１６は、図９においてホストＣ１３００が備える依存関係表６００７と同じである。ミドルウェアＣＣ６００５は、依存関係表更新６００６、診断１１１１、判定１１１９、リスト更新１３０３、及び最新ジョブ探索１３０４を備える。
【００７５】
図１０は、本発明の第３の実施形態の処理を示すシーケンス図である。
【００７６】
第３の実施形態において、ホストＢ１２００は、依存関係情報配信６００４をホストＣ１３００に送信する。ホストＢ１２００は、処理Ｂ１２０５の処理Ｂ依存表１２０６に基づいて処理Ｂ１２０５の依存先であるホストＣ１３００へ依存関係を送信する。具体的には、ホストＢ１２００は、処理Ｂ１２０５の依存元であるホストＡ１１００の識別子を、処理Ｂ１２０５の依存先であるホストＣ１３００に送信する。すなわち、ホストＢ１２００は、「ホストＡ１１００の結果が、ホストＢ１２００に渡される」という意味を表わす依存関係［Ａ−＞Ｂ］をホストＣ１３００に送信する。
【００７７】
ホストＣ１３００は、依存関係情報配信６００４によって、依存関係を送信された後、受信した依存関係［Ａ−＞Ｂ］を用いて、依存関係表６００７を更新する（依存関係表更新６００６）。
【００７８】
ホストＡ１１００、ホストＢ１２００、及びホストＣ１３００は、各々処理Ａ１１１４、処理Ｂ１２０５、及び処理Ｃ１３０５を実行する。
【００７９】
ホストＣ１３００は、ホストＢ１２００が正常に稼働しているか否かを周期的に診断する。ホストＣ１３００は、定時実行デーモン１１１５によって診断１１１１を周期的に実行する。診断１１１１は、第１の実施形態における診断１１１１と同じである。ホストＢ１２００は、ホストＣ１３００による診断１１１１を受信した後、受診１２０４によって、ホストＣ１３００に稼働状況を返信する。
【００８０】
ホストＣ１３００は、ホストＢ１２００から稼働状況を受信すると、判定１１１９によって、ホストＢ１２００が正常に稼働しているか否かを判定する。
【００８１】
判定１１１９によって、ホストＢ１２００が正常に稼働していると判定された場合、ロールバックする必要はないため、ホストＣ１３００は、定時実行デーモン１１１５に従って、診断１１１１を繰り返す。
【００８２】
判定１１１９によって、ホストＢ１２００が異常であると判定された場合、ホストＣ１３００は、ホストＢ'１４００を起動する（ステップ２００１）。そして、ホストＣ１３００は、最新ジョブリスト１３０６を検索して最新ジョブＩＤを検索し（最新ジョブ検索１３０４）、最新ジョブＩＤをホストＡ１１００に送信する。
【００８３】
なお、第１の実施形態において実行されたような、ホストＡ１１００からホストＣ１３００への最新ジョブＩＤを送信する要求に相当する通信は、第３の実施形態においては不要である。しかし、第３の実施形態においてホストＡ１１００は、ホストＢ１２００の診断結果をロールバックのきっかけとすることができないため、ホストＡ１１００は、常にロールバックデーモン６００２によって自らのネットワークポートを監視する。そして、ホストＣ１３００が最新ジョブ検索１３０４によって、最新ジョブＩＤであるロールバックポイントを送信した場合、ホストＡ１１００は、受信したロールバックポイントに基づいてロールバック１１１２を実行する。
【００８４】
ホストＢ'１４００は、ホストＣ１３００から起動する旨を受信し、起動する（ステップ２００２）。その後、処理Ｂ１２０５に関する依存関係の情報をホストＣ１３００に送信する。ホストＣ１３００は、処理Ｃ１３０５の依存元を、ホストＢ１２００における処理Ｂ１２０５からホストＢ'１４００における処理Ｂ１２０５へ、判定１１１９においてホストＢ１２００が異常であると判定してから、処理Ｃ１３０５が実行されるまでの間、いずれのタイミングにおいて変更してもよい。
【００８５】
また、ホストＡ１１００は、ホストＣ１３００から最新ジョブ検索１３０４において最新のジョブＩＤを送信される際に、ホストＢ１２００の代わりに、ホストＢ'１４００が起動した旨を送信されてもよい。そして、ホストＡ１１００は、処理Ａ１１１４の依存先を、ホストＢ'１４００における処理Ｂ１２０５に変更してもよい。
【００８６】
第３の実施形態においてホストＡ１１００は、ホストＣ１３００へ最新ジョブＩＤの送信を要求することはない。このため、第３の実施形態は、第１の実施形態よりも、ホストＡ１１００からホストＣ１３００への通信がすくない。
【００８７】
一方、第３の実施形態においてホストＡ１１００は、ロールバックデーモン６００２を常に実行させ続けているため、第１の実施形態におけるホストＡ１１００の負荷よりも、第３の実施形態におけるホストＡ１１００の負荷が、高くなる。
【００８８】
第４の実施形態において、ホストＢ１２００の依存元及び依存先がホストＢ１２００における処理Ｂ１２０６の終了を認識し、依存元が、リングバッファではなくリストバッファによって、ホストＢ１２００における未処理のジョブを管理する計算機システムを示す。
【００８９】
図１１は、本発明の第４の実施形態のシステム全体の構成を示す説明図である。
【００９０】
図１１に示すホストＡ１１００は、図２に示すホストＡ１１００が備えたロールバックＡ１１１２、バッファプッシュＡ１１１３、及びリングバッファ１１０３に代わり、ロールバックＡ８１１２、バッファプッシュＡ８１１３、バッファ更新８１１４、及びリストバッファ８１０３を備える。バッファプッシュＡ８１１３は、リストバッファ８１０３にエントリを追加し、追加したエントリのフラグに"○"を更新する。バッファ更新は、ホストＢ１２００によって処理されたジョブを示すジョブＩＤのフラグを"×"にする。リストバッファ８１０３は、番地列、フラグ列、ジョブＩＤ列、及びポインタ列を含む。
【００９１】
図１１に示すホストＢ１２００は、図２に示す依存関係情報配信１２０３に代わり、依存関係情報配信８２０３を備える。
【００９２】
図１１に示すホストＣ１３００は、図２に示すホストＣ１３００の機能に加え、依存関係表更新５１１０、トークンバック８３０５、及び依存関係表５１１６を備える。
【００９３】
図１２は、本発明の第４の実施形態の処理を示すシーケンス図である。
【００９４】
ホストＢ１２００は、処理Ｂ１２０５の依存関係の情報をホストＡ１１００、及びホストＣ１３００の両方に送信する（依存関係情報配信８２０３）。依存関係情報配信８２０３において、ホストＡ１１００に送信される依存関係の情報は、第１の実施形態の依存関係情報配信１２０３においてホストＡ１１００に送信された依存関係と同じである。また、ホストＣ１３００に送信される依存関係の情報は、第３の実施形態の依存関係情報配信６００４においてホストＣ１３００に送信された依存関係と同じである。
【００９５】
ホストＡ１１００、及びホストＣ１３００は、各々依存関係表１１１６、及び依存関係表５１１６を備える。また、ホストＡ１１００、ホストＢ１２００、及びホストＣ１３００は、処理Ａ１１１４、処理Ｂ１２０５、及び処理Ｃ１３０５を実行する。この際、処理Ａ１１１４は、処理Ｂ１２０５に、ジョブＩＤを送信する。処理Ｂ１２０５が終了した後、処理Ｃ１３０５を実行する前に、ホストＣ１３００は、ホストＡ１１００に、ホストＡ１１００から来たジョブがホストＢ１２００によって処理された旨を送信する（トークンバック８３０５）。ホストＡ１１００は、ホストＣ１３００からジョブが処理された旨を受信した場合、ジョブがホストＢ１２００によって処理されたので、バッファ更新８１１４によって、リストバッファ８１０３からジョブを削除する。
【００９６】
リストバッファ８１０３は、リスト構造を持つバッファであり、各エントリはフラグ、ジョブＩＤ、及び次のエントリへのポインタを含む。リストバッファ８１０３は、２つのタイミングにおいて更新される。
【００９７】
一つのタイミングは、ホストＡ１１００において処理Ａ１１１４が終了した際である。ホストＡ１１００において処理Ａ１１１４が終了し、結果のデータをホストＢ１２００に送信する際、ホストＡ１１００は、バッファプッシュＡ８１１３によってリストバッファ８１０３に新たなジョブＩＤを追加する。ホストＡ１１００は、バッファプッシュＡ８１１３によって、リストバッファ８１０３のポインタの末尾に、ホストＡ１１００から送信され、ホストＢ１２００において処理されるジョブＩＤを追加し、追加したジョブＩＤのフラグを"○"とする。
【００９８】
また、もう一つのタイミングは、ホストＢ１２００において処理Ｂ１２０５が終了し、ホストＣ１３００に処理Ｂ１２０５によって処理されたジョブが到着し、ホストＣ１３００が、到着したジョブのジョブＩＤをホストＡ１１００に送信した際である。ホストＢ１２００において処理Ｂ１２０５によってジョブが処理された旨をホストＣ１３００から送信された場合、ホストＡ１１００は、バッファ更新８１１４によって、終了したジョブを示すジョブＩＤのフラグを"×"に更新する。
【００９９】
なお、ホストＡ１１００は、バッファプッシュＡ８１１３によってリストバッファ８１０３にジョブＩＤを追加する際、フラグが"×"になっているエントリに、ジョブＩＤを追加してもよい。
【０１００】
バッファ更新８１１４が終了した後、ホストＡ１１００は、ホストＢ１２００が正常に稼働しているか否かを判定するため、ホストＢ１２００を診断１１１１する。ホストＢ１２００は、ホストＡ１１００からの診断１１１１に受診１２０４し、正常に稼働しているか否かを返信する。ホストＡ１１００は、ホストＢ１２００が正常に稼働しているか否かを判定１１１９し、正常に稼働している場合、定時実行デーモン１１１５に従って次の診断１１１１を実行する。
【０１０１】
判定１１１９において、ホストＢ１２００が異常であると判定された場合、ホストＡ１１００は、ロールバックＡ８１１２を実行する。ロールバックＡ８１１２は、図５に示すフローチャートのステップ１３００１〜ステップ１３００４を、リストバッファ８１０３からフラグが"○"であるジョブＩＤを選択し、ロールバックポイントとするステップに代えた処理である。
【０１０２】
また、判定１１１９において、ホストＢ１２００が異常であると判定された場合、ホストＡ１１００は、ホストＢ'１４００を起動２００２する。
【０１０３】
ホストＢ'１４００は、ホストＡ１１００に従って起動２００２された後、依存関係情報配信２００３によって、ホストＡ１１００に、ホストＢ'１４００における処理Ｂ１２０５の依存関係を送信する。
【０１０４】
ホストＡ１１００及びホストＣ１３００が、ホストＢ１２００の代わりにホストＢ'１４００が起動されたことによって、処理Ａ１１１４の依存先、及び処理Ｃ１３０５の依存元を変更するタイミングは、第１の実施形態と同じである。
【０１０５】
第４の実施形態によれば、処理Ａ１１１４は、処理Ｂ１２０５が処理を終了したか否かを認識できる。また、リングバッファ１１０３と異なり、リストバッファ８１０３は、個別のジョブについて管理できる。このため、第４の実施形態によれば、ジョブの順序が変化するような処理の流れ（Ｏｕｔ−Ｏｆ−Ｏｒｄｅｒ）を持つシステムにおいて、ジョブを重複させることなくロールバックすることができる。
【０１０６】
なお、第３の実施の形態及び第４の実施の形態は、前述した第２の実施の形態と同様に四つ以上のホストを備えるシステムにも適用することができる。この場合、連続してジャブの処理を実行する３台のホストの組を選択し、各選択されたホストの組において第３の実施の形態又は第４の実施の形態の動作をさせることによって、本実施の形態の効果を得ることができる。
【０１０７】
前述の通り、本発明の実施形態における、処理Ａ１１１４、処理Ｂ１２０５、処理Ｃ１３０５、及び処理Ｄ１６０１は、各々、物理的に分けられたホストによって実行された。しかし、前述のホストは、物理的に分けられている必要はなく、一つの計算機に作られた複数の仮想計算機であってもよい。
【０１０８】
図１３は、本発明の実施形態の処理の流れのパターンを示す説明図である。
【０１０９】
図１３に示すパターン１、及びパターン２は、第１の実施形態における処理の流れのパターンである。また、図１３に示すパターン３、及びパターン４は、第３の実施形態における処理の流れのパターンである。図１３に示す依存関係を、ホストＡ、ホストＢ、ホストＣ、及びホストＤの関係として示す。
【０１１０】
パターン１は、ホストＡからホストＢへ、ホストＢからホストＣとホストＤとに処理されるパターンである。パターン１において、ホストＢの依存先は、ホストＣとホストＤとである。パターン１におけるホストＢは、ホストＡに依存関係［Ｂ−＞（Ｃ，Ｄ）］を送信する。ホストＡは、ホストＢが稼働しなくなった場合、最新ジョブ検索の要求をホストＣ及びホストＤの両方に送信する。そして、ホストＣ及びホストＤによる最新ジョブ検索の結果に従って、ロールバックポイントを定める。
【０１１１】
パターン２は、ホストＡからホストＢへ、ホストＢからホストＣ又はホストＤに処理が流れるパターンである。パターン２において、ホストＢの依存先は、ホストＢにおいて実行される処理の結果に従って、ホストＣ、又はホストＤのどちらかになる。パターン２におけるホストＢも、ホストＡに依存関係［Ｂ−＞（Ｃ，Ｄ）］を送信する。そして、パターン２のホストＡも、ホストＢが稼働しなくなった場合、最新ジョブ検索の要求をホストＣ及びホストＤの両方に送信し、ホストＣ及びホストＤによる最新ジョブ検索の結果に従って、ロールバックポイントを定める。
【０１１２】
パターン３は、ホストＡ又はホストＢから、ホストＣへ、ホストＣからホストＤへ、処理が流れる。パターン３において、ホストＣの依存元は、ホストＡ又はホストＢである。パターン３におけるホストＣは、ホストＤに依存関係［Ａ−＞Ｃ］又は依存関係［Ｂ−＞Ｃ］を送信する。ホストＣが稼働しなくなった場合、ホストＤは、最新ジョブを検索し、最新ジョブがホストＡから流れてきたジョブであれば、最新ジョブＩＤをホストＡに送信し、最新ジョブがホストＢから流れてきたジョブであれば、最新ジョブＩＤをホストＢに送信する。ホストＡ又はホストＢは、ホストＢからの最新ジョブＩＤに従い、ロールバックポイントを定める。
【０１１３】
パターン４は、ホストＡとホストＢとの処理の終了を条件に、ホストＣにおける処理が開始され、ホストＣからホストＤに処理が流れる。パターン４において、ホストＣの依存元は、ホストＡ及びホストＢである。パターン４におけるホストＣは、ホストＤに依存関係［（Ａ，Ｂ）−＞Ｃ］を送信する。ホストＣが稼働しなくなった場合、ホストＤは、最新ジョブを検索し、ホストＡ及びホストＢの両方に最新のジョブＩＤを送信する。そして、ホストＡ及びホストＢは、受信した最新のジョブＩＤに従って、ロールバックポイントを定める。
【０１１４】
図１３に示すパターン１〜パターン４によれば、一つの処理への入力、又は出力が複数の処理からもたらされる場合においても、前述の実施形態のシステムを適用することができる。
【０１１５】
前述の実施形態において提案する計算機システムは、複数のホストを含み、高い可用性を持ち、かつコストが低い。
【符号の説明】
【０１１６】
１１００、１２００、１３００、１４００    ホスト
１５００    ネットワーク
１１０１、１２０１、１３０１、１６０１    記憶装置
１１０３  リングバッファ
８１０３  リストバッファ
【図１】
2010257335.tif 000003
【図２】
2010257335.tif 000004
【図３】
2010257335.tif 000005
【図４】
2010257335.tif 000006
【図５】
2010257335.tif 000007
【図６】
2010257335.tif 000008
【図７】
2010257335.tif 000009
【図８】
2010257335.tif 000010
【図９】
2010257335.tif 000011
【図１０】
2010257335.tif 000012
【図１１】
2010257335.tif 000013
【図１２】
2010257335.tif 000014
【図１３】
2010257335.tif 000015