【文献】
大原 衛 他,「非同期分散TMRシステムの構成法に関する一考察」,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2003年 6月13日,第103巻 第134号,第9頁-第14頁
【文献】
大原 衛 他,「部分再試行による多数決冗長方式」,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2004年 2月13日,第103巻 第668号,第73頁-第78頁
(58)【調査した分野】(Int.Cl.,DB名)
前記再実行回数が前記閾値以上の場合、前記自装置以外の他のサーバ装置の前記処理により得られた処理後の内部データを自装置の前記記憶部にコピーするコピー部、を更に備え、
前記出力部は、前記処理後の内部データが自装置の前記記憶部に記憶された場合、前記第2出力データを出力する、
請求項1に記載の多重化処理システム。
【発明を実施するための形態】
【0010】
以下に添付図面を参照して、多重化処理システム、多重化処理方法及びプログラムの実施形態を詳細に説明する。
【0011】
(第1実施形態)
図1は第1実施形態の多重化処理システム100の構成の例を示す図である。第1実施形態の多重化処理システム100は、サーバ装置10−1、・・・、サーバ装置10−n(nは4以上の整数)、クライアント装置20−1、・・・、クライアント装置20−m(mは1以上の整数)、及び、ネットワーク30を備える。以下、サーバ装置10−1、・・・、及びサーバ装置10−nを区別しない場合は、単にサーバ装置10という。同様に、クライアント装置20−1、・・・、及びクライアント装置20−mを区別しない場合は、単にクライアント装置20という。
【0012】
サーバ装置10及びクライアント装置20は、ネットワーク30を介して接続されている。なお各装置間の通信方式は、有線であっても無線であってもよく、また、両方が組み合わされていてもよい。
【0013】
図2は第1実施形態のサーバ装置10の構成の例を示す図である。第1実施形態のサーバ装置10は、入力部101、入力整列部102、処理部103、記憶部104、復元部105、バッファ106、決定制御部107、再実行制御部110、連携制御部111及び出力部112を備える。また決定制御部107は、出力整列部108及び判定部109を備える。
【0014】
入力部101は、クライアント装置20からネットワーク30を介して、入力データを受信すると、当該入力データを入力整列部102に入力する。
【0015】
入力整列部102は、入力部101から入力データを受け付けると、当該入力データを自装置以外の他のサーバ装置10に送信する。また入力整列部102は、自装置以外の他のサーバ装置10により受信された入力データを、自装置以外の他のサーバ装置10から受信する。入力整列部102は、複数の入力データの順序を、入力整列マルチキャストにより決定する。ここで入力整列マルチキャストについて説明する。
【0016】
図3は第1実施形態の入力整列マルチキャストの例を示す図である。
図3の例は、入力データA及び入力データBが、サーバ装置10−1の入力部101−1から入力整列部102−1に入力され、入力データCが、サーバ装置10−3の入力部101−3から入力整列部102−3に入力され、入力データDが、サーバ装置10−4の入力部101−4から入力整列部102−4に入力された場合を示す。
【0017】
入力整列マルチキャスト処理は、自装置の入力部101に入力された入力データを、自装置以外の他のサーバ装置10に送信するとともに、入力データの処理順序を示す順序番号を決定する処理である。各サーバ装置10の入力整列部102は、入力データと順序番号とを対応付ける。この対応付けは各サーバ装置10で同一となる。
図3の例は、入力データの処理順序が、入力データD、入力データA、入力データC、入力データBの順に決定された場合を示す。入力データの処理順序を決定する処理は、例えば特許文献1に記載の方法を適用できる。
【0018】
図2に戻り、入力整列部102は、入力整列マルチキャストにより決定された入力データを、順番に処理部103に入力する。処理部103は、入力整列部102から入力データを受け付けると、当該入力データを処理することにより得られる第1出力データをバッファ106に入力する(第1出力データ出力処理)。具体的には、処理部103は、決定性出力データ又は非決定性出力データを、第1出力データとしてバッファ106に入力する。
【0019】
決定性出力データは、入力データと、記憶部104に記憶された処理前の内部データと、に基づく処理から一意に決定される出力データである。非決定性出力データは、入力データと、記憶部104に記憶された処理前の内部データと、に基づく処理から一意に決定されないことを抽象的に表す出力データである。非決定性出力データには種類が無く、決定性出力データとは重複しない。
【0020】
ここで非決定性出力データを出力する処理の例について説明する。例えば処理の実行中にリソース不足となり、当該処理を継続できないときに、当該処理をキャンセルするエラー処理は、非決定性出力データを出力する処理に該当する。これはリソース不足(例えばメモリ不足)の発生が、同一装置に隣接して実行されている他のプログラムの状態等の外部要因に依存するためである。
【0021】
具体的には、例えばオペレーティングシステムへのシステムコールによってリソースを確保する場合、決定性が保てない可能性がある。なぜなら、通常のオペレーティングシステムはリソースの確保に関して決定性を有しておらず、他のプログラムの実行状況等に依存して、確保が成功したり失敗したりするからである。つまり、多重化している処理に関して、あるコンピュータではリソース不足が起きるが、他のコンピュータではリソース不足が起きないという可能性がある。または、リソース不足が起きるプログラム実行位置がサーバ装置10の間で異なると、記憶部104の処理後の内部データの一貫性がなくなる可能性もある。
【0022】
この課題に対して従来技術では、データ処理プログラムが、リソースをその都度オペレーティングシステムから直接確保しないようにすることで決定性を確保していた。例えば決定性のあるリソース管理プログラムが、あらかじめ所定の量のリソースをオペレーティングシステムから確保してプールしておき、データ処理プログラムはリソース管理プログラムを介してリソースを取得することにより、決定性を確保していた。
【0023】
なおエラー処理は、通常の処理の流れとは異なるものの、適切に対処されるべき処理であるが、決定性出力データを出力するエラー処理もある。例えば入力データの値が所定の範囲にない場合に、入力データの値が所定の範囲にない旨のメッセージを出力するエラー処理は、入力データにのみ基づいて決定されるので、当該エラー処理は決定性出力データを出力する処理とすることができる。
【0024】
決定性出力データを出力するエラー処理はあくまでも正常な処理であり、全てのコンピュータで一貫して同一のエラー処理が行われる。一方、例えばコンピュータの誤動作(ビザンチン障害)等の障害では、特定のコンピュータだけが誤った出力データを出力する(または全く出力データを出力しない)。
【0025】
第1実施形態の説明では、多重化処理システム100に含まれるサーバ装置10の数nを、n>3bを満たす数とする。ここでbは、ビザンチン障害を許容するサーバ装置10の数である。
【0026】
復元部105は、処理部103が入力データに基づいて記憶部104の内部データを処理する前に、記憶部104の当該内部データを保持する。そして復元部105は、後述の第2出力データが非決定性出力データである場合、後述の判定部109から復元要求を受け付ける。復元部105は復元要求を受け付けると、記憶部104の当該内部データを処理前の状態に復元する。また復元部105は、後述の第2出力データが決定性出力データであり、かつ、第1出力データと後述の第2出力データとが一致しない場合、後述の判定部109から復元要求を受け付ける。復元部105は復元要求を受け付けると、記憶部104の当該内部データを処理前の状態に復元する。
【0027】
バッファ106は、処理部103から受け付けた第1出力データを記憶する。出力整列部108は、自装置のバッファ106に記憶されている第1出力データを、自装置以外の他のサーバ装置10に送信する。また出力整列部108は、自装置以外の他のサーバ装置10から第1出力データを受け付ける。
【0028】
そして出力整列部108は、出力整列マルチキャスト処理を実行する。出力整列マルチキャスト処理について説明する。出力整列マルチキャスト処理は、各順序番号に関して、b+1以上のサーバ装置10のバッファ106で記憶されている同一の第1出力データを選択し、第2出力データに決定する。このとき、選択された第2出力データが各サーバ装置において一致するように出力整列マルチキャスト処理は動作する。
【0029】
ビザンチン障害が発生していない正常なサーバ装置10では、決定性のある動作によって一意に決定された決定性出力データか、非決定性出力データのどちらかしか第1出力データになり得ない。n>3bが動作条件であるから、どちらかは必ずb+1以上あり、第2出力データの候補は必ずあることに注意する。
【0030】
具体的には、動作条件がn>3bであるから、ビザンチン障害となっているサーバ装置10を除いた、正常なサーバ装置10の数は少なくとも2b+1である。すると、第1出力データとして非決定性出力データを出力したサーバ装置10の数をx、第1出力データとして決定性出力データを出力したサーバ装置10の数をyとすると、x+y≧2b+1である。これより、xかyの少なくとも一方はb+1以上である。
【0031】
ここで、xとyの双方がb+1以上である場合には、どちらも選択可能になるが、その選択が各サーバ装置において一致するように出力整列マルチキャスト処理は動作しなければならない。これの具体的な実現方法としては、入力整列マルチキャストの場合と同様に、例えば特許文献1に記載の方法を適用できる。
【0032】
出力整列部108は、第2出力データを、順序番号とともに判定部109に入力する。
【0033】
判定部109は、出力整列部108から第2出力データ及び順序番号を受け付けると、当該順序番号に対応付けられた第1出力データをバッファ106から読み出し、最終確定処理を実行する。
【0034】
<第2出力データが非決定性出力データである場合>
判定部109は、第2出力データが非決定性出力データである場合、記憶部104の内部データを処理前の状態に復元する復元要求を復元部105に入力するとともに、当該第2出力データを出力部112に入力する。出力部112は、判定部109から第2出力データを受け付けると、当該第2出力データを出力する。
【0035】
<第2出力データが決定性出力データであり、かつ、第1出力データと第2出力データとが一致しない場合>
判定部109は、第2出力データが決定性出力データであり、かつ、第1出力データと第2出力データとが一致しない場合、処理部103による処理を再実行する再実行制御要求を再実行制御部に入力する。
【0036】
再実行制御部110は、判定部109から再実行制御要求を受け付けると、復元部105に復元要求を入力し、処理部103に再実行要求を入力する。処理部103は、入力データと、復元部105により復元された処理前の内部データと、に基づく処理を再実行し、自装置の第1出力データを再決定する。再実行制御部110は、第2出力データと再決定された第1出力データとが一致するか、又は、再実行回数が閾値以上になるまで、入力データと処理前の内部データとに基づく処理を、自装置の処理部103に再実行させる。
【0037】
再実行制御部110は、処理部103が処理を再実行することにより、第1出力データと第2出力データとが一致した場合、処理結果が一致したことを示す処理結果一致通知を判定部109に入力する。判定部109は、再実行制御部110から処理結果一致通知を受け付けると、第2出力データを出力部112から出力することを確定する。そして判定部109は第2出力データを出力部112に入力する。出力部112は、判定部109から第2出力データを受け付けると、当該第2出力データを出力する。
【0038】
また再実行制御部110は、再実行回数が閾値以上になった場合、自装置以外の他のサーバ装置10との連携を停止させる連携停止要求を連携制御部111に入力する。連携制御部111は、再実行制御部110から連携停止要求を受け付けると、自装置以外の他のサーバ装置10との連携を停止する。すなわち多重化処理システム100は、当該サーバ装置10で障害が発生しているとみなし、当該サーバ装置10を多重化処理に使用しないようにする。
【0039】
次に第1実施形態の多重化処理方法について説明する。
【0040】
図4は第1実施形態の多重化処理方法の例を示すフローチャートである。はじめに、入力部101が、クライアント装置20からネットワーク30を介して、入力データを受信する(ステップS1)。次に、入力整列部102が、上述の入力整列マルチキャスト処理を実行することにより、複数の入力データの処理順序を決定する(ステップS2)。次に、処理部103が、上述の第1出力データ出力処理を実行することにより、第1出力データを出力する(ステップS3)。次に、出力整列部108が、上述の整列マルチキャスト処理を実行することにより、順序番号が等しい複数の第1出力データに基づいて第2出力データを決定する(ステップS4)。次に、判定部109が、最終確定処理を実行する(ステップS5)。最終確定処理の詳細については、
図5を参照して後述する。次に、出力部112が、ステップS5の最終確定処理により確定された第2出力データを出力する(ステップS6)。
【0041】
次に上述のステップS5の最終確定処理について説明する。
【0042】
図5は第1実施形態の最終確定処理の例を示すフローチャートである。はじめに、判定部109が、第2出力データが非決定性出力データであるか否かを判定する(ステップS11)。
【0043】
第2出力データが非決定性出力データである場合(ステップS11、Yes)、復元部105が、記憶部104の当該内部データを処理前の状態に復元する復元処理を実行する(ステップS12)。次に、判定部109が、第2出力データを出力部112の出力に確定する(ステップS17)。
【0044】
第2出力データが非決定性出力データでない場合(ステップS11、No)、すなわち第2出力データが決定性出力データである場合、判定部109は、更に、第1出力データと第2出力データが一致するか否かを判定する(ステップS13)。
【0045】
第1出力データと第2出力データが一致する場合(ステップS13、Yes)、判定部109は、第2出力データを出力部112の出力に確定する(ステップS17)。
【0046】
第1出力データと第2出力データが一致しない場合(ステップS13、No)、再実行制御部110が、再実行処理を実行する(ステップS14)。具体的には、再実行制御部110は、復元部105に復元要求を入力し、処理部103に再実行要求を入力する。処理部103は、入力データと、復元部105により復元された処理前の内部データと、に基づく処理を再実行することにより、再度、第1出力データを出力する。
【0047】
次に、判定部109が、再実行回数が閾値以上であるか否かを判定する(ステップS15)。再実行回数が閾値以上の場合(ステップS15、Yes)、連携制御部111が、自装置以外の他のサーバ装置10との連携を停止する連携停止処理を実行する(ステップS16)。再実行回数が閾値未満の場合(ステップS15、No)、処理はステップS13に戻り、判定部109が、再度、第1出力データと第2出力データが一致するか否かを判定する。
【0048】
なお、上記説明では一部省略されているが、すべての、入力データ、第1出力データ、第2出力データにはそれぞれ順序番号が付与される。入力データの順序番号は、入力整列マルチキャストによって付与される順序番号である。第1出力データの順序番号は、それを出力した処理の当該入力データの順序番号が付与される。出力整列マルチキャストは、自身で管理する整列マルチキャストの順序番号と等しい順序番号が付与された第1出力データを受け付け、当該決定した第2出力データにその順序番号を付与する。
【0049】
上述の
図4及び
図5で説明したように、各サーバ装置10は、各順序番号のそれぞれに関して、入力整列マルチキャスト処理(ステップS2)、第1出力データ出力処理(ステップS3)、出力整列マルチキャスト処理(ステップS4)、最終確定処理(ステップS5)という一連の処理を行う。このとき、処理部103の処理は一連の順序番号の順序にしたがって実行されなければならない。
【0050】
なお同一の順序番号に関して、処理部103の処理の実行は複数のサーバ装置10間で必ずしも同時でなくてもよい。例えば1台のサーバ装置10の処理部103の処理の実行が遅れ、他のサーバ装置10に比べて古い順序番号の処理を行っていてもよい。そのような場合でも、入力整列マルチキャストおよび出力整列マルチキャストがその動作条件を満たしている限り、多重化処理の一貫性は保たれる。また入力整列マルチキャストおよび出力整列マルチキャストの動作の一環として、暗黙のうちにコンピュータ間の同期がある程度はとられる。その程度は入力整列マルチキャストおよび出力整列マルチキャストの実装に依存して決まる。
【0051】
次に第1実施形態の多重化処理方法による処理例について説明する。
【0052】
図6は第1実施形態の多重化処理方法による処理例1を示す図である。
図6の例は、サーバ装置10の数nが4、ビザンチン障害の発生数bが1(サーバ装置10−4にビザンチン障害が発生)の場合を示す。サーバ装置10−3の入力部101が入力データAを受信すると、サーバ装置10−3の入力整列部102が、当該入力データAをサーバ装置10−1、サーバ装置10−2及びサーバ装置10−4に送信する。なおサーバ装置10−4は、ビザンチン障害が発生しているので動作が不定の状態である。サーバ装置10−1〜サーバ装置10−3の入力整列部102は、入力データAに同一の順序番号を対応付ける。
【0053】
サーバ装置10−1〜サーバ装置10−3の処理部103は、入力データAと、サーバ装置10−1〜サーバ装置10−3のそれぞれの記憶部104に記憶された処理前の内部データと、に基づく処理を行うことにより、第1出力データを出力する。
図6の例は、サーバ装置10−1及びサーバ装置10−2が、非決定性出力データXを、第1出力データXとして出力し、サーバ装置10−3が、決定性出力データDを、第1出力データDとして出力し、ビザンチン障害が発生しているサーバ装置10−4が、不定の出力データ?を、第1出力データ?として出力する場合を示す。それぞれの第1出力データは、各サーバ装置10のバッファ106に記憶される。
【0054】
サーバ装置10−1〜サーバ装置10−3の出力整列部108は、非決定性出力データXを、第2出力データに決定する。これは非決定性出力データXが、サーバ装置10−1及びサーバ装置10−2のバッファ106に記憶されており、b+1=2であるから、出力整列マルチキャストの選択条件を満たすためである。
【0055】
サーバ装置10−1〜サーバ装置10−3の判定部109は、上述の
図5のフローチャートのステップS11、ステップS12及びステップS17にしたがって、第2出力データXを、出力部112の出力に確定する。
【0056】
すなわちサーバ装置10−1〜サーバ装置10−3の出力部112が、非決定性出力データXを、第2出力データXとして出力するので、サーバ装置10−1〜サーバ装置10−3の復元部105が、記憶部104の内部データを処理部103により処理される前に復元する。なおサーバ装置10−4は、ビザンチン障害が発生しているので動作は不定である。
【0057】
結果として、サーバ装置10−1及びサーバ装置10−2が非決定性の動作(例えばオペレーティングシステムへのシステムコールによるリソース確保の失敗等)をし、サーバ装置10−3が決定性の動作(処理の成功)をした場合でも、多重化処理の一貫性が維持される。つまり、サーバ装置10−1〜サーバ装置10−3の記憶部104の内部データは、入力データAを処理しなかった場合と同等の状態に帰着し、そのことを示す非決定性出力データXが、サーバ装置10−1〜サーバ装置10−3から出力される。
【0058】
なお従来技術の多重化処理では、上述の
図6の場合に、サーバ装置10−1及びサーバ装置10−2に障害が発生したとみなされ、多重化処理が継続できなくなっていた。
【0059】
図7は第1実施形態の多重化処理方法による処理例2を示す図である。
図7の例は、サーバ装置10の数nが4、ビザンチン障害の発生数bが1(サーバ装置10−4にビザンチン障害が発生)の場合を示す。サーバ装置10−3の入力部101が入力データAを受信すると、サーバ装置10−3の入力整列部102が、当該入力データAをサーバ装置10−1、サーバ装置10−2及びサーバ装置10−4に送信する。なおサーバ装置10−4は、ビザンチン障害が発生しているので動作が不定の状態であるが、
図7の例では、第1出力データDの出力処理までが正常に行われている場合について説明する。
【0060】
サーバ装置10−1〜サーバ装置10−4の入力整列部102が、入力データAに同一の順序番号を対応付ける。
【0061】
サーバ装置10−1〜サーバ装置10−4の処理部103は、入力データAと、サーバ装置10−1〜サーバ装置10−4のそれぞれの記憶部104に記憶された処理前の内部データと、に基づく処理を行うことにより、第1出力データを出力する。
図7の例は、サーバ装置10−1及びサーバ装置10−2が、非決定性出力データXを、第1出力データXとして出力し、サーバ装置10−3及びサーバ装置10−4が、決定性出力データDを、第1出力データDとして出力する場合を示す。それぞれの第1出力データは、各サーバ装置10のバッファ106に記憶される。
【0062】
サーバ装置10−1〜サーバ装置10−3の出力整列部108は、決定性出力データDを、第2出力データに決定する。これは決定性出力データDが、サーバ装置10−3及びサーバ装置10−4のバッファ106に記憶されており、b+1=2であるから、出力整列マルチキャストの選択条件を満たすためである。なお
図7の例では、非決定性出力データXも出力整列マルチキャストの選択条件b+1=2を満たすが、第1出力データDの出力処理及び送信処理の方が早かったため、出力整列マルチキャストの選択条件b+1=2を先に満たした第1出力データDが選択されている。
【0063】
なおサーバ装置10−4に、ビザンチン障害が発生している前提ではあるが、サーバ装置10−1〜サーバ装置10−3は、サーバ装置10−4にビザンチン障害が発生していることは知る由もない。そのためサーバ装置10−4の処理部103により出力された第1出力データDも、正常なサーバ装置10−1〜サーバ装置10−3により出力された第1出力データと同様に扱われる。
【0064】
サーバ装置10−1及びサーバ装置10−2の判定部109は、上述の
図5のフローチャートのステップS11、ステップS13、ステップS14、ステップS15及びステップS17にしたがって、第2出力データDを、出力部112の出力に確定する。このフローの例は、例えばサーバ装置10−1及びサーバ装置10−2に一時的なリソース不足が発生し、再実行した際にリソース不足が解消された場合を示す。
【0065】
サーバ装置10−3の判定部109は、上述の
図5のフローチャートのステップS11、ステップS13及びステップS17にしたがって、第2出力データDを、出力部112の出力に確定する。
【0066】
サーバ装置10−4の判定部109は、サーバ装置10−4でビザンチン障害が発生しているため、出力部112の出力は不定である。
【0067】
結果として、サーバ装置10−1及びサーバ装置10−2が非決定性の動作(例えばオペレーティングシステムへのシステムコールによるリソース確保の失敗等)をし、サーバ装置10−3及びサーバ装置10−4が決定性の動作(処理の成功)をした場合でも、多重化処理の一貫性が維持される。つまり、サーバ装置10−1〜サーバ装置10−3の記憶部104の内部データは、入力データAを処理した後の状態になる。ここで第2出力データDは決定性がある処理の結果なので、サーバ装置10−1〜サーバ装置10−3の記憶部104の内部データも自然に同一となる。
【0068】
上述の2つの処理例は、本実施形態の多重化処理システム100の動作を説明するために挙げた。しかしながら非決定性出力データの出力は例外的に発生するものなので、
図8を参照して通常の動作について説明する。
【0069】
図8は第1実施形態の多重化処理方法による処理例3を示す図である。
図8の例は、サーバ装置10の数nが4、ビザンチン障害の発生数bが1(サーバ装置10−4にビザンチン障害が発生)の場合を示す。サーバ装置10−3の入力部101が入力データAを受信すると、サーバ装置10−3の入力整列部102が、当該入力データAをサーバ装置10−1、サーバ装置10−2及びサーバ装置10−4に送信する。なおサーバ装置10−4は、ビザンチン障害が発生しているので動作が不定の状態である。
【0070】
サーバ装置10−1〜サーバ装置10−3の入力整列部102が、入力データAに同一の順序番号を対応付ける。
【0071】
サーバ装置10−1〜サーバ装置10−3の処理部103は、入力データAと、サーバ装置10−1〜サーバ装置10−3のそれぞれの記憶部104に記憶された処理前の内部データと、に基づく処理を行うことにより、第1出力データを出力する。
図8の例は、サーバ装置10−1〜サーバ装置10−3が、決定性出力データDを、第1出力データDとして出力する場合を示す。それぞれの第1出力データは、サーバ装置10−1〜サーバ装置10−3のバッファ106に記憶される。
【0072】
サーバ装置10−1〜サーバ装置10−3の出力整列部108は、決定性出力データDを、第2出力データに決定する。これは決定性出力データDが、サーバ装置10−1〜サーバ装置10−3のバッファ106に記憶されており、b+1=2<3であるから、出力整列マルチキャストの選択条件を満たすためである。なおサーバ装置10−4の第1出力データ?は、出力整列マルチキャストの選択条件を満たさない。
【0073】
サーバ装置10−1〜サーバ装置10−3の判定部109は、上述の
図5のフローチャートのステップS11、ステップS13及びステップS17にしたがって、第2出力データDを、出力部112の出力に確定する。
【0074】
結果として、サーバ装置10−1〜サーバ装置10−3で多重化処理の一貫性が維持される。また
図8の例のように、非決定性出力データXが1つも出力されない場合は、本来出力されるべき決定性出力データDが必ず出力される。
【0075】
以上説明したように、第1実施形態の多重化処理システム100では、処理部103が、決定性出力データ、又は、非決定性出力データを、第1出力データとして出力する。また決定制御部107(出力整列部108及び判定部109)が、自装置の処理部103から出力された第1出力データ、または、自装置以外の他のいずれかのサーバ装置10の処理部103から出力された第1出力データのひとつを選択し、第2出力データに決定する。また復元部105が、第2出力データが非決定性出力データである場合、記憶部に記憶された内部データを処理前の状態に復元する。また再実行制御部110が、第2出力データが決定性出力データであり、かつ、第2出力データと自装置から出力された第1出力データとが一致しない場合、第2出力データと自装置から出力された第1出力データとが一致するか、又は、再実行回数が閾値以上になるまで、入力データと処理前の内部データとに基づく処理を、自装置の処理部103に再実行させる。また出力部112が、第2出力データが非決定性出力データである場合、又は、第2出力データが決定性出力データであり、かつ、第2出力データと自装置から出力された第1出力データとが一致した場合、第2出力データを出力する。
【0076】
第1実施形態の多重化処理システム100によれば、例えば処理部103をリソース不足等のエラーの際に必ずしも決定性を持たないプログラムによって実現しても、多重化処理システム100の多重化処理の一貫性を維持することができる。具体的には、決定性のないエラー処理が発生した場合に、処理部103を実現するプログラムが非決定性出力データを出力するようにする。
【0077】
また第1実施形態の多重化処理システム100によれば、ある入力データに対して、全てのサーバ装置10でリソース不足となる場合(例えば入力データが大きすぎて必ずリソース不足となる場合)、全ての正常なサーバ装置10の出力は、非決定性出力データとなり、全ての正常なサーバ装置10の記憶部104の内部データは、処理前の状態に復元される。復元された状態は、リソース不足の状態ではないことに注意する。これにより多重化処理システム100は多重化処理を続行できる。なお従来技術の多重化処理では、この場合は全てのサーバ装置10で障害が発生した場合として扱っていたため、多重化処理が続行できなくなっていた。
【0078】
また第1実施形態の多重化処理システム100によれば、ある入力データに対して、全ての正常なサーバ装置10でリソース不足等の非決定性の動作とならない場合(つまり通常の場合)、本来出力されるべき決定性出力データが出力されるので、多重化処理を続行できる。
【0079】
また第1実施形態の多重化処理システム100によれば、ある入力データに対して、リソース不足等の非決定性の動作となるサーバ装置10と、決定性の動作となるサーバ装置10が混在する場合も、全てのサーバ装置10で多重化処理を続行できる(
図7参照)。
【0080】
第1実施形態の多重化処理システム100は、いずれの場合においても、多重化処理の一貫性が保たれることが特徴である。なお、b台までのコンピュータがビザンチン障害となったとしても、出力整列マルチキャストの選択条件があるため、正常なサーバ装置10の出力は決定性出力データ又は非決定性出力データのどちらかである。
【0081】
なお入力整列マルチキャスト又は出力整列マルチキャストの信頼性を維持するための動作条件として、別の条件が課される場合には、上述のn>3bの動作条件に加えて、その条件も動作条件に加える。ただし、第1実施形態の多重化処理システム100は入力整列マルチキャスト処理及び出力整列マルチキャストの実装の仕方によらずに成立する。
【0082】
(第2実施形態)
次に第2実施形態について説明する。第2実施形態の多重化処理システム100では、例えば、ある入力データの処理において、リソース不足となるサーバ装置10と、リソース不足とならないサーバ装置10が混在する場合に、リソース不足となるサーバ装置10が多重化処理システム100から切り離される可能性があった。具体的には、処理部103による処理の再実行回数が閾値以上の場合、連携制御部111により自装置以外の他のサーバ装置10との連携が停止される。
【0083】
第2実施形態の多重化処理システム100は、第1実施形態の多重化処理システム100の連携制御部111に代えて、コピー部113を備える。第2実施形態の説明では、第1実施形態の説明と同様の説明については省略する。
【0084】
図9は第2実施形態のサーバ装置10の構成の例を示す図である。第2実施形態のサーバ装置10は、入力部101、入力整列部102、処理部103、記憶部104、復元部105、バッファ106、決定制御部107、再実行制御部110、出力部112及びコピー部113を備える。また決定制御部107は、出力整列部108及び判定部109を備える。
【0085】
第2実施形態の多重化処理システム110の動作条件は、サーバ装置10の数をn、信頼性を維持するために許容されるビザンチン障害のサーバ装置10の数をbとするとき、n>5bである。この動作条件は、コピー部113が正常なサーバ装置10の処理後の内部データを特定するために必要となる。
【0086】
出力整列部108による出力整列マルチキャスト処理は、第1実施形態と選択条件が少し異なる。出力整列マルチキャスト処理は、各順序番号に関して、2b+1以上のサーバ装置10のバッファ106で記憶されている同一の第1出力データを選択し、第2出力データに決定する。このとき、選択された第2出力データが各サーバ装置において一致するように出力整列マルチキャスト処理は動作する。
【0087】
具体的には、動作条件がn>5bであるから、ビザンチン障害となっているサーバ装置10を除いた、正常なサーバ装置10の数は少なくとも4b+1である。すると、第1出力データとして非決定性出力データを出力したサーバ装置10の数をx、第1出力データとして決定性出力データを出力したサーバ装置10の数をyとすると、x+y≧4b+1である。これより、xかyの少なくとも一方は2b+1以上である。
【0088】
コピー部113は、処理部103による順序番号Nの入力データの処理の再実行回数が閾値以上の場合、正常なサーバ装置10の処理部103の当該順序番号の入力データの処理により得られた記憶部104の処理後の内部データを、自装置の記憶部104にコピーする。このときコピー部113は、b+1以上のサーバ装置10の記憶部104で記憶されている同一の内部データを、自装置の記憶部104にコピーする。
【0089】
図10は第2実施形態の最終確定処理の例を示すフローチャートである。ステップS26が、第1実施形態の最終確定処理と異なる。ステップS26のコピー処理は、コピー部113により行われる。
【0090】
コピー部113のコピー処理について説明する。ビザンチン障害が発生しているサーバ装置10の存在を前提とする場合、ビザンチン障害が発生しているサーバ装置10をすぐに特定することはできない。コピー部113は、処理部103による順序番号Nの入力データの処理の再実行回数が閾値以上の場合、正常なサーバ装置10の記憶部104から、当該順序番号の入力データに関する処理後の内部データを、自装置の記憶部104にコピーしなければならない。しかしながら、その実現方法は自明ではない。以下にステップS26のコピー処理の例とその正当性を示す。この部分が第2実施形態の特徴である。
【0091】
図11は第2実施形態のコピー処理の例を示すフローチャートである。はじめに、コピー部113は、自装置の処理部103による順序番号Nの入力データの処理の再実行回数が閾値以上の場合、当該順序番号Nの入力データに関する処理後の内部データの送信要求を、全てのサーバ装置10に送信する(ステップS31)。ここで、順序番号Nの入力データに関する処理後の内部データの送信要求を受信したサーバ装置10は、当該サーバ装置10の最終確定処理が終了した後に、当該サーバ装置10の記憶部104に記憶された順序番号Nの入力データに関する処理後の内部データを返信する。
【0092】
次に、コピー部113は、順序番号Nの入力データに関する処理後の内部データの送信要求を受信したサーバ装置10から、順序番号Nの入力データに関する処理後の内部データを受信する(ステップS32)。次に、コピー部113は、ステップS32で受信された複数の受信データ(順序番号Nの入力データに関する処理後の内部データ)を比較する(ステップS33)。
【0093】
次に、コピー部113は、同じ受信データがb+1以上あるか否かを判定する(ステップS34)。同じ受信データがb+1以上ない場合(ステップS34、No)、処理は、ステップS32に戻る。同じ受信データがb+1以上ある場合(ステップS34、Yes)、コピー部113は、当該受信データを自装置の記憶部104にコピーする(ステップS35)。
【0094】
ステップS34及びステップS35の処理の正当性について説明する。b+1以上のサーバ装置10から、同じ内容の受信データが得られたとすれば、そのうち少なくとも1つの受信データは、正常なサーバ装置10から送信されている。正常なサーバ装置10を特定できなくても、この受信データ(順序番号Nの入力データに関する処理後の内部データ)は正しい状態であるといえる。
【0095】
コピー部113は、第2出力データが決定性出力データである場合に動作する。その第2出力データをDとする。すると、出力整列マルチキャストの第2出力データの選択条件より、この第2出力データDは、2b+1以上のサーバ装置10の処理部103の処理により得られた第1出力データDである。
【0096】
ビザンチン障害が発生しているサーバ装置10の数はb以下の前提なので、そのうち正常なサーバ装置10の数は、(2b+1)−bにより少なくともb+1である。したがって第1出力データと第2出力データとが一致している正常なサーバ装置10の数はb+1以上ある。
【0097】
第1出力データと第2出力データとが一致している正常なサーバ装置10の決定制御部107(判定部109)では、直ちに、当該第2出力データを出力部112の出力に確定することができる。したがって正常なサーバ装置10は、順序番号Nの入力データに関する処理後の内部データの送信要求に応答することができる。その結果、要求元のサーバ装置10は、少なくともb+1以上の正常なサーバ装置10から、順序番号Nの入力データに関する同じ内容の処理後の内部データを必ず取得できる。したがって、上述の
図11に示すコピー処理のアルゴリズムは必ず完了する。
【0098】
図12は第2実施形態の多重化処理方法による処理例を示す図である。
図12の例は、サーバ装置10の数nが6、ビザンチン障害の発生数bが1(サーバ装置10−6にビザンチン障害が発生)の場合を示す。サーバ装置10−2の入力部101が入力データAを受信すると、サーバ装置10−2の入力整列部102が、当該入力データAを自装置以外の他のサーバ装置10に送信する。なおサーバ装置10−6は、ビザンチン障害が発生しているので動作が不定の状態であるが、
図12の例では入力データAの処理については正常に動作しているものとして扱う。サーバ装置10−1〜サーバ装置10−6の入力整列部102は、入力データAに同一の順序番号を対応付ける。
【0099】
サーバ装置10−1〜サーバ装置10−6の処理部103は、入力データAと、サーバ装置10−1〜サーバ装置10−6のそれぞれの記憶部104に記憶された処理前の内部データと、に基づく処理を行うことにより、第1出力データを出力する。
図12の例は、サーバ装置10−1〜サーバ装置10−3が、非決定性出力データXを、第1出力データXとして出力し、サーバ装置10−4〜サーバ装置10−6が、決定性出力データDを、第1出力データDとして出力する場合を示す。それぞれの第1出力データは、各サーバ装置10のバッファ106に記憶される。
【0100】
サーバ装置10−1〜サーバ装置10−6の出力整列部108は、決定性出力データDを、第2出力データに決定する。これは決定性出力データDが、サーバ装置10−4〜サーバ装置10−6のバッファ106に記憶されており、2b+1=3であるから、出力整列マルチキャストの選択条件を満たすためである。
【0101】
図12の例は、サーバ装置10−1及びサーバ装置10−2は、再実行回数が閾値以上になる前に、第2出力データDが得られた場合を示す。またサーバ装置10−3は、再実行回数が閾値以上になった場合を示す。すなわちサーバ装置10−3では、コピー部113のコピー処理が動作し、b+1=2以上のサーバ装置10で同じ内容の処理後の内部データが、サーバ装置10−3の記憶部104にコピーされる。
図12の例は、全てのサーバ装置10の出力部112から決定性出力データDが出力される場合を示す。
【0102】
最後に、第1及び第2実施形態のサーバ装置10のハードウェア構成の例について説明する。
図13は、第1及び第2実施形態のサーバ装置10のハードウェア構成の例を示す図である。なおクライアント装置20のハードウェア構成の例もサーバ装置10と同様である。
【0103】
第1及び第2実施形態のサーバ装置10は、制御装置301、主記憶装置302、補助記憶装置303、表示装置304、入力装置305及び通信装置306を備える。制御装置301、主記憶装置302、補助記憶装置303、表示装置304、入力装置305及び通信装置306は、バス310を介して接続されている。
【0104】
制御装置301は補助記憶装置303から主記憶装置302に読み出されたプログラムを実行する。主記憶装置302はROM及びRAM等のメモリである。補助記憶装置303はメモリカード及びSSD(Solid State Drive)等である。
【0105】
表示装置304は情報を表示する。表示装置304は、例えば液晶ディスプレイである。入力装置305は、情報の入力を受け付ける。入力装置305は、例えばキーボード等である。なお表示装置304及び入力装置305は、表示機能と入力機能とを有する液晶タッチパネル等でもよい。通信装置306は他の装置と通信する。
【0106】
サーバ装置10で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、メモリカード、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記憶媒体に記憶されてコンピュータ・プログラム・プロダクトとして提供される。
【0107】
またサーバ装置10で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。またサーバ装置10が実行するプログラムを、ダウンロードさせずにインターネット等のネットワーク経由で提供するように構成してもよい。
【0108】
またサーバ装置10のプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
【0109】
サーバ装置10で実行されるプログラムは、上述の実施形態のサーバ装置10の構成(機能ブロック)のうち、プログラムにより実現可能な機能ブロックを含むモジュール構成となっている。プログラムにより実現可能な機能ブロックは、例えば入力部101、入力整列部102、処理部103、復元部105、バッファ106、決定制御部107(出力整列部108及び判定部109)、再実行制御部110、連携制御部111及び出力部112である。
【0110】
プログラムにより実現される機能ブロックは、制御装置301が補助記憶装置303等の記憶媒体からプログラムを読み出して実行することにより、プログラムにより実現される機能ブロックが主記憶装置302にロードされる。すなわちプログラムにより実現される機能ブロックは、主記憶装置302上に生成される。
【0111】
なお実施形態のサーバ装置10の機能ブロックを、プログラムと、IC(Integrated Circuit)等のハードウェアと、を組み合わせることにより実現してもよい。
【0112】
以上説明したように、第2実施形態の多重化処理システム100では、再実行回数が閾値以上になったサーバ装置10を、多重化処理システム100から切り離すことなく、多重化処理に利用できる。
【0113】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。