以下、本発明の実施の形態につき図面を参照して説明する。
図1は本発明の一実施形態に係る分散システムの構成を示すブロック図である。図1において、分散システム10は、例えば5台のコンピュータ100-1(#1)〜100-5(#5)から構成されている。コンピュータ100-1〜100-5のうち、t−耐故障アルゴリズムによる多重化を保証するのに必要な台数以上のコンピュータ、例えば4台のコンピュータ100-1〜100-4は稼動状態にあるものとする。この稼動状態にあるコンピュータ100-1〜100-4は多重化を構成する。コンピュータ100-1〜100-5のうち、残りのコンピュータ100-5は待機状態にある。
ここで、分散システム10を構成するコンピュータの数をmで表し、分散システム10において現在多重化されている(稼動状態にある)コンピュータの数をnで表すものとする。nは上記特許文献1と同様に4以上の整数であり、mはnより大きい整数である。つまり、nは、4≦n<mを満たす整数である。この場合、tを3t<nを満たす0より大きい整数とすると、t−耐故障アルゴリズムにより、n台のコンピュータのうちの最大t台の故障が許容される。図1の分散システムの例では、nは4であり、mは5である。nが4の場合、tは1となり、1台のコンピュータの故障が許容される。tが1の場合、t台のコンピュータの故障を許容するのに必要なn、つまりt−耐故障アルゴリズムによる多重化を保証するのに必要なコンピュータの台数の最小値は4である。図1の分散システムの例は、この場合に相当する。
コンピュータ100-1〜100-5は、ネットワークAを介してクライアント装置200と接続されている。コンピュータ100-1〜100-5は、クライアント装置200以外のクライアント装置(図示せず)ともネットワークAを介して接続されているものとする。本実施形態においてネットワークAはパブリックネットワーク(外部ネットワーク)である。コンピュータ100-1〜100-5間は、ネットワークBを介して接続されている。本実施形態においてネットワークBはプライベートネットワーク(内部ネットワーク)である。
稼動状態にあるコンピュータ100-1〜100-4は、前記特許文献1に記載された分散システムにおけるコンピュータと同様に、ネットワークAを介してクライアント装置200から受け取った入力パケット(入力)を他のコンピュータと同じ順序で処理していく。なお、クライアント装置200からの入力パケットは、コンピュータ100-1〜100-4のうちのいずれかのコンピュータに入力される。
コンピュータ100-1〜100-5は、それぞれ同一のアプリケーションプログラム3(図2参照)を有している。コンピュータ100-1〜100-5のうち、多重化を構成するコンピュータ100-1〜100-4は、同一の初期状態から始まる。その後、クライアント装置200から分散システムに入力されるデータは、必ず整列マルチキャストを通して、コンピュータ100-1〜100-4に同一順序で配送される。これにより、コンピュータ100-1〜100-4においてそれぞれのアプリケーションプログラム3が実行される。
コンピュータ100-1〜100-4がそれぞれ有するアプリケーションプログラム3への入力データ列は、整列マルチキャストにより同一順序となっている。このため、前記特許文献1に記載されているような決定性のプログラムの特徴により、コンピュータ100-1〜100-4の状態が同一に保たれ、出力データ列もすべて同じとなる。つまり、プログラムの実行が多重化される。
図2は、図1に示されるコンピュータ100-i(i=1,2,…-5)の構成を示すブロック図である。図2において、クライアント装置200からネットワークAを介してコンピュータ100-iに送信されて、当該コンピュータ100-iの入力受付キュー部(以下、受付キューと称する)1で受け付けられた入力パケットは、当該受付キュー1に受付順に積まれる。受付キュー1に積まれた入力パケットは、整列マルチキャスト部2(内の入力パケット確定判定部26に含まれている合意部262)によってアプリケーションプログラム3または後述するシステム構成管理部6に配送される。なお、受付キュー1に積まれる入力パケットには、クライアント装置200からの入力パケットの他に、システム構成管理部6のシステム構成変更検出部63から送られるシステム構成変更を要求する特定の入力パケット(システム構成変更要求パケット)がある。
アプリケーションプログラム3は、配送された入力パケットを受けて、プログラム状態管理部4に保存されている状態に従って当該入力パケットを処理し、出力パケットを生成する。生成された出力パケットは、出力フィルタ部5で選別されてから、ネットワークAを介してクライアント装置200に返却される(出力)。
次に、コンピュータ100-iの整列マルチキャスト部2の構成について説明する。整列マルチキャスト部2は、前記特許文献1に記載された整列マルチキャスト部と同様に、入力順序番号記憶部21、入力パケットジャーナル記憶部22、整列マルチキャストプロトコルデータ送受信部23、ステップ番号記憶部24、候補パケット記憶部25、入力パケット確定判定部26、最大確定入力順序番号記憶部27、遅延記憶部28およびスキップ判定部29の周知の構成を含んでいる。
入力順序番号記憶部21は、整列マルチキャストによってコンピュータ100-iへ次に配送される入力パケットの順序番号(つまり整列マルチキャストにシリアルに付される最新の順序番号)を格納する。入力パケットジャーナル記憶部22は、整列マルチキャストによってコンピュータ100-iへの配送が確定した入力パケットの列を最近のものから一定の量だけ格納する。
整列マルチキャストプロトコルデータ送受信部23は、システム構成管理部6の後述するシステム構成記憶部61を参照して、他の稼動状態にあるコンピュータの整列マルチキャストプロトコルデータ送受信部23とネットワークBを介してプロトコルデータ(整列マルチキャストプロトコルデータ)を授受する。また、整列マルチキャストプロトコルデータ送受信部23は、後述する候補種類の整列マルチキャストプロトコルデータについては、待機状態にあるコンピュータを含む他のすべてのコンピュータに当該プロトコルデータを送信(つまりブロードキャスト送信)する。
本実施形態では、クライアント装置200とコンピュータ100-iとの間のデータの授受と、コンピュータ100-i相互間のデータの授受とで、使用するネットワークが切り替えられる。これによりネットワーク負荷が軽減される。しかし、クライアント装置200とコンピュータ100-iとの間のデータの授受と、コンピュータ100-i相互間のデータの授受とが、例えばネットワークAを介して行われる構成であっても構わない。またネットワークAが必ずしもパブリックネットワークである必要はない。
ステップ番号記憶部24、候補パケット記憶部25および入力パケット確定判定部26は、整列マルチキャストによってコンピュータ100-iへ次に配送される入力パケットを決定し、またシステム構成を変更するアルゴリズムで用いられる。
ステップ番号記憶部24は、プロトコルのステップを示すステップ番号を格納する。候補パケット記憶部25は、そのステップにおける各コンピュータの「入力候補」となる入力パケットを計n個格納する。
入力パケット確定判定部26は、候補パケット記憶部25の情報から入力パケットの確定の判定および次ステップの「入力候補」の決定を行う。入力パケット確定判定部26はさらに、前記特許文献1に記載された入力パケット確定判定部と異なり、入力パケットをアプリケーションプログラム3およびシステム構成管理部6(内のシステム構成設定部64)のいずれに渡すかを決定する。この決定のために、受付キュー1に積まれる入力パケットには、処理種別を示す情報(処理種別情報)が付加される。入力パケット確定判定部26は、入力候補収集部261および合意部262を含む。
図3は受付キュー1に積まれるデータ(入力パケットデータ)のデータ構造例を示す。図3に示されるように、入力パケットデータは、処理種別および入力パケットの各フィールドを含む。入力パケットフィールドには入力パケットが格納(設定)され、処理種別フィールドには処理種別情報が格納(設定)される。
本実施形態において処理種別情報は、入力パケットフィールドに格納されている入力パケットをアプリケーションプログラム3またはシステム構成管理部6(内のシステム構成設定部64)のいずれに渡すかを入力パケット確定判定部26(内の合意部262)が決定するための処理種別を示す。そのため、処理種別情報の示す処理種別は、(1)アプリケーションと(2)構成とに分けられる。処理種別が「アプリケーション」の場合、入力パケットが外部のクライアント装置2000から入力されたものであることをも示し、処理種別が「構成」の場合、入力パケットが分散システム1000を構成するいずれかのコンピュータのシステム構成管理部6(内のシステム構成変更検出部63)から当該いずれかのコンピュータの受付キュー1に入力されたものであることをも示す。
再び図2を参照すると、最大確定入力順序番号記憶部27は、多重化を構成している(稼動状態にある)他のコンピュータも含め、配送が確定したことがわかっている最大の入力順序番号を格納する。遅延記憶部28は、多重化を構成している他の(n−1)台(n=4)のコンピュータよりも遅延しているかどうかを示す(n−1)個の遅延フラグ(n=4の本実施形態では、3個のフラグ)を格納する。スキップ判定部29は、遅延記憶部28の情報からスキップ動作の必要性を判定およびスキップ動作を実行する。
以降の説明では、入力順序番号記憶部21に格納された入力順序番号を該当入力順序番号と呼び、ステップ番号記憶部24に格納されたステップ番号を該当ステップ番号と呼ぶ。コンピュータ100-iの整列マルチキャスト部2に含まれている候補パケット記憶部25に格納されているn個の「入力候補」のうち、当該コンピュータ100-i自身(自コンピュータ)に対応する「入力候補」を自候補と呼び、当該自候補以外の「入力候補」を他候補と呼ぶ。
次に、整列マルチキャストプロトコルデータ送受信部23によって送受信される整列マルチキャストプロトコルデータについて説明する。
図4は、整列マルチキャストプロトコルデータのレイアウトを示す図である。図4に示されるように、整列マルチキャストプロトコルデータ送受信部23によって送受信される整列マルチキャストプロトコルデータは、種類、送信者、入力順序番号、ステップ番号(整列マルチキャストステップ番号)、最大確定入力順序番号、処理種別および入力パケットの各フィールドを含む。図4に示される整列マルチキャストプロトコルデータが前記特許文献1に記載されているプロトコルデータと相違するのは、前述の処理種別フィールドが追加されている点にある。
整列マルチキャストプロトコルデータは先頭の種類フィールドによって、次の3つに使い分けられる。
(1)候補種類
入力順序番号フィールド、ステップ番号フィールド、入力パケットフィールドには、それぞれ、送信者(送信側コンピュータ)の送信時における該当入力順序番号、該当ステップ番号、自候補が格納される。
(2)確定種類
その入力順序番号(入力順序番号フィールドに格納されている入力順序番号)に対応する入力パケットが、送信者の送信時における入力パケットジャーナル記憶部22にあることを示し、入力パケットフィールドには、その入力パケットが格納される。この場合、ステップ番号フィールドは使用されない。
(3)遅延種類
その入力順序番号に対応する入力パケットが、送信者の送信時における入力パケットジャーナル記憶部22にないことを示す。この場合、ステップ番号フィールドおよび入力パケットフィールドは使用されない。
いずれの種類の整列マルチキャストプロトコルデータにおいても、最大確定入力順序番号フィールドには、送信者(送信側コンピュータ)からの整列マルチキャストプロトコルデータ送信時における該当最大確定入力順序番号が格納される。また、整列マルチキャストプロトコルデータの受信側コンピュータにおける該当最大確定入力順序番号は、当該受信側コンピュータで確定された入力パケットの順序番号と、当該受信側コンピュータで受信された整列マルチキャストプロトコルデータ中の最大確定入力順序番号とのうち、最も大きいものに更新される。
本実施形態では、分散システム10内のコンピュータ100-iは、前記特許文献1に記載されたコンピュータと異なり、多重化を構成するコンピュータを、当該システム10の状況に応じて動的に変更するための新規の構成を含む。即ちコンピュータ100-iは、図2に示されるように、システム構成管理部6をさらに有する。システム構成管理部6は、分散システム10の構成を管理・決定する。この分散システム10の構成の決定は、多重化を構成するコンピュータ間の合意に基づいて行われる。
システム構成管理部6は、システム構成記憶部61、最大確定入力順序番号履歴記憶部62、システム構成変更検出部63、システム構成設定部64、システム構成変更合意プロトコルデータ送受信部65、およびシステム構成通知プロトコルデータ送受信部66から構成される。
システム構成記憶部61は、分散システム10の構成に関するシステム構成情報を格納する。システム構成情報は、分散システム10を構成するコンピュータと当該コンピュータの状態とを示す情報を含む。コンピュータの状態は、当該コンピュータが稼動している稼動状態(つまり多重化を構成している状態)、或いは待機している待機状態(つまり多重化を構成していない状態)のいずれかである。システム構成情報はさらに、分散システム10を構成するコンピュータの優先度を示す情報(優先度情報)を含む。この優先度は、稼動状態にあったコンピュータの停滞の検出に応じてフェイルオーバを実施する際に優先的に使用するコンピュータを決定するのに用いられる。
図5は、システム構成記憶部61のデータ構造例を示す。図5の例では、分散システム10を構成するコンピュータを示す情報として、コンピュータ名が用いられている。本実施形態において、コンピュータ100-1〜100-5のコンピュータ名がコンピュータ#1〜#5であるものとすると、図5に示すシステム構成記憶部61は、分散システム10がコンピュータ100-1〜100-5から構成されていることを示すとともに、コンピュータ100-1〜100-4が稼動状態にあり、コンピュータ100-5が待機状態にあることを示す。つまり図5に示すシステム構成記憶部61は、図1の状態の分散システム10の構成を示している。
図5に示すシステム構成記憶部61はさらに、コンピュータ100-1,100-2,100-3,100-4,100-5の優先度が、それぞれ1,2,3,4,5であることを示す。本実施形態では優先度の値が小さいほど高優先度となるので、図5の例では、コンピュータの優先度はコンピュータ100-1が最も高く、以下コンピュータ100-2,100-3,100-4,100-5の順となる。但し、nが4、mが5である本実施形態では、待機状態にあるコンピュータはコンピュータ100-5のみであることから、フェイルオーバを実施する際には、当該コンピュータ100-5が優先度に無関係に使用される。もし、mが5よりも大きく、待機状態にあるコンピュータがコンピュータ100-5を含めて複数存在するならば、フェイルオーバを実施する際には、この複数の待機状態にあるコンピュータのうち最も優先度が高いコンピュータが使用される。
最大確定入力順序番号履歴記憶部62は、多重化を構成している各コンピュータの、配送が確定したことが分かっている最大の入力順序番号(最大確定入力順序番号)の履歴を格納する。より詳細には、最大確定入力順序番号履歴記憶部62は、自コンピュータの最大確定入力順序番号記憶部27に格納されている最大確定入力順序番号が変更される毎に、その時刻を示すタイムスタンプに加えて、多重化を構成している各コンピュータ(図1の例ではコンピュータ100-1〜100-4)の、配送が確定したことがわかっている最大の入力順序番号を、時系列順に格納するのに用いられる。
図6は最大確定入力順序番号履歴記憶部62のデータ構造例を示す。図6の例では、ある時点以降のコンピュータ100-4(#4)における最大確定入力順序番号が、他のコンピュータ100-1(#1)〜100-3(#3)よりも小さく、遅延していることが示されている。
システム構成変更検出部63は、最大確定入力順序番号履歴記憶部62に格納されている最大確定入力順序番号履歴に基づいて停滞しているコンピュータを検出することにより、システム構成を変更すべきことを検出(決定)する。システム構成変更検出部63はまた、停滞しているコンピュータを検出した場合、当該検出された停滞しているコンピュータを、他の稼動状態にあるすべてのコンピュータに対してシステム構成変更合意プロトコルデータ送受信部65を介して報告する。この報告には、報告種類のシステム構成変更合意プロトコルデータが用いられる。
システム構成変更検出部63はまた、上述の報告に対して、他の稼動状態にあるコンピュータのうちの(n−t−1)台以上(n=4、t=1の本実施形態では2台以上)から、同意する旨がシステム構成変更合意プロトコルデータ送受信部65を介して返された場合、停滞しているコンピュータの検出に関し、自コンピュータを含めて(n−t)台以上で合意がとれたと判断する。
システム構成変更検出部63はまた、他のコンピュータから停滞しているコンピュータが報告された場合、最大確定入力順序番号履歴記憶部62に格納されている最大確定入力順序番号履歴に基づいて、その報告に同意するか或いは非同意とするかを判定する。システム構成変更検出部63は、この判定結果を、停滞しているコンピュータを報告したコンピュータに通知する。この通知には、同意種類または非同意種類のシステム構成変更合意プロトコルデータが用いられる。
システム構成変更検出部63はまた、停滞しているコンピュータの検出に関し、自コンピュータを含めて(n−t)台以上で合意がとれたことにより、停滞しているコンピュータの検出を確認する。システム構成変更検出部63はさらに、停滞しているコンピュータの検出の確認に応じて、確認された停滞しているコンピュータを待機状態とし、待機状態にあるコンピュータを稼動状態とするように分散システムの構成の変更を要求するためのシステム構成変更要求パケットを、入力パケットとして受付キュー1に渡す。
システム構成設定部64は、システム構成変更要求パケットについて合意部262によって合意つまり確定された結果、当該システム構成変更要求パケットが合意部262から渡された場合、当該システム構成変更要求パケットで要求された分散システムの構成の変更を行う。
システム構成変更合意プロトコルデータ送受信部65は、停滞しているコンピュータがシステム構成変更検出部63によって検出された際に、他のコンピュータと合意を形成するためのシステム構成変更合意プロトコルデータの通信を行う。
図7は、システム構成変更合意プロトコルデータ送受信部65によって送受信されるシステム構成変更合意プロトコルデータのレイアウトを示す図である。図7に示されるように、システム構成変更合意プロトコルデータは、種類、送信者、提案者、提案時タイムスタンプ、および停滞確認対象コンピュータ名(停滞している疑いをかけられているコンピュータ名)の各フィールドを含んでいる。停滞確認対象コンピュータ名フィールドは、整列マルチキャストプロトコルデータの入力パケットフィールドに相当する。つまり本実施形態では、停滞確認対象コンピュータ名フィールドの内容は、入力パケットとして扱われる。
システム構成変更合意プロトコルデータは、先頭の種類フィールドによって次の3つに使い分けられる。
(1)報告種類
提案者フィールドで示される提案者(コンピュータ)が、定常的に停滞している他のコンピュータを検出したことを示す。送信者フィールド、および提案時タイムスタンプフィールドには、それぞれ、報告種類を示す種類フィールドを含む(つまり報告種類の)システム構成変更合意プロトコルデータの送信者(送信側コンピュータ)を示すコンピュータ名、および停滞しているコンピュータを検出した際(提案時)のタイムスタンプが格納される。停滞確認対象コンピュータ名フィールドには、停滞の検出に関して確認が必要な(つまり停滞確認の対象となる)コンピュータのコンピュータ名が格納される。送信者フィールドの示す送信者は、提案者フィールドの示す提案者に一致する。
(2)同意種類
報告種類のシステム構成変更合意プロトコルデータを受信したコンピュータが、同等な停滞を検出したことを示す。送信者フィールドには、同意種類を示す種類フィールドを含むシステム構成変更合意プロトコルデータの送信者を示すコンピュータ名が格納される。提案者フィールド、提案時タイムスタンプフィールド、および停滞確認対象コンピュータ名フィールドには、それぞれ報告種類のシステム構成変更合意プロトコルデータの対応するフィールドの内容のコピーが用いられる。
(3)非同意種類
報告種類のシステム構成変更合意プロトコルデータを受信したコンピュータが、同等な停滞を検出していないことを示す。送信者フィールドには、非同意種類を示す種類フィールドを含むシステム構成変更合意プロトコルデータの送信者を示すコンピュータ名が格納される。提案者フィールド、提案時タイムスタンプフィールド、および停滞確認対象コンピュータ名フィールドには、それぞれ報告種類のシステム構成変更合意プロトコルデータの対応するフィールドの内容のコピーが用いられる。
システム構成通知プロトコルデータ送受信部66は、システム構成を変更すべきことがシステム構成変更検出部63によって検出されたタイミングで、待機状態にあったコンピュータを稼動状態にするためのシステム構成通知プロトコルデータを送受信する。システム構成通知プロトコルデータは、システム構成記憶部61に格納されているデータ(システム構成情報)それ自体(つまりシステム構成記憶部61のダンプ情報)を含む。
次に、分散システム10内で稼動状態にあるコンピュータの動作原理について具体的に説明する。
(初期化処理)
まず、コンピュータ100-1〜100-5のシステム構成記憶部61は、分散システム10の初期状態を示す情報を格納する。図5は、このときのシステム構成記憶部61のデータ構造例を示しているものとする。ここでは、コンピュータ100-1〜100-4が稼動状態にあり、コンピュータ100-5が待機状態にある。
コンピュータ100-1〜100-5の入力順序番号記憶部21は、初期状態の入力順序番号、つまり初期入力順序番号(例えば1)を格納する。コンピュータ100-1〜100-5の入力パケットジャーナル記憶部22および候補パケット記憶部25は空の状態にある。
コンピュータ100-1〜100-5のステップ番号記憶部24は初期ステップ番号(例えば1)を記憶し、最大確定入力順序番号記憶部27は初期入力順序番号を格納する。コンピュータ100-1〜100-5の遅延記憶部28の(n−1)個のフラグ(ここでは3個のフラグ)はすべてリセットされており、最大確定入力順序番号履歴記憶部62は現在のタイムスタンプとコンピュータ100-1〜100-4の各々の初期入力順序番号を記憶する。
稼動状態にあるコンピュータ100-j(j=1〜4)の整列マルチキャスト部2が実行する整列マルチキャストによって各コンピュータへ配送される入力パケットを決定する処理は、アルゴリズム1〜9により実現される。
まず、アルゴリズム1〜4について、図8および図9を参照して説明する。図8および図9は、整列マルチキャストの1回の配送を行う基本的な部分の動作手順を示すフローチャートである。図8のフローチャート(第1のフローチャート)のステップA1はアルゴリズム1〜3全体を表し、残りのステップA2〜A13はアルゴリズム4を表す。図9のフローチャート(第2のフローチャート)のステップB1〜B4はアルゴリズム1を、ステップB5〜B8はアルゴリズム2を、そしてステップB9,B10はアルゴリズム3を、それぞれ示す。
(アルゴリズム1)
整列マルチキャスト部2内の入力パケット確定判定部26に含まれる入力候補収集部261は、コンピュータ100-1〜100-4(n=4)がそれぞれ次に処理する候補(入力候補)として選択した入力パケット(入力データ)を収集するための候補一覧作成処理(ステップA1)の一部(ステップB1〜B4)を次のように実行する。
入力候補収集部261は、ステップ番号記憶部24に格納されている該当ステップ番号が初期値であるときは(ステップB1のYES)、受付キュー1に入力パケットが存在するかを判定する(ステップB2)。
もし、入力パケットが存在するならば(ステップB2のYES)、入力候補収集部261はステップ番号記憶部24に格納されている該当ステップ番号を次に進める(ステップB3)。そして入力候補収集部261は、入力パケットを自候補として候補パケット記憶部25に格納し、かつ、この自候補が入力パケットフィールドに設定された候補種類のプロトコルデータ(整列マルチキャストプロトコルデータ)を整列マルチキャストプロトコルデータ送受信部23によりネットワークBを介して待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータ(つまり分散システム10を構成するコンピュータ100-1〜100-5のうち、コンピュータ100-j自身を除くすべてのコンピュータ)にブロードキャスト送信させる(ステップB4)。このステップB4において、入力候補収集部261は、候補パケット記憶部25内のすべての他候補を空にする。
(アルゴリズム2)
一方、該当ステップ番号が初期値でないか(ステップB1のNO)、または受付キュー1に入力パケットがないとき(ステップB2のNO)、入力候補収集部261は、入力順序番号記憶部21に格納されている該当入力順序番号に一致する入力順序番号(が設定された入力順序番号フィールド)を持つ候補種類の整列マルチキャストプロトコルデータが整列マルチキャストプロトコルデータ送受信部23によって受信されているかを判定する(ステップB5)。もし、受信されているならば(ステップB5のYES)、入力候補収集部261は、受信されている整列マルチキャストプロトコルデータ(受信整列マルチキャストプロトコルデータ)内の(ステップ番号フィールドに設定されている)ステップ番号は該当ステップ番号よりも大きいかを判定する(ステップB6)。
もし、受信整列マルチキャストプロトコルデータ内のステップ番号が該当ステップ番号よりも大きいならば(ステップB6のYES)、入力候補収集部261は、ステップ番号記憶部24に格納されている該当ステップ番号を受信整列マルチキャストプロトコルデータ内のステップ番号に更新する(ステップB7)。
次に入力候補収集部261は、受信整列マルチキャストプロトコルデータ内の(入力パケットフィールドに設定されている)入力パケットを自候補として候補パケット記憶部25に格納し、かつ、この自候補(候補パケット)が入力パケットフィールドに設定された(つまり受信整列マルチキャストプロトコルデータ内の入力パケットフィールドのコピーを含む)候補種類の整列マルチキャストプロトコルデータを、整列マルチキャストプロトコルデータ送受信部23によりネットワークBを介して待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータに送信させる(ステップB8)。このステップB8において入力候補収集部261は、受信整列マルチキャストプロトコルデータ内の入力パケット(ここでは自候補とされた候補パケット)を、当該受信整列マルチキャストプロトコルデータの(送信者フィールドの示す)送信者に対応する他候補として、候補パケット記憶部25に格納する。つまりステップB8では、受信整列マルチキャストプロトコルデータ中の入力パケットが、自候補として設定されるとともに、当該受信整列マルチキャストプロトコルデータの送信者に対応する他候補としても設定される。このとき入力候補収集部261は、候補パケット記憶部25内の、受信整列マルチキャストプロトコルデータの送信者に対応する他候補以外の他候補をすべて破棄する(空にする)。
(アルゴリズム3)
これに対し、受信整列マルチキャストプロトコルデータ内のステップ番号と該当ステップ番号とが等しいならば(ステップB6のNO,ステップB9のYES)、入力候補収集部261は、受信整列マルチキャストプロトコルデータ内の入力パケットを、当該受信整列マルチキャストプロトコルデータの送信者に対応する他候補として候補パケット記憶部25に格納する(ステップB10)。
入力候補収集部261は、ステップB6またはステップB10を実行すると、候補パケット記憶部25に格納された候補数が(n−t)個以上(n=4、t=1の例では3個以上)になったかを判定する(ステップB11)。
入力候補収集部261は、候補数が(n−t)個以上になっていないならば(ステップB11のNO)、ステップB1からの処理を再び実行する。これに対し、候補数が(n−t)個以上になっているならば(ステップB11のYES)、入力候補収集部261は候補一覧作成処理を終了する。なお、ステップB5またはステップB9の判定がNOの場合にも、ステップB1からの処理が再び実行される。
(アルゴリズム4)
候補一覧作成処理(図8のステップA1)が終了すると、即ち候補パケット記憶部25に格納された候補(入力候補)数(空でない候補数)が(n−t)個以上になると、入力パケット確定判定部26内の合意部262は第1の入力候補選定制御手段として機能して、当該候補パケット記憶部25に(n−t)個以上の同一の候補が存在するか、つまり(n−t)台以上のコンピュータで合意がとられた候補が存在するかを判定する(ステップA2)。
もし、(n−t)個以上の同一(同一内容)の候補が存在するならば(ステップA2のYES)、合意部262は、その候補を該当入力順序番号における入力パケットとして確定する(ステップA3)。このステップA3において合意部262は、最大確定入力順序番号記憶部27に格納されている該当最大確定入力順序番号を該当入力順序番号に更新する。また、ステップA3において合意部262は、確定された入力パケットが受付キュー1に存在するならば、当該入力パケットを受付キュー1から削除する。
このように、該当入力順序番号における入力パケットが確定すると、つまり該当入力順序番号における入力パケットに関して合意がとられて、整列マルチキャストが確定すると、合意部262はステップA4に進む。このステップA4において合意部262は、候補出力先切り替え手段として機能して、確定された入力パケットに付されている処理種別情報の示す処理種別が「構成」であるか否(「アプリケーション」である)か、つまり確定された入力パケットがシステム構成変更を要求するシステム構成変更要求パケットであるかを判定する。システム構成変更要求パケットの詳細については、後述するアルゴリズム12の処理の中で説明する。
もし、処理種別が「構成」であるならば(ステップA4のYES)、合意部262は確定された入力パケットをシステム構成管理部6内のシステム構成設定部64に渡すとともに、当該入力パケットを入力パケットジャーナル記憶部22に格納する(ステップA5)。
システム構成設定部64は、合意部262から確定された入力パケットを受け取ると、当該パケットがコンピュータ100-j自身(自コンピュータ)を待機状態に変更することを要求するシステム構成変更要求パケットであるかを判定する(ステップA6)。もし、自コンピュータを待機状態に変更することを要求するシステム構成変更要求パケットである場合(ステップA6のYES)、システム構成設定部64は上述の初期化処理を実施して自コンピュータを待機状態にする(ステップA7)。待機状態となったコンピュータのシステム構成管理部6は、稼動状態にあるコンピュータから、待機状態から稼動状態への変更を通知するシステム構成通知プロトコルデータが送られるのを待つ。
これに対し、確定された入力パケットが、他のコンピュータを待機状態に変更することを要求するシステム構成変更要求パケットである場合(ステップA6のNO)、システム構成設定部64は、システム構成記憶部61に格納されているシステム構成情報を、変更後のシステム構成を示すように更新するとともに、その更新後のシステム構成情報を含む(つまり変更後のシステム構成を通知するための)システム構成通知プロトコルデータをシステム構成通知プロトコルデータ送受信部66により、待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータに送信させる(ステップA8)。この場合、合意部262は、次工程へ移行すべく、入力順序番号記憶部21に格納されている該当入力順序番号を次に進め(1インクリメントし)、ステップ番号記憶部24に格納されている該当ステップ番号を初期化する(ステップA9)。このステップA9において合意部262は、候補パケット記憶部25に格納されているすべての候補を破棄し、遅延記憶部28に格納されている(n−1)個の遅延フラグをすべてリセットする。
一方、処理種別が「構成」でないならば(ステップA4のNO)、合意部262は当該入力パケットをアプリケーションプログラム3に配送するとともに、当該入力パケットを入力パケットジャーナル記憶部22に格納する(ステップA10)。ここでは、確定された入力パケットは、現在入力パケットジャーナル記憶部22に格納されている入力パケットの列の後ろに位置するように格納される。なお、入力パケットジャーナル記憶部22に格納されている入力パケットの列が一定の量に達しているならば、先頭の入力パケット(つまり最も古い入力パケット)が破棄される。その後、合意部262は、次工程へ移行すべく、上記ステップA9を実行する。
一方、(n−t)個以上の同一の候補が存在しなかった場合(ステップA2のNO)、合意部262は第2の入力候補選定制御手段として機能して、今度は、候補パケット記憶部25に過半数以上の同一の候補が存在するかを判定する(ステップA11)。もし、過半数以上の同一の候補が存在するならば(ステップA11のYES)、合意部262はその候補を選択して自候補として候補パケット記憶部25に格納し、かつ、この自候補が入力パケットフィールドに設定された候補種類のプロトコルデータ(整列マルチキャストプロトコルデータ)を整列マルチキャストプロトコルデータ送受信部23によりネットワークBを介して待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータに送信させる(ステップA12)。このステップA12において合意部262は、候補パケット記憶部25に格納されているすべての他候補を破棄する。
これに対し、過半数以上の同一の候補が存在しないならば(ステップA11のNO)、合意部262は第3の入力候補選定制御手段として機能して、候補パケット記憶部25に格納されている入力候補の中からランダムに候補(入力パケット)を自候補として選択し、かつ、この自候補が入力パケットフィールドに設定された候補種類のプロトコルデータを整列マルチキャストプロトコルデータ送受信部23によりネットワークBを介して待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータに送信させる(ステップA13)。このステップA13において合意部262は、候補パケット記憶部25に格納されているすべての他候補を破棄する。
ステップA12(第2の入力候補選定制御手段としての動作)またはステップA13(第3の入力候補選定制御手段としての動作)が終了すると、入力候補収集部261による候補一覧作成処理を含むステップA1からの処理が再び実行される。一方、ステップA7またはステップA9が終了すると、整列マルチキャストの1回の配送処理が終了する。
以上の手順で、多重化を構成する各コンピュータ100-j、つまり稼動状態にあるコンピュータ100-1〜100-4は、(n−t)台(ここでは3台)以上のコンピュータでの入力パケットの一致を確認しながら処理を進めていく。
次に、アルゴリズム5〜9について、図10乃至図13を参照して説明する。図10乃至図13は、多重化実行の遅延を解消するための処理の手順を示すフローチャートである。図10のフローチャート(第1のフローチャート)のステップC1,C2はアルゴリズム5を表し、ステップC3はアルゴリズム7を表す。図11のフローチャート(第2のフローチャート)はアルゴリズム6を、図12のフローチャート(第3のフローチャート)はアルゴリズム8を、そして図13のフローチャート(第4のフローチャート)はアルゴリズム9を、それぞれ示す。
(アルゴリズム5)
整列マルチキャスト部2内の合意部262は、該当入力順序番号より小さい入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータが整列マルチキャストプロトコルデータ送受信部23によって受信された場合に、その入力順序番号に対応する入力パケットが入力パケットジャーナル記憶部22に存在するかを判定する(ステップC1)。
もし、(短い多重化実行の遅延のために、)該当入力順序番号より小さい入力順序番号に対応する入力パケットが入力パケットジャーナル記憶部22に存在するならば(ステップC1のYES)、合意部262は、その入力パケットが入力パケットフィールドに設定された確定種類の整列マルチキャストプロトコルデータを整列マルチキャストプロトコルデータ送受信部23によりネットワークBを介して受信整列マルチキャストプロトコルデータの送信者に返送させる(ステップC2)。
(アルゴリズム6)
また、合意部262は、該当入力順序番号に一致する入力順序番号を持つ確定種類の整列マルチキャストプロトコルデータが整列マルチキャストプロトコルデータ送受信部23によって受信された場合には、その受信整列マルチキャストプロトコルデータ内の入力パケットを入力パケットとして確定する(図11のステップD1)。このステップD1において合意部262は、確定された入力パケットが受付キュー1に存在するならば、当該入力パケットを受付キュー1から削除する。またステップD1では、受信整列マルチキャストプロトコルデータ内の最大確定入力順序番号が、最大確定入力順序番号記憶部27に格納されている該当最大確定入力順序番号よりも大きいならば、該当最大確定入力順序番号が受信整列マルチキャストプロトコルデータ内の最大確定入力順序番号に更新される。
ステップD1の後、前述のアルゴリズム4におけるステップA4乃至A9に相当する処理D2乃至D7が次のように実行される。まず合意部262は、確定された入力パケットに付されている処理種別情報の示す処理種別が「構成」であるか否かを判定する(ステップD2)。
もし、処理種別が「構成」であるならば(ステップD2のYES)、合意部262は、確定された入力パケットをシステム構成管理部6内のシステム構成設定部64に渡すとともに、当該入力パケットを入力パケットジャーナル記憶部22に格納する(ステップD3)。
システム構成設定部64は、合意部262から確定された入力パケットを受け取ると、当該パケットが自コンピュータを待機状態に変更することを要求するシステム構成変更要求パケットであるかを判定する(ステップD4)。もし、自コンピュータを待機状態に変更することを要求するシステム構成変更要求パケットである場合(ステップD4のYES)、システム構成設定部64は初期化処理を実施して自コンピュータを待機状態にする(ステップD5)。
これに対し、確定された入力パケットが、他のコンピュータを待機状態に変更することを要求するシステム構成変更要求パケットである場合(ステップD4のNO)、システム構成設定部64は、システム構成記憶部61に格納されているシステム構成情報を、変更後のシステム構成を示すように更新するとともに、その更新後のシステム構成情報を含むシステム構成通知プロトコルデータをシステム構成通知プロトコルデータ送受信部66により、待機状態にあるコンピュータ100-5を含む分散システム10を構成する他のすべてのコンピュータに送信させる(ステップD6)。この場合、合意部262は、次工程へ移行すべく、入力順序番号記憶部21に格納されている該当入力順序番号を次に進め(1インクリメントし)、ステップ番号記憶部24に格納されている該当ステップ番号を初期化する(ステップD7)。このステップD7において合意部262は、候補パケット記憶部25に格納されているすべての候補を破棄し、遅延記憶部28に格納されている(n−1)個の遅延フラグをすべてリセットする。
一方、処理種別が「構成」でないならば、(ステップD2のNO)、合意部262は、当該入力パケットをアプリケーションプログラム3に配送するとともに、当該入力パケットを入力パケットジャーナル記憶部22に格納する(ステップD8)。その後、合意部262は、次工程へ移行すべく、上記ステップD7を実行する。
(アルゴリズム7)
一方、該当入力順序番号より小さい入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータが受信された場合で、(長い多重化実行の遅延のために、)該当入力順序番号より小さい入力順序番号に対応する入力パケットが入力パケットジャーナル記憶部22に存在しないならば(図10のステップC1のNO)、合意部262はステップC3に進む。つまり合意部262は、遅延種類の整列マルチキャストプロトコルデータを整列マルチキャストプロトコルデータ送受信部23によりネットワークBを介して受信整列マルチキャストプロトコルデータの送信者に返送させる(ステップC3)。
(アルゴリズム8)
一方、整列マルチキャスト部2内のスキップ判定部29は、該当入力順序番号に一致する入力順序番号を持つ遅延種類の整列マルチキャストプロトコルデータが整列マルチキャストプロトコルデータ送受信部23によって受信された場合に、遅延記憶部28に格納されている(n−1)個の遅延フラグのうち、当該プロトコルデータの送信者に対応する遅延フラグをセットする(図12のステップE1)。
(アルゴリズム9)
スキップ判定部29は、遅延記憶部28に格納されている(n−1)個の遅延フラグのうちのセットされた遅延フラグの数と、候補パケット記憶部25に格納されている入力候補の数との和が、(n−t)個以上に達したかどうかを監視する(図13のステップF1)。もし、(n−t)個以上に達しているならば(ステップF1のYES)、スキップ判定部29は、候補パケット記憶部25に格納されている入力候補の数が(n−t)個未満かを判定する(ステップF2)。もし、(n−t)個未満であるならば(図13のステップF2のYES)、スキップ判定部29はスキップ動作が必要であると判定する。この場合、スキップ判定部29はスキップ動作を行う(ステップF3)。即ちスキップ判定部29は、入力順序番号記憶部21に格納されている該当入力順序番号を最大確定入力順序番号記憶部27に格納されている該当最大確定入力順序番号に更新し、ステップ番号記憶部24に格納されている該当ステップ番号を初期ステップ番号にする。またスキップ判定部29は、候補パケット記憶部25を空にし、遅延記憶部28のすべての遅延フラグをリセットした上で、システム構成管理部6およびプログラム状態管理部4にスキップを通知する。
システム構成管理部6のシステム構成設定部64は、スキップ判定部29からスキップが通知されると、他のコンピュータのシステム構成記憶部61に格納されているシステム構成情報を自コンピュータのシステム構成記憶部61にコピーする(ステップF4)。システム構成設定部64は、コピーされたシステム構成情報に基づき、自コンピュータを待機状態に変更する必要があるかを判定する(ステップF5)。
もし、自コンピュータを待機状態に変更する必要があるならば(ステップF5のYES)、システム構成設定部64は上述の初期化処理を実施して自コンピュータを待機状態にする(ステップF6)。これに対し、自コンピュータを待機状態に変更する必要がないならば(ステップF5のNO)、システム構成設定部64は何もせずに、処理を終了する。
一方、プログラム状態管理部4は、スキップ判定部29からスキップが通知されると、該当入力順序番号の直前の状態を他のコンピュータのプログラム状態管理部4からコピーする(ステップF7)。このために、プログラム状態管理部4は、各入力順序番号の直前の状態を最近のものから一定の量だけ保持している。
なお、図13のフローチャートでは、システム構成設定部64による処理の後にプログラム状態管理部4による処理(ステップF7)が実行されている。しかし、この処理の順序が逆であっても、或いは両方の処理が並行して実行されても構わない。
次に、システム構成管理部6が実行するシステム構成変更のための処理について説明する。この処理は、アルゴリズム10〜14により実現される。
(アルゴリズム10)
まず、アルゴリズム10について、図14を参照して説明する。図14は、システム構成管理部6のシステム構成変更検出部63によって実行される、停滞しているコンピュータを探すための処理の手順を示すフローチャートである。
システム構成変更検出部63は、一定時間間隔Δt1毎に以下の処理を実行する(ステップG1)。
まずシステム構成変更検出部63は、最大確定入力順序番号履歴記憶部62を参照し、当該記憶部62に格納されている最大確定入力順序番号履歴のうち、直近の時間Δt2(Δt2>Δt1)の間に追加された最大確定入力順序番号の情報を取得する(ステップG2)。この直近の時間Δt2の間に追加された最大確定入力順序番号の情報は、タイムスタンプに基づいて特定される。
次にシステム構成変更検出部63は、稼動状態にある他のコンピュータについて、自コンピュータの最大確定入力順序番号と比べてΔi(Δiは1より大きい整数)以上最大確定入力順序番号が下回る(つまり自コンピュータよりもΔiに相当する時間以上遅延している)という条件を満たす回数が一定回数以上発生しているかを、取得された最大確定入力順序番号の情報に基づいて判定する(ステップG3)。システム構成変更検出部63は、このステップG3の判定を、稼動状態にある他のすべてのコンピュータについて繰り返す(ステップG4)。これによりシステム構成変更検出部63は、上記条件を満たす回数が一定回数以上の稼動状態にあるコンピュータを探す。
もし、このようなコンピュータを探したならば(ステップG3のYES)、システム構成変更検出部63は、当該コンピュータは停滞(定常的に停滞)していると認定する。そこでシステム構成変更検出部63は、例えば、停滞していると認定されたコンピュータを除く、他の稼動状態にあるコンピュータに対して、当該認定されたコンピュータを停滞確認の対象とする報告種類のシステム構成変更合意プロトコルデータを、システム構成変更合意プロトコルデータ送受信部65により送信させる(ステップG5)。
(アルゴリズム11)
次に、アルゴリズム11について、図15を参照して説明する。図15は、システム構成変更検出部63によって実行される、他のコンピュータから報告種類のシステム構成変更合意プロトコルデータを受け取った場合の処理の手順を示すフローチャートである。
今、システム構成変更検出部63が、他のコンピュータのシステム構成変更合意プロトコルデータ送受信部65から送信された報告種類のシステム構成変更合意プロトコルデータを、自コンピュータのシステム構成変更合意プロトコルデータ送受信部65を介して受け取ったものとする。するとシステム構成変更検出部63は、最大確定入力順序番号履歴記憶部62を参照し、当該記憶部62に格納されている最大確定入力順序番号履歴のうち、直近の時間Δt2の間に追加された最大確定入力順序番号の情報を取得する(ステップH1)。
次にシステム構成変更検出部63は、受け取ったシステム構成変更合意プロトコルデータで報告された停滞確認の対象となるコンピュータについて、自コンピュータの最大確定入力順序番号と比べてΔi以上下回るという条件を満たす回数が一定回数以上発生しているかを、取得された最大確定入力順序番号の情報に基づいて判定する(ステップH2)。つまりシステム構成変更検出部63は、報告された停滞確認の対象となるコンピュータが停滞しているかを検出する。
もし、報告された停滞確認の対象となるコンピュータの停滞が検出されたならば(ステップH2のYES)、システム構成変更検出部63は、報告種類のシステム構成変更合意プロトコルデータの送信元のコンピュータに対して、同意種類のシステム構成変更合意プロトコルデータを、システム構成変更合意プロトコルデータ送受信部65により返送させる(ステップH3)。これに対し、コンピュータの停滞が検出されなかったならば(ステップH2のNO)、システム構成変更検出部63は、報告種類のシステム構成変更合意プロトコルデータの送信元のコンピュータに対して、非同意種類のシステム構成変更合意プロトコルデータを、システム構成変更合意プロトコルデータ送受信部65により返送させる(ステップH4)。
(アルゴリズム12)
次に、アルゴリズム12について、図16を参照して説明する。図16は、システム構成変更検出部63によって実行される、報告種類のシステム構成変更合意プロトコルデータに対する応答として、他のコンピュータから同意種類または非同意種類のシステム構成変更合意プロトコルデータを受け取った場合の処理の手順を示すフローチャートである。
今、システム構成変更検出部63が、他のコンピュータのシステム構成変更合意プロトコルデータ送受信部65から返された同意種類または非同意種類のシステム構成変更合意プロトコルデータを、自コンピュータのシステム構成変更合意プロトコルデータ送受信部65を介して受け取ったものとする。するとシステム構成変更検出部63は、受け取った同意種類または非同意種類のシステム構成変更合意プロトコルデータの提案者フィールドおよび提案時タイムスタンプフィールドを参照する(ステップI1)。
次にシステム構成変更検出部63は、今回受け取ったシステム構成変更プロトコルデータを含めて、提案者および提案時タイムスタンプがいずれも報告種類のシステム構成変更合意プロトコルデータと同一の同意種類または非同意種類のシステム構成変更合意プロトコルデータを(n−t−1)個以上受け取ったかを判定する(ステップI2)。
もし、このようなシステム構成変更合意プロトコルデータを(n−t−1)個以上受け取ったならば(ステップI2のYES)、システム構成変更検出部63は、そのうちの(n−t−1)個以上が同意種類のシステム構成変更合意プロトコルデータであるかを判定する(ステップI3)。つまり、ステップI3においてシステム構成変更検出部63は、提案者および提案時タイムスタンプがいずれも報告種類のシステム構成変更合意プロトコルデータと同一の同意種類のシステム構成変更合意プロトコルデータを(n−t−1)個以上受け取ったかを判定する。この判定は、(n−t)台以上の稼動状態にあるコンピュータの間で、停滞が検出されたコンピュータについて合意がとられているかを判定することと等価である。
ステップI3の判定がYESの場合、つまり停滞が検出されたコンピュータについて(n−t)台以上の稼動状態にあるコンピュータの間で合意がとられていると判定された場合、システム構成変更検出部63は、ステップI4に進む。このステップI4において、システム構成変更検出部63はシステム構成記憶部61を参照して、待機状態にあるコンピュータが存在するかを判定する。即ちシステム構成変更検出部63は、停滞が検出されたコンピュータからフェイルオーバ可能なコンピュータが存在するかを判定する(ステップI4)。
ステップI4の判定がYESの場合、システム構成変更検出部63は、システム構成変更要求パケットを生成し、当該システム構成変更要求パケットを入力パケットとして受付キュー1に積む(ステップI5)。このシステム構成変更要求パケット(入力パケット)には、「構成」を示す処理種別情報が付されている。受付キュー1に積まれたシステム構成変更要求パケットは、入力パケットとして前述のアルゴリズム4で処理される。
システム構成変更要求パケットは、システム構成情報を含む。システム構成変更検出部63は、このシステム構成情報を、現在自コンピュータのシステム構成記憶部61に格納されているシステム構成情報のコピーを利用して生成する。即ちシステム構成変更検出部63は、システム構成情報のコピーのうち、停滞が検出されたことの合意がとられたコンピュータの状態を示す情報を待機状態を示すように更新するとともに、当該コンピュータの優先度を他の待機状態にあるコンピュータよりも低くなるように更新し、さらに、最も優先度の高い待機状態にあるコンピュータの状態を示す情報を稼動状態を示すように更新する。この更新されたシステム構成情報のコピーが、システム構成変更要求パケットに用いられる。したがってシステム構成変更要求パケットは、停滞が検出されたことの合意がとられたコンピュータを待機状態とすることを要求するとともに、当該コンピュータの優先度を他の待機状態にあるコンピュータよりも低く設定し、かつ最も優先度の高い待機状態にあるコンピュータを稼動状態とすることを要求する。つまりシステム構成変更要求パケットは、停滞が検出されたことの合意がとられたコンピュータから最も優先度の高い待機状態にあるコンピュータにフェイルオーバすることを要求するパケットである。
一方、ステップI2,I3またはI4の判定がNOの場合、システム構成変更検出部63は処理を終了する。
(アルゴリズム13)
次に、アルゴリズム13について、図17を参照して説明する。図17は、システム構成設定部64によって実行される、整列マルチキャスト部2の合意部262から確定されたシステム構成変更要求パケットを受け取った場合の処理の手順を示すフローチャートである。
システム構成設定部64は、合意部262から確定されたシステム構成変更要求パケットを受け取ると、以下の処理を分散システム10を構成するすべてのコンピュータについて実行する(ステップJ1)。
まずシステム構成設定部64は、合意部262から渡されたシステム構成変更要求パケットに含まれているシステム構成情報(以下、新たなシステム構成情報と称する)を現在システム構成記憶部61に格納されているシステム構成情報(以下、現システム構成情報と称する)と比較する(ステップJ2)。この比較の結果に基づき、システム構成設定部64は、現在対象としているコンピュータについて、待機状態から稼動状態への変更が要求されているかを判定する(ステップJ3)。なお、稼動状態から待機状態への変更が要求されている場合、アルゴリズム4(具体的にはステップA4以降)で処理される。
もし、現在対象としているコンピュータについて、待機状態から稼動状態への変更が要求されているならば(ステップJ3のYES)、システム構成設定部64は、自コンピュータのシステム構成通知プロトコルデータ送受信部66から現在対象としているコンピュータ(つまり待機状態から稼動状態への変更が要求されたコンピュータ)のシステム構成通知プロトコルデータ送受信部66に対して、システム構成通知プロトコルデータにより新たなシステム構成情報を送信させる(ステップJ4)。このシステム構成通知プロトコルデータ(新たなシステム構成情報)の送信により、送信先のコンピュータに対して、待機状態から稼動状態への変更が通知される。
またシステム構成設定部64は、自コンピュータ内の各記憶部に格納されている、稼動状態への変更が要求されたコンピュータに関する情報を初期化する(ステップJ5)。ここでは、遅延記憶部28内の(n−1)個の遅延フラグうちの、稼動状態への変更が要求されたコンピュータに新たに対応付けられる遅延フラグ、および、最大確定入力順序番号履歴記憶部62内の最大確定入力順序番号履歴のうちの、稼動状態への変更が要求されたコンピュータに新たに対応付けられる最大確定入力順序番号履歴が初期化される。また、ステップJ5では、システム構成記憶部61に格納されている現システム構成情報が新たなシステム構成情報に更新される。
(アルゴリズム14)
次に、アルゴリズム14について、図18を参照して説明する。図18は、システム構成設定部64によって実行される、システム構成通知プロトコルデータ送受信部66からシステム構成通知プロトコルデータを受け取った場合の処理の手順を示すフローチャートである。
今、自コンピュータのシステム構成通知プロトコルデータ送受信部66が他のコンピュータのシステム構成通知プロトコルデータ送受信部66から送信されたシステム構成通知プロトコルデータを受信したものとする。システム構成通知プロトコルデータ送受信部66は、自身が受信したシステム構成通知プロトコルデータを自コンピュータ内のシステム構成設定部64に渡す。
システム構成設定部64は、システム構成通知プロトコルデータ送受信部66からシステム構成通知プロトコルデータを受け取ると、自コンピュータが待機状態にあるかを判定する(ステップK1)。もし、自コンピュータが待機状態にあるならば、つまり自コンピュータが本実施形態のように待機状態にあるコンピュータ100-5であるならば(ステップK1のYES)、システム構成設定部64は受け取ったシステム構成通知プロトコルデータが、自コンピュータを稼動状態に変更することを示すシステム構成情報を含んでいるかを判定する(ステップK2)
もし、システム構成通知プロトコルデータが自コンピュータを稼動状態に変更することを示しているならば(ステップK2のYES)、システム構成設定部64(つまりコンピュータ100-5のシステム構成設定部64)は、システム構成記憶部61に格納されているシステム構成情報を、当該プロトコルデータに含まれているシステム構成情報に更新して、自コンピュータを稼動状態に設定する(ステップK3)。このときコンピュータ100-5は、後述するように稼動状態にあるコンピュータ100-jに同期化しているため、スキップ処理を行うことなく直ちに稼動状態に設定することができる。
一方、ステップK1またはK2の判定がNOの場合、システム構成設定部64は処理を終了する。例えば、システム構成変更要求パケットによって稼動状態から待機状態に変更することが要求されているコンピュータのシステム構成変更検出部63では、ステップK1の判定がNOとなる。この場合、システム構成変更検出部63は、システム構成記憶部61に格納されているシステム構成情報を新たなシステム構成情報に更新することなく処理を終了する。このようにしても、待機状態に変更することが要求されているコンピュータは、他の稼動状態にあるコンピュータから無視されるため何ら問題とならない。なお、稼動状態から待機状態に変更することが要求されているコンピュータにおいてシステム構成情報の更新が行われても構わない。
なお、以上に述べたアルゴリズム1〜14の順序は、必ずしもこの順序で実行されるというものではない。つまり、これらは、その動作条件が成立すれば独立して実行されるものである。
本実施形態では、待機状態にあるコンピュータ100-5も、稼動状態にあるコンピュータ100-j(j=1〜4)からブロードキャスト送信された候補種類の整列マルチキャストプロトコルデータを受信して、当該プロトコルトデータに基づいてt−耐故障アルゴリズムにより独自に入力データの合意を確定する。また待機状態にあるコンピュータ100-5は、この合意の確定のために、稼働状態にあるコンピュータ100-jと同様の処理を実行する。但し、待機状態にあるコンピュータ100-5は、稼働状態にあるコンピュータ100-jと異なり、他のコンピュータに対しては受信されたプロトコルデータに対する返信のみを行い、自身で候補種類の整列マルチキャストプロトコルデータを作成したり、他のコンピュータに候補種類の整列マルチキャストプロトコルデータを送信したりすることはしない。
以下、待機状態にあるコンピュータ100-5の動作について、図19のフローチャートを参照して説明する。図19のフローチャート並びに後述する図20および図21のフローチャートでは、表記の簡略化のために、候補種類、確定種類および遅延種類の整列マルチキャストプロトコルデータ(または、その入力パケットフィールドに設定される入力パケット)が、それぞれ、候補パケット、確定パケットおよび遅延パケットとして表されている。同様に、図20のフローチャートでは、稼動状態にあるコンピュータおよび待機状態にあるコンピュータが、それぞれ、稼動系コンピュータおよび待機系コンピュータとして表されている。
今、コンピュータ100-5内の整列マルチキャストプロトコルデータ送受信部23が、稼動状態にあるコンピュータ100-j内の整列マルチキャストプロトコルデータ送受信部23から送信された整列マルチキャストプロトコルデータを受信したものとする(ステップL1)。コンピュータ100-5内の合意部262は、整列マルチキャストプロトコルデータ送受信部23によって受信された稼動状態にあるコンピュータ100-jからの整列マルチキャストプロトコルデータが、入力順序番号記憶部21に格納されている該当入力順序番号に一致する入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータである場合(ステップL2〜L4)、当該プロトコルデータの入力パケットフィールドに設定されている入力パケット(候補パケット)を確定できるかを判定するためのt−耐故障アルゴリズムによる合意判定処理を行う(ステップL5,L6)。これらのステップL2〜L6の処理は、図8のステップA1,A2の処理に相当する。更に詳細に述べるならば、ステップL2〜L6の処理は、図9に示される候補一覧作成処理において受付キュー1に入力パケットが存在しない場合に実行されるステップB5〜B11、および図8のステップA2の処理に相当する。
もし、確定可能であるならば(ステップL6のYES)、つまり受信された入力パケットを含め、候補パケット記憶部25に(n−t)個以上の同一の候補が存在するならば、合意部262は、その候補を該当入力順序番号における入力パケットとして確定する(ステップL7)。このステップL7において合意部262は、最大確定入力順序番号記憶部27に格納されている該当最大確定入力順序番号を該当入力順序番号に更新する。ステップL7は、図8のステップA3に相当する。
図19のフローチャートは、説明の簡略化のために、確定された入力パケットに付されている処理種別情報の示す処理種別が「アプリケーション」である場合を前提としている。この場合、確定された入力パケットがアプリケーションプログラム3に渡される(ステップL8)。このステップL8において、アプリケーションプログラム3は、プログラム状態管理部4に保存されている状態に従って確定された入力パケットを処理し、出力パケットを生成する。ステップL8では、確定された入力パケットが入力パケットジャーナル記憶部22に格納され、入力順序番号記憶部21に格納されている該当入力順序番号が1インクリメントされ、ステップ番号記憶部24に格納されている該当ステップ番号が初期化される。ステップL8ではまた、候補パケット記憶部25に格納されているすべての候補が破棄され、遅延記憶部28に格納されている(n−1)個の遅延フラグがすべてリセットされる。ステップL8は、図8のステップA10,A9に相当する。
このように本実施形態においては、待機状態にあるコンピュータ100-5においても、稼動状態にあるコンピュータ100-jと同様に、各コンピュータ100-jが次に処理する候補として選択した入力パケット(つまり候補種類の整列マルチキャストプロトコルデータの入力パケットフィールドに設定された入力パケット)を収集して、当該収集された入力データに基づきt−耐故障アルゴリズムにより入力データの合意判定を行うようにしている。そしてコンピュータ100-5は、入力パケットの合意がとれた場合、つまり入力パケットを確定できた場合、その時点において多重化を構成している(n−t)台以上の稼動状態にあるコンピュータ100-jと同様の処理を行うことで、当該コンピュータ100-jに同期化することができる。
さて、待機状態にあるコンピュータ100-5では、アプリケーションプログラム3の実行によって生成された出力パケット(アプリケーションプログラム3の処理結果)の出力は、クライアント装置200に返却されないように、出力フィルタ部5で抑止される(ステップL9)。
なお、処理種別が「構成」である場合、待機状態にあるコンピュータ100-5においても図8のステップA5,A8,A9に相当する処理が行われる。但し、稼動状態にあるコンピュータ100-jと異なり、ステップA8で行われていたシステム構成通知プロトコルデータの送信は行われない。
一方、確定可能でないならば(ステップL6のNO)、合意部262は、再び整列マルチキャストプロトコルデータが受信されるまで待つ。やがて、該当入力順序番号に一致する入力順序番号の入力パケットを含む候補種類の整列マルチキャストプロトコルデータが受信されたなら(ステップL1〜L4)、合意部262は、再度合意判定処理を行う(ステップL5,L6)。以上の処理は、入力パケットが確定されるまで繰り返される。
次に、該当入力順序番号よりも大きい入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータが受信された場合(ステップL2のNO)、合意部262は、既に稼動状態にあるコンピュータ100-j間で該当入力順序番号の入力パケットの合意が確定されていると判断する。つまり合意部262は、パケットロスやデータ破壊などの要因により入力パケットの合意をとることができなかった場合、受信した候補種類の整列マルチキャストプロトコルデータに含まれている入力順序番号から、合意確定の抜けを検出する。この場合、合意部262は、該当入力順序番号に対応した入力パケットが入力パケットフィールドに設定された候補種類の整列マルチキャストプロトコルデータを、整列マルチキャストプロトコルデータ送受信部23により受信整列マルチキャストプロトコルデータの送信者(ここでは、稼動状態にあるコンピュータ100-j)に返送させる(ステップL10)。
稼動状態にあるコンピュータ100-jは、ステップL10で待機状態にあるコンピュータ100-5から返送された候補種類の整列マルチキャストプロトコルデータを受信すると、アルゴリズム5に従い、確定種類の整列マルチキャストプロトコルデータを待機状態にあるコンピュータ100-5に返す(図10のC1,C2)。これにより待機状態にあるコンピュータ100-5(内の合意部262)は、以下に述べるように確定済みの入力パケットを稼動状態にあるコンピュータ100-jから取得することができる。
即ち待機状態にあるコンピュータ100-5内の合意部262は、受信整列マルチキャストプロトコルデータに含まれている入力パケットの入力順序番号が該当入力順序番号に一致しているが(図19のステップL3のYES)、当該プロトコルデータが確定種類の場合(ステップL4のNO、ステップL11のYES)、当該プロトコルデータに含まれている入力パケットで入力パケットを確定する(ステップL7)。待機状態にあるコンピュータ100-5は、この確定済みの入力パケットにより合意確定の抜けをなくし、処理の順序性を保障することができる。
確定された入力パケットの処理種別が「アプリケーション」の場合、当該確定された入力パケットはアプリケーションプログラム3に渡されて、当該アプリケーションプログラム3により処理される(ステップL8)。待機状態にあるコンピュータ100-5におけるアプリケーションプログラム3の処理結果の出力は、出力フィルタ部5で抑止されて(ステップL9)、クライアント装置200に返却されない。なお、処理種別が「構成」である場合、図8のステップA5,A8,A9に相当する処理が行われる。但し、ステップA8では、システム構成記憶部61に格納されているシステム構成情報の更新は行われるものの、システム構成通知プロトコルデータの送信は行われない。
これに対し、該当入力順序番号に一致する入力順序番号を持つ受信整列マルチキャストプロトコルデータが確定種類ではなくて(ステップL11のNO)、遅延種類の場合(ステップL12のYES)、スキップ判定部29により、スキップ動作が必要であるかの判定が行われる(ステップL13)。そして、スキップ動作が必要である場合、スキップ動作が行われる(ステップL14)。ステップL13は、図12のステップE1および図13のステップF1,F2の処理に相当し、ステップL14は、図13のステップF3に相当する。
このように本実施形態においては、稼動状態にあるコンピュータ100-j(j=1〜4)は、分散システム10を構成する他のすべてのコンピュータに候補種類の整列マルチキャストプロトコルデータをブロードキャスト送信する。即ち稼動状態にあるコンピュータ100-jは、他の稼動状態にあるコンピュータだけでなく、待機状態にあるコンピュータ100-5にも候補種類の整列マルチキャストプロトコルデータを送信する。
一方、待機状態にあるコンピュータ100-5は、稼動状態にあるコンピュータ100-jとは異なり、他のコンピュータとの間で相互に候補種類の整列マルチキャストプロトコルデータを授受して入力パケットの合意を判定することには参加していない。しかしコンピュータ100-5は、稼動状態にあるコンピュータ100-jから候補種類の整列マルチキャストプロトコルデータを受け取ると、当該受け取ったプロトコルデータに基づき、独自に合意を判定する。つまりコンピュータ100-5は、自身で候補種類の整列マルチキャストプロトコルデータを作成したり、他のコンピュータに候補種類の整列マルチキャストプロトコルデータを送信したりすることはしないものの、他の稼動状態にあるコンピュータ100-jから受け取った候補種類の整列マルチキャストプロトコルデータに基づき、独自に合意を判定し、合意がとられた入力パケットのアプリケーションプログラム3による処理を含めて、コンピュータ100-jと同様の処理を実行する。
これによりコンピュータ100-5は、待機状態にありながら、自コンピュータ内の各記憶部、例えば入力順序番号記憶部21、入力パケットジャーナル記憶部22、候補パケット記憶部25および最大確定入力順序番号記憶部27をリアルタイムに更新することができる。この結果、コンピュータ100-5は、最大確定入力順序番号履歴記憶部62の状態を除いて、稼動状態にあるコンピュータ100-jに同期化される。このため、停滞しているコンピュータからコンピュータ100-5へのフェイルオーバ時に、最大確定入力順序番号履歴記憶部62を除き、当該コンピュータ100-5での同期化処理が不要になり、直ちにフェイルオーバすることが可能になる。一方、稼動状態にあるコンピュータ100-jは、待機状態にあるコンピュータ100-5を意識する必要がないため、候補種類の整列マルチキャストデータのブロードキャスト送信処理以外の余計な処理の負荷がなくなる。これに対し、待機状態にあるコンピュータ100-5も合意に参加させるならば、合意に参加するコンピュータの数が増えることにより、合意判定のための処理などの負荷が増える。
本実施形態において、システム構成管理部6内のシステム構成変更検出部63は、最大確定入力順序番号履歴記憶部62に格納されている情報のうち、直近の一定時間(Δt2)における各コンピュータの整列マルチキャスト部2の処理状況を反映した情報に基づき、自コンピュータよりも最大確定入力順序番号がΔi(Δiは1より大きい整数)以上下回ったコンピュータ(さらに詳細には、Δi以上下回った回数が一定回数以上となるコンピュータ)を、停滞しているコンピュータとして検出している(アルゴリズム10)。Δiを1より大きい整数としている理由は、t−耐故障アルゴリズムを適用した分散システムでは、当該アルゴリズムが(n−t)台のコンピュータの合意があれば次の処理を実行できることによる。つまり、t−耐故障アルゴリズムを適用すると、原理的に、分散システム内のあるコンピュータにとって、t台のコンピュータは入力順序番号が1遅れている状態に見えてしまうためである。よって、Δiを1より大きい整数とすることにより、停滞しているコンピュータの誤検出を防ぐことができる。
[変形例]
次に、上記実施形態の変形例について説明する。この変形例の特徴は、稼動状態にあるコンピュータ100-j(j=1〜4)による整列マルチキャストプロトコルデータの送信にある。即ち、上記実施形態では、コンピュータ100-jは、候補種類の整列マルチキャストプロトコルデータを、待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータにブロードキャスト送信する。これに対して上記実施形態の変形例では、コンピュータ100-jは、候補種類の整列マルチキャストプロトコルデータのブロードキャスト送信を行わず、合意部262による入力パケットの確定時に、確定種類の整列マルチキャストプロトコルデータを待機状態にあるコンピュータ100-5に送信する。待機状態にあるコンピュータ100-5は、この確定種類の整列マルチキャストプロトコルデータを受信することにより、稼動状態にあるコンピュータ100-jと同様の処理を実行して、当該コンピュータ100-jに同期化する。
以下、上記実施形態の変形例における稼動状態にあるコンピュータ100-jの動作について、図20のフローチャートを参照して説明する。
稼動状態にあるコンピュータ100-jでは、クライアント装置200から送られた入力パケットが受付キュー1で受け付けられると(ステップM1)、入力候補収集部261が、図8のステップA1に相当する候補一覧作成処理によって、入力パケットが自候補として入力パケットフィールドに設定された候補種類の整列マルチキャストプロトコルデータを作成する(ステップM2)。入力候補収集部261は、作成された候補種類の整列マルチキャストプロトコルデータを、整列マルチキャストプロトコルデータ送受信部23により、稼動状態にある他のすべてのコンピュータに送信させる(ステップM3)。このステップM3は、上記実施形態における図9のステップB4に相当する。但し、ステップB4では、作成された候補種類の整列マルチキャストプロトコルデータは、待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータにブロードキャスト送信されており、この点でステップM3はステップB4(上記実施形態)と相違する。
その後、コンピュータ100-j内の整列マルチキャストプロトコルデータ送受信部23が、他の稼動状態にあるコンピュータから送信された整列マルチキャストプロトコルデータを受信したものとする(ステップM4)。コンピュータ100-j内の合意部262は、整列マルチキャストプロトコルデータ送受信部23によって受信された、他の稼動状態にあるコンピュータからの整列マルチキャストプロトコルデータが、入力順序番号記憶部21に格納されている該当入力順序番号に一致する入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータである場合(ステップM5〜M7)、当該プロトコルデータの入力パケットフィールドに設定されている入力パケット(候補パケット)を確定できるかを判定するためのt−耐故障アルゴリズムによる合意判定処理を行う(ステップM8,M9)。これらのステップM5〜M9の処理は、図9のステップB5〜B11および図8のステップA2の処理に相当する。
もし、確定可能であるならば(ステップM9のYES)、合意部262は、その候補を該当入力順序番号における入力パケットとして確定する(ステップM10)。このステップM10において合意部262は、最大確定入力順序番号記憶部27に格納されている該当最大確定入力順序番号を該当入力順序番号に更新する。また、ステップM10において合意部262は、確定された入力パケットが受付キュー1に存在するならば、当該入力パケットを受付キュー1から削除する。ステップM10は、図8のステップA3に相当する。
合意部262は入力パケットを確定すると、その入力パケットが入力パケットフィールドに設定された確定種類の整列マルチキャストプロトコルデータを整列マルチキャストプロトコルデータ送受信部23により待機状態にあるコンピュータ100-5に送信させる(ステップM11)。このステップM11は本変形例に特有の処理である。
また合意部262は、確定された入力パケットに付されている処理種別情報の示す処理種別が「アプリケーション」である場合、当該入力パケットをアプリケーションプログラム3に渡す(ステップM12)。このステップM12は、図8のステップA10,A9に相当する。ステップM12において、アプリケーションプログラム3は、合意部262から渡された入力パケットをプログラム状態管理部4に保存されている状態に従って処理して、出力パケットを生成する。生成された出力パケットは、出力フィルタ部5で選別されてから(ステップM13)、クライアント装置200に返却される。なお、処理種別が「構成」である場合、図8のステップA5,A8,A9に相当する処理が行われる。
一方、確定可能でないならば(ステップM9のNO)、合意部262は図20のステップM14に進む。このステップM14において、合意部262は図8のステップA11〜A13に相当する処理により再度候補パケットを決定し直す。そして合意部262は、決定し直された候補パケットが入力パケットフィールドに設定された候補種類の整列マルチキャストプロトコルデータを、整列マルチキャストプロトコルデータ送受信部23により稼動状態にある他のすべてのコンピュータに送信させる(ステップM15)。ステップA12またはA13では、候補種類の整列マルチキャストプロトコルデータは、待機状態にあるコンピュータ100-5を含む他のすべてのコンピュータにブロードキャスト送信されており、この点でステップM15はステップA12またはA13(上記実施形態)と相違する。
合意部262はステップM15を実行すると、再び整列マルチキャストプロトコルデータが受信されるまで待つ。やがて、該当入力順序番号に一致する入力順序番号の入力パケットを含む候補種類の整列マルチキャストプロトコルデータが受信されたなら(ステップM4〜M7)、合意部262は、再度合意判定処理を行う(ステップM8,M9)。以上の処理は、入力パケットが確定されるまで繰り返される。
次に、該当入力順序番号よりも小さい入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータが受信された場合(ステップM5のYES)、合意部262は、その入力順序番号に対応する入力パケットが入力パケットジャーナル記憶部22に存在するかを判定する(ステップM16)。もし、入力順序番号に対応する入力パケットが存在するならば(ステップM16のYES)、合意部262は、その入力パケットが入力パケットフィールドに設定された確定種類の整列マルチキャストプロトコルデータを整列マルチキャストプロトコルデータ送受信部23により受信整列マルチキャストプロトコルデータの送信者に返送させる(ステップM17)。これに対し、入力順序番号に対応する入力パケットが存在しないならば(ステップM16のNO)、合意部262は、遅延種類の整列マルチキャストプロトコルデータを整列マルチキャストプロトコルデータ送受信部23により受信整列マルチキャストプロトコルデータの送信者に返送させる(ステップM18)。これらのステップM16〜M18は、図10のステップC1〜C3に相当する。
次に、受信整列マルチキャストプロトコルデータに含まれている入力パケットの入力順序番号が該当入力順序番号に一致しているが(ステップM6のYES)、当該プロトコルデータが確定種類の場合(ステップM7のNO、ステップM19のYES)、合意部262は、当該プロトコルデータに含まれている入力パケットで入力パケットを確定する(ステップM10)。すると、確定された入力パケットが入力パケットフィールドに設定された確定種類の整列マルチキャストプロトコルデータが待機状態にあるコンピュータ100-5に送信される(ステップM11)。また、確定された入力パケットの処理種別が「アプリケーション」の場合、当該確定された入力パケットはアプリケーションプログラム3に渡されて、当該アプリケーションプログラム3により処理される(ステップM12)。
これに対し、該当入力順序番号に一致する入力順序番号を持つ受信整列マルチキャストプロトコルデータが確定種類ではなくて(ステップM19のNO)、遅延種類の場合(ステップM20のYES)、スキップ判定部29により、スキップ動作が必要であるかの判定が行われる(ステップM21)。そして、スキップ動作が必要である場合、スキップ動作が行われる(ステップM22)。ステップM21は、図12のステップE1および図13のステップF1,F2の処理に相当し、ステップM22は、図13のステップF3に相当する。
次に、上記実施形態の変形例における待機状態にあるコンピュータ100-5の動作について、図21のフローチャートを参照して説明する。
前述したように、稼動状態にあるコンピュータ100-jは、受信された候補種類の整列マルチキャストプロトコルデータの入力パケットフィールドに設定されている入力パケット(候補パケット)についての合意を確定した場合(ステップM10)、その入力パケットが入力パケットフィールドに設定された確定種類の整列マルチキャストプロトコルデータを待機状態にあるコンピュータ100-5に送信する(ステップM11)。
今、待機状態にあるコンピュータ100-5内の整列マルチキャストプロトコルデータ送受信部23が、稼動状態にあるコンピュータ100-jから送信された整列マルチキャストプロトコルデータを受信したものとする(図21のステップN1)。コンピュータ100-5内の合意部262は、受信された整列マルチキャストプロトコルデータが、該当入力順序番号に一致する入力順序番号を持つ確定種類の整列マルチキャストプロトコルデータである場合(ステップN2〜N4)。当該プロトコルデータの入力パケットフィールドに設定されている入力パケットを、該当入力順序番号における入力パケットとして確定する(ステップN5)。このステップN5において合意部262は、最大確定入力順序番号記憶部27に格納されている該当最大確定入力順序番号を該当入力順序番号に更新する。ステップN5は、図19のステップL7と同様に、図8のステップA3に相当する。
確定された入力パケット(確定済み入力パケット)の処理種別が「アプリケーション」の場合、当該確定された入力パケットは、上記実施形態と同様にアプリケーションプログラム3に渡されて、当該アプリケーションプログラム3により処理される(ステップN6)。ステップN6では、確定された入力パケットが入力パケットジャーナル記憶部22に格納され、入力順序番号記憶部21に格納されている該当入力順序番号が1インクリメントされ、ステップ番号記憶部24に格納されている該当ステップ番号が初期化される。ステップN6ではまた、候補パケット記憶部25に格納されているすべての候補が破棄され、遅延記憶部28に格納されている(n−1)個の遅延フラグがすべてリセットされる。このようにして待機状態にあるコンピュータ100-5は、(n−t)台(ここでは3台)以上の稼動状態にあるコンピュータ100-jに同期化される。ステップN6は、図19のステップL8と同様に、図8のステップA10,A9に相当する。
待機状態にあるコンピュータ100-5におけるアプリケーションプログラム3の処理結果の出力は、出力フィルタ部5で抑止されて(ステップN7)、クライアント装置200に返却されない。
なお、処理種別が「構成」である場合、待機状態にあるコンピュータ100-5においても図8のステップA5,A8,A9に相当する処理が行われる。但し、稼動状態にあるコンピュータ100-jと異なり、ステップA8で行われていたシステム構成通知プロトコルデータの送信は行われない。
次に、該当入力順序番号よりも大きい入力順序番号を持つ候補種類の整列マルチキャストプロトコルデータが受信された場合(ステップN2のNO)、合意部262は、既に稼動状態にあるコンピュータ100-j間で該当入力順序番号の入力パケットの合意が確定されていると判断する。この場合、合意部262は、該当入力順序番号に対応した入力パケットが入力パケットフィールドに設定された候補種類の整列マルチキャストプロトコルデータを、整列マルチキャストプロトコルデータ送受信部23により受信整列マルチキャストプロトコルデータの送信者(ここでは、稼動状態にあるコンピュータ100-j)に返送させる(ステップN8)。これにより合意部262(待機状態にあるコンピュータ100-5内の合意部262)は、確定済みの入力パケットを稼動状態にあるコンピュータ100-jから取得することが可能になる。
次に、受信整列マルチキャストプロトコルデータに含まれている入力パケットの入力順序番号が該当入力順序番号に一致しているが(ステップN3のYES)、当該プロトコルデータが遅延種類の場合(ステップN4のNO、ステップN9のYES)、スキップ判定部29により、スキップ動作が必要であるかの判定が行われる(ステップN10)。そして、スキップ動作が必要である場合、スキップ動作が行われる(ステップN11)。ステップN10は、図12のステップE1および図13のステップF1,F2の処理に相当し、ステップN11は、図13のステップF3に相当する。
このように本変形例においては、稼動状態にあるコンピュータ100-jは、入力パケットの確定時に、確定種類の整列マルチキャストプロトコルデータを待機状態にあるコンピュータ100-5に送信する。これにより待機状態にあるコンピュータ100-5は、稼動状態にあるコンピュータ100-jにおける入力パケットの確定時に、確定種類の整列マルチキャストプロトコルデータ(つまり確定済みの入力パケット)を当該コンピュータ100-jから直接受信することができる。よって待機状態にあるコンピュータ100-5では、上記実施形態と異なり、独自の合意処理を行うことなく、稼動状態にあるコンピュータ100-jに同期化することができる。
さて、本変形例においても、稼動状態にあるコンピュータ100-jは、他の稼動状態にあるコンピュータの停滞を検出し、当該停滞しているコンピュータの検出に関して合意がとれた場合、フェイルオーバ先となる待機状態にあるコンピュータを決定して、システム構成通知プロトコルデータによりフェイルオーバ先となるコンピュータを含む他のすべてのコンピュータにフェイルオーバ後のシステム構成を通知する。すると、フェイルオーバ先となるコンピュータを含むすべてのコンピュータで、システム構成記憶部61に格納されているシステム構成情報が更新される。ここで、フェイルオーバ先となるコンピュータがコンピュータ100-5であるものとすると、コンピュータ100-5は待機状態にあるものの、既に稼働状態にあるコンピュータ100-jと同期がとられているため、スキップ処理を行うことなく、直ちに稼動状態に切り替えることができる。つまり、瞬時にフェイルオーバすることが可能になる。
なお、本発明は、上記実施形態またはその変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。例えば、上記実施形態またはその変形例では、稼動状態に設定されるコンピュータの数nが4で、tが1である。しかし、nは4以上の整数であればよく、つまり稼動状態に設定されるコンピュータは4台以上であればよく、tは3t<nを満たす0より大きい整数であればよい。この場合、t−耐故障アルゴリズムにより、n台のコンピュータのうちの最大t台の故障を許容することができる。
特に、{n,t}を、上記条件を満たし、かつ(n−t)の値が最小値となるように設定するならば、n台のコンピュータのうちの最大t台の故障を許容するのに、最も少ない台数のコンピュータで合意をとることができる。ここで、tの条件3t<nを変形すると、tはt<n/3を満たす0より大きい整数であるといえる。このことから、(n−t)の値は、nに対して(n−t)>2n/3のような関係がある。したがって、{n,t}を、上記条件を満たし、かつ(n−t)の値が2n/3を超える最小値となるように設定するならば、つまり{n,t}を、いわゆる過2/3の合意をとるように設定するならば、最も少ない台数のコンピュータで合意をとることができる。(n−t)の値が2n/3を超える最小値となる{n,t}は、{4,1},{7,2},{10,3},{13,4}…である。
また、上記実施形態またはその変形例では、停滞しているコンピュータの検出に関し、(n−t)台以上のコンピュータで合意をとることで、停滞しているコンピュータの検出を確認するようにしている。しかし、精度は低下するものの、停滞しているコンピュータの検出に関し、必ずしも(n−t)台以上のコンピュータで合意をとる必要はない。
また、上記実施形態またはその変形例に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態またはその変形例に示される全構成要素から幾つかの構成要素を削除してもよい。