(57)【要約】複数の計算機で複数のタスクを同期して実行させる計算機システムを実現する。リーダ計算機とフォロワ計算機とでそれぞれ同一のタスクを実行するようになっており、リーダ計算機は、第１のタスクから要求された第１のアクセス要求に基づいて第１の出力データを生成し、第１の実行結果が正しいか否かを、フォロワ計算機に問い合わせ、所定の数の前記フォロワ計算機から正しい旨の回答を得たとき、第１の出力データは正しいと判断し、フォロワ計算機は、第１のタスクと同様の処理を行う第２のタスクから要求された第２のアクセス要求に基づいて第２の出力データを生成し、リーダ計算機からの問い合わせを受け、第１の実行結果と第２の出力データが同様の結果であるか否かを判定し、判定結果が肯定的である場合、第１の出力データは正しい旨の回答を前記リーダ計算機に送信する。
2012127652.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機ノードが通信ネットワークを介して接続される計算機システムであって、
前記複数の計算機ノードのうち１台の計算機ノードがリーダ計算機ノードとなり、
前記複数の計算機ノードのうち前記リーダ計算機ノード以外の他の計算機ノードがフォロワ計算機ノードとなり、
前記リーダ計算機ノードと前記フォロワ計算機ノードとでそれぞれ同一のタスクを実行するようになっており、
前記リーダ計算機ノードと、前記フォロワ計算機ノードはそれぞれ、
通信ネットワークを介して他の計算機ノードと通信する通信インタフェース部と、
データを記憶する記憶部と、
前記タスクから前記記憶部へのアクセス要求を実行するアクセス実行部と、
前記アクセス実行部で実行された実行結果が正しいか否かを判定する実行結果判定部と、
を備え、
前記リーダ計算機ノードは、
自ノードのアクセス実行部において、第１のタスクから要求された第１のアクセス要求に基づいて第１の出力データを生成し、
自ノードの出力判定部において、前記第１の出力データが正しいか否かを、前記フォロワ計算機ノードに問い合わせ、所定の数の前記フォロワ計算機ノードから正しい旨の回答を得たとき、前記第１の出力データは正しいと判断し、
前記フォロワ計算機ノードは、
自ノードのアクセス実行部において、前記第１のタスクと同様の処理を行う第２のタスクから要求された第２のアクセス要求に基づいて第２の出力データを生成し、
自ノードの出力データ判定部において、前記リーダ計算機ノードからの問い合わせを受け、前記第１の出力データと前記第２の出力データが同様のデータであるか否かを判定し、判定結果が肯定的である場合、前記第１の出力データは正しい旨の回答を前記リーダ計算機ノードに送信する
計算機システム。
【請求項２】
前記複数の計算機ノードは、前記通信インタフェース部を介して外部装置から入力データを受信する外部アクセス実行部をさらに有し、
前記リーダ計算機ノードは、
自ノードの外部アクセス実行部において、受信した入力データを前記フォロワ計算機ノードに送信し、
前記フォロワの計算機ノードは、
自ノードのアクセス実行部において、前記リーダ計算機ノードから送信された入力データをタスクに通知する、
請求項１記載の計算機システム。
【請求項３】
前記リーダ計算機ノードのアクセス実行部が複数のアクセス要求を所定の順序で実行するとき、前記フォロワ計算機ノードのアクセス実行部は、前記リーダ計算機ノードのアクセス実行部が実行したアクセス要求と同様の処理を行うアクセス要求を、前記リーダ計算機ノードのアクセス実行部と同じ順序で実行する、
請求項１及び２のいずれかに記載の計算機システム。
【請求項４】
前記リーダ計算機ノードの出力判定部は、半数以上の前記フォロワ計算機ノードから出力データが正しい旨の回答を得たとき、当該リーダ計算機ノードのアクセス実行部が生成した出力データは正しいと判断する、
請求項１及び２のいずれかに記載の計算機システム。
【請求項５】
前記複数の計算機ノードは、前記フォロワ計算機ノードのアクセス実行部が前記リーダ計算機ノードのアクセス実行部と同様の処理を実行できているか否かを判定する追従判定部をさらに有し、
前記フォロワ計算機ノードの追従判定部は、前記フォロワ計算機ノードで実行されるアクセス要求が、前記リーダ計算機ノードで実行されるアクセス要求のいずれかと対応関係であるか否かを判定し、判定結果が肯定的であるときは、前記リーダ計算機ノードに追従可能である旨の通知を送信し、判定結果が否定的であるときは、前記リーダ計算機ノードに追従不可能である旨の通知を送信する、
請求項１記載の計算機システム。
【請求項６】
複数の計算機ノードが通信ネットワークを介して接続されており、
前記複数の計算機ノードのうち１台の計算機ノードがリーダ計算機ノードとなり、
前記複数の計算機ノードのうち前記リーダ計算機ノード以外の他の計算機ノードがフォロワ計算機ノードとなり、
前記リーダ計算機ノードと前記フォロワ計算機ノードとでそれぞれ同一のタスクを実行するようになっており、
前記リーダ計算機ノードは、
自ノードにおいて、第１のタスクから要求された第１のアクセス要求に基づいて第１の出力データを生成するステップと、
自ノードにおいて、前記第１の出力データが正しいか否かを、前記フォロワ計算機ノードに問い合わせ、所定の数の前記フォロワ計算機ノードから正しい旨の回答を得たとき、前記第１の実行結果は正しいと判断するステップと、を有し、
前記フォロワ計算機ノードは、
自ノードにおいて、前記第１のタスクと同様の処理を行う第２のタスクから要求された第２のアクセス要求に基づいて第２の出力データを生成するステップと、
自ノードにおいて、前記リーダ計算機ノードからの問い合わせを受け、前記第１の出力データと前記第２の出力データが同様のデータであるか否かを判定し、判定結果が肯定的である場合、前記第１の出力データは正しい旨の回答を前記リーダ計算機ノードに送信するステップと、を有する、
データ処理方法。
【請求項７】
複数の計算機ノードが通信ネットワークを介して接続されており、
前記複数の計算機ノードのうち１台の計算機ノードがリーダ計算機ノードとなり、
前記複数の計算機ノードのうち前記リーダ計算機ノード以外の他の計算機ノードがフォロワ計算機ノードとなり、
前記リーダ計算機ノードと前記フォロワ計算機ノードとでそれぞれ同一のタスクを実行するようになっており、
前記リーダ計算機ノードで実行されるコンピュータプログラムは、
自ノードにおいて、第１のタスクから要求された第１のアクセス要求に基づいて第１の出力データを生成するステップと、
自ノードにおいて、前記第１の出力データが正しいか否かを、前記フォロワ計算機ノードに問い合わせ、所定の数の前記フォロワ計算機ノードから正しい旨の回答を得たとき、前記第１の出力データは正しいと判断するステップと、を有し、
前記フォロワ計算機ノードで実行されるコンピュータプログラムは、
自ノードにおいて、前記第１のタスクと同様の処理を行う第２のタスクから要求された第２のアクセス要求に基づいて第２の出力データを生成するステップと、
自ノードにおいて、前記リーダ計算機ノードからの問い合わせを受け、前記第１の出力データと前記第２の出力データが同様のデータであるか否かを判定し、判定結果が肯定的である場合、前記第１の出力データは正しい旨の回答を前記リーダ計算機ノードに送信するステップと、を有する、
データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システム技術に関し、特にフォールトトレラントシステムの技術に関する。
【背景技術】
【０００２】
システムの一部に問題が生じても全体が機能停止することなく動作し続けるように設計された計算機システムは、フォールトトレラントシステム（以下「ＦＴシステム」という）と呼ばれる（特許文献１）。ＦＴシステムは、一般的に複数の計算機によって構成され、各計算機に同じ動作をさせることにより耐障害性を高めている。【０００３】
ＦＴシステムを実現する技術として「クロック同期方式」がある。「クロック同期方式」では、動作ステップごとに、各計算機間で情報を交換する。これにより、各計算機間で動作ステップを同期させることができる。【０００４】
また、ＦＴシステムを実現する別の技術として「仮想計算機同期方式」がある。「仮想計算機同期方式」では、一方の仮想計算機上でオペレーティングシステム（以下「ＯＳ」という）を実行させる。そのＯＳから他方の仮想計算機に、一方の仮想計算機上の仮想デバイス等へのアクセス情報を転送する。これにより、各仮想計算機を全く同じように動作させる（特許文献２）。【０００５】
ＦＴシステムを実現するさらに別の技術に「タスク同期方式」がある。「タスク同期方式」では、アプリケーションソフトウェア（以下「アプリケーション」という）をタスク（例えば、プロセス又はスレッド）という単位に分割する。そして、各計算機で同じタスクを同期して実行させる（特許文献３）。【０００６】
なお、各計算機の出力が一致しない場合、多数決に従って出力を選択して外部に出力することも知られている（特許文献１）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平８−３１４７４４号公報
【特許文献２】ＵＳ２０１０／０１０７１５８
【特許文献３】特開２００９−２１７５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
「クロック同期方式」は、各プロセッサの動作ステップを同期させる必要がある。したがって、専用ハードウェアによって、各プロセッサの動作ステップを観測し、制御する必要がある。しかし、近年、プロセッサが高集積化され、周辺チップの機能もプロセッサに統合されている。このような複雑な構成のプロセッサの動作ステップを観測し、制御することは困難である。「クロック同期方式」は、プロセッサの動作ステップのたびに同期処理を行う必要があるため、動作クロックの高いプロセッサでは、同期処理のオーバーヘッドが大きい。【０００９】
「仮想計算機同期方式」は、仮想計算機が複数の仮想プロセッサを備える場合に問題が発生する。例えば、一方の仮想計算機における各仮想プロセッサ間の動作ステップの関係と、他方の仮想計算機における他の各仮想プロセッサ間の動作ステップの関係とを、完全に一致させなければならない。しかし、これを完全に一致させることは困難である。【００１０】
「タスク同期方式」も、計算機が複数のプロセッサを備える場合に問題が発生する。例えば、各計算機において、第１のプロセッサでタスクＡが実行され、第２のプロセッサでタスクＢが実行されていると仮定する。そして、一方の計算機のタスクＡの実行タイミングが、他方の計算機のタスクＡの実行タイミングよりも早いと仮定する。この場合、一方の計算機では、タスクＡがメモリにデータを書き込んだ後にタスクＢがメモリからデータを読み出す。これに対し、他方の計算機では、タスクＡがメモリにデータを書き込む前にタスクＢがメモリからデータを読み出してしまう。従って、一方の計算機と他方の計算機において、タスクＢの実行結果が異なり、これにより計算機間で出力が異なってしまう恐れがある。【００１１】
そこで、本発明の目的は、複数の計算機で複数のタスクを同期して実行させることのできる計算機システムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の一実施態様に従う計算機システムは、複数の計算機ノードが通信ネットワークを介して接続される計算機システムであって、複数の計算機ノードのうち１台の計算機ノードがリーダ計算機ノードとなり、複数の計算機ノードのうち前記リーダ計算機ノード以外の他の計算機ノードがフォロワ計算機ノードとなり、リーダ計算機ノードと前記フォロワ計算機ノードとでそれぞれ同一のタスクを実行するようになっており、リーダ計算機ノードと、フォロワ計算機ノードはそれぞれ、通信ネットワークを介して他の計算機ノードと通信する通信インタフェース部と、データを記憶する記憶部と、タスクから前記記憶部へのアクセス要求を実行するアクセス実行部と、前記アクセス要求が端末への出力である場合に、出力データが正しいか否かを判定する出力判定部と、を備え、リーダ計算機ノードは、自ノードの外部アクセス実行部において、第１のタスクから要求された第１のアクセス要求に基づいて第１の出力データを生成し、自ノードの出力判定部において、第１の出力データが正しいか否かを、フォロワ計算機ノードに問い合わせ、所定の数の前記フォロワ計算機ノードから正しい旨の回答を得たとき、第１の出力データは正しいと判断し、フォロワ計算機ノードは、自ノードの外部アクセス実行部において、第１のタスクと同様の処理を行う第２のタスクから要求された第２のアクセス要求に基づいて第２の出力データを生成し、自ノードの出力判定部において、リーダ計算機ノードからの問い合わせを受け、第１の出力データと第２の出力データが同様の結果であるか否かを判定し、判定結果が肯定的である場合、第１の出力データは正しい旨の回答をリーダ計算機ノードに送信する。【００１３】
これにより、複数の計算機ノードで複数のタスクを同期して実行させることのできる計算機システムを実現できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施形態に係るＦＴシステムの構成の一例を示す図である。
【図２】タスク要求情報のデータ構造の一例を示す図である。
【図３】アクセス情報のデータ構造の一例を示す図である。
【図４】アクセス情報管理テーブルのデータ構造の一例を示す図である。
【図５】入力情報のデータ構造の一例を示す図である。
【図６】出力管理テーブルのデータ構造の一例を示す図である。
【図７】出力情報のデータ構造の一例を示す図である。
【図８】出力正否情報のデータ構造の一例を示す図である。
【図９】タスクが実行されるときのフローチャートの一例である。
【図１０】各計算機ノードのタスクがアクセス実行部を介してデータ記憶部にアクセスするときのシーケンスを示す図の一例である。
【図１１】リーダである計算機ノードが外部の端末からデータを受信するときのシーケンスを示す図の一例である。
【図１２】リーダである計算機ノードが外部の端末にデータを送信するときのシーケンスを示す図の一例である。
【図１３】アクセス実行部の処理の一例を示すフローチャートである。
【図１４】外部アクセス実行部が外部の端末からデータを受信する処理フローの一例を示す図である。
【図１５】外部アクセス実行部が外部の端末にデータを送信する処理フローの一例を示す図である。
【図１６】追従可否情報のデータ構造の一例を示す図である。
【図１７】第２の実施形態に係るアクセス情報管理テーブルの一例を示す図である。
【図１８】第２の実施形態に係るフォロワのアクセス実行部の処理フローの一例を示す図である。
【図１９】障害の可能性がある計算機ノードをＦＴシステムから切り離す処理フローを示す図である。
【図２０】第３の実施形態に係る外部アクセス実行部の処理フローの一例を示す図である。
【図２１】第４の実施形態に係るリーダの出力データの正否判定の処理フローの一例を示す図である。
【発明を実施するための形態】
【００１５】
（第１の実施形態）
本実施形態では、以下に述べるように、リーダとなる計算機と、フォロワとなる計算機とは、それぞれ同一タスクを実行する。リーダの計算機は、自身でのタスク出力データについて、フォロワの計算機に問い合わせる。リーダの計算機の実行結果とフォロワの計算機の出力データを比較して、出力の可否を判断する。
【００１６】
図１は、ＦＴシステム１の構成の一例を示す図である。ＦＴシステム１は、複数の（例えば３台の）計算機ノード１０Ａ、１０Ｂ、１０Ｃから構成されている。計算機ノードの数は３に限らず、２または４以上でもよい。
【００１７】
ＦＴシステム１は、そのＦＴシステム１を構成する計算機ノード１０のうち一台をリーダ、その他の計算機ノード１０をフォロワとする。ＦＴシステム１が正常稼働中は、リーダの計算機ノード１０とフォロワの計算機ノード１０が入れ替わることはない。しかし、例えば、リーダの計算機ノード１０に何らかの障害が発生した可能性があるときは、フォロワの計算機ノード１０のうち一台が新たにリーダとなり、ＦＴシステム１は処理を継続する。また、何らかの障害が発生した可能性のある計算機ノード１０は、ＦＴシステム１から切り離される。これにより、耐障害性の高いＦＴシステム１が実現される。
なお、本実施形態では、計算機ノード１０Ａをリーダとし、計算機ノード１０Ｂ及び１０Ｃをフォロワとする。以下において、計算機ノード１０Ａを「リーダ１０Ａ」、計算機ノード１０Ｂ及び１０Ｃをそれぞれ「フォロワ１０Ｂ」及び「フォロワ１０Ｃ」と略す。フォロワ１０Ｂとフォロワ１０Ｃをまとめて「フォロワ１０」という場合もある。
【００１８】
ＦＴシステム１は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｗｔｏｒｋ）又はインターネット等の通信ネットワーク１６を介して、１台以上の端末２と接続される。そして、ＦＴシステム１は、端末２とデータの送受信を行う。ここで、データとは、例えば、各々の端末２の状態を表す情報の通知、又は相手に対する動作の要求などである。
【００１９】
計算機ノード１０は、メモリ１１と、１つ以上のプロセッサ１２と、外部通信インタフェース（以下「Ｉ／Ｆ」という）１４、及びノード通信Ｉ／Ｆ１５を備える。
【００２０】
メモリ１１は、データの読み出し及び書き込みが可能な揮発性記憶媒体であり、プロセッサ１２からアクセスされる。メモリ１１は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成される。
【００２１】
プロセッサ１２は、記憶装置１３等からアプリケーション２０及び基盤ソフトウェア３０等のプログラムを読み出し、メモリ１１に展開して、そのプログラムを実行する。なお、一つの計算機ノード１０が複数のプロセッサ１２を備えてもよい。
【００２２】
外部通信Ｉ／Ｆ１４は、計算機ノード１０が、通信ネットワーク１６を介して、端末２とデータの送受信を行うためのＩ／Ｆである。ノード通信Ｉ／Ｆ１５は、計算機ノード１０同士がデータを送受信するためのＩ／Ｆである。なお、外部通信Ｉ／Ｆ１４とノード通信Ｉ／Ｆ１５は、必ずしも個別に備えられる必要はなく、一つの通信Ｉ／Ｆが外部通信とノード通信Ｉ／Ｆの両方の通信を行うようにしてもよい。外部通信Ｉ／Ｆ１４及びノード通信Ｉ／Ｆは、例えばイーサネット（登録商標）規格に準拠したＩ／Ｆ等で構成される。
【００２３】
記憶装置１３は、データの記憶が可能な不揮発性記憶媒体であり、プロセッサ１２等からアクセスされる。記憶装置１３には、計算機ノード１０で実行されるアプリケーション２０及び基盤ソフトウェア３０等の各種プログラム及びデータが記憶される。記憶装置１３は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はフラッシュメモリ等で構成される。
【００２４】
次に、プロセッサ１２で実行されるアプリケーション２０と基盤ソフトウェア３０について説明する。
【００２５】
アプリケーション２０は、ＦＴシステム１が提供する機能を実現するためのコンピュータプログラムである。アプリケーション２０は、一つ以上のタスク２１から構成される。タスク２１は、基盤ソフトウェア３０又は他のタスク２１から参照されない、固有の記憶領域を備えてもよい。そして、ＦＴシステム１を構成する計算機ノード１０は、それぞれ同じアプリケーション２０を有する。すなわち、同じアプリケーション２０が、ＦＴシステム１を構成する複数の計算機ノード１０でそれぞれ実行される。
【００２６】
基盤ソフトウェア３０は、マルチタスク処理が可能なＯＳであり、複数のタスク２１を並列に実行することができる。基板ソフトウェア３０は、タスク２１に対して、記憶装置１３へのアクセス機能と、外部通信Ｉ／Ｆ１４を介した端末２との通信機能と、メモリ３０の所定の領域の確保及び解放機能等を、提供する。基盤ソフトウェア３０は、例えば、スケジューラ３１と、タスク要求受付部３２と、出力判定部３３と、追従判定部３４と、アクセス情報管理テーブル３５と、アクセス実行部３６と、データ記憶処理部３７と、外部アクセス実行部３８と、出力管理テーブル３９とを備える。
【００２７】
図２は、タスク要求情報４０のデータ構造の一例を示す図である。タスク要求受付部３２は、図２に示すようなタスク要求情報４０をタスク２１から受け取り、その要求内容をアクセス実行部３６に伝える。タスク要求情報４０には、タスク２１がデータ記憶部３７にアクセスする際の要求が記載される。タスク要求情報４０には、例えば図２に示すように、アクセス対象情報４１と、アクセス種別４２と、データサイズ４３、及びデータ内容４４が記載される。
【００２８】
アクセス対象情報４１は、タスク２１のアクセス対象（すなわち、データの読み出し先、又はデータの書き込み先）を識別するための情報である。例えば、アクセス対象情報４１は、メモリ１１の所定の記憶領域を示すアドレスであってもよいし、アクセス対象となる記憶装置の識別子であってもよいし、記憶装置の所定の記憶領域を示す識別子であってもよいし、又はその組み合わせであってもよい。また、アクセス対象が通信ネットワーク１６を介した端末２であるときは、アクセス対象情報４１は、端末２を示すＩＰアドレス及びポート番号であってもよいし、計算機ノード１０内においてＩＰアドレスとポート番号の組み合わせを一意に識別するためのセッション識別子であってもよい。
【００２９】
アクセス種別４２は、タスクの要求が、データの読み出し（ｒｅａｄ）であるか、書き込み（ｗｒｉｔｅ）であるかを識別するための情報である。アクセス種別４２が「ｗｒｉｔｅ」であるときは、データサイズ４３及びデータ内容４４に、それぞれ書き込みデータのデータサイズ及びデータの内容が記載される。
【００３０】
図３は、アクセス情報５０のデータ構造の一例を示す図である。アクセス実行部３６は、タスク要求情報４０を他の計算機ノード１０に伝えるためのアクセス情報５０を生成する。さらに、アクセス実行部３６は、データ記憶部３７のデータにアクセスする。アクセス情報５０には、例えば図３に示すように、アクセス対象識別子５１と、計算機ノード識別子５２と、タスク識別子５３と、シーケンス番号５４と、状態変化フラグ５５、及び検証用情報５６が記載される。
【００３１】
アクセス対象識別子５１は、タスク要求情報４０が有するアクセス対象情報４１及びデータサイズ４３から一意に定まる識別子である。アクセス対象識別子５１は、例えば、アクセス対象情報４１に含まれるアクセス対象の記憶装置名、記憶領域名、又はアクセス対象である通信先の装置の識別子（例えば、ホスト名、又はＩＰアドレス等）から決定されてもよい。また、アクセス対象の記憶領域が複数に分割されているときは、アクセス対象識別子５１は、分割されたそれぞれの記憶領域に付与された識別子から決定されてもよい。
【００３２】
計算機ノード識別子５２は、アクセス情報５０を生成した計算機ノード１０を一意に識別するための識別子である。例えば、図３に示す計算機ノード識別子５２は「Ａ」なので、そのアクセス情報５０はリーダ１０Ａで生成されたものであることがわかる。
【００３３】
タスク識別子５３は、アクセス情報５０の実行の主体であるタスク２１を一意に識別するための識別子である。例えば、図３に示すタスク識別子５３は「Ｔ１」なので、そのアクセス情報５０は、タスクＴ１により実行されることがわかる。
【００３４】
シーケンス番号５４は、アクセス情報５０が自己の計算機ノード１０において実行される順番を示すための値である。基本的に、シーケンス番号の小さいアクセス情報５０から順番に実行される。例えば、図３に示すシーケンス番号５４は「９３」なので、基本的に、これよりも小さいシーケンス番号のアクセス情報５０が先に実行される。
【００３５】
状態変化フラグ５５は、アクセス情報５０の実行が、アクセス対象の状態を変化させるか否かを示す情報である。例えば、データ記憶部３７からデータを読み出すリードアクセスの場合、データ記憶部３７のデータは変化しないので、状態変化フラグ５５は「無」である。これに対し、データ記憶部３７にデータを書き込むライトアクセスの場合、もしくは、端末２にデータを送信するアクセスである場合、状態変化フラグ５５は「有」である。
【００３６】
検証用情報５６には、各計算機ノード１０において、同じタスク２１から渡されるタスク要求情報４０が同一であることを検証するためのデータが記載される。例えば、タスク要求情報４０が「書き込み」を要求するものであった場合、検証用情報５６には、タスク要求情報４０のデータ内容４４、もしくは、データ内容４４の誤り検出符号データ等が記載される。
【００３７】
図４は、アクセス情報管理テーブル３５のデータ構造の一例を示す図である。アクセス情報管理テーブル３５は、リーダアクセス情報５２Ａと、フォロワアクセス情報５２Ｂとを対応付けて管理する。リーダアクセス情報５２Ａとは、リーダ１０Ａのアクセス実行部３６から送信されたアクセス情報である。フォロワアクセス情報５２Ｂとは、フォロワ１０のアクセス実行部３６にて生成されたアクセス情報である。
【００３８】
リーダアクセス情報５２Ａは、例えば、タスク識別子５３Ａと、シーケンス番号５４Ａと、状態変化フラグ５５Ａと、検証用情報５６Ａと、自己ノード実行情報５７とを備える。フォロワアクセス情報５２Ｂは、例えば、タスク識別子５３Ｂと、シーケンス番号５４Ｂと、状態変化フラグ５５Ｂと、検証用情報５６Ｂとを備える。
アクセス情報管理テーブル３５は、リーダ１０Ａとフォロワ１０Ｂ（又はフォロワ１０Ｃ）とについて、同じタスク２１から生成されたアクセス情報５０を、対応付けて管理する。例えば、図４はフォロワ１０Ｂのアクセス情報管理テーブル３５の一例である。同じ行に記載の、リーダアクセス情報５２Ａとフォロワアクセス情報５２Ｂとは対応関係にあることがわかる。
対応関係は、アクセス対象識別子５１とタスク識別子５２が共に同じか否かで判断する。例えば、図４において、アクセス対象識別子５１が「Ｒ１」、かつ、タスク識別子５３Ａが「Ｔ１」のリーダアクセス情報５２Ａと、フォロワアクセス情報５２Ｂとは対応関係にある。
アクセス情報管理テーブル３５は、リーダアクセス情報５２Ａ及びフォロワアクセス情報５２Ｂを、同じアクセス対象識別子５１ごとにグループ化して管理する。さらに、アクセス情報管理テーブル３５は、アクセス対象識別子５１のグループ内において、リーダアクセス情報５２のシーケンス番号の小さい順に並べて管理する。
【００３９】
自己ノード実行情報５７には、その行に記載のフォロワアクセス情報５２Ｂが実行済みであるか否かが記載される。例えば図４に示すような、フォロワアクセス情報５２Ｂのシーケンス番号「３８」の実行が完了されたとき、同行の自己ノード実行情報５７には、そのシーケンス番号「３８」が記載される。アクセス実行部３６は、自己ノード実行情報５７を参照することで、どのフォロワアクセス情報５２Ｂが実行済みであるかを知ることができる。
リーダアクセス情報５２Ａがシーケンス番号の小さい順に並べられるので、それと対応関係にあるフォロワアクセス情報５２Ｂもそれと同じ順番に並べられる。そのため、アクセス実行部３６は、自己ノード実行情報５７を参照することで、シーケンスのどの段階のフォロワアクセス情報５２Ｂまで実行済みかを知ることができる。
【００４０】
図５は、入力情報６０のデータ構造の一例を示す図である。外部アクセス実行部３８は、リーダ１０Ａが端末２からデータの受信を試みたとき、その実行結果と受信したデータの内容をフォロワ１０に伝える入力情報６０を生成する。
入力情報６０には、例えば図５に示すように、アクセス対象識別子５１と、外部アクセスシーケンス番号６２と、入力結果フラグ６３と、データサイズ６４、及びデータ内容６５が記載される。外部アクセス実行部３８は、入力情報６０の入力結果フラグ６３に、データの受信に成功した場合は「成功」を、失敗した場合は「失敗」を、記載する。外部アクセス実行部３８は、データの受信に成功した場合は、受信したデータのデータサイズ及びデータ内容をそれぞれデータサイズ６４及びデータ内容６５に記載する。
【００４１】
外部アクセス実行部３８は、端末２にデータを送信するとき、図７に示す出力情報７０を、図６に示す出力管理テーブル３９に格納する。出力情報７０には、例えば図７に示すように、アクセス対象識別子５１と、外部アクセスシーケンス番号６２、及び照合データ７４が記載される。アクセス対象識別子５１、及び外部アクセスシーケンス番号６２は、図５と同じなので説明を省略する。照合データ７４には、例えば、リーダ１０Ａの出力データが記載される。
【００４２】
図６は、出力管理テーブル３９のデータ構造の一例を示す図である。出力管理テーブル３９には、例えば、図６に示すように、アクセス対象識別子５１と、外部アクセスシーケンス番号６２と、データサイズ６４と、データ内容６５とが記載される。リーダ１０Ａの出力管理テーブル３９には、リーダ１０Ａの出力データに対するフォロワ１０の正否判定を示す正否フラグ８１がさらに記載される。フォロワの出力管理テーブル３９には、正否フラグは含まれない。
【００４３】
図７は、出力情報７０のデータ構造の一例を示す図である。図８は、出力正否情報８０のデータ構造の一例を示す図である。
【００４４】
リーダ１０Ａの出力判定部３３は、出力管理テーブル３９に記載の所定の出力データを端末２に送信する前に、フォロワ１０に出力情報７０を送信する。リーダ１０Ａの出力判定部３３は、フォロワ１０から、例えば図８に示すような、出力情報７０の検証結果である出力正否情報８０を受信し、その検証結果に基づいて、上記の所定の出力データを端末２に送信するか否かを判定する。
【００４５】
図１に戻る。データ記憶部３７は、アクセス実行部３６からの要求に基づき、メモリ１１、または、記憶装置１３の所定の領域にデータを書き込んだり、メモリ１１、または、記憶装置１３の所定の領域からデータを読み出したりする。データ記憶部３７は、キャッシュメモリとしての役割を果たしてもよい。
【００４６】
スケジューラ３１は、複数のタスク２１の実行順序を制御する。スケジューラ３１は、例えば、所定の時間間隔で、実行するタスク２１を切り替える。スケジューラ３１は、実行中のタスクよりも優先度の高いタスク２１が発生したときは、その優先度の高いタスク２１を先に実行させたりする。
【００４７】
追従判定部３４は、フォロワ１０Ｂ又は１０Ｃがリーダ１０Ａに追従可能か否かを判定する。例えば、フォロワ１０Ｂの出力データがリーダ１０Ａの出力データと異なるとき、フォロワ１０Ｂは、リーダ１０Ａに対して、追従できない旨を示す情報を通知する。
リーダ１０Ａの追従判定部３４は、少数のフォロワから追従不可を示す情報を受け取ったときは、その少数のフォロワに何らかの障害が発生している可能性があると判定することができる。これに対し、リーダ１０Ａの追従判定部３４は、多数のフォロワから追従不可を示す情報を受け取ったときは、リーダ１０Ａ自身に何らかの障害が発生している可能性があると判定可能である。
【００４８】
図９は、タスク２１が実行される処理を示すフローチャートの一例である。スケジューラ３１は、実行するタスク２１を選択する（Ｓ１０１）。選択されたタスク２１は、実行を開始する（Ｓ１０２）。タスク２１の実行中に記憶装置１３又は端末２へのアクセス要求が発生したときは、タスク２１は、タスク要求受付部３２にタスク要求情報４０を渡し、アクセス処理の実行を要求する（Ｓ１０３）。
【００４９】
ここで、タスク要求受付部３２が、タスク要求情報４０を受け取っていないときは（Ｓ１０４：ＮＯ）、ステップＳ１０６に進む。
【００５０】
タスク要求受付部３２が、タスク２１からタスク要求情報４０を受け取った場合（Ｓ１０４：ＹＥＳ）、スケジューラ３１は、タスク要求情報４０に記載された処理を所定の時間内に完了できるか否かを判断する（Ｓ１０５）。
【００５１】
スケジューラ３１が、その処理を所定の時間内に完了できると判断した場合は（Ｓ１０５：ＹＥＳ）、ステップ１０６に進む。
【００５２】
一方、スケジューラ３１が、その処理を所定の時間内に完了できないと判断した場合は（Ｓ１０５：ＮＯ）、スケジューラ３１はこの処理を一時中断する。そして、スケジューラ３１は、ステップＳ１０１に戻り、他のタスク２１を選択し、実行する。
【００５３】
タスク要求受付部３２がタスク要求情報４０を受け取っていない場合（Ｓ１０４：ＮＯ）、又は、スケジューラ３１が、タスク要求情報４０に記載された処理を所定の時間内に完了できると判断した場合（Ｓ１０５：ＹＥＳ）について説明する。このとき、スケジューラ３１は、現在実行中のタスク２１が最優先のタスクであるか否かを判断する（Ｓ１０６）。
【００５４】
現在実行中のタスク２１が最優先のタスクであるときは（Ｓ１０６：ＹＥＳ）、ステップＳ１０３に戻り、この処理を継続する。
【００５５】
現在実行中のタスク２１が最優先のタスクでないときは（Ｓ１０６：ＮＯ）、ステップＳ１０１に戻り、他のタスク２１を選択し、実行する。現在実行中のタスク２１が最優先でなくなる場合とは、例えば、現在実行中のタスク２１の連続実行時間が所定時間以上となった場合、又は、現在実行中のタスクよりも優先度の高いタスクが実行可能となった場合などである。
【００５６】
なお、これらの動作は、計算機ノード１０が複数のプロセッサ１２を備える場合は、各プロセッサ１２において各々実行される。
各プロセッサ１２がスケジューラ３１を実行するタイミングは同一とは限らない。したがって、計算機ノード１０の間で「クロック同期」を行わない限り、各計算機ノード１０の間で各プロセッサ１２の動作を完全に一致させることができない。例えば、各計算機ノード１０のプロセッサ内のキャッシュ動作が異なると、同じタスク２１の開始タイミングがずれることがある。また、各計算機ノード１０の基盤ソフトウェア３０の内部状態が異なると、タスク２１の実行結果が一致しなかったりすることがある。
しかし、ＦＴシステム１を実現するにあたって、それぞれの計算機ノード１０で実行されるタスク２１が、致命的な、実行結果の不一致を引き起こすことは許されない。
致命的な実行結果の不一致とは、例えば、複数の計算機ノード１０の間で同一のタスク２１を実行したにもかかわらず、各計算機ノード１０で異なる判定がなされ、それぞれ異なる実行結果となり、異なる出力が行われる場合等である。そこで、本実施形態では、複数の計算機ノード１０で同一のタスク２１が実行されたとき、致命的な実行結果の不一致を引き起こさないようにする。
【００５７】
図１０は、各計算機ノード１０のタスク２１がデータ記憶部３７にアクセスするときのシーケンス例を示す。本例では、リーダ１０Ａにおいて、タスク２１Ａの後にタスク２１ａがデータ記憶部３７にアクセスしないと、データに不整合が生じることとする。なお、フォロワ１０Ｂ及び１０Ｃにおいても同様であるとする。
【００５８】
まず、リーダ１０Ａで実行されるタスク２１Ａ及び２１ａのタスク要求情報４０に基づくアクセス実行部３６Ａの処理について説明する。タスク２１Ａから第１のタスク要求情報４０を受け付けたアクセス実行部３６Ａは、第１のタスク要求情報４０に対応する第１のアクセス情報５０を生成する（Ｓ１０ａ）。アクセス実行部３６Ａは、その第１のアクセス情報５０を、フォロワ１０Ｂのアクセス実行部３６Ｂと、フォロワ１０Ｃのアクセス実行部３６Ｃに送信する（Ｓ１１ａ、Ｓ１２ａ）。次にアクセス実行部３６Ａは、そのタスク要求情報４０に基づき、データ記憶部３７Ａの所定のデータにアクセスする（Ｓ１３ａ）。
【００５９】
その後、タスク２１ａから第２のタスク要求情報４０を受け付けたアクセス実行部３６Ａは、第２のタスク要求情報４０に対応する第２のアクセス情報５０を生成する（Ｓ２０ａ）。以降は、上記のタスク２１Ａで述べたＳ１１ａ〜Ｓ１３ａと同様に、アクセス実行部３６Ａは、記憶装置１３にアクセスする（Ｓ２１ａ〜Ｓ２３ａ）。
【００６０】
すなわち、リーダ１０Ａで実行されているアクセス実行部３６Ａは、フォロワ１０Ｂのアクセス実行部３６Ｂ及びフォロワ１０Ｃのアクセス実行部３６Ｃに、同一の処理を実行させるためのアクセス情報５０を送信する。
【００６１】
次に、フォロワ１０Ｂで実行されるタスク２１Ｂ及び２１ｂのタスク要求情報４０に基づくアクセス実行部３６Ｂの処理について説明する。ここでは、フォロワ１０Ｂのアクセス実行部をアクセス実行部３６Ｂと、フォロワ１０Ｂのデータ記憶部をデータ記憶部３７Ｂと、呼ぶ。なお、フォロワ１０Ｃについて述べる場合も、同様に、３６Ｃ、３７Ｃの符号を付けて説明する。タスク２１Ｂから第１のタスク要求情報４０を受け付けたアクセス実行部３６Ｂは、処理を開始するが、リーダ１０Ａのアクセス実行部３６Ａからアクセス情報５０を受け取っていないので、待機する（Ｓ１０ｂ）。待機している様子を、図１０では点線で示す。
アクセス実行部３６Ｂは、アクセス実行部３６Ａから第１のアクセス情報５０を受け取ると（Ｓ１１ａ）、その第１のアクセス情報５０に対応するタスク要求情報４０に基づき、データ記憶部３７Ｂの所定のデータにアクセスする（Ｓ１１ｂ）。
【００６２】
その後、タスク２１ｂがアクセス実行部３６Ｂに第２のタスク要求情報４０を発行する。このとき、アクセス実行部３６Ｂは、リーダ１０Ａのアクセス実行部３６Ａから第２のアクセス情報５０を受信済みである（Ｓ２１ａ）。従って、アクセス実行部３６Ｂは、すぐに、その第２のアクセス情報５０に対応するタスク要求情報４０に基づき、データ記憶部３７Ｂの所定のデータにアクセスする（Ｓ２１ｂ）。
【００６３】
次に、フォロワ１０Ｃで実行されるタスク２１Ｃ及び２１ｃのタスク要求情報４０に基づくアクセス実行部３６Ｂの処理について説明する。タスク２１Ｃは処理を開始する。タスク２１Ｃからタスク要求情報４０を受け付けたアクセス実行部３６Ｃは、リーダ１０Ａのアクセス実行部３６Ａから既に第１のアクセス情報５０を受信しているので（Ｓ１２ａ）、すぐに、タスク要求情報４０に基づき、データ記憶部３７Ｃの所定のデータにアクセスする（Ｓ１１ｃ）。
【００６４】
一方、タスク２１ｃは、タスク２１Ｃよりも早く処理を開始している（Ｓ２０ｃ）。しかし、アクセス実行部３６Ｃは、まだ、リーダ１０Ａのアクセス実行部３６Ａから第２のアクセス情報５０を受信していないので、待機する。
アクセス実行部３６Ｃは、アクセス実行部３６Ａから第２のアクセス情報５０を受信する（Ｓ２２ａ）。しかし、この時点ではまだ、第１のアクセス情報５０に対応するアクセス処理が完了していないので、アクセス実行部３６Ｃは、第１のアクセス情報５０に対応するアクセス処理が完了するまで待機する。
アクセス実行部３６Ｃは、第１のアクセス情報５０に対応するアクセス処理が完了した後で、タスク要求情報４０に基づき、データ記憶部３７Ｃの所定のデータにアクセスする（Ｓ２１ｃ）。
【００６５】
以上の処理により、リーダ１０Ａにおけるタスクの起動順序と、フォロワ１０Ｂにおけるタスクの起動順序及びフォロワ１０Ｃにおけるタスクの起動順序が一致しない場合でも、各計算機ノードにおいて、各タスクがデータにアクセスする順序を同一にすることができる。すなわち、各計算機ノードにおいて同じ処理を行うタスクが、異なる実行結果となってしまうことを防ぐことができる。
【００６６】
図１１は、リーダである計算機ノード１０Ａが外部の端末２からの外部アクセス要求を受信するときのシーケンスを示す図の一例である。
【００６７】
まず、リーダ１０Ａで実行されるアクセス実行部３６Ａの処理について説明する。アクセス実行部３６ＡのステップＳ３０ａ〜Ｓ３１ａについては、図１０におけるステップＳ２０ａ〜Ｓ２１ａと同様の処理なので説明を省略する。
【００６８】
次に、アクセス実行部３６Ａは、外部アクセス実行部３８Ａに、端末２から送信されるデータを受信するよう指示する（Ｓ３３ａ）。
【００６９】
外部アクセス実行部３８Ａは、端末２から送信されたデータを受信すると（Ｓ３４ａ）、その旨をアクセス実行部３６Ａに通知する（Ｓ３５ａ）。このとき、外部アクセス実行部３８Ａは、入力情報６０を、フォロワ１０Ｂの外部アクセス実行部３８Ｂと、フォロワ１０Ｃの外部アクセス実行部３８Ｃとに転送する（Ｓ３６ａ、Ｓ３７ａ）。
【００７０】
次に、フォロワ１０Ｂで実行されるアクセス実行部３６Ｂの処理について説明する。アクセス実行部３６Ｂは処理開始時、リーダ１０Ａのアクセス実行部３６Ａから既にアクセス情報５０を受信している（Ｓ３１ａ）。そこで、アクセス実行部３６Ｂは、外部アクセス実行部３８Ｂに、リーダ１０Ａの外部アクセス実行部３８Ａから転送される入力情報６０を受けるよう指示する（Ｓ３１ｂ）。
【００７１】
外部アクセス処理部３８Ｂは、リーダ１０Ａから入力情報６０を受信すると（Ｓ３６ａ）、浄心データ情報６０に含まれる入力結果フラグ６３、データサイズ６４、データ内容６５をアクセス実行部３６Ｂに通知する（Ｓ３２ｂ）。なお、フォロワ１０Ｃのアクセス実行部３６Ｃも上記と同様の処理を行う（Ｓ３０ｃ〜Ｓ３２ｃ）。
【００７２】
以上の通り、外部の端末２等からＦＴシステム１に送信されたデータは、リーダ１０Ａが代表して受信し、それをフォロワに転送する。そして、リーダ１０Ａとフォロワ１０Ｂ及び１０Ｃでそれぞれ同じ処理を実行する。これにより、フォロワもリーダと同じ入力結果を得ることができ、入力結果を利用するタスクが同じ動作を行うことができる。  
【００７３】
図１２は、リーダである計算機ノード１０Ａが端末２にデータを送信するときのシーケンスを示す図の一例である。
【００７４】
まず、リーダ１０Ａで実行されるアクセス実行部３６Ａの処理について説明する。アクセス実行部３６ＡのステップＳ４０ａ〜Ｓ４２ａについては、図１１におけるステップＳ３０ａ〜Ｓ３２ａと同様の処理なので説明を省略する。アクセス実行部３６Ａは、外部アクセス実行部３８Ａに対して、データを端末２に送信するよう指示する（Ｓ４３ａ）。外部アクセス実行部３８Ａは、アクセス実行部３６Ａから渡されたデータを出力情報７０に記載し、それをフォロワ１０Ｂの外部アクセス実行部３８Ｂ及びフォロワ１０Ｃの外部アクセス実行部３８Ｃにそれぞれ転送する（Ｓ４４ａ、Ｓ４５ａ）。外部アクセス実行部３８Ａは、フォロワ１０Ｂの外部アクセス実行部３８Ｂ及びフォロワ１０Ｃの外部アクセス実行部３８Ｃから、リーダ１０Ａの出力データが正しいか否かを示す出力正否情報１４を受信する（Ｓ４２ｂ、Ｓ４２ｃ）。外部アクセス実行部３８Ａは、多数（例えば、半数以上）のフォロワから結果が正しい旨の通知を受けた場合、リーダ１０Ａの出力データを端末２に送信する（Ｓ４６ａ）。
【００７５】
フォロワ１０Ｂで実行されるアクセス実行部３６Ｂの処理について説明する。アクセス実行部３６Ｂは、処理開始時に、リーダ１０Ａのアクセス実行部３６Ａから既にアクセス情報５０を受信している（Ｓ４０ｂ）。そこで、アクセス実行部Ｂは、出力データを外部アクセス実行部３８Ｂに渡す。外部アクセス実行部３８Ｂは、アクセス実行部３６Ｂから受け取った出力データと、リーダ１０Ａのタスク２１Ａから受信した出力情報７０を比較する。出力データが一致する場合、外部アクセス実行部３８Ｂは、出力正否情報８０の正否フラグ８１に、一致する旨を示す「正」の情報を記載し、リーダ１０Ａの外部アクセス実行部３８Ａに送信する（Ｓ４２ｂ）。一方、出力データが一致しない場合、外部アクセス実行部３８Ｂは、出力正否情報８０の正否フラグ８１に、一致しない旨の「否」を示す情報を記載し、リーダＡの外部アクセス実行部３８Ａに送信する（Ｓ４２ｂ）。なお、フォロワ１０Ｃで実行されるタスク２１Ｃも上記と同様の処理を行う（Ｓ４０ｃ〜Ｓ４２ｃ）。
【００７６】
以上の処理により、もしリーダ１０Ａの出力データが何らかの不具合によって誤っていたとしても、端末２に誤った出力データを送信することを防ぐことができる。
【００７７】
図１３は、タスク要求情報の処理を示すフローチャートである。アクセス実行部３６は、タスク要求情報４０に基づき、アクセス情報５０を生成する（Ｓ２０１）。アクセス実行部３３は、自分の属する計算機ノード１０がリーダであるか、フォロワであるかを判定する（Ｓ２０２）。以下では、自分の属する計算機ノードを自ノードと呼ぶ。
【００７８】
自ノードがリーダである場合の処理について説明する（Ｓ２０２：リーダ）。アクセス実行部３６は、アクセス情報５０をフォロワ１０Ｂ及び１０Ｃに送信する（Ｓ２０３）。
【００７９】
アクセス実行部３６は、タスク要求情報４０が、自ノード内部の記憶装置１３へのアクセスを要求するものであるか、外部の端末２へのアクセスを要求するものであるかを判定する（Ｓ２１０）。
【００８０】
アクセス要求情報４０が自ノード内部のデータ記憶部３７へのアクセスを要求するものであった場合（Ｓ２１０：内部）、アクセス実行部３６は、データ記憶部３７のデータにアクセスする（Ｓ２１１）。
【００８１】
一方、端末２へのアクセスを要求するものであった場合（Ｓ２１０：外部）、外部アクセス実行部３８が、端末２とデータの送受信を行う（Ｓ２１２）。
【００８２】
次に、ステップＳ２０２に戻り、自己の計算機１０がフォロワである場合の処理について説明する（Ｓ２０２：ＮＯ）。
【００８３】
アクセス実行部３６は、ステップＳ２０１で生成したフォロワアクセス情報５０をアクセス情報管理テーブル３５に格納する（Ｓ２０４）。アクセス実行部３６は、リーダ１０Ａから受信したリーダアクセス情報５０をアクセス情報管理テーブル３５に格納する（Ｓ２０５）。アクセス実行部３６は、アクセス情報管理テーブル３５から、フォロワアクセス情報５２Ｂとリーダアクセス情報５２Ａとの対応関係を照合する（Ｓ２０６）。すなわち、例えば図４において、フォロワアクセス情報５２Ｂと同じ行に記載のリーダアクセス情報５２Ａを照合する。
【００８４】
アクセス実行部３６は、照合したフォロワアクセス情報５２Ｂがすぐに実行可能か否かを判定する（Ｓ２０７）。同じアクセス対象識別子５３のグループ内において、照合したフォロワアクセス情報５２Ｂよりもシーケンス番号が小さいフォロワアクセス情報５２Ｂが全て実行済みである場合は、すぐに実行可能と判定する。まだ未実行のものがある場合は、まだ実行不可能であると判定する。実行済みか否かは、自己ノード実行情報５７を参照することでわかる。
【００８５】
フォロワアクセス情報５２Ｂが全て実行済みの場合（Ｓ２０７：ＹＥＳ）、アクセス実行部３６は、アクセス情報管理テーブル３５において、照合したフォロワアクセス情報５２Ｂに対応する自己ノード実行情報５７に、フォロワアクセス情報５２Ｂのシーケンス番号を記入する（Ｓ２０８）。アクセス実行部３６は、上記のステップＳ２１０からＳ２１２と同様、タスク要求情報４０に基づき、データ記憶部３７の所定のデータにアクセスする。
【００８６】
一方、まだ未実行のものが残っているときは（Ｓ２０７：ＮＯ）、アクセス実行部３６は、このアクセス処理をいったん保留にし（Ｓ２０９）、ステップＳ２０５に戻る。
【００８７】
なお、アクセス情報管理テーブル３５に状態変化フラグ５５を備えるようにしてもよい。例えば、アクセス情報管理テーブル３５に、実行されるアクセス処理よりもシーケンス番号が小さい未実行のアクセス処理が残っていたとする。上記の処理であれば、ステップＳ２０７において、未実行のアクセス処理が残っているので、アクセス処理は実行できないと判断される。
状態変化フラグ５５を備えた場合を説明する。あるフォロワアクセス情報５２Ｂに対応するリーダアクセス情報５２Ａ及びこれよりシーケンス番号が小さいリーダアクセス情報５２Ａの全ての状態変化フラグ５５が「無」であり、かつ、対応するフォロワアクセス情報５１Ｂの全ての状態変化フラグ５５も「無」である場合は、ステップＳ２０７の判定をＹＥＳとしてもよい。状態変化フラグ５５を管理することで、ステップＳ２０７の条件が成立する可能性が高くなる。従って、アクセス処理の実行が保留される頻度を減らすことができる。
【００８８】
図１４は、外部アクセス実行部３８が端末２から外部アクセス要求を受信する処理フローの一例を示す図である。
【００８９】
外部アクセス実行部３８は、自ノードがリーダであるかフォロワであるかを判定する（Ｓ３０１）。自ノードがリーダである場合の処理について説明する（Ｓ３０１：リーダ）。
【００９０】
外部アクセス実行部３８は、外部通信Ｉ／Ｆ１４を介して、端末２等から外部アクセス要求１０を受信し、その要求を実行する（Ｓ３０２）。
【００９１】
外部アクセス実行部３８は、入力データを含む入力情報６０を生成する（Ｓ３０３）。
【００９２】
外部アクセス実行部３８は、生成した入力情報６０をフォロワ１０Ｂ及び１０Ｃに送信する（Ｓ３０４）。
【００９３】
外部アクセス実行部３８は、アクセス実行部３６に入力結果を通知する（Ｓ３０５）。
【００９４】
ステップＳ３０１に戻り、自ノードがフォロワである場合の処理について説明する（Ｓ３０１：フォロワ）。
【００９５】
外部アクセス実行部３８は、リーダから入力情報６０を受信する（Ｓ３０６）。
【００９６】
外部アクセス実行部３８は、入力情報６０に基づいてリーダの入力結果を再現し（Ｓ３０７）、アクセス実行部３６に再現した入力結果を通知する。（Ｓ３０５）。
【００９７】
以上の処理により、フォロワもリーダと同じ入力結果を得ることができ、入力結果を利用するタスクが同じ動作を行うことができる。
【００９８】
図１５は、外部アクセス実行部３８が端末２に出力データを送信する処理フローの一例を示す図である。
【００９９】
外部アクセス実行部３８は、出力データを出力管理テーブル３９に格納する（Ｓ４０１）。
【０１００】
外部アクセス実行部３８は、自ノードがリーダであるかフォロワであるかを判定する（Ｓ４０２）。
【０１０１】
まず、自ノードがリーダである場合の処理について説明する（Ｓ４０２：リーダ）。
【０１０２】
外部アクセス実行部３８は、フォロワ１０Ｂ及び１０Ｃに出力情報を送信する（Ｓ４０３）。
【０１０３】
外部アクセス実行部３８は、各フォロワから出力正否情報８０を受信する（Ｓ４０４）。
【０１０４】
そして、外部アクセス実行部３８は、受信した出力正否情報８０を、出力判定部３３に渡し、出力データが正しいか否かを判定させる。出力判定部３３は、正否フラグ８１が「正」の出力正否情報８０と、正否フラグが「否」の出力正否情報８０の数をそれぞれ集計する。そして、「正」の数が多数（例えば、半数以上）であるか否かを判定する（Ｓ４０５）。
【０１０５】
この判定が「真」の場合（Ｓ４０５：ＹＥＳ）、出力判定部３３は、出力データは正しい旨の判定を外部アクセス実行部３８に返す。外部アクセス実行部３８は、これを受けて、リーダ１０Ａの出力データを端末２に送信する。
【０１０６】
一方、この判定が「偽」の場合（Ｓ４０５：ＮＯ）、出力判定部３３は、リーダ１０Ａの出力データは正しくない可能性がある旨の判定を外部アクセス実行部３８に返す。外部アクセス実行部３８は、これを受けて、リーダ１０Ａで実行された出力データは端末２に送信しない。リーダ１０Ａは、自ノードに何らかの障害が発生している可能性があると想定し、自己のリーダ機能を停止し、フォロワたちに、新たなリーダを選出するよう要請する（Ｓ４０７）。
【０１０７】
次に、ステップＳ４０２に戻り、自ノードがフォロワである場合の処理について説明する（Ｓ４０２：フォロワ）。
【０１０８】
外部アクセス実行部３８は、リーダから出力情報７０を受信する（Ｓ４０８）。
【０１０９】
外部アクセス実行部３８は、出力判定部３３に、リーダから受信した出力情報７０と自己の出力データを比較させる（Ｓ４０９）。
【０１１０】
出力判定部３３は、その比較結果が一致しているか否かを判定する（Ｓ４１０）。一致する場合（Ｓ４１０：ＹＥＳ）、出力判定部３３は、正否フラグ８１に「正」を記載した出力正否情報８０を、リーダ１０Ａに送信する（Ｓ４１１）。一方、一致しない場合（Ｓ４１０：ＮＯ）、出力判定部３３は、正否フラグ８１に「否」を記載した出力正否情報８０を、リーダ１０Ａに送信する（Ｓ４１２）。
【０１１１】
以上の処理により、リーダの出力データとフォロワの出力データを比較することにより、より信頼性の高い出力を行うことができる。
（第２の実施形態）
【０１１２】
第２の実施形態は、第１の実施形態に、何らかの異常が発生したリーダ１０Ａ、フォロワ１０Ｂ又は１０ＣをＦＴシステム１から切り離す処理を追加したものである。
【０１１３】
図１６は、追従可否情報９０のデータ構造の一例を示す図である。追従可否情報９０は、フォロワ１０が、リーダ１０Ａと同じように処理を実行できているか（すなわち、リーダ１０Ａに追従できているか）否かを、リーダ１０Ａに伝えるための情報である。追従可否情報９０は、例えば図１６に示すように、計算機ノード識別子５２と、追従可否フラグ９１、及び追従可否詳細情報９２を有する。
【０１１４】
追従可否フラグ９１は、フォロワ１０がリーダ１０Ａに追従できているか否かを示すフラグである。正常に追従できているときは「可」が、何らかの障害により追従できないときは「不可」が記載される。
【０１１５】
追従可否詳細情報９２は、追従しているアクセス情報５０を示すための情報である。例えば、追従可否詳細情報９２は、アクセス対象識別子５１と、タスク識別子５３、及びシーケンス番号５４の組み合わせでもよい。追従可否詳細情報９２は、追従が「不可」となった理由を示す情報であってもよい。
【０１１６】
図１７は、第２の実施形態に係るアクセス情報管理テーブル３５の一例を示す図である。リーダ１０Ａの追従判定部３４は、フォロワから受信した追従可否情報９０の追従可否フラグが「可」の場合、アクセス情報管理テーブル３５の対応する追従可否フラグ５８の項目に「可」と記載する。一方、追従可否情報９０を受信できないときは、追従判定部３４は、アクセス情報管理テーブル３５の対応する追従可否フラグ９１の項目に何も記載しない。追従可否フラグ９１が「不可」のときは、追従判定部３４は、アクセス情報管理テーブル３５の対応する追従可否フラグ９１の項目に「不可」と記載する。リーダ１０Ａの追従判定部３４は、アクセス情報管理テーブル３５の同じ行の追従可否フラグ９１に「可」が多数（例えば、半数以上）のときは、「不可」を送信したフォロワには何らかの障害が発生している可能性があると判断する。追従判定部３４は、そのフォロワをＦＴシステム１から切り離す。一方、可否フラグに「不可」が多数（例えば、半数以上）のときは、追従判定部３４は、リーダ自身に何らかの障害が発生している可能性が高いと判断する。追従判定部３４は、リーダ機能を停止し、フォロワたちに新しいリーダを選出するよう要請する。
【０１１７】
図１８は、第２の実施形態に係るフォロワのアクセス実行部３６の処理を示すフローチャートである。
【０１１８】
ＦＴシステム１を構成する計算機ノード１０は、ハートビート等の既知の手段により、基盤ソフトウェア３０が正常に実行されていることを相互に確認する。リーダ１０Ａが無応答状態となったとき、フォロワ１０は、その旨を追従可否詳細情報９２に記載した追従可否情報９０を、互いに送信する。
【０１１９】
図１８の処理フローは、図１３のＳ２０４〜Ｓ２０８の処理フローに該当する。よって、図１８のステップＳ２０４とＳ２０５の説明は省略し、ステップＳ２２０から説明する。
【０１２０】
アクセス実行部３６は、アクセス情報管理テーブル３５から、一番古い未実行のアクセス処理を照合する（Ｓ２２０）。アクセス実行部３６は、フォロワアクセス情報５２Ｂのタスク識別子５３Ｂと、リーダアクセス情報５２Ａのタスク識別子５３Ａを比較する（Ｓ２２１）。
【０１２１】
タスク識別子５３が一致する場合（Ｓ２２１：ＹＥＳ）、アクセス実行部３６は、他の計算機ノード１０に依存しない他の項目、例えば、アクセス対象識別子５１、状態変化フラグ５５、及び検証用情報５６について比較する（Ｓ２２２）。
【０１２２】
他の項目も一致する場合（Ｓ２２２：ＹＥＳ）、アクセス実行部３６は、リーダのアクセスに追従が可能と判断し、追従可否フラグ９１を「可」とした追従可否情報９０をリーダ１０Ａに送信する（Ｓ２２３）。追従可否詳細情報９２には、リーダ１０Ａのアクセス情報５０のシーケンス番号５４等を含める。その後、図１３のステップＳ２０８以降のフローを実行する。
【０１２３】
一方、他の項目が一致しない場合（Ｓ２２２：ＮＯ）、アクセス実行部３４は、追従可否フラグ９１を「不可」とした追従可否情報９０を、リーダ１０Ａに送信する（Ｓ２２７）。その後、図１３のステップＳ２０９以降のフローを実行する。
【０１２４】
次に、ステップＳ２２１に戻り、タスク識別子５３が一致しない場合について説明する。タスク識別子５３が一致しない場合（Ｓ２２１：ＮＯ）、アクセス実行部３４は、アクセス対象識別子５１を比較する（Ｓ２２４）。
【０１２５】
アクセス対象識別子５１が一致する場合（Ｓ２２４：ＹＥＳ）、自己のアクセス情報５０に対応するタスク要求情報４０の実行が保留されている時間が所定のタイムアウト時間を超えているか否かを判定する（Ｓ２２６）。なお、リーダ１０Ａのアクセス情報５０を受信してから所定のタイムアウト時間が過ぎているか否かによって判定してもよい。
【０１２６】
所定のタイムアウト時間が過ぎている場合は（Ｓ２２６：ＹＥＳ）、アクセス実行部３６は、追従可否フラグを「不可」とした追従可否情報９０をリーダに送信し（Ｓ２２７）、図１３のステップＳ２０９以降の処理フローを実行する。
【０１２７】
一方、所定のタイムアウト時間が過ぎていない場合は（Ｓ２２６：ＮＯ）、アクセス実行部３６は、そのまま図１３のステップＳ２０９以降の処理フローを実行する。
【０１２８】
次に、ステップＳ２２４に戻り、アクセス対象識別子５１が一致しない場合（Ｓ２２４：ＮＯ）について説明する。未照合のアクセス情報５０があるか否かを判定する（Ｓ２２５）。
【０１２９】
未照合のアクセス情報５０がある場合は（Ｓ２２４：ＹＥＳ）、次のアクセス情報５０を参照し（Ｓ２２８）、ステップＳ２０５に戻る。
【０１３０】
一方、未照合のアクセス情報がない場合は（Ｓ２２４：ＮＯ）、ステップＳ２２６に進む。
【０１３１】
図１９は、障害の可能性がある計算機ノード１０をＦＴシステム１から切り離す処理フローを示す図である。
【０１３２】
リーダ１０Ａの追従判定部３４は、各フォロワから追従可否情報９０を受信する（Ｓ５０１）。追従判定部３４は、一つのアクセス処理について、追従可否フラグ９１を「可」としたフォロワの数と、「不可」としたフォロワの数をそれぞれ集計する（Ｓ５０２）。
【０１３３】
追従可否フラグ９１を「可」としたフォロワの数が多数（例えば、半数以上）の場合（Ｓ５０２：「可」が多い）の場合は、追従可否フラグ９１を「不可」としたフォロワには何らかの障害が発生している可能性がある。そこで、リーダ１０Ａの追従判定部３４は、そのフォロワをＦＴシステム１から切り離す（Ｓ５０３）。
【０１３４】
一方、追従可否フラグ９１を「不可」としたフォロワの数が多数（例えば、半数以上）の場合（Ｓ５０２：「不可」が多数）、リーダ１０Ａには何らかの障害が発生している可能性がある。そこで、リーダ１０Ａの追従判定部３４は、フォロワたちに対して新たなリーダを選出するよう要請すると共に、リーダ１０Ａ自身をＦＴシステム１から切り離す（Ｓ５０４）。
【０１３５】
以上の処理により、何らかの障害が発生している可能性がある計算機ノード１０をＦＴシテム１から切り離すことができる。そして、ＦＴシステム１全体では、正しい処理を継続することができる。
（第３の実施形態）
【０１３６】
第３の実施形態では、第１の実施形態のように各フォロワが出力の正否判定を行うのではなく、リーダ１０Ａが各フォロワの出力の正否判定を行う。
【０１３７】
図２０は、第３の実施形態に係る外部アクセス実行部の処理フローの一例を示す図である。まず、各フォロワの処理フローについて説明する。ステップＳ４０１〜Ｓ４０２は、図１５の処理フローと同じなので説明を省略する。
【０１３８】
自ノードがフォロワである場合（Ｓ４０２：フォロワ）、フォロワ自身の出力データを出力情報７０に記載して、リーダ１０Ａに送信する（Ｓ４２１）。
【０１３９】
次に、自ノードがリーダの場合を説明する（Ｓ４０２：リーダ）。リーダ１０Ａは、出力情報７０を受信する（Ｓ４２０）。出力データ比較部３３は、リーダ自身の出力データと各フォロワの出力データを照合する（Ｓ４２２）。
【０１４０】
リーダ１０Ａと同じ出力データのフォロワの数が多数（例えば、半数以上）の場合（Ｓ４２３：ＹＥＳ）、出力判定部３３は、リーダ１０Ａの出力データは正しいと判断し、その出力データを端末２に送信する（Ｓ４０６）。
【０１４１】
一方、出力データの異なるフォロワの数が多数（例えば、半数以上）の場合（Ｓ４２３：ＮＯ）、出力判定部３３は、リーダ１０Ａ自身に何らかの障害が発生している可能性があると判断する。そこで、出力判定部３３は、リーダの機能を停止し、フォロワたちに新たなリーダを選出するよう要請する（Ｓ４０７）。
【０１４２】
以上の処理によれば、リーダ１０Ａは、図１５の処理フローのように、出力正否情報８０をフォロワに送信する必要がない。したがって、計算機ノード間の通信トラフィックを軽減することができる。
（第４の実施形態）
【０１４３】
第４の実施形態は、フォロワからの追従可否情報９０の可否を、リーダ１０Ａの出力の正否の検証に利用する。
【０１４４】
図２１は、第４の実施形態に係るリーダ１０Ａの出力の正否判定処理を示すフローチャートである。ステップＳ６００〜Ｓ６０２の処理は、図１９のステップＳ５００〜Ｓ５０２と同様の処理なので、説明を省略する。
【０１４５】
追従判定部３４は、追従可否情報９０の追従可否フラグ９１を集計し、「可」の追従可否フラグ９１が多数の場合（Ｓ６０２：「可」が多い）、リーダ１０Ａの出力データは正しいと判断して、その出力データを端末２に送信する（Ｓ６０３）。「不可」と判定したフォロワには、何らかの障害が発生している可能性があると判断する。そこで、追従判定部３４は、そのフォロワをＦＴシステム１から切り離す（Ｓ６０４）。
【０１４６】
一方、「不可」の追従可否フラグ９１が多数の場合（Ｓ６０２：「不可」が多い）、リーダ１０Ａの出力データは正しくない可能性があると判断される。リーダ１０Ａの出力データは、端末２に送信されない。追従判定部３４は、フォロワたちに新しいリーダを選出するように要請すると共に、自ノードであるリーダ１０ＡをＦＴシステム１から切り離す（Ｓ６０５）。
【０１４７】
以上の処理では、各フォロワは、出力情報７０をリーダ１０Ａに送信する必要がないので、計算機ノード間の通信トラフィックを軽減することができる。
【０１４８】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【０１４９】
本実施形態は、例えば以下のように表現できる。
複数の計算機ノードから構成される計算機システムであって、
前記複数の計算機ノードのうち１台の計算機ノードが第１の計算機ノードとなり、
前記第１の計算機ノードは、
所定の要求を実行して出力データを生成する実行部と、
前記出力データが正しいか否かを他の計算機ノードに問い合わせ、所定の数の他の計算機ノードから正しい旨の回答を得たとき、前記出力データは正しいと判断する出力判定部と、
を備える計算機システム。
【０１５０】
また、本実施形態は、例えば以下のようにも表現できる。
複数の計算機ノードから構成される計算機システムであって、
前記複数の計算機ノードのうち１台の計算機ノードが第１の計算機ノードとなり、
前記複数の計算機ノードのうち前記第１の計算機ノード以外の他の計算機ノードが第２の計算機ノードとなり、
前記第１の計算機ノードと、前記第２の計算機ノードはそれぞれ、
所定の処理を実行して出力データを生成する実行部と、
出力が正しいか否かを判定する出力判定部と、
を備え、
前記第１の計算機ノードは、
自ノードの前記実行部において、所定の処理を実行して第１の出力データを生成し、
自ノードの出力判定部において、前記第１の出力データが正しいか否かを、前記第２の計算機ノードに問い合わせ、所定の数の前記第２の計算機ノードから正しい旨の回答を得たとき、前記第１の出力データは正しいと判断し、
前記第２の計算機ノードは、
自ノードの前記実行部において、前記第１の計算機ノードで実行された所定の処理と同じ処理を実行して第２の出力データを生成し、
自ノードの出力判定部において、前記第１の計算機ノードからの問い合わせを受け、前記第１の出力データと前記第２の出力データが同様の結果であるか否かを判定し、判定結果が肯定的である場合、前記第１の出力データは正しい旨の回答を前記第１の計算機ノードに伝える
計算機システム。
【符号の説明】
【０１５１】
１：フォールトトレラントシステム、２：端末、１０：計算機ノード、１０Ａ：リーダ、１０Ｂ、１０Ｃ：フォロワ
【図１】
2012127652.tif 000003
【図２】
2012127652.tif 000004
【図３】
2012127652.tif 000005
【図４】
2012127652.tif 000006
【図５】
2012127652.tif 000007
【図６】
2012127652.tif 000008
【図７】
2012127652.tif 000009
【図８】
2012127652.tif 000010
【図９】
2012127652.tif 000011
【図１０】
2012127652.tif 000012
【図１１】
2012127652.tif 000013
【図１２】
2012127652.tif 000014
【図１３】
2012127652.tif 000015
【図１４】
2012127652.tif 000016
【図１５】
2012127652.tif 000017
【図１６】
2012127652.tif 000018
【図１７】
2012127652.tif 000019
【図１８】
2012127652.tif 000020
【図１９】
2012127652.tif 000021
【図２０】
2012127652.tif 000022
【図２１】
2012127652.tif 000023
【国際調査報告】
2012127652.tif 000024
2012127652.tif 000025
2012127652.tif 000026
2012127652.tif 000027