近年、コンピュータ技術やネットワーク技術の向上は目覚ましく、これに伴って、業務の電算化が広く行われている。また、その業務の内容によっては、故障などによる中断が許されないものも多く、最近では、複数のコンピュータをネットワークで結合した分散システムを構築することが一般的になりつつある。そして、この分散システムの運用手法の1つに、整列マルチキャストを用いた決定性のプログラムの実行の多重化が存在する。
まず、「整列マルチキャスト」、「決定性のプログラム」および「多重化」について説明する。
・整列マルチキャスト
複数のコンピュータが結合した分散システムのような環境では、各コンピュータが独立して動作する。したがって、これらのコンピュータを同期的に動作させるためには、特別な仕組みが必要である。整列マルチキャストは、分散システムへの入力をすべてのコンピュータに配送する仕組みであり、データの到着順序がすべてのコンピュータで同じであることを保証するものである。
・決定性のプログラム
プログラムの実行は、コンピュータに入力が与えられると、その時のコンピュータの状態によって、出力と次の状態とを決めるものであると考えることができる。そして、決定性(deterministic)のプログラムは、与えられた入力にしたがって、出力と次の状態とが一意的に決まるプログラムとして定義される。具体的には、不定値や乱数の参照等がないプログラムのことをいう。決定性のプログラムの特徴は、初期状態と入力列とが決まれば、その実行が一意的であることである。以下、本明細書でプログラムと称するとき、決定性のプログラムのことをさすものとする。
・多重化
分散システムでは、各コンピュータが独立に故障する可能性がある。仮に、1つのコンピュータが故障しただけでシステム全体が機能しない場合は、分散システムの稼働率は、1台のコンピュータの稼働率よりも低くなってしまう。かかる事態を防止するために、システム全体に係わる処理は多重化することが必要である。逆に、多重化することによって、分散システムの稼働率を1台のコンピュータの稼働率よりも高くすることが可能である。たとえば、稼働率99パーセントのコンピュータ10台で構成する分散システムが、まったく多重化されていないとすると、その分散システムの稼働率は90%程度である。もし、これが多重化によって3台の故障まで耐え得るとすると、稼働率は、99.9998%程度となる。
次に、整列マルチキャストを用いた決定性のプログラムの実行の多重化について説明する。ここでは、複数台のコンピュータによって構成される分散システムであって、多重化を構成するそれぞれのコンピュータが、同一のプログラムを有していると想定する。
まず、すべてのコンピュータは、同一の初期状態からはじまる。その後、入力されるデータは、必ず整列マルチキャストを通して、すべてのコンピュータに同一順序で配送され、それぞれのプログラムが実行される。
各プログラムへの入力列は、この整列マルチキャストにより、同一順序となっているので、決定性のプログラムの特徴により、すべてのコンピュータの状態が同一に保たれ、出力列もすべて同じとなる。つまり、プログラムの実行が多重化される。
ここで、整列マルチキャストの実現方法について、その概要を説明する。
特別なハードウェアによらずに整列マルチキャストを実現するためには、コンピュータ間で適切なアルゴリズムにしたがってメッセージをやり取りすること、つまりプロトコルが用いられる。アルゴリズムを具体的に説明する前に、注意すべき点を列挙する。
すべてのコンピュータが、いつでも故障停止する可能性があることを前提としており、多重化として成立するためには、特定のコンピュータに全体の処理が依存してはならない。したがって、次のことに注意する必要がある。
(1)分散システムへの入力の受け付けを特定のコンピュータに固定しない。
たとえば、特定のコンピュータに入力の受付を固定し、すべての入力をそのコンピュータにいったん転送することによって入力の順序を決定し、その順序で配送するといった単純なアルゴリズムは使えない。このアルゴリズムでは、入力受付を固定したコンピュータが故障停止すると、その時点で入力の順序が決定できなくなってしまう。
(2)入力の配送の完了まちあわせを特定のコンピュータに固定しない。
たとえば、特定のコンピュータが、停止していないすべてのコンピュータに配送を行うようにする、といった単純なアルゴリズムは使えない。このアルゴリズムでは、配送コンピュータが配送の途中で故障停止してしまうと、一部のコンピュータにのみ配送されたまま、配送が完了しなくなってしまう。
以上を踏まえて、前述のアルゴリズムを具体的に説明する。
従来では、故障検出が重要な役割を果たす。典型的には、故障検出はハートビート・タイムアウト・アルゴリズムによって行われる。このアルゴリズムは、各コンピュータが定期的に送出するハートビート(心拍)が一定時間以上確認できない場合に、当該コンピュータの故障を判定するというものである。
また、各コンピュータは、入力受付キューをもつ。第1ステップとして、それぞれのコンピュータは、入力受付キューの先頭にある入力をそのコンピュータにおける「入力候補」として他のすべてのコンピュータに配送する。また、入力受付キューが空のコンピュータでは、他のコンピュータの第1ステップとして最初に得られた「入力候補」を自分の「入力候補」として他のすべてのコンピュータに配送する。
第1ステップの最終的な結果として、各コンピュータは、すべてのコンピュータについて、「入力候補」を得るか、「故障検出」を得るか、または、その双方を得る。ここでは、すべてのコンピュータについての「入力候補」および「故障検出」の一覧を単に「一覧」と呼ぶことにする。
第2ステップとして、それぞれのコンピュータは、自分の「一覧」を他のすべてのコンピュータに配送する。ここで注意すべき点は、これらの「一覧」が、各コンピュータごとに異なっているかも知れないということである。なぜなら、第1ステップの途中で故障停止が発生した場合には、「入力候補」が部分的にしか配送されていないかも知れない。また、第2ステップの開始の時点で、「故障検出」にはずれがあるかも知れないからである。
第2ステップの結果として、各コンピュータは、他のコンピュータから得られた「一覧」が自分の「一覧」と異なっている場合、これらを合併して自分の「一覧」にし、第2ステップを繰り返し実行する。すると、この第2ステップの最終的な結果として、故障していない他のコンピュータがもつ「一覧」がすべて自分の「一覧」と一致する。この時点で、プロトコルは完了する。
なお、整列マルチキャストとして配送される入力は、その「一覧」にある「入力候補」の中から各自が同一の決まったルールで選べばよい(たとえば先頭にあるもの)。そして、最後に、その選んだ入力を入力受付キューから取り除く。
以上の手順により、複数のコンピュータをネットワークで結合した分散システムにおける、整列マルチキャストを用いた決定性のプログラムの実行の多重化が実現される。
以下、図面を参照してこの発明の一実施形態を説明する。
(第1実施形態)
まず、この実施形態に係る分散システムの前提条件を説明する。ここでは、多重化を構成するコンピュータの数をnとし、f台までの故障停止が許容されるものと想定する。つまり、多重化されるプログラムは、少なくとも(n−f)台のコンピュータ上で実行される。また、(f+1)台以上の故障停止が発生した場合には、多重化は継続しないものとする(いわゆるフェイルストップ)。
また、ここでは、このfを3f<nとなる最大の整数とする。たとえばn=4ならば、f=1である。n=10ならばf=3である。この前提は、システムの稼働率に制限を設けるものであるが、たとえば、n=10の場合には、前述の稼働率の計算より、実用上まったく問題ないといえる。
また、多重化されるプログラムの入力および出力は、信頼性のないデータグラム(Unreliable Datagram)であるとする。これは、入出力のパケットについて、欠落、重複および順序の交換を許容するものである。信頼性のないデータグラムの例としては、IP(Internet Protocl)が挙げられる。
なお、この信頼性のないデータグラムの非決定性と多重化されるプログラムの決定性とは矛盾するものではない。プログラムの決定性は、入力が決まれば一意的に次の状態と出力が決まることを示し、プログラムの内部動作に関する決定性を意味している。一方、信頼性のないデータグラムは、あるプログラムの出力が他のプログラムの入力へ渡される途中で、欠落、重複または順序の交換があり得ることを示し、プログラム間の入出力に関する非決定性を意味している。
次に、図1および図2を参照して、この分散システムの構成を説明する。
図1に示すように、この分散システム1000は、n台のコンピュータ100により多重化されており、それぞれのコンピュータ100が、外部ネットワークAを介して複数のクライアント装置2000と接続されている。また、このコンピュータ100間は、内部ネットワークBを介して接続されている。そして、この分散システム1000における各コンピュータ100は、外部ネットワークAを介してクライアント装置2000から受け取った入力パケット(入力)を他のコンピュータ100と同じ順序で処理していく。なお、クライアント装置2000からの入力パケットは、n台のコンピュータ100の中のいずれかのコンピュータに入力される。
また、この処理により生成される出力パケットは、外部ネットワークAを介してクライアント装置2000に返却される(出力)。
図2は、コンピュータ100の構成を示す図である。入力受付キュー部1で受け付けられた入力パケットは、整列マルチキャスト部2によってアプリケーションプログラム3に配送されることになる。配送された入力パケットの入力によって、このアプリケーションプログラム3は、プログラム状態管理部4に保存されている状態にしたがって実行し、出力パケットを生成する。出力パケットは、出力フィルター部5で選別されてから出力される。
次に、整列マルチキャスト部2の各構成要素について説明する。
入力順序番号記憶部21は、整列マルチキャストによってそのコンピュータへ次に配送される入力パケットの順序番号を記憶する。入力パケットジャーナル記憶部22は、整列マルチキャストによってそのコンピュータへ配送が確定した入力パケットの列を最近のものから一定の量だけ記憶する。プロトコルデータ送受信部23は、他のコンピュータのプロトコルデータ送受信部23とプロトコルデータをやり取りする。
また、ステップ番号記憶部24、候補パケット記憶部25および入力パケット確定判定部26は、整列マルチキャストによってそのコンピュータへ次に配送される入力パケットを決定するアルゴリズムで用いられる。ステップ番号記憶部24は、プロトコルのステップ番号を記憶する。候補パケット記憶部25は、そのステップにおける各コンピュータの「入力候補」となる入力パケットを計n個記憶する。入力パケット確定判定部26は、候補パケット記憶部25の情報から入力パケットの確定の判定および次ステップの「入力候補」の決定を行う。
最大確定入力順序番号記憶部27は、他のコンピュータも含め、配送が確定したことがわかっている最大の入力順序番号を記憶する。遅延記憶部28は、(n−1)個のフラグで構成され、他コンピュータより遅延しているかどうかを記憶する。そして、スキップ判定部29は、遅延記憶部28の情報からスキップ動作の必要性を判定、実行する。
以降、該当入力順序番号とは、入力順序番号記憶部21に記憶された入力順序番号のことを指し、該当ステップ番号とは、ステップ番号記憶部24に記憶されたステップ番号のことを指し、該当最大確定入力順序番号とは、最大確定入力順序番号記憶部27に記憶された入力順序番号のことを指し、自候補とは、候補パケット記憶部25における自コンピュータに対応する「入力候補」を指し、他候補とは、候補パケット記憶部25における自候補以外の「入力候補」を指すものとする。
図3は、プロトコルデータ送受信部23によって送受信されるプロトコルデータのレイアウトを示す図である。
図3に示すように、プロトコルデータ送受信部23によって送受信されるプロトコルデータは、種類、送信者、入力順序番号、ステップ番号、最大確定入力順序番号および入力パケットの各フィールドを含んでいる。そして、先頭の種類フィールドによって、このプロトコルデータは、次の3つに使い分けられる。
(1)候補種類:入力順序番号フィールド、ステップ番号フィールド、入力パケットフィールドには、それぞれ、送信者の送信時における該当入力順序番号、該当ステップ番号、自候補が格納される。
(2)確定種類:その入力順序番号に対応する入力パケットが、送信者の送信時における入力パケットジャーナル記憶部26にあることを示し、入力パケットフィールドにはその入力パケットが格納される。この場合、ステップ番号フィールドは使用しない。
(3)遅延種類:その入力順序番号に対応する入力パケットが、送信者の送信時における入力パケットジャーナル記憶部26にないことを示す。この場合、ステップ番号フィールド、入力パケットフィールドは使用しない。
いずれの種類においても、最大確定入力順序番号フィールドには、送信者の送信時における該当最大確定入力順序番号を格納する。また、該当最大確定入力順序番号は、そのコンピュータで確定した入力パケットの順序番号と、受信したプロトコルデータ中の最大確定入力順序番号とのうち、最も大きいものに更新するものとする。
ここで、図4を参照して、整列マルチキャスト部2によって実行される整列マルチキャストの主要部の概要について説明する。
いま、多重化を構成するコンピュータの数、つまりnを4とする。また、前述したように、fは3f<nとなる最大の整数であるから、f=1となる。したがって、この例では、少なくとも(n−f)、つまり3台以上で一貫性を保ちながら処理を実行していくことになる。
第1に、コンピュータ(1),(2)はA、コンピュータ(3)はB、コンピュータ(4)はCをそれぞれ入力候補として選択したとする。また、第2に、コンピュータ(1)は、コンピュータ(2)の入力候補Aとコンピュータ(3)の入力候補Bを収集したとする。つまり、コンピュータ(1)は、自候補および他候補を(n−f)個収集したことになる。この時、コンピュータ(1)は、コンピュータ(4)の入力候補の収集を待たずに、入力候補の判定を試みる。しかしながら、その中に(n−f)個の同一の候補は存在しないことから、コンピュータ(1)は、入力候補の再選択を実行する。再選択は、収集された入力候補数の過半数を占める候補があればその候補を選択し、なければその中からランダムに選択する。ここではAが過半数を占めるので、コンピュータ(1)は、第3に、Aを自候補として再選択する。
この要領で、コンピュータ(2)は、コンピュータ(1)の入力候補Aとコンピュータ(4)の入力候補Cを収集した後、Aを自候補として再選択し、コンピュータ(3)は、コンピュータ(2)の入力候補Aとコンピュータ(4)の入力候補Cを収集した後、Cを自候補として再選択し、コンピュータ(4)は、コンピュータ(1)の入力候補Aとコンピュータ(2)の入力候補Aを収集した後、Aを自候補として再選択したとする。
第4に、コンピュータ(1)は、コンピュータ(2)の入力候補Aとコンピュータ(4)の入力候補Aを収集したとする。つまり、コンピュータ(1)は、再度、自候補および他候補を(n−f)個収集したことになる。この時、コンピュータ(1)は、コンピュータ(3)の入力候補の収集を待たずに、入力候補の判定を試みる。そして、ここでは、(n−f)個のAが存在するため、第5に、コンピュータ(1)は、入力をAに決定する。
一方、コンピュータ(2)は、コンピュータ(1)の入力候補Aとコンピュータ(3)の入力候補Cを収集したとする。しかしながら、(n−f)個の同一の候補は依然として存在しないことから、コンピュータ(2)は、入力候補の再選択を実行し、その中の過半数を占めるAを自候補として選択する。同様に、コンピュータ(3)は、コンピュータ(1)の入力候補Aとコンピュータ(2)の入力候補Aを収集した後、コンピュータ(4)は、コンピュータ(2)の入力候補Aとコンピュータ(3)の入力候補Aを収集した後、それぞれAを自候補として再選択したとする。
第6に、コンピュータ(2)は、コンピュータ(1)の入力候補Aとコンピュータ(3)の入力候補Aを収集したとする。ここでのコンピュータ(1)の入力候補Aは、既に候補ではなく確定済みの入力であるため、第7に、コンピュータ(2)は、入力をAに決定する。
一方、コンピュータ(3)は、コンピュータ(2)の入力候補Aとコンピュータ(4)の入力候補Aを収集し、コンピュータ(4)は、コンピュータ(2)の入力候補Aとコンピュータ(3)の入力候補Aを収集したとする。そして、ここでは、双方とも(n−f)個のAが存在するため、コンピュータ(3),(4)は、入力をAに決定する。
つまり、この分散システムは、従来のように、各コンピュータがハートビートのやり取りによって他のコンピュータとの間で正常稼働を確認し合うようなことを一切行わないことにより、スプリットブレインを原理的に発生させず、タイムアウトによる故障発生時の処理の中断も発生させないようにし、かつ、少なくとも(n−f)台以上のコンピュータによる多重化を保証する。
次に、整列マルチキャスト部2の動作原理について具体的に説明する。
まず、初期状態として、入力順序番号記憶部21は初期入力順序番号(たとえば1)を記憶する。入力パケットジャーナル記憶部22は空の状態であり、ステップ番号記憶部24は初期ステップ番号(たとえば1)を記憶する。また、候補パケット記憶部25も空の状態であり、最大確定入力順序番号記憶部27は初期入力順序番号を記憶し、さらに、遅延記憶部28のすべてのフラグはリセットされている。
そして、この整列マルチキャスト部2が実行する整列マルチキャストによって各コンピュータへ配送される入力パケットを決定するアルゴリズムの概要は次のようになる。
(アルゴリズム1)
該当ステップ番号が初期ステップ番号である場合に、入力受付キュー部1に入力パケットがあれば、該当ステップ番号を次に進め、自候補をその入力パケットにし、他候補を空にし、候補種類のプロトコルデータを他のすべてのコンピュータに送信する。
(アルゴリズム2)
該当入力順序番号に一致する入力順序番号を持つ候補種類のプロトコルデータを受信した場合で、そのプロトコルデータが該当ステップ番号より大きいステップ番号を持つ場合、該当ステップ番号をそのステップ番号にし、自候補および送信者に対応する他候補をプロトコルデータ中の入力パケットにし、それら以外の他候補を空にし、候補種類のプロトコルデータを他のすべてのコンピュータに送信する。
(アルゴリズム3)
該当入力順序番号に一致する入力順序番号を持つ候補種類のプロトコルデータを受信した場合で、そのプロトコルデータが該当ステップ番号と等しいステップ番号を持つ場合、送信者に対応する他候補をプロトコルデータ中の入力パケットにする。
(アルゴリズム4)
候補パケット記憶部25における空でない「入力候補」が(n−f)個以上あるとき、入力パケット確定判定部26は次の動作をする。
もし、(n−f)個以上の同一内容の「入力候補」があれば、それを該当入力順序番号における入力パケットとして確定し、入力パケットジャーナル記憶部22に記憶し、入力受付キュー部1にそれがあれば削除し、アプリケーションプログラム3に配送し、該当入力順序番号を次に進め、該当ステップ番号を初期ステップ番号にし、候補パケット記憶部25を空にし、遅延記憶部28のすべてのフラグをリセットする。
それ以外で、もし、候補パケット記憶部25の中で過半数以上の同一内容の「入力候補」があれば、該当ステップ番号を次に進め、候補パケット記憶部25における自候補をその入力パケットにし、他候補を空にし、候補種類のプロトコルデータを他のすべてのコンピュータに送信する。
さらに、それ以外であれば、候補パケット記憶部25の中からランダムに入力パケットを選択し、該当ステップ番号を次に進め、候補パケット記憶部25における自候補をその入力パケットにし、他候補を空にし、候補種類のプロトコルデータを他のすべてのコンピュータに送信する。
(アルゴリズム5)
該当入力順序番号より小さい入力順序番号を持つ候補種類のプロトコルデータを受信した場合で、その入力順序番号に対応する入力データが入力パケットジャーナル記憶部22にある場合、確定種類のプロトコルデータを送信者のコンピュータに返信する。
(アルゴリズム6)
該当入力順序番号に一致する入力順序番号を持つ確定種類のプロトコルデータを受信した場合、それを該当入力順序番号における入力パケットとして確定し、入力パケットジャーナル記憶部26に記憶し、入力受付キュー部1にそれがあれば削除し、アプリケーションプログラム3に配送し、該当入力順序番号を次に進め、該当ステップ番号を初期ステップ番号にし、候補パケット記憶部を空にし、遅延記憶部28のすべてのフラグをリセットする。
(アルゴリズム7)
該当入力順序番号より小さい入力順序番号を持つ候補種類のプロトコルデータを受信した場合で、その入力順序番号に対応する入力データが入力パケットジャーナル記憶部22にない場合、遅延種類のプロトコルデータを送信者のコンピュータに返信する。
(アルゴリズム8)
該当入力順序番号に一致する入力順序番号を持つ遅延種類のプロトコルデータを受信した場合に、遅延記憶部28における送信者に対応するフラグをセットする。
(アルゴリズム9)
遅延記憶部28においてフラグがたっている数と、それ以外で候補パケット記憶部25における空でない入力候補数の和が(n−f)以上であるときで、候補パケット記憶部25における空でない入力候補数が(n−f)個未満であるときに、スキップ判定部29は、以下のスキップ動作を行う。
スキップ動作は、該当入力順序番号を該当最大確定入力順序番号にし、該当ステップ番号を初期ステップ番号にし、候補パケット記憶部25を空にし、遅延記憶部28のすべてのフラグをリセットし、プログラム状態管理部4にスキップを通知する。
なお、以上の(アルゴリズム1)〜(アルゴリズム9)の順序は、必ずしもこの順序で実行されるというものではない。つまり、これらは、その条件が成立すれば独立して実行されるものである。
また、プログラム状態管理部4は、スキップが通知されると、該当入力順序番号の直前の状態を他のコンピュータのプログラム状態管理部4からコピーする。このために、プログラム状態管理部4は、各入力順序番号の直前の状態を最近のものから一定の量だけ保持している。
ここで、上述したアルゴリズムの動作の概要を説明しながら、このアルゴリズムの有効性を証明する。
(アルゴリズム1)〜(アルゴリズム4)は、整列マルチキャストの1回の配送を行う基本的な部分である。従来では、故障していない全コンピュータで一致するまで繰り返していたのに対して、この分散システムでは、(n−f)台で一致するまで繰り返す。
また、(アルゴリズム5)〜(アルゴリズム6)は、短い多重化実行の遅延を解消するため、すでに確定している入力パケットを回送するものである。
そして、(アルゴリズム7)〜(アルゴリズム9)は、長い多重化実行の遅延を一足飛びに解消するため、スキップ動作を行うものである。
まず、(アルゴリズム1)〜(アルゴリズム6)が整列マルチキャストの要件を満たすことを説明する。これには、各入力順序番号で同一の入力パケットが確定されることを示せばよい。
入力パケットを確定するのは、(アルゴリズム4)か(アルゴリズム6)であるが、(アルゴリズム6)の場合は、確定した入力パケットを回送したものなので、最初に(アルゴリズム4)によって入力パケットを確定したコンピュータが必ず存在する。確定した時の入力パケットをP、ステップ番号をSとする。
まず、ステップS+1では、すべてのコンピュータで「入力候補」はP以外にはあり得ないことを示す。
自分の「入力候補」を決定するのは、(アルゴリズム1)、(アルゴリズム2)または(アルゴリズム4)であるが、ステップ番号Sは初期ステップ番号ではあり得ないので、ステップS+1での「入力候補」は、(アルゴリズム2)か(アルゴリズム4)で決定される。(アルゴリズム2)は「入力候補」を回送したものなので、結局、(アルゴリズム4)で決定するステップS+1での「入力候補」がP以外にはあり得ないことを示せばよい。
ステップS+1での「入力候補」を(アルゴリズム4)で決定するには、ステップSでの「入力候補」が(n−f)個必要である。この集合をXとする。一方、ステップSでは、(アルゴリズム4)によって入力パケットを確定したコンピュータがあるのだから、少なくとも(n−f)個の「入力候補」がPである。この集合をYとする。すると、
Xの要素数≧n−f
Yの要素数≧n−f
X∪Yの要素数≦n
Xの要素数−X∩Yの要素数=X∪Yの要素数−Yの要素数≦n−(n−f)=f
となり、XのうちPでないのは、多くともf個しかない。後は、fがXの中で半数未満であることがいえれば、Xの中でPが過半数を占めることになり、(アルゴリズム4)によってPに決定することがわかる。ここで、
Xの要素数−2f≧(n−f)−2f=n−3f
となり、前述の通り、n−3f>0であるから、これが証明される。
結局、ステップS+1では、すべてのコンピュータで「入力候補」はP以外にはあり得ないのだから、この入力順序番号で確定するとすれば、必ずPで確定することになる。これで、整列マルチキャストの要件を満たすことが証明された。
次に、(アルゴリズム5)〜(アルゴリズム9)で行う遅延の解消について説明する。
この遅延は、(n−f)台よりも多い台数で多重化を実行している場合に発生する。遅延しているコンピュータは、その時点では多重化として不要であるが、進んでいるコンピュータが故障停止した場合などに、多重化を継続するために必要になる。つまり、その場合には、遅延しているコンピュータは、最終入力順序番号まで追いつかなければならない。
(アルゴリズム5)〜(アルゴリズム6)で行う短い多重化実行の遅延の解消は、単純に、進んでいるコンピュータで確定した入力パケットを回送する。入力パケットの到着順序は同じになるので、整列マルチキャストの要件は満たされている。
一方、(アルゴリズム7)〜(アルゴリズム9)で行う長い多重化実行の遅延の解消は、いわゆる「おいてけぼり」の概念を用いる。「おいてけぼり」は、進んでいるコンピュータが確定した入力パケットを忘れてしまうほど長く遅延したときに発生する。そして、この「おいてけぼり」が判定されると、スキップ動作が行われる。スキップ動作では、入力順序番号をスキップするので、入力パケットの系列が中抜けになり、整列マルチキャストの要件を満たさなくなる。
そこで、この中抜けになった入力パケットの系列を補うため、プログラム状態管理部4により一致化コピーを行う。これによって、多重化は矛盾なく続行することができる。
次に、信頼性のないデータグラムとの関係に触れる。
出力に関しては、信頼性のないデータグラムなので、出力フィルタ部5の動作は任意でよい。たとえば、無選別で出力すると、出力パケットが多重化を実行するコンピュータの数だけ出力されることになるが、信頼性のないデータグラムでは、パケットの重複を許すので、この範囲内である。
また、この分散システムでは、多重化実行の遅延が発生するため、特に出力パケットに関して順序の交換が発生する可能性がある。これは、進んでいるコンピュータが出力した後、遅延しているコンピュータが意味的にはそれ以前の出力を実行するためである。
しかしながら、性能面などにおいて、出力フィルタ部5の設定は重要であり、たとえば、(アルゴリズム4)で入力パケットが確定したときは、出力フィルタを開、(アルゴリズム6)で入力パケットが確定したときは、出力フィルタを閉と設定すれば、順序の交換を低減することができる。また、(アルゴリズム4)で入力パケットが確定し、その入力パケットが入力受付キュー1から取り除かれた場合にのみ、出力フィルタを開、それ以外では閉とすれば、重複を低減することができる。
すなわち、この分散システムは、すくなくともn−f台のコンピュータが動作していれば、他のf台の動作に関係なく入力をそれらに配送することにより、整列マルチキャストを故障検出を使わないで実現し、特に、故障発生時でも、配送の中断が発生しない。
また、最大でf台のコンピュータで、プログラムの多重化の実行が遅延する可能性があることを考慮し、この遅延された実行がスプリットブレインを起こさないように追い付く仕組みを実現する。
次に、図5乃至図10を参照して、整列マルチキャスト部2の動作手順について説明する。
図5および図6は、整列マルチキャストの1回の配送を行う基本的な部分の動作手順を示すフローチャートである。
整列マルチキャスト部2は、まず、候補一覧作成処理を実行する(図5のステップA1)。この候補一覧作成は、該当ステップ番号が初期値のときは(図6のステップB1のYES)、受付キューに入力パケットが存在するかどうかを調べて(図6のステップB2)、存在すれば(図6のステップB2のYES)、該当ステップ番号を次に進め(図6のステップB3)、受付キューの入力パケットを自候補とし、かつ、この自候補を他のすべてのコンピュータに送信する(図6のステップB4)。
一方、該当ステップ番号が初期値でないか(図6のステップB1のNO)、または受付キューに入力パケットがないとき(図6のステップB2のNO)、整列マルチキャスト部2は、同一の入力順序番号を持つプロトコルデータを受信しているかどうか判定し(図6のステップB5)、受信していれば(図6のステップB5のYES)、今度は、受信データ内のステップ番号は該当ステップ番号よりも大きいかどうかを判定する(図6のステップB6)。そして、該当ステップ番号よりも大きければ(図6のステップB6のYES)、整列マルチキャスト部2は、該当ステップを受信データ内のステップ番号に更新した後(図6のステップB7)、受信データ内の入力パケットを自候補とし、かつ、この自候補を他のすべてのコンピュータに送信する(図6のステップB8)。このとき、整列マルチキャスト部2は、この入力パケットを他候補として記憶しておく。また、受信データ内のステップ番号と該当ステップ番号とが等しければ(図6のステップB6のNO,ステップB9のYES)、受信データ内の入力パケットを他候補として記憶する(図6のステップB10)。
ここで、整列マルチキャスト部2は、記憶した候補数が(n−f)個以上になったかどうかを調べ(図6のステップB11)、なっていなければ(図6のステップB11のNO)、ステップB1からの処理を繰り返し、なっていれば(図6のステップB11のYES)、この処理を終了する。
候補一覧作成処理が終了すると、整列マルチキャスト部2は、(n−f)個以上の同一の候補が存在するかどうかを調べ(図5のステップA2)、存在すれば(図5のステップA2のYES)、その候補を入力パケットとして確定する(図5のステップA3)。つまり、この入力パケットを受付キューから削除するとともに、アプリケーションプログラム3に投入する。そして、整列マルチキャスト部2は、次工程へ移行すべく、入力順序番号を次に進め、該当ステップ番号を初期化し、記憶したすべての候補を破棄し、遅延フラグをリセットする(図5のステップA4)。
一方、(n−f)個以上の同一の候補が存在しなかった場合(図5のステップA2)、整列マルチキャスト部2は、今度は、過半数以上の同一の候補が存在するかどうかを調べ(図5のステップA5のYES)、存在すれば(図5のステップA5のYES)、その候補を自候補とし、かつ、この自候補を他のすべてのコンピュータに送信した上で(図5のステップA6)、ステップA1からの処理を繰り返す。この時、整列マルチキャスト部2は、記憶していた他候補をすべて破棄する。また、過半数以上の同一の候補が存在しなければ(図5のステップA5のNO)、整列マルチキャスト部2は、ランダムに自候補を選択し、かつ、この自候補を他のすべてのコンピュータに送信した上で(図5のステップA7)、ステップA1からの処理を繰り返す。この時も、整列マルチキャスト部2は、記憶していた他候補をすべて破棄する。
以上の手順で、各コンピュータは、故障検知を行わず、(n−f)台以上の一致を確認しながら処理を進めていく。
また、図7乃至図10は、多重化実行の遅延を解消するための動作手順を示すフローチャートである。
整列マルチキャスト部2は、該当入力順序番号より小さい入力順序番号を持つ候補種類のプロトコルデータを受信した場合、その入力順序番号に対応する入力パケットがジャーナルに存在するかどうかを調べる(図7のステップC1)。そして、整列マルチキャスト部2は、ジャーナルに存在すれば(図7のステップC1のYES)、その入力パケットをセットした確定種類のプロトコルデータを送信者に返送し(図7のステップC2)、一方、存在しなければ(図7のステップC1のNO)、遅延種類のプロトコルデータを送信者に返送する(図7のステップC3)。
また、整列マルチキャスト部2は、該当入力順序番号に一致する入力番号を持つ確定種類のプロトコルデータを受信した場合、その受信データ内の入力パケットを入力パケットとして確定する(図8のステップD1)。つまり、この入力パケットを受付キューから削除するとともに、アプリケーションプログラム3に投入する。そして、整列マルチキャスト部2は、次工程へ移行すべく、入力順序番号を次に進め、該当ステップ番号を初期化し、記憶したすべての候補を破棄し、遅延フラグをリセットする(図8のステップD2)。
また、整列マルチキャスト部2は、該当入力順序番号に一致する入力順序番号を持つ遅延種類のプロトコルデータを受信した場合、送信者に対応する遅延フラグをセットする(図9のステップE1)。
また、整列マルチキャスト部2は、セットされた遅延フラグ数と記憶された候補数との和が(n−f)個以上に達したかどうかを監視し(図10のステップF1)、(n−f)個以上に達していれば(図10のステップF1のYES)、その記憶された候補数が(n−f)個未満かどうかを調べる(図10のステップF2)。そして、(n−f)個未満であれば(図10のステップF2のYES)、整列マルチキャスト部2は、スキップ動作を行なう(図10のステップF3)。つまり、該当入力順序番号を該当最大確定入力順序番号にし、該当ステップ番号を初期ステップ番号にし、候補パケット記憶部25を空にし、遅延記憶部28のすべてのフラグをリセットした上で、プログラム状態管理部4にスキップを通知する。
以上の手順で、各コンピュータは、スプリットブレインを起こさないよう、遅延された実行が追い付く仕組みを実現する。
(第2実施形態)
次に、この発明の第2実施形態について説明する。
第1実施形態で説明したような整列マルチキャストを行う分散システムでは、すべてのコンピュータ100が同じ時刻を用いてアプリケーションプログラム3を実行することが必要である。つまり、アプリケーションプログラム3の実行時に用いる時刻をすべてのコンピュータ100間で調整する機能が必要である。そこで、第2実施形態では、整列マルチキャストを行う分散システムにおいて、このアプリケーションプログラム3の実行時に用いる時刻をすべてのコンピュータ100間で調整する仕組みを説明する。
図11は、アプリケーションプログラム3の実行時に用いる時刻をすべてのコンピュータ100間で調整する仕組みを説明するための概念図である。
図11に示すように、分散システム1000を構成するn台のコンピュータ100は、それぞれ実時計101、つまりシステム時計を有しており、この実時計101により、システム時刻をカウントしている。そして、従来では、この実時計101をn台のコンピュータ100間で如何に調整するかについて、種々の工夫がなされてきた。すなわち、従来では、アプリケーションプログラム3の実行時に用いる時刻は、依然として、各々の実時計101でカウントされるシステム時刻であった。これに対して、この実施形態の分散システム1000では、これらの実時計101とは別に、システム全体で仮想時計102を管理し、この仮想時計102がカウントする仮想時刻102を用いてアプリケーションプログラム3を実行する。
図12は、この仮想時刻102がカウントする仮想時刻を管理する原理を説明するためのコンピュータ100の構成図である。
図12に示すように、このコンピュータ100は、いわゆるシステム時刻を計数するシステム時計6(図11の実時計101に対応)の他に、アプリケーションプログラム3の実行時に用いる仮想時刻を計数する仮想時刻カウンタ7(図11の仮想時計102に対応)と、この仮想時刻カウンタ7を管理する仮想時刻マネージャ8とを備える。
仮想時刻マネージャ8は、たとえば1秒ごとに、この仮想時刻カウンタ7をインクリメントするタイミングを与えるための入力パケットを高い優先度を付して入力受付キュー部1に投入する。この入力パケットは、その優先度から直後の入力順序で整列マルチキャスト部2に取り込まれ、自コンピュータの入力候補である自候補となる。整列マルチキャスト部2の動作の結果、入力パケット確定判定部26が、この入力パケットを確定すると、このパケットを仮想時刻マネージャ8に投入する。
このとき、他のコンピュータ100においても、入力パケット確定判定部26は、この入力パケットを確定し、仮想時刻マネージャ8に投入する。
そして、この入力パケットの投入を受けた仮想時刻マネージャ8は、仮想時刻カウンタ7を所定の値(通常は1秒間)だけインクリメントする。
また、仮想時刻マネージャ8は、この入力パケットを入力受付キュー1から削除し、この時点から1秒後に入力受付キュー1に再投入するよう準備する。
このとき、他のコンピュータ100においても、仮想時刻マネージャ8は、入力受付キュー1にこのパケットがもし存在すれば、それを削除し、いずれにしても、この時点から1秒後に入力受付キュー1に再投入するよう準備する。
つまり、仮想時刻マネージャ8は、他の仮想時刻マネージャ8が投入した入力パケットが確定した場合でも、区別することなく、あたかも自分自身で入力パケットを投入し、それが確定したかのように動作し、その時点から1秒後まで入力パケットを投入しない。
これにより、すべてのコンピュータ100が同じタイミングで仮想時刻を計数していくことが実現される。
また、この仮想時刻マネージャ8は、コンピュータ100の起動時および例えば1時間ごとに、システム時刻と仮想時刻とを比較するタイミングを与えるための入力パケットを高い優先度を付して入力受付キュー部1に投入する。この時、仮想時刻マネージャ8は、この入力パケット内にシステム時計6が計数するシステム時刻を格納する。この入力パケットは、プロトコルデータ送受信部23によって他のコンピュータに送信されるため、結果的に、自コンピュータのシステム時刻が他のコンピュータに通知されることになる。同様に、他のコンピュータの仮想時刻マネージャ8がこの入力パケットを発生させた場合には、この入力パケットによって、他のコンピュータのシステム時刻の通知を受けることになる。
また、この入力パケットは、その優先度から直後の入力順序で整列マルチキャスト部2に取り込まれ、自コンピュータの入力候補である自候補となる。整列マルチキャスト部2の動作の結果、入力パケット確定判定部26が、この入力パケットを確定すると、このパケットを仮想時刻マネージャ8に投入する。このパケットの投入を受けると、仮想時刻マネージャ8は、この入力パケット内に格納された自コンピュータまたは他のコンピュータのシステム時刻と仮想時刻カウンタ7により計数された仮想時刻とを比較する。仮想時刻カウンタ7が未設定状態の場合、仮想時刻カウンタ7をシステム時刻に設定する。また、仮想時刻カウンタ7が未設定状態でなく、システム時刻の方が進んでいる場合には、仮想時刻マネージャ8は、仮想時刻を通常時よりも速く進めるための処理を行う。一つの例としては、先に説明した仮想時刻カウンタ7をインクリメントするタイミングを与えるための入力パケットが投入された際の仮想時刻カウンタ7のインクリメント幅を通常時よりも大きく設定するなどが挙げられる。
つまり、n台のコンピュータの中で最も進んだシステム時刻に合わせるように各コンピュータの仮想時刻を調整するわけであり、たとえn台のコンピュータのシステム時刻がばらばらであっても、各コンピュータがアプリケーションプログラム3の実行時に用いる仮想時刻を一致させることが実現される。
図13は、仮想時刻カウンタ7をインクリメントする動作手順を示すフローチャートである。
仮想時刻マネージャ8は、前回の仮想時刻カウンタ7のインクリメントから所定の時間が経過し(ステップG1のYES)、かつ、仮想時刻カウンタ7をインクリメントするタイミングを与えるための入力パケットを入力受付キュー部1に未投入のとき(ステップG2のYES)、当該入力パケットを入力受付キュー部1に投入する(ステップG3)。また、整列マルチキャスト実行により、この入力パケットが確定されると(ステップG4,ステップG5のYES)、仮想時刻マネージャ8は、仮想時刻カウンタ7を所定の値だけインクリメントし(ステップG6)、この入力パケットが入力受付キュー部1に存在していれば(ステップG7のYES)、その入力パケットを入力受付キュー部1から削除する(ステップG8)。
また、図14は、仮想時刻カウンタ7を調整する動作手順を示すフローチャートである。
仮想時刻マネージャ8は、前回の仮想時刻カウンタ7の自発的な調整から所定の時間が経過し(ステップH1のYES)、かつ、システム時刻と仮想時刻とを比較するタイミングを与えるための入力パケットを入力受付キュー部1に未投入のとき(ステップH2のYES)、当該入力パケットを入力受付キュー部1に投入する(ステップH3)。また、整列マルチキャスト実行により、この入力パケットが確定されると(ステップH4,ステップH5のYES)、仮想時刻マネージャ8は、入力パケット内のシステム時刻と仮想時刻カウンタ7の仮想時刻とを比較する(ステップH6)。そして、仮想時刻マネージャ8は、システム時刻の方が進んでいれば(ステップH7のYES)、仮想時刻カウンタ7のインクリメント幅を通常時よりも大きく設定し(ステップH8)、一方、仮想時刻の方が進んでいれば(ステップH7のNO)、仮想時刻カウンタ7のインクリメント幅を所定の値に再設定する(ステップH9)。
このように、この実施形態の分散システムでは、各コンピュータ100の実時計101とは別に、システム全体で仮想時計102を管理することにより、整列マルチキャストを行う分散システムにおいて、このアプリケーションプログラム3の実行時に用いる時刻をすべてのコンピュータ100間で調整する仕組みを実現する。
なお、ここでは、システム時刻と仮想時刻とを比較し、システム時刻の方が進んでいたときに、仮想時刻のインクリメント幅を通常時よりも大きくする例を説明した。このような場合、通常時の仮想時刻のインクリメント幅は、実時刻よりも少しずつ遅れていくように設定することが好ましい。これにより、仮想時計102がすべての実時計101よりも進む方向に無限にずれていくことを防止するとともに、実時間101と仮想時計102との誤差を事前に予想される範囲内に収めることが可能となる。逆に、システム時刻の方が遅れていたときに、仮想時刻のインクリメント幅を通常時よりも小さくする場合には、通常時の仮想時刻のインクリメント幅を実時刻よりも少しずつ進んでいくように設定すればよい。
ところで、この仮想時計102の管理は、前述した整列マルチキャストの機構を使ってすべてのコンピュータ100が各々行う必要は必ずしもない。例えば図15に示すように、いずれか1つのコンピュータ100上で管理し(A)、このコンピュータ100に障害が発生した場合に、その他のいずれか1つのコンピュータ100が引き継ぐようにしても構わない(B)。つまり、各コンピュータ100が各々の実時計101を用いてアプリケーションプログラム3を実行するのではなく、システム全体で仮想時計102を設定し、その1つの仮想時計102をすべてのコンピュータ100が用いてアプリケーションプログラム3を実行するという本発明の手法は、この仮想時計102をどのような方法で管理する場合であっても有用である。
つまり、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
1…入力受付キュー、2…整列マルチキャスト部、3…アプリケーションプログラム、4…プログラム状態管理部、5…出力フィルタ部、6…システム時計、7…仮想時刻カウンタ、8…仮想時刻マネージャ、21…入力順序番号記憶部、22…入力パケットジャーナル記憶部、23…プロトコルデータ送受信部、24…ステップ番号記憶部、25…候補パケット記憶部、26…入力パケット確定判定部、27…最大確定入力順序番号記憶部、28…遅延記憶部、29…スキップ判定部、100…コンピュータ、101…実時計、102…仮想時計、1000…分散システム、2000…クライアント装置、A…外部ネットワーク、B…内部ネットワーク。